Guide

Demo App

The KelyphosDemo application — 34 interactive HIG component pages and a full three-column example
Properties4
Is BaseNo
Iconi-lucide-monitor
Order60
Tags #demo #hig #components

KelyphosDemo is the companion application included in the Kelyphos repository. It demonstrates KelyphosKit in practice, serves as a visual HIG component catalogue, and ships a WidgetKit extension in all four sizes.

Running the Demo

# From the Kelyphos repository root
pixi run build
open ~/Library/Developer/Xcode/DerivedData/Kelyphos-*/Build/Products/Debug/KelyphosDemo.app

Or open Kelyphos.xcodeproj in Xcode and run the KelyphosDemo scheme on an iPad or Mac target.

Simulator targets
For iPadOS layout verification use iPad Pro 13-inch (M5). For macOS, run on the local machine directly. Both are wired up in the KelyphosDemo scheme.

Application Structure

KelyphosDemo is itself a KelyphosShellView app. Navigator tabs are sections of the HIG catalogue. The inspector shows component metadata. The utility area hosts settings and appearance controls.

KelyphosShellView(
    state: shellState,
    configuration: KelyphosShellConfiguration(
        navigatorTabs: Array(DemoNavigatorTab.allCases),
        inspectorTabs: Array(DemoInspectorTab.allCases),
        utilityTabs: Array(DemoUtilityTab.allCases),
        detail: { DemoContentView() }
    )
)
.commands { KelyphosCommands(state: shellState) }

HIG Component Pages (34 pages across 8 sections)

Components (8 pages)

Interactive demonstrations of macOS and iPadOS controls:

PageWhat it shows
ButtonsButton, .bordered, .borderedProminent, .plain, destructive styles
Context MenusRight-click menus, custom actions, conditional items
Dock MenusNSApplication.dockTile, dynamic Dock menu construction
Edit MenusUndo/redo, cut/copy/paste integration
MenusMenu, MenuButton, dynamic menu building
Popup ButtonsPicker with .menu style — single selection
Pulldown ButtonsMulti-action buttons with attached menu
ToolbarsToolbarItem, ToolbarItemGroup, flexible spacers

Presentation (7 pages)

Overlay and sheet patterns:

PageWhat it shows
Action Sheets.confirmationDialog — destructive confirmations
Alerts.alert — errors, warnings, informational
Page ControlsTabView paging, programmatic page selection
PanelsNon-modal floating panels via NSPanel
Popovers.popover attached to views, arrow direction
Scroll ViewsScrollView, LazyVStack, pinned headers
Sheets.sheet, .fullScreenCover, presentationDetents
PageWhat it shows
Path ControlsFile path display with NSPathControl
Search Fields.searchable, isSearching, debounced queries
Tab BarsTabView with .tabViewStyle(.sidebarAdaptable)
Token FieldsTag-style entry with token removal

Selection & Input (12 pages)

PageWhat it shows
Color WellsColorPicker, NSColorWell
Combo BoxesEditable ComboBox with suggestion list
Digit EntryNumeric TextField with formatters
Font ChooserKelyphosFontChooser — the built-in font picker
Image WellsDrag-and-drop image input via PhotosPicker
PickersPicker with .wheel, .segmented, .radioGroup
Segmented ControlsMulti-segment selection, mixed states
SlidersContinuous and discrete Slider, tick marks
SteppersStepper with bound value and format
Text FieldsTextField, SecureField, prompts, validation
TogglesToggle in checkbox, switch, and button styles
Virtual KeyboardOn-screen keyboard overlay

Status (3 pages)

PageWhat it shows
GaugesGauge — arc and linear, capacity style
Progress IndicatorsProgressView — determinate and indeterminate
Rating IndicatorsStar ratings using SF Symbols

System Experience (2 pages)

PageWhat it shows
NotificationsUserNotifications — authorization, scheduling, categories
WidgetsWidgetKit — live preview of all four widget sizes

Content (2 pages)

PageWhat it shows
ChartsSwift Charts — bar, line, area with annotations
Image ViewsAsyncImage, Image, phase-based loading states

Settings (1 page)

PageWhat it shows
Kelyphos SettingsKelyphosSettingsView — appearance, font, and keybinding controls

Togglable Content Column

The main demo window supports a togglable three-column layout. When enabled via Cmd+Shift+0 or the toolbar button, the navigator shows only section titles, and a content column appears between the navigator and detail showing the items within the selected section.

KelyphosShellConfiguration(
    navigatorTabs: DemoNavigatorTab.allCases.map { $0 },
    inspectorTabs: DemoInspectorTab.allCases.map { $0 },
    utilityTabs: DemoUtilityTab.allCases.map { $0 },
    content: { DemoContentColumnView() },
    detail: { DemoContentView() }
)

The content: builder adds a middle column between the navigator and the detail area — suitable for master/detail/detail layouts like mail, notes, or document browsers. Toggle with state.contentColumnVisible.

Desktop Widget

The KelyphosWidget extension ships with the demo. It displays in four sizes:

SizeContent
SmallFramework name + tagline
MediumName + primary feature highlights
LargeFull feature grid
Extra LargeExpanded feature grid with descriptions

Widget content is refreshed on a timeline provider. The widget is registered automatically by pixi run run via lsregister + pluginkit -a.

Adding the widget to Desktop
After launching KelyphosDemo, go to System Settings → Desktop & Dock → Widgets (or right-click the Desktop → Edit Widgets) and find "KelyphosDemo" in the gallery.