@moldable-ai/ui 0.2.18 → 0.2.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/catalog/catalog-manifest.d.ts +6 -0
- package/dist/catalog/catalog-manifest.d.ts.map +1 -0
- package/dist/catalog/catalog-manifest.js +105 -0
- package/dist/catalog/catalog-types.d.ts +54 -0
- package/dist/catalog/catalog-types.d.ts.map +1 -0
- package/dist/catalog/catalog-types.js +14 -0
- package/dist/catalog/component-catalog.d.ts +14 -0
- package/dist/catalog/component-catalog.d.ts.map +1 -0
- package/dist/catalog/component-catalog.js +39 -0
- package/dist/catalog/core-catalog.d.ts +6 -0
- package/dist/catalog/core-catalog.d.ts.map +1 -0
- package/dist/catalog/core-catalog.js +105 -0
- package/dist/catalog/index.d.ts +5 -0
- package/dist/catalog/index.d.ts.map +1 -0
- package/dist/catalog/index.js +4 -0
- package/dist/components/app-error-boundary.d.ts +1 -0
- package/dist/components/app-error-boundary.d.ts.map +1 -1
- package/dist/components/app-error-boundary.js +13 -0
- package/dist/components/chat/chat-image-lightbox.d.ts +9 -0
- package/dist/components/chat/chat-image-lightbox.d.ts.map +1 -0
- package/dist/components/chat/chat-image-lightbox.js +9 -0
- package/dist/components/chat/chat-message.d.ts +19 -1
- package/dist/components/chat/chat-message.d.ts.map +1 -1
- package/dist/components/chat/chat-message.js +66 -16
- package/dist/components/chat/chat-messages.d.ts +5 -2
- package/dist/components/chat/chat-messages.d.ts.map +1 -1
- package/dist/components/chat/chat-messages.js +61 -6
- package/dist/components/chat/chat-panel.d.ts +67 -17
- package/dist/components/chat/chat-panel.d.ts.map +1 -1
- package/dist/components/chat/chat-panel.js +250 -159
- package/dist/components/chat/conversation-history.d.ts +39 -5
- package/dist/components/chat/conversation-history.d.ts.map +1 -1
- package/dist/components/chat/conversation-history.js +192 -26
- package/dist/components/chat/index.d.ts +3 -2
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +3 -2
- package/dist/components/chat/model-effort-power-effects.d.ts +7 -0
- package/dist/components/chat/model-effort-power-effects.d.ts.map +1 -0
- package/dist/components/chat/model-effort-power-effects.js +54 -0
- package/dist/components/chat/model-effort-selector.d.ts +26 -0
- package/dist/components/chat/model-effort-selector.d.ts.map +1 -0
- package/dist/components/chat/model-effort-selector.js +179 -0
- package/dist/components/chat/model-effort-ultra-effects.d.ts +5 -0
- package/dist/components/chat/model-effort-ultra-effects.d.ts.map +1 -0
- package/dist/components/chat/model-effort-ultra-effects.js +56 -0
- package/dist/components/chat/tool-handlers.d.ts.map +1 -1
- package/dist/components/chat/tool-handlers.js +40 -2
- package/dist/components/chat/vertical-scroll-fade.d.ts +6 -0
- package/dist/components/chat/vertical-scroll-fade.d.ts.map +1 -0
- package/dist/components/chat/vertical-scroll-fade.js +12 -0
- package/dist/components/hardware/bluetooth-panel-helpers.d.ts +9 -0
- package/dist/components/hardware/bluetooth-panel-helpers.d.ts.map +1 -0
- package/dist/components/hardware/bluetooth-panel-helpers.js +37 -0
- package/dist/components/hardware/bluetooth-panel.d.ts +56 -0
- package/dist/components/hardware/bluetooth-panel.d.ts.map +1 -0
- package/dist/components/hardware/bluetooth-panel.js +470 -0
- package/dist/components/hardware/camera-preview.d.ts +39 -0
- package/dist/components/hardware/camera-preview.d.ts.map +1 -0
- package/dist/components/hardware/camera-preview.js +228 -0
- package/dist/components/hardware/capability-badge.d.ts +23 -0
- package/dist/components/hardware/capability-badge.d.ts.map +1 -0
- package/dist/components/hardware/capability-badge.js +39 -0
- package/dist/components/hardware/capability-matrix.d.ts +14 -0
- package/dist/components/hardware/capability-matrix.d.ts.map +1 -0
- package/dist/components/hardware/capability-matrix.js +97 -0
- package/dist/components/hardware/clipboard-button.d.ts +26 -0
- package/dist/components/hardware/clipboard-button.d.ts.map +1 -0
- package/dist/components/hardware/clipboard-button.js +114 -0
- package/dist/components/hardware/device-io-controls.d.ts +4 -0
- package/dist/components/hardware/device-io-controls.d.ts.map +1 -0
- package/dist/components/hardware/device-io-controls.js +28 -0
- package/dist/components/hardware/device-list.d.ts +20 -0
- package/dist/components/hardware/device-list.d.ts.map +1 -0
- package/dist/components/hardware/device-list.js +14 -0
- package/dist/components/hardware/display-map.d.ts +23 -0
- package/dist/components/hardware/display-map.d.ts.map +1 -0
- package/dist/components/hardware/display-map.js +114 -0
- package/dist/components/hardware/haptic-button.d.ts +26 -0
- package/dist/components/hardware/haptic-button.d.ts.map +1 -0
- package/dist/components/hardware/haptic-button.js +94 -0
- package/dist/components/hardware/hardware-panel.d.ts +11 -0
- package/dist/components/hardware/hardware-panel.d.ts.map +1 -0
- package/dist/components/hardware/hardware-panel.js +28 -0
- package/dist/components/hardware/hid-panel.d.ts +40 -0
- package/dist/components/hardware/hid-panel.d.ts.map +1 -0
- package/dist/components/hardware/hid-panel.js +373 -0
- package/dist/components/hardware/index.d.ts +27 -0
- package/dist/components/hardware/index.d.ts.map +1 -0
- package/dist/components/hardware/index.js +26 -0
- package/dist/components/hardware/live-indicator.d.ts +15 -0
- package/dist/components/hardware/live-indicator.d.ts.map +1 -0
- package/dist/components/hardware/live-indicator.js +26 -0
- package/dist/components/hardware/local-auth-button.d.ts +33 -0
- package/dist/components/hardware/local-auth-button.d.ts.map +1 -0
- package/dist/components/hardware/local-auth-button.js +115 -0
- package/dist/components/hardware/location-panel.d.ts +29 -0
- package/dist/components/hardware/location-panel.d.ts.map +1 -0
- package/dist/components/hardware/location-panel.js +154 -0
- package/dist/components/hardware/microphone-meter.d.ts +35 -0
- package/dist/components/hardware/microphone-meter.d.ts.map +1 -0
- package/dist/components/hardware/microphone-meter.js +244 -0
- package/dist/components/hardware/midi-monitor.d.ts +54 -0
- package/dist/components/hardware/midi-monitor.d.ts.map +1 -0
- package/dist/components/hardware/midi-monitor.js +534 -0
- package/dist/components/hardware/notification-panel.d.ts +24 -0
- package/dist/components/hardware/notification-panel.d.ts.map +1 -0
- package/dist/components/hardware/notification-panel.js +124 -0
- package/dist/components/hardware/power-blocker-controller.d.ts +19 -0
- package/dist/components/hardware/power-blocker-controller.d.ts.map +1 -0
- package/dist/components/hardware/power-blocker-controller.js +83 -0
- package/dist/components/hardware/power-panel.d.ts +67 -0
- package/dist/components/hardware/power-panel.d.ts.map +1 -0
- package/dist/components/hardware/power-panel.js +309 -0
- package/dist/components/hardware/readout.d.ts +10 -0
- package/dist/components/hardware/readout.d.ts.map +1 -0
- package/dist/components/hardware/readout.js +11 -0
- package/dist/components/hardware/screen-share-preview.d.ts +36 -0
- package/dist/components/hardware/screen-share-preview.d.ts.map +1 -0
- package/dist/components/hardware/screen-share-preview.js +191 -0
- package/dist/components/hardware/secure-storage-panel.d.ts +36 -0
- package/dist/components/hardware/secure-storage-panel.d.ts.map +1 -0
- package/dist/components/hardware/secure-storage-panel.js +193 -0
- package/dist/components/hardware/serial-console.d.ts +64 -0
- package/dist/components/hardware/serial-console.d.ts.map +1 -0
- package/dist/components/hardware/serial-console.js +399 -0
- package/dist/components/hardware/shortcut-recorder.d.ts +35 -0
- package/dist/components/hardware/shortcut-recorder.d.ts.map +1 -0
- package/dist/components/hardware/shortcut-recorder.js +217 -0
- package/dist/components/hardware/stream-log.d.ts +35 -0
- package/dist/components/hardware/stream-log.d.ts.map +1 -0
- package/dist/components/hardware/stream-log.js +65 -0
- package/dist/components/hardware/system-audio-monitor.d.ts +34 -0
- package/dist/components/hardware/system-audio-monitor.d.ts.map +1 -0
- package/dist/components/hardware/system-audio-monitor.js +275 -0
- package/dist/components/hardware/usb-panel.d.ts +54 -0
- package/dist/components/hardware/usb-panel.d.ts.map +1 -0
- package/dist/components/hardware/usb-panel.js +363 -0
- package/dist/components/hardware/use-capability.d.ts +20 -0
- package/dist/components/hardware/use-capability.d.ts.map +1 -0
- package/dist/components/hardware/use-capability.js +61 -0
- package/dist/components/native-capabilities/bluetooth-panel-helpers.d.ts +9 -0
- package/dist/components/native-capabilities/bluetooth-panel-helpers.d.ts.map +1 -0
- package/dist/components/native-capabilities/bluetooth-panel-helpers.js +37 -0
- package/dist/components/native-capabilities/bluetooth-panel.d.ts +56 -0
- package/dist/components/native-capabilities/bluetooth-panel.d.ts.map +1 -0
- package/dist/components/native-capabilities/bluetooth-panel.js +470 -0
- package/dist/components/native-capabilities/camera-preview.d.ts +39 -0
- package/dist/components/native-capabilities/camera-preview.d.ts.map +1 -0
- package/dist/components/native-capabilities/camera-preview.js +228 -0
- package/dist/components/native-capabilities/capability-badge.d.ts +23 -0
- package/dist/components/native-capabilities/capability-badge.d.ts.map +1 -0
- package/dist/components/native-capabilities/capability-badge.js +39 -0
- package/dist/components/native-capabilities/capability-matrix.d.ts +14 -0
- package/dist/components/native-capabilities/capability-matrix.d.ts.map +1 -0
- package/dist/components/native-capabilities/capability-matrix.js +97 -0
- package/dist/components/native-capabilities/clipboard-button.d.ts +26 -0
- package/dist/components/native-capabilities/clipboard-button.d.ts.map +1 -0
- package/dist/components/native-capabilities/clipboard-button.js +99 -0
- package/dist/components/native-capabilities/device-io-controls.d.ts +4 -0
- package/dist/components/native-capabilities/device-io-controls.d.ts.map +1 -0
- package/dist/components/native-capabilities/device-io-controls.js +28 -0
- package/dist/components/native-capabilities/device-list.d.ts +20 -0
- package/dist/components/native-capabilities/device-list.d.ts.map +1 -0
- package/dist/components/native-capabilities/device-list.js +14 -0
- package/dist/components/native-capabilities/display-map.d.ts +23 -0
- package/dist/components/native-capabilities/display-map.d.ts.map +1 -0
- package/dist/components/native-capabilities/display-map.js +114 -0
- package/dist/components/native-capabilities/haptic-button.d.ts +26 -0
- package/dist/components/native-capabilities/haptic-button.d.ts.map +1 -0
- package/dist/components/native-capabilities/haptic-button.js +94 -0
- package/dist/components/native-capabilities/hid-panel.d.ts +40 -0
- package/dist/components/native-capabilities/hid-panel.d.ts.map +1 -0
- package/dist/components/native-capabilities/hid-panel.js +373 -0
- package/dist/components/native-capabilities/index.d.ts +27 -0
- package/dist/components/native-capabilities/index.d.ts.map +1 -0
- package/dist/components/native-capabilities/index.js +26 -0
- package/dist/components/native-capabilities/live-indicator.d.ts +15 -0
- package/dist/components/native-capabilities/live-indicator.d.ts.map +1 -0
- package/dist/components/native-capabilities/live-indicator.js +26 -0
- package/dist/components/native-capabilities/local-auth-button.d.ts +33 -0
- package/dist/components/native-capabilities/local-auth-button.d.ts.map +1 -0
- package/dist/components/native-capabilities/local-auth-button.js +115 -0
- package/dist/components/native-capabilities/location-panel.d.ts +29 -0
- package/dist/components/native-capabilities/location-panel.d.ts.map +1 -0
- package/dist/components/native-capabilities/location-panel.js +146 -0
- package/dist/components/native-capabilities/microphone-meter.d.ts +35 -0
- package/dist/components/native-capabilities/microphone-meter.d.ts.map +1 -0
- package/dist/components/native-capabilities/microphone-meter.js +244 -0
- package/dist/components/native-capabilities/midi-monitor.d.ts +54 -0
- package/dist/components/native-capabilities/midi-monitor.d.ts.map +1 -0
- package/dist/components/native-capabilities/midi-monitor.js +534 -0
- package/dist/components/native-capabilities/native-capability-panel.d.ts +11 -0
- package/dist/components/native-capabilities/native-capability-panel.d.ts.map +1 -0
- package/dist/components/native-capabilities/native-capability-panel.js +28 -0
- package/dist/components/native-capabilities/notification-panel.d.ts +24 -0
- package/dist/components/native-capabilities/notification-panel.d.ts.map +1 -0
- package/dist/components/native-capabilities/notification-panel.js +124 -0
- package/dist/components/native-capabilities/power-blocker-controller.d.ts +19 -0
- package/dist/components/native-capabilities/power-blocker-controller.d.ts.map +1 -0
- package/dist/components/native-capabilities/power-blocker-controller.js +83 -0
- package/dist/components/native-capabilities/power-panel.d.ts +67 -0
- package/dist/components/native-capabilities/power-panel.d.ts.map +1 -0
- package/dist/components/native-capabilities/power-panel.js +309 -0
- package/dist/components/native-capabilities/readout.d.ts +10 -0
- package/dist/components/native-capabilities/readout.d.ts.map +1 -0
- package/dist/components/native-capabilities/readout.js +11 -0
- package/dist/components/native-capabilities/screen-share-preview.d.ts +36 -0
- package/dist/components/native-capabilities/screen-share-preview.d.ts.map +1 -0
- package/dist/components/native-capabilities/screen-share-preview.js +191 -0
- package/dist/components/native-capabilities/secure-storage-panel.d.ts +36 -0
- package/dist/components/native-capabilities/secure-storage-panel.d.ts.map +1 -0
- package/dist/components/native-capabilities/secure-storage-panel.js +193 -0
- package/dist/components/native-capabilities/serial-console.d.ts +64 -0
- package/dist/components/native-capabilities/serial-console.d.ts.map +1 -0
- package/dist/components/native-capabilities/serial-console.js +399 -0
- package/dist/components/native-capabilities/shortcut-recorder.d.ts +35 -0
- package/dist/components/native-capabilities/shortcut-recorder.d.ts.map +1 -0
- package/dist/components/native-capabilities/shortcut-recorder.js +217 -0
- package/dist/components/native-capabilities/stream-log.d.ts +35 -0
- package/dist/components/native-capabilities/stream-log.d.ts.map +1 -0
- package/dist/components/native-capabilities/stream-log.js +65 -0
- package/dist/components/native-capabilities/system-audio-monitor.d.ts +34 -0
- package/dist/components/native-capabilities/system-audio-monitor.d.ts.map +1 -0
- package/dist/components/native-capabilities/system-audio-monitor.js +275 -0
- package/dist/components/native-capabilities/usb-panel.d.ts +54 -0
- package/dist/components/native-capabilities/usb-panel.d.ts.map +1 -0
- package/dist/components/native-capabilities/usb-panel.js +363 -0
- package/dist/components/native-capabilities/use-capability.d.ts +20 -0
- package/dist/components/native-capabilities/use-capability.d.ts.map +1 -0
- package/dist/components/native-capabilities/use-capability.js +61 -0
- package/dist/components/ui/app-frame.d.ts +22 -0
- package/dist/components/ui/app-frame.d.ts.map +1 -0
- package/dist/components/ui/app-frame.js +56 -0
- package/dist/components/ui/button-group.d.ts +1 -1
- package/dist/components/ui/button.js +1 -1
- package/dist/components/ui/color-well.d.ts +13 -0
- package/dist/components/ui/color-well.d.ts.map +1 -0
- package/dist/components/ui/color-well.js +30 -0
- package/dist/components/ui/date-field.d.ts +19 -0
- package/dist/components/ui/date-field.d.ts.map +1 -0
- package/dist/components/ui/date-field.js +54 -0
- package/dist/components/ui/edge-fade.d.ts +11 -0
- package/dist/components/ui/edge-fade.d.ts.map +1 -0
- package/dist/components/ui/edge-fade.js +41 -0
- package/dist/components/ui/empty.js +1 -1
- package/dist/components/ui/field.d.ts +1 -1
- package/dist/components/ui/grid.d.ts +24 -0
- package/dist/components/ui/grid.d.ts.map +1 -0
- package/dist/components/ui/grid.js +234 -0
- package/dist/components/ui/icon-button.d.ts +15 -0
- package/dist/components/ui/icon-button.d.ts.map +1 -0
- package/dist/components/ui/icon-button.js +15 -0
- package/dist/components/ui/index.d.ts +19 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +19 -0
- package/dist/components/ui/inspector.d.ts +15 -0
- package/dist/components/ui/inspector.d.ts.map +1 -0
- package/dist/components/ui/inspector.js +26 -0
- package/dist/components/ui/kbd.d.ts +1 -1
- package/dist/components/ui/list.d.ts +24 -0
- package/dist/components/ui/list.d.ts.map +1 -0
- package/dist/components/ui/list.js +224 -0
- package/dist/components/ui/message-scroller-layout-stability.d.ts +33 -0
- package/dist/components/ui/message-scroller-layout-stability.d.ts.map +1 -0
- package/dist/components/ui/message-scroller-layout-stability.js +153 -0
- package/dist/components/ui/message-scroller.d.ts +11 -0
- package/dist/components/ui/message-scroller.d.ts.map +1 -0
- package/dist/components/ui/message-scroller.js +37 -0
- package/dist/components/ui/notification-dot.d.ts +4 -0
- package/dist/components/ui/notification-dot.d.ts.map +1 -0
- package/dist/components/ui/notification-dot.js +7 -0
- package/dist/components/ui/number-input.d.ts +16 -0
- package/dist/components/ui/number-input.d.ts.map +1 -0
- package/dist/components/ui/number-input.js +56 -0
- package/dist/components/ui/panel.d.ts +18 -0
- package/dist/components/ui/panel.d.ts.map +1 -0
- package/dist/components/ui/panel.js +40 -0
- package/dist/components/ui/popover.js +1 -1
- package/dist/components/ui/search-field.d.ts +19 -0
- package/dist/components/ui/search-field.d.ts.map +1 -0
- package/dist/components/ui/search-field.js +64 -0
- package/dist/components/ui/segmented-control.d.ts +21 -0
- package/dist/components/ui/segmented-control.d.ts.map +1 -0
- package/dist/components/ui/segmented-control.js +61 -0
- package/dist/components/ui/sidebar.js +1 -1
- package/dist/components/ui/slider.d.ts +4 -1
- package/dist/components/ui/slider.d.ts.map +1 -1
- package/dist/components/ui/slider.js +2 -2
- package/dist/components/ui/sonner.d.ts +4 -3
- package/dist/components/ui/sonner.d.ts.map +1 -1
- package/dist/components/ui/sonner.js +7 -6
- package/dist/components/ui/split-view.d.ts +11 -0
- package/dist/components/ui/split-view.d.ts.map +1 -0
- package/dist/components/ui/split-view.js +13 -0
- package/dist/components/ui/status.d.ts +13 -0
- package/dist/components/ui/status.d.ts.map +1 -0
- package/dist/components/ui/status.js +36 -0
- package/dist/components/ui/table.d.ts +11 -2
- package/dist/components/ui/table.d.ts.map +1 -1
- package/dist/components/ui/table.js +28 -6
- package/dist/components/ui/text.d.ts +17 -0
- package/dist/components/ui/text.d.ts.map +1 -0
- package/dist/components/ui/text.js +55 -0
- package/dist/components/ui/toggle.js +1 -1
- package/dist/components/ui/toolbar.d.ts +20 -0
- package/dist/components/ui/toolbar.d.ts.map +1 -0
- package/dist/components/ui/toolbar.js +52 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/lib/frame-lifecycle.d.ts +28 -0
- package/dist/lib/frame-lifecycle.d.ts.map +1 -1
- package/dist/lib/frame-lifecycle.js +84 -0
- package/dist/lib/native-capabilities/access.d.ts +13 -0
- package/dist/lib/native-capabilities/access.d.ts.map +1 -0
- package/dist/lib/native-capabilities/access.js +53 -0
- package/dist/lib/native-capabilities/bluetooth-access.d.ts +14 -0
- package/dist/lib/native-capabilities/bluetooth-access.d.ts.map +1 -0
- package/dist/lib/native-capabilities/bluetooth-access.js +43 -0
- package/dist/lib/native-capabilities/bluetooth-connection.d.ts +19 -0
- package/dist/lib/native-capabilities/bluetooth-connection.d.ts.map +1 -0
- package/dist/lib/native-capabilities/bluetooth-connection.js +88 -0
- package/dist/lib/native-capabilities/bluetooth-gatt.d.ts +7 -0
- package/dist/lib/native-capabilities/bluetooth-gatt.d.ts.map +1 -0
- package/dist/lib/native-capabilities/bluetooth-gatt.js +77 -0
- package/dist/lib/native-capabilities/bluetooth-internal.d.ts +10 -0
- package/dist/lib/native-capabilities/bluetooth-internal.d.ts.map +1 -0
- package/dist/lib/native-capabilities/bluetooth-internal.js +105 -0
- package/dist/lib/native-capabilities/bluetooth-native-fallback.d.ts +33 -0
- package/dist/lib/native-capabilities/bluetooth-native-fallback.d.ts.map +1 -0
- package/dist/lib/native-capabilities/bluetooth-native-fallback.js +214 -0
- package/dist/lib/native-capabilities/bluetooth-types.d.ts +85 -0
- package/dist/lib/native-capabilities/bluetooth-types.d.ts.map +1 -0
- package/dist/lib/native-capabilities/bluetooth-types.js +2 -0
- package/dist/lib/native-capabilities/bluetooth.d.ts +7 -0
- package/dist/lib/native-capabilities/bluetooth.d.ts.map +1 -0
- package/dist/lib/native-capabilities/bluetooth.js +4 -0
- package/dist/lib/native-capabilities/bridge.d.ts +23 -0
- package/dist/lib/native-capabilities/bridge.d.ts.map +1 -0
- package/dist/lib/native-capabilities/bridge.js +266 -0
- package/dist/lib/native-capabilities/capabilities.d.ts +7 -0
- package/dist/lib/native-capabilities/capabilities.d.ts.map +1 -0
- package/dist/lib/native-capabilities/capabilities.js +95 -0
- package/dist/lib/native-capabilities/clipboard.d.ts +11 -0
- package/dist/lib/native-capabilities/clipboard.d.ts.map +1 -0
- package/dist/lib/native-capabilities/clipboard.js +58 -0
- package/dist/lib/native-capabilities/device-io-errors.d.ts +11 -0
- package/dist/lib/native-capabilities/device-io-errors.d.ts.map +1 -0
- package/dist/lib/native-capabilities/device-io-errors.js +82 -0
- package/dist/lib/native-capabilities/displays.d.ts +38 -0
- package/dist/lib/native-capabilities/displays.d.ts.map +1 -0
- package/dist/lib/native-capabilities/displays.js +12 -0
- package/dist/lib/native-capabilities/global-shortcuts.d.ts +86 -0
- package/dist/lib/native-capabilities/global-shortcuts.d.ts.map +1 -0
- package/dist/lib/native-capabilities/global-shortcuts.js +351 -0
- package/dist/lib/native-capabilities/haptics.d.ts +25 -0
- package/dist/lib/native-capabilities/haptics.d.ts.map +1 -0
- package/dist/lib/native-capabilities/haptics.js +18 -0
- package/dist/lib/native-capabilities/hid-native.d.ts +26 -0
- package/dist/lib/native-capabilities/hid-native.d.ts.map +1 -0
- package/dist/lib/native-capabilities/hid-native.js +229 -0
- package/dist/lib/native-capabilities/hid.d.ts +52 -0
- package/dist/lib/native-capabilities/hid.d.ts.map +1 -0
- package/dist/lib/native-capabilities/hid.js +163 -0
- package/dist/lib/native-capabilities/index.d.ts +40 -0
- package/dist/lib/native-capabilities/index.d.ts.map +1 -0
- package/dist/lib/native-capabilities/index.js +21 -0
- package/dist/lib/native-capabilities/local-authentication.d.ts +32 -0
- package/dist/lib/native-capabilities/local-authentication.d.ts.map +1 -0
- package/dist/lib/native-capabilities/local-authentication.js +46 -0
- package/dist/lib/native-capabilities/location.d.ts +49 -0
- package/dist/lib/native-capabilities/location.d.ts.map +1 -0
- package/dist/lib/native-capabilities/location.js +114 -0
- package/dist/lib/native-capabilities/media-permissions.d.ts +28 -0
- package/dist/lib/native-capabilities/media-permissions.d.ts.map +1 -0
- package/dist/lib/native-capabilities/media-permissions.js +37 -0
- package/dist/lib/native-capabilities/media.d.ts +17 -0
- package/dist/lib/native-capabilities/media.d.ts.map +1 -0
- package/dist/lib/native-capabilities/media.js +104 -0
- package/dist/lib/native-capabilities/midi-access.d.ts +13 -0
- package/dist/lib/native-capabilities/midi-access.d.ts.map +1 -0
- package/dist/lib/native-capabilities/midi-access.js +68 -0
- package/dist/lib/native-capabilities/midi-internal.d.ts +12 -0
- package/dist/lib/native-capabilities/midi-internal.d.ts.map +1 -0
- package/dist/lib/native-capabilities/midi-internal.js +88 -0
- package/dist/lib/native-capabilities/midi-native-fallback.d.ts +27 -0
- package/dist/lib/native-capabilities/midi-native-fallback.d.ts.map +1 -0
- package/dist/lib/native-capabilities/midi-native-fallback.js +127 -0
- package/dist/lib/native-capabilities/midi-ports.d.ts +6 -0
- package/dist/lib/native-capabilities/midi-ports.d.ts.map +1 -0
- package/dist/lib/native-capabilities/midi-ports.js +115 -0
- package/dist/lib/native-capabilities/midi-types.d.ts +25 -0
- package/dist/lib/native-capabilities/midi-types.d.ts.map +1 -0
- package/dist/lib/native-capabilities/midi-types.js +1 -0
- package/dist/lib/native-capabilities/midi.d.ts +6 -0
- package/dist/lib/native-capabilities/midi.d.ts.map +1 -0
- package/dist/lib/native-capabilities/midi.js +3 -0
- package/dist/lib/native-capabilities/native-device-io.d.ts +28 -0
- package/dist/lib/native-capabilities/native-device-io.d.ts.map +1 -0
- package/dist/lib/native-capabilities/native-device-io.js +91 -0
- package/dist/lib/native-capabilities/native-device-lifecycle.d.ts +13 -0
- package/dist/lib/native-capabilities/native-device-lifecycle.d.ts.map +1 -0
- package/dist/lib/native-capabilities/native-device-lifecycle.js +40 -0
- package/dist/lib/native-capabilities/notifications.d.ts +38 -0
- package/dist/lib/native-capabilities/notifications.d.ts.map +1 -0
- package/dist/lib/native-capabilities/notifications.js +50 -0
- package/dist/lib/native-capabilities/power-session.d.ts +113 -0
- package/dist/lib/native-capabilities/power-session.d.ts.map +1 -0
- package/dist/lib/native-capabilities/power-session.js +264 -0
- package/dist/lib/native-capabilities/secure-storage.d.ts +36 -0
- package/dist/lib/native-capabilities/secure-storage.d.ts.map +1 -0
- package/dist/lib/native-capabilities/secure-storage.js +64 -0
- package/dist/lib/native-capabilities/serial-native.d.ts +23 -0
- package/dist/lib/native-capabilities/serial-native.d.ts.map +1 -0
- package/dist/lib/native-capabilities/serial-native.js +181 -0
- package/dist/lib/native-capabilities/serial.d.ts +76 -0
- package/dist/lib/native-capabilities/serial.d.ts.map +1 -0
- package/dist/lib/native-capabilities/serial.js +215 -0
- package/dist/lib/native-capabilities/system-audio.d.ts +127 -0
- package/dist/lib/native-capabilities/system-audio.d.ts.map +1 -0
- package/dist/lib/native-capabilities/system-audio.js +330 -0
- package/dist/lib/native-capabilities/types.d.ts +62 -0
- package/dist/lib/native-capabilities/types.d.ts.map +1 -0
- package/dist/lib/native-capabilities/types.js +27 -0
- package/dist/lib/native-capabilities/usb-native.d.ts +39 -0
- package/dist/lib/native-capabilities/usb-native.d.ts.map +1 -0
- package/dist/lib/native-capabilities/usb-native.js +217 -0
- package/dist/lib/native-capabilities/usb.d.ts +85 -0
- package/dist/lib/native-capabilities/usb.d.ts.map +1 -0
- package/dist/lib/native-capabilities/usb.js +225 -0
- package/dist/lib/native-hardware/bluetooth-access.d.ts +14 -0
- package/dist/lib/native-hardware/bluetooth-access.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-access.js +40 -0
- package/dist/lib/native-hardware/bluetooth-connection.d.ts +19 -0
- package/dist/lib/native-hardware/bluetooth-connection.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-connection.js +88 -0
- package/dist/lib/native-hardware/bluetooth-gatt.d.ts +7 -0
- package/dist/lib/native-hardware/bluetooth-gatt.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-gatt.js +77 -0
- package/dist/lib/native-hardware/bluetooth-internal.d.ts +10 -0
- package/dist/lib/native-hardware/bluetooth-internal.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-internal.js +105 -0
- package/dist/lib/native-hardware/bluetooth-native-fallback.d.ts +33 -0
- package/dist/lib/native-hardware/bluetooth-native-fallback.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-native-fallback.js +214 -0
- package/dist/lib/native-hardware/bluetooth-types.d.ts +85 -0
- package/dist/lib/native-hardware/bluetooth-types.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-types.js +2 -0
- package/dist/lib/native-hardware/bluetooth.d.ts +7 -0
- package/dist/lib/native-hardware/bluetooth.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth.js +4 -0
- package/dist/lib/native-hardware/bridge.d.ts +23 -0
- package/dist/lib/native-hardware/bridge.d.ts.map +1 -0
- package/dist/lib/native-hardware/bridge.js +266 -0
- package/dist/lib/native-hardware/capabilities.d.ts +7 -0
- package/dist/lib/native-hardware/capabilities.d.ts.map +1 -0
- package/dist/lib/native-hardware/capabilities.js +95 -0
- package/dist/lib/native-hardware/clipboard.d.ts +11 -0
- package/dist/lib/native-hardware/clipboard.d.ts.map +1 -0
- package/dist/lib/native-hardware/clipboard.js +55 -0
- package/dist/lib/native-hardware/device-io-errors.d.ts +11 -0
- package/dist/lib/native-hardware/device-io-errors.d.ts.map +1 -0
- package/dist/lib/native-hardware/device-io-errors.js +82 -0
- package/dist/lib/native-hardware/displays.d.ts +38 -0
- package/dist/lib/native-hardware/displays.d.ts.map +1 -0
- package/dist/lib/native-hardware/displays.js +12 -0
- package/dist/lib/native-hardware/global-shortcuts.d.ts +86 -0
- package/dist/lib/native-hardware/global-shortcuts.d.ts.map +1 -0
- package/dist/lib/native-hardware/global-shortcuts.js +351 -0
- package/dist/lib/native-hardware/haptics.d.ts +25 -0
- package/dist/lib/native-hardware/haptics.d.ts.map +1 -0
- package/dist/lib/native-hardware/haptics.js +18 -0
- package/dist/lib/native-hardware/hid-native.d.ts +26 -0
- package/dist/lib/native-hardware/hid-native.d.ts.map +1 -0
- package/dist/lib/native-hardware/hid-native.js +229 -0
- package/dist/lib/native-hardware/hid.d.ts +52 -0
- package/dist/lib/native-hardware/hid.d.ts.map +1 -0
- package/dist/lib/native-hardware/hid.js +160 -0
- package/dist/lib/native-hardware/index.d.ts +38 -0
- package/dist/lib/native-hardware/index.d.ts.map +1 -0
- package/dist/lib/native-hardware/index.js +20 -0
- package/dist/lib/native-hardware/local-authentication.d.ts +32 -0
- package/dist/lib/native-hardware/local-authentication.d.ts.map +1 -0
- package/dist/lib/native-hardware/local-authentication.js +46 -0
- package/dist/lib/native-hardware/location.d.ts +49 -0
- package/dist/lib/native-hardware/location.d.ts.map +1 -0
- package/dist/lib/native-hardware/location.js +114 -0
- package/dist/lib/native-hardware/media-permissions.d.ts +28 -0
- package/dist/lib/native-hardware/media-permissions.d.ts.map +1 -0
- package/dist/lib/native-hardware/media-permissions.js +37 -0
- package/dist/lib/native-hardware/media.d.ts +17 -0
- package/dist/lib/native-hardware/media.d.ts.map +1 -0
- package/dist/lib/native-hardware/media.js +99 -0
- package/dist/lib/native-hardware/midi-access.d.ts +13 -0
- package/dist/lib/native-hardware/midi-access.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-access.js +66 -0
- package/dist/lib/native-hardware/midi-internal.d.ts +12 -0
- package/dist/lib/native-hardware/midi-internal.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-internal.js +88 -0
- package/dist/lib/native-hardware/midi-native-fallback.d.ts +27 -0
- package/dist/lib/native-hardware/midi-native-fallback.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-native-fallback.js +127 -0
- package/dist/lib/native-hardware/midi-ports.d.ts +6 -0
- package/dist/lib/native-hardware/midi-ports.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-ports.js +115 -0
- package/dist/lib/native-hardware/midi-types.d.ts +25 -0
- package/dist/lib/native-hardware/midi-types.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-types.js +1 -0
- package/dist/lib/native-hardware/midi.d.ts +6 -0
- package/dist/lib/native-hardware/midi.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi.js +3 -0
- package/dist/lib/native-hardware/native-device-io.d.ts +28 -0
- package/dist/lib/native-hardware/native-device-io.d.ts.map +1 -0
- package/dist/lib/native-hardware/native-device-io.js +91 -0
- package/dist/lib/native-hardware/native-device-lifecycle.d.ts +13 -0
- package/dist/lib/native-hardware/native-device-lifecycle.d.ts.map +1 -0
- package/dist/lib/native-hardware/native-device-lifecycle.js +40 -0
- package/dist/lib/native-hardware/notifications.d.ts +38 -0
- package/dist/lib/native-hardware/notifications.d.ts.map +1 -0
- package/dist/lib/native-hardware/notifications.js +50 -0
- package/dist/lib/native-hardware/power-session.d.ts +113 -0
- package/dist/lib/native-hardware/power-session.d.ts.map +1 -0
- package/dist/lib/native-hardware/power-session.js +264 -0
- package/dist/lib/native-hardware/secure-storage.d.ts +36 -0
- package/dist/lib/native-hardware/secure-storage.d.ts.map +1 -0
- package/dist/lib/native-hardware/secure-storage.js +64 -0
- package/dist/lib/native-hardware/serial-native.d.ts +23 -0
- package/dist/lib/native-hardware/serial-native.d.ts.map +1 -0
- package/dist/lib/native-hardware/serial-native.js +181 -0
- package/dist/lib/native-hardware/serial.d.ts +76 -0
- package/dist/lib/native-hardware/serial.d.ts.map +1 -0
- package/dist/lib/native-hardware/serial.js +212 -0
- package/dist/lib/native-hardware/system-audio.d.ts +127 -0
- package/dist/lib/native-hardware/system-audio.d.ts.map +1 -0
- package/dist/lib/native-hardware/system-audio.js +330 -0
- package/dist/lib/native-hardware/types.d.ts +62 -0
- package/dist/lib/native-hardware/types.d.ts.map +1 -0
- package/dist/lib/native-hardware/types.js +27 -0
- package/dist/lib/native-hardware/usb-native.d.ts +39 -0
- package/dist/lib/native-hardware/usb-native.d.ts.map +1 -0
- package/dist/lib/native-hardware/usb-native.js +217 -0
- package/dist/lib/native-hardware/usb.d.ts +85 -0
- package/dist/lib/native-hardware/usb.d.ts.map +1 -0
- package/dist/lib/native-hardware/usb.js +222 -0
- package/docs/README.md +37 -0
- package/docs/accessibility.md +32 -0
- package/docs/app-anatomy.md +72 -0
- package/docs/component-catalog.md +59 -0
- package/docs/component-guide-template.md +37 -0
- package/docs/design-tokens.md +172 -0
- package/docs/foundations.md +56 -0
- package/docs/native-integration.md +33 -0
- package/docs/standalone-app-windows.md +128 -0
- package/package.json +9 -3
- package/src/components/ui/alert.md +55 -0
- package/src/components/ui/app-frame.md +33 -0
- package/src/components/ui/badge.md +57 -0
- package/src/components/ui/button.md +76 -0
- package/src/components/ui/color-well.md +11 -0
- package/src/components/ui/combobox.md +43 -0
- package/src/components/ui/date-field.md +32 -0
- package/src/components/ui/edge-fade.md +7 -0
- package/src/components/ui/empty.md +82 -0
- package/src/components/ui/field.md +77 -0
- package/src/components/ui/grid.md +105 -0
- package/src/components/ui/icon-button.md +36 -0
- package/src/components/ui/inspector.md +11 -0
- package/src/components/ui/item.md +87 -0
- package/src/components/ui/list.md +107 -0
- package/src/components/ui/notification-dot.md +7 -0
- package/src/components/ui/number-input.md +19 -0
- package/src/components/ui/panel.md +11 -0
- package/src/components/ui/resizable.md +66 -0
- package/src/components/ui/scroll-area.md +68 -0
- package/src/components/ui/search-field.md +33 -0
- package/src/components/ui/segmented-control.md +39 -0
- package/src/components/ui/sidebar.md +113 -0
- package/src/components/ui/sonner.md +37 -0
- package/src/components/ui/split-view.md +15 -0
- package/src/components/ui/status.md +12 -0
- package/src/components/ui/table.md +35 -0
- package/src/components/ui/tabs.md +66 -0
- package/src/components/ui/text.md +17 -0
- package/src/components/ui/toggle-group.md +80 -0
- package/src/components/ui/toggle.md +73 -0
- package/src/components/ui/toolbar.md +21 -0
- package/src/styles/index.css +868 -3
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Component catalog
|
|
2
|
+
|
|
3
|
+
The catalog turns component review into a deterministic matrix rather than a
|
|
4
|
+
set of hand-picked screenshots. Import the catalog utilities from the separate
|
|
5
|
+
subpath so production app bundles do not pull in review infrastructure.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
ComponentCatalog,
|
|
10
|
+
createCatalogManifest,
|
|
11
|
+
} from '@moldable-ai/ui/catalog'
|
|
12
|
+
|
|
13
|
+
const manifest = createCatalogManifest({
|
|
14
|
+
title: 'App UI',
|
|
15
|
+
sections: [
|
|
16
|
+
{
|
|
17
|
+
id: 'controls',
|
|
18
|
+
title: 'Controls',
|
|
19
|
+
stories: [
|
|
20
|
+
{
|
|
21
|
+
id: 'primary-action',
|
|
22
|
+
title: 'Primary action',
|
|
23
|
+
interactions: ['rest', 'focus-visible', 'disabled', 'loading'],
|
|
24
|
+
render: ({ interaction }) => (
|
|
25
|
+
<Button
|
|
26
|
+
autoFocus={interaction === 'focus-visible'}
|
|
27
|
+
disabled={interaction === 'disabled'}
|
|
28
|
+
>
|
|
29
|
+
Continue
|
|
30
|
+
</Button>
|
|
31
|
+
),
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
<ComponentCatalog manifest={manifest} />
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Required review matrix
|
|
42
|
+
|
|
43
|
+
Every public interactive component should cover:
|
|
44
|
+
|
|
45
|
+
- light and dark themes;
|
|
46
|
+
- regular and compact density;
|
|
47
|
+
- wide and narrow viewports;
|
|
48
|
+
- rest, focus-visible, disabled, invalid, selected, loading, and empty states
|
|
49
|
+
where those states apply;
|
|
50
|
+
- keyboard behavior in unit tests.
|
|
51
|
+
|
|
52
|
+
`buildCatalogCases()` generates stable case IDs and supports filtering, which
|
|
53
|
+
lets a visual-regression runner capture one addressable case at a time. Keep
|
|
54
|
+
catalog stories deterministic: fixed content, fixed dates, no network calls,
|
|
55
|
+
and no animation unless motion itself is under review.
|
|
56
|
+
|
|
57
|
+
The included `coreComponentCatalog` is a smoke foundation, not the complete
|
|
58
|
+
acceptance bar. Add each new public component and its meaningful states as part
|
|
59
|
+
of the same change that adds the component.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Component guide template
|
|
2
|
+
|
|
3
|
+
Use this structure for each public component family.
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
# Component
|
|
7
|
+
|
|
8
|
+
One-sentence intent.
|
|
9
|
+
|
|
10
|
+
## When to use
|
|
11
|
+
|
|
12
|
+
## When not to use
|
|
13
|
+
|
|
14
|
+
## Anatomy
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
## Variants and sizes
|
|
19
|
+
|
|
20
|
+
## API
|
|
21
|
+
|
|
22
|
+
## States and interaction
|
|
23
|
+
|
|
24
|
+
## Keyboard and accessibility
|
|
25
|
+
|
|
26
|
+
## Platform behavior
|
|
27
|
+
|
|
28
|
+
## Do
|
|
29
|
+
|
|
30
|
+
## Don't
|
|
31
|
+
|
|
32
|
+
## Testing
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Document the real exported API. Include neighboring-component decisions and
|
|
36
|
+
the states callers must implement. Keep examples compact and use semantic
|
|
37
|
+
theme tokens.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Design tokens
|
|
2
|
+
|
|
3
|
+
The token system makes an interface feel consistent before it makes it
|
|
4
|
+
distinctive. Use semantic roles from `@moldable-ai/ui/styles`; do not choose
|
|
5
|
+
raw palette values, one-off control dimensions, or custom easing curves in app
|
|
6
|
+
chrome.
|
|
7
|
+
|
|
8
|
+
Tokens are CSS custom properties so they work in React, plain CSS, canvas
|
|
9
|
+
overlays, and host-provided webviews. Tailwind aliases are provided for the
|
|
10
|
+
roles that are useful in markup.
|
|
11
|
+
|
|
12
|
+
## Token layers
|
|
13
|
+
|
|
14
|
+
1. **Theme primitives** such as `--background`, `--foreground`, and
|
|
15
|
+
`--primary` preserve the shadcn-compatible theme contract.
|
|
16
|
+
2. **Semantic roles** such as `--surface-recessed`, `--text-secondary`, and
|
|
17
|
+
`--control-pressed` describe intent.
|
|
18
|
+
3. **Component recipes** combine roles into a complete control or layout.
|
|
19
|
+
|
|
20
|
+
Apps should primarily use layer two through shared components or the Tailwind
|
|
21
|
+
aliases below. Override theme primitives to brand a complete app. Override a
|
|
22
|
+
semantic role only when the meaning of that role changes for the entire
|
|
23
|
+
subtree.
|
|
24
|
+
|
|
25
|
+
## Typography
|
|
26
|
+
|
|
27
|
+
The default UI font is the platform sans-serif stack. Monospaced text uses the
|
|
28
|
+
platform monospace stack. Prefer `Text` for normal interface copy; the token
|
|
29
|
+
utilities are useful for display-scale titles and highly composed canvases.
|
|
30
|
+
|
|
31
|
+
| Role | CSS token | Tailwind utility | Use |
|
|
32
|
+
| ------- | ------------------ | ----------------- | ---------------------------------- |
|
|
33
|
+
| Display | `--type-display-*` | `text-ui-display` | One dominant app or document title |
|
|
34
|
+
| Heading | `--type-heading-*` | `text-ui-heading` | Primary view heading |
|
|
35
|
+
| Title | `--type-title-*` | `text-ui-title` | Major section title |
|
|
36
|
+
| Body | `--type-body-*` | `text-ui-body` | Dense working content |
|
|
37
|
+
| Label | `--type-label-*` | `text-ui-label` | Controls and metadata |
|
|
38
|
+
| Caption | `--type-caption-*` | `text-ui-caption` | Timestamps and compact annotations |
|
|
39
|
+
|
|
40
|
+
Use display type sparingly. A large title can establish a focused canvas, but
|
|
41
|
+
it should not force every utility screen into a marketing-page hierarchy.
|
|
42
|
+
Prefer `font-sans` and `font-mono` over naming a platform font directly.
|
|
43
|
+
|
|
44
|
+
## Density
|
|
45
|
+
|
|
46
|
+
Density is contextual, not a global scale transform. Place `data-density` on
|
|
47
|
+
the smallest pane that needs a different rhythm:
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
<section data-density="compact">
|
|
51
|
+
<Toolbar>{/* compact desktop actions */}</Toolbar>
|
|
52
|
+
<div className="min-h-row">{/* selectable row */}</div>
|
|
53
|
+
</section>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Supported values are:
|
|
57
|
+
|
|
58
|
+
- `compact`: inspectors, source lists, and toolbars.
|
|
59
|
+
- default (attribute omitted): general app UI.
|
|
60
|
+
- `comfortable`: touch-forward or presentation-oriented surfaces.
|
|
61
|
+
|
|
62
|
+
The scope sets control heights, row and toolbar heights, gaps, inline padding,
|
|
63
|
+
pane padding, and section spacing. Utilities include `h-control-xs`,
|
|
64
|
+
`h-control-sm`, `h-control-md`, `h-control-lg`, `min-h-row`, `min-h-toolbar`,
|
|
65
|
+
`gap-control-gap`, `px-control-inline`, `p-pane`, and `gap-section`.
|
|
66
|
+
|
|
67
|
+
Component size or density props remain authoritative when supplied. Do not use
|
|
68
|
+
density to shrink labels below readable sizes or to make a pointer-only target
|
|
69
|
+
difficult to acquire.
|
|
70
|
+
|
|
71
|
+
## Text and surfaces
|
|
72
|
+
|
|
73
|
+
Use the narrowest semantic role that describes the region:
|
|
74
|
+
|
|
75
|
+
| Role | Tailwind alias | Purpose |
|
|
76
|
+
| -------------------- | --------------------- | --------------------------------- |
|
|
77
|
+
| `--text-primary` | `text-text-primary` | Primary content |
|
|
78
|
+
| `--text-secondary` | `text-text-secondary` | Supporting content |
|
|
79
|
+
| `--text-tertiary` | `text-text-tertiary` | De-emphasized metadata |
|
|
80
|
+
| `--text-disabled` | `text-text-disabled` | Unavailable content |
|
|
81
|
+
| `--surface-canvas` | `bg-surface-canvas` | Primary work surface |
|
|
82
|
+
| `--surface-raised` | `bg-surface-raised` | Bounded content above the canvas |
|
|
83
|
+
| `--surface-recessed` | `bg-surface-recessed` | Wells and subordinate regions |
|
|
84
|
+
| `--surface-sidebar` | `bg-surface-sidebar` | Source navigation |
|
|
85
|
+
| `--surface-toolbar` | `bg-surface-toolbar` | Translucent window or pane chrome |
|
|
86
|
+
| `--surface-overlay` | `bg-surface-overlay` | Menus, popovers, and toasts |
|
|
87
|
+
| `--surface-selected` | `bg-surface-selected` | Selected collection items |
|
|
88
|
+
|
|
89
|
+
Use `border-separator` for ordinary pane boundaries and
|
|
90
|
+
`border-separator-strong` when the boundary must remain clear over imagery or
|
|
91
|
+
a busy canvas. Avoid stacking raised surfaces inside cards merely to create
|
|
92
|
+
visual hierarchy; whitespace and a separator are usually quieter.
|
|
93
|
+
|
|
94
|
+
## Control states
|
|
95
|
+
|
|
96
|
+
Control state roles are shared across buttons, rows, grid items, segmented
|
|
97
|
+
controls, and fields:
|
|
98
|
+
|
|
99
|
+
- `--control-hover`
|
|
100
|
+
- `--control-pressed`
|
|
101
|
+
- `--control-selected`
|
|
102
|
+
- `--control-selected-foreground`
|
|
103
|
+
- `--control-disabled`
|
|
104
|
+
- `--control-focus`
|
|
105
|
+
- `--control-invalid`
|
|
106
|
+
|
|
107
|
+
A complete recipe covers rest, hover, pressed, focus-visible, selected,
|
|
108
|
+
disabled, and invalid states. Disabled wins over pointer states. Focus remains
|
|
109
|
+
visible when combined with selected or invalid. Selection is durable state;
|
|
110
|
+
hover is not a substitute for it.
|
|
111
|
+
|
|
112
|
+
Do not use state-layer colors as arbitrary fills. Prefer the shared component
|
|
113
|
+
when one exists.
|
|
114
|
+
|
|
115
|
+
## Shape and materials
|
|
116
|
+
|
|
117
|
+
Use `rounded-control`, `rounded-container`, and `rounded-overlay` to keep
|
|
118
|
+
related objects visually consistent. `rounded-window` is host-informed and
|
|
119
|
+
normally only useful in previews; the native host owns the actual window
|
|
120
|
+
shape.
|
|
121
|
+
|
|
122
|
+
Material tokens keep depth and translucency restrained:
|
|
123
|
+
|
|
124
|
+
- `--material-blur-toolbar` and `--material-blur-overlay`
|
|
125
|
+
- `--material-saturation`
|
|
126
|
+
- `shadow-panel`, `shadow-overlay`, and `shadow-window`
|
|
127
|
+
|
|
128
|
+
Translucency must have an opaque fallback. The token system removes blur and
|
|
129
|
+
uses opaque toolbar and overlay surfaces when the operating system requests
|
|
130
|
+
reduced transparency or an ancestor has `data-transparency="reduced"`.
|
|
131
|
+
|
|
132
|
+
## Motion
|
|
133
|
+
|
|
134
|
+
Use motion to explain entry, exit, reordering, or a state transition:
|
|
135
|
+
|
|
136
|
+
| Purpose | Duration | Easing |
|
|
137
|
+
| ------------------------------- | --------------------------- | ------------------------ |
|
|
138
|
+
| Immediate feedback | `--motion-duration-instant` | `--motion-ease-standard` |
|
|
139
|
+
| Hover and press | `--motion-duration-fast` | `--motion-ease-standard` |
|
|
140
|
+
| Popover or selection transition | `--motion-duration-normal` | `--motion-ease-enter` |
|
|
141
|
+
| Large surface transition | `--motion-duration-slow` | `--motion-ease-enter` |
|
|
142
|
+
|
|
143
|
+
`ease-standard`, `ease-enter`, `ease-exit`, and `ease-spring` are available as
|
|
144
|
+
Tailwind utilities. Use the duration variables directly or with an arbitrary
|
|
145
|
+
value such as `duration-[var(--motion-duration-fast)]`.
|
|
146
|
+
|
|
147
|
+
Reduced-motion preferences collapse token durations to 1ms and remove
|
|
148
|
+
decorative package animations. Components must still render their final state
|
|
149
|
+
without depending on an animation callback.
|
|
150
|
+
|
|
151
|
+
## Contrast and themes
|
|
152
|
+
|
|
153
|
+
Light and dark themes share semantic names. Never branch app behavior on a
|
|
154
|
+
specific color value. Increased-contrast preferences strengthen separators,
|
|
155
|
+
state layers, and tertiary text. Forced-color mode maps semantic roles to
|
|
156
|
+
system colors and removes material shadows.
|
|
157
|
+
|
|
158
|
+
Test at minimum:
|
|
159
|
+
|
|
160
|
+
- Light and dark.
|
|
161
|
+
- Default and increased contrast.
|
|
162
|
+
- Reduced motion and reduced transparency.
|
|
163
|
+
- Compact and comfortable density.
|
|
164
|
+
- Focus-visible, selected, disabled, and invalid states in combination.
|
|
165
|
+
|
|
166
|
+
## Adding a token
|
|
167
|
+
|
|
168
|
+
Add a token only when the decision repeats across component families. Name it
|
|
169
|
+
for its role, provide light and dark behavior when necessary, define
|
|
170
|
+
accessibility fallbacks, expose a Tailwind alias only if it improves normal
|
|
171
|
+
composition, and document the intended use. A component-specific visual tweak
|
|
172
|
+
belongs in that component recipe instead.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Foundations
|
|
2
|
+
|
|
3
|
+
## Character
|
|
4
|
+
|
|
5
|
+
Moldable apps are local working instruments, not websites or SaaS dashboards.
|
|
6
|
+
The interface should be calm, compact, direct, and organized around the user's
|
|
7
|
+
objects. Decoration must clarify hierarchy or state.
|
|
8
|
+
|
|
9
|
+
## Hierarchy
|
|
10
|
+
|
|
11
|
+
Use `Text` roles instead of rebuilding typography from arbitrary utilities.
|
|
12
|
+
Most desktop chrome should use `regular`, `strong`, `small`, or
|
|
13
|
+
`small-strong`. Reserve `heading1` for a view's primary title and `heading2`
|
|
14
|
+
for a major section.
|
|
15
|
+
|
|
16
|
+
Use one obvious accent action in a region. Secondary actions should be quiet.
|
|
17
|
+
Status color communicates status only; it is not decoration.
|
|
18
|
+
|
|
19
|
+
## Density
|
|
20
|
+
|
|
21
|
+
- Compact controls are the default in toolbars and inspectors.
|
|
22
|
+
- Preserve usable pointer targets even when the visible control is small.
|
|
23
|
+
- Prefer separators, background shifts, and whitespace over nested cards.
|
|
24
|
+
- Working panes own scrolling. The window shell should not accidentally scroll.
|
|
25
|
+
- Set `data-density="compact"`, `"default"`, or `"comfortable"` at a
|
|
26
|
+
composition boundary. Components should consume density tokens rather than
|
|
27
|
+
inventing per-screen heights.
|
|
28
|
+
|
|
29
|
+
## Surfaces
|
|
30
|
+
|
|
31
|
+
- `background`: primary work surface.
|
|
32
|
+
- `muted`: subordinate region, well, or quiet selection context.
|
|
33
|
+
- `sidebar`: navigation/list source surface.
|
|
34
|
+
- `popover`: temporary floating surface.
|
|
35
|
+
- `card`: bounded content group, not a universal page wrapper.
|
|
36
|
+
|
|
37
|
+
Use semantic tokens only. Do not introduce raw gray, zinc, white, or black
|
|
38
|
+
classes in app UI.
|
|
39
|
+
|
|
40
|
+
Use material tokens for translucency and elevation. Materials distinguish
|
|
41
|
+
canvas, toolbar, sidebar, raised, recessed, and overlay roles; they are not
|
|
42
|
+
decorative glass effects.
|
|
43
|
+
|
|
44
|
+
## Motion
|
|
45
|
+
|
|
46
|
+
Motion explains state or continuity. Keep it brief and honor
|
|
47
|
+
`prefers-reduced-motion`. Pulse only for live activity; a static notification
|
|
48
|
+
does not pulse.
|
|
49
|
+
|
|
50
|
+
Use the shared duration and easing tokens. Do not make routine controls feel
|
|
51
|
+
springy, and do not animate layout merely to make a screen feel active.
|
|
52
|
+
|
|
53
|
+
## Focus
|
|
54
|
+
|
|
55
|
+
Keyboard focus must remain visible against every surface. Do not remove a
|
|
56
|
+
focus ring unless the replacement is at least as clear.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Native integration
|
|
2
|
+
|
|
3
|
+
Renderer components should feel compatible with macOS without pretending to be
|
|
4
|
+
native controls. Use a host-native control only when Moldable exposes a shared,
|
|
5
|
+
transport-neutral capability for it.
|
|
6
|
+
|
|
7
|
+
## Selection policy
|
|
8
|
+
|
|
9
|
+
1. Prefer a real Moldable host contract when the operation is inherently
|
|
10
|
+
platform-owned, such as sharing, file selection, or a system permission.
|
|
11
|
+
2. Use the shared renderer component when its semantics are app-owned.
|
|
12
|
+
3. Provide an accessible renderer fallback only when the product contract
|
|
13
|
+
defines what happens on desktop, iOS, and remote clients.
|
|
14
|
+
|
|
15
|
+
Do not create UI-only no-op stubs for native menus, share sheets, or date
|
|
16
|
+
pickers. First define ownership, cancellation, errors, replay/reconnect
|
|
17
|
+
behavior, and platform fallbacks.
|
|
18
|
+
|
|
19
|
+
`DateField` is the portable renderer baseline. A future system date picker,
|
|
20
|
+
share sheet, or native menu must only be selected after the host advertises the
|
|
21
|
+
service through a versioned context. Requests must remain bound to the
|
|
22
|
+
originating app window and user activation.
|
|
23
|
+
|
|
24
|
+
Standalone windows should remain host-owned surfaces around an app frame. Do
|
|
25
|
+
not load arbitrary app URLs directly into a privileged native webview merely to
|
|
26
|
+
gain window chrome.
|
|
27
|
+
|
|
28
|
+
## Platform details
|
|
29
|
+
|
|
30
|
+
Use toolbars, panes, compact controls, keyboard commands, restrained material,
|
|
31
|
+
and clear selection state to achieve platform affinity. Do not copy private
|
|
32
|
+
framework code, undocumented IPC, proprietary fonts, or host-specific symbol
|
|
33
|
+
plumbing.
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Standalone app windows
|
|
2
|
+
|
|
3
|
+
Moldable apps should work as focused windows as well as embedded views. The
|
|
4
|
+
same app surface must survive either presentation without imitating operating
|
|
5
|
+
system chrome or assuming that a global desktop shell is present.
|
|
6
|
+
|
|
7
|
+
## Ownership boundary
|
|
8
|
+
|
|
9
|
+
| Layer | Owns |
|
|
10
|
+
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| Native host | Window creation, close/minimize/zoom controls, dragging, resize regions, focus state, system menus, share sheets, and safe insets |
|
|
12
|
+
| Shared UI package | Semantic window tokens, app-level layout recipes, accessible controls, density, and embedded fallbacks |
|
|
13
|
+
| App | Title, document context, primary canvas, toolbars, navigation, selection, and app-specific state |
|
|
14
|
+
| Orchestrator | Cross-app commands, conversation, launching, and switching; it is not permanent app chrome |
|
|
15
|
+
|
|
16
|
+
Do not draw traffic-light controls or recreate a title bar in React. When a
|
|
17
|
+
platform cannot provide a native capability, expose it through a host contract
|
|
18
|
+
or use a clearly web-native fallback.
|
|
19
|
+
|
|
20
|
+
## Window inset contract
|
|
21
|
+
|
|
22
|
+
The stylesheet defines a renderer boundary with zero-value browser-safe
|
|
23
|
+
defaults:
|
|
24
|
+
|
|
25
|
+
- `--window-safe-area-top`
|
|
26
|
+
- `--window-safe-area-inline-start`
|
|
27
|
+
- `--window-safe-area-inline-end`
|
|
28
|
+
- `--window-safe-area-bottom`
|
|
29
|
+
- `--window-titlebar-height`
|
|
30
|
+
- `--window-drag-region-height`
|
|
31
|
+
- `--window-control-inset-inline-start`
|
|
32
|
+
- `--window-control-inset-inline-end`
|
|
33
|
+
- `--window-content-inset-top`
|
|
34
|
+
- `--window-content-inset-inline-start`
|
|
35
|
+
- `--window-content-inset-inline-end`
|
|
36
|
+
- `--window-content-inset-bottom`
|
|
37
|
+
- `--window-corner-radius`
|
|
38
|
+
|
|
39
|
+
The host may set the primitive safe-area, titlebar, and control inset values on
|
|
40
|
+
the document root. Composite content insets then resolve automatically. The
|
|
41
|
+
transport used to deliver those values belongs to the host integration layer,
|
|
42
|
+
not individual apps.
|
|
43
|
+
|
|
44
|
+
Window appearance roles are `--window-chrome-background`,
|
|
45
|
+
`--window-chrome-foreground`, `--window-chrome-muted-foreground`,
|
|
46
|
+
`--window-border`, and `--material-shadow-window`. The host may update the
|
|
47
|
+
foreground roles when a window becomes inactive. Apps must not infer focus
|
|
48
|
+
from pointer events.
|
|
49
|
+
|
|
50
|
+
## A portable root
|
|
51
|
+
|
|
52
|
+
Keep the root bounded and make one descendant own each scroll region:
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
<main
|
|
56
|
+
className="bg-surface-canvas text-text-primary flex h-dvh min-h-0 min-w-0 flex-col overflow-hidden"
|
|
57
|
+
style={{
|
|
58
|
+
paddingTop: 'var(--window-content-inset-top)',
|
|
59
|
+
paddingInlineStart: 'var(--window-content-inset-inline-start)',
|
|
60
|
+
paddingInlineEnd: 'var(--window-content-inset-inline-end)',
|
|
61
|
+
paddingBottom: 'var(--window-content-inset-bottom)',
|
|
62
|
+
}}
|
|
63
|
+
>
|
|
64
|
+
<Toolbar>{/* app title and primary actions */}</Toolbar>
|
|
65
|
+
<PanelContent>{/* the primary canvas or collection */}</PanelContent>
|
|
66
|
+
</main>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
This conservative layout places app chrome below any overlay titlebar. A
|
|
70
|
+
future shared window-shell recipe may integrate a toolbar into a host-declared
|
|
71
|
+
drag region, but only the platform adapter should mark draggable and
|
|
72
|
+
non-draggable areas.
|
|
73
|
+
|
|
74
|
+
In embedded presentation all window insets resolve to zero. If chat overlays
|
|
75
|
+
the app, the owning bottom scroll region uses `--chat-safe-padding`. A
|
|
76
|
+
standalone window must not reserve that space unless the orchestrator is
|
|
77
|
+
actually overlaid in that window.
|
|
78
|
+
|
|
79
|
+
## Window-shaped information architecture
|
|
80
|
+
|
|
81
|
+
A standalone app should identify itself without relying on a global sidebar:
|
|
82
|
+
|
|
83
|
+
- Put the current app or document identity in its own top region.
|
|
84
|
+
- Keep the primary object visually dominant.
|
|
85
|
+
- Place frequent tools near the edge of the canvas they affect.
|
|
86
|
+
- Use a sidebar or inspector only when the task needs one.
|
|
87
|
+
- Keep primary actions reachable at narrow widths.
|
|
88
|
+
- Make empty and onboarding states feel like the app, not a generic dialog.
|
|
89
|
+
|
|
90
|
+
Large, single-purpose canvases can use display typography and generous space.
|
|
91
|
+
Dense utilities should retain compact controls and stronger information
|
|
92
|
+
hierarchy. Native feeling comes from predictable focus, keyboard behavior,
|
|
93
|
+
selection, materials, and restraint—not from decorative window chrome.
|
|
94
|
+
|
|
95
|
+
## Multi-window state
|
|
96
|
+
|
|
97
|
+
Treat each window as an independent client of shared product APIs:
|
|
98
|
+
|
|
99
|
+
- Give each window its own React root, focus, selection, and transient UI
|
|
100
|
+
state.
|
|
101
|
+
- Keep durable workspace data behind the same authoritative API used by
|
|
102
|
+
embedded and remote clients.
|
|
103
|
+
- Make document and route identity explicit so a window can reconnect or
|
|
104
|
+
restore without a process-global singleton.
|
|
105
|
+
- Define ordering, replay, and conflict behavior for live shared state.
|
|
106
|
+
- Keep binary assets addressable; do not place large payloads in window or
|
|
107
|
+
conversation events.
|
|
108
|
+
|
|
109
|
+
Closing one window must not imply closing an app service or discarding another
|
|
110
|
+
window's state. System menu, share, file, and date behavior should remain
|
|
111
|
+
behind platform-neutral capability contracts with native adapters.
|
|
112
|
+
|
|
113
|
+
## Verification matrix
|
|
114
|
+
|
|
115
|
+
Every app shell or shared window recipe should cover:
|
|
116
|
+
|
|
117
|
+
- Embedded and standalone presentation.
|
|
118
|
+
- Active and inactive native windows.
|
|
119
|
+
- Light and dark appearance.
|
|
120
|
+
- Narrow, default, and wide sizes.
|
|
121
|
+
- Keyboard-only use and visible focus.
|
|
122
|
+
- Increased contrast, reduced motion, and reduced transparency.
|
|
123
|
+
- Empty, loading, error, ready, and offline or disconnected states.
|
|
124
|
+
- Reopen or reconnect with durable state intact.
|
|
125
|
+
|
|
126
|
+
Visual regression fixtures should capture the same canonical states at stable
|
|
127
|
+
viewport sizes. Interaction tests should verify focus movement, selection,
|
|
128
|
+
resize behavior, and that window controls remain host-owned.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moldable-ai/ui",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.20",
|
|
4
4
|
"description": "Shared UI components for Moldable applications",
|
|
5
5
|
"author": "Desiderata LLC",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -26,10 +26,17 @@
|
|
|
26
26
|
"import": "./dist/index.js",
|
|
27
27
|
"require": "./dist/index.js"
|
|
28
28
|
},
|
|
29
|
+
"./catalog": {
|
|
30
|
+
"types": "./dist/catalog/index.d.ts",
|
|
31
|
+
"import": "./dist/catalog/index.js",
|
|
32
|
+
"require": "./dist/catalog/index.js"
|
|
33
|
+
},
|
|
29
34
|
"./styles": "./src/styles/index.css"
|
|
30
35
|
},
|
|
31
36
|
"files": [
|
|
32
37
|
"dist",
|
|
38
|
+
"docs",
|
|
39
|
+
"src/components/ui/*.md",
|
|
33
40
|
"src/styles",
|
|
34
41
|
"LICENSE"
|
|
35
42
|
],
|
|
@@ -73,6 +80,7 @@
|
|
|
73
80
|
"@radix-ui/react-toggle": "^1.1.10",
|
|
74
81
|
"@radix-ui/react-toggle-group": "^1.1.11",
|
|
75
82
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
83
|
+
"@shadcn/react": "^0.2.1",
|
|
76
84
|
"@tailwindcss/typography": "^0.5.16",
|
|
77
85
|
"class-variance-authority": "^0.7.1",
|
|
78
86
|
"clsx": "^2.1.1",
|
|
@@ -82,7 +90,6 @@
|
|
|
82
90
|
"framer-motion": "^12.15.0",
|
|
83
91
|
"input-otp": "^1.4.2",
|
|
84
92
|
"lucide-react": "^0.473.0",
|
|
85
|
-
"next-themes": "^0.4.6",
|
|
86
93
|
"react-day-picker": "^9.13.0",
|
|
87
94
|
"react-hook-form": "^7.71.1",
|
|
88
95
|
"react-markdown": "^10.1.0",
|
|
@@ -96,7 +103,6 @@
|
|
|
96
103
|
"tailwindcss": "^4.1.10",
|
|
97
104
|
"tw-animate-css": "^1.3.4",
|
|
98
105
|
"vaul": "^1.1.2",
|
|
99
|
-
"virtua": "^0.48.5",
|
|
100
106
|
"zod": "^4.3.5"
|
|
101
107
|
},
|
|
102
108
|
"devDependencies": {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Alert
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
`Alert` presents an important inline message that belongs to the current surface. Use it for recoverable errors, permission or connection problems, and information the user should notice before continuing.
|
|
6
|
+
|
|
7
|
+
Use `AlertDialog` when the user must confirm an action. Use `Empty` for the normal absence of data. Use a toast for brief feedback that does not need to remain in the layout.
|
|
8
|
+
|
|
9
|
+
## Usage patterns
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
import { CircleAlert } from 'lucide-react'
|
|
13
|
+
import { Alert, AlertDescription, AlertTitle } from '@moldable-ai/ui'
|
|
14
|
+
|
|
15
|
+
;<Alert variant="destructive">
|
|
16
|
+
<CircleAlert />
|
|
17
|
+
<AlertTitle>Could not save</AlertTitle>
|
|
18
|
+
<AlertDescription>
|
|
19
|
+
The file changed on disk. Reload it, then try again.
|
|
20
|
+
</AlertDescription>
|
|
21
|
+
</Alert>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
An alert can include a compact retry or setup action in its description, but the message should still stand on its own. Place the action close to the cause rather than at the top of the whole app.
|
|
25
|
+
|
|
26
|
+
## API summary
|
|
27
|
+
|
|
28
|
+
- `Alert`: a `div` with `role="alert"`.
|
|
29
|
+
- `variant`: `default` or `destructive`; defaults to `default`.
|
|
30
|
+
- `AlertTitle`: the short, emphasized heading.
|
|
31
|
+
- `AlertDescription`: muted supporting content; supports nested paragraphs and controls.
|
|
32
|
+
- All parts accept the native props for their rendered element and a `className`.
|
|
33
|
+
- A direct icon child on `Alert` receives the component’s grid placement and sizing.
|
|
34
|
+
|
|
35
|
+
## Do
|
|
36
|
+
|
|
37
|
+
- State what failed or what is blocked in a short title.
|
|
38
|
+
- Include the specific message and a retry action when recovery is possible.
|
|
39
|
+
- Keep technical details available through logs or a disclosure, not in the primary message.
|
|
40
|
+
- Use an icon only when it improves recognition.
|
|
41
|
+
- Keep the alert close to the field, pane, or operation it describes.
|
|
42
|
+
|
|
43
|
+
## Don't
|
|
44
|
+
|
|
45
|
+
- Do not use an alert as decorative introductory copy.
|
|
46
|
+
- Do not show stack traces, raw exceptions, or secret values.
|
|
47
|
+
- Do not use `destructive` for neutral notices.
|
|
48
|
+
- Do not rely on the icon or color alone for meaning.
|
|
49
|
+
- Do not use `Alert` as a confirmation surface.
|
|
50
|
+
|
|
51
|
+
## Moldable considerations
|
|
52
|
+
|
|
53
|
+
Alerts inside a scrollable pane must participate in that pane’s chat-safe bottom spacing. Long-lived errors should not be covered by a fixed dock or desktop chat overlay.
|
|
54
|
+
|
|
55
|
+
Copy should be calm and literal: “Could not load messages” is better than “Something went wrong!”. For authentication and permission states, name the blocked capability and offer exactly one primary next action. If the alert includes buttons, follow the standard button accessibility and density rules.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# App frame
|
|
2
|
+
|
|
3
|
+
The top-level shell for an app that can run in its own window or inside a host
|
|
4
|
+
surface.
|
|
5
|
+
|
|
6
|
+
```tsx
|
|
7
|
+
<AppFrame>
|
|
8
|
+
<AppFrameTitlebar>
|
|
9
|
+
<AppFrameToolbar>
|
|
10
|
+
<strong>Calendar</strong>
|
|
11
|
+
<div className="ml-auto">{/* compact actions */}</div>
|
|
12
|
+
</AppFrameToolbar>
|
|
13
|
+
</AppFrameTitlebar>
|
|
14
|
+
<AppFrameContent>{/* the app-owned canvas */}</AppFrameContent>
|
|
15
|
+
<AppFrameStatusbar>Saved locally</AppFrameStatusbar>
|
|
16
|
+
</AppFrame>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
- Let the host render real window controls. Never draw imitation traffic lights.
|
|
22
|
+
- Make the app's primary canvas the visual focus; titlebars and status bars are
|
|
23
|
+
supporting structure.
|
|
24
|
+
- The app frame does not make the outer window draggable. A decorated native
|
|
25
|
+
titlebar or host-owned drag region must provide that behavior.
|
|
26
|
+
- The host owns the `--window-*` inset variables. The component only consumes
|
|
27
|
+
them.
|
|
28
|
+
- `AppFrameContent` applies the shared chat-safe padding by default. The value is
|
|
29
|
+
zero in a standalone window and is updated by the embedded host lifecycle.
|
|
30
|
+
- Use `mode="embedded"` or `mode="window"` only for deterministic previews and
|
|
31
|
+
tests. Runtime apps should normally use `mode="auto"`; a future host context
|
|
32
|
+
may set `data-moldable-display-mode` before render when a window still uses an
|
|
33
|
+
app iframe.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Badge
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
`Badge` is a compact, non-primary label for status, category, count, or metadata. It helps a user scan rows and objects without becoming another action surface.
|
|
6
|
+
|
|
7
|
+
Use a button or toggle when the element changes state. Use plain muted text when the metadata does not need a bounded shape.
|
|
8
|
+
|
|
9
|
+
## Usage patterns
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
import { Badge } from '@moldable-ai/ui'
|
|
13
|
+
|
|
14
|
+
<Badge variant="secondary">Draft</Badge>
|
|
15
|
+
<Badge variant="outline">3 selected</Badge>
|
|
16
|
+
<Badge variant="destructive">Failed</Badge>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Badges work best at the edge of list rows, in compact inspector metadata, or beside a title. Keep the content short enough to scan without wrapping.
|
|
20
|
+
|
|
21
|
+
When a badge is interactive, give the child its correct semantics:
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
<Badge asChild variant="outline">
|
|
25
|
+
<a href="/jobs/running">Running</a>
|
|
26
|
+
</Badge>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## API summary
|
|
30
|
+
|
|
31
|
+
- `variant`: `default`, `secondary`, `destructive`, `outline`, `ghost`, or `link`. Defaults to `default`.
|
|
32
|
+
- `asChild`: renders a Radix `Slot` and applies badge styling to its child.
|
|
33
|
+
- Accepts native `span` props.
|
|
34
|
+
- `badgeVariants` is exported for composing the same variants elsewhere.
|
|
35
|
+
- Icons placed directly inside are normalized to a compact size.
|
|
36
|
+
|
|
37
|
+
## Do
|
|
38
|
+
|
|
39
|
+
- Use one or two words, a short number, or a concise state.
|
|
40
|
+
- Prefer `secondary` or `outline` for ordinary metadata.
|
|
41
|
+
- Use `destructive` only for a failure, blocked state, or serious warning.
|
|
42
|
+
- Pair a colored state with clear text or an icon so meaning is not color-only.
|
|
43
|
+
- Use `tabular-nums` through `className` for counts that update in place.
|
|
44
|
+
|
|
45
|
+
## Don't
|
|
46
|
+
|
|
47
|
+
- Do not turn every property into a badge.
|
|
48
|
+
- Do not use badges as a substitute for primary buttons, tabs, or filters.
|
|
49
|
+
- Do not place long explanations or sentences inside.
|
|
50
|
+
- Do not invent raw category colors; use semantic variants unless a small, meaningful object color is required.
|
|
51
|
+
- Do not show “AI” as a decorative badge when no actionable distinction exists.
|
|
52
|
+
|
|
53
|
+
## Moldable considerations
|
|
54
|
+
|
|
55
|
+
Moldable surfaces are intentionally dense, so badges should preserve horizontal scan order. In rows, keep the badge `shrink-0` and make the main text column `min-w-0`. Prefer a small status marker plus text over multiple adjacent badges.
|
|
56
|
+
|
|
57
|
+
For background activity, use a precise state such as “Syncing” or “Queued”; remove the badge when the state no longer helps. A badge is not a notification and should not replace a useful Today item, alert, or progress indicator.
|