@moldable-ai/ui 0.2.22 → 0.2.25
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-coverage.d.ts +1 -1
- package/dist/catalog/catalog-manifest.d.ts +1 -1
- package/dist/catalog/catalog-manifest.js +1 -1
- package/dist/catalog/component-catalog.d.ts +1 -1
- package/dist/catalog/component-catalog.js +2 -2
- package/dist/catalog/core-catalog-exclusions.d.ts +1 -1
- package/dist/catalog/core-catalog-exclusions.d.ts.map +1 -1
- package/dist/catalog/core-catalog-exclusions.js +1 -150
- package/dist/catalog/core-catalog.d.ts +1 -1
- package/dist/catalog/core-catalog.d.ts.map +1 -1
- package/dist/catalog/core-catalog.js +11 -7
- package/dist/catalog/core-collection-stories.d.ts +1 -1
- package/dist/catalog/core-collection-stories.d.ts.map +1 -1
- package/dist/catalog/core-collection-stories.js +40 -8
- package/dist/catalog/core-control-stories.d.ts +1 -1
- package/dist/catalog/core-control-stories.d.ts.map +1 -1
- package/dist/catalog/core-control-stories.js +48 -20
- package/dist/catalog/core-feedback-stories.d.ts +1 -1
- package/dist/catalog/core-feedback-stories.d.ts.map +1 -1
- package/dist/catalog/core-feedback-stories.js +89 -10
- package/dist/catalog/core-form-stories.d.ts +3 -0
- package/dist/catalog/core-form-stories.d.ts.map +1 -0
- package/dist/catalog/core-form-stories.js +56 -0
- package/dist/catalog/core-foundation-stories.d.ts +1 -1
- package/dist/catalog/core-foundation-stories.js +7 -7
- package/dist/catalog/core-layout-stories.d.ts +3 -0
- package/dist/catalog/core-layout-stories.d.ts.map +1 -0
- package/dist/catalog/core-layout-stories.js +78 -0
- package/dist/catalog/core-navigation-stories.d.ts +1 -1
- package/dist/catalog/core-navigation-stories.d.ts.map +1 -1
- package/dist/catalog/core-navigation-stories.js +25 -3
- package/dist/catalog/core-overlay-stories.d.ts +1 -1
- package/dist/catalog/core-overlay-stories.d.ts.map +1 -1
- package/dist/catalog/core-overlay-stories.js +113 -8
- package/dist/catalog/index.d.ts +6 -6
- package/dist/catalog/index.js +6 -6
- package/dist/components/app-error-boundary.js +2 -2
- package/dist/components/chat/chat-image-lightbox.js +3 -3
- package/dist/components/chat/chat-input.js +5 -5
- package/dist/components/chat/chat-message.js +17 -17
- package/dist/components/chat/chat-messages.d.ts +1 -1
- package/dist/components/chat/chat-messages.js +3 -3
- package/dist/components/chat/chat-panel.d.ts +6 -6
- package/dist/components/chat/chat-panel.d.ts.map +1 -1
- package/dist/components/chat/chat-panel.js +33 -33
- package/dist/components/chat/checkpoint-badge.js +3 -3
- package/dist/components/chat/conversation-history.d.ts.map +1 -1
- package/dist/components/chat/conversation-history.js +13 -13
- package/dist/components/chat/index.d.ts +20 -15
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +20 -15
- package/dist/components/chat/markdown.js +1 -1
- package/dist/components/chat/model-effort-selector.js +10 -10
- package/dist/components/chat/model-selector.js +4 -4
- package/dist/components/chat/reasoning-effort-selector.js +4 -4
- package/dist/components/chat/restore-dialog.js +3 -3
- package/dist/components/chat/thinking-timeline.js +2 -2
- package/dist/components/chat/tool-approval.d.ts +1 -1
- package/dist/components/chat/tool-approval.d.ts.map +1 -1
- package/dist/components/chat/tool-approval.js +9 -9
- package/dist/components/chat/tool-handlers.d.ts +2 -2
- package/dist/components/chat/tool-handlers.js +90 -90
- package/dist/components/chat/voice-orb-audio.d.ts +16 -0
- package/dist/components/chat/voice-orb-audio.d.ts.map +1 -0
- package/dist/components/chat/voice-orb-audio.js +110 -0
- package/dist/components/chat/voice-orb-renderer.d.ts +51 -0
- package/dist/components/chat/voice-orb-renderer.d.ts.map +1 -0
- package/dist/components/chat/voice-orb-renderer.js +410 -0
- package/dist/components/chat/voice-orb-shaders.d.ts +3 -0
- package/dist/components/chat/voice-orb-shaders.d.ts.map +1 -0
- package/dist/components/chat/voice-orb-shaders.js +355 -0
- package/dist/components/chat/voice-orb-types.d.ts +24 -0
- package/dist/components/chat/voice-orb-types.d.ts.map +1 -0
- package/dist/components/chat/voice-orb-types.js +73 -0
- package/dist/components/chat/voice-orb.d.ts +20 -0
- package/dist/components/chat/voice-orb.d.ts.map +1 -0
- package/dist/components/chat/voice-orb.js +67 -0
- package/dist/components/code-block.js +1 -1
- package/dist/components/hardware/bluetooth-panel.d.ts +2 -2
- package/dist/components/hardware/bluetooth-panel.js +10 -10
- package/dist/components/hardware/camera-preview.js +6 -6
- package/dist/components/hardware/capability-badge.d.ts +2 -2
- package/dist/components/hardware/capability-badge.js +2 -2
- package/dist/components/hardware/capability-matrix.d.ts +1 -1
- package/dist/components/hardware/capability-matrix.js +5 -5
- package/dist/components/hardware/clipboard-button.d.ts +1 -1
- package/dist/components/hardware/clipboard-button.js +2 -2
- package/dist/components/hardware/device-list.js +1 -1
- package/dist/components/hardware/display-map.d.ts +1 -1
- package/dist/components/hardware/display-map.js +7 -7
- package/dist/components/hardware/haptic-button.d.ts +2 -2
- package/dist/components/hardware/haptic-button.js +3 -3
- package/dist/components/hardware/hardware-panel.js +1 -1
- package/dist/components/hardware/hid-panel.d.ts +2 -2
- package/dist/components/hardware/hid-panel.js +10 -10
- package/dist/components/hardware/index.d.ts +26 -26
- package/dist/components/hardware/index.js +26 -26
- package/dist/components/hardware/live-indicator.js +1 -1
- package/dist/components/hardware/local-auth-button.d.ts +2 -2
- package/dist/components/hardware/local-auth-button.js +4 -4
- package/dist/components/hardware/location-panel.d.ts +1 -1
- package/dist/components/hardware/location-panel.js +6 -6
- package/dist/components/hardware/microphone-meter.js +7 -7
- package/dist/components/hardware/midi-monitor.d.ts +2 -2
- package/dist/components/hardware/midi-monitor.js +9 -9
- package/dist/components/hardware/notification-panel.d.ts +1 -1
- package/dist/components/hardware/notification-panel.js +8 -8
- package/dist/components/hardware/power-blocker-controller.d.ts +1 -1
- package/dist/components/hardware/power-blocker-controller.js +1 -1
- package/dist/components/hardware/power-panel.d.ts +1 -1
- package/dist/components/hardware/power-panel.js +9 -9
- package/dist/components/hardware/readout.js +1 -1
- package/dist/components/hardware/screen-share-preview.js +5 -5
- package/dist/components/hardware/secure-storage-panel.d.ts +1 -1
- package/dist/components/hardware/secure-storage-panel.js +9 -9
- package/dist/components/hardware/serial-console.d.ts +2 -2
- package/dist/components/hardware/serial-console.js +10 -10
- package/dist/components/hardware/shortcut-recorder.d.ts +1 -1
- package/dist/components/hardware/shortcut-recorder.js +4 -4
- package/dist/components/hardware/stream-log.js +1 -1
- package/dist/components/hardware/system-audio-monitor.d.ts +1 -1
- package/dist/components/hardware/system-audio-monitor.js +9 -9
- package/dist/components/hardware/usb-panel.d.ts +5 -5
- package/dist/components/hardware/usb-panel.js +10 -10
- package/dist/components/hardware/use-capability.d.ts +1 -1
- package/dist/components/hardware/use-capability.js +1 -1
- package/dist/components/markdown.js +5 -5
- package/dist/components/native-capabilities/bluetooth-panel.d.ts +2 -2
- package/dist/components/native-capabilities/bluetooth-panel.d.ts.map +1 -1
- package/dist/components/native-capabilities/bluetooth-panel.js +17 -17
- package/dist/components/native-capabilities/camera-preview.d.ts.map +1 -1
- package/dist/components/native-capabilities/camera-preview.js +7 -7
- package/dist/components/native-capabilities/capability-badge.d.ts +2 -2
- package/dist/components/native-capabilities/capability-badge.js +4 -4
- package/dist/components/native-capabilities/capability-matrix.d.ts +1 -1
- package/dist/components/native-capabilities/capability-matrix.js +7 -7
- package/dist/components/native-capabilities/clipboard-button.d.ts +1 -1
- package/dist/components/native-capabilities/clipboard-button.js +2 -2
- package/dist/components/native-capabilities/device-list.js +4 -4
- package/dist/components/native-capabilities/display-map.d.ts +1 -1
- package/dist/components/native-capabilities/display-map.d.ts.map +1 -1
- package/dist/components/native-capabilities/display-map.js +11 -11
- package/dist/components/native-capabilities/haptic-button.d.ts +2 -2
- package/dist/components/native-capabilities/haptic-button.js +3 -3
- package/dist/components/native-capabilities/hid-panel.d.ts +2 -2
- package/dist/components/native-capabilities/hid-panel.d.ts.map +1 -1
- package/dist/components/native-capabilities/hid-panel.js +14 -14
- package/dist/components/native-capabilities/index.d.ts +26 -26
- package/dist/components/native-capabilities/index.js +26 -26
- package/dist/components/native-capabilities/live-indicator.js +3 -3
- package/dist/components/native-capabilities/local-auth-button.d.ts +2 -2
- package/dist/components/native-capabilities/local-auth-button.js +4 -4
- package/dist/components/native-capabilities/location-panel.d.ts +1 -1
- package/dist/components/native-capabilities/location-panel.d.ts.map +1 -1
- package/dist/components/native-capabilities/location-panel.js +8 -8
- package/dist/components/native-capabilities/microphone-meter.js +9 -9
- package/dist/components/native-capabilities/midi-monitor.d.ts +2 -2
- package/dist/components/native-capabilities/midi-monitor.d.ts.map +1 -1
- package/dist/components/native-capabilities/midi-monitor.js +11 -11
- package/dist/components/native-capabilities/native-capability-panel.js +6 -6
- package/dist/components/native-capabilities/notification-panel.d.ts +1 -1
- package/dist/components/native-capabilities/notification-panel.js +9 -9
- package/dist/components/native-capabilities/power-blocker-controller.d.ts +1 -1
- package/dist/components/native-capabilities/power-blocker-controller.js +1 -1
- package/dist/components/native-capabilities/power-panel.d.ts +1 -1
- package/dist/components/native-capabilities/power-panel.d.ts.map +1 -1
- package/dist/components/native-capabilities/power-panel.js +12 -12
- package/dist/components/native-capabilities/readout.d.ts.map +1 -1
- package/dist/components/native-capabilities/readout.js +2 -2
- package/dist/components/native-capabilities/screen-share-preview.js +6 -6
- package/dist/components/native-capabilities/secure-storage-panel.d.ts +1 -1
- package/dist/components/native-capabilities/secure-storage-panel.d.ts.map +1 -1
- package/dist/components/native-capabilities/secure-storage-panel.js +11 -11
- package/dist/components/native-capabilities/serial-console.d.ts +2 -2
- package/dist/components/native-capabilities/serial-console.d.ts.map +1 -1
- package/dist/components/native-capabilities/serial-console.js +11 -11
- package/dist/components/native-capabilities/shortcut-recorder.d.ts +1 -1
- package/dist/components/native-capabilities/shortcut-recorder.js +5 -5
- package/dist/components/native-capabilities/stream-log.js +3 -3
- package/dist/components/native-capabilities/system-audio-monitor.d.ts +1 -1
- package/dist/components/native-capabilities/system-audio-monitor.js +12 -12
- package/dist/components/native-capabilities/usb-panel.d.ts +5 -5
- package/dist/components/native-capabilities/usb-panel.js +15 -15
- package/dist/components/native-capabilities/use-capability.d.ts +1 -1
- package/dist/components/native-capabilities/use-capability.js +1 -1
- package/dist/components/rich-media-player.js +3 -3
- package/dist/components/ui/accordion.js +3 -3
- package/dist/components/ui/alert-dialog.d.ts +2 -2
- package/dist/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/components/ui/alert-dialog.js +16 -10
- package/dist/components/ui/alert.d.ts +1 -1
- package/dist/components/ui/alert.d.ts.map +1 -1
- package/dist/components/ui/alert.js +11 -11
- package/dist/components/ui/app-frame.d.ts +7 -1
- package/dist/components/ui/app-frame.d.ts.map +1 -1
- package/dist/components/ui/app-frame.js +52 -16
- package/dist/components/ui/avatar.js +5 -5
- package/dist/components/ui/badge.d.ts +1 -1
- package/dist/components/ui/badge.js +4 -4
- package/dist/components/ui/breadcrumb.js +2 -2
- package/dist/components/ui/button-group.d.ts +1 -1
- package/dist/components/ui/button-group.js +4 -4
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/button.js +16 -16
- package/dist/components/ui/calendar.d.ts +1 -1
- package/dist/components/ui/calendar.d.ts.map +1 -1
- package/dist/components/ui/calendar.js +15 -15
- package/dist/components/ui/card.js +3 -3
- package/dist/components/ui/carousel.d.ts +1 -1
- package/dist/components/ui/carousel.js +4 -4
- package/dist/components/ui/chart.js +5 -5
- package/dist/components/ui/checkbox.d.ts.map +1 -1
- package/dist/components/ui/checkbox.js +2 -2
- package/dist/components/ui/collapsible.js +3 -3
- package/dist/components/ui/color-well.js +2 -2
- package/dist/components/ui/combobox.js +9 -9
- package/dist/components/ui/command.d.ts +1 -1
- package/dist/components/ui/command.d.ts.map +1 -1
- package/dist/components/ui/command.js +9 -9
- package/dist/components/ui/confirm-dialog.d.ts +1 -1
- package/dist/components/ui/confirm-dialog.js +2 -2
- package/dist/components/ui/context-menu.d.ts +16 -5
- package/dist/components/ui/context-menu.d.ts.map +1 -1
- package/dist/components/ui/context-menu.js +92 -16
- package/dist/components/ui/date-field.d.ts.map +1 -1
- package/dist/components/ui/date-field.js +8 -8
- package/dist/components/ui/date-picker.d.ts +2 -2
- package/dist/components/ui/date-picker.js +7 -7
- package/dist/components/ui/dialog.d.ts +2 -2
- package/dist/components/ui/dialog.d.ts.map +1 -1
- package/dist/components/ui/dialog.js +16 -8
- package/dist/components/ui/drawer.js +4 -4
- package/dist/components/ui/dropdown-menu.d.ts +15 -5
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.js +98 -16
- package/dist/components/ui/edge-fade.js +1 -1
- package/dist/components/ui/empty.d.ts +1 -1
- package/dist/components/ui/empty.js +5 -5
- package/dist/components/ui/error-boundary-view.d.ts.map +1 -1
- package/dist/components/ui/error-boundary-view.js +3 -3
- package/dist/components/ui/field.d.ts +1 -1
- package/dist/components/ui/field.d.ts.map +1 -1
- package/dist/components/ui/field.js +9 -9
- package/dist/components/ui/form.js +4 -4
- package/dist/components/ui/grid.d.ts.map +1 -1
- package/dist/components/ui/grid.js +5 -5
- package/dist/components/ui/hover-card.js +2 -2
- package/dist/components/ui/icon-button.d.ts +1 -1
- package/dist/components/ui/icon-button.js +3 -3
- package/dist/components/ui/index.d.ts +77 -77
- package/dist/components/ui/index.js +77 -77
- package/dist/components/ui/input-group.d.ts +2 -2
- package/dist/components/ui/input-group.js +14 -14
- package/dist/components/ui/input-otp.js +3 -3
- package/dist/components/ui/input.js +2 -2
- package/dist/components/ui/inspector.d.ts +1 -1
- package/dist/components/ui/inspector.js +6 -6
- package/dist/components/ui/item.d.ts +1 -1
- package/dist/components/ui/item.js +7 -7
- package/dist/components/ui/kbd.js +2 -2
- package/dist/components/ui/label.js +2 -2
- package/dist/components/ui/list.d.ts.map +1 -1
- package/dist/components/ui/list.js +5 -5
- package/dist/components/ui/material.js +3 -3
- package/dist/components/ui/menu-items.d.ts +28 -0
- package/dist/components/ui/menu-items.d.ts.map +1 -0
- package/dist/components/ui/menu-items.js +111 -0
- package/dist/components/ui/menubar.js +11 -11
- package/dist/components/ui/message-scroller-controller.d.ts +1 -1
- package/dist/components/ui/message-scroller-controller.js +1 -1
- package/dist/components/ui/message-scroller-primitive.d.ts +1 -1
- package/dist/components/ui/message-scroller-primitive.js +1 -1
- package/dist/components/ui/message-scroller.d.ts +2 -2
- package/dist/components/ui/message-scroller.js +3 -3
- package/dist/components/ui/navigation-button-group.d.ts +2 -2
- package/dist/components/ui/navigation-button-group.js +2 -2
- package/dist/components/ui/navigation-menu.js +6 -6
- package/dist/components/ui/notification-dot.js +2 -2
- package/dist/components/ui/number-input.js +8 -8
- package/dist/components/ui/pagination.d.ts +1 -1
- package/dist/components/ui/pagination.js +2 -2
- package/dist/components/ui/panel.d.ts +1 -1
- package/dist/components/ui/panel.js +3 -3
- package/dist/components/ui/popover.d.ts +1 -1
- package/dist/components/ui/popover.js +3 -3
- package/dist/components/ui/progress.js +2 -2
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/radio-group.js +2 -2
- package/dist/components/ui/resizable.d.ts +1 -1
- package/dist/components/ui/resizable.d.ts.map +1 -1
- package/dist/components/ui/resizable.js +15 -4
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/scroll-area.js +3 -3
- package/dist/components/ui/search-field.js +7 -7
- package/dist/components/ui/segmented-control.js +9 -9
- package/dist/components/ui/select.d.ts.map +1 -1
- package/dist/components/ui/select.js +6 -6
- package/dist/components/ui/separator.js +1 -1
- package/dist/components/ui/sheet.js +4 -4
- package/dist/components/ui/sidebar.d.ts +5 -5
- package/dist/components/ui/sidebar.d.ts.map +1 -1
- package/dist/components/ui/sidebar.js +111 -24
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/slider.d.ts +3 -1
- package/dist/components/ui/slider.d.ts.map +1 -1
- package/dist/components/ui/slider.js +3 -3
- package/dist/components/ui/sonner.js +1 -1
- package/dist/components/ui/spinner.js +1 -1
- package/dist/components/ui/split-view.js +1 -1
- package/dist/components/ui/status.d.ts +1 -1
- package/dist/components/ui/status.d.ts.map +1 -1
- package/dist/components/ui/status.js +10 -9
- package/dist/components/ui/switch.js +2 -2
- package/dist/components/ui/table.d.ts.map +1 -1
- package/dist/components/ui/table.js +7 -7
- package/dist/components/ui/tabs.js +3 -3
- package/dist/components/ui/text.d.ts +2 -2
- package/dist/components/ui/text.js +19 -19
- package/dist/components/ui/textarea.js +2 -2
- package/dist/components/ui/toggle-group.d.ts +1 -1
- package/dist/components/ui/toggle-group.js +4 -4
- package/dist/components/ui/toggle.d.ts +1 -1
- package/dist/components/ui/toggle.js +10 -10
- package/dist/components/ui/toolbar.d.ts +7 -7
- package/dist/components/ui/toolbar.js +7 -7
- package/dist/components/ui/tooltip.d.ts +2 -2
- package/dist/components/ui/tooltip.js +5 -5
- package/dist/index.d.ts +21 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -20
- package/dist/lib/frame-lifecycle.d.ts +27 -0
- package/dist/lib/frame-lifecycle.d.ts.map +1 -1
- package/dist/lib/frame-lifecycle.js +136 -0
- package/dist/lib/host-date-time-picker.d.ts +1 -1
- package/dist/lib/host-date-time-picker.js +1 -1
- package/dist/lib/host-file-dialog.d.ts +1 -1
- package/dist/lib/host-file-dialog.js +1 -1
- package/dist/lib/host-native-menu.d.ts +48 -7
- package/dist/lib/host-native-menu.d.ts.map +1 -1
- package/dist/lib/host-native-menu.js +56 -1
- package/dist/lib/host-services.js +1 -1
- package/dist/lib/host-share.d.ts +1 -1
- package/dist/lib/host-share.js +1 -1
- package/dist/lib/host-web-surface.d.ts +31 -0
- package/dist/lib/host-web-surface.d.ts.map +1 -0
- package/dist/lib/host-web-surface.js +116 -0
- package/dist/lib/native-capabilities/access.d.ts +2 -2
- package/dist/lib/native-capabilities/access.js +2 -2
- package/dist/lib/native-capabilities/bluetooth-access.d.ts +1 -1
- package/dist/lib/native-capabilities/bluetooth-access.js +2 -2
- package/dist/lib/native-capabilities/bluetooth-connection.d.ts +1 -1
- package/dist/lib/native-capabilities/bluetooth-connection.js +1 -1
- package/dist/lib/native-capabilities/bluetooth-gatt.d.ts +1 -1
- package/dist/lib/native-capabilities/bluetooth-gatt.js +1 -1
- package/dist/lib/native-capabilities/bluetooth-internal.d.ts +2 -2
- package/dist/lib/native-capabilities/bluetooth-internal.js +1 -1
- package/dist/lib/native-capabilities/bluetooth-native-fallback.d.ts +2 -2
- package/dist/lib/native-capabilities/bluetooth-native-fallback.js +2 -2
- package/dist/lib/native-capabilities/bluetooth.d.ts +6 -6
- package/dist/lib/native-capabilities/bluetooth.js +4 -4
- package/dist/lib/native-capabilities/bridge.d.ts +1 -1
- package/dist/lib/native-capabilities/bridge.js +2 -2
- package/dist/lib/native-capabilities/capabilities.d.ts +1 -1
- package/dist/lib/native-capabilities/capabilities.js +1 -1
- package/dist/lib/native-capabilities/clipboard.js +2 -2
- package/dist/lib/native-capabilities/device-io-errors.d.ts +1 -1
- package/dist/lib/native-capabilities/device-io-errors.js +1 -1
- package/dist/lib/native-capabilities/displays.d.ts +1 -1
- package/dist/lib/native-capabilities/displays.js +1 -1
- package/dist/lib/native-capabilities/global-shortcuts.d.ts +2 -2
- package/dist/lib/native-capabilities/global-shortcuts.js +1 -1
- package/dist/lib/native-capabilities/haptics.d.ts +1 -1
- package/dist/lib/native-capabilities/haptics.js +1 -1
- package/dist/lib/native-capabilities/hid-native.d.ts +2 -2
- package/dist/lib/native-capabilities/hid-native.js +3 -3
- package/dist/lib/native-capabilities/hid.js +5 -5
- package/dist/lib/native-capabilities/index.d.ts +39 -39
- package/dist/lib/native-capabilities/index.js +21 -21
- package/dist/lib/native-capabilities/local-authentication.d.ts +1 -1
- package/dist/lib/native-capabilities/local-authentication.js +1 -1
- package/dist/lib/native-capabilities/location.js +1 -1
- package/dist/lib/native-capabilities/media-permissions.d.ts +1 -1
- package/dist/lib/native-capabilities/media-permissions.js +1 -1
- package/dist/lib/native-capabilities/media.d.ts +1 -1
- package/dist/lib/native-capabilities/media.js +2 -2
- package/dist/lib/native-capabilities/midi-access.d.ts +1 -1
- package/dist/lib/native-capabilities/midi-access.js +3 -3
- package/dist/lib/native-capabilities/midi-internal.d.ts +1 -1
- package/dist/lib/native-capabilities/midi-internal.js +1 -1
- package/dist/lib/native-capabilities/midi-native-fallback.d.ts +1 -1
- package/dist/lib/native-capabilities/midi-native-fallback.js +2 -2
- package/dist/lib/native-capabilities/midi-ports.d.ts +1 -1
- package/dist/lib/native-capabilities/midi-ports.js +1 -1
- package/dist/lib/native-capabilities/midi.d.ts +5 -5
- package/dist/lib/native-capabilities/midi.js +3 -3
- package/dist/lib/native-capabilities/native-device-io.d.ts +1 -1
- package/dist/lib/native-capabilities/native-device-io.js +1 -1
- package/dist/lib/native-capabilities/native-device-lifecycle.js +1 -1
- package/dist/lib/native-capabilities/notifications.d.ts +2 -2
- package/dist/lib/native-capabilities/notifications.js +1 -1
- package/dist/lib/native-capabilities/power-session.d.ts +2 -2
- package/dist/lib/native-capabilities/power-session.js +1 -1
- package/dist/lib/native-capabilities/secure-storage.d.ts +1 -1
- package/dist/lib/native-capabilities/secure-storage.js +1 -1
- package/dist/lib/native-capabilities/serial-native.d.ts +2 -2
- package/dist/lib/native-capabilities/serial-native.js +3 -3
- package/dist/lib/native-capabilities/serial.js +5 -5
- package/dist/lib/native-capabilities/system-audio.d.ts +1 -1
- package/dist/lib/native-capabilities/system-audio.js +1 -1
- package/dist/lib/native-capabilities/usb-native.d.ts +2 -2
- package/dist/lib/native-capabilities/usb-native.js +3 -3
- package/dist/lib/native-capabilities/usb.js +5 -5
- package/dist/lib/native-hardware/bluetooth-access.d.ts +1 -1
- package/dist/lib/native-hardware/bluetooth-access.js +1 -1
- package/dist/lib/native-hardware/bluetooth-connection.d.ts +1 -1
- package/dist/lib/native-hardware/bluetooth-connection.js +1 -1
- package/dist/lib/native-hardware/bluetooth-gatt.d.ts +1 -1
- package/dist/lib/native-hardware/bluetooth-gatt.js +1 -1
- package/dist/lib/native-hardware/bluetooth-internal.d.ts +2 -2
- package/dist/lib/native-hardware/bluetooth-internal.js +1 -1
- package/dist/lib/native-hardware/bluetooth-native-fallback.d.ts +2 -2
- package/dist/lib/native-hardware/bluetooth-native-fallback.js +2 -2
- package/dist/lib/native-hardware/bluetooth.d.ts +6 -6
- package/dist/lib/native-hardware/bluetooth.js +4 -4
- package/dist/lib/native-hardware/bridge.d.ts +1 -1
- package/dist/lib/native-hardware/bridge.js +2 -2
- package/dist/lib/native-hardware/capabilities.d.ts +1 -1
- package/dist/lib/native-hardware/capabilities.js +1 -1
- package/dist/lib/native-hardware/clipboard.js +1 -1
- package/dist/lib/native-hardware/device-io-errors.d.ts +1 -1
- package/dist/lib/native-hardware/device-io-errors.js +1 -1
- package/dist/lib/native-hardware/displays.d.ts +1 -1
- package/dist/lib/native-hardware/displays.js +1 -1
- package/dist/lib/native-hardware/global-shortcuts.d.ts +2 -2
- package/dist/lib/native-hardware/global-shortcuts.js +1 -1
- package/dist/lib/native-hardware/haptics.d.ts +1 -1
- package/dist/lib/native-hardware/haptics.js +1 -1
- package/dist/lib/native-hardware/hid-native.d.ts +2 -2
- package/dist/lib/native-hardware/hid-native.js +3 -3
- package/dist/lib/native-hardware/hid.js +4 -4
- package/dist/lib/native-hardware/index.d.ts +37 -37
- package/dist/lib/native-hardware/index.js +20 -20
- package/dist/lib/native-hardware/local-authentication.d.ts +1 -1
- package/dist/lib/native-hardware/local-authentication.js +1 -1
- package/dist/lib/native-hardware/location.js +1 -1
- package/dist/lib/native-hardware/media-permissions.d.ts +1 -1
- package/dist/lib/native-hardware/media-permissions.js +1 -1
- package/dist/lib/native-hardware/media.d.ts +1 -1
- package/dist/lib/native-hardware/media.js +1 -1
- package/dist/lib/native-hardware/midi-access.d.ts +1 -1
- package/dist/lib/native-hardware/midi-access.js +2 -2
- package/dist/lib/native-hardware/midi-internal.d.ts +1 -1
- package/dist/lib/native-hardware/midi-internal.js +1 -1
- package/dist/lib/native-hardware/midi-native-fallback.d.ts +1 -1
- package/dist/lib/native-hardware/midi-native-fallback.js +2 -2
- package/dist/lib/native-hardware/midi-ports.d.ts +1 -1
- package/dist/lib/native-hardware/midi-ports.js +1 -1
- package/dist/lib/native-hardware/midi.d.ts +5 -5
- package/dist/lib/native-hardware/midi.js +3 -3
- package/dist/lib/native-hardware/native-device-io.d.ts +1 -1
- package/dist/lib/native-hardware/native-device-io.js +1 -1
- package/dist/lib/native-hardware/native-device-lifecycle.js +1 -1
- package/dist/lib/native-hardware/notifications.d.ts +2 -2
- package/dist/lib/native-hardware/notifications.js +1 -1
- package/dist/lib/native-hardware/power-session.d.ts +2 -2
- package/dist/lib/native-hardware/power-session.js +1 -1
- package/dist/lib/native-hardware/secure-storage.d.ts +1 -1
- package/dist/lib/native-hardware/secure-storage.js +1 -1
- package/dist/lib/native-hardware/serial-native.d.ts +2 -2
- package/dist/lib/native-hardware/serial-native.js +3 -3
- package/dist/lib/native-hardware/serial.js +4 -4
- package/dist/lib/native-hardware/system-audio.d.ts +1 -1
- package/dist/lib/native-hardware/system-audio.js +1 -1
- package/dist/lib/native-hardware/usb-native.d.ts +2 -2
- package/dist/lib/native-hardware/usb-native.js +3 -3
- package/dist/lib/native-hardware/usb.js +4 -4
- package/dist/lib/theme.js +1 -1
- package/docs/design-tokens.md +28 -6
- package/docs/foundations.md +4 -2
- package/package.json +4 -2
- package/src/components/ui/confirm-dialog.md +97 -0
- package/src/components/ui/context-menu.md +158 -0
- package/src/components/ui/dropdown-menu.md +165 -0
- package/src/components/ui/hover-card.md +90 -0
- package/src/components/ui/select.md +111 -0
- package/src/lib/host-date-time-picker.md +29 -0
- package/src/lib/host-file-dialog.md +76 -0
- package/src/lib/host-native-menu.md +67 -0
- package/src/lib/host-share.md +36 -0
- package/src/lib/host-web-surface.md +66 -0
- package/src/styles/index.css +141 -68
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Select
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
`Select` chooses one value from a short, fixed set. Use it when every option is
|
|
6
|
+
known before the menu opens and scanning the list is faster than typing.
|
|
7
|
+
|
|
8
|
+
Use `Combobox` when users need to filter a longer list, create a value, fetch
|
|
9
|
+
remote results, or select multiple values. Use `RadioGroup` when a small set of
|
|
10
|
+
important choices should remain visible, and `DropdownMenu` for commands rather
|
|
11
|
+
than form values.
|
|
12
|
+
|
|
13
|
+
## Usage patterns
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import {
|
|
17
|
+
Select,
|
|
18
|
+
SelectContent,
|
|
19
|
+
SelectGroup,
|
|
20
|
+
SelectItem,
|
|
21
|
+
SelectLabel,
|
|
22
|
+
SelectTrigger,
|
|
23
|
+
SelectValue,
|
|
24
|
+
} from '@moldable-ai/ui'
|
|
25
|
+
|
|
26
|
+
function SortSelect() {
|
|
27
|
+
return (
|
|
28
|
+
<>
|
|
29
|
+
<label htmlFor="sort-order">Sort</label>
|
|
30
|
+
<Select defaultValue="updated">
|
|
31
|
+
<SelectTrigger id="sort-order" size="sm">
|
|
32
|
+
<SelectValue placeholder="Choose an order" />
|
|
33
|
+
</SelectTrigger>
|
|
34
|
+
<SelectContent position="popper" align="start">
|
|
35
|
+
<SelectGroup>
|
|
36
|
+
<SelectLabel>Sort by</SelectLabel>
|
|
37
|
+
<SelectItem value="updated">Recently updated</SelectItem>
|
|
38
|
+
<SelectItem value="created">Date created</SelectItem>
|
|
39
|
+
<SelectItem value="name">Name</SelectItem>
|
|
40
|
+
</SelectGroup>
|
|
41
|
+
</SelectContent>
|
|
42
|
+
</Select>
|
|
43
|
+
</>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Give the trigger a visible external label or an accessible name. Placeholder
|
|
49
|
+
text describes the missing value; it does not replace a label.
|
|
50
|
+
|
|
51
|
+
## Anatomy
|
|
52
|
+
|
|
53
|
+
Compose `Select` with `SelectTrigger`, `SelectValue`, `SelectContent`, and one
|
|
54
|
+
or more `SelectItem` children. `SelectGroup`, `SelectLabel`, and
|
|
55
|
+
`SelectSeparator` organize a longer fixed list. Scroll buttons are included by
|
|
56
|
+
`SelectContent`.
|
|
57
|
+
|
|
58
|
+
## API summary
|
|
59
|
+
|
|
60
|
+
- `Select` supports `value`, `defaultValue`, `onValueChange`, `open`,
|
|
61
|
+
`defaultOpen`, `onOpenChange`, `disabled`, `required`, `name`,
|
|
62
|
+
`autoComplete`, `form`, and `dir`.
|
|
63
|
+
- `SelectTrigger` accepts button props and `size="sm" | "default"`.
|
|
64
|
+
- `SelectValue` accepts `placeholder`.
|
|
65
|
+
- `SelectContent` accepts `position="item-aligned" | "popper"` and Radix
|
|
66
|
+
positioning props such as `align`. This wrapper defaults `align` to `center`.
|
|
67
|
+
- `SelectItem` requires a string `value` and supports `disabled` and
|
|
68
|
+
`textValue`.
|
|
69
|
+
|
|
70
|
+
## States and interaction
|
|
71
|
+
|
|
72
|
+
Use controlled `value` when selection affects other state immediately; use
|
|
73
|
+
`defaultValue` for an isolated uncontrolled field. Disable only unavailable
|
|
74
|
+
items rather than the entire select when some choices remain valid. Keep item
|
|
75
|
+
labels stable while the menu is open.
|
|
76
|
+
|
|
77
|
+
The trigger uses the control shape and body-text roles. The menu uses
|
|
78
|
+
`bg-popover`, `text-popover-foreground`, `rounded-overlay`, and
|
|
79
|
+
`shadow-overlay`; focused options use the semantic accent roles. Preserve those
|
|
80
|
+
roles instead of adding raw fills, radii, or shadows.
|
|
81
|
+
|
|
82
|
+
## Keyboard and accessibility
|
|
83
|
+
|
|
84
|
+
Radix supplies listbox keyboard navigation, typeahead, focus management, and
|
|
85
|
+
selection semantics. Do not replace `SelectItem` with buttons or add nested
|
|
86
|
+
interactive controls. Associate a visible label with the trigger, and make
|
|
87
|
+
disabled state apparent without relying on color alone.
|
|
88
|
+
|
|
89
|
+
## Do
|
|
90
|
+
|
|
91
|
+
- Use concise, mutually exclusive option labels.
|
|
92
|
+
- Put the current value in `value` or `defaultValue`, not in placeholder text.
|
|
93
|
+
- Use `position="popper"` when the menu should align to the trigger rather than
|
|
94
|
+
the selected item.
|
|
95
|
+
- Use `SelectLabel` when groups need names.
|
|
96
|
+
|
|
97
|
+
## Don't
|
|
98
|
+
|
|
99
|
+
- Do not use `Select` for searchable, creatable, remote, or multi-value data;
|
|
100
|
+
use `Combobox`.
|
|
101
|
+
- Do not put actions, links, checkboxes, or explanatory paragraphs in the
|
|
102
|
+
option list.
|
|
103
|
+
- Do not use it for two or three choices that users must compare at a glance;
|
|
104
|
+
use `RadioGroup`.
|
|
105
|
+
- Do not deep-import the implementation; import from `@moldable-ai/ui`.
|
|
106
|
+
|
|
107
|
+
## Moldable considerations
|
|
108
|
+
|
|
109
|
+
`Select` is the portable renderer-owned control in app webviews. Keep required
|
|
110
|
+
choices available through keyboard and pointer input, and do not replace it
|
|
111
|
+
with a host-native command menu.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Host date/time picker
|
|
2
|
+
|
|
3
|
+
`useHostDateTimePicker()` and `pickDateTimeWithHost()` opt a call site into the
|
|
4
|
+
host-owned system picker when the Moldable host advertises it.
|
|
5
|
+
|
|
6
|
+
```tsx
|
|
7
|
+
const picker = useHostDateTimePicker()
|
|
8
|
+
const buttonRef = useRef<HTMLButtonElement>(null)
|
|
9
|
+
|
|
10
|
+
const result = await picker.pick('datetime', {
|
|
11
|
+
value: '2026-07-26T14:30:00',
|
|
12
|
+
min: '2026-01-01T00:00:00',
|
|
13
|
+
anchor: buttonRef.current ?? undefined,
|
|
14
|
+
})
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`mode` is `"date"`, `"time"`, or `"datetime"`. `value`, `min`, and `max` use
|
|
18
|
+
the matching timezone-free ISO form: `YYYY-MM-DD`, `HH:mm[:ss]`, or
|
|
19
|
+
`YYYY-MM-DDTHH:mm[:ss]`. This matches portable form controls and avoids
|
|
20
|
+
converting a calendar date through UTC. Native confirmation returns the same
|
|
21
|
+
mode-specific form. Click-away or close resolves with `status: "cancelled"`.
|
|
22
|
+
|
|
23
|
+
Native presentation is per-call-site opt-in. When the service is unavailable,
|
|
24
|
+
the helper returns `status: "fallback"` together with the mode and range. It
|
|
25
|
+
does not open renderer UI: the caller should keep using the portable
|
|
26
|
+
`DatePicker`, `DateField`, or calendar popover as its default experience.
|
|
27
|
+
|
|
28
|
+
An explicit `AbortSignal` abort rejects with `AbortError` and asks the host to
|
|
29
|
+
dismiss an open native popover. `timeoutMs` can lower the host default timeout.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Host file dialog
|
|
2
|
+
|
|
3
|
+
`useHostFileDialog()`, `openFileDialogWithHost()`, and
|
|
4
|
+
`saveFileDialogWithHost()` opt a call site into the host-owned macOS open/save
|
|
5
|
+
sheet when Moldable advertises `fileDialog`.
|
|
6
|
+
|
|
7
|
+
The fallback is intentionally only a routing signal:
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
const fileDialog = useHostFileDialog()
|
|
11
|
+
|
|
12
|
+
async function chooseFiles() {
|
|
13
|
+
const result = await fileDialog.open({
|
|
14
|
+
title: 'Import notes',
|
|
15
|
+
filters: [{ name: 'Text', extensions: ['txt', 'md'] }],
|
|
16
|
+
defaultLocation: 'documents',
|
|
17
|
+
properties: { multiple: true },
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
if (result.status === 'fallback') {
|
|
21
|
+
portableFileInputRef.current?.click()
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
if (result.status === 'completed') {
|
|
25
|
+
await importSelectedPaths(result.paths)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<>
|
|
31
|
+
<Button onClick={chooseFiles}>Import</Button>
|
|
32
|
+
<input ref={portableFileInputRef} type="file" multiple hidden />
|
|
33
|
+
</>
|
|
34
|
+
)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
This SDK does not build or trigger the portable `<input type="file">` flow.
|
|
38
|
+
Callers own that cross-platform UI and route to it when the result is
|
|
39
|
+
`{ status: "fallback" }`.
|
|
40
|
+
|
|
41
|
+
## Result representation
|
|
42
|
+
|
|
43
|
+
For v1, completed native results contain absolute path strings. This preserves
|
|
44
|
+
parity with Moldable's legacy app-facing `moldable:select-folder` API; there is
|
|
45
|
+
currently no external-file asset or opaque-handle scheme. A selected path is
|
|
46
|
+
not additional filesystem authority: this service only selects a location and
|
|
47
|
+
adds no read or write API.
|
|
48
|
+
|
|
49
|
+
## Defined v1 behavior
|
|
50
|
+
|
|
51
|
+
- `filters` accepts at most 32 named filters. Each filter has 1–64 extensions,
|
|
52
|
+
written without a leading dot. On macOS the validated names describe the
|
|
53
|
+
filter groups, while AppKit receives the deduplicated union of their
|
|
54
|
+
extensions as its allowed file types.
|
|
55
|
+
- `defaultLocation` maps `documents`, `downloads`, and `desktop` to those
|
|
56
|
+
conventional folders under the user's home directory; `home` maps to the
|
|
57
|
+
home directory; `appData` maps to the requesting app's
|
|
58
|
+
`workspaces/{workspaceId}/apps/{appId}/data` directory.
|
|
59
|
+
- Open `multiple` defaults to `false`.
|
|
60
|
+
- Open `directories` defaults to `false`; when true the panel chooses
|
|
61
|
+
directories instead of files.
|
|
62
|
+
- Open and save `createDirectories` default to `false`; when true AppKit shows
|
|
63
|
+
its New Folder control.
|
|
64
|
+
- Open `showHidden` defaults to `false`; when true hidden entries are initially
|
|
65
|
+
visible. The user may still use AppKit's standard hidden-file shortcut.
|
|
66
|
+
- Save `defaultName` initializes the filename field and must be a filename, not
|
|
67
|
+
a path.
|
|
68
|
+
- `title` and `buttonLabel` set AppKit's panel title and confirmation prompt.
|
|
69
|
+
AppKit sheets may not visibly render a titlebar, but the value is still
|
|
70
|
+
applied to the panel.
|
|
71
|
+
- Unknown and mode-inappropriate properties are rejected before presentation.
|
|
72
|
+
|
|
73
|
+
The panel is presented as a sheet owned by the requesting embedded or dedicated
|
|
74
|
+
host window. User cancellation resolves with `{ status: "cancelled" }`. An
|
|
75
|
+
`AbortSignal` abort rejects with `AbortError` and asks the host to cancel the
|
|
76
|
+
request-ID-keyed AppKit panel.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Host native menu
|
|
2
|
+
|
|
3
|
+
`useHostNativeMenu()` and `openNativeMenuWithHost()` opt a call site into a
|
|
4
|
+
host-owned AppKit menu when the Moldable host advertises `nativeMenu`. The
|
|
5
|
+
portable Radix `ContextMenu` remains the cross-platform implementation and is
|
|
6
|
+
owned by the caller.
|
|
7
|
+
|
|
8
|
+
The intended integration shape is to try the native menu from the same pointer
|
|
9
|
+
handler that would open the portable menu, then leave or restore the portable
|
|
10
|
+
path when the host is unavailable:
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
const nativeMenu = useHostNativeMenu()
|
|
14
|
+
const [portableOpen, setPortableOpen] = useState(false)
|
|
15
|
+
|
|
16
|
+
async function handleContextMenu(event: React.MouseEvent) {
|
|
17
|
+
if (!nativeMenu.available) {
|
|
18
|
+
// Do not prevent the event. ContextMenuTrigger opens the portable menu.
|
|
19
|
+
return
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
event.preventDefault()
|
|
23
|
+
const result = await nativeMenu.open(menuItems, {
|
|
24
|
+
position: { x: event.clientX, y: event.clientY },
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
if (result.status === 'completed') {
|
|
28
|
+
runCommand(result.selectedId)
|
|
29
|
+
} else if (result.status === 'fallback') {
|
|
30
|
+
setPortableOpen(true)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<ContextMenu open={portableOpen} onOpenChange={setPortableOpen}>
|
|
36
|
+
<ContextMenuTrigger asChild>
|
|
37
|
+
<div onContextMenu={handleContextMenu}>{children}</div>
|
|
38
|
+
</ContextMenuTrigger>
|
|
39
|
+
<ContextMenuContent>{/* existing portable items */}</ContextMenuContent>
|
|
40
|
+
</ContextMenu>
|
|
41
|
+
)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The request requires exactly one app-viewport placement: an `anchor` element or
|
|
45
|
+
rect, or a pointer `position`. Item depth is capped at 3 and the whole tree at
|
|
46
|
+
200 items. Selectable item IDs are non-empty and unique across the tree.
|
|
47
|
+
Checkboxes support `true`, `false`, and `"mixed"`; radio items reject
|
|
48
|
+
`"mixed"`.
|
|
49
|
+
|
|
50
|
+
`destructive` is reserved in v1. It is validated and carried through the
|
|
51
|
+
service but is deliberately not rendered with native destructive styling. The
|
|
52
|
+
portable menu may continue to render its destructive variant.
|
|
53
|
+
|
|
54
|
+
Shortcuts use AppKit's
|
|
55
|
+
[`NSMenuItem.keyEquivalent`](https://developer.apple.com/documentation/appkit/nsmenuitem/keyequivalent)
|
|
56
|
+
and modifier mask so AppKit draws the conventional shortcut label. The menu is
|
|
57
|
+
a transient popup attached to the requesting host window and is never installed
|
|
58
|
+
as the application's main menu, so these values do not register global app
|
|
59
|
+
shortcuts. AppKit may still match the equivalent while that popup is actively
|
|
60
|
+
tracking; callers must treat the field as display metadata and keep command
|
|
61
|
+
handling keyed by the returned `selectedId`.
|
|
62
|
+
|
|
63
|
+
Click-away and Escape resolve with `{ status: "cancelled" }`. An explicit
|
|
64
|
+
`AbortSignal` abort rejects with `AbortError` and asks the host to call
|
|
65
|
+
`cancelTracking()` on the request-ID-keyed open menu. When native menus are not
|
|
66
|
+
advertised, the helper resolves with `{ status: "fallback" }` without opening
|
|
67
|
+
renderer UI.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Host share
|
|
2
|
+
|
|
3
|
+
`useHostShare()` and `shareWithHost()` provide one share API across Moldable
|
|
4
|
+
hosts and ordinary browsers.
|
|
5
|
+
|
|
6
|
+
```tsx
|
|
7
|
+
const share = useHostShare()
|
|
8
|
+
const buttonRef = useRef<HTMLButtonElement>(null)
|
|
9
|
+
|
|
10
|
+
await share.share(
|
|
11
|
+
[
|
|
12
|
+
{ kind: 'text', text: 'A useful note' },
|
|
13
|
+
{ kind: 'url', url: 'https://example.com/note' },
|
|
14
|
+
],
|
|
15
|
+
{ anchor: buttonRef.current ?? undefined },
|
|
16
|
+
)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The decision flow is:
|
|
20
|
+
|
|
21
|
+
1. When the host advertises `share`, the SDK sends a host-service request. The
|
|
22
|
+
host translates the supplied element or rect from app-viewport coordinates
|
|
23
|
+
and presents the native picker.
|
|
24
|
+
2. Without that advertisement, text and URL items use `navigator.share` when
|
|
25
|
+
Web Share is available.
|
|
26
|
+
3. Otherwise the promise resolves with `status: "fallback"` and returns the
|
|
27
|
+
original items. The caller can then expose its own copy or download UI.
|
|
28
|
+
File references always take this path outside a native Moldable host because
|
|
29
|
+
a browser cannot dereference a workspace-local path.
|
|
30
|
+
|
|
31
|
+
Native dismissal is represented by the envelope's terminal `cancelled` status;
|
|
32
|
+
the SDK maps it to `{ status: "cancelled", method: "native" }`. Web Share
|
|
33
|
+
dismissal resolves with the equivalent `web` result. An explicit `AbortSignal`
|
|
34
|
+
abort rejects with `AbortError`; on the native path the envelope also asks the
|
|
35
|
+
host to dismiss the open picker. `timeoutMs` can lower the host's default
|
|
36
|
+
timeout.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Host web surface
|
|
2
|
+
|
|
3
|
+
`useHostWebSurface()` controls a native child webview supplied by the Moldable
|
|
4
|
+
desktop host. It is progressive enhancement: `available` is `true` only in a
|
|
5
|
+
dedicated app window whose manifest declares:
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"nativeCapabilities": ["webSurface"]
|
|
10
|
+
}
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Embedded app views, older hosts, and apps without the declaration receive
|
|
14
|
+
`available: false`. Keep an iframe or reader implementation for those cases.
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
import { useEffect } from 'react'
|
|
18
|
+
import { useHostWebSurface } from '@moldable-ai/ui'
|
|
19
|
+
|
|
20
|
+
function LivePage({
|
|
21
|
+
url,
|
|
22
|
+
bounds,
|
|
23
|
+
}: {
|
|
24
|
+
url: string
|
|
25
|
+
bounds: { x: number; y: number; width: number; height: number }
|
|
26
|
+
}) {
|
|
27
|
+
const { available, create, destroy, onNavState, setBounds } =
|
|
28
|
+
useHostWebSurface()
|
|
29
|
+
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (!available) return
|
|
32
|
+
|
|
33
|
+
void create('active-tab', url, bounds)
|
|
34
|
+
const unsubscribe = onNavState((state) => {
|
|
35
|
+
if (state.surfaceId === 'active-tab') {
|
|
36
|
+
console.log(state.url, state.canGoBack, state.canGoForward)
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
return () => {
|
|
41
|
+
unsubscribe()
|
|
42
|
+
void destroy('active-tab')
|
|
43
|
+
}
|
|
44
|
+
}, [available, create, destroy, onNavState, url])
|
|
45
|
+
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (available) {
|
|
48
|
+
void setBounds('active-tab', bounds)
|
|
49
|
+
}
|
|
50
|
+
}, [available, bounds, setBounds])
|
|
51
|
+
|
|
52
|
+
return available ? null : <iframe title="Live page" src={url} />
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Bounds are logical pixels relative to the app content viewport. Re-send them
|
|
57
|
+
when a `ResizeObserver` reports a layout change. The host also re-clamps the
|
|
58
|
+
last requested bounds after native window resizes.
|
|
59
|
+
|
|
60
|
+
Native child webviews paint above app DOM. Call `setVisible(surfaceId, false)`
|
|
61
|
+
before showing a renderer-owned dialog or overlay, then restore visibility
|
|
62
|
+
when it closes. Host-native menus already paint above the surface.
|
|
63
|
+
|
|
64
|
+
All methods accept the standard host-service `{ signal, timeoutMs }` options.
|
|
65
|
+
Invalid input throws a `TypeError`; cancellation, timeout, and host failures
|
|
66
|
+
reject with the same errors as other host-service adapters.
|