@moldable-ai/ui 0.2.19 → 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 +50 -6
- package/dist/components/chat/chat-panel.d.ts.map +1 -1
- package/dist/components/chat/chat-panel.js +200 -163
- 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 +2 -2
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +1 -1
- 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/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/input-group.d.ts +1 -1
- 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/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 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- 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/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 +491 -3
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { ChevronDown, Image as ImageIcon } from 'lucide-react';
|
|
3
|
+
import { AlertCircle, ChevronDown, Image as ImageIcon, RotateCcw, } from 'lucide-react';
|
|
4
4
|
import { memo, useEffect, useMemo, useState } from 'react';
|
|
5
5
|
import { cn } from '../../lib/utils';
|
|
6
6
|
import { Markdown } from '../markdown';
|
|
7
7
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '../ui/collapsible';
|
|
8
|
+
import { ChatImageLightbox } from './chat-image-lightbox';
|
|
8
9
|
import { ToolApproval, ToolApprovalHeader, ToolApprovalRejected, } from './tool-approval';
|
|
9
10
|
import { useToolApprovalResponse } from './tool-approval-context';
|
|
10
11
|
import { getToolHandler, } from './tool-handlers';
|
|
@@ -13,6 +14,11 @@ import { AnimatePresence, motion } from 'framer-motion';
|
|
|
13
14
|
const DEFAULT_ACTIONS_LABEL = 'Thinking';
|
|
14
15
|
// OpenRouter sends these for encrypted reasoning msgs
|
|
15
16
|
const stripRedacted = (text) => text.replace(/\[REDACTED\]/g, '').trim();
|
|
17
|
+
export function getChatMessageRenderKey(message, legacyIndex) {
|
|
18
|
+
return typeof message.storeSequence === 'number'
|
|
19
|
+
? `stored-message-${message.storeSequence}`
|
|
20
|
+
: `legacy-message-${message.role}-${message.id}-${legacyIndex}`;
|
|
21
|
+
}
|
|
16
22
|
function emptyActivityCounts() {
|
|
17
23
|
return {
|
|
18
24
|
createdFileCount: 0,
|
|
@@ -335,11 +341,20 @@ function summarizeToolActivity(part, toolHandler, progress, fallbackId) {
|
|
|
335
341
|
break;
|
|
336
342
|
case 'viewImage': {
|
|
337
343
|
incrementActivityCount(counts, 'toolCallCount');
|
|
344
|
+
if (!running && part.output !== undefined) {
|
|
345
|
+
content = toolHandler.renderOutput(part.output, entryId);
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
338
348
|
const imagePath = stringValue(args?.imagePath) ?? stringValue(output?.imagePath);
|
|
339
349
|
const imageLabel = getPathLabel(imagePath);
|
|
340
350
|
content = (_jsxs(_Fragment, { children: [_jsx("span", { children: running ? 'Viewing image' : 'Viewed image' }), imageLabel && (_jsxs(_Fragment, { children: [' ', _jsx(ActivityCode, { title: imagePath, children: imageLabel })] }))] }));
|
|
341
351
|
break;
|
|
342
352
|
}
|
|
353
|
+
case 'remoteActivity':
|
|
354
|
+
incrementActivityCount(counts, 'toolCallCount');
|
|
355
|
+
content =
|
|
356
|
+
stringValue(output?.summary) ?? (running ? 'Using tool' : 'Used tool');
|
|
357
|
+
break;
|
|
343
358
|
case 'listSkillRepos':
|
|
344
359
|
case 'listAvailableSkills':
|
|
345
360
|
case 'syncSkills':
|
|
@@ -371,6 +386,7 @@ function summarizeToolActivity(part, toolHandler, progress, fallbackId) {
|
|
|
371
386
|
content,
|
|
372
387
|
isRunning: running,
|
|
373
388
|
isError: hasError,
|
|
389
|
+
allowOverflow: part.toolName === 'viewImage' && !running && part.output !== undefined,
|
|
374
390
|
},
|
|
375
391
|
counts,
|
|
376
392
|
};
|
|
@@ -418,9 +434,9 @@ function WorkSummary({ messageId, startedAtMs, completedAtMs, isWorking, childre
|
|
|
418
434
|
: durationLabel
|
|
419
435
|
? `Worked for ${durationLabel}`
|
|
420
436
|
: 'Worked';
|
|
421
|
-
return (_jsxs(Collapsible, { open: isOpen, onOpenChange: setIsOpen, className: "w-full", "data-work-summary": messageId, children: [_jsxs("div", { className: "text-muted-foreground/75 text-[13px] leading-5", children: [_jsxs(CollapsibleTrigger, { className: cn('group inline-flex max-w-full cursor-pointer items-center gap-1 rounded-md border border-transparent text-left transition-colors', 'hover:bg-muted/30 hover:text-foreground/80 focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2'), "aria-label": `${summaryLabel} activity`, children: [_jsx("span", { className: "truncate", children: summaryLabel }), _jsx(ChevronDown, { className: cn('size-3 shrink-0 opacity-40 transition-transform duration-200 group-hover:opacity-70', isOpen ? 'rotate-0' : '-rotate-90') })] }), _jsx("div", { className: "border-border/60 mt-1 w-full border-t" })] }), _jsx(CollapsibleContent, { className: "overflow-hidden", children: _jsx("div", { className: "pt-4", children: children }) })] }));
|
|
437
|
+
return (_jsxs(Collapsible, { open: isOpen, onOpenChange: setIsOpen, className: "w-full", "data-work-summary": messageId, "data-message-scroll-anchor": `work-summary-${messageId}`, children: [_jsxs("div", { className: "text-muted-foreground/75 text-[13px] leading-5", children: [_jsxs(CollapsibleTrigger, { className: cn('group inline-flex max-w-full cursor-pointer items-center gap-1 rounded-md border border-transparent text-left transition-colors', 'hover:bg-muted/30 hover:text-foreground/80 focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2'), "aria-label": `${summaryLabel} activity`, children: [_jsx("span", { className: "truncate", children: summaryLabel }), _jsx(ChevronDown, { className: cn('size-3 shrink-0 opacity-40 transition-transform duration-200 group-hover:opacity-70', isOpen ? 'rotate-0' : '-rotate-90') })] }), _jsx("div", { className: "border-border/60 mt-1 w-full border-t" })] }), _jsx(CollapsibleContent, { className: "overflow-hidden", children: _jsx("div", { className: "pt-4", children: children }) })] }));
|
|
422
438
|
}
|
|
423
|
-
function PureMessage({ message, isLast = false, isStreaming = false, }) {
|
|
439
|
+
function PureMessage({ message, isLast = false, isStreaming = false, animateEntry = true, onRetryError, }) {
|
|
424
440
|
// Get tool progress for streaming stdout/stderr
|
|
425
441
|
const toolProgress = useToolProgress();
|
|
426
442
|
// Get approval response handler
|
|
@@ -532,7 +548,8 @@ function PureMessage({ message, isLast = false, isStreaming = false, }) {
|
|
|
532
548
|
? toolProgress[part.toolCallId]
|
|
533
549
|
: undefined;
|
|
534
550
|
const shouldRenderImageToolInline = part.toolName === 'take_screenshot' ||
|
|
535
|
-
part.toolName === 'generateImage'
|
|
551
|
+
part.toolName === 'generateImage' ||
|
|
552
|
+
part.toolName === 'showImages';
|
|
536
553
|
if (shouldRenderImageToolInline && isToolLoading(part, progress)) {
|
|
537
554
|
closeActivityGroup();
|
|
538
555
|
items.push({
|
|
@@ -590,13 +607,28 @@ function PureMessage({ message, isLast = false, isStreaming = false, }) {
|
|
|
590
607
|
});
|
|
591
608
|
continue;
|
|
592
609
|
}
|
|
593
|
-
if (part.type === '
|
|
610
|
+
if (part.type === 'error') {
|
|
594
611
|
closeActivityGroup();
|
|
595
612
|
items.push({
|
|
596
|
-
type: '
|
|
613
|
+
type: 'error',
|
|
597
614
|
id: key,
|
|
598
|
-
|
|
615
|
+
errorPart: part,
|
|
599
616
|
});
|
|
617
|
+
continue;
|
|
618
|
+
}
|
|
619
|
+
if (part.type === 'file') {
|
|
620
|
+
closeActivityGroup();
|
|
621
|
+
const previous = items.at(-1);
|
|
622
|
+
if (previous?.type === 'file-group') {
|
|
623
|
+
previous.files.push({ id: key, filePart: part });
|
|
624
|
+
}
|
|
625
|
+
else {
|
|
626
|
+
items.push({
|
|
627
|
+
type: 'file-group',
|
|
628
|
+
id: `${key}-group`,
|
|
629
|
+
files: [{ id: key, filePart: part }],
|
|
630
|
+
});
|
|
631
|
+
}
|
|
600
632
|
}
|
|
601
633
|
}
|
|
602
634
|
// Close any remaining activity group
|
|
@@ -691,24 +723,42 @@ function PureMessage({ message, isLast = false, isStreaming = false, }) {
|
|
|
691
723
|
});
|
|
692
724
|
return next;
|
|
693
725
|
});
|
|
694
|
-
}, className: "mb-1 w-full", "data-ai-reasoning": true, children: [_jsxs(CollapsibleTrigger, { className: cn('group flex max-w-full cursor-pointer items-center gap-1 py-0.5 text-[13px] font-normal leading-5 transition-colors', 'text-muted-foreground/75 hover:text-foreground/80 min-w-0'), children: [_jsx("span", { className: "flex-1 truncate", children: titleForTrigger }), _jsx(ChevronDown, { className: cn('size-3 shrink-0 opacity-0 transition-all duration-200 group-hover:opacity-70', isOpen && 'rotate-180 opacity-50') })] }), _jsx(CollapsibleContent, { className: "text-muted-foreground/75 min-w-0 overflow-hidden pb-1.5 pl-3 pt-0 text-[13px] leading-5", children: _jsx("div", { className: "max-h-
|
|
726
|
+
}, className: "mb-1 w-full", "data-ai-reasoning": true, "data-message-scroll-anchor": item.id, children: [_jsxs(CollapsibleTrigger, { className: cn('group flex max-w-full cursor-pointer items-center gap-1 py-0.5 text-[13px] font-normal leading-5 transition-colors', 'text-muted-foreground/75 hover:text-foreground/80 min-w-0'), children: [_jsx("span", { className: "flex-1 truncate", children: titleForTrigger }), _jsx(ChevronDown, { className: cn('size-3 shrink-0 opacity-0 transition-all duration-200 group-hover:opacity-70', isOpen && 'rotate-180 opacity-50') })] }), _jsx(CollapsibleContent, { className: "text-muted-foreground/75 min-w-0 overflow-hidden pb-1.5 pl-3 pt-0 text-[13px] leading-5", children: _jsx("div", { className: "max-h-72 space-y-0.5 overflow-y-auto pr-2", children: group.entries.map((entry) => (_jsx("div", { className: cn('min-w-0', entry.allowOverflow
|
|
727
|
+
? 'overflow-visible'
|
|
728
|
+
: 'overflow-hidden truncate', entry.isError && 'text-destructive'), children: entry.content }, entry.id))) }) })] }, item.id));
|
|
695
729
|
}
|
|
696
730
|
if (item.type === 'inline-tool') {
|
|
697
|
-
return (_jsx("div", { className: "w-full min-w-0", children: item.content }, item.id));
|
|
731
|
+
return (_jsx("div", { "data-message-scroll-anchor": item.id, className: "w-full min-w-0", children: item.content }, item.id));
|
|
698
732
|
}
|
|
699
|
-
if (item.type === 'file'
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
733
|
+
if (item.type === 'file-group') {
|
|
734
|
+
if (message.role === 'user') {
|
|
735
|
+
return (_jsx("div", { "data-message-scroll-anchor": item.id, className: "flex w-full justify-end overflow-x-auto overflow-y-hidden", children: _jsx("div", { className: "flex max-w-full gap-2", children: item.files.map(({ id, filePart }) => {
|
|
736
|
+
const label = filePart.filename || 'Attached image';
|
|
737
|
+
const src = filePart.previewUrl;
|
|
738
|
+
return (_jsx("div", { className: "size-20 shrink-0", children: src ? (_jsx(ChatImageLightbox, { src: src, alt: label, className: "size-full rounded-2xl border", imageClassName: "size-full object-cover" })) : (_jsx("div", { className: "bg-muted flex size-full items-center justify-center rounded-2xl border", children: _jsx(ImageIcon, { className: "text-muted-foreground size-5" }) })) }, id));
|
|
739
|
+
}) }) }, item.id));
|
|
740
|
+
}
|
|
741
|
+
return (_jsx("div", { "data-message-scroll-anchor": item.id, className: "flex w-full flex-wrap gap-2", children: item.files.map(({ id, filePart }) => {
|
|
742
|
+
const label = filePart.filename || 'Generated image';
|
|
743
|
+
const src = filePart.previewUrl;
|
|
744
|
+
return (_jsx("div", { className: cn('w-fit max-w-full', filePart.presentation === 'thumbnail' && 'size-20'), children: src ? (_jsx(ChatImageLightbox, { src: src, alt: label, className: cn('bg-muted rounded-2xl border', filePart.presentation === 'thumbnail'
|
|
745
|
+
? 'size-full'
|
|
746
|
+
: 'max-h-[70vh] max-w-full'), imageClassName: filePart.presentation === 'thumbnail'
|
|
747
|
+
? 'size-full object-cover'
|
|
748
|
+
: 'max-h-[70vh] max-w-full object-contain' })) : (_jsx("div", { className: "flex aspect-square w-40 items-center justify-center", children: _jsx(ImageIcon, { className: "text-muted-foreground size-6" }) })) }, id));
|
|
749
|
+
}) }, item.id));
|
|
703
750
|
}
|
|
704
751
|
if (item.type === 'text' && item.textPart) {
|
|
705
752
|
if (message.role === 'user') {
|
|
706
|
-
return (_jsx("div", { className: "flex w-full justify-end", children: _jsx("div", { className: "bg-foreground/5 text-foreground max-w-[77%] break-words rounded-2xl px-3 py-2 text-[13px] leading-5", children: _jsx("div", { className: "whitespace-pre-wrap break-words", children: item.textPart.text }) }) }, item.id));
|
|
753
|
+
return (_jsx("div", { "data-message-scroll-anchor": item.id, className: "flex w-full justify-end", children: _jsx("div", { className: "bg-foreground/5 text-foreground max-w-[77%] break-words rounded-2xl px-3 py-2 text-[13px] leading-5", children: _jsx("div", { className: "whitespace-pre-wrap break-words", children: item.textPart.text }) }) }, item.id));
|
|
707
754
|
}
|
|
708
|
-
return (_jsx("div", { className: cn('flex min-w-0 flex-col gap-4', {
|
|
755
|
+
return (_jsx("div", { "data-message-scroll-anchor": item.id, className: cn('flex min-w-0 flex-col gap-4', {
|
|
709
756
|
'w-full': message.role === 'assistant',
|
|
710
757
|
}), children: _jsx(Markdown, { markdown: item.textPart.text, proseSize: "sm", className: cn('[&_.prose]:text-[13px] [&_.prose]:leading-[21px] [&_.prose]:text-current', '[&_.prose_pre]:bg-background/80 [&_.prose_code]:text-current', '[&_.prose_p:last-child]:mb-0 [&_.prose_p]:mb-2', '[&_.prose_ol:first-child]:mt-0 [&_.prose_ul:first-child]:mt-0', '[&_.prose>*:last-child]:mb-0') }) }, item.id));
|
|
711
758
|
}
|
|
759
|
+
if (item.type === 'error') {
|
|
760
|
+
return (_jsxs("div", { className: "border-destructive/30 bg-destructive/10 text-destructive flex items-start gap-2 rounded-lg border p-3 text-sm", children: [_jsx(AlertCircle, { className: "mt-0.5 size-4 shrink-0" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "break-words", children: item.errorPart.text }), onRetryError && (_jsxs("button", { type: "button", onClick: onRetryError, className: "border-destructive/30 hover:bg-destructive/10 mt-2 inline-flex h-7 cursor-pointer items-center gap-1.5 rounded-md border px-2.5 text-xs font-medium transition-colors", children: [_jsx(RotateCcw, { className: "size-3.5" }), "Retry"] }))] })] }, item.id));
|
|
761
|
+
}
|
|
712
762
|
return null;
|
|
713
763
|
};
|
|
714
764
|
const finalTextItemIndex = message.role === 'assistant'
|
|
@@ -727,7 +777,7 @@ function PureMessage({ message, isLast = false, isStreaming = false, }) {
|
|
|
727
777
|
isStreaming &&
|
|
728
778
|
message.role === 'assistant' &&
|
|
729
779
|
!message.turn?.completedAtMs;
|
|
730
|
-
return (_jsx(AnimatePresence, { children: _jsx(motion.div, { "data-testid": `message-${message.role}`, className: "group/message w-full min-w-0 px-2", initial: { y: 5, opacity: 0 }, animate: { y: 0, opacity: 1 }, "data-role": message.role, children: _jsx("div", { className: "flex w-full min-w-0 items-start gap-4", children: _jsxs("div", { className: "mt-1 flex w-full min-w-0 flex-col gap-2", children: [shouldCollapsePreAnswerWork && (_jsx(WorkSummary, { messageId: message.id, startedAtMs: message.turn?.startedAtMs, completedAtMs: message.turn?.completedAtMs, isWorking: isTurnStillWorking, children: _jsx("div", { className: "flex min-w-0 flex-col gap-2", children: preAnswerWorkItems.map(renderContentItem) }) })), finalAnswerItems.map(renderContentItem)] }) }) }) }));
|
|
780
|
+
return (_jsx(AnimatePresence, { children: _jsx(motion.div, { "data-testid": `message-${message.role}`, "data-entry-animation": animateEntry ? 'true' : 'false', className: "group/message w-full min-w-0 px-2", initial: animateEntry ? { y: 5, opacity: 0 } : false, animate: { y: 0, opacity: 1 }, "data-role": message.role, children: _jsx("div", { className: "flex w-full min-w-0 items-start gap-4", children: _jsxs("div", { className: "mt-1 flex w-full min-w-0 flex-col gap-2", children: [shouldCollapsePreAnswerWork && (_jsx(WorkSummary, { messageId: message.id, startedAtMs: message.turn?.startedAtMs, completedAtMs: message.turn?.completedAtMs, isWorking: isTurnStillWorking, children: _jsx("div", { className: "flex min-w-0 flex-col gap-2", children: preAnswerWorkItems.map(renderContentItem) }) })), finalAnswerItems.map(renderContentItem)] }) }) }) }));
|
|
731
781
|
}
|
|
732
782
|
export const Message = memo(PureMessage);
|
|
733
783
|
export function ThinkingMessage() {
|
|
@@ -17,6 +17,7 @@ interface MessagesProps {
|
|
|
17
17
|
restoringMessageId?: string | null;
|
|
18
18
|
/** Callback when restore is requested for a message */
|
|
19
19
|
onRestoreCheckpoint?: (messageId: string) => void;
|
|
20
|
+
onResolveMessageContent?: (message: ChatMessage) => void | Promise<unknown>;
|
|
20
21
|
isCompacting?: boolean;
|
|
21
22
|
}
|
|
22
23
|
export declare function computeIsThinking(messages: ChatMessage[], status: ChatStatus): boolean;
|
|
@@ -27,10 +28,12 @@ interface MessageRowProps {
|
|
|
27
28
|
checkpoint?: MessageCheckpoint;
|
|
28
29
|
restoringMessageId?: string | null;
|
|
29
30
|
onRestoreCheckpoint?: (messageId: string) => void;
|
|
31
|
+
onResolveMessageContent?: (message: ChatMessage) => void | Promise<unknown>;
|
|
32
|
+
onRetryError?: () => void;
|
|
30
33
|
}
|
|
31
|
-
declare function PureMessageRow({ message, isLast, isStreaming, checkpoint, restoringMessageId, onRestoreCheckpoint, }: MessageRowProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
declare function PureMessageRow({ message, isLast, isStreaming, checkpoint, restoringMessageId, onRestoreCheckpoint, onResolveMessageContent, onRetryError, }: MessageRowProps): import("react/jsx-runtime").JSX.Element;
|
|
32
35
|
export declare const MessageRow: import("react").MemoExoticComponent<typeof PureMessageRow>;
|
|
33
|
-
declare function PureMessages({ messages, status, checkpoints, restoringMessageId, onRestoreCheckpoint, isCompacting, }: MessagesProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
declare function PureMessages({ messages, status, checkpoints, restoringMessageId, onRestoreCheckpoint, onResolveMessageContent, isCompacting, }: MessagesProps): import("react/jsx-runtime").JSX.Element;
|
|
34
37
|
export declare const Messages: import("react").MemoExoticComponent<typeof PureMessages>;
|
|
35
38
|
export {};
|
|
36
39
|
//# sourceMappingURL=chat-messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-messages.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-messages.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"chat-messages.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-messages.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,gBAAgB,CAAA;AAGvB,KAAK,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,CAAA;AAE/D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,MAAM,EAAE,UAAU,CAAA;IAClB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC5C,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACjD,uBAAuB,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,WAwB5E;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,WAAW,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACjD,uBAAuB,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3E,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;CAC1B;AAED,iBAAS,cAAc,CAAC,EACtB,OAAO,EACP,MAAM,EACN,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,YAAY,GACb,EAAE,eAAe,2CAuGjB;AAED,eAAO,MAAM,UAAU,4DAAuB,CAAA;AAE9C,iBAAS,YAAY,CAAC,EACpB,QAAQ,EACR,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,YAAoB,GACrB,EAAE,aAAa,2CA2Bf;AAED,eAAO,MAAM,QAAQ,0DAAqB,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { memo } from 'react';
|
|
3
|
-
import { CompactingMessage, Message, ThinkingMessage, } from './chat-message';
|
|
2
|
+
import { memo, useCallback, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { CompactingMessage, Message, ThinkingMessage, getChatMessageRenderKey, } from './chat-message';
|
|
4
4
|
import { CheckpointBadge } from './checkpoint-badge';
|
|
5
5
|
export function computeIsThinking(messages, status) {
|
|
6
6
|
const lastMessage = messages[messages.length - 1];
|
|
@@ -24,18 +24,73 @@ export function computeIsThinking(messages, status) {
|
|
|
24
24
|
}
|
|
25
25
|
return false;
|
|
26
26
|
}
|
|
27
|
-
function PureMessageRow({ message, isLast, isStreaming, checkpoint, restoringMessageId, onRestoreCheckpoint, }) {
|
|
27
|
+
function PureMessageRow({ message, isLast, isStreaming, checkpoint, restoringMessageId, onRestoreCheckpoint, onResolveMessageContent, onRetryError, }) {
|
|
28
|
+
const omittedContentRef = message.contentRef?.omitted
|
|
29
|
+
? message.contentRef
|
|
30
|
+
: null;
|
|
31
|
+
const containerRef = useRef(null);
|
|
32
|
+
const isResolvingRef = useRef(false);
|
|
33
|
+
const [isResolving, setIsResolving] = useState(false);
|
|
34
|
+
const [resolveFailed, setResolveFailed] = useState(false);
|
|
35
|
+
const resolveContent = useCallback(async () => {
|
|
36
|
+
if (!omittedContentRef ||
|
|
37
|
+
!onResolveMessageContent ||
|
|
38
|
+
isResolvingRef.current) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
isResolvingRef.current = true;
|
|
42
|
+
setIsResolving(true);
|
|
43
|
+
setResolveFailed(false);
|
|
44
|
+
try {
|
|
45
|
+
await onResolveMessageContent(message);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
isResolvingRef.current = false;
|
|
49
|
+
setIsResolving(false);
|
|
50
|
+
setResolveFailed(true);
|
|
51
|
+
}
|
|
52
|
+
}, [message, omittedContentRef, onResolveMessageContent]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
const element = containerRef.current;
|
|
55
|
+
if (!element ||
|
|
56
|
+
!omittedContentRef ||
|
|
57
|
+
!onResolveMessageContent ||
|
|
58
|
+
typeof IntersectionObserver === 'undefined') {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const observer = new IntersectionObserver((entries) => {
|
|
62
|
+
if (entries.some((entry) => entry.isIntersecting)) {
|
|
63
|
+
observer.disconnect();
|
|
64
|
+
void resolveContent();
|
|
65
|
+
}
|
|
66
|
+
}, { rootMargin: '160px' });
|
|
67
|
+
observer.observe(element);
|
|
68
|
+
return () => observer.disconnect();
|
|
69
|
+
}, [omittedContentRef, onResolveMessageContent, resolveContent]);
|
|
28
70
|
// Only show checkpoint badge on user messages that have checkpoints
|
|
29
71
|
const showCheckpointBadge = checkpoint && message.role === 'user' && onRestoreCheckpoint;
|
|
30
|
-
return (_jsxs("div", { className: "group/message-row relative", children: [
|
|
72
|
+
return (_jsxs("div", { ref: containerRef, className: "group/message-row relative", children: [omittedContentRef ? (_jsx("div", { className: message.role === 'user'
|
|
73
|
+
? 'flex justify-end px-2'
|
|
74
|
+
: 'flex justify-start px-2', children: _jsx("button", { type: "button", onClick: () => void resolveContent(), disabled: isResolving || !onResolveMessageContent, className: "border-border bg-muted/40 text-muted-foreground hover:bg-muted/70 flex cursor-pointer items-center gap-2 rounded-xl border px-3 py-2 text-xs disabled:cursor-default", children: isResolving
|
|
75
|
+
? 'Loading full message…'
|
|
76
|
+
: resolveFailed
|
|
77
|
+
? 'Retry loading full message'
|
|
78
|
+
: `Load full message (${formatContentBytes(omittedContentRef.serializedBytes)})` }) })) : (_jsx(Message, { message: message, isLast: isLast, isStreaming: isStreaming, animateEntry: typeof message.storeSequence !== 'number', onRetryError: onRetryError })), showCheckpointBadge && (_jsx("div", { className: "absolute bottom-1 right-4 opacity-0 transition-opacity group-hover/message-row:opacity-100", children: _jsx(CheckpointBadge, { messageId: message.id, fileCount: checkpoint.fileCount, totalBytes: checkpoint.totalBytes, isRestoring: restoringMessageId === message.id, onRestore: () => onRestoreCheckpoint(message.id) }) }))] }));
|
|
31
79
|
}
|
|
32
80
|
export const MessageRow = memo(PureMessageRow);
|
|
33
|
-
function PureMessages({ messages, status, checkpoints, restoringMessageId, onRestoreCheckpoint, isCompacting = false, }) {
|
|
81
|
+
function PureMessages({ messages, status, checkpoints, restoringMessageId, onRestoreCheckpoint, onResolveMessageContent, isCompacting = false, }) {
|
|
34
82
|
const isThinking = computeIsThinking(messages, status);
|
|
35
83
|
const isStreaming = status === 'streaming' || status === 'submitted';
|
|
36
84
|
return (_jsxs(_Fragment, { children: [messages.map((message, index) => {
|
|
37
85
|
const checkpoint = checkpoints?.get(message.id);
|
|
38
|
-
return (_jsx(MessageRow, { message: message, isLast: index === messages.length - 1, isStreaming: isStreaming, checkpoint: checkpoint, restoringMessageId: restoringMessageId, onRestoreCheckpoint: onRestoreCheckpoint }, message
|
|
86
|
+
return (_jsx(MessageRow, { message: message, isLast: index === messages.length - 1, isStreaming: isStreaming, checkpoint: checkpoint, restoringMessageId: restoringMessageId, onRestoreCheckpoint: onRestoreCheckpoint, onResolveMessageContent: onResolveMessageContent }, getChatMessageRenderKey(message, index)));
|
|
39
87
|
}), isThinking && !isCompacting && _jsx(ThinkingMessage, {}), isCompacting && _jsx(CompactingMessage, {})] }));
|
|
40
88
|
}
|
|
41
89
|
export const Messages = memo(PureMessages);
|
|
90
|
+
function formatContentBytes(bytes) {
|
|
91
|
+
if (bytes < 1024)
|
|
92
|
+
return `${bytes} B`;
|
|
93
|
+
if (bytes < 1024 * 1024)
|
|
94
|
+
return `${Math.ceil(bytes / 1024)} KB`;
|
|
95
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
96
|
+
}
|
|
@@ -2,7 +2,7 @@ import { type ChangeEvent, type FormEvent, type ReactNode } from 'react';
|
|
|
2
2
|
import { type ChatImageAttachment, type ChatSlashCommandOption, type ChatSubmitMode } from './chat-input';
|
|
3
3
|
import { type ChatMessage } from './chat-message';
|
|
4
4
|
import { type MessageCheckpoint } from './chat-messages';
|
|
5
|
-
import { type ConversationMeta } from './conversation-history';
|
|
5
|
+
import { type ConversationGroup, type ConversationMeta } from './conversation-history';
|
|
6
6
|
import { type ModelEffortPresetOption, type ModelProviderOption } from './model-effort-selector';
|
|
7
7
|
import { type ApprovalResponseHandler } from './tool-approval-context';
|
|
8
8
|
type ChatStatus = 'ready' | 'submitted' | 'streaming' | 'error';
|
|
@@ -12,6 +12,10 @@ type ChatAuthIssueInput = {
|
|
|
12
12
|
authIssue?: ChatAuthIssue | null;
|
|
13
13
|
error?: Error | null;
|
|
14
14
|
};
|
|
15
|
+
export declare function getChatAuthPromptCopy(issue: ChatAuthIssue): {
|
|
16
|
+
label: string;
|
|
17
|
+
action: string;
|
|
18
|
+
};
|
|
15
19
|
export declare function resolveChatAuthIssue({ missingApiKey, authIssue, error, }: ChatAuthIssueInput): ChatAuthIssue | null;
|
|
16
20
|
/**
|
|
17
21
|
* Progress data for a running tool (command execution with streaming stdout/stderr)
|
|
@@ -36,6 +40,18 @@ export interface ChatContextUsage {
|
|
|
36
40
|
isEstimate?: boolean;
|
|
37
41
|
compactsAutomatically?: boolean;
|
|
38
42
|
}
|
|
43
|
+
export interface ChatPlanUsageWindow {
|
|
44
|
+
label: string;
|
|
45
|
+
usedPercent: number;
|
|
46
|
+
resetAt?: number | null;
|
|
47
|
+
}
|
|
48
|
+
export interface ChatPlanUsage {
|
|
49
|
+
accountLabel?: string | null;
|
|
50
|
+
planLabel?: string | null;
|
|
51
|
+
windows: ChatPlanUsageWindow[];
|
|
52
|
+
}
|
|
53
|
+
export declare function hasPersistedChatError(messages: ChatMessage[]): boolean;
|
|
54
|
+
export declare function getPrependPreservedScrollTop(previousScrollTop: number, previousScrollHeight: number, nextScrollHeight: number): number;
|
|
39
55
|
export interface ChatPanelProps {
|
|
40
56
|
/** Chat messages */
|
|
41
57
|
messages: ChatMessage[];
|
|
@@ -67,12 +83,30 @@ export interface ChatPanelProps {
|
|
|
67
83
|
conversations?: ConversationMeta[];
|
|
68
84
|
/** Current conversation ID */
|
|
69
85
|
currentConversationId?: string | null;
|
|
86
|
+
/** App scope currently visible in the desktop. */
|
|
87
|
+
currentAppId?: string | null;
|
|
88
|
+
/** Whether another bounded metadata page is available. */
|
|
89
|
+
hasMoreConversations?: boolean;
|
|
90
|
+
/** Whether the next metadata page is currently loading. */
|
|
91
|
+
isLoadingMoreConversations?: boolean;
|
|
92
|
+
/** Loads one more bounded metadata page on explicit viewport demand. */
|
|
93
|
+
onLoadMoreConversations?: () => void | Promise<unknown>;
|
|
94
|
+
/** Resolves one visible oversized message from its opaque content hash. */
|
|
95
|
+
onResolveMessageContent?: (message: ChatMessage) => void | Promise<unknown>;
|
|
70
96
|
/** Incremented when a conversation is explicitly loaded from history */
|
|
71
97
|
scrollToBottomSignal?: number;
|
|
98
|
+
/** Whether the current bounded display window has older persisted rows. */
|
|
99
|
+
hasOlderMessages?: boolean;
|
|
100
|
+
/** Whether an older display page is currently loading. */
|
|
101
|
+
isLoadingOlderMessages?: boolean;
|
|
102
|
+
/** Loads and prepends one older bounded display page. */
|
|
103
|
+
onLoadOlderMessages?: () => Promise<'prepended' | 'reset' | 'unchanged'>;
|
|
72
104
|
/** Handle conversation selection */
|
|
73
105
|
onSelectConversation?: (id: string) => void;
|
|
74
|
-
/** Handle conversation
|
|
75
|
-
|
|
106
|
+
/** Handle conversation archiving */
|
|
107
|
+
onArchiveConversation?: (id: string) => void;
|
|
108
|
+
/** Handle archiving every conversation in one app scope. */
|
|
109
|
+
onArchiveConversationGroup?: (group: ConversationGroup) => void;
|
|
76
110
|
/** Placeholder text */
|
|
77
111
|
placeholder?: string;
|
|
78
112
|
/** Welcome message when no messages exist */
|
|
@@ -81,6 +115,10 @@ export interface ChatPanelProps {
|
|
|
81
115
|
isExpanded: boolean;
|
|
82
116
|
/** Toggle expanded state */
|
|
83
117
|
onExpandedChange: (expanded: boolean) => void;
|
|
118
|
+
/** Whether chat is taking over the full desktop workspace. */
|
|
119
|
+
isFullScreen?: boolean;
|
|
120
|
+
/** Toggle the full-screen chat workspace. */
|
|
121
|
+
onFullScreenChange?: (fullScreen: boolean) => void;
|
|
84
122
|
/** Whether the panel is minimized (hidden below fold) */
|
|
85
123
|
isMinimized?: boolean;
|
|
86
124
|
/** Toggle minimized state */
|
|
@@ -89,12 +127,16 @@ export interface ChatPanelProps {
|
|
|
89
127
|
className?: string;
|
|
90
128
|
/** Error from chat request */
|
|
91
129
|
error?: Error | null;
|
|
130
|
+
/** Retry a failed turn by sending a new continuation turn. */
|
|
131
|
+
onRetryError?: () => void;
|
|
92
132
|
/** Whether API keys are missing */
|
|
93
133
|
missingApiKey?: boolean;
|
|
94
134
|
/** More specific auth issue to show in the setup prompt */
|
|
95
135
|
authIssue?: ChatAuthIssue | null;
|
|
96
|
-
/**
|
|
97
|
-
|
|
136
|
+
/** Start the default ChatGPT connection flow */
|
|
137
|
+
onConnectChatGPT?: () => void | Promise<void>;
|
|
138
|
+
/** Open advanced AI provider and API key setup */
|
|
139
|
+
onAdvancedSetup?: () => void;
|
|
98
140
|
/** Progress data for running tools (streaming stdout/stderr) */
|
|
99
141
|
toolProgress?: Record<string, ToolProgressData>;
|
|
100
142
|
/** Callback for tool approval responses */
|
|
@@ -139,10 +181,12 @@ export interface ChatPanelProps {
|
|
|
139
181
|
compactedHistoryStartIndex?: number | null;
|
|
140
182
|
/** Estimated chat context usage for the selected model */
|
|
141
183
|
contextUsage?: ChatContextUsage;
|
|
184
|
+
/** Provider plan limits for the active account */
|
|
185
|
+
planUsage?: ChatPlanUsage;
|
|
142
186
|
}
|
|
143
187
|
/**
|
|
144
188
|
* Floating chat panel with model selector
|
|
145
189
|
*/
|
|
146
|
-
export declare function ChatPanel({ messages, status, isTurnInFlight, input, onInputChange, onSubmit, onStop, onNewChat, modelProviders, modelEffortPresets, selectedModel, selectedReasoningEffort, onModelEffortChange, conversations, currentConversationId, scrollToBottomSignal, onSelectConversation,
|
|
190
|
+
export declare function ChatPanel({ messages, status, isTurnInFlight, input, onInputChange, onSubmit, onStop, onNewChat, modelProviders, modelEffortPresets, selectedModel, selectedReasoningEffort, onModelEffortChange, conversations, currentConversationId, currentAppId, hasMoreConversations, isLoadingMoreConversations, onLoadMoreConversations, onResolveMessageContent, scrollToBottomSignal, hasOlderMessages, isLoadingOlderMessages, onLoadOlderMessages, onSelectConversation, onArchiveConversation, onArchiveConversationGroup, placeholder, welcomeMessage, isExpanded, onExpandedChange, isFullScreen, onFullScreenChange, isMinimized, onMinimizedChange, className, error, onRetryError, missingApiKey, authIssue, onConnectChatGPT, onAdvancedSetup, toolProgress, onApprovalResponse, isEditingApp, onEditingAppChange, showEditingAppToggle, checkpoints, restoringMessageId, onRestoreCheckpoint, imageAttachments, onRemoveImageAttachment, isImageDropActive, queuedMessages, onRemoveQueuedMessage, onRetryQueuedMessage, onSteerQueuedMessage, onReorderQueuedMessages, onEditQueuedMessage, slashCommands, onSlashCommandSelect, isCompacting, compactedHistoryStartIndex, contextUsage, planUsage, }: ChatPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
147
191
|
export {};
|
|
148
192
|
//# sourceMappingURL=chat-panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-panel.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat-panel.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-panel.tsx"],"names":[],"mappings":"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"}
|