@lostgradient/cinder 0.5.0 → 0.7.0
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/CHANGELOG.md +34 -0
- package/README.md +32 -2
- package/components.json +66 -4
- package/dist/_internal/strict-stable-context.d.ts +9 -0
- package/dist/cli/best-practices.d.ts +2 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.js +978 -0
- package/dist/cli/knowledge.d.ts +23 -0
- package/dist/cli/manifest-validation.d.ts +2 -0
- package/dist/cli/mcp.d.ts +2 -0
- package/dist/cli/output.d.ts +21 -0
- package/dist/cli/types.d.ts +107 -0
- package/dist/components/access-gate/index.js +26 -24
- package/dist/components/accordion/accordion.context.d.ts +2 -3
- package/dist/components/accordion/index.js +22 -8
- package/dist/components/accordion-item/index.js +22 -8
- package/dist/components/action-row/action-row.css +133 -0
- package/dist/components/action-row/action-row.schema.d.ts +3 -0
- package/dist/components/action-row/action-row.schema.js +126 -0
- package/dist/components/action-row/action-row.svelte.d.ts +19 -0
- package/dist/components/action-row/action-row.types.d.ts +45 -0
- package/dist/components/action-row/action-row.variables.d.ts +2 -0
- package/dist/components/action-row/action-row.variables.js +61 -0
- package/dist/components/action-row/index.d.ts +5 -0
- package/dist/components/action-row/index.js +184 -0
- package/dist/components/alert/index.js +19 -18
- package/dist/components/alert-dialog/index.js +62 -62
- package/dist/components/approval-card/approval-card.css +31 -1
- package/dist/components/approval-card/approval-card.schema.js +6 -1
- package/dist/components/approval-card/approval-card.svelte.d.ts +1 -1
- package/dist/components/approval-card/approval-card.types.d.ts +20 -0
- package/dist/components/approval-card/index.d.ts +1 -1
- package/dist/components/approval-card/index.js +1615 -1441
- package/dist/components/area-chart/index.js +65 -67
- package/dist/components/aspect-ratio/index.js +12 -11
- package/dist/components/autocomplete/index.js +138 -63
- package/dist/components/avatar/index.js +31 -29
- package/dist/components/avatar-group/index.js +147 -69
- package/dist/components/backdrop/index.js +16 -15
- package/dist/components/badge/index.js +21 -20
- package/dist/components/banner/index.js +19 -18
- package/dist/components/bar-chart/index.js +63 -66
- package/dist/components/bento-cell/index.d.ts +1 -1
- package/dist/components/bento-cell/index.js +16 -15
- package/dist/components/bento-grid/index.js +30 -28
- package/dist/components/blog-section/blog-section.css +2 -1
- package/dist/components/blog-section/index.js +70 -66
- package/dist/components/breadcrumbs/index.js +9 -9
- package/dist/components/button/index.js +40 -41
- package/dist/components/button-group/index.js +12 -11
- package/dist/components/calendar/index.js +25 -24
- package/dist/components/callout/callout.schema.js +6 -2
- package/dist/components/callout/callout.svelte.d.ts +2 -2
- package/dist/components/callout/callout.types.d.ts +25 -13
- package/dist/components/callout/index.d.ts +1 -1
- package/dist/components/callout/index.js +111 -49
- package/dist/components/capability-gate/index.js +33 -32
- package/dist/components/card/card.css +53 -1
- package/dist/components/card/card.schema.js +5 -1
- package/dist/components/card/card.svelte.d.ts +1 -1
- package/dist/components/card/card.types.d.ts +3 -0
- package/dist/components/card/index.d.ts +1 -1
- package/dist/components/card/index.js +253 -76
- package/dist/components/carousel/index.js +40 -44
- package/dist/components/chat/index.js +13106 -31070
- package/dist/components/chat-conversation-header/index.js +369 -14892
- package/dist/components/chat-conversation-list/index.js +188 -14788
- package/dist/components/checkbox/checkbox.schema.js +5 -1
- package/dist/components/checkbox/checkbox.types.d.ts +2 -0
- package/dist/components/checkbox/index.js +32 -27
- package/dist/components/checkbox-group/index.js +9 -9
- package/dist/components/chip/index.js +11 -12
- package/dist/components/choice-grid/index.js +17 -16
- package/dist/components/click-away-listener/index.js +11 -10
- package/dist/components/code-block/code-block.css +56 -2
- package/dist/components/code-block/index.js +26 -26
- package/dist/components/collapsible/index.js +23 -22
- package/dist/components/color-field/index.js +49 -48
- package/dist/components/color-picker/index.js +13 -13
- package/dist/components/color-swatch-picker/index.js +5 -5
- package/dist/components/combobox/index.js +112 -37
- package/dist/components/command-item/index.js +9 -9
- package/dist/components/command-menu/index.js +92 -17
- package/dist/components/command-palette/index.js +7 -7
- package/dist/components/confirm-dialog/index.js +62 -62
- package/dist/components/container/index.js +13 -12
- package/dist/components/context-menu/index.js +162 -81
- package/dist/components/context-menu-trigger/index.js +17 -16
- package/dist/components/copy-button/index.js +17 -16
- package/dist/components/cta-section/index.js +74 -73
- package/dist/components/data-grid/index.js +41 -40
- package/dist/components/data-list/index.js +17 -16
- package/dist/components/data-table/index.js +136 -129
- package/dist/components/date-picker/index.js +150 -73
- package/dist/components/date-range-field/index.js +178 -100
- package/dist/components/description-list/index.js +15 -14
- package/dist/components/diff-statistics/index.js +32 -31
- package/dist/components/diff-viewer/index.js +271 -254
- package/dist/components/divider/index.js +19 -19
- package/dist/components/drawer/index.js +43 -41
- package/dist/components/dropdown/index.js +178 -96
- package/dist/components/dropdown-group/index.js +11 -10
- package/dist/components/dropdown-item/index.js +22 -21
- package/dist/components/dropdown-label/index.js +3 -2
- package/dist/components/dropdown-menu/index.js +101 -25
- package/dist/components/dropdown-separator/index.js +3 -2
- package/dist/components/dropdown-trigger/index.js +15 -14
- package/dist/components/empty-state/index.js +21 -20
- package/dist/components/event-stream-viewer/index.js +110 -109
- package/dist/components/event-timeline/index.js +27 -26
- package/dist/components/experimental/json-viewer/index.d.ts +3 -3
- package/dist/components/experimental/json-viewer/index.js +25 -27
- package/dist/components/experimental/message/index.d.ts +3 -3
- package/dist/components/experimental/message/index.js +19 -18
- package/dist/components/faceted-filter-bar/index.js +101 -101
- package/dist/components/feature-section/feature-section.css +3 -2
- package/dist/components/feature-section/index.js +42 -40
- package/dist/components/feed/index.js +31 -29
- package/dist/components/feed-event/index.js +22 -21
- package/dist/components/file-upload/index.js +45 -44
- package/dist/components/floating-action-button/index.js +22 -21
- package/dist/components/focus-trap/index.js +13 -12
- package/dist/components/footer/footer.css +2 -1
- package/dist/components/footer/index.js +35 -35
- package/dist/components/form-field/index.js +9 -9
- package/dist/components/form-section/index.js +10 -11
- package/dist/components/grid/index.js +29 -27
- package/dist/components/grid-item/index.js +15 -14
- package/dist/components/grid-list/index.js +37 -35
- package/dist/components/grid-list-item/index.js +28 -27
- package/dist/components/hero-section/hero-section.css +2 -1
- package/dist/components/hero-section/index.js +42 -40
- package/dist/components/hover-card/index.js +96 -21
- package/dist/components/image/index.js +23 -22
- package/dist/components/inline-loading/index.js +18 -16
- package/dist/components/input/index.js +45 -44
- package/dist/components/invocation-rule-builder/index.js +58 -61
- package/dist/components/json-schema-editor/index.js +620 -517
- package/dist/components/json-viewer/index.js +25 -27
- package/dist/components/kanban-board/index.js +24 -25
- package/dist/components/kbd/index.js +11 -10
- package/dist/components/keyboard-shortcuts/index.js +33 -31
- package/dist/components/label/index.js +16 -15
- package/dist/components/line-chart/index.js +66 -68
- package/dist/components/link/index.js +21 -20
- package/dist/components/load-more/index.js +7 -7
- package/dist/components/logo-cloud/index.js +39 -37
- package/dist/components/logo-cloud/logo-cloud.css +3 -2
- package/dist/components/markdown-editor/index.js +475 -371
- package/dist/components/marquee/index.js +15 -14
- package/dist/components/masonry/index.js +12 -11
- package/dist/components/matrix-chart/index.js +50 -50
- package/dist/components/media-controls/index.js +33 -32
- package/dist/components/mega-menu/index.js +41 -43
- package/dist/components/menu-bar/index.js +167 -89
- package/dist/components/message/index.js +19 -18
- package/dist/components/meter/index.js +5 -5
- package/dist/components/modal/index.js +19 -18
- package/dist/components/multi-select/index.js +27 -27
- package/dist/components/navigation-bar/index.d.ts +1 -1
- package/dist/components/navigation-bar/index.js +76 -51
- package/dist/components/navigation-bar/navigation-bar.css +15 -0
- package/dist/components/navigation-bar/navigation-bar.schema.js +6 -1
- package/dist/components/navigation-bar/navigation-bar.svelte.d.ts +1 -1
- package/dist/components/navigation-bar/navigation-bar.types.d.ts +8 -0
- package/dist/components/navigation-item/index.js +20 -19
- package/dist/components/newsletter-section/index.js +121 -119
- package/dist/components/newsletter-section/newsletter-section.css +2 -1
- package/dist/components/number-input/index.js +36 -36
- package/dist/components/page-header/index.js +17 -16
- package/dist/components/pagination/index.js +26 -21
- package/dist/components/pagination/pagination.schema.js +12 -3
- package/dist/components/pagination/pagination.types.d.ts +6 -2
- package/dist/components/payload-inspector/index.js +136 -139
- package/dist/components/permission-matrix/index.js +39 -39
- package/dist/components/phone-input/index.js +13 -13
- package/dist/components/pin-input/index.js +13 -13
- package/dist/components/popover/index.js +96 -21
- package/dist/components/portal/index.js +90 -15
- package/dist/components/portal/portal.utilities.svelte.d.ts +25 -3
- package/dist/components/pricing-card/index.js +62 -62
- package/dist/components/pricing-section/index.js +96 -94
- package/dist/components/pricing-section/pricing-section.css +2 -1
- package/dist/components/progress/index.js +13 -13
- package/dist/components/qr-code/index.js +23 -22
- package/dist/components/radio-group/index.js +26 -25
- package/dist/components/rating/index.js +16 -17
- package/dist/components/resizable-panels/index.js +21 -20
- package/dist/components/review-editor/index.js +914 -809
- package/dist/components/run-step-timeline/index.js +127 -122
- package/dist/components/schema-form/index.js +203 -194
- package/dist/components/scroll-area/index.js +15 -14
- package/dist/components/search-field/index.js +24 -23
- package/dist/components/secret-value-field/index.js +35 -34
- package/dist/components/section-heading/index.js +11 -11
- package/dist/components/segment/index.js +37 -22
- package/dist/components/segmented-control/index.d.ts +3 -1
- package/dist/components/segmented-control/index.js +188 -74
- package/dist/components/segmented-control/segmented-control-state.svelte.d.ts +2 -1
- package/dist/components/select/index.js +29 -29
- package/dist/components/selection-popover/index.js +110 -34
- package/dist/components/share-card/index.js +37 -38
- package/dist/components/sheet/index.js +44 -42
- package/dist/components/shortcut-hint/index.js +29 -28
- package/dist/components/side-navigation/index.js +57 -53
- package/dist/components/side-navigation-group/index.js +21 -20
- package/dist/components/side-navigation-item/index.js +24 -22
- package/dist/components/sidebar/index.js +130 -160
- package/dist/components/sidebar/sidebar.css +14 -0
- package/dist/components/skip-link/index.js +11 -10
- package/dist/components/slider/index.js +15 -15
- package/dist/components/sortable-list/index.js +5 -5
- package/dist/components/source-diff-viewer/index.d.ts +6 -0
- package/dist/components/source-diff-viewer/index.js +887 -0
- package/dist/components/source-diff-viewer/source-diff-viewer.css +129 -0
- package/dist/components/source-diff-viewer/source-diff-viewer.css.d.ts +1 -0
- package/dist/components/source-diff-viewer/source-diff-viewer.schema.d.ts +3 -0
- package/dist/components/source-diff-viewer/source-diff-viewer.schema.js +96 -0
- package/dist/components/source-diff-viewer/source-diff-viewer.svelte.d.ts +20 -0
- package/dist/components/source-diff-viewer/source-diff-viewer.types.d.ts +44 -0
- package/dist/components/source-diff-viewer/source-diff-viewer.utilities.d.ts +6 -0
- package/dist/components/source-diff-viewer/source-diff-viewer.variables.d.ts +2 -0
- package/dist/components/source-diff-viewer/source-diff-viewer.variables.js +61 -0
- package/dist/components/sparkbar/index.js +20 -19
- package/dist/components/spectrogram/index.js +44 -44
- package/dist/components/spectrum-chart/index.js +39 -39
- package/dist/components/speed-dial/index.js +54 -51
- package/dist/components/speed-dial-action/index.js +39 -37
- package/dist/components/spinner/index.js +3 -2
- package/dist/components/stacked-list-item/index.js +30 -29
- package/dist/components/stat/index.js +21 -20
- package/dist/components/stat-group/index.js +34 -32
- package/dist/components/stats-section/index.js +65 -61
- package/dist/components/status-dot/index.js +21 -20
- package/dist/components/steps/index.d.ts +1 -1
- package/dist/components/steps/index.js +77 -63
- package/dist/components/steps/steps.css +15 -1
- package/dist/components/steps/steps.schema.js +6 -1
- package/dist/components/steps/steps.svelte.d.ts +2 -2
- package/dist/components/steps/steps.types.d.ts +12 -0
- package/dist/components/surface/index.js +10 -9
- package/dist/components/tab/index.js +5 -5
- package/dist/components/tab-panel/index.js +3 -3
- package/dist/components/table/index.js +64 -60
- package/dist/components/table-cell/index.js +11 -10
- package/dist/components/table-header-cell/index.js +17 -16
- package/dist/components/table-of-contents/index.js +21 -20
- package/dist/components/table-row/index.js +21 -20
- package/dist/components/tabs/index.d.ts +10 -4
- package/dist/components/tabs/index.js +15 -11
- package/dist/components/tabs/tabs.css +6 -0
- package/dist/components/tabs/tabs.schema.js +6 -1
- package/dist/components/tabs/tabs.types.d.ts +5 -0
- package/dist/components/tag-input/index.js +36 -35
- package/dist/components/team-section/index.js +523 -264
- package/dist/components/team-section/team-section.css +2 -1
- package/dist/components/testimonial-section/index.js +390 -207
- package/dist/components/testimonial-section/testimonial-section.css +2 -1
- package/dist/components/textarea/index.js +30 -29
- package/dist/components/time-field/index.js +40 -40
- package/dist/components/timeline/index.js +40 -38
- package/dist/components/toast-region/index.js +24 -25
- package/dist/components/toggle/index.js +5 -5
- package/dist/components/toolbar/index.js +34 -24
- package/dist/components/toolbar/toolbar-group.svelte.d.ts +2 -2
- package/dist/components/toolbar/toolbar.css +10 -11
- package/dist/components/toolbar/toolbar.schema.js +2 -2
- package/dist/components/toolbar/toolbar.types.d.ts +2 -2
- package/dist/components/tooltip/index.js +90 -15
- package/dist/components/transfer-list/index.js +22 -22
- package/dist/components/tree/index.js +83 -82
- package/dist/components/tree-item/index.js +21 -21
- package/dist/components/typography/index.js +13 -12
- package/dist/components/virtual-list/index.js +20 -19
- package/dist/components/visually-hidden/index.js +11 -10
- package/dist/components/waveform/index.js +38 -38
- package/dist/index.d.ts +9 -9
- package/dist/index.js +61103 -80396
- package/dist/server/components/access-gate/index.js +5 -4
- package/dist/server/components/accordion/index.js +5 -4
- package/dist/server/components/accordion-item/index.js +5 -4
- package/dist/server/components/action-row/index.js +12 -0
- package/dist/server/components/alert/index.js +1 -1
- package/dist/server/components/alert-dialog/index.js +1 -1
- package/dist/server/components/approval-card/index.js +13 -10
- package/dist/server/components/area-chart/index.js +1 -1
- package/dist/server/components/aspect-ratio/index.js +1 -1
- package/dist/server/components/autocomplete/index.js +5 -5
- package/dist/server/components/avatar/index.js +1 -1
- package/dist/server/components/avatar-group/index.js +5 -5
- package/dist/server/components/backdrop/index.js +1 -1
- package/dist/server/components/badge/index.js +3 -3
- package/dist/server/components/banner/index.js +1 -1
- package/dist/server/components/bar-chart/index.js +1 -1
- package/dist/server/components/bento-cell/index.js +1 -1
- package/dist/server/components/bento-grid/index.js +1 -1
- package/dist/server/components/blog-section/index.js +1 -1
- package/dist/server/components/breadcrumbs/index.js +1 -1
- package/dist/server/components/button/index.js +1 -1
- package/dist/server/components/button-group/index.js +1 -1
- package/dist/server/components/calendar/index.js +1 -1
- package/dist/server/components/callout/index.js +2 -2
- package/dist/server/components/capability-gate/index.js +1 -1
- package/dist/server/components/card/index.js +8 -4
- package/dist/server/components/carousel/index.js +1 -1
- package/dist/server/components/chat/index.js +15 -27
- package/dist/server/components/chat-conversation-header/index.js +9 -9
- package/dist/server/components/chat-conversation-list/index.js +5 -5
- package/dist/server/components/checkbox/index.js +4 -4
- package/dist/server/components/checkbox-group/index.js +1 -1
- package/dist/server/components/chip/index.js +1 -1
- package/dist/server/components/choice-grid/index.js +1 -1
- package/dist/server/components/choice-grid-item/index.js +1 -1
- package/dist/server/components/click-away-listener/index.js +1 -1
- package/dist/server/components/code-block/index.js +4 -4
- package/dist/server/components/collapsible/index.js +1 -1
- package/dist/server/components/color-field/index.js +4 -4
- package/dist/server/components/color-picker/index.js +2 -2
- package/dist/server/components/color-swatch-picker/index.js +1 -1
- package/dist/server/components/combobox/index.js +5 -5
- package/dist/server/components/command-item/index.js +1 -1
- package/dist/server/components/command-menu/index.js +4 -4
- package/dist/server/components/command-palette/index.js +2 -2
- package/dist/server/components/confirm-dialog/index.js +1 -1
- package/dist/server/components/container/index.js +1 -1
- package/dist/server/components/context-menu/index.js +5 -5
- package/dist/server/components/context-menu-trigger/index.js +1 -1
- package/dist/server/components/copy-button/index.js +3 -3
- package/dist/server/components/cta-section/index.js +1 -1
- package/dist/server/components/data-grid/index.js +1 -1
- package/dist/server/components/data-list/index.js +1 -1
- package/dist/server/components/data-table/index.js +5 -5
- package/dist/server/components/date-picker/index.js +5 -5
- package/dist/server/components/date-range-field/index.js +6 -6
- package/dist/server/components/description-list/index.js +1 -1
- package/dist/server/components/diff-statistics/index.js +1 -1
- package/dist/server/components/diff-viewer/index.js +8 -8
- package/dist/server/components/divider/index.js +1 -1
- package/dist/server/components/drawer/index.js +1 -1
- package/dist/server/components/dropdown/index.js +5 -5
- package/dist/server/components/dropdown-group/index.js +1 -1
- package/dist/server/components/dropdown-item/index.js +1 -1
- package/dist/server/components/dropdown-label/index.js +1 -1
- package/dist/server/components/dropdown-menu/index.js +4 -4
- package/dist/server/components/dropdown-separator/index.js +1 -1
- package/dist/server/components/dropdown-trigger/index.js +1 -1
- package/dist/server/components/empty-state/index.js +1 -1
- package/dist/server/components/event-stream-viewer/index.js +3 -3
- package/dist/server/components/event-timeline/index.js +1 -1
- package/dist/server/components/experimental/json-viewer/index.js +1 -1
- package/dist/server/components/experimental/message/index.js +1 -1
- package/dist/server/components/faceted-filter-bar/index.js +4 -4
- package/dist/server/components/feature-section/index.js +1 -1
- package/dist/server/components/feed/index.js +1 -1
- package/dist/server/components/feed-event/index.js +1 -1
- package/dist/server/components/file-upload/index.js +1 -1
- package/dist/server/components/floating-action-button/index.js +1 -1
- package/dist/server/components/focus-trap/index.js +1 -1
- package/dist/server/components/footer/index.js +1 -1
- package/dist/server/components/form-field/index.js +1 -1
- package/dist/server/components/form-section/index.js +1 -1
- package/dist/server/components/grid/index.js +1 -1
- package/dist/server/components/grid-item/index.js +1 -1
- package/dist/server/components/grid-list/index.js +1 -1
- package/dist/server/components/grid-list-item/index.js +1 -1
- package/dist/server/components/hero-section/index.js +1 -1
- package/dist/server/components/hover-card/index.js +3 -3
- package/dist/server/components/image/index.js +1 -1
- package/dist/server/components/inline-loading/index.js +1 -1
- package/dist/server/components/input/index.js +4 -4
- package/dist/server/components/invocation-rule-builder/index.js +1 -1
- package/dist/server/components/json-schema-editor/index.js +16 -16
- package/dist/server/components/json-viewer/index.js +1 -1
- package/dist/server/components/kanban-board/index.js +1 -1
- package/dist/server/components/kbd/index.js +1 -1
- package/dist/server/components/keyboard-shortcuts/index.js +1 -1
- package/dist/server/components/label/index.js +1 -1
- package/dist/server/components/line-chart/index.js +1 -1
- package/dist/server/components/link/index.js +1 -1
- package/dist/server/components/load-more/index.js +1 -1
- package/dist/server/components/locale-provider/index.js +1 -1
- package/dist/server/components/logo-cloud/index.js +1 -1
- package/dist/server/components/markdown-editor/index.js +16 -16
- package/dist/server/components/marquee/index.js +1 -1
- package/dist/server/components/masonry/index.js +1 -1
- package/dist/server/components/matrix-chart/index.js +1 -1
- package/dist/server/components/media-controls/index.js +1 -1
- package/dist/server/components/mega-menu/index.js +1 -1
- package/dist/server/components/menu-bar/index.js +5 -5
- package/dist/server/components/message/index.js +1 -1
- package/dist/server/components/meter/index.js +1 -1
- package/dist/server/components/modal/index.js +1 -1
- package/dist/server/components/multi-select/index.js +2 -2
- package/dist/server/components/navigation-bar/index.js +2 -2
- package/dist/server/components/navigation-item/index.js +1 -1
- package/dist/server/components/newsletter-section/index.js +4 -4
- package/dist/server/components/number-input/index.js +1 -1
- package/dist/server/components/page-header/index.js +1 -1
- package/dist/server/components/pagination/index.js +2 -2
- package/dist/server/components/payload-inspector/index.js +8 -8
- package/dist/server/components/permission-matrix/index.js +1 -1
- package/dist/server/components/phone-input/index.js +1 -1
- package/dist/server/components/pin-input/index.js +1 -1
- package/dist/server/components/popover/index.js +4 -4
- package/dist/server/components/portal/index.js +2 -2
- package/dist/server/components/pricing-card/index.js +1 -1
- package/dist/server/components/pricing-section/index.js +1 -1
- package/dist/server/components/progress/index.js +1 -1
- package/dist/server/components/qr-code/index.js +2 -2
- package/dist/server/components/radio-group/index.js +1 -1
- package/dist/server/components/rating/index.js +1 -1
- package/dist/server/components/resizable-panels/index.js +1 -1
- package/dist/server/components/review-editor/index.js +3396 -55
- package/dist/server/components/run-step-timeline/index.js +3 -3
- package/dist/server/components/schema-form/index.js +5 -5
- package/dist/server/components/scroll-area/index.js +1 -1
- package/dist/server/components/search-field/index.js +4 -4
- package/dist/server/components/secret-value-field/index.js +1 -1
- package/dist/server/components/section-heading/index.js +1 -1
- package/dist/server/components/segment/index.js +4 -4
- package/dist/server/components/segmented-control/index.js +10 -6
- package/dist/server/components/select/index.js +1 -1
- package/dist/server/components/selection-popover/index.js +4 -4
- package/dist/server/components/share-card/index.js +1 -1
- package/dist/server/components/sheet/index.js +1 -1
- package/dist/server/components/shortcut-hint/index.js +1 -1
- package/dist/server/components/side-navigation/index.js +1 -1
- package/dist/server/components/side-navigation-group/index.js +1 -1
- package/dist/server/components/side-navigation-item/index.js +1 -1
- package/dist/server/components/sidebar/index.js +2 -2
- package/dist/server/components/skeleton/index.js +1 -1
- package/dist/server/components/skip-link/index.js +1 -1
- package/dist/server/components/slider/index.js +1 -1
- package/dist/server/components/sortable-list/index.js +1 -1
- package/dist/server/components/source-diff-viewer/index.js +18 -0
- package/dist/server/components/sparkbar/index.js +1 -1
- package/dist/server/components/spectrogram/index.js +1 -1
- package/dist/server/components/spectrum-chart/index.js +1 -1
- package/dist/server/components/speed-dial/index.js +1 -1
- package/dist/server/components/speed-dial-action/index.js +1 -1
- package/dist/server/components/spinner/index.js +1 -1
- package/dist/server/components/stacked-list-item/index.js +1 -1
- package/dist/server/components/stat/index.js +1 -1
- package/dist/server/components/stat-group/index.js +1 -1
- package/dist/server/components/stats-section/index.js +1 -1
- package/dist/server/components/status-dot/index.js +1 -1
- package/dist/server/components/steps/index.js +2 -2
- package/dist/server/components/surface/index.js +1 -1
- package/dist/server/components/tab/index.js +1 -1
- package/dist/server/components/tab-list/index.js +1 -1
- package/dist/server/components/tab-panel/index.js +1 -1
- package/dist/server/components/table/index.js +3 -3
- package/dist/server/components/table-body/index.js +1 -1
- package/dist/server/components/table-cell/index.js +1 -1
- package/dist/server/components/table-header/index.js +1 -1
- package/dist/server/components/table-header-cell/index.js +1 -1
- package/dist/server/components/table-of-contents/index.js +1 -1
- package/dist/server/components/table-row/index.js +1 -1
- package/dist/server/components/tabs/index.js +17 -8
- package/dist/server/components/tag-input/index.js +3 -3
- package/dist/server/components/team-section/index.js +11 -7
- package/dist/server/components/testimonial-section/index.js +8 -4
- package/dist/server/components/textarea/index.js +1 -1
- package/dist/server/components/time-field/index.js +1 -1
- package/dist/server/components/timeline/index.js +1 -1
- package/dist/server/components/toast-region/index.js +1 -1
- package/dist/server/components/toggle/index.js +1 -1
- package/dist/server/components/toolbar/index.js +2 -2
- package/dist/server/components/tooltip/index.js +4 -4
- package/dist/server/components/transfer-list/index.js +1 -1
- package/dist/server/components/tree/index.js +1 -1
- package/dist/server/components/tree-item/index.js +1 -1
- package/dist/server/components/typography/index.js +1 -1
- package/dist/server/components/virtual-list/index.js +1 -1
- package/dist/server/components/visually-hidden/index.js +1 -1
- package/dist/server/components/waveform/index.js +1 -1
- package/dist/server/highlighters/shiki/index.js +1 -1
- package/dist/server/index-49we2xfs.js +344 -0
- package/dist/server/index-8fhvxk30.js +265 -0
- package/dist/server/index-x2ysg8ds.js +388 -0
- package/dist/server/index.js +176 -199
- package/dist/server/index.server-0e1m3agz.js +102 -0
- package/dist/server/index.server-0gwr59yw.js +9 -0
- package/dist/server/index.server-0q2bpsa1.js +98 -0
- package/dist/server/index.server-0v6na3yp.js +37 -0
- package/dist/server/index.server-1nh09ck7.js +377 -0
- package/dist/server/index.server-1vscnped.js +105 -0
- package/dist/server/index.server-2j52msk2.js +34 -0
- package/dist/server/index.server-4nk7gy0q.js +294 -0
- package/dist/server/index.server-4ztq565m.js +9 -0
- package/dist/server/index.server-5d01cn4f.js +52 -0
- package/dist/server/index.server-5knawt7p.js +94 -0
- package/dist/server/index.server-5npa16n7.js +9 -0
- package/dist/server/index.server-62mtrvr7.js +111 -0
- package/dist/server/index.server-73x2d3j3.js +9 -0
- package/dist/server/index.server-7fp0epev.js +143 -0
- package/dist/server/index.server-7yq1jgt3.js +9 -0
- package/dist/server/index.server-8cxs4kya.js +244 -0
- package/dist/server/index.server-9j5sym59.js +23 -0
- package/dist/server/index.server-9s4na701.js +195 -0
- package/dist/server/index.server-a2hz77tt.js +458 -0
- package/dist/server/index.server-aeexcxdp.js +9 -0
- package/dist/server/index.server-atjc1qcq.js +83 -0
- package/dist/server/index.server-bfsbp9dz.js +169 -0
- package/dist/server/index.server-bn02606y.js +19 -0
- package/dist/server/index.server-btgb3d56.js +195 -0
- package/dist/server/index.server-bvmwnjx6.js +3797 -0
- package/dist/server/index.server-bvsb9gea.js +2 -0
- package/dist/server/index.server-cbtg8rq5.js +457 -0
- package/dist/server/index.server-cf6pxeyg.js +9 -0
- package/dist/server/index.server-cvnw3hw9.js +9 -0
- package/dist/server/index.server-d04aj37r.js +62 -0
- package/dist/server/index.server-dc35kh7d.js +1835 -0
- package/dist/server/index.server-dp9j2kkr.js +291 -0
- package/dist/server/index.server-e3fnv1g6.js +223 -0
- package/dist/server/index.server-e8x1hgw6.js +118 -0
- package/dist/server/index.server-ecm1vs3g.js +9 -0
- package/dist/server/index.server-egk5q7aj.js +148 -0
- package/dist/server/index.server-ejyf7e48.js +9 -0
- package/dist/server/index.server-ezpdsg81.js +733 -0
- package/dist/server/index.server-f0hma3jp.js +9 -0
- package/dist/server/index.server-f23vtaw4.js +284 -0
- package/dist/server/index.server-ft1xvwqd.js +9 -0
- package/dist/server/index.server-g789yep6.js +1035 -0
- package/dist/server/index.server-gxf0d1p5.js +76 -0
- package/dist/server/index.server-hcfnae5y.js +126 -0
- package/dist/server/index.server-hd8gpehd.js +9 -0
- package/dist/server/index.server-hfx487zj.js +42 -0
- package/dist/server/index.server-hhxjaeen.js +35 -0
- package/dist/server/index.server-hpcs7tmh.js +271 -0
- package/dist/server/index.server-j3ddzcaa.js +1028 -0
- package/dist/server/index.server-j5hn2qds.js +126 -0
- package/dist/server/index.server-jeqg2d22.js +123 -0
- package/dist/server/index.server-jk4rx4aa.js +9 -0
- package/dist/server/index.server-jt1twhgk.js +726 -0
- package/dist/server/index.server-jtj3r53y.js +9 -0
- package/dist/server/index.server-jync915v.js +2309 -0
- package/dist/server/index.server-kd4b0342.js +607 -0
- package/dist/server/index.server-kvdrhzr3.js +176 -0
- package/dist/server/index.server-mehav5vs.js +31 -0
- package/dist/server/index.server-n39drzes.js +222 -0
- package/dist/server/index.server-nzgjr724.js +190 -0
- package/dist/server/index.server-pacrqvyz.js +9 -0
- package/dist/server/index.server-pakw5qm3.js +84 -0
- package/dist/server/index.server-pe929n15.js +107 -0
- package/dist/server/index.server-pen9pxt6.js +117 -0
- package/dist/server/index.server-pxg74pyp.js +393 -0
- package/dist/server/index.server-q89dz8h1.js +72 -0
- package/dist/server/index.server-qfa2rxzx.js +177 -0
- package/dist/server/index.server-qwknp759.js +141 -0
- package/dist/server/index.server-rhhmdxtz.js +159 -0
- package/dist/server/index.server-rjap4k7y.js +1389 -0
- package/dist/server/index.server-s9khh4ry.js +56 -0
- package/dist/server/index.server-sh2rxejg.js +371 -0
- package/dist/server/index.server-te0d13bf.js +4416 -0
- package/dist/server/index.server-thedzn9z.js +100 -0
- package/dist/server/index.server-tnbaknbp.js +9 -0
- package/dist/server/index.server-txnxnbd6.js +161 -0
- package/dist/server/index.server-vne4rzfa.js +9 -0
- package/dist/server/index.server-vt6sn9y4.js +447 -0
- package/dist/server/index.server-w83kmcrx.js +1163 -0
- package/dist/server/index.server-wc9aggfz.js +197 -0
- package/dist/server/index.server-wm7mk5kw.js +93 -0
- package/dist/server/index.server-z1q7qnb8.js +84 -0
- package/dist/server/index.server-zeqv7nrz.js +184 -0
- package/dist/server/styles/base-guard.js +1 -1
- package/dist/utilities/__test-helpers__/announcer-wrapper.svelte.d.ts +7 -0
- package/package.json +2370 -1605
- package/src/_internal/anchored-overlay.svelte.ts +158 -198
- package/src/_internal/chart/chart-interaction.svelte.ts +134 -166
- package/src/_internal/strict-stable-context.ts +27 -0
- package/src/_internal/tree-drag-controller.svelte.ts +256 -315
- package/src/_internal/tree-registry.svelte.ts +154 -222
- package/src/_internal/use-virtualizer.svelte.ts +168 -217
- package/src/components/_internal/create-command-list-state.svelte.ts +133 -160
- package/src/components/_internal/create-sliding-dialog-state.svelte.ts +130 -154
- package/src/components/_radio/radio.schema.json +36 -0
- package/src/components/_radio/radio.schema.ts +41 -0
- package/src/components/_radio/radio.svelte +14 -42
- package/src/components/_radio/radio.variables.json +1 -0
- package/src/components/_radio/radio.variables.ts +3 -0
- package/src/components/_sortable-item.svelte +302 -370
- package/src/components/_timeline-item/timeline-item.svelte +12 -42
- package/src/components/_tree-expand-all/tree-expand-all.svelte +20 -45
- package/src/components/_tree-select-all/tree-select-all.schema.json +38 -0
- package/src/components/_tree-select-all/tree-select-all.schema.ts +43 -0
- package/src/components/_tree-select-all/tree-select-all.svelte +14 -41
- package/src/components/_tree-select-all/tree-select-all.variables.json +1 -0
- package/src/components/_tree-select-all/tree-select-all.variables.ts +3 -0
- package/src/components/_visually-hidden-live-region.svelte +30 -85
- package/src/components/access-gate/access-gate-inline.svelte +231 -312
- package/src/components/access-gate/access-gate.schema.json +38 -0
- package/src/components/access-gate/access-gate.schema.ts +43 -0
- package/src/components/access-gate/access-gate.svelte +14 -54
- package/src/components/access-gate/access-gate.variables.json +1 -0
- package/src/components/access-gate/access-gate.variables.ts +3 -0
- package/src/components/accordion/accordion.context.ts +7 -7
- package/src/components/accordion/accordion.schema.json +26 -0
- package/src/components/accordion/accordion.schema.ts +30 -0
- package/src/components/accordion/accordion.svelte +20 -52
- package/src/components/accordion/accordion.variables.json +1 -0
- package/src/components/accordion/accordion.variables.ts +3 -0
- package/src/components/accordion-item/accordion-item.schema.json +35 -0
- package/src/components/accordion-item/accordion-item.schema.ts +39 -0
- package/src/components/accordion-item/accordion-item.svelte +12 -29
- package/src/components/accordion-item/accordion-item.variables.json +1 -0
- package/src/components/accordion-item/accordion-item.variables.ts +3 -0
- package/src/components/action-row/action-row.css +133 -0
- package/src/components/action-row/action-row.examples.json +19 -0
- package/src/components/action-row/action-row.schema.json +66 -0
- package/src/components/action-row/action-row.schema.ts +74 -0
- package/src/components/action-row/action-row.svelte +51 -0
- package/src/components/action-row/action-row.types.ts +50 -0
- package/src/components/action-row/action-row.variables.json +1 -0
- package/src/components/action-row/action-row.variables.ts +3 -0
- package/src/components/action-row/index.ts +11 -0
- package/src/components/alert/alert.schema.json +38 -0
- package/src/components/alert/alert.schema.ts +43 -0
- package/src/components/alert/alert.svelte +38 -88
- package/src/components/alert/alert.variables.json +1 -0
- package/src/components/alert/alert.variables.ts +3 -0
- package/src/components/alert-dialog/alert-dialog.schema.json +53 -0
- package/src/components/alert-dialog/alert-dialog.schema.ts +60 -0
- package/src/components/alert-dialog/alert-dialog.svelte +12 -42
- package/src/components/alert-dialog/alert-dialog.variables.json +1 -0
- package/src/components/alert-dialog/alert-dialog.variables.ts +3 -0
- package/src/components/approval-card/approval-card.css +31 -1
- package/src/components/approval-card/approval-card.examples.json +1 -1
- package/src/components/approval-card/approval-card.schema.json +211 -0
- package/src/components/approval-card/approval-card.schema.ts +219 -0
- package/src/components/approval-card/approval-card.svelte +316 -324
- package/src/components/approval-card/approval-card.types.ts +22 -0
- package/src/components/approval-card/approval-card.variables.json +1 -0
- package/src/components/approval-card/approval-card.variables.ts +3 -0
- package/src/components/approval-card/index.ts +2 -0
- package/src/components/area-chart/area-chart.schema.json +143 -0
- package/src/components/area-chart/area-chart.schema.ts +149 -0
- package/src/components/area-chart/area-chart.svelte +68 -141
- package/src/components/area-chart/area-chart.variables.json +1 -0
- package/src/components/area-chart/area-chart.variables.ts +3 -0
- package/src/components/aspect-ratio/aspect-ratio.schema.json +143 -0
- package/src/components/aspect-ratio/aspect-ratio.schema.ts +147 -0
- package/src/components/aspect-ratio/aspect-ratio.svelte +7 -37
- package/src/components/aspect-ratio/aspect-ratio.variables.json +1 -0
- package/src/components/aspect-ratio/aspect-ratio.variables.ts +3 -0
- package/src/components/autocomplete/autocomplete.schema.json +79 -0
- package/src/components/autocomplete/autocomplete.schema.ts +90 -0
- package/src/components/autocomplete/autocomplete.svelte +220 -295
- package/src/components/autocomplete/autocomplete.variables.json +1 -0
- package/src/components/autocomplete/autocomplete.variables.ts +3 -0
- package/src/components/avatar/avatar.schema.json +36 -0
- package/src/components/avatar/avatar.schema.ts +41 -0
- package/src/components/avatar/avatar.svelte +14 -39
- package/src/components/avatar/avatar.variables.json +1 -0
- package/src/components/avatar/avatar.variables.ts +3 -0
- package/src/components/avatar-group/avatar-group.schema.json +69 -0
- package/src/components/avatar-group/avatar-group.schema.ts +74 -0
- package/src/components/avatar-group/avatar-group.svelte +57 -114
- package/src/components/avatar-group/avatar-group.variables.json +1 -0
- package/src/components/avatar-group/avatar-group.variables.ts +3 -0
- package/src/components/backdrop/backdrop.schema.json +44 -0
- package/src/components/backdrop/backdrop.schema.ts +52 -0
- package/src/components/backdrop/backdrop.svelte +43 -68
- package/src/components/backdrop/backdrop.variables.json +1 -0
- package/src/components/backdrop/backdrop.variables.ts +3 -0
- package/src/components/badge/badge.schema.json +39 -0
- package/src/components/badge/badge.schema.ts +46 -0
- package/src/components/badge/badge.svelte +22 -65
- package/src/components/badge/badge.variables.json +1 -0
- package/src/components/badge/badge.variables.ts +3 -0
- package/src/components/banner/banner.schema.json +39 -0
- package/src/components/banner/banner.schema.ts +44 -0
- package/src/components/banner/banner.svelte +47 -86
- package/src/components/banner/banner.variables.json +1 -0
- package/src/components/banner/banner.variables.ts +3 -0
- package/src/components/bar-chart/bar-chart.schema.json +144 -0
- package/src/components/bar-chart/bar-chart.schema.ts +153 -0
- package/src/components/bar-chart/bar-chart.svelte +73 -149
- package/src/components/bar-chart/bar-chart.variables.json +1 -0
- package/src/components/bar-chart/bar-chart.variables.ts +3 -0
- package/src/components/bento-cell/bento-cell.schema.json +105 -0
- package/src/components/bento-cell/bento-cell.schema.ts +109 -0
- package/src/components/bento-cell/bento-cell.svelte +11 -41
- package/src/components/bento-cell/bento-cell.variables.json +1 -0
- package/src/components/bento-cell/bento-cell.variables.ts +3 -0
- package/src/components/bento-cell/index.ts +1 -1
- package/src/components/bento-grid/bento-grid.schema.json +54 -0
- package/src/components/bento-grid/bento-grid.schema.ts +60 -0
- package/src/components/bento-grid/bento-grid.svelte +34 -71
- package/src/components/bento-grid/bento-grid.variables.json +1 -0
- package/src/components/bento-grid/bento-grid.variables.ts +3 -0
- package/src/components/blog-section/blog-section.css +2 -1
- package/src/components/blog-section/blog-section.schema.json +82 -0
- package/src/components/blog-section/blog-section.schema.ts +86 -0
- package/src/components/blog-section/blog-section.svelte +9 -37
- package/src/components/blog-section/blog-section.variables.json +1 -0
- package/src/components/blog-section/blog-section.variables.ts +3 -0
- package/src/components/breadcrumbs/breadcrumbs.schema.json +21 -0
- package/src/components/breadcrumbs/breadcrumbs.schema.ts +25 -0
- package/src/components/breadcrumbs/breadcrumbs.svelte +3 -23
- package/src/components/breadcrumbs/breadcrumbs.variables.json +1 -0
- package/src/components/breadcrumbs/breadcrumbs.variables.ts +3 -0
- package/src/components/button/button.schema.json +62 -0
- package/src/components/button/button.schema.ts +68 -0
- package/src/components/button/button.svelte +66 -161
- package/src/components/button/button.variables.json +1 -0
- package/src/components/button/button.variables.ts +3 -0
- package/src/components/button-group/button-group.schema.json +33 -0
- package/src/components/button-group/button-group.schema.ts +39 -0
- package/src/components/button-group/button-group.svelte +61 -92
- package/src/components/button-group/button-group.variables.json +1 -0
- package/src/components/button-group/button-group.variables.ts +3 -0
- package/src/components/calendar/calendar.schema.json +61 -0
- package/src/components/calendar/calendar.schema.ts +65 -0
- package/src/components/calendar/calendar.svelte +167 -232
- package/src/components/calendar/calendar.variables.json +1 -0
- package/src/components/calendar/calendar.variables.ts +3 -0
- package/src/components/callout/callout.schema.json +38 -0
- package/src/components/callout/callout.schema.ts +46 -0
- package/src/components/callout/callout.svelte +69 -76
- package/src/components/callout/callout.types.ts +25 -13
- package/src/components/callout/callout.variables.json +1 -0
- package/src/components/callout/callout.variables.ts +3 -0
- package/src/components/callout/index.ts +1 -1
- package/src/components/capability-gate/capability-gate.schema.json +72 -0
- package/src/components/capability-gate/capability-gate.schema.ts +76 -0
- package/src/components/capability-gate/capability-gate.svelte +35 -84
- package/src/components/capability-gate/capability-gate.variables.json +1 -0
- package/src/components/capability-gate/capability-gate.variables.ts +3 -0
- package/src/components/card/card.css +53 -1
- package/src/components/card/card.examples.json +12 -0
- package/src/components/card/card.schema.json +64 -0
- package/src/components/card/card.schema.ts +71 -0
- package/src/components/card/card.svelte +41 -51
- package/src/components/card/card.types.ts +3 -0
- package/src/components/card/card.variables.json +1 -0
- package/src/components/card/card.variables.ts +3 -0
- package/src/components/card/index.ts +7 -1
- package/src/components/carousel/carousel.schema.json +46 -0
- package/src/components/carousel/carousel.schema.ts +50 -0
- package/src/components/carousel/carousel.svelte +71 -105
- package/src/components/carousel/carousel.variables.json +1 -0
- package/src/components/carousel/carousel.variables.ts +3 -0
- package/src/components/chat/artifact/artifact-panel.svelte +7 -22
- package/src/components/chat/artifact/artifact-viewer.svelte +11 -20
- package/src/components/chat/artifact/chat-artifact-layout.svelte +4 -33
- package/src/components/chat/chat.schema.json +250 -0
- package/src/components/chat/chat.schema.ts +286 -0
- package/src/components/chat/chat.svelte +34 -58
- package/src/components/chat/chat.variables.json +1 -0
- package/src/components/chat/chat.variables.ts +3 -0
- package/src/components/chat/container/chat-history-trigger.svelte +10 -30
- package/src/components/chat/container/chat-jump-controls.svelte +7 -36
- package/src/components/chat/container/chat-participant-typing.svelte +3 -31
- package/src/components/chat/container/chat-search-bar.svelte +44 -91
- package/src/components/chat/container/chat-status-announcer.svelte +2 -20
- package/src/components/chat/container/chat.svelte +842 -1144
- package/src/components/chat/container/use-chat-disclosure-state.svelte.ts +28 -62
- package/src/components/chat/container/use-chat-keyboard-nav.svelte.ts +111 -161
- package/src/components/chat/container/use-chat-message-groups.svelte.ts +104 -195
- package/src/components/chat/container/use-chat-read-receipts.svelte.ts +38 -79
- package/src/components/chat/container/use-chat-scroll-state.svelte.ts +222 -347
- package/src/components/chat/container/use-chat-search.svelte.ts +66 -128
- package/src/components/chat/container/use-chat-typing-indicator.svelte.ts +100 -147
- package/src/components/chat/container/use-chat-unread-state.svelte.ts +124 -201
- package/src/components/chat/container/use-chat-virtualizer.svelte.ts +247 -315
- package/src/components/chat/export/conversation-export-actions.svelte +61 -89
- package/src/components/chat/input/chat-attachment-preview.svelte +17 -25
- package/src/components/chat/input/chat-input.svelte +243 -398
- package/src/components/chat/message/chat-date-separator.svelte +19 -38
- package/src/components/chat/message/chat-message-parts-renderer.svelte +41 -55
- package/src/components/chat/message/chat-message.svelte +98 -229
- package/src/components/chat/message/chat-read-receipt.svelte +14 -44
- package/src/components/chat/message/image-lightbox.svelte +64 -92
- package/src/components/chat/message/markdown-preview.svelte +33 -40
- package/src/components/chat/message/message-attachments.svelte +44 -75
- package/src/components/chat/message/message-content.svelte +42 -73
- package/src/components/chat/message/parts/image-part.svelte +4 -20
- package/src/components/chat/message/parts/markdown-part.svelte +3 -9
- package/src/components/chat/message/parts/reasoning-part.svelte +26 -40
- package/src/components/chat/message/parts/step-part.svelte +8 -15
- package/src/components/chat/message/parts/suggestion-part.svelte +4 -20
- package/src/components/chat/message/parts/tool-approval-part.svelte +25 -44
- package/src/components/chat/message/parts/tool-call-part.svelte +7 -19
- package/src/components/chat/message/parts/tool-result-part.svelte +17 -26
- package/src/components/chat/message/tool-call-group.svelte +39 -68
- package/src/components/chat/message/tool-payload-code.svelte +5 -46
- package/src/components/chat-conversation-header/chat-conversation-header.schema.json +34 -0
- package/src/components/chat-conversation-header/chat-conversation-header.schema.ts +38 -0
- package/src/components/chat-conversation-header/chat-conversation-header.svelte +12 -46
- package/src/components/chat-conversation-header/chat-conversation-header.variables.json +1 -0
- package/src/components/chat-conversation-header/chat-conversation-header.variables.ts +3 -0
- package/src/components/chat-conversation-list/chat-conversation-list.schema.json +45 -0
- package/src/components/chat-conversation-list/chat-conversation-list.schema.ts +52 -0
- package/src/components/chat-conversation-list/chat-conversation-list.svelte +12 -47
- package/src/components/chat-conversation-list/chat-conversation-list.variables.json +1 -0
- package/src/components/chat-conversation-list/chat-conversation-list.variables.ts +3 -0
- package/src/components/checkbox/checkbox.examples.json +6 -0
- package/src/components/checkbox/checkbox.schema.json +53 -0
- package/src/components/checkbox/checkbox.schema.ts +59 -0
- package/src/components/checkbox/checkbox.svelte +66 -104
- package/src/components/checkbox/checkbox.types.ts +2 -0
- package/src/components/checkbox/checkbox.variables.json +1 -0
- package/src/components/checkbox/checkbox.variables.ts +3 -0
- package/src/components/checkbox-group/checkbox-group.schema.json +45 -0
- package/src/components/checkbox-group/checkbox-group.schema.ts +54 -0
- package/src/components/checkbox-group/checkbox-group.svelte +18 -50
- package/src/components/checkbox-group/checkbox-group.variables.json +1 -0
- package/src/components/checkbox-group/checkbox-group.variables.ts +3 -0
- package/src/components/chip/chip.schema.json +60 -0
- package/src/components/chip/chip.schema.ts +68 -0
- package/src/components/chip/chip.svelte +64 -102
- package/src/components/chip/chip.variables.json +1 -0
- package/src/components/chip/chip.variables.ts +3 -0
- package/src/components/choice-grid/choice-grid.schema.json +64 -0
- package/src/components/choice-grid/choice-grid.schema.ts +73 -0
- package/src/components/choice-grid/choice-grid.svelte +112 -179
- package/src/components/choice-grid/choice-grid.variables.json +1 -0
- package/src/components/choice-grid/choice-grid.variables.ts +3 -0
- package/src/components/choice-grid-item/choice-grid-item.schema.json +34 -0
- package/src/components/choice-grid-item/choice-grid-item.schema.ts +40 -0
- package/src/components/choice-grid-item/choice-grid-item.svelte +62 -99
- package/src/components/choice-grid-item/choice-grid-item.variables.json +1 -0
- package/src/components/choice-grid-item/choice-grid-item.variables.ts +3 -0
- package/src/components/click-away-listener/click-away-listener.schema.json +31 -0
- package/src/components/click-away-listener/click-away-listener.schema.ts +37 -0
- package/src/components/click-away-listener/click-away-listener.svelte +32 -59
- package/src/components/click-away-listener/click-away-listener.variables.json +1 -0
- package/src/components/click-away-listener/click-away-listener.variables.ts +3 -0
- package/src/components/code-block/code-block.css +56 -2
- package/src/components/code-block/code-block.schema.json +37 -0
- package/src/components/code-block/code-block.schema.ts +44 -0
- package/src/components/code-block/code-block.svelte +39 -63
- package/src/components/code-block/code-block.variables.json +1 -0
- package/src/components/code-block/code-block.variables.ts +3 -0
- package/src/components/collapsible/collapsible-bindable-harness.svelte +2 -3
- package/src/components/collapsible/collapsible-open-prop-harness.svelte +2 -3
- package/src/components/collapsible/collapsible-snippet-trigger-harness.svelte +1 -1
- package/src/components/collapsible/collapsible.schema.json +49 -0
- package/src/components/collapsible/collapsible.schema.ts +57 -0
- package/src/components/collapsible/collapsible.svelte +25 -58
- package/src/components/collapsible/collapsible.variables.json +1 -0
- package/src/components/collapsible/collapsible.variables.ts +3 -0
- package/src/components/color-field/color-field.schema.json +80 -0
- package/src/components/color-field/color-field.schema.ts +92 -0
- package/src/components/color-field/color-field.svelte +251 -301
- package/src/components/color-field/color-field.variables.json +1 -0
- package/src/components/color-field/color-field.variables.ts +3 -0
- package/src/components/color-picker/color-picker.schema.json +56 -0
- package/src/components/color-picker/color-picker.schema.ts +62 -0
- package/src/components/color-picker/color-picker.svelte +359 -409
- package/src/components/color-picker/color-picker.variables.json +1 -0
- package/src/components/color-picker/color-picker.variables.ts +3 -0
- package/src/components/color-swatch-picker/color-swatch-picker.schema.json +60 -0
- package/src/components/color-swatch-picker/color-swatch-picker.schema.ts +67 -0
- package/src/components/color-swatch-picker/color-swatch-picker.svelte +81 -124
- package/src/components/color-swatch-picker/color-swatch-picker.variables.json +1 -0
- package/src/components/color-swatch-picker/color-swatch-picker.variables.ts +3 -0
- package/src/components/combobox/combobox.schema.json +76 -0
- package/src/components/combobox/combobox.schema.ts +83 -0
- package/src/components/combobox/combobox.svelte +194 -229
- package/src/components/combobox/combobox.variables.json +1 -0
- package/src/components/combobox/combobox.variables.ts +3 -0
- package/src/components/command-item/command-item.schema.json +61 -0
- package/src/components/command-item/command-item.schema.ts +66 -0
- package/src/components/command-item/command-item.svelte +43 -87
- package/src/components/command-item/command-item.variables.json +1 -0
- package/src/components/command-item/command-item.variables.ts +3 -0
- package/src/components/command-menu/caret-rect.svelte.ts +76 -91
- package/src/components/command-menu/command-menu.schema.json +81 -0
- package/src/components/command-menu/command-menu.schema.ts +85 -0
- package/src/components/command-menu/command-menu.svelte +70 -120
- package/src/components/command-menu/command-menu.variables.json +1 -0
- package/src/components/command-menu/command-menu.variables.ts +3 -0
- package/src/components/command-palette/command-palette.schema.json +58 -0
- package/src/components/command-palette/command-palette.schema.ts +64 -0
- package/src/components/command-palette/command-palette.svelte +93 -136
- package/src/components/command-palette/command-palette.variables.json +1 -0
- package/src/components/command-palette/command-palette.variables.ts +3 -0
- package/src/components/confirm-dialog/confirm-dialog.schema.json +56 -0
- package/src/components/confirm-dialog/confirm-dialog.schema.ts +66 -0
- package/src/components/confirm-dialog/confirm-dialog.svelte +11 -40
- package/src/components/confirm-dialog/confirm-dialog.variables.json +1 -0
- package/src/components/confirm-dialog/confirm-dialog.variables.ts +3 -0
- package/src/components/container/container.schema.json +140 -0
- package/src/components/container/container.schema.ts +144 -0
- package/src/components/container/container.svelte +3 -25
- package/src/components/container/container.variables.json +1 -0
- package/src/components/container/container.variables.ts +3 -0
- package/src/components/context-menu/context-menu.schema.json +50 -0
- package/src/components/context-menu/context-menu.schema.ts +57 -0
- package/src/components/context-menu/context-menu.svelte +98 -142
- package/src/components/context-menu/context-menu.variables.json +1 -0
- package/src/components/context-menu/context-menu.variables.ts +3 -0
- package/src/components/context-menu-trigger/context-menu-trigger.schema.json +20 -0
- package/src/components/context-menu-trigger/context-menu-trigger.schema.ts +24 -0
- package/src/components/context-menu-trigger/context-menu-trigger.svelte +62 -111
- package/src/components/context-menu-trigger/context-menu-trigger.variables.json +1 -0
- package/src/components/context-menu-trigger/context-menu-trigger.variables.ts +3 -0
- package/src/components/copy-button/__test-helpers__/copy-state-wrapper.svelte +8 -17
- package/src/components/copy-button/copy-button.schema.json +46 -0
- package/src/components/copy-button/copy-button.schema.ts +52 -0
- package/src/components/copy-button/copy-button.svelte +34 -60
- package/src/components/copy-button/copy-button.variables.json +1 -0
- package/src/components/copy-button/copy-button.variables.ts +3 -0
- package/src/components/copy-button/use-copy-state.svelte.ts +32 -57
- package/src/components/cta-section/cta-section.schema.json +67 -0
- package/src/components/cta-section/cta-section.schema.ts +71 -0
- package/src/components/cta-section/cta-section.svelte +5 -36
- package/src/components/cta-section/cta-section.variables.json +1 -0
- package/src/components/cta-section/cta-section.variables.ts +3 -0
- package/src/components/data-grid/_internal/column-model.svelte.ts +112 -206
- package/src/components/data-grid/_internal/selection-model.svelte.ts +121 -159
- package/src/components/data-grid/_internal/virtualization-adapter.svelte.ts +376 -488
- package/src/components/data-grid/data-grid.schema.json +106 -0
- package/src/components/data-grid/data-grid.schema.ts +114 -0
- package/src/components/data-grid/data-grid.svelte +458 -653
- package/src/components/data-grid/data-grid.variables.json +1 -0
- package/src/components/data-grid/data-grid.variables.ts +3 -0
- package/src/components/data-list/data-list.schema.json +42 -0
- package/src/components/data-list/data-list.schema.ts +50 -0
- package/src/components/data-list/data-list.svelte +10 -35
- package/src/components/data-list/data-list.variables.json +1 -0
- package/src/components/data-list/data-list.variables.ts +3 -0
- package/src/components/data-table/data-table.schema.json +96 -0
- package/src/components/data-table/data-table.schema.ts +112 -0
- package/src/components/data-table/data-table.svelte +238 -343
- package/src/components/data-table/data-table.variables.json +1 -0
- package/src/components/data-table/data-table.variables.ts +3 -0
- package/src/components/date-picker/date-picker.schema.json +61 -0
- package/src/components/date-picker/date-picker.schema.ts +65 -0
- package/src/components/date-picker/date-picker.svelte +96 -130
- package/src/components/date-picker/date-picker.variables.json +1 -0
- package/src/components/date-picker/date-picker.variables.ts +3 -0
- package/src/components/date-range-field/date-range-field.schema.json +66 -0
- package/src/components/date-range-field/date-range-field.schema.ts +75 -0
- package/src/components/date-range-field/date-range-field.svelte +154 -234
- package/src/components/date-range-field/date-range-field.variables.json +1 -0
- package/src/components/date-range-field/date-range-field.variables.ts +3 -0
- package/src/components/description-list/description-list.schema.json +29 -0
- package/src/components/description-list/description-list.schema.ts +35 -0
- package/src/components/description-list/description-list.svelte +26 -53
- package/src/components/description-list/description-list.variables.json +1 -0
- package/src/components/description-list/description-list.variables.ts +3 -0
- package/src/components/diff-statistics/diff-statistics.schema.json +36 -0
- package/src/components/diff-statistics/diff-statistics.schema.ts +42 -0
- package/src/components/diff-statistics/diff-statistics.svelte +12 -45
- package/src/components/diff-statistics/diff-statistics.variables.json +1 -0
- package/src/components/diff-statistics/diff-statistics.variables.ts +3 -0
- package/src/components/diff-viewer/diff-controller.svelte.ts +208 -272
- package/src/components/diff-viewer/diff-front-matter.svelte +12 -49
- package/src/components/diff-viewer/diff-line.svelte +34 -60
- package/src/components/diff-viewer/diff-summary-bar.svelte +28 -47
- package/src/components/diff-viewer/diff-toolbar.svelte +21 -72
- package/src/components/diff-viewer/diff-viewer.schema.json +61 -0
- package/src/components/diff-viewer/diff-viewer.schema.ts +70 -0
- package/src/components/diff-viewer/diff-viewer.svelte +192 -279
- package/src/components/diff-viewer/diff-viewer.variables.json +1 -0
- package/src/components/diff-viewer/diff-viewer.variables.ts +3 -0
- package/src/components/diff-viewer/front-matter-header.svelte +21 -62
- package/src/components/divider/divider.schema.json +31 -0
- package/src/components/divider/divider.schema.ts +35 -0
- package/src/components/divider/divider.svelte +4 -28
- package/src/components/divider/divider.variables.json +1 -0
- package/src/components/divider/divider.variables.ts +3 -0
- package/src/components/drawer/drawer.schema.json +57 -0
- package/src/components/drawer/drawer.schema.ts +64 -0
- package/src/components/drawer/drawer.svelte +61 -99
- package/src/components/drawer/drawer.variables.json +1 -0
- package/src/components/drawer/drawer.variables.ts +3 -0
- package/src/components/dropdown/dropdown.schema.json +35 -0
- package/src/components/dropdown/dropdown.schema.ts +40 -0
- package/src/components/dropdown/dropdown.svelte +96 -144
- package/src/components/dropdown/dropdown.variables.json +1 -0
- package/src/components/dropdown/dropdown.variables.ts +3 -0
- package/src/components/dropdown-group/dropdown-group.schema.json +28 -0
- package/src/components/dropdown-group/dropdown-group.schema.ts +34 -0
- package/src/components/dropdown-group/dropdown-group.svelte +15 -46
- package/src/components/dropdown-group/dropdown-group.variables.json +1 -0
- package/src/components/dropdown-group/dropdown-group.variables.ts +3 -0
- package/src/components/dropdown-item/dropdown-item.schema.json +51 -0
- package/src/components/dropdown-item/dropdown-item.schema.ts +62 -0
- package/src/components/dropdown-item/dropdown-item.svelte +37 -108
- package/src/components/dropdown-item/dropdown-item.variables.json +1 -0
- package/src/components/dropdown-item/dropdown-item.variables.ts +3 -0
- package/src/components/dropdown-label/dropdown-label.schema.json +19 -0
- package/src/components/dropdown-label/dropdown-label.schema.ts +23 -0
- package/src/components/dropdown-label/dropdown-label.svelte +3 -18
- package/src/components/dropdown-label/dropdown-label.variables.json +1 -0
- package/src/components/dropdown-label/dropdown-label.variables.ts +3 -0
- package/src/components/dropdown-menu/dropdown-menu.schema.json +19 -0
- package/src/components/dropdown-menu/dropdown-menu.schema.ts +23 -0
- package/src/components/dropdown-menu/dropdown-menu.svelte +112 -154
- package/src/components/dropdown-menu/dropdown-menu.variables.json +1 -0
- package/src/components/dropdown-menu/dropdown-menu.variables.ts +3 -0
- package/src/components/dropdown-separator/dropdown-separator.schema.json +11 -0
- package/src/components/dropdown-separator/dropdown-separator.schema.ts +15 -0
- package/src/components/dropdown-separator/dropdown-separator.svelte +3 -18
- package/src/components/dropdown-separator/dropdown-separator.variables.json +1 -0
- package/src/components/dropdown-separator/dropdown-separator.variables.ts +3 -0
- package/src/components/dropdown-trigger/dropdown-trigger.schema.json +23 -0
- package/src/components/dropdown-trigger/dropdown-trigger.schema.ts +27 -0
- package/src/components/dropdown-trigger/dropdown-trigger.svelte +13 -47
- package/src/components/dropdown-trigger/dropdown-trigger.variables.json +1 -0
- package/src/components/dropdown-trigger/dropdown-trigger.variables.ts +3 -0
- package/src/components/empty-state/empty-state.schema.json +37 -0
- package/src/components/empty-state/empty-state.schema.ts +42 -0
- package/src/components/empty-state/empty-state.svelte +12 -39
- package/src/components/empty-state/empty-state.variables.json +1 -0
- package/src/components/empty-state/empty-state.variables.ts +3 -0
- package/src/components/event-stream-viewer/event-stream-viewer.schema.json +128 -0
- package/src/components/event-stream-viewer/event-stream-viewer.schema.ts +150 -0
- package/src/components/event-stream-viewer/event-stream-viewer.svelte +145 -246
- package/src/components/event-stream-viewer/event-stream-viewer.variables.json +1 -0
- package/src/components/event-stream-viewer/event-stream-viewer.variables.ts +3 -0
- package/src/components/event-timeline/event-timeline.schema.json +95 -0
- package/src/components/event-timeline/event-timeline.schema.ts +99 -0
- package/src/components/event-timeline/event-timeline.svelte +65 -123
- package/src/components/event-timeline/event-timeline.variables.json +1 -0
- package/src/components/event-timeline/event-timeline.variables.ts +3 -0
- package/src/components/experimental/json-viewer/index.ts +3 -3
- package/src/components/experimental/message/index.ts +3 -3
- package/src/components/faceted-filter-bar/faceted-filter-bar.schema.json +65 -0
- package/src/components/faceted-filter-bar/faceted-filter-bar.schema.ts +71 -0
- package/src/components/faceted-filter-bar/faceted-filter-bar.svelte +48 -101
- package/src/components/faceted-filter-bar/faceted-filter-bar.variables.json +1 -0
- package/src/components/faceted-filter-bar/faceted-filter-bar.variables.ts +3 -0
- package/src/components/feature-section/feature-section.css +3 -2
- package/src/components/feature-section/feature-section.schema.json +82 -0
- package/src/components/feature-section/feature-section.schema.ts +86 -0
- package/src/components/feature-section/feature-section.svelte +4 -39
- package/src/components/feature-section/feature-section.variables.json +1 -0
- package/src/components/feature-section/feature-section.variables.ts +3 -0
- package/src/components/feed/feed.schema.json +25 -0
- package/src/components/feed/feed.schema.ts +30 -0
- package/src/components/feed/feed.svelte +4 -21
- package/src/components/feed/feed.variables.json +1 -0
- package/src/components/feed/feed.variables.ts +3 -0
- package/src/components/feed-event/feed-event.schema.json +43 -0
- package/src/components/feed-event/feed-event.schema.ts +51 -0
- package/src/components/feed-event/feed-event.svelte +3 -28
- package/src/components/feed-event/feed-event.variables.json +1 -0
- package/src/components/feed-event/feed-event.variables.ts +3 -0
- package/src/components/file-upload/file-upload.schema.json +70 -0
- package/src/components/file-upload/file-upload.schema.ts +74 -0
- package/src/components/file-upload/file-upload.svelte +156 -212
- package/src/components/file-upload/file-upload.variables.json +6 -0
- package/src/components/file-upload/file-upload.variables.ts +8 -0
- package/src/components/floating-action-button/floating-action-button.schema.json +44 -0
- package/src/components/floating-action-button/floating-action-button.schema.ts +49 -0
- package/src/components/floating-action-button/floating-action-button.svelte +30 -89
- package/src/components/floating-action-button/floating-action-button.variables.json +1 -0
- package/src/components/floating-action-button/floating-action-button.variables.ts +3 -0
- package/src/components/focus-trap/focus-trap.schema.json +50 -0
- package/src/components/focus-trap/focus-trap.schema.ts +58 -0
- package/src/components/focus-trap/focus-trap.svelte +4 -27
- package/src/components/focus-trap/focus-trap.utilities.svelte.ts +208 -256
- package/src/components/focus-trap/focus-trap.variables.json +1 -0
- package/src/components/focus-trap/focus-trap.variables.ts +3 -0
- package/src/components/footer/footer.css +2 -1
- package/src/components/footer/footer.schema.json +41 -0
- package/src/components/footer/footer.schema.ts +45 -0
- package/src/components/footer/footer.svelte +3 -28
- package/src/components/footer/footer.variables.json +1 -0
- package/src/components/footer/footer.variables.ts +3 -0
- package/src/components/form-field/form-field.schema.json +46 -0
- package/src/components/form-field/form-field.schema.ts +52 -0
- package/src/components/form-field/form-field.svelte +20 -50
- package/src/components/form-field/form-field.variables.json +1 -0
- package/src/components/form-field/form-field.variables.ts +3 -0
- package/src/components/form-section/form-section.schema.json +41 -0
- package/src/components/form-section/form-section.schema.ts +45 -0
- package/src/components/form-section/form-section.svelte +25 -40
- package/src/components/form-section/form-section.variables.json +1 -0
- package/src/components/form-section/form-section.variables.ts +3 -0
- package/src/components/grid/grid.schema.json +53 -0
- package/src/components/grid/grid.schema.ts +59 -0
- package/src/components/grid/grid.svelte +12 -40
- package/src/components/grid/grid.variables.json +1 -0
- package/src/components/grid/grid.variables.ts +3 -0
- package/src/components/grid-item/grid-item.schema.json +80 -0
- package/src/components/grid-item/grid-item.schema.ts +84 -0
- package/src/components/grid-item/grid-item.svelte +9 -35
- package/src/components/grid-item/grid-item.variables.json +1 -0
- package/src/components/grid-item/grid-item.variables.ts +3 -0
- package/src/components/grid-list/grid-list.schema.json +26 -0
- package/src/components/grid-list/grid-list.schema.ts +31 -0
- package/src/components/grid-list/grid-list.svelte +4 -22
- package/src/components/grid-list/grid-list.variables.json +1 -0
- package/src/components/grid-list/grid-list.variables.ts +3 -0
- package/src/components/grid-list-item/grid-list-item.schema.json +60 -0
- package/src/components/grid-list-item/grid-list-item.schema.ts +69 -0
- package/src/components/grid-list-item/grid-list-item.svelte +12 -37
- package/src/components/grid-list-item/grid-list-item.variables.json +1 -0
- package/src/components/grid-list-item/grid-list-item.variables.ts +3 -0
- package/src/components/hero-section/hero-section.css +2 -1
- package/src/components/hero-section/hero-section.schema.json +63 -0
- package/src/components/hero-section/hero-section.schema.ts +67 -0
- package/src/components/hero-section/hero-section.svelte +4 -38
- package/src/components/hero-section/hero-section.variables.json +1 -0
- package/src/components/hero-section/hero-section.variables.ts +3 -0
- package/src/components/hover-card/hover-card.schema.json +74 -0
- package/src/components/hover-card/hover-card.schema.ts +83 -0
- package/src/components/hover-card/hover-card.svelte +100 -155
- package/src/components/hover-card/hover-card.variables.json +1 -0
- package/src/components/hover-card/hover-card.variables.ts +3 -0
- package/src/components/image/image.schema.json +64 -0
- package/src/components/image/image.schema.ts +72 -0
- package/src/components/image/image.svelte +32 -71
- package/src/components/image/image.variables.json +1 -0
- package/src/components/image/image.variables.ts +3 -0
- package/src/components/inline-loading/inline-loading.schema.json +29 -0
- package/src/components/inline-loading/inline-loading.schema.ts +35 -0
- package/src/components/inline-loading/inline-loading.svelte +49 -92
- package/src/components/inline-loading/inline-loading.variables.json +1 -0
- package/src/components/inline-loading/inline-loading.variables.ts +3 -0
- package/src/components/input/input.schema.json +75 -0
- package/src/components/input/input.schema.ts +86 -0
- package/src/components/input/input.svelte +57 -102
- package/src/components/input/input.variables.json +1 -0
- package/src/components/input/input.variables.ts +3 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.schema.json +163 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.schema.ts +173 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.svelte +117 -219
- package/src/components/invocation-rule-builder/invocation-rule-builder.variables.json +1 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.variables.ts +3 -0
- package/src/components/json-schema-editor/diff-view.svelte +7 -13
- package/src/components/json-schema-editor/form-view.svelte +11 -20
- package/src/components/json-schema-editor/json-schema-editor-impl.svelte +129 -185
- package/src/components/json-schema-editor/json-schema-editor-state.svelte.ts +398 -450
- package/src/components/json-schema-editor/json-schema-editor.schema.json +63 -0
- package/src/components/json-schema-editor/json-schema-editor.schema.ts +67 -0
- package/src/components/json-schema-editor/json-schema-editor.svelte +5 -33
- package/src/components/json-schema-editor/json-schema-editor.variables.json +1 -0
- package/src/components/json-schema-editor/json-schema-editor.variables.ts +3 -0
- package/src/components/json-schema-editor/json-schema-toolbar.svelte +80 -109
- package/src/components/json-schema-editor/json-view.svelte +24 -36
- package/src/components/json-schema-editor/property-editor.svelte +178 -242
- package/src/components/json-schema-editor/property-list.svelte +107 -142
- package/src/components/json-viewer/_json-viewer-node.svelte +33 -60
- package/src/components/json-viewer/json-viewer.schema.json +33 -0
- package/src/components/json-viewer/json-viewer.schema.ts +38 -0
- package/src/components/json-viewer/json-viewer.svelte +74 -95
- package/src/components/json-viewer/json-viewer.variables.json +1 -0
- package/src/components/json-viewer/json-viewer.variables.ts +3 -0
- package/src/components/kanban-board/kanban-board.schema.json +64 -0
- package/src/components/kanban-board/kanban-board.schema.ts +70 -0
- package/src/components/kanban-board/kanban-board.svelte +311 -430
- package/src/components/kanban-board/kanban-board.variables.json +6 -0
- package/src/components/kanban-board/kanban-board.variables.ts +8 -0
- package/src/components/kbd/kbd.schema.json +29 -0
- package/src/components/kbd/kbd.schema.ts +33 -0
- package/src/components/kbd/kbd.svelte +3 -18
- package/src/components/kbd/kbd.variables.json +1 -0
- package/src/components/kbd/kbd.variables.ts +3 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.schema.json +30 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.schema.ts +34 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.svelte +17 -42
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.variables.json +1 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.variables.ts +3 -0
- package/src/components/label/label.schema.json +35 -0
- package/src/components/label/label.schema.ts +40 -0
- package/src/components/label/label.svelte +3 -24
- package/src/components/label/label.variables.json +1 -0
- package/src/components/label/label.variables.ts +3 -0
- package/src/components/line-chart/line-chart.schema.json +139 -0
- package/src/components/line-chart/line-chart.schema.ts +145 -0
- package/src/components/line-chart/line-chart.svelte +67 -139
- package/src/components/line-chart/line-chart.variables.json +1 -0
- package/src/components/line-chart/line-chart.variables.ts +3 -0
- package/src/components/link/link.schema.json +61 -0
- package/src/components/link/link.schema.ts +72 -0
- package/src/components/link/link.svelte +37 -68
- package/src/components/link/link.variables.json +1 -0
- package/src/components/link/link.variables.ts +3 -0
- package/src/components/load-more/load-more.schema.json +58 -0
- package/src/components/load-more/load-more.schema.ts +64 -0
- package/src/components/load-more/load-more.svelte +56 -90
- package/src/components/load-more/load-more.variables.json +1 -0
- package/src/components/load-more/load-more.variables.ts +3 -0
- package/src/components/locale-provider/locale-provider.schema.json +24 -0
- package/src/components/locale-provider/locale-provider.schema.ts +28 -0
- package/src/components/locale-provider/locale-provider.svelte +9 -29
- package/src/components/locale-provider/locale-provider.variables.json +1 -0
- package/src/components/locale-provider/locale-provider.variables.ts +3 -0
- package/src/components/logo-cloud/logo-cloud.css +3 -2
- package/src/components/logo-cloud/logo-cloud.schema.json +63 -0
- package/src/components/logo-cloud/logo-cloud.schema.ts +67 -0
- package/src/components/logo-cloud/logo-cloud.svelte +4 -31
- package/src/components/logo-cloud/logo-cloud.variables.json +1 -0
- package/src/components/logo-cloud/logo-cloud.variables.ts +3 -0
- package/src/components/markdown-editor/editor-skeleton.svelte +15 -25
- package/src/components/markdown-editor/editor-toolbar/editor-toolbar.svelte +96 -163
- package/src/components/markdown-editor/editor-toolbar/link-popover.svelte +85 -137
- package/src/components/markdown-editor/editor-toolbar/toolbar-button.svelte +6 -34
- package/src/components/markdown-editor/editor-toolbar/toolbar-dropdown.svelte +14 -47
- package/src/components/markdown-editor/editor-toolbar/toolbar-separator.svelte +3 -8
- package/src/components/markdown-editor/markdown-editor.examples.json +6 -0
- package/src/components/markdown-editor/markdown-editor.schema.json +111 -0
- package/src/components/markdown-editor/markdown-editor.schema.ts +122 -0
- package/src/components/markdown-editor/markdown-editor.svelte +472 -570
- package/src/components/markdown-editor/markdown-editor.variables.json +1 -0
- package/src/components/markdown-editor/markdown-editor.variables.ts +3 -0
- package/src/components/marquee/marquee.schema.json +50 -0
- package/src/components/marquee/marquee.schema.ts +54 -0
- package/src/components/marquee/marquee.svelte +132 -186
- package/src/components/marquee/marquee.variables.json +1 -0
- package/src/components/marquee/marquee.variables.ts +7 -0
- package/src/components/masonry/masonry.schema.json +34 -0
- package/src/components/masonry/masonry.schema.ts +39 -0
- package/src/components/masonry/masonry.svelte +3 -24
- package/src/components/masonry/masonry.variables.json +1 -0
- package/src/components/masonry/masonry.variables.ts +3 -0
- package/src/components/matrix-chart/matrix-chart.schema.json +90 -0
- package/src/components/matrix-chart/matrix-chart.schema.ts +95 -0
- package/src/components/matrix-chart/matrix-chart.svelte +115 -182
- package/src/components/matrix-chart/matrix-chart.variables.json +1 -0
- package/src/components/matrix-chart/matrix-chart.variables.ts +3 -0
- package/src/components/media-controls/media-controls.schema.json +68 -0
- package/src/components/media-controls/media-controls.schema.ts +72 -0
- package/src/components/media-controls/media-controls.svelte +47 -83
- package/src/components/media-controls/media-controls.variables.json +1 -0
- package/src/components/media-controls/media-controls.variables.ts +3 -0
- package/src/components/mega-menu/mega-menu.schema.json +37 -0
- package/src/components/mega-menu/mega-menu.schema.ts +41 -0
- package/src/components/mega-menu/mega-menu.svelte +180 -225
- package/src/components/mega-menu/mega-menu.variables.json +1 -0
- package/src/components/mega-menu/mega-menu.variables.ts +3 -0
- package/src/components/menu-bar/menu-bar-dropdown-context.svelte +9 -27
- package/src/components/menu-bar/menu-bar.schema.json +32 -0
- package/src/components/menu-bar/menu-bar.schema.ts +38 -0
- package/src/components/menu-bar/menu-bar.svelte +371 -518
- package/src/components/menu-bar/menu-bar.variables.json +1 -0
- package/src/components/menu-bar/menu-bar.variables.ts +3 -0
- package/src/components/message/message.schema.json +38 -0
- package/src/components/message/message.schema.ts +44 -0
- package/src/components/message/message.svelte +8 -36
- package/src/components/message/message.variables.json +1 -0
- package/src/components/message/message.variables.ts +3 -0
- package/src/components/meter/meter.schema.json +51 -0
- package/src/components/meter/meter.schema.ts +59 -0
- package/src/components/meter/meter.svelte +72 -128
- package/src/components/meter/meter.variables.json +1 -0
- package/src/components/meter/meter.variables.ts +3 -0
- package/src/components/modal/modal.schema.json +77 -0
- package/src/components/modal/modal.schema.ts +8 -0
- package/src/components/modal/modal.svelte +101 -148
- package/src/components/modal/modal.variables.json +1 -0
- package/src/components/modal/modal.variables.ts +3 -0
- package/src/components/multi-select/multi-select.schema.json +88 -0
- package/src/components/multi-select/multi-select.schema.ts +93 -0
- package/src/components/multi-select/multi-select.svelte +255 -303
- package/src/components/multi-select/multi-select.variables.json +1 -0
- package/src/components/multi-select/multi-select.variables.ts +3 -0
- package/src/components/navigation-bar/index.ts +1 -0
- package/src/components/navigation-bar/navigation-bar.css +15 -0
- package/src/components/navigation-bar/navigation-bar.examples.json +1 -1
- package/src/components/navigation-bar/navigation-bar.schema.json +57 -0
- package/src/components/navigation-bar/navigation-bar.schema.ts +66 -0
- package/src/components/navigation-bar/navigation-bar.svelte +117 -167
- package/src/components/navigation-bar/navigation-bar.types.ts +8 -0
- package/src/components/navigation-bar/navigation-bar.variables.json +1 -0
- package/src/components/navigation-bar/navigation-bar.variables.ts +3 -0
- package/src/components/navigation-item/navigation-item.schema.json +45 -0
- package/src/components/navigation-item/navigation-item.schema.ts +55 -0
- package/src/components/navigation-item/navigation-item.svelte +29 -63
- package/src/components/navigation-item/navigation-item.variables.json +1 -0
- package/src/components/navigation-item/navigation-item.variables.ts +3 -0
- package/src/components/newsletter-section/newsletter-section.css +2 -1
- package/src/components/newsletter-section/newsletter-section.schema.json +62 -0
- package/src/components/newsletter-section/newsletter-section.schema.ts +66 -0
- package/src/components/newsletter-section/newsletter-section.svelte +12 -45
- package/src/components/newsletter-section/newsletter-section.variables.json +1 -0
- package/src/components/newsletter-section/newsletter-section.variables.ts +3 -0
- package/src/components/number-input/number-input.schema.json +91 -0
- package/src/components/number-input/number-input.schema.ts +103 -0
- package/src/components/number-input/number-input.svelte +336 -439
- package/src/components/number-input/number-input.variables.json +1 -0
- package/src/components/number-input/number-input.variables.ts +3 -0
- package/src/components/page-header/page-header.schema.json +29 -0
- package/src/components/page-header/page-header.schema.ts +33 -0
- package/src/components/page-header/page-header.svelte +3 -19
- package/src/components/page-header/page-header.variables.json +1 -0
- package/src/components/page-header/page-header.variables.ts +3 -0
- package/src/components/pagination/pagination.examples.json +12 -0
- package/src/components/pagination/pagination.schema.json +33 -0
- package/src/components/pagination/pagination.schema.ts +39 -0
- package/src/components/pagination/pagination.svelte +38 -77
- package/src/components/pagination/pagination.types.ts +6 -2
- package/src/components/pagination/pagination.variables.json +1 -0
- package/src/components/pagination/pagination.variables.ts +3 -0
- package/src/components/payload-inspector/payload-inspector.schema.json +63 -0
- package/src/components/payload-inspector/payload-inspector.schema.ts +76 -0
- package/src/components/payload-inspector/payload-inspector.svelte +168 -228
- package/src/components/payload-inspector/payload-inspector.variables.json +1 -0
- package/src/components/payload-inspector/payload-inspector.variables.ts +3 -0
- package/src/components/permission-matrix/permission-matrix.schema.json +70 -0
- package/src/components/permission-matrix/permission-matrix.schema.ts +74 -0
- package/src/components/permission-matrix/permission-matrix.svelte +18 -71
- package/src/components/permission-matrix/permission-matrix.variables.json +1 -0
- package/src/components/permission-matrix/permission-matrix.variables.ts +3 -0
- package/src/components/phone-input/phone-input.schema.json +572 -0
- package/src/components/phone-input/phone-input.schema.ts +579 -0
- package/src/components/phone-input/phone-input.svelte +235 -331
- package/src/components/phone-input/phone-input.variables.json +1 -0
- package/src/components/phone-input/phone-input.variables.ts +3 -0
- package/src/components/pin-input/pin-input.schema.json +82 -0
- package/src/components/pin-input/pin-input.schema.ts +91 -0
- package/src/components/pin-input/pin-input.svelte +143 -199
- package/src/components/pin-input/pin-input.variables.json +1 -0
- package/src/components/pin-input/pin-input.variables.ts +3 -0
- package/src/components/popover/popover.schema.json +88 -0
- package/src/components/popover/popover.schema.ts +93 -0
- package/src/components/popover/popover.svelte +160 -215
- package/src/components/popover/popover.variables.json +1 -0
- package/src/components/popover/popover.variables.ts +3 -0
- package/src/components/portal/portal.schema.json +39 -0
- package/src/components/portal/portal.schema.ts +46 -0
- package/src/components/portal/portal.svelte +14 -35
- package/src/components/portal/portal.utilities.svelte.ts +199 -167
- package/src/components/portal/portal.variables.json +1 -0
- package/src/components/portal/portal.variables.ts +3 -0
- package/src/components/pricing-card/pricing-card.schema.json +50 -0
- package/src/components/pricing-card/pricing-card.schema.ts +54 -0
- package/src/components/pricing-card/pricing-card.svelte +21 -48
- package/src/components/pricing-card/pricing-card.variables.json +1 -0
- package/src/components/pricing-card/pricing-card.variables.ts +3 -0
- package/src/components/pricing-section/pricing-section.css +2 -1
- package/src/components/pricing-section/pricing-section.schema.json +82 -0
- package/src/components/pricing-section/pricing-section.schema.ts +86 -0
- package/src/components/pricing-section/pricing-section.svelte +9 -40
- package/src/components/pricing-section/pricing-section.variables.json +1 -0
- package/src/components/pricing-section/pricing-section.variables.ts +3 -0
- package/src/components/progress/progress.schema.json +39 -0
- package/src/components/progress/progress.schema.ts +46 -0
- package/src/components/progress/progress.svelte +22 -59
- package/src/components/progress/progress.variables.json +1 -0
- package/src/components/progress/progress.variables.ts +3 -0
- package/src/components/qr-code/qr-code.schema.json +36 -0
- package/src/components/qr-code/qr-code.schema.ts +40 -0
- package/src/components/qr-code/qr-code.svelte +57 -101
- package/src/components/qr-code/qr-code.variables.json +1 -0
- package/src/components/qr-code/qr-code.variables.ts +3 -0
- package/src/components/radio-group/radio-group.schema.json +54 -0
- package/src/components/radio-group/radio-group.schema.ts +61 -0
- package/src/components/radio-group/radio-group.svelte +29 -65
- package/src/components/radio-group/radio-group.variables.json +1 -0
- package/src/components/radio-group/radio-group.variables.ts +3 -0
- package/src/components/rating/rating.schema.json +77 -0
- package/src/components/rating/rating.schema.ts +85 -0
- package/src/components/rating/rating.svelte +177 -233
- package/src/components/rating/rating.variables.json +1 -0
- package/src/components/rating/rating.variables.ts +3 -0
- package/src/components/resizable-panels/resizable-panels.schema.json +53 -0
- package/src/components/resizable-panels/resizable-panels.schema.ts +60 -0
- package/src/components/resizable-panels/resizable-panels.svelte +206 -313
- package/src/components/resizable-panels/resizable-panels.variables.json +1 -0
- package/src/components/resizable-panels/resizable-panels.variables.ts +3 -0
- package/src/components/review-editor/comment-composer.svelte +67 -129
- package/src/components/review-editor/comment-list.svelte +32 -63
- package/src/components/review-editor/comment-sidebar.svelte +57 -99
- package/src/components/review-editor/export-actions.svelte +50 -77
- package/src/components/review-editor/front-matter-fields.svelte +52 -69
- package/src/components/review-editor/live-region.svelte +70 -86
- package/src/components/review-editor/review-editor-anchors.svelte.ts +152 -255
- package/src/components/review-editor/review-editor-controls.svelte +36 -98
- package/src/components/review-editor/review-editor-impl.svelte +953 -1256
- package/src/components/review-editor/review-editor-selection.svelte.ts +226 -283
- package/src/components/review-editor/review-editor-state.svelte.ts +77 -139
- package/src/components/review-editor/review-editor-threads.svelte.ts +365 -573
- package/src/components/review-editor/review-editor.schema.json +83 -0
- package/src/components/review-editor/review-editor.schema.ts +88 -0
- package/src/components/review-editor/review-editor.svelte +5 -28
- package/src/components/review-editor/review-editor.variables.json +1 -0
- package/src/components/review-editor/review-editor.variables.ts +3 -0
- package/src/components/review-editor/thread-popover.svelte +53 -102
- package/src/components/run-step-timeline/run-step-timeline.schema.json +429 -0
- package/src/components/run-step-timeline/run-step-timeline.schema.ts +439 -0
- package/src/components/run-step-timeline/run-step-timeline.svelte +168 -261
- package/src/components/run-step-timeline/run-step-timeline.variables.json +1 -0
- package/src/components/run-step-timeline/run-step-timeline.variables.ts +3 -0
- package/src/components/schema-form/schema-form-body.svelte +259 -352
- package/src/components/schema-form/schema-form.schema.json +39 -0
- package/src/components/schema-form/schema-form.schema.ts +44 -0
- package/src/components/schema-form/schema-form.svelte +18 -42
- package/src/components/schema-form/schema-form.variables.json +1 -0
- package/src/components/schema-form/schema-form.variables.ts +3 -0
- package/src/components/scroll-area/scroll-area.schema.json +45 -0
- package/src/components/scroll-area/scroll-area.schema.ts +51 -0
- package/src/components/scroll-area/scroll-area.svelte +15 -52
- package/src/components/scroll-area/scroll-area.variables.json +1 -0
- package/src/components/scroll-area/scroll-area.variables.ts +3 -0
- package/src/components/search-field/search-field.schema.json +63 -0
- package/src/components/search-field/search-field.schema.ts +69 -0
- package/src/components/search-field/search-field.svelte +42 -86
- package/src/components/search-field/search-field.variables.json +1 -0
- package/src/components/search-field/search-field.variables.ts +3 -0
- package/src/components/secret-value-field/secret-value-field.schema.json +53 -0
- package/src/components/secret-value-field/secret-value-field.schema.ts +64 -0
- package/src/components/secret-value-field/secret-value-field.svelte +33 -65
- package/src/components/secret-value-field/secret-value-field.variables.json +1 -0
- package/src/components/secret-value-field/secret-value-field.variables.ts +3 -0
- package/src/components/section-heading/section-heading.schema.json +43 -0
- package/src/components/section-heading/section-heading.schema.ts +52 -0
- package/src/components/section-heading/section-heading.svelte +4 -28
- package/src/components/section-heading/section-heading.variables.json +1 -0
- package/src/components/section-heading/section-heading.variables.ts +3 -0
- package/src/components/segment/segment.schema.json +45 -0
- package/src/components/segment/segment.schema.ts +50 -0
- package/src/components/segment/segment.svelte +20 -54
- package/src/components/segment/segment.variables.json +1 -0
- package/src/components/segment/segment.variables.ts +3 -0
- package/src/components/segmented-control/index.ts +3 -1
- package/src/components/segmented-control/segmented-control-state.svelte.ts +152 -222
- package/src/components/segmented-control/segmented-control.schema.json +84 -0
- package/src/components/segmented-control/segmented-control.schema.ts +93 -0
- package/src/components/segmented-control/segmented-control.svelte +57 -107
- package/src/components/segmented-control/segmented-control.variables.json +1 -0
- package/src/components/segmented-control/segmented-control.variables.ts +3 -0
- package/src/components/select/select.schema.json +52 -0
- package/src/components/select/select.schema.ts +57 -0
- package/src/components/select/select.svelte +25 -62
- package/src/components/select/select.variables.json +1 -0
- package/src/components/select/select.variables.ts +3 -0
- package/src/components/selection-popover/selection-popover.schema.json +50 -0
- package/src/components/selection-popover/selection-popover.schema.ts +54 -0
- package/src/components/selection-popover/selection-popover.svelte +96 -144
- package/src/components/selection-popover/selection-popover.variables.json +1 -0
- package/src/components/selection-popover/selection-popover.variables.ts +3 -0
- package/src/components/share-card/share-card.schema.json +55 -0
- package/src/components/share-card/share-card.schema.ts +60 -0
- package/src/components/share-card/share-card.svelte +103 -140
- package/src/components/share-card/share-card.variables.json +1 -0
- package/src/components/share-card/share-card.variables.ts +3 -0
- package/src/components/sheet/sheet.schema.json +53 -0
- package/src/components/sheet/sheet.schema.ts +61 -0
- package/src/components/sheet/sheet.svelte +37 -72
- package/src/components/sheet/sheet.variables.json +1 -0
- package/src/components/sheet/sheet.variables.ts +3 -0
- package/src/components/shortcut-hint/shortcut-hint.schema.json +37 -0
- package/src/components/shortcut-hint/shortcut-hint.schema.ts +41 -0
- package/src/components/shortcut-hint/shortcut-hint.svelte +8 -30
- package/src/components/shortcut-hint/shortcut-hint.variables.json +1 -0
- package/src/components/shortcut-hint/shortcut-hint.variables.ts +3 -0
- package/src/components/side-navigation/side-navigation.schema.json +27 -0
- package/src/components/side-navigation/side-navigation.schema.ts +32 -0
- package/src/components/side-navigation/side-navigation.svelte +6 -34
- package/src/components/side-navigation/side-navigation.variables.json +1 -0
- package/src/components/side-navigation/side-navigation.variables.ts +3 -0
- package/src/components/side-navigation-group/_contains-active-harness.svelte +7 -20
- package/src/components/side-navigation-group/side-navigation-group.schema.json +49 -0
- package/src/components/side-navigation-group/side-navigation-group.schema.ts +56 -0
- package/src/components/side-navigation-group/side-navigation-group.svelte +45 -78
- package/src/components/side-navigation-group/side-navigation-group.variables.json +1 -0
- package/src/components/side-navigation-group/side-navigation-group.variables.ts +3 -0
- package/src/components/side-navigation-item/side-navigation-item.schema.json +45 -0
- package/src/components/side-navigation-item/side-navigation-item.schema.ts +54 -0
- package/src/components/side-navigation-item/side-navigation-item.svelte +28 -46
- package/src/components/side-navigation-item/side-navigation-item.variables.json +1 -0
- package/src/components/side-navigation-item/side-navigation-item.variables.ts +3 -0
- package/src/components/sidebar/sidebar.css +14 -0
- package/src/components/sidebar/sidebar.schema.json +38 -0
- package/src/components/sidebar/sidebar.schema.ts +45 -0
- package/src/components/sidebar/sidebar.svelte +53 -99
- package/src/components/sidebar/sidebar.variables.json +1 -0
- package/src/components/sidebar/sidebar.variables.ts +3 -0
- package/src/components/skeleton/skeleton.schema.json +23 -0
- package/src/components/skeleton/skeleton.schema.ts +30 -0
- package/src/components/skeleton/skeleton.svelte +10 -28
- package/src/components/skeleton/skeleton.variables.json +1 -0
- package/src/components/skeleton/skeleton.variables.ts +3 -0
- package/src/components/skip-link/skip-link.schema.json +25 -0
- package/src/components/skip-link/skip-link.schema.ts +29 -0
- package/src/components/skip-link/skip-link.svelte +31 -61
- package/src/components/skip-link/skip-link.variables.json +1 -0
- package/src/components/skip-link/skip-link.variables.ts +3 -0
- package/src/components/slider/slider.schema.json +82 -0
- package/src/components/slider/slider.schema.ts +88 -0
- package/src/components/slider/slider.svelte +267 -315
- package/src/components/slider/slider.variables.json +1 -0
- package/src/components/slider/slider.variables.ts +3 -0
- package/src/components/sortable-list/sortable-list.schema.json +64 -0
- package/src/components/sortable-list/sortable-list.schema.ts +71 -0
- package/src/components/sortable-list/sortable-list.svelte +51 -88
- package/src/components/sortable-list/sortable-list.variables.json +1 -0
- package/src/components/sortable-list/sortable-list.variables.ts +3 -0
- package/src/components/source-diff-viewer/index.ts +18 -0
- package/src/components/source-diff-viewer/source-diff-viewer.css +129 -0
- package/src/components/source-diff-viewer/source-diff-viewer.examples.json +19 -0
- package/src/components/source-diff-viewer/source-diff-viewer.schema.json +36 -0
- package/src/components/source-diff-viewer/source-diff-viewer.schema.ts +40 -0
- package/src/components/source-diff-viewer/source-diff-viewer.svelte +88 -0
- package/src/components/source-diff-viewer/source-diff-viewer.types.ts +50 -0
- package/src/components/source-diff-viewer/source-diff-viewer.utilities.ts +898 -0
- package/src/components/source-diff-viewer/source-diff-viewer.variables.json +1 -0
- package/src/components/source-diff-viewer/source-diff-viewer.variables.ts +3 -0
- package/src/components/sparkbar/sparkbar.schema.json +44 -0
- package/src/components/sparkbar/sparkbar.schema.ts +49 -0
- package/src/components/sparkbar/sparkbar.svelte +11 -41
- package/src/components/sparkbar/sparkbar.variables.json +1 -0
- package/src/components/sparkbar/sparkbar.variables.ts +3 -0
- package/src/components/spectrogram/spectrogram.schema.json +79 -0
- package/src/components/spectrogram/spectrogram.schema.ts +86 -0
- package/src/components/spectrogram/spectrogram.svelte +87 -152
- package/src/components/spectrogram/spectrogram.variables.json +1 -0
- package/src/components/spectrogram/spectrogram.variables.ts +3 -0
- package/src/components/spectrum-chart/spectrum-chart.schema.json +69 -0
- package/src/components/spectrum-chart/spectrum-chart.schema.ts +73 -0
- package/src/components/spectrum-chart/spectrum-chart.svelte +61 -110
- package/src/components/spectrum-chart/spectrum-chart.variables.json +1 -0
- package/src/components/spectrum-chart/spectrum-chart.variables.ts +3 -0
- package/src/components/speed-dial/speed-dial.schema.json +46 -0
- package/src/components/speed-dial/speed-dial.schema.ts +51 -0
- package/src/components/speed-dial/speed-dial.svelte +78 -122
- package/src/components/speed-dial/speed-dial.variables.json +1 -0
- package/src/components/speed-dial/speed-dial.variables.ts +3 -0
- package/src/components/speed-dial-action/speed-dial-action.schema.json +41 -0
- package/src/components/speed-dial-action/speed-dial-action.schema.ts +45 -0
- package/src/components/speed-dial-action/speed-dial-action.svelte +17 -45
- package/src/components/speed-dial-action/speed-dial-action.variables.json +1 -0
- package/src/components/speed-dial-action/speed-dial-action.variables.ts +3 -0
- package/src/components/spinner/spinner.schema.json +21 -0
- package/src/components/spinner/spinner.schema.ts +25 -0
- package/src/components/spinner/spinner.svelte +3 -18
- package/src/components/spinner/spinner.variables.json +1 -0
- package/src/components/spinner/spinner.variables.ts +3 -0
- package/src/components/stacked-list-item/stacked-list-item.schema.json +76 -0
- package/src/components/stacked-list-item/stacked-list-item.schema.ts +84 -0
- package/src/components/stacked-list-item/stacked-list-item.svelte +41 -76
- package/src/components/stacked-list-item/stacked-list-item.variables.json +1 -0
- package/src/components/stacked-list-item/stacked-list-item.variables.ts +3 -0
- package/src/components/stat/stat.schema.json +50 -0
- package/src/components/stat/stat.schema.ts +55 -0
- package/src/components/stat/stat.svelte +27 -58
- package/src/components/stat/stat.variables.json +1 -0
- package/src/components/stat/stat.variables.ts +3 -0
- package/src/components/stat-group/stat-group.schema.json +35 -0
- package/src/components/stat-group/stat-group.schema.ts +41 -0
- package/src/components/stat-group/stat-group.svelte +5 -30
- package/src/components/stat-group/stat-group.variables.json +1 -0
- package/src/components/stat-group/stat-group.variables.ts +3 -0
- package/src/components/stats-section/stats-section.schema.json +83 -0
- package/src/components/stats-section/stats-section.schema.ts +87 -0
- package/src/components/stats-section/stats-section.svelte +17 -56
- package/src/components/stats-section/stats-section.variables.json +1 -0
- package/src/components/stats-section/stats-section.variables.ts +3 -0
- package/src/components/status-dot/status-dot.schema.json +37 -0
- package/src/components/status-dot/status-dot.schema.ts +45 -0
- package/src/components/status-dot/status-dot.svelte +20 -65
- package/src/components/status-dot/status-dot.variables.json +1 -0
- package/src/components/status-dot/status-dot.variables.ts +3 -0
- package/src/components/steps/index.ts +1 -1
- package/src/components/steps/steps.css +15 -1
- package/src/components/steps/steps.examples.json +6 -0
- package/src/components/steps/steps.schema.json +42 -0
- package/src/components/steps/steps.schema.ts +49 -0
- package/src/components/steps/steps.svelte +29 -48
- package/src/components/steps/steps.types.ts +12 -0
- package/src/components/steps/steps.variables.json +1 -0
- package/src/components/steps/steps.variables.ts +3 -0
- package/src/components/surface/surface.schema.json +25 -0
- package/src/components/surface/surface.schema.ts +29 -0
- package/src/components/surface/surface.svelte +8 -24
- package/src/components/surface/surface.variables.json +1 -0
- package/src/components/surface/surface.variables.ts +3 -0
- package/src/components/tab/tab.schema.json +39 -0
- package/src/components/tab/tab.schema.ts +44 -0
- package/src/components/tab/tab.svelte +54 -80
- package/src/components/tab/tab.variables.json +1 -0
- package/src/components/tab/tab.variables.ts +3 -0
- package/src/components/tab-list/tab-list.schema.json +29 -0
- package/src/components/tab-list/tab-list.schema.ts +33 -0
- package/src/components/tab-list/tab-list.svelte +5 -22
- package/src/components/tab-list/tab-list.variables.json +1 -0
- package/src/components/tab-list/tab-list.variables.ts +3 -0
- package/src/components/tab-panel/tab-panel-aria-labelledby-harness.svelte +6 -11
- package/src/components/tab-panel/tab-panel.schema.json +30 -0
- package/src/components/tab-panel/tab-panel.schema.ts +35 -0
- package/src/components/tab-panel/tab-panel.svelte +15 -33
- package/src/components/tab-panel/tab-panel.variables.json +1 -0
- package/src/components/tab-panel/tab-panel.variables.ts +3 -0
- package/src/components/table/table.schema.json +42 -0
- package/src/components/table/table.schema.ts +49 -0
- package/src/components/table/table.svelte +32 -71
- package/src/components/table/table.variables.json +1 -0
- package/src/components/table/table.variables.ts +3 -0
- package/src/components/table-body/table-body.schema.json +21 -0
- package/src/components/table-body/table-body.schema.ts +25 -0
- package/src/components/table-body/table-body.svelte +5 -20
- package/src/components/table-body/table-body.variables.json +1 -0
- package/src/components/table-body/table-body.variables.ts +3 -0
- package/src/components/table-cell/table-cell.schema.json +28 -0
- package/src/components/table-cell/table-cell.schema.ts +34 -0
- package/src/components/table-cell/table-cell.svelte +3 -17
- package/src/components/table-cell/table-cell.variables.json +1 -0
- package/src/components/table-cell/table-cell.variables.ts +3 -0
- package/src/components/table-header/table-header.schema.json +38 -0
- package/src/components/table-header/table-header.schema.ts +46 -0
- package/src/components/table-header/table-header.svelte +23 -60
- package/src/components/table-header/table-header.variables.json +1 -0
- package/src/components/table-header/table-header.variables.ts +3 -0
- package/src/components/table-header-cell/table-header-cell.schema.json +37 -0
- package/src/components/table-header-cell/table-header-cell.schema.ts +43 -0
- package/src/components/table-header-cell/table-header-cell.svelte +24 -54
- package/src/components/table-header-cell/table-header-cell.variables.json +1 -0
- package/src/components/table-header-cell/table-header-cell.variables.ts +3 -0
- package/src/components/table-of-contents/table-of-contents.schema.json +39 -0
- package/src/components/table-of-contents/table-of-contents.schema.ts +43 -0
- package/src/components/table-of-contents/table-of-contents.svelte +313 -463
- package/src/components/table-of-contents/table-of-contents.variables.json +7 -0
- package/src/components/table-of-contents/table-of-contents.variables.ts +9 -0
- package/src/components/table-row/table-row.schema.json +37 -0
- package/src/components/table-row/table-row.schema.ts +44 -0
- package/src/components/table-row/table-row.svelte +39 -79
- package/src/components/table-row/table-row.variables.json +1 -0
- package/src/components/table-row/table-row.variables.ts +3 -0
- package/src/components/tabs/index.ts +4 -1
- package/src/components/tabs/tabs.css +6 -0
- package/src/components/tabs/tabs.examples.json +6 -0
- package/src/components/tabs/tabs.schema.json +42 -0
- package/src/components/tabs/tabs.schema.ts +49 -0
- package/src/components/tabs/tabs.svelte +148 -164
- package/src/components/tabs/tabs.types.ts +5 -0
- package/src/components/tabs/tabs.variables.json +1 -0
- package/src/components/tabs/tabs.variables.ts +3 -0
- package/src/components/tag-input/tag-input.schema.json +162 -0
- package/src/components/tag-input/tag-input.schema.ts +172 -0
- package/src/components/tag-input/tag-input.svelte +194 -283
- package/src/components/tag-input/tag-input.variables.json +1 -0
- package/src/components/tag-input/tag-input.variables.ts +3 -0
- package/src/components/team-section/team-section.css +2 -1
- package/src/components/team-section/team-section.schema.json +76 -0
- package/src/components/team-section/team-section.schema.ts +80 -0
- package/src/components/team-section/team-section.svelte +16 -46
- package/src/components/team-section/team-section.variables.json +1 -0
- package/src/components/team-section/team-section.variables.ts +3 -0
- package/src/components/testimonial-section/testimonial-section.css +2 -1
- package/src/components/testimonial-section/testimonial-section.schema.json +71 -0
- package/src/components/testimonial-section/testimonial-section.schema.ts +75 -0
- package/src/components/testimonial-section/testimonial-section.svelte +8 -40
- package/src/components/testimonial-section/testimonial-section.variables.json +1 -0
- package/src/components/testimonial-section/testimonial-section.variables.ts +3 -0
- package/src/components/textarea/textarea.schema.json +58 -0
- package/src/components/textarea/textarea.schema.ts +65 -0
- package/src/components/textarea/textarea.svelte +22 -54
- package/src/components/textarea/textarea.variables.json +1 -0
- package/src/components/textarea/textarea.variables.ts +3 -0
- package/src/components/time-field/time-field.schema.json +77 -0
- package/src/components/time-field/time-field.schema.ts +81 -0
- package/src/components/time-field/time-field.svelte +110 -168
- package/src/components/time-field/time-field.variables.json +1 -0
- package/src/components/time-field/time-field.variables.ts +3 -0
- package/src/components/timeline/timeline.schema.json +90 -0
- package/src/components/timeline/timeline.schema.ts +97 -0
- package/src/components/timeline/timeline.svelte +10 -60
- package/src/components/timeline/timeline.variables.json +1 -0
- package/src/components/timeline/timeline.variables.ts +3 -0
- package/src/components/toast-region/toast-region.schema.json +39 -0
- package/src/components/toast-region/toast-region.schema.ts +37 -0
- package/src/components/toast-region/toast-region.svelte +341 -439
- package/src/components/toast-region/toast-region.variables.json +1 -0
- package/src/components/toast-region/toast-region.variables.ts +3 -0
- package/src/components/toggle/toggle.schema.json +53 -0
- package/src/components/toggle/toggle.schema.ts +64 -0
- package/src/components/toggle/toggle.svelte +18 -46
- package/src/components/toggle/toggle.variables.json +1 -0
- package/src/components/toggle/toggle.variables.ts +3 -0
- package/src/components/toolbar/toolbar-group.svelte +13 -18
- package/src/components/toolbar/toolbar-spacer.svelte +9 -26
- package/src/components/toolbar/toolbar.css +10 -11
- package/src/components/toolbar/toolbar.examples.json +1 -1
- package/src/components/toolbar/toolbar.schema.json +26 -0
- package/src/components/toolbar/toolbar.schema.ts +31 -0
- package/src/components/toolbar/toolbar.svelte +226 -285
- package/src/components/toolbar/toolbar.types.ts +2 -2
- package/src/components/toolbar/toolbar.variables.json +1 -0
- package/src/components/toolbar/toolbar.variables.ts +3 -0
- package/src/components/tooltip/tooltip.schema.json +34 -0
- package/src/components/tooltip/tooltip.schema.ts +38 -0
- package/src/components/tooltip/tooltip.svelte +91 -129
- package/src/components/tooltip/tooltip.variables.json +1 -0
- package/src/components/tooltip/tooltip.variables.ts +3 -0
- package/src/components/transfer-list/transfer-list.schema.json +61 -0
- package/src/components/transfer-list/transfer-list.schema.ts +68 -0
- package/src/components/transfer-list/transfer-list.svelte +169 -239
- package/src/components/transfer-list/transfer-list.variables.json +1 -0
- package/src/components/transfer-list/transfer-list.variables.ts +3 -0
- package/src/components/tree/tree.schema.json +128 -0
- package/src/components/tree/tree.schema.ts +141 -0
- package/src/components/tree/tree.svelte +706 -901
- package/src/components/tree/tree.variables.json +5 -0
- package/src/components/tree/tree.variables.ts +7 -0
- package/src/components/tree-item/tree-item.schema.json +68 -0
- package/src/components/tree-item/tree-item.schema.ts +75 -0
- package/src/components/tree-item/tree-item.svelte +506 -600
- package/src/components/tree-item/tree-item.variables.json +1 -0
- package/src/components/tree-item/tree-item.variables.ts +3 -0
- package/src/components/typography/typography.schema.json +154 -0
- package/src/components/typography/typography.schema.ts +158 -0
- package/src/components/typography/typography.svelte +13 -45
- package/src/components/typography/typography.variables.json +1 -0
- package/src/components/typography/typography.variables.ts +3 -0
- package/src/components/virtual-list/virtual-list.schema.json +53 -0
- package/src/components/virtual-list/virtual-list.schema.ts +61 -0
- package/src/components/virtual-list/virtual-list.svelte +67 -129
- package/src/components/virtual-list/virtual-list.variables.json +1 -0
- package/src/components/virtual-list/virtual-list.variables.ts +3 -0
- package/src/components/visually-hidden/visually-hidden.schema.json +131 -0
- package/src/components/visually-hidden/visually-hidden.schema.ts +136 -0
- package/src/components/visually-hidden/visually-hidden.svelte +4 -29
- package/src/components/visually-hidden/visually-hidden.variables.json +1 -0
- package/src/components/visually-hidden/visually-hidden.variables.ts +3 -0
- package/src/components/waveform/waveform.schema.json +61 -0
- package/src/components/waveform/waveform.schema.ts +67 -0
- package/src/components/waveform/waveform.svelte +113 -152
- package/src/components/waveform/waveform.variables.json +1 -0
- package/src/components/waveform/waveform.variables.ts +3 -0
- package/src/index.ts +40 -38
- package/src/styles/components.css +2 -0
- package/src/styles/foundation.css +39 -0
- package/src/styles/tokens-base.css +149 -0
- package/src/styles/utilities.css +141 -21
- package/src/utilities/change-tracker.svelte.ts +130 -151
- package/src/utilities/sortable-controller.svelte.ts +112 -141
- package/src/utilities/use-announcer.svelte.ts +100 -113
- package/src/utilities/use-history.svelte.ts +141 -168
- package/src/utilities/use-intersection.svelte.ts +36 -51
- package/src/utilities/use-mutation-observer.svelte.ts +51 -69
- package/src/utilities/use-reduced-motion.svelte.ts +21 -24
- package/src/utilities/use-resize-observer.svelte.ts +29 -41
- package/dist/server/components/access-gate/access-gate.schema.js +0 -47
- package/dist/server/components/access-gate/access-gate.variables.js +0 -10
- package/dist/server/components/accordion/accordion.schema.js +0 -35
- package/dist/server/components/accordion/accordion.variables.js +0 -10
- package/dist/server/components/accordion-item/accordion-item.schema.js +0 -44
- package/dist/server/components/accordion-item/accordion-item.variables.js +0 -10
- package/dist/server/components/alert/alert.schema.js +0 -47
- package/dist/server/components/alert/alert.variables.js +0 -10
- package/dist/server/components/alert-dialog/alert-dialog.schema.js +0 -62
- package/dist/server/components/alert-dialog/alert-dialog.variables.js +0 -10
- package/dist/server/components/approval-card/approval-card.schema.js +0 -215
- package/dist/server/components/approval-card/approval-card.variables.js +0 -10
- package/dist/server/components/area-chart/area-chart.schema.js +0 -152
- package/dist/server/components/area-chart/area-chart.variables.js +0 -10
- package/dist/server/components/aspect-ratio/aspect-ratio.schema.js +0 -152
- package/dist/server/components/aspect-ratio/aspect-ratio.variables.js +0 -10
- package/dist/server/components/autocomplete/autocomplete.schema.js +0 -88
- package/dist/server/components/autocomplete/autocomplete.variables.js +0 -10
- package/dist/server/components/avatar/avatar.schema.js +0 -45
- package/dist/server/components/avatar/avatar.variables.js +0 -10
- package/dist/server/components/avatar-group/avatar-group.schema.js +0 -78
- package/dist/server/components/avatar-group/avatar-group.variables.js +0 -10
- package/dist/server/components/backdrop/backdrop.schema.js +0 -55
- package/dist/server/components/backdrop/backdrop.variables.js +0 -10
- package/dist/server/components/badge/badge.schema.js +0 -48
- package/dist/server/components/badge/badge.variables.js +0 -10
- package/dist/server/components/banner/banner.schema.js +0 -48
- package/dist/server/components/banner/banner.variables.js +0 -10
- package/dist/server/components/bar-chart/bar-chart.schema.js +0 -153
- package/dist/server/components/bar-chart/bar-chart.variables.js +0 -10
- package/dist/server/components/bento-cell/bento-cell.schema.js +0 -114
- package/dist/server/components/bento-cell/bento-cell.variables.js +0 -10
- package/dist/server/components/bento-grid/bento-grid.schema.js +0 -64
- package/dist/server/components/bento-grid/bento-grid.variables.js +0 -10
- package/dist/server/components/blog-section/blog-section.schema.js +0 -91
- package/dist/server/components/blog-section/blog-section.variables.js +0 -10
- package/dist/server/components/breadcrumbs/breadcrumbs.schema.js +0 -30
- package/dist/server/components/breadcrumbs/breadcrumbs.variables.js +0 -10
- package/dist/server/components/button/button.schema.js +0 -71
- package/dist/server/components/button/button.variables.js +0 -10
- package/dist/server/components/button-group/button-group.schema.js +0 -42
- package/dist/server/components/button-group/button-group.variables.js +0 -10
- package/dist/server/components/calendar/calendar.schema.js +0 -70
- package/dist/server/components/calendar/calendar.variables.js +0 -10
- package/dist/server/components/callout/callout.schema.js +0 -43
- package/dist/server/components/callout/callout.variables.js +0 -10
- package/dist/server/components/capability-gate/capability-gate.schema.js +0 -81
- package/dist/server/components/capability-gate/capability-gate.variables.js +0 -10
- package/dist/server/components/card/card.schema.js +0 -69
- package/dist/server/components/card/card.variables.js +0 -10
- package/dist/server/components/carousel/carousel.schema.js +0 -55
- package/dist/server/components/carousel/carousel.variables.js +0 -10
- package/dist/server/components/chat/chat.schema.js +0 -268
- package/dist/server/components/chat/chat.variables.js +0 -10
- package/dist/server/components/chat-conversation-header/chat-conversation-header.schema.js +0 -43
- package/dist/server/components/chat-conversation-header/chat-conversation-header.variables.js +0 -10
- package/dist/server/components/chat-conversation-list/chat-conversation-list.schema.js +0 -54
- package/dist/server/components/chat-conversation-list/chat-conversation-list.variables.js +0 -10
- package/dist/server/components/checkbox/checkbox.schema.js +0 -58
- package/dist/server/components/checkbox/checkbox.variables.js +0 -10
- package/dist/server/components/checkbox-group/checkbox-group.schema.js +0 -54
- package/dist/server/components/checkbox-group/checkbox-group.variables.js +0 -10
- package/dist/server/components/chip/chip.schema.js +0 -69
- package/dist/server/components/chip/chip.variables.js +0 -10
- package/dist/server/components/choice-grid/choice-grid.schema.js +0 -73
- package/dist/server/components/choice-grid/choice-grid.variables.js +0 -10
- package/dist/server/components/choice-grid-item/choice-grid-item.schema.js +0 -44
- package/dist/server/components/choice-grid-item/choice-grid-item.variables.js +0 -10
- package/dist/server/components/click-away-listener/click-away-listener.schema.js +0 -42
- package/dist/server/components/click-away-listener/click-away-listener.variables.js +0 -10
- package/dist/server/components/code-block/code-block.schema.js +0 -46
- package/dist/server/components/code-block/code-block.variables.js +0 -10
- package/dist/server/components/collapsible/collapsible.schema.js +0 -58
- package/dist/server/components/collapsible/collapsible.variables.js +0 -10
- package/dist/server/components/color-field/color-field.schema.js +0 -90
- package/dist/server/components/color-field/color-field.variables.js +0 -10
- package/dist/server/components/color-picker/color-picker.schema.js +0 -65
- package/dist/server/components/color-picker/color-picker.variables.js +0 -10
- package/dist/server/components/color-swatch-picker/color-swatch-picker.schema.js +0 -74
- package/dist/server/components/color-swatch-picker/color-swatch-picker.variables.js +0 -10
- package/dist/server/components/combobox/combobox.schema.js +0 -90
- package/dist/server/components/combobox/combobox.variables.js +0 -10
- package/dist/server/components/command-item/command-item.schema.js +0 -70
- package/dist/server/components/command-item/command-item.variables.js +0 -10
- package/dist/server/components/command-menu/command-menu.schema.js +0 -90
- package/dist/server/components/command-menu/command-menu.variables.js +0 -10
- package/dist/server/components/command-palette/command-palette.schema.js +0 -69
- package/dist/server/components/command-palette/command-palette.variables.js +0 -10
- package/dist/server/components/confirm-dialog/confirm-dialog.schema.js +0 -75
- package/dist/server/components/confirm-dialog/confirm-dialog.variables.js +0 -10
- package/dist/server/components/container/container.schema.js +0 -149
- package/dist/server/components/container/container.variables.js +0 -10
- package/dist/server/components/context-menu/context-menu.schema.js +0 -59
- package/dist/server/components/context-menu/context-menu.variables.js +0 -10
- package/dist/server/components/context-menu-trigger/context-menu-trigger.schema.js +0 -29
- package/dist/server/components/context-menu-trigger/context-menu-trigger.variables.js +0 -10
- package/dist/server/components/copy-button/copy-button.schema.js +0 -56
- package/dist/server/components/copy-button/copy-button.variables.js +0 -10
- package/dist/server/components/cta-section/cta-section.schema.js +0 -76
- package/dist/server/components/cta-section/cta-section.variables.js +0 -10
- package/dist/server/components/data-grid/data-grid.schema.js +0 -115
- package/dist/server/components/data-grid/data-grid.variables.js +0 -10
- package/dist/server/components/data-list/data-list.schema.js +0 -58
- package/dist/server/components/data-list/data-list.variables.js +0 -10
- package/dist/server/components/data-table/data-table.schema.js +0 -112
- package/dist/server/components/data-table/data-table.variables.js +0 -10
- package/dist/server/components/date-picker/date-picker.schema.js +0 -70
- package/dist/server/components/date-picker/date-picker.variables.js +0 -10
- package/dist/server/components/date-range-field/date-range-field.schema.js +0 -78
- package/dist/server/components/date-range-field/date-range-field.variables.js +0 -10
- package/dist/server/components/description-list/description-list.schema.js +0 -38
- package/dist/server/components/description-list/description-list.variables.js +0 -10
- package/dist/server/components/diff-statistics/diff-statistics.schema.js +0 -45
- package/dist/server/components/diff-statistics/diff-statistics.variables.js +0 -10
- package/dist/server/components/diff-viewer/diff-viewer.schema.js +0 -78
- package/dist/server/components/diff-viewer/diff-viewer.variables.js +0 -10
- package/dist/server/components/divider/divider.schema.js +0 -40
- package/dist/server/components/divider/divider.variables.js +0 -10
- package/dist/server/components/drawer/drawer.schema.js +0 -68
- package/dist/server/components/drawer/drawer.variables.js +0 -10
- package/dist/server/components/dropdown/dropdown.schema.js +0 -44
- package/dist/server/components/dropdown/dropdown.variables.js +0 -10
- package/dist/server/components/dropdown-group/dropdown-group.schema.js +0 -37
- package/dist/server/components/dropdown-group/dropdown-group.variables.js +0 -10
- package/dist/server/components/dropdown-item/dropdown-item.schema.js +0 -60
- package/dist/server/components/dropdown-item/dropdown-item.variables.js +0 -10
- package/dist/server/components/dropdown-label/dropdown-label.schema.js +0 -28
- package/dist/server/components/dropdown-label/dropdown-label.variables.js +0 -10
- package/dist/server/components/dropdown-menu/dropdown-menu.schema.js +0 -28
- package/dist/server/components/dropdown-menu/dropdown-menu.variables.js +0 -10
- package/dist/server/components/dropdown-separator/dropdown-separator.schema.js +0 -20
- package/dist/server/components/dropdown-separator/dropdown-separator.variables.js +0 -10
- package/dist/server/components/dropdown-trigger/dropdown-trigger.schema.js +0 -32
- package/dist/server/components/dropdown-trigger/dropdown-trigger.variables.js +0 -10
- package/dist/server/components/empty-state/empty-state.schema.js +0 -46
- package/dist/server/components/empty-state/empty-state.variables.js +0 -10
- package/dist/server/components/event-stream-viewer/event-stream-viewer.schema.js +0 -144
- package/dist/server/components/event-stream-viewer/event-stream-viewer.variables.js +0 -10
- package/dist/server/components/event-timeline/event-timeline.schema.js +0 -104
- package/dist/server/components/event-timeline/event-timeline.variables.js +0 -10
- package/dist/server/components/faceted-filter-bar/faceted-filter-bar.schema.js +0 -76
- package/dist/server/components/faceted-filter-bar/faceted-filter-bar.variables.js +0 -10
- package/dist/server/components/feature-section/feature-section.schema.js +0 -91
- package/dist/server/components/feature-section/feature-section.variables.js +0 -10
- package/dist/server/components/feed/feed.schema.js +0 -34
- package/dist/server/components/feed/feed.variables.js +0 -10
- package/dist/server/components/feed-event/feed-event.schema.js +0 -59
- package/dist/server/components/feed-event/feed-event.variables.js +0 -10
- package/dist/server/components/file-upload/file-upload.schema.js +0 -79
- package/dist/server/components/file-upload/file-upload.variables.js +0 -15
- package/dist/server/components/floating-action-button/floating-action-button.schema.js +0 -53
- package/dist/server/components/floating-action-button/floating-action-button.variables.js +0 -10
- package/dist/server/components/focus-trap/focus-trap.schema.js +0 -59
- package/dist/server/components/focus-trap/focus-trap.variables.js +0 -10
- package/dist/server/components/footer/footer.schema.js +0 -50
- package/dist/server/components/footer/footer.variables.js +0 -10
- package/dist/server/components/form-field/form-field.schema.js +0 -55
- package/dist/server/components/form-field/form-field.variables.js +0 -10
- package/dist/server/components/form-section/form-section.schema.js +0 -50
- package/dist/server/components/form-section/form-section.variables.js +0 -10
- package/dist/server/components/grid/grid.schema.js +0 -62
- package/dist/server/components/grid/grid.variables.js +0 -10
- package/dist/server/components/grid-item/grid-item.schema.js +0 -89
- package/dist/server/components/grid-item/grid-item.variables.js +0 -10
- package/dist/server/components/grid-list/grid-list.schema.js +0 -35
- package/dist/server/components/grid-list/grid-list.variables.js +0 -10
- package/dist/server/components/grid-list-item/grid-list-item.schema.js +0 -69
- package/dist/server/components/grid-list-item/grid-list-item.variables.js +0 -10
- package/dist/server/components/hero-section/hero-section.schema.js +0 -72
- package/dist/server/components/hero-section/hero-section.variables.js +0 -10
- package/dist/server/components/hover-card/hover-card.schema.js +0 -83
- package/dist/server/components/hover-card/hover-card.variables.js +0 -10
- package/dist/server/components/image/image.schema.js +0 -73
- package/dist/server/components/image/image.variables.js +0 -10
- package/dist/server/components/inline-loading/inline-loading.schema.js +0 -38
- package/dist/server/components/inline-loading/inline-loading.variables.js +0 -10
- package/dist/server/components/input/input.schema.js +0 -84
- package/dist/server/components/input/input.variables.js +0 -10
- package/dist/server/components/invocation-rule-builder/invocation-rule-builder.schema.js +0 -178
- package/dist/server/components/invocation-rule-builder/invocation-rule-builder.variables.js +0 -10
- package/dist/server/components/json-schema-editor/json-schema-editor.schema.js +0 -72
- package/dist/server/components/json-schema-editor/json-schema-editor.variables.js +0 -10
- package/dist/server/components/json-viewer/json-viewer.schema.js +0 -42
- package/dist/server/components/json-viewer/json-viewer.variables.js +0 -10
- package/dist/server/components/kanban-board/kanban-board.schema.js +0 -73
- package/dist/server/components/kanban-board/kanban-board.variables.js +0 -15
- package/dist/server/components/kbd/kbd.schema.js +0 -38
- package/dist/server/components/kbd/kbd.variables.js +0 -10
- package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.schema.js +0 -39
- package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.variables.js +0 -10
- package/dist/server/components/label/label.schema.js +0 -44
- package/dist/server/components/label/label.variables.js +0 -10
- package/dist/server/components/line-chart/line-chart.schema.js +0 -148
- package/dist/server/components/line-chart/line-chart.variables.js +0 -10
- package/dist/server/components/link/link.schema.js +0 -70
- package/dist/server/components/link/link.variables.js +0 -10
- package/dist/server/components/load-more/load-more.schema.js +0 -70
- package/dist/server/components/load-more/load-more.variables.js +0 -10
- package/dist/server/components/locale-provider/locale-provider.schema.js +0 -33
- package/dist/server/components/locale-provider/locale-provider.variables.js +0 -10
- package/dist/server/components/logo-cloud/logo-cloud.schema.js +0 -72
- package/dist/server/components/logo-cloud/logo-cloud.variables.js +0 -10
- package/dist/server/components/markdown-editor/markdown-editor.schema.js +0 -126
- package/dist/server/components/markdown-editor/markdown-editor.variables.js +0 -10
- package/dist/server/components/marquee/marquee.schema.js +0 -59
- package/dist/server/components/marquee/marquee.variables.js +0 -14
- package/dist/server/components/masonry/masonry.schema.js +0 -43
- package/dist/server/components/masonry/masonry.variables.js +0 -10
- package/dist/server/components/matrix-chart/matrix-chart.schema.js +0 -99
- package/dist/server/components/matrix-chart/matrix-chart.variables.js +0 -10
- package/dist/server/components/media-controls/media-controls.schema.js +0 -77
- package/dist/server/components/media-controls/media-controls.variables.js +0 -10
- package/dist/server/components/mega-menu/mega-menu.schema.js +0 -46
- package/dist/server/components/mega-menu/mega-menu.variables.js +0 -10
- package/dist/server/components/menu-bar/menu-bar.schema.js +0 -41
- package/dist/server/components/menu-bar/menu-bar.variables.js +0 -10
- package/dist/server/components/message/message.schema.js +0 -47
- package/dist/server/components/message/message.variables.js +0 -10
- package/dist/server/components/meter/meter.schema.js +0 -63
- package/dist/server/components/meter/meter.variables.js +0 -10
- package/dist/server/components/modal/modal.schema.js +0 -96
- package/dist/server/components/modal/modal.variables.js +0 -10
- package/dist/server/components/multi-select/multi-select.schema.js +0 -97
- package/dist/server/components/multi-select/multi-select.variables.js +0 -10
- package/dist/server/components/navigation-bar/navigation-bar.schema.js +0 -61
- package/dist/server/components/navigation-bar/navigation-bar.variables.js +0 -10
- package/dist/server/components/navigation-item/navigation-item.schema.js +0 -57
- package/dist/server/components/navigation-item/navigation-item.variables.js +0 -10
- package/dist/server/components/newsletter-section/newsletter-section.schema.js +0 -71
- package/dist/server/components/newsletter-section/newsletter-section.variables.js +0 -10
- package/dist/server/components/number-input/number-input.schema.js +0 -100
- package/dist/server/components/number-input/number-input.variables.js +0 -10
- package/dist/server/components/page-header/page-header.schema.js +0 -38
- package/dist/server/components/page-header/page-header.variables.js +0 -10
- package/dist/server/components/pagination/pagination.schema.js +0 -33
- package/dist/server/components/pagination/pagination.variables.js +0 -10
- package/dist/server/components/payload-inspector/payload-inspector.schema.js +0 -86
- package/dist/server/components/payload-inspector/payload-inspector.variables.js +0 -10
- package/dist/server/components/permission-matrix/permission-matrix.schema.js +0 -79
- package/dist/server/components/permission-matrix/permission-matrix.variables.js +0 -10
- package/dist/server/components/phone-input/phone-input.schema.js +0 -581
- package/dist/server/components/phone-input/phone-input.variables.js +0 -10
- package/dist/server/components/pin-input/pin-input.schema.js +0 -99
- package/dist/server/components/pin-input/pin-input.variables.js +0 -10
- package/dist/server/components/popover/popover.schema.js +0 -97
- package/dist/server/components/popover/popover.variables.js +0 -10
- package/dist/server/components/portal/portal.schema.js +0 -48
- package/dist/server/components/portal/portal.variables.js +0 -10
- package/dist/server/components/pricing-card/pricing-card.schema.js +0 -59
- package/dist/server/components/pricing-card/pricing-card.variables.js +0 -10
- package/dist/server/components/pricing-section/pricing-section.schema.js +0 -91
- package/dist/server/components/pricing-section/pricing-section.variables.js +0 -10
- package/dist/server/components/progress/progress.schema.js +0 -48
- package/dist/server/components/progress/progress.variables.js +0 -10
- package/dist/server/components/qr-code/qr-code.schema.js +0 -45
- package/dist/server/components/qr-code/qr-code.variables.js +0 -10
- package/dist/server/components/radio-group/radio-group.schema.js +0 -63
- package/dist/server/components/radio-group/radio-group.variables.js +0 -10
- package/dist/server/components/rating/rating.schema.js +0 -94
- package/dist/server/components/rating/rating.variables.js +0 -10
- package/dist/server/components/resizable-panels/resizable-panels.schema.js +0 -62
- package/dist/server/components/resizable-panels/resizable-panels.variables.js +0 -10
- package/dist/server/components/review-editor/review-editor.schema.js +0 -92
- package/dist/server/components/review-editor/review-editor.variables.js +0 -10
- package/dist/server/components/run-step-timeline/run-step-timeline.schema.js +0 -438
- package/dist/server/components/run-step-timeline/run-step-timeline.variables.js +0 -10
- package/dist/server/components/schema-form/schema-form.schema.js +0 -55
- package/dist/server/components/schema-form/schema-form.variables.js +0 -10
- package/dist/server/components/scroll-area/scroll-area.schema.js +0 -61
- package/dist/server/components/scroll-area/scroll-area.variables.js +0 -10
- package/dist/server/components/search-field/search-field.schema.js +0 -72
- package/dist/server/components/search-field/search-field.variables.js +0 -10
- package/dist/server/components/secret-value-field/secret-value-field.schema.js +0 -66
- package/dist/server/components/secret-value-field/secret-value-field.variables.js +0 -10
- package/dist/server/components/section-heading/section-heading.schema.js +0 -53
- package/dist/server/components/section-heading/section-heading.variables.js +0 -10
- package/dist/server/components/segment/segment.schema.js +0 -54
- package/dist/server/components/segment/segment.variables.js +0 -10
- package/dist/server/components/segmented-control/segmented-control.schema.js +0 -94
- package/dist/server/components/segmented-control/segmented-control.variables.js +0 -10
- package/dist/server/components/select/select.schema.js +0 -61
- package/dist/server/components/select/select.variables.js +0 -10
- package/dist/server/components/selection-popover/selection-popover.schema.js +0 -59
- package/dist/server/components/selection-popover/selection-popover.variables.js +0 -10
- package/dist/server/components/share-card/share-card.schema.js +0 -64
- package/dist/server/components/share-card/share-card.variables.js +0 -10
- package/dist/server/components/sheet/sheet.schema.js +0 -64
- package/dist/server/components/sheet/sheet.variables.js +0 -10
- package/dist/server/components/shortcut-hint/shortcut-hint.schema.js +0 -46
- package/dist/server/components/shortcut-hint/shortcut-hint.variables.js +0 -10
- package/dist/server/components/side-navigation/side-navigation.schema.js +0 -36
- package/dist/server/components/side-navigation/side-navigation.variables.js +0 -10
- package/dist/server/components/side-navigation-group/side-navigation-group.schema.js +0 -58
- package/dist/server/components/side-navigation-group/side-navigation-group.variables.js +0 -10
- package/dist/server/components/side-navigation-item/side-navigation-item.schema.js +0 -57
- package/dist/server/components/side-navigation-item/side-navigation-item.variables.js +0 -10
- package/dist/server/components/sidebar/sidebar.schema.js +0 -47
- package/dist/server/components/sidebar/sidebar.variables.js +0 -10
- package/dist/server/components/skeleton/skeleton.schema.js +0 -32
- package/dist/server/components/skeleton/skeleton.variables.js +0 -10
- package/dist/server/components/skip-link/skip-link.schema.js +0 -34
- package/dist/server/components/skip-link/skip-link.variables.js +0 -10
- package/dist/server/components/slider/slider.schema.js +0 -91
- package/dist/server/components/slider/slider.variables.js +0 -10
- package/dist/server/components/sortable-list/sortable-list.schema.js +0 -76
- package/dist/server/components/sortable-list/sortable-list.variables.js +0 -10
- package/dist/server/components/sparkbar/sparkbar.schema.js +0 -53
- package/dist/server/components/sparkbar/sparkbar.variables.js +0 -10
- package/dist/server/components/spectrogram/spectrogram.schema.js +0 -91
- package/dist/server/components/spectrogram/spectrogram.variables.js +0 -10
- package/dist/server/components/spectrum-chart/spectrum-chart.schema.js +0 -78
- package/dist/server/components/spectrum-chart/spectrum-chart.variables.js +0 -10
- package/dist/server/components/speed-dial/speed-dial.schema.js +0 -55
- package/dist/server/components/speed-dial/speed-dial.variables.js +0 -10
- package/dist/server/components/speed-dial-action/speed-dial-action.schema.js +0 -50
- package/dist/server/components/speed-dial-action/speed-dial-action.variables.js +0 -10
- package/dist/server/components/spinner/spinner.schema.js +0 -30
- package/dist/server/components/spinner/spinner.variables.js +0 -10
- package/dist/server/components/stacked-list-item/stacked-list-item.schema.js +0 -85
- package/dist/server/components/stacked-list-item/stacked-list-item.variables.js +0 -10
- package/dist/server/components/stat/stat.schema.js +0 -59
- package/dist/server/components/stat/stat.variables.js +0 -10
- package/dist/server/components/stat-group/stat-group.schema.js +0 -44
- package/dist/server/components/stat-group/stat-group.variables.js +0 -10
- package/dist/server/components/stats-section/stats-section.schema.js +0 -92
- package/dist/server/components/stats-section/stats-section.variables.js +0 -10
- package/dist/server/components/status-dot/status-dot.schema.js +0 -46
- package/dist/server/components/status-dot/status-dot.variables.js +0 -10
- package/dist/server/components/steps/steps.schema.js +0 -48
- package/dist/server/components/steps/steps.variables.js +0 -10
- package/dist/server/components/surface/surface.schema.js +0 -34
- package/dist/server/components/surface/surface.variables.js +0 -10
- package/dist/server/components/tab/tab.schema.js +0 -48
- package/dist/server/components/tab/tab.variables.js +0 -10
- package/dist/server/components/tab-list/tab-list.schema.js +0 -38
- package/dist/server/components/tab-list/tab-list.variables.js +0 -10
- package/dist/server/components/tab-panel/tab-panel.schema.js +0 -39
- package/dist/server/components/tab-panel/tab-panel.variables.js +0 -10
- package/dist/server/components/table/table.schema.js +0 -51
- package/dist/server/components/table/table.variables.js +0 -10
- package/dist/server/components/table-body/table-body.schema.js +0 -30
- package/dist/server/components/table-body/table-body.variables.js +0 -10
- package/dist/server/components/table-cell/table-cell.schema.js +0 -44
- package/dist/server/components/table-cell/table-cell.variables.js +0 -10
- package/dist/server/components/table-header/table-header.schema.js +0 -47
- package/dist/server/components/table-header/table-header.variables.js +0 -10
- package/dist/server/components/table-header-cell/table-header-cell.schema.js +0 -46
- package/dist/server/components/table-header-cell/table-header-cell.variables.js +0 -10
- package/dist/server/components/table-of-contents/table-of-contents.schema.js +0 -48
- package/dist/server/components/table-of-contents/table-of-contents.variables.js +0 -16
- package/dist/server/components/table-row/table-row.schema.js +0 -49
- package/dist/server/components/table-row/table-row.variables.js +0 -10
- package/dist/server/components/tabs/tabs.schema.js +0 -49
- package/dist/server/components/tabs/tabs.variables.js +0 -10
- package/dist/server/components/tag-input/tag-input.schema.js +0 -171
- package/dist/server/components/tag-input/tag-input.variables.js +0 -10
- package/dist/server/components/team-section/team-section.schema.js +0 -85
- package/dist/server/components/team-section/team-section.variables.js +0 -10
- package/dist/server/components/testimonial-section/testimonial-section.schema.js +0 -80
- package/dist/server/components/testimonial-section/testimonial-section.variables.js +0 -10
- package/dist/server/components/textarea/textarea.schema.js +0 -67
- package/dist/server/components/textarea/textarea.variables.js +0 -10
- package/dist/server/components/time-field/time-field.schema.js +0 -86
- package/dist/server/components/time-field/time-field.variables.js +0 -10
- package/dist/server/components/timeline/timeline.schema.js +0 -99
- package/dist/server/components/timeline/timeline.variables.js +0 -10
- package/dist/server/components/toast-region/toast-region.schema.js +0 -41
- package/dist/server/components/toast-region/toast-region.variables.js +0 -10
- package/dist/server/components/toggle/toggle.schema.js +0 -62
- package/dist/server/components/toggle/toggle.variables.js +0 -10
- package/dist/server/components/toolbar/toolbar.schema.js +0 -35
- package/dist/server/components/toolbar/toolbar.variables.js +0 -10
- package/dist/server/components/tooltip/tooltip.schema.js +0 -43
- package/dist/server/components/tooltip/tooltip.variables.js +0 -10
- package/dist/server/components/transfer-list/transfer-list.schema.js +0 -70
- package/dist/server/components/transfer-list/transfer-list.variables.js +0 -10
- package/dist/server/components/tree/tree.schema.js +0 -137
- package/dist/server/components/tree/tree.variables.js +0 -14
- package/dist/server/components/tree-item/tree-item.schema.js +0 -77
- package/dist/server/components/tree-item/tree-item.variables.js +0 -10
- package/dist/server/components/typography/typography.schema.js +0 -163
- package/dist/server/components/typography/typography.variables.js +0 -10
- package/dist/server/components/virtual-list/virtual-list.schema.js +0 -67
- package/dist/server/components/virtual-list/virtual-list.variables.js +0 -10
- package/dist/server/components/visually-hidden/visually-hidden.schema.js +0 -140
- package/dist/server/components/visually-hidden/visually-hidden.variables.js +0 -10
- package/dist/server/components/waveform/waveform.schema.js +0 -70
- package/dist/server/components/waveform/waveform.variables.js +0 -10
- package/dist/server/index-2ynappje.js +0 -388
- package/dist/server/index-d3jpz7nh.js +0 -265
- package/dist/server/index-v5tk8a0j.js +0 -344
- package/dist/server/index.server-0jw824y0.js +0 -9
- package/dist/server/index.server-0n0h8wsw.js +0 -159
- package/dist/server/index.server-1hrcs2mn.js +0 -55
- package/dist/server/index.server-1q6csb7g.js +0 -62
- package/dist/server/index.server-2ef5byty.js +0 -41
- package/dist/server/index.server-2ssdpqz0.js +0 -458
- package/dist/server/index.server-30s4ajz2.js +0 -3391
- package/dist/server/index.server-30zw3bv3.js +0 -52
- package/dist/server/index.server-37t15r2c.js +0 -9
- package/dist/server/index.server-3jr3n02r.js +0 -1835
- package/dist/server/index.server-3yvf1t1p.js +0 -197
- package/dist/server/index.server-4h5tdvz1.js +0 -271
- package/dist/server/index.server-4xer517a.js +0 -23
- package/dist/server/index.server-51r677ht.js +0 -1035
- package/dist/server/index.server-55x63e57.js +0 -9
- package/dist/server/index.server-5zvh7svb.js +0 -9
- package/dist/server/index.server-65wyd3qb.js +0 -244
- package/dist/server/index.server-6dfav8r0.js +0 -142
- package/dist/server/index.server-70y2sq2g.js +0 -9
- package/dist/server/index.server-76z9qsxq.js +0 -93
- package/dist/server/index.server-7pjefftj.js +0 -102
- package/dist/server/index.server-7yp7j1bw.js +0 -371
- package/dist/server/index.server-8s1t2e2w.js +0 -284
- package/dist/server/index.server-90g4gszd.js +0 -1163
- package/dist/server/index.server-989dxz7z.js +0 -9
- package/dist/server/index.server-9ew3zj1z.js +0 -726
- package/dist/server/index.server-9jqd7bxw.js +0 -117
- package/dist/server/index.server-9zfs8c1b.js +0 -35
- package/dist/server/index.server-9zqmr226.js +0 -117
- package/dist/server/index.server-axf8h1gd.js +0 -161
- package/dist/server/index.server-bt1gy21n.js +0 -100
- package/dist/server/index.server-cpjmf3c9.js +0 -9
- package/dist/server/index.server-dt0ccgbz.js +0 -3839
- package/dist/server/index.server-e5zf44p5.js +0 -9
- package/dist/server/index.server-e9eyxk7a.js +0 -9
- package/dist/server/index.server-eabjzvtt.js +0 -9
- package/dist/server/index.server-edr3c033.js +0 -85
- package/dist/server/index.server-eq83dtav.js +0 -195
- package/dist/server/index.server-eqprncaf.js +0 -168
- package/dist/server/index.server-ffcsn4km.js +0 -9
- package/dist/server/index.server-fm19v7bt.js +0 -9
- package/dist/server/index.server-g3qbp906.js +0 -377
- package/dist/server/index.server-ga7e445m.js +0 -56
- package/dist/server/index.server-gdtt4a78.js +0 -143
- package/dist/server/index.server-gyg8tfq3.js +0 -176
- package/dist/server/index.server-h2hjtvk4.js +0 -94
- package/dist/server/index.server-hmqm1t7m.js +0 -222
- package/dist/server/index.server-hrdm71tg.js +0 -194
- package/dist/server/index.server-hybyy2xe.js +0 -177
- package/dist/server/index.server-j3gec8b5.js +0 -393
- package/dist/server/index.server-j89rzjcz.js +0 -9
- package/dist/server/index.server-j8x6mvrh.js +0 -294
- package/dist/server/index.server-jsxtrgrv.js +0 -9
- package/dist/server/index.server-kfcst2vb.js +0 -9
- package/dist/server/index.server-kfshf5nx.js +0 -111
- package/dist/server/index.server-meehv9hp.js +0 -4416
- package/dist/server/index.server-n16wn1ps.js +0 -15643
- package/dist/server/index.server-n4f4tspa.js +0 -9
- package/dist/server/index.server-ndss6byn.js +0 -123
- package/dist/server/index.server-pfn50743.js +0 -447
- package/dist/server/index.server-pg2vydas.js +0 -190
- package/dist/server/index.server-pm6q0dmn.js +0 -563
- package/dist/server/index.server-pne61vry.js +0 -9
- package/dist/server/index.server-rjgy0mc7.js +0 -1028
- package/dist/server/index.server-rxa52bqt.js +0 -169
- package/dist/server/index.server-sqnbagf9.js +0 -457
- package/dist/server/index.server-svgs2fzj.js +0 -2309
- package/dist/server/index.server-szrtfkbm.js +0 -31
- package/dist/server/index.server-tgmm7xgc.js +0 -83
- package/dist/server/index.server-v38m2bgg.js +0 -75
- package/dist/server/index.server-v41vrqg7.js +0 -76
- package/dist/server/index.server-vbn6z472.js +0 -291
- package/dist/server/index.server-vdpcpdqc.js +0 -126
- package/dist/server/index.server-vy5csx7j.js +0 -153
- package/dist/server/index.server-w0y2bxb7.js +0 -72
- package/dist/server/index.server-w7cxxf03.js +0 -9
- package/dist/server/index.server-w8y3eqhp.js +0 -84
- package/dist/server/index.server-wckvcay0.js +0 -50
- package/dist/server/index.server-xpad931e.js +0 -85
- package/dist/server/index.server-yb5b3hnv.js +0 -9
- package/dist/server/index.server-yg55jew8.js +0 -162
- package/dist/server/index.server-ze9xj0kf.js +0 -100
- package/src/components/schema-form/schema-form-async.fixture.ts +0 -101
- /package/dist/components/{schema-form/schema-form-async.fixture.d.ts → action-row/action-row.css.d.ts} +0 -0
- /package/dist/{index.browser.css → components/markdown-editor/index.css} +0 -0
|
@@ -1,196 +1,82 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
|
|
3
|
-
import type { ChatAdapter, ChatCommand, ChatPushHandlers } from '../adapter/chat-adapter.ts';
|
|
4
|
-
import type { Message, MessageInput } from '../conversation-model.ts';
|
|
5
|
-
import type { ChatAttachment } from '../input/chat-attachment.ts';
|
|
6
|
-
|
|
7
|
-
// `ChatProps` is owned by `../chat.types.ts` (the analyzer + schema generator
|
|
8
|
-
// read that symbol). The implementation imports it from there rather than
|
|
9
|
-
// redeclaring it, so the public type and the `$props()` shape can never drift.
|
|
10
|
-
import type { ChatProps } from '../chat.types.ts';
|
|
11
|
-
|
|
12
|
-
export type { ChatProps };
|
|
13
|
-
export type {
|
|
14
|
-
ChatScrollStateChangeEvent,
|
|
15
|
-
ChatStopGeneratingEvent,
|
|
16
|
-
ChatSubmitEvent,
|
|
17
|
-
ChatUnreadIndicatorChangeEvent,
|
|
18
|
-
} from './chat-events.ts';
|
|
2
|
+
export {};
|
|
19
3
|
</script>
|
|
20
4
|
|
|
21
5
|
<script lang="ts">
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
variant = 'bubble',
|
|
81
|
-
bottomThreshold = DEFAULT_SCROLL_CONFIGURATION.bottomThreshold,
|
|
82
|
-
jumpThreshold = DEFAULT_SCROLL_CONFIGURATION.jumpThreshold,
|
|
83
|
-
streaming = false,
|
|
84
|
-
streamingStatus,
|
|
85
|
-
capabilities,
|
|
86
|
-
virtualized = false,
|
|
87
|
-
virtualizationEstimatedRowHeight = 88,
|
|
88
|
-
virtualizationOverscan = 3,
|
|
89
|
-
virtualizationInitialHeight = 640,
|
|
90
|
-
moreHistoryAvailable = true,
|
|
91
|
-
loadEarlierLabel = 'Load earlier messages',
|
|
92
|
-
loadingEarlierLabel = 'Loading earlier messages',
|
|
93
|
-
header,
|
|
94
|
-
empty,
|
|
95
|
-
emptyPrompts,
|
|
96
|
-
messageActions,
|
|
97
|
-
messageStatus,
|
|
98
|
-
row,
|
|
99
|
-
messagePart,
|
|
100
|
-
viewportAttachment,
|
|
101
|
-
typingParticipants,
|
|
102
|
-
readReceipts,
|
|
103
|
-
adapter,
|
|
104
|
-
onadaptererror,
|
|
105
|
-
onpushmessage,
|
|
106
|
-
ontypingchange,
|
|
107
|
-
onreadreceipt,
|
|
108
|
-
onsubmit,
|
|
109
|
-
onretry,
|
|
110
|
-
onedit,
|
|
111
|
-
onapprove,
|
|
112
|
-
ondeny,
|
|
113
|
-
messageReasoning,
|
|
114
|
-
messageSteps,
|
|
115
|
-
messageSuggestions,
|
|
116
|
-
onsuggestionselect,
|
|
117
|
-
onloadhistory,
|
|
118
|
-
onstopgenerating,
|
|
119
|
-
onjumptolatest,
|
|
120
|
-
onscrollstatechange,
|
|
121
|
-
onunreadindicatorchange,
|
|
122
|
-
onexpandedchange,
|
|
123
|
-
onattachmentadd,
|
|
124
|
-
onattachmentremove,
|
|
125
|
-
onattachmentfailure,
|
|
126
|
-
...rest
|
|
127
|
-
}: ChatProps = $props();
|
|
128
|
-
|
|
129
|
-
// ==========================================================================
|
|
130
|
-
// Refs and Internal State
|
|
131
|
-
// ==========================================================================
|
|
132
|
-
|
|
133
|
-
let viewport = $state<HTMLElement | null>(null);
|
|
134
|
-
let containerRef = $state<HTMLElement | null>(null);
|
|
135
|
-
let inputRef:
|
|
136
|
-
| {
|
|
137
|
-
focus: () => void;
|
|
138
|
-
clear: () => void;
|
|
139
|
-
addFiles: (files: File[]) => void;
|
|
140
|
-
getAttachments: () => ChatAttachment[];
|
|
141
|
-
}
|
|
142
|
-
| undefined;
|
|
143
|
-
let searchBarRef = $state<{ focusInput: () => void } | undefined>(undefined);
|
|
144
|
-
let historyTriggerRef = $state<{ focus: (options?: FocusOptions) => void } | undefined>(
|
|
145
|
-
undefined,
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
// Container-level drag-and-drop state for full-window drop zone
|
|
149
|
-
let isContainerDragOver = $state(false);
|
|
150
|
-
|
|
151
|
-
// Streaming state: separate from the Conversation to avoid re-rendering the message list
|
|
152
|
-
let streamingContent = $state('');
|
|
153
|
-
let streamingMessageId = $state<string | null>(null);
|
|
154
|
-
let streamingRowElement = $state<HTMLElement | null>(null);
|
|
155
|
-
|
|
156
|
-
// Token buffer: accumulate tokens as an array; joined and flushed once per animation frame
|
|
157
|
-
// to avoid O(n²) string work from calling join() on every push.
|
|
158
|
-
let tokenBuffer: string[] = [];
|
|
159
|
-
// rAF handle for batching token flushes and scroll throttling during streaming
|
|
160
|
-
let streamingScrollRaf: number | undefined;
|
|
161
|
-
|
|
162
|
-
// C3 — tool approval state. Keyed by tool call id. Both sets are UI-only and
|
|
163
|
-
// are never written back to the transcript. A pending tool-approval part has
|
|
164
|
-
// its call id in neither set (approved === undefined). Once the consumer or
|
|
165
|
-
// adapter resolves the approval, the id moves into one of the sets and the
|
|
166
|
-
// part re-derives to show the resolved state.
|
|
167
|
-
let approvedToolCallIds = $state(new Set<string>());
|
|
168
|
-
let deniedToolCallIds = $state(new Set<string>());
|
|
169
|
-
|
|
170
|
-
// Per-message disclosure state (reasoning blocks + tool-call cards). UI-only;
|
|
171
|
-
// never written to the transcript. Both are collapsed by default; toggling
|
|
172
|
-
// triggers a virtualizer remeasure so the row's height tracks the expanded
|
|
173
|
-
// content. Kept as separate instances so a message carrying both a reasoning
|
|
174
|
-
// block and a tool-call card discloses each independently.
|
|
175
|
-
function remeasureRow(messageId: string): void {
|
|
176
|
-
if (!isVirtualized || !viewport) return;
|
|
6
|
+
import { tick, untrack } from 'svelte';
|
|
7
|
+
import { classNames } from '../../../utilities/class-names.ts';
|
|
8
|
+
import { getMessages, pairToolCallsWithResults, resolveMessageReasoning, resolveMessageSteps, resolveMessageSuggestions, } from '../utilities';
|
|
9
|
+
import { ChatMessage, ChatDateSeparator } from '../message';
|
|
10
|
+
import { ChatInput } from '../input';
|
|
11
|
+
import { DEFAULT_SCROLL_CONFIGURATION } from './scroll-utilities';
|
|
12
|
+
import { useChatScrollState } from './use-chat-scroll-state.svelte';
|
|
13
|
+
import { useChatUnreadState } from './use-chat-unread-state.svelte';
|
|
14
|
+
import { useChatKeyboardNav } from './use-chat-keyboard-nav.svelte';
|
|
15
|
+
import { useChatSearch } from './use-chat-search.svelte';
|
|
16
|
+
import { useIntersection } from '../../../utilities/use-intersection.svelte.ts';
|
|
17
|
+
import ChatJumpControls from './chat-jump-controls.svelte';
|
|
18
|
+
import ChatHistoryTrigger from './chat-history-trigger.svelte';
|
|
19
|
+
import ChatStatusAnnouncer from './chat-status-announcer.svelte';
|
|
20
|
+
import ChatSearchBar from './chat-search-bar.svelte';
|
|
21
|
+
import { buildChatRenderRows, buildMessagesWithDateSeparators, chatRenderRowKey, findPairedToolResultIds, findRenderRowIndexByMessageId, } from './use-chat-message-groups.svelte.ts';
|
|
22
|
+
import { ChatVirtualizer } from './use-chat-virtualizer.svelte.ts';
|
|
23
|
+
import { useChatDisclosureState } from './use-chat-disclosure-state.svelte.ts';
|
|
24
|
+
import { useChatTypingIndicator } from './use-chat-typing-indicator.svelte.ts';
|
|
25
|
+
import { useChatReadReceipts } from './use-chat-read-receipts.svelte.ts';
|
|
26
|
+
import ChatParticipantTyping from './chat-participant-typing.svelte';
|
|
27
|
+
import ChatReadReceipt from '../message/chat-read-receipt.svelte';
|
|
28
|
+
const noopAttachment = () => { };
|
|
29
|
+
let { id, conversation, atBottom = $bindable(true), unreadCount = $bindable(0), newMessageIndicatorVisible = $bindable(false), class: className, surfaceMode = 'default', density = 'comfortable', variant = 'bubble', bottomThreshold = DEFAULT_SCROLL_CONFIGURATION.bottomThreshold, jumpThreshold = DEFAULT_SCROLL_CONFIGURATION.jumpThreshold, streaming = false, streamingStatus, capabilities, virtualized = false, virtualizationEstimatedRowHeight = 88, virtualizationOverscan = 3, virtualizationInitialHeight = 640, moreHistoryAvailable = true, loadEarlierLabel = 'Load earlier messages', loadingEarlierLabel = 'Loading earlier messages', header, empty, emptyPrompts, messageActions, messageStatus, row, messagePart, viewportAttachment, typingParticipants, readReceipts, adapter, onadaptererror, onpushmessage, ontypingchange, onreadreceipt, onsubmit, onretry, onedit, onapprove, ondeny, messageReasoning, messageSteps, messageSuggestions, onsuggestionselect, onloadhistory, onstopgenerating, onjumptolatest, onscrollstatechange, onunreadindicatorchange, onexpandedchange, onattachmentadd, onattachmentremove, onattachmentfailure, ...rest } = $props();
|
|
30
|
+
// ==========================================================================
|
|
31
|
+
// Refs and Internal State
|
|
32
|
+
// ==========================================================================
|
|
33
|
+
let viewport = $state(null);
|
|
34
|
+
let containerRef = $state(null);
|
|
35
|
+
let inputRef;
|
|
36
|
+
let searchBarRef = $state(undefined);
|
|
37
|
+
let historyTriggerRef = $state(undefined);
|
|
38
|
+
// Container-level drag-and-drop state for full-window drop zone
|
|
39
|
+
let isContainerDragOver = $state(false);
|
|
40
|
+
// Streaming state: separate from the Conversation to avoid re-rendering the message list
|
|
41
|
+
let streamingContent = $state('');
|
|
42
|
+
let streamingMessageId = $state(null);
|
|
43
|
+
let streamingRowElement = $state(null);
|
|
44
|
+
// Token buffer: accumulate tokens as an array; joined and flushed once per animation frame
|
|
45
|
+
// to avoid O(n²) string work from calling join() on every push.
|
|
46
|
+
let tokenBuffer = [];
|
|
47
|
+
// rAF handle for batching token flushes and scroll throttling during streaming
|
|
48
|
+
let streamingScrollRaf;
|
|
49
|
+
// C3 — tool approval state. Keyed by tool call id. Both sets are UI-only and
|
|
50
|
+
// are never written back to the transcript. A pending tool-approval part has
|
|
51
|
+
// its call id in neither set (approved === undefined). Once the consumer or
|
|
52
|
+
// adapter resolves the approval, the id moves into one of the sets and the
|
|
53
|
+
// part re-derives to show the resolved state.
|
|
54
|
+
let approvedToolCallIds = $state(new Set());
|
|
55
|
+
let deniedToolCallIds = $state(new Set());
|
|
56
|
+
// Per-message disclosure state (reasoning blocks + tool-call cards). UI-only;
|
|
57
|
+
// never written to the transcript. Both are collapsed by default; toggling
|
|
58
|
+
// triggers a virtualizer remeasure so the row's height tracks the expanded
|
|
59
|
+
// content. Kept as separate instances so a message carrying both a reasoning
|
|
60
|
+
// block and a tool-call card discloses each independently.
|
|
61
|
+
function remeasureRow(messageId) {
|
|
62
|
+
if (!isVirtualized || !viewport)
|
|
63
|
+
return;
|
|
177
64
|
// Find the message row DOM node via the stable id and re-measure it so
|
|
178
65
|
// the virtualizer updates the row's height after the disclosure transitions.
|
|
179
|
-
const rowNode = viewport.querySelector
|
|
66
|
+
const rowNode = viewport.querySelector(`#message-${CSS.escape(messageId)}`);
|
|
180
67
|
if (rowNode) {
|
|
181
|
-
|
|
68
|
+
chatVirtualizer.measureElementNode(rowNode);
|
|
182
69
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
$effect(() => {
|
|
70
|
+
}
|
|
71
|
+
const reasoningState = useChatDisclosureState({ onRemeasureRow: remeasureRow });
|
|
72
|
+
const toolCallState = useChatDisclosureState({ onRemeasureRow: remeasureRow });
|
|
73
|
+
// Reset UI-only approval/disclosure/typing/receipt state on conversation change
|
|
74
|
+
// so stale approved/denied sets, expanded reasoning/tool-call disclosures,
|
|
75
|
+
// adapter-derived typing state, and accumulated read receipts from the previous conversation
|
|
76
|
+
// are cleared (their message ids can collide). The void reference to
|
|
77
|
+
// `conversationId` at the start of the effect body is the Svelte 5 pattern for
|
|
78
|
+
// declaring a reactive dependency on a derived without reading its value.
|
|
79
|
+
$effect(() => {
|
|
194
80
|
conversationId;
|
|
195
81
|
approvedToolCallIds = new Set();
|
|
196
82
|
deniedToolCallIds = new Set();
|
|
@@ -198,112 +84,100 @@
|
|
|
198
84
|
toolCallState.reset();
|
|
199
85
|
typingIndicatorState.reset();
|
|
200
86
|
readReceiptsState.reset();
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
// ==========================================================================
|
|
217
|
-
|
|
218
|
-
const scrollState = useChatScrollState({
|
|
87
|
+
});
|
|
88
|
+
let isLoadingHistory = $state(false);
|
|
89
|
+
let adapterHasMoreHistory = $state(undefined);
|
|
90
|
+
let historyAnnouncement = $state('');
|
|
91
|
+
let pendingHistoryScroll = $state(null);
|
|
92
|
+
let deferredAdapterHasMoreHistory = null;
|
|
93
|
+
let historyAnchorMessageId = $state(null);
|
|
94
|
+
let historyAnchorViewportOffset = $state(null);
|
|
95
|
+
let historyAnchorRestoredScrollTop = null;
|
|
96
|
+
let previousHistoryConversationId;
|
|
97
|
+
let previousHistoryAdapter;
|
|
98
|
+
// ==========================================================================
|
|
99
|
+
// Initialize Helpers
|
|
100
|
+
// ==========================================================================
|
|
101
|
+
const scrollState = useChatScrollState({
|
|
219
102
|
getBottomThreshold: () => bottomThreshold,
|
|
220
103
|
getJumpThreshold: () => jumpThreshold,
|
|
221
104
|
onScrollStateChange: handleScrollStateChange,
|
|
222
105
|
onReachBottom: () => {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
106
|
+
// The sentinel fires when the user reaches the bottom via
|
|
107
|
+
// IntersectionObserver, which does not emit onScrollStateChange.
|
|
108
|
+
// Update the bindable prop here so it stays in sync with the sentinel path.
|
|
109
|
+
atBottom = true;
|
|
110
|
+
if (unreadState.unreadCount > 0 || unreadState.newMessageIndicatorVisible) {
|
|
111
|
+
unreadState.markAllAsRead();
|
|
112
|
+
}
|
|
230
113
|
},
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
const unreadState = useChatUnreadState({
|
|
114
|
+
});
|
|
115
|
+
const unreadState = useChatUnreadState({
|
|
234
116
|
onUnreadIndicatorChange: (event) => {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
117
|
+
// Update the bindable props at the mutation site rather than via a $effect.
|
|
118
|
+
unreadCount = event.unreadCount;
|
|
119
|
+
newMessageIndicatorVisible = event.newMessageIndicatorVisible;
|
|
120
|
+
onunreadindicatorchange?.(event);
|
|
239
121
|
},
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
const keyboardNav = useChatKeyboardNav({
|
|
122
|
+
});
|
|
123
|
+
const keyboardNav = useChatKeyboardNav({
|
|
243
124
|
onJumpToLatest: handleJumpToLatest,
|
|
244
125
|
onJumpToStart: () => {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
126
|
+
if (isVirtualized) {
|
|
127
|
+
chatVirtualizer.scrollToOffset(0, { behavior: scrollState.getScrollBehavior() });
|
|
128
|
+
}
|
|
248
129
|
},
|
|
249
130
|
getScrollBehavior: scrollState.getScrollBehavior,
|
|
250
131
|
getHistoryTrigger: () => (showHistoryTrigger ? historyTriggerRef : null),
|
|
251
132
|
onVirtualMessageNavigation: (direction) => navigateVirtualMessage(direction),
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
const allowCopy = $derived(capabilities?.copy ?? true);
|
|
272
|
-
const allowEditing = $derived(capabilities?.editing ?? true);
|
|
273
|
-
const allowRetry = $derived(capabilities?.retry ?? true);
|
|
274
|
-
const toolCallPairsByCallId = $derived.by(() => {
|
|
133
|
+
});
|
|
134
|
+
const messages = $derived(getMessages(conversation));
|
|
135
|
+
// C5 — suggested replies are a per-TURN affordance shown only beneath the last
|
|
136
|
+
// message, not on every historical message that still carries the metadata.
|
|
137
|
+
const lastMessageId = $derived(messages.at(-1)?.id);
|
|
138
|
+
let previousAutoScrollMessageCount = getMessages(conversation).length;
|
|
139
|
+
// The conversation id as a stable VALUE dependency. The subscribe effect keys
|
|
140
|
+
// on this (not on `conversation.id` read inline) so a consumer passing a fresh
|
|
141
|
+
// `conversation` snapshot on every transcript update — but with the same id —
|
|
142
|
+
// does not tear down and reopen the real-time subscription each render.
|
|
143
|
+
const conversationId = $derived(conversation.id);
|
|
144
|
+
const showTypingIndicator = $derived(streaming && !streamingMessageId);
|
|
145
|
+
// Expand capabilities object with per-feature defaults.
|
|
146
|
+
const allowAttachments = $derived(capabilities?.attachments ?? true);
|
|
147
|
+
const allowSearch = $derived(capabilities?.search ?? true);
|
|
148
|
+
const allowCopy = $derived(capabilities?.copy ?? true);
|
|
149
|
+
const allowEditing = $derived(capabilities?.editing ?? true);
|
|
150
|
+
const allowRetry = $derived(capabilities?.retry ?? true);
|
|
151
|
+
const toolCallPairsByCallId = $derived.by(() => {
|
|
275
152
|
const toolCallPairs = pairToolCallsWithResults(messages);
|
|
276
|
-
const map = new Map
|
|
153
|
+
const map = new Map();
|
|
277
154
|
for (const pair of toolCallPairs) {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
155
|
+
const existing = map.get(pair.call.id);
|
|
156
|
+
if (existing) {
|
|
157
|
+
existing.push(pair);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
map.set(pair.call.id, [pair]);
|
|
161
|
+
}
|
|
284
162
|
}
|
|
285
163
|
return map;
|
|
286
|
-
|
|
287
|
-
|
|
164
|
+
});
|
|
165
|
+
const renderRows = $derived.by(() => {
|
|
288
166
|
const pairedToolResultIds = findPairedToolResultIds(messages);
|
|
289
167
|
const messagesWithDates = buildMessagesWithDateSeparators(messages, pairedToolResultIds);
|
|
290
168
|
return buildChatRenderRows(messagesWithDates, {
|
|
291
|
-
|
|
292
|
-
|
|
169
|
+
firstUnreadId: unreadState.firstUnreadId,
|
|
170
|
+
showTypingIndicator,
|
|
293
171
|
});
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
172
|
+
});
|
|
173
|
+
let hasMounted = $state(false);
|
|
174
|
+
$effect(() => {
|
|
297
175
|
hasMounted = true;
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
);
|
|
304
|
-
const staticRowsResetIdentity = $derived(messages[0]?.id ?? '');
|
|
305
|
-
|
|
306
|
-
const chatVirtualizer = new ChatVirtualizer({
|
|
176
|
+
});
|
|
177
|
+
const isVirtualized = $derived(virtualized && hasMounted && messages.length > 0);
|
|
178
|
+
const timelineResetIdentity = $derived(`${conversationId}:${isVirtualized ? 'virtualized' : 'full'}`);
|
|
179
|
+
const staticRowsResetIdentity = $derived(messages[0]?.id ?? '');
|
|
180
|
+
const chatVirtualizer = new ChatVirtualizer({
|
|
307
181
|
getScrollElement: () => viewport,
|
|
308
182
|
getCount: () => (isVirtualized ? renderRows.length : 0),
|
|
309
183
|
getItemKey: (index) => chatRenderRowKey(renderRows[index] ?? { type: 'typing' }),
|
|
@@ -311,192 +185,159 @@
|
|
|
311
185
|
getOverscan: () => virtualizationOverscan,
|
|
312
186
|
getInitialHeight: () => virtualizationInitialHeight,
|
|
313
187
|
getScrollPaddingStart: () => virtualSpacerOffsetTop(),
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
const
|
|
320
|
-
const rows: { row: ChatRenderRow; virtualItem: VirtualItem }[] = [];
|
|
188
|
+
});
|
|
189
|
+
const virtualRows = $derived.by(() => {
|
|
190
|
+
if (!isVirtualized)
|
|
191
|
+
return [];
|
|
192
|
+
const renderedIndexes = new Set();
|
|
193
|
+
const rows = [];
|
|
321
194
|
for (const virtualItem of chatVirtualizer.virtualItems) {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
195
|
+
const row = renderRows[virtualItem.index];
|
|
196
|
+
if (!row)
|
|
197
|
+
continue;
|
|
198
|
+
renderedIndexes.add(virtualItem.index);
|
|
199
|
+
rows.push({ row, virtualItem: pinHistoryAnchorVirtualItem(row, virtualItem) });
|
|
326
200
|
}
|
|
327
|
-
|
|
328
201
|
if (streamingMessageId) {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
202
|
+
const streamingIndex = findRenderRowIndexByMessageId(renderRows, streamingMessageId);
|
|
203
|
+
if (streamingIndex >= 0 && !renderedIndexes.has(streamingIndex)) {
|
|
204
|
+
const virtualItem = chatVirtualizer.getVirtualItem(streamingIndex);
|
|
205
|
+
if (!virtualItem)
|
|
206
|
+
return rows;
|
|
207
|
+
rows.push({
|
|
208
|
+
row: renderRows[streamingIndex],
|
|
209
|
+
virtualItem,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
338
212
|
}
|
|
339
|
-
|
|
340
213
|
if (historyAnchorMessageId) {
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
214
|
+
const historyAnchorIndex = findRenderRowIndexByMessageId(renderRows, historyAnchorMessageId);
|
|
215
|
+
if (historyAnchorIndex >= 0 && !renderedIndexes.has(historyAnchorIndex)) {
|
|
216
|
+
const virtualItem = chatVirtualizer.getVirtualItem(historyAnchorIndex);
|
|
217
|
+
if (!virtualItem)
|
|
218
|
+
return rows;
|
|
219
|
+
const row = renderRows[historyAnchorIndex];
|
|
220
|
+
if (row) {
|
|
221
|
+
rows.push({
|
|
222
|
+
row,
|
|
223
|
+
virtualItem: pinHistoryAnchorVirtualItem(row, virtualItem),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
351
226
|
}
|
|
352
|
-
}
|
|
353
227
|
}
|
|
354
|
-
|
|
355
228
|
rows.sort((a, b) => a.virtualItem.index - b.virtualItem.index);
|
|
356
229
|
return rows;
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
row.message.id !== historyAnchorMessageId
|
|
364
|
-
) {
|
|
365
|
-
return virtualItem;
|
|
230
|
+
});
|
|
231
|
+
function pinHistoryAnchorVirtualItem(row, virtualItem) {
|
|
232
|
+
if (historyAnchorViewportOffset === null ||
|
|
233
|
+
row.type !== 'message' ||
|
|
234
|
+
row.message.id !== historyAnchorMessageId) {
|
|
235
|
+
return virtualItem;
|
|
366
236
|
}
|
|
367
|
-
|
|
368
237
|
const scrollTop = viewport?.scrollTop ?? chatVirtualizer.scrollOffset;
|
|
369
|
-
const start = Math.max(
|
|
370
|
-
0,
|
|
371
|
-
scrollTop - chatVirtualizer.scrollPaddingStart + historyAnchorViewportOffset,
|
|
372
|
-
);
|
|
238
|
+
const start = Math.max(0, scrollTop - chatVirtualizer.scrollPaddingStart + historyAnchorViewportOffset);
|
|
373
239
|
return {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
240
|
+
...virtualItem,
|
|
241
|
+
start,
|
|
242
|
+
end: start + virtualItem.size,
|
|
377
243
|
};
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
const searchState = useChatSearch({
|
|
244
|
+
}
|
|
245
|
+
const searchState = useChatSearch({
|
|
381
246
|
getMessages: () => messages,
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
const typingIndicatorState = useChatTypingIndicator({
|
|
247
|
+
});
|
|
248
|
+
// ==========================================================================
|
|
249
|
+
// C6 — Per-participant typing indicators + read receipts (out-of-band state)
|
|
250
|
+
// ==========================================================================
|
|
251
|
+
const typingIndicatorState = useChatTypingIndicator({
|
|
389
252
|
getTypingParticipants: () => typingParticipants,
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
const readReceiptsState = useChatReadReceipts({
|
|
253
|
+
});
|
|
254
|
+
const readReceiptsState = useChatReadReceipts({
|
|
393
255
|
getReadReceipts: () => readReceipts,
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
onloadhistory !== undefined || adapter?.loadOlderMessages !== undefined,
|
|
404
|
-
);
|
|
405
|
-
const showHistoryTrigger = $derived(hasHistoryLoader && effectiveHasMoreHistory);
|
|
406
|
-
|
|
407
|
-
$effect(() => {
|
|
256
|
+
});
|
|
257
|
+
// ==========================================================================
|
|
258
|
+
// Derived Values
|
|
259
|
+
// ==========================================================================
|
|
260
|
+
const viewportAttach = $derived(viewportAttachment ?? noopAttachment);
|
|
261
|
+
const effectiveHasMoreHistory = $derived(adapterHasMoreHistory ?? moreHistoryAvailable);
|
|
262
|
+
const hasHistoryLoader = $derived(onloadhistory !== undefined || adapter?.loadOlderMessages !== undefined);
|
|
263
|
+
const showHistoryTrigger = $derived(hasHistoryLoader && effectiveHasMoreHistory);
|
|
264
|
+
$effect(() => {
|
|
408
265
|
chatVirtualizer.setScrollElement(isVirtualized ? viewport : null);
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
$effect(() => {
|
|
266
|
+
});
|
|
267
|
+
$effect(() => {
|
|
412
268
|
for (const renderRow of renderRows) {
|
|
413
|
-
|
|
269
|
+
chatRenderRowKey(renderRow);
|
|
414
270
|
}
|
|
415
271
|
chatVirtualizer.syncOptions();
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
$effect(() => {
|
|
272
|
+
});
|
|
273
|
+
$effect(() => {
|
|
419
274
|
const currentConversationId = conversationId;
|
|
420
275
|
const currentAdapter = adapter;
|
|
421
276
|
if (previousHistoryConversationId === undefined) {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
277
|
+
previousHistoryConversationId = currentConversationId;
|
|
278
|
+
previousHistoryAdapter = currentAdapter;
|
|
279
|
+
return;
|
|
425
280
|
}
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
pendingHistoryScroll = null;
|
|
433
|
-
deferredAdapterHasMoreHistory = null;
|
|
434
|
-
clearHistoryAnchor();
|
|
281
|
+
if (currentConversationId !== previousHistoryConversationId ||
|
|
282
|
+
currentAdapter !== previousHistoryAdapter) {
|
|
283
|
+
adapterHasMoreHistory = undefined;
|
|
284
|
+
pendingHistoryScroll = null;
|
|
285
|
+
deferredAdapterHasMoreHistory = null;
|
|
286
|
+
clearHistoryAnchor();
|
|
435
287
|
}
|
|
436
288
|
previousHistoryConversationId = currentConversationId;
|
|
437
289
|
previousHistoryAdapter = currentAdapter;
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
// C3 — assertive announcement for action-required tool approvals. Derived from
|
|
465
|
-
// the first pending tool-approval part in the current transcript. When a new
|
|
466
|
-
// tool-approval part appears (outcome === 'action_required' + action present),
|
|
467
|
-
// this updates and the assertive live region interrupts screen readers.
|
|
468
|
-
const toolApprovalAssertiveMessage = $derived.by(() => {
|
|
290
|
+
});
|
|
291
|
+
// A retry/edit affordance shows when EITHER a callback OR the adapter can
|
|
292
|
+
// handle it — so an adapter-only consumer (no `onretry`/`onedit`) still gets
|
|
293
|
+
// working buttons, and a callback-only consumer is unchanged.
|
|
294
|
+
const canRetry = $derived(onretry !== undefined || adapter?.retryMessage !== undefined);
|
|
295
|
+
const canEdit = $derived(onedit !== undefined || adapter?.editMessage !== undefined);
|
|
296
|
+
// Stable bottom-sentinel attachment. Wrapping useIntersection in $derived (matching
|
|
297
|
+
// load-more) means the IntersectionObserver is only torn down + recreated when
|
|
298
|
+
// `viewport` or `bottomThreshold` actually change — NOT on every chat re-render
|
|
299
|
+
// (which is frequent during streaming and would otherwise make bottom detection flicker).
|
|
300
|
+
const sentinelAttach = $derived(isVirtualized
|
|
301
|
+
? noopAttachment
|
|
302
|
+
: useIntersection(scrollState.handleSentinelEntry, {
|
|
303
|
+
root: viewport,
|
|
304
|
+
rootMargin: `0px 0px ${bottomThreshold}px 0px`,
|
|
305
|
+
}));
|
|
306
|
+
// Accessibility IDs
|
|
307
|
+
const timelineId = $derived(`${id}-timeline`);
|
|
308
|
+
const inputId = $derived(`${id}-input`);
|
|
309
|
+
const statusId = $derived(`${id}-status`);
|
|
310
|
+
// C3 — assertive announcement for action-required tool approvals. Derived from
|
|
311
|
+
// the first pending tool-approval part in the current transcript. When a new
|
|
312
|
+
// tool-approval part appears (outcome === 'action_required' + action present),
|
|
313
|
+
// this updates and the assertive live region interrupts screen readers.
|
|
314
|
+
const toolApprovalAssertiveMessage = $derived.by(() => {
|
|
469
315
|
for (const message of messages) {
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
'This tool call requires your approval before it can continue.';
|
|
480
|
-
return `Action required: ${actionMessage}`;
|
|
481
|
-
}
|
|
316
|
+
if (message.role === 'tool-result' &&
|
|
317
|
+
message.toolResult?.outcome === 'action_required' &&
|
|
318
|
+
message.toolResult.action &&
|
|
319
|
+
!approvedToolCallIds.has(message.toolResult.callId) &&
|
|
320
|
+
!deniedToolCallIds.has(message.toolResult.callId)) {
|
|
321
|
+
const actionMessage = message.toolResult.action.message ??
|
|
322
|
+
'This tool call requires your approval before it can continue.';
|
|
323
|
+
return `Action required: ${actionMessage}`;
|
|
324
|
+
}
|
|
482
325
|
}
|
|
483
326
|
return '';
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
if (!viewport) return undefined;
|
|
499
|
-
|
|
327
|
+
});
|
|
328
|
+
// ==========================================================================
|
|
329
|
+
// Scroll Anchoring via $effect.pre
|
|
330
|
+
// ==========================================================================
|
|
331
|
+
/**
|
|
332
|
+
* $effect.pre runs BEFORE DOM updates.
|
|
333
|
+
* We capture scroll state here and schedule scroll-to-bottom after DOM updates.
|
|
334
|
+
*
|
|
335
|
+
* Key pattern: Read `messages.length` synchronously to register dependency,
|
|
336
|
+
* then use `tick()` to wait for DOM updates before scrolling.
|
|
337
|
+
*/
|
|
338
|
+
$effect.pre(() => {
|
|
339
|
+
if (!viewport)
|
|
340
|
+
return undefined;
|
|
500
341
|
// Register dependency on message count
|
|
501
342
|
const currentCount = messages.length;
|
|
502
343
|
const isTranscriptAppend = currentCount > previousAutoScrollMessageCount;
|
|
@@ -505,257 +346,217 @@
|
|
|
505
346
|
// trigger one final bottom correction after the appended row is measured.
|
|
506
347
|
const currentScrollExtent = isVirtualized ? chatVirtualizer.scrollSize : viewport.scrollHeight;
|
|
507
348
|
void currentScrollExtent;
|
|
508
|
-
|
|
509
349
|
// Read atBottom without making it a dependency (prevents loops)
|
|
510
350
|
const atBottom = untrack(() => scrollState.atBottom);
|
|
511
|
-
|
|
512
351
|
// Skip if user initiated a smooth scroll (e.g., via jump button)
|
|
513
|
-
if (scrollState.isUserScrolling)
|
|
514
|
-
|
|
352
|
+
if (scrollState.isUserScrolling)
|
|
353
|
+
return undefined;
|
|
515
354
|
// Explicit history anchoring owns scroll restoration while a prepend is pending
|
|
516
355
|
// and until the user scrolls away from the restored anchor.
|
|
517
|
-
const hasActiveHistoryAnchor = untrack(
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
if (hasActiveHistoryAnchor) return undefined;
|
|
521
|
-
|
|
356
|
+
const hasActiveHistoryAnchor = untrack(() => pendingHistoryScroll !== null || historyAnchorMessageId !== null);
|
|
357
|
+
if (hasActiveHistoryAnchor)
|
|
358
|
+
return undefined;
|
|
522
359
|
if (atBottom && currentCount > 0) {
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
360
|
+
let cancelled = false;
|
|
361
|
+
const waitForBottomTarget = isTranscriptAppend ? waitForLayoutFrame() : tick();
|
|
362
|
+
void waitForBottomTarget.then(() => {
|
|
363
|
+
if (cancelled || !viewport || pendingHistoryScroll || historyAnchorMessageId !== null) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
if (isVirtualized) {
|
|
367
|
+
chatVirtualizer.scrollToOffset(chatVirtualizer.scrollSize, { behavior: 'instant' });
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
viewport?.scrollTo({ top: viewport.scrollHeight, behavior: 'instant' });
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
return () => {
|
|
374
|
+
cancelled = true;
|
|
375
|
+
};
|
|
539
376
|
}
|
|
540
|
-
|
|
541
377
|
return undefined;
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
378
|
+
});
|
|
379
|
+
$effect.pre(() => {
|
|
380
|
+
if (!viewport || !pendingHistoryScroll)
|
|
381
|
+
return;
|
|
547
382
|
const pending = pendingHistoryScroll;
|
|
548
383
|
messages.length;
|
|
549
384
|
messages[0]?.id;
|
|
550
385
|
void restorePendingHistoryScrollAfterLayout(pending);
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
async function waitForLayoutFrame(): Promise<void> {
|
|
386
|
+
});
|
|
387
|
+
async function waitForLayoutFrame() {
|
|
554
388
|
await tick();
|
|
555
|
-
if (typeof requestAnimationFrame !== 'function')
|
|
556
|
-
|
|
557
|
-
await new Promise
|
|
558
|
-
|
|
389
|
+
if (typeof requestAnimationFrame !== 'function')
|
|
390
|
+
return;
|
|
391
|
+
await new Promise((resolve) => {
|
|
392
|
+
requestAnimationFrame(() => resolve());
|
|
559
393
|
});
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
async function restorePendingHistoryScrollAfterLayout(
|
|
563
|
-
pending: PendingHistoryScroll,
|
|
564
|
-
): Promise<boolean> {
|
|
394
|
+
}
|
|
395
|
+
async function restorePendingHistoryScrollAfterLayout(pending) {
|
|
565
396
|
await waitForLayoutFrame();
|
|
566
|
-
if (pendingHistoryScroll !== pending)
|
|
397
|
+
if (pendingHistoryScroll !== pending)
|
|
398
|
+
return false;
|
|
567
399
|
return restoreHistoryScroll(pending);
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
400
|
+
}
|
|
401
|
+
function restoreHistoryScroll(pending) {
|
|
402
|
+
if (!viewport)
|
|
403
|
+
return false;
|
|
573
404
|
const currentFirstMessageId = messages[0]?.id ?? null;
|
|
574
405
|
const currentCount = messages.length;
|
|
575
|
-
if (
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
) {
|
|
579
|
-
return false;
|
|
406
|
+
if (currentCount <= pending.previousCount ||
|
|
407
|
+
currentFirstMessageId === pending.previousFirstTranscriptMessageId) {
|
|
408
|
+
return false;
|
|
580
409
|
}
|
|
581
|
-
|
|
582
410
|
const prependedCount = currentCount - pending.previousCount;
|
|
583
411
|
pendingHistoryScroll = null;
|
|
584
412
|
finishDeferredAdapterHistoryLoading();
|
|
585
413
|
if (isVirtualized) {
|
|
586
|
-
|
|
414
|
+
setHistoryAnchor(pending);
|
|
587
415
|
}
|
|
588
|
-
|
|
589
416
|
if (isVirtualized) {
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
} else {
|
|
596
|
-
clearHistoryAnchor();
|
|
597
|
-
const newTotalSize = viewport.scrollHeight;
|
|
598
|
-
const delta = newTotalSize - pending.previousScrollHeight;
|
|
599
|
-
viewport.scrollTo({
|
|
600
|
-
top: pending.previousScrollTop + delta,
|
|
601
|
-
behavior: 'instant',
|
|
602
|
-
});
|
|
417
|
+
const newTotalSize = chatVirtualizer.scrollSize;
|
|
418
|
+
const delta = newTotalSize - pending.previousTotalSize;
|
|
419
|
+
const targetScrollTop = pending.previousScrollTop + delta;
|
|
420
|
+
chatVirtualizer.scrollToOffset(targetScrollTop, { behavior: 'instant' });
|
|
421
|
+
historyAnchorRestoredScrollTop = viewport?.scrollTop ?? chatVirtualizer.scrollOffset;
|
|
603
422
|
}
|
|
604
|
-
|
|
605
|
-
|
|
423
|
+
else {
|
|
424
|
+
clearHistoryAnchor();
|
|
425
|
+
const newTotalSize = viewport.scrollHeight;
|
|
426
|
+
const delta = newTotalSize - pending.previousScrollHeight;
|
|
427
|
+
viewport.scrollTo({
|
|
428
|
+
top: pending.previousScrollTop + delta,
|
|
429
|
+
behavior: 'instant',
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
const announcement = prependedCount === 1
|
|
606
433
|
? '1 earlier message loaded.'
|
|
607
434
|
: `${prependedCount} earlier messages loaded.`;
|
|
608
435
|
historyAnnouncement = announcement;
|
|
609
436
|
setTimeout(() => {
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
437
|
+
if (historyAnnouncement === announcement) {
|
|
438
|
+
historyAnnouncement = '';
|
|
439
|
+
}
|
|
613
440
|
}, 1000);
|
|
614
441
|
void tick().then(() => {
|
|
615
|
-
|
|
442
|
+
focusAfterHistoryRestore(pending);
|
|
616
443
|
});
|
|
617
444
|
return true;
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
function setHistoryAnchor(pending: PendingHistoryScroll): void {
|
|
445
|
+
}
|
|
446
|
+
function setHistoryAnchor(pending) {
|
|
621
447
|
historyAnchorMessageId = pending.previousFirstMessageId;
|
|
622
448
|
historyAnchorViewportOffset = pending.previousFirstMessageViewportOffset;
|
|
623
449
|
historyAnchorRestoredScrollTop = null;
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
function clearHistoryAnchor(): void {
|
|
450
|
+
}
|
|
451
|
+
function clearHistoryAnchor() {
|
|
627
452
|
historyAnchorMessageId = null;
|
|
628
453
|
historyAnchorViewportOffset = null;
|
|
629
454
|
historyAnchorRestoredScrollTop = null;
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
Math.abs(scrollTop - historyAnchorRestoredScrollTop) > 2
|
|
637
|
-
) {
|
|
638
|
-
clearHistoryAnchor();
|
|
455
|
+
}
|
|
456
|
+
function clearHistoryAnchorAfterScroll(scrollTop) {
|
|
457
|
+
if (historyAnchorMessageId !== null &&
|
|
458
|
+
historyAnchorRestoredScrollTop !== null &&
|
|
459
|
+
Math.abs(scrollTop - historyAnchorRestoredScrollTop) > 2) {
|
|
460
|
+
clearHistoryAnchor();
|
|
639
461
|
}
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
function handleScrollStateChange(event: {
|
|
643
|
-
atBottom: boolean;
|
|
644
|
-
scrollTop: number;
|
|
645
|
-
scrollHeight: number;
|
|
646
|
-
}): void {
|
|
462
|
+
}
|
|
463
|
+
function handleScrollStateChange(event) {
|
|
647
464
|
clearHistoryAnchorAfterScroll(event.scrollTop);
|
|
648
|
-
|
|
649
465
|
// Update the bindable prop at the mutation site rather than via a $effect.
|
|
650
466
|
atBottom = event.atBottom;
|
|
651
|
-
|
|
652
467
|
onscrollstatechange?.(event);
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
468
|
+
}
|
|
469
|
+
function virtualSpacerOffsetTop() {
|
|
470
|
+
if (!viewport)
|
|
471
|
+
return 0;
|
|
472
|
+
const spacer = viewport.querySelector('.chat-virtual-spacer');
|
|
473
|
+
if (!spacer)
|
|
474
|
+
return 0;
|
|
661
475
|
const offsetTop = spacer.offsetTop;
|
|
662
476
|
const spacerRect = spacer.getBoundingClientRect();
|
|
663
477
|
const viewportRect = viewport.getBoundingClientRect();
|
|
664
|
-
const hasLayoutBox =
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
478
|
+
const hasLayoutBox = spacerRect.top !== 0 ||
|
|
479
|
+
spacerRect.bottom !== 0 ||
|
|
480
|
+
viewportRect.top !== 0 ||
|
|
481
|
+
viewportRect.bottom !== 0;
|
|
482
|
+
if (!hasLayoutBox)
|
|
483
|
+
return Math.max(0, offsetTop);
|
|
671
484
|
const rectOffset = spacerRect.top - viewportRect.top + viewport.scrollTop;
|
|
672
485
|
return Math.max(0, Number.isFinite(rectOffset) ? rectOffset : offsetTop);
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
486
|
+
}
|
|
487
|
+
function focusAfterHistoryRestore(pending) {
|
|
488
|
+
if (!viewport)
|
|
489
|
+
return;
|
|
678
490
|
if (showHistoryTrigger && historyTriggerRef) {
|
|
679
|
-
|
|
680
|
-
|
|
491
|
+
historyTriggerRef.focus({ preventScroll: true });
|
|
492
|
+
return;
|
|
681
493
|
}
|
|
682
|
-
|
|
683
494
|
const anchor = pending.previousFirstMessageId
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
: null;
|
|
688
|
-
const target = anchor ?? viewport.querySelector<HTMLElement>('.chat-message');
|
|
495
|
+
? viewport.querySelector(`#message-${CSS.escape(pending.previousFirstMessageId)}`)
|
|
496
|
+
: null;
|
|
497
|
+
const target = anchor ?? viewport.querySelector('.chat-message');
|
|
689
498
|
target?.focus({ preventScroll: true });
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
$effect(() => {
|
|
499
|
+
}
|
|
500
|
+
// ==========================================================================
|
|
501
|
+
// Process Messages for Unread Detection
|
|
502
|
+
// ==========================================================================
|
|
503
|
+
$effect(() => {
|
|
697
504
|
// Pass a getter function for scrollState.atBottom to avoid creating a scroll dependency.
|
|
698
505
|
// The effect should only re-run when messages change, not on every scroll.
|
|
699
506
|
unreadState.processMessages(messages, conversation.id, () => scrollState.atBottom);
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
// Without this, the rAF callback fires after destruction and mutates orphaned $state.
|
|
708
|
-
$effect(() => {
|
|
507
|
+
});
|
|
508
|
+
// ==========================================================================
|
|
509
|
+
// Streaming rAF Cleanup
|
|
510
|
+
// ==========================================================================
|
|
511
|
+
// Cancel any pending animation frame when the component unmounts during active streaming.
|
|
512
|
+
// Without this, the rAF callback fires after destruction and mutates orphaned $state.
|
|
513
|
+
$effect(() => {
|
|
709
514
|
return () => {
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
515
|
+
if (streamingScrollRaf !== undefined) {
|
|
516
|
+
cancelAnimationFrame(streamingScrollRaf);
|
|
517
|
+
streamingScrollRaf = undefined;
|
|
518
|
+
}
|
|
714
519
|
};
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
// it just isn't a dependency of the subscription effect.
|
|
735
|
-
$effect(() => {
|
|
520
|
+
});
|
|
521
|
+
// ==========================================================================
|
|
522
|
+
// Adapter Real-Time Subscription
|
|
523
|
+
// ==========================================================================
|
|
524
|
+
// When an adapter exposes `subscribe`, open a real-time subscription keyed on
|
|
525
|
+
// the conversation id and tear it down on cleanup. `$effect` never runs on the
|
|
526
|
+
// server, so no browser guard is needed. Streaming pushes drive Chat's own
|
|
527
|
+
// imperative buffer (so a push-driven stream is self-contained); transcript /
|
|
528
|
+
// peripheral pushes forward to the consumer (Chat never mutates `conversation`).
|
|
529
|
+
//
|
|
530
|
+
// The effect re-subscribes ONLY when the adapter reference or the
|
|
531
|
+
// `conversationId` VALUE changes — keying on the derived id value (not on
|
|
532
|
+
// `conversation.id` read inline) means a new `conversation` snapshot bearing
|
|
533
|
+
// the same id does not churn the subscription. The forwarding callbacks are
|
|
534
|
+
// read through `untrack` at invocation time so a consumer passing inline arrow
|
|
535
|
+
// functions (whose identity churns every render) does not tear down and reopen
|
|
536
|
+
// the transport on every render — each handler still calls the LATEST callback,
|
|
537
|
+
// it just isn't a dependency of the subscription effect.
|
|
538
|
+
$effect(() => {
|
|
736
539
|
const resolvedAdapter = adapter;
|
|
737
|
-
if (!resolvedAdapter?.subscribe)
|
|
738
|
-
|
|
540
|
+
if (!resolvedAdapter?.subscribe)
|
|
541
|
+
return;
|
|
739
542
|
const currentConversationId = conversationId;
|
|
740
|
-
const handlers
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
543
|
+
const handlers = {
|
|
544
|
+
onMessage: (message) => untrack(() => onpushmessage)?.(message),
|
|
545
|
+
onTypingChange: (isTyping) => {
|
|
546
|
+
// Drive the C6 per-participant typing indicator via the adapter path.
|
|
547
|
+
typingIndicatorState.handleAdapterTypingChange(isTyping);
|
|
548
|
+
untrack(() => ontypingchange)?.(isTyping);
|
|
549
|
+
},
|
|
550
|
+
onReadReceipt: (event) => {
|
|
551
|
+
// Accumulate the receipt into C6 read receipt state.
|
|
552
|
+
readReceiptsState.handleAdapterReadReceipt(event);
|
|
553
|
+
untrack(() => onreadreceipt)?.(event);
|
|
554
|
+
},
|
|
555
|
+
onStreamBegin: (messageId) => beginStreaming(messageId),
|
|
556
|
+
onTokenPush: (token) => pushToken(token),
|
|
557
|
+
onStreamEnd: () => endStreaming(),
|
|
755
558
|
};
|
|
756
|
-
|
|
757
559
|
const unsubscribe = resolvedAdapter.subscribe(currentConversationId, handlers);
|
|
758
|
-
|
|
759
560
|
// Teardown: close the transport (guarding a contract-violating non-function
|
|
760
561
|
// return so a bad adapter can't crash Svelte's cleanup), clear the imperative
|
|
761
562
|
// streaming buffer, AND clear the adapter-derived C6 typing/receipt state.
|
|
@@ -766,112 +567,93 @@
|
|
|
766
567
|
// participant, a pending live-region timer, and accumulated receipts alive
|
|
767
568
|
// (the conversation-change effect above only fires on an id change).
|
|
768
569
|
return () => {
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
570
|
+
if (typeof unsubscribe === 'function')
|
|
571
|
+
unsubscribe();
|
|
572
|
+
endStreaming();
|
|
573
|
+
typingIndicatorState.reset();
|
|
574
|
+
readReceiptsState.reset();
|
|
773
575
|
};
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
);
|
|
791
|
-
// ==========================================================================
|
|
792
|
-
// Actions
|
|
793
|
-
// ==========================================================================
|
|
794
|
-
|
|
795
|
-
function handleJumpToLatest(): void {
|
|
576
|
+
});
|
|
577
|
+
// ==========================================================================
|
|
578
|
+
// Create Scroll Attachment
|
|
579
|
+
// ==========================================================================
|
|
580
|
+
const scrollAttachment = scrollState.createScrollAttachment();
|
|
581
|
+
const historyAnchorScrollAttachment = $derived(historyAnchorMessageId === null || historyAnchorRestoredScrollTop === null
|
|
582
|
+
? noopAttachment
|
|
583
|
+
: (node) => {
|
|
584
|
+
const handleScroll = () => clearHistoryAnchorAfterScroll(node.scrollTop);
|
|
585
|
+
node.addEventListener('scroll', handleScroll, { passive: true });
|
|
586
|
+
return () => node.removeEventListener('scroll', handleScroll);
|
|
587
|
+
});
|
|
588
|
+
// ==========================================================================
|
|
589
|
+
// Actions
|
|
590
|
+
// ==========================================================================
|
|
591
|
+
function handleJumpToLatest() {
|
|
796
592
|
if (isVirtualized) {
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
);
|
|
807
|
-
|
|
808
|
-
});
|
|
809
|
-
return;
|
|
593
|
+
chatVirtualizer.scrollToIndex(Math.max(0, renderRows.length - 1), {
|
|
594
|
+
align: 'end',
|
|
595
|
+
behavior: scrollState.getScrollBehavior(),
|
|
596
|
+
});
|
|
597
|
+
unreadState.markAllAsRead();
|
|
598
|
+
onjumptolatest?.();
|
|
599
|
+
tick().then(() => {
|
|
600
|
+
const lastMessage = viewport?.querySelector(`.chat-message-wrapper:last-of-type .chat-message`);
|
|
601
|
+
lastMessage?.focus();
|
|
602
|
+
});
|
|
603
|
+
return;
|
|
810
604
|
}
|
|
811
|
-
|
|
812
605
|
scrollState.jumpToLatest(viewport, () => {
|
|
813
|
-
|
|
814
|
-
|
|
606
|
+
unreadState.markAllAsRead();
|
|
607
|
+
onjumptolatest?.();
|
|
815
608
|
});
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
// synchronously rather than being converted into a rejected dispatcher promise.
|
|
839
|
-
function dispatchCommand(
|
|
840
|
-
command: ChatCommand,
|
|
841
|
-
runAdapterMethod: (adapter: ChatAdapter) => Promise<void> | undefined,
|
|
842
|
-
callback: (() => void) | undefined,
|
|
843
|
-
): Promise<void> | void {
|
|
609
|
+
}
|
|
610
|
+
// ==========================================================================
|
|
611
|
+
// Command Dispatch (callbacks + optional adapter, one path)
|
|
612
|
+
// ==========================================================================
|
|
613
|
+
// One internal path for every user command so callback-driven and
|
|
614
|
+
// adapter-driven usage behave identically. The adapter method takes
|
|
615
|
+
// precedence when present (a transport owner); otherwise the callback fires.
|
|
616
|
+
//
|
|
617
|
+
// "Present" is decided by `runAdapterMethod` returning a value (not by the
|
|
618
|
+
// method's own return value): the call site returns `undefined` ONLY when the
|
|
619
|
+
// adapter lacks that optional method, and otherwise returns the method's
|
|
620
|
+
// result wrapped in `Promise.resolve(...)`. This means a synchronously-
|
|
621
|
+
// returning adapter method (one that resolves to `undefined` rather than a
|
|
622
|
+
// promise) is still treated as "handled" — the callback does NOT also fire, so
|
|
623
|
+
// there's no double-dispatch even for a type-violating sync method.
|
|
624
|
+
//
|
|
625
|
+
// The whole adapter path is wrapped so BOTH a rejected promise AND a
|
|
626
|
+
// synchronous throw from the adapter route to `onadaptererror` rather than
|
|
627
|
+
// escaping. `onadaptererror` is scoped to ADAPTER failures only — the fallback
|
|
628
|
+
// callback path is the consumer's own code, so a throw there propagates
|
|
629
|
+
// synchronously rather than being converted into a rejected dispatcher promise.
|
|
630
|
+
function dispatchCommand(command, runAdapterMethod, callback) {
|
|
844
631
|
if (adapter) {
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
632
|
+
try {
|
|
633
|
+
const run = runAdapterMethod(adapter);
|
|
634
|
+
// `undefined` means the adapter has no such method → fall through to the
|
|
635
|
+
// callback. Any other return (a promise, including one wrapping a sync
|
|
636
|
+
// `undefined` result) means the adapter handled it — never fire the callback.
|
|
637
|
+
if (run !== undefined) {
|
|
638
|
+
return run.catch((error) => {
|
|
639
|
+
onadaptererror?.({ command, error });
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
catch (error) {
|
|
852
644
|
onadaptererror?.({ command, error });
|
|
853
|
-
|
|
645
|
+
return;
|
|
854
646
|
}
|
|
855
|
-
} catch (error) {
|
|
856
|
-
onadaptererror?.({ command, error });
|
|
857
|
-
return;
|
|
858
|
-
}
|
|
859
647
|
}
|
|
860
648
|
callback?.();
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
function handleSubmit(message: MessageInput, attachments: ChatAttachment[]): void {
|
|
649
|
+
}
|
|
650
|
+
function handleSubmit(message, attachments) {
|
|
864
651
|
// Fire-and-forget the command (the dispatcher owns awaiting + error routing);
|
|
865
652
|
// scroll immediately so the round-trip latency never delays the auto-scroll.
|
|
866
653
|
// `Promise.resolve(...)` normalizes a sync-returning method to a promise so
|
|
867
654
|
// the dispatcher always treats a present method as "handled" (sendMessage is
|
|
868
655
|
// required, so it's always present here).
|
|
869
|
-
void dispatchCommand(
|
|
870
|
-
'sendMessage',
|
|
871
|
-
(resolvedAdapter) => Promise.resolve(resolvedAdapter.sendMessage(message, attachments)),
|
|
872
|
-
() => onsubmit?.({ message, attachments }),
|
|
873
|
-
);
|
|
874
|
-
|
|
656
|
+
void dispatchCommand('sendMessage', (resolvedAdapter) => Promise.resolve(resolvedAdapter.sendMessage(message, attachments)), () => onsubmit?.({ message, attachments }));
|
|
875
657
|
// Auto-scroll after sending.
|
|
876
658
|
// Also update the bindable prop so the parent binding reflects the new
|
|
877
659
|
// atBottom=true state immediately — scrollState.setAtBottom() only
|
|
@@ -880,574 +662,490 @@
|
|
|
880
662
|
scrollState.setAtBottom(true);
|
|
881
663
|
atBottom = true;
|
|
882
664
|
tick().then(() => {
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
665
|
+
if (isVirtualized) {
|
|
666
|
+
chatVirtualizer.scrollToOffset(chatVirtualizer.scrollSize, { behavior: 'instant' });
|
|
667
|
+
}
|
|
668
|
+
else {
|
|
669
|
+
viewport?.scrollTo({ top: viewport.scrollHeight, behavior: 'instant' });
|
|
670
|
+
}
|
|
888
671
|
});
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
function captureHistoryScroll(): void {
|
|
672
|
+
}
|
|
673
|
+
function captureHistoryScroll() {
|
|
892
674
|
const previousFirstTranscriptMessageId = messages[0]?.id ?? null;
|
|
893
675
|
const visibleAnchor = firstVisibleRenderedMessage();
|
|
894
676
|
const previousFirstMessageId = visibleAnchor?.messageId ?? previousFirstTranscriptMessageId;
|
|
895
677
|
const previousScrollTop = viewport?.scrollTop ?? chatVirtualizer.scrollOffset;
|
|
896
|
-
const previousFirstMessageElement =
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
viewport.getBoundingClientRect().top
|
|
903
|
-
: 0);
|
|
678
|
+
const previousFirstMessageElement = previousFirstMessageId !== null ? renderedMessageById(previousFirstMessageId) : null;
|
|
679
|
+
const previousFirstMessageViewportOffset = visibleAnchor?.viewportOffset ??
|
|
680
|
+
(previousFirstMessageElement && viewport
|
|
681
|
+
? previousFirstMessageElement.getBoundingClientRect().top -
|
|
682
|
+
viewport.getBoundingClientRect().top
|
|
683
|
+
: 0);
|
|
904
684
|
pendingHistoryScroll = {
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
685
|
+
previousFirstMessageId,
|
|
686
|
+
previousFirstTranscriptMessageId,
|
|
687
|
+
previousFirstMessageViewportOffset,
|
|
688
|
+
previousCount: messages.length,
|
|
689
|
+
previousScrollTop,
|
|
690
|
+
previousScrollHeight: viewport?.scrollHeight ?? 0,
|
|
691
|
+
previousTotalSize: chatVirtualizer.scrollSize,
|
|
912
692
|
};
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
async function settlePendingHistoryScroll(pending: PendingHistoryScroll): Promise<void> {
|
|
693
|
+
}
|
|
694
|
+
async function settlePendingHistoryScroll(pending) {
|
|
916
695
|
for (let attempt = 0; attempt < 5; attempt += 1) {
|
|
917
|
-
|
|
918
|
-
|
|
696
|
+
if (pendingHistoryScroll !== pending)
|
|
697
|
+
return;
|
|
698
|
+
if (await restorePendingHistoryScrollAfterLayout(pending))
|
|
699
|
+
return;
|
|
919
700
|
}
|
|
920
|
-
|
|
921
701
|
if (pendingHistoryScroll === pending) {
|
|
922
|
-
|
|
923
|
-
|
|
702
|
+
pendingHistoryScroll = null;
|
|
703
|
+
finishDeferredAdapterHistoryLoading();
|
|
924
704
|
}
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
705
|
+
}
|
|
706
|
+
function finishDeferredAdapterHistoryLoading() {
|
|
707
|
+
if (deferredAdapterHasMoreHistory === null)
|
|
708
|
+
return;
|
|
930
709
|
adapterHasMoreHistory = deferredAdapterHasMoreHistory;
|
|
931
710
|
deferredAdapterHasMoreHistory = null;
|
|
932
711
|
isLoadingHistory = false;
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
)
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
async function handleLoadHistory(): Promise<void> {
|
|
943
|
-
if (isLoadingHistory || !showHistoryTrigger) return;
|
|
944
|
-
|
|
712
|
+
}
|
|
713
|
+
function historyTranscriptChanged(pending) {
|
|
714
|
+
return (messages.length > pending.previousCount ||
|
|
715
|
+
messages[0]?.id !== pending.previousFirstTranscriptMessageId);
|
|
716
|
+
}
|
|
717
|
+
async function handleLoadHistory() {
|
|
718
|
+
if (isLoadingHistory || !showHistoryTrigger)
|
|
719
|
+
return;
|
|
945
720
|
isLoadingHistory = true;
|
|
946
721
|
captureHistoryScroll();
|
|
947
722
|
const pending = pendingHistoryScroll;
|
|
948
723
|
if (pending === null) {
|
|
949
|
-
isLoadingHistory = false;
|
|
950
|
-
return;
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
if (adapter?.loadOlderMessages) {
|
|
954
|
-
let nextHasMoreHistory: boolean | undefined;
|
|
955
|
-
try {
|
|
956
|
-
const result = await adapter.loadOlderMessages(conversationId);
|
|
957
|
-
nextHasMoreHistory = result.hasMore;
|
|
958
|
-
} catch (error) {
|
|
959
|
-
pendingHistoryScroll = null;
|
|
960
724
|
isLoadingHistory = false;
|
|
961
|
-
onadaptererror?.({ command: 'loadOlderMessages', error });
|
|
962
725
|
return;
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
726
|
+
}
|
|
727
|
+
if (adapter?.loadOlderMessages) {
|
|
728
|
+
let nextHasMoreHistory;
|
|
729
|
+
try {
|
|
730
|
+
const result = await adapter.loadOlderMessages(conversationId);
|
|
731
|
+
nextHasMoreHistory = result.hasMore;
|
|
732
|
+
}
|
|
733
|
+
catch (error) {
|
|
734
|
+
pendingHistoryScroll = null;
|
|
735
|
+
isLoadingHistory = false;
|
|
736
|
+
onadaptererror?.({ command: 'loadOlderMessages', error });
|
|
737
|
+
return;
|
|
738
|
+
}
|
|
739
|
+
const transcriptChanged = historyTranscriptChanged(pending);
|
|
740
|
+
if (isVirtualized && !transcriptChanged) {
|
|
741
|
+
deferredAdapterHasMoreHistory = nextHasMoreHistory ?? null;
|
|
742
|
+
await tick();
|
|
743
|
+
if (historyTranscriptChanged(pending)) {
|
|
744
|
+
await settlePendingHistoryScroll(pending);
|
|
745
|
+
}
|
|
746
|
+
else if (pendingHistoryScroll === pending) {
|
|
747
|
+
pendingHistoryScroll = null;
|
|
748
|
+
finishDeferredAdapterHistoryLoading();
|
|
749
|
+
}
|
|
750
|
+
else {
|
|
751
|
+
finishDeferredAdapterHistoryLoading();
|
|
752
|
+
}
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
if (isVirtualized || transcriptChanged) {
|
|
756
|
+
await settlePendingHistoryScroll(pending);
|
|
757
|
+
}
|
|
758
|
+
else {
|
|
759
|
+
pendingHistoryScroll = null;
|
|
976
760
|
}
|
|
761
|
+
adapterHasMoreHistory = nextHasMoreHistory;
|
|
762
|
+
isLoadingHistory = false;
|
|
977
763
|
return;
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
764
|
+
}
|
|
765
|
+
try {
|
|
766
|
+
await onloadhistory?.();
|
|
981
767
|
await settlePendingHistoryScroll(pending);
|
|
982
|
-
|
|
768
|
+
}
|
|
769
|
+
catch (error) {
|
|
983
770
|
pendingHistoryScroll = null;
|
|
984
|
-
|
|
985
|
-
adapterHasMoreHistory = nextHasMoreHistory;
|
|
986
|
-
isLoadingHistory = false;
|
|
987
|
-
return;
|
|
771
|
+
throw error;
|
|
988
772
|
}
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
await onloadhistory?.();
|
|
992
|
-
await settlePendingHistoryScroll(pending);
|
|
993
|
-
} catch (error) {
|
|
994
|
-
pendingHistoryScroll = null;
|
|
995
|
-
throw error;
|
|
996
|
-
} finally {
|
|
997
|
-
isLoadingHistory = false;
|
|
773
|
+
finally {
|
|
774
|
+
isLoadingHistory = false;
|
|
998
775
|
}
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
(resolvedAdapter) =>
|
|
1018
|
-
resolvedAdapter.editMessage
|
|
1019
|
-
? Promise.resolve(resolvedAdapter.editMessage(event))
|
|
1020
|
-
: undefined,
|
|
1021
|
-
() => onedit?.(event),
|
|
1022
|
-
);
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
// C5 — suggestion selection handler. Calls the consumer callback then
|
|
1026
|
-
// moves focus to the composer so keyboard users are not left stranded on a
|
|
1027
|
-
// chip button that gets removed from the DOM when the suggestion set clears.
|
|
1028
|
-
function handleSuggestionSelect(label: string): void {
|
|
776
|
+
}
|
|
777
|
+
function handleRetry(messageId) {
|
|
778
|
+
void dispatchCommand('retryMessage',
|
|
779
|
+
// Return `undefined` ONLY when the optional method is absent; otherwise
|
|
780
|
+
// wrap its result so a present-but-sync method still counts as handled.
|
|
781
|
+
(resolvedAdapter) => resolvedAdapter.retryMessage
|
|
782
|
+
? Promise.resolve(resolvedAdapter.retryMessage(messageId))
|
|
783
|
+
: undefined, () => onretry?.(messageId));
|
|
784
|
+
}
|
|
785
|
+
function handleEdit(event) {
|
|
786
|
+
void dispatchCommand('editMessage', (resolvedAdapter) => resolvedAdapter.editMessage
|
|
787
|
+
? Promise.resolve(resolvedAdapter.editMessage(event))
|
|
788
|
+
: undefined, () => onedit?.(event));
|
|
789
|
+
}
|
|
790
|
+
// C5 — suggestion selection handler. Calls the consumer callback then
|
|
791
|
+
// moves focus to the composer so keyboard users are not left stranded on a
|
|
792
|
+
// chip button that gets removed from the DOM when the suggestion set clears.
|
|
793
|
+
function handleSuggestionSelect(label) {
|
|
1029
794
|
onsuggestionselect?.(label);
|
|
1030
795
|
inputRef?.focus();
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
toolCallId
|
|
1052
|
-
|
|
1053
|
-
canHandle: boolean,
|
|
1054
|
-
commit: (id: string) => void,
|
|
1055
|
-
rollback: (id: string) => void,
|
|
1056
|
-
runAdapter: (adapter: ChatAdapter) => Promise<void> | undefined,
|
|
1057
|
-
callback: (() => void) | undefined,
|
|
1058
|
-
): void {
|
|
1059
|
-
if (!canHandle) return;
|
|
1060
|
-
if (approvedToolCallIds.has(toolCallId) || deniedToolCallIds.has(toolCallId)) return;
|
|
796
|
+
}
|
|
797
|
+
// C3 — an approve/deny affordance only resolves when SOMETHING can handle it —
|
|
798
|
+
// the adapter command OR the consumer callback. `canApprove`/`canDeny` gate
|
|
799
|
+
// both the button-enabled state (passed to ToolApprovalPart) and the resolve
|
|
800
|
+
// guard, so a consumer that wires neither path gets disabled buttons rather
|
|
801
|
+
// than a click that commits UI-only state to nowhere (matches canRetry/canEdit).
|
|
802
|
+
const canApprove = $derived(onapprove !== undefined || adapter?.approveToolCall !== undefined);
|
|
803
|
+
const canDeny = $derived(ondeny !== undefined || adapter?.denyToolCall !== undefined);
|
|
804
|
+
// C3 — tool approval handlers. The resolution is recorded optimistically in the
|
|
805
|
+
// UI-only id sets for immediate feedback, then the adapter command (if present)
|
|
806
|
+
// runs and, on SUCCESS, the consumer callback fires (adapter-first-then-callback
|
|
807
|
+
// contract). Guard double-resolution: if the call id is already in either set,
|
|
808
|
+
// skip so a second tap/Escape cannot flip a resolved state. If the ADAPTER
|
|
809
|
+
// command REJECTS (or throws), the optimistic resolution is rolled back so the
|
|
810
|
+
// prompt returns to pending instead of being stuck "approved"/"denied" on a
|
|
811
|
+
// transport failure — the error routes to onadaptererror and the callback does
|
|
812
|
+
// NOT fire. With no adapter method, the callback fires synchronously.
|
|
813
|
+
function resolveToolApproval(toolCallId, command, canHandle, commit, rollback, runAdapter, callback) {
|
|
814
|
+
if (!canHandle)
|
|
815
|
+
return;
|
|
816
|
+
if (approvedToolCallIds.has(toolCallId) || deniedToolCallIds.has(toolCallId))
|
|
817
|
+
return;
|
|
1061
818
|
commit(toolCallId);
|
|
1062
|
-
|
|
1063
819
|
if (adapter) {
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
onadaptererror?.({ command, error });
|
|
1070
|
-
return;
|
|
1071
|
-
}
|
|
1072
|
-
if (run !== undefined) {
|
|
1073
|
-
void run.then(
|
|
1074
|
-
() => callback?.(),
|
|
1075
|
-
(error: unknown) => {
|
|
820
|
+
let run;
|
|
821
|
+
try {
|
|
822
|
+
run = runAdapter(adapter);
|
|
823
|
+
}
|
|
824
|
+
catch (error) {
|
|
1076
825
|
rollback(toolCallId);
|
|
1077
826
|
onadaptererror?.({ command, error });
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
829
|
+
if (run !== undefined) {
|
|
830
|
+
void run.then(() => callback?.(), (error) => {
|
|
831
|
+
rollback(toolCallId);
|
|
832
|
+
onadaptererror?.({ command, error });
|
|
833
|
+
});
|
|
834
|
+
return;
|
|
835
|
+
}
|
|
1082
836
|
}
|
|
1083
837
|
callback?.();
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
: undefined,
|
|
1097
|
-
() => onapprove?.(toolCallId),
|
|
1098
|
-
);
|
|
1099
|
-
}
|
|
1100
|
-
|
|
1101
|
-
function handleDeny(toolCallId: string): void {
|
|
1102
|
-
resolveToolApproval(
|
|
1103
|
-
toolCallId,
|
|
1104
|
-
'denyToolCall',
|
|
1105
|
-
canDeny,
|
|
1106
|
-
(id) => (deniedToolCallIds = new Set([...deniedToolCallIds, id])),
|
|
1107
|
-
(id) => (deniedToolCallIds = removeFromSet(deniedToolCallIds, id)),
|
|
1108
|
-
(resolvedAdapter) =>
|
|
1109
|
-
resolvedAdapter.denyToolCall
|
|
1110
|
-
? Promise.resolve(resolvedAdapter.denyToolCall(toolCallId))
|
|
1111
|
-
: undefined,
|
|
1112
|
-
() => ondeny?.(toolCallId),
|
|
1113
|
-
);
|
|
1114
|
-
}
|
|
1115
|
-
|
|
1116
|
-
function removeFromSet(set: Set<string>, value: string): Set<string> {
|
|
838
|
+
}
|
|
839
|
+
function handleApprove(toolCallId) {
|
|
840
|
+
resolveToolApproval(toolCallId, 'approveToolCall', canApprove, (id) => (approvedToolCallIds = new Set([...approvedToolCallIds, id])), (id) => (approvedToolCallIds = removeFromSet(approvedToolCallIds, id)), (resolvedAdapter) => resolvedAdapter.approveToolCall
|
|
841
|
+
? Promise.resolve(resolvedAdapter.approveToolCall(toolCallId))
|
|
842
|
+
: undefined, () => onapprove?.(toolCallId));
|
|
843
|
+
}
|
|
844
|
+
function handleDeny(toolCallId) {
|
|
845
|
+
resolveToolApproval(toolCallId, 'denyToolCall', canDeny, (id) => (deniedToolCallIds = new Set([...deniedToolCallIds, id])), (id) => (deniedToolCallIds = removeFromSet(deniedToolCallIds, id)), (resolvedAdapter) => resolvedAdapter.denyToolCall
|
|
846
|
+
? Promise.resolve(resolvedAdapter.denyToolCall(toolCallId))
|
|
847
|
+
: undefined, () => ondeny?.(toolCallId));
|
|
848
|
+
}
|
|
849
|
+
function removeFromSet(set, value) {
|
|
1117
850
|
const next = new Set(set);
|
|
1118
851
|
next.delete(value);
|
|
1119
852
|
return next;
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
function handleStopGenerating(): void {
|
|
853
|
+
}
|
|
854
|
+
function handleStopGenerating() {
|
|
1123
855
|
// Find the streaming message (last assistant message)
|
|
1124
856
|
// Using backwards loop instead of findLast() for broader browser compatibility
|
|
1125
|
-
let streamingMessage
|
|
857
|
+
let streamingMessage;
|
|
1126
858
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
859
|
+
const message = messages[i];
|
|
860
|
+
if (message?.role === 'assistant') {
|
|
861
|
+
streamingMessage = message;
|
|
862
|
+
break;
|
|
863
|
+
}
|
|
1132
864
|
}
|
|
1133
865
|
if (streamingMessage) {
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
'stopGenerating',
|
|
1138
|
-
(resolvedAdapter) =>
|
|
1139
|
-
resolvedAdapter.stopGenerating
|
|
866
|
+
// Local name avoids shadowing the module-level `streamingMessageId` $state.
|
|
867
|
+
const targetMessageId = streamingMessage.id;
|
|
868
|
+
void dispatchCommand('stopGenerating', (resolvedAdapter) => resolvedAdapter.stopGenerating
|
|
1140
869
|
? Promise.resolve(resolvedAdapter.stopGenerating(targetMessageId))
|
|
1141
|
-
: undefined,
|
|
1142
|
-
() => onstopgenerating?.({ messageId: targetMessageId }),
|
|
1143
|
-
);
|
|
870
|
+
: undefined, () => onstopgenerating?.({ messageId: targetMessageId }));
|
|
1144
871
|
}
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
function handlePromptClick(prompt: string): void {
|
|
872
|
+
}
|
|
873
|
+
function handlePromptClick(prompt) {
|
|
1148
874
|
// Filter to only ready attachments — pending ones have not yet resolved their
|
|
1149
875
|
// textContent, so forwarding them would produce an inconsistent payload compared
|
|
1150
876
|
// to the regular send-button flow which also filters on 'ready'.
|
|
1151
|
-
const currentAttachments = (inputRef?.getAttachments() ?? []).filter(
|
|
1152
|
-
(a) => a.status === 'ready',
|
|
1153
|
-
);
|
|
877
|
+
const currentAttachments = (inputRef?.getAttachments() ?? []).filter((a) => a.status === 'ready');
|
|
1154
878
|
handleSubmit({ role: 'user', content: prompt }, currentAttachments);
|
|
1155
879
|
inputRef?.clear();
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
function handleKeyDown(event: KeyboardEvent): void {
|
|
880
|
+
}
|
|
881
|
+
function handleKeyDown(event) {
|
|
1159
882
|
// Intercept Ctrl+F / Cmd+F to open in-app search instead of browser search.
|
|
1160
883
|
// If the search bar is already open, refocus its input rather than being a no-op.
|
|
1161
884
|
if (allowSearch && (event.ctrlKey || event.metaKey) && event.key === 'f') {
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
885
|
+
event.preventDefault();
|
|
886
|
+
if (searchState.isOpen) {
|
|
887
|
+
searchBarRef?.focusInput();
|
|
888
|
+
}
|
|
889
|
+
else {
|
|
890
|
+
searchState.open();
|
|
891
|
+
}
|
|
892
|
+
return;
|
|
1169
893
|
}
|
|
1170
|
-
|
|
1171
894
|
// Let the chat keyboard nav helper handle all other shortcuts.
|
|
1172
895
|
// The keyboard nav only handles Home/End/PageUp/PageDown/Arrow keys, so
|
|
1173
896
|
// Enter and Escape pass through without conflict when the search bar is open.
|
|
1174
897
|
// The search bar's own onkeydown handles Enter/Escape directly on its input.
|
|
1175
898
|
keyboardNav.handleKeyDown(event, viewport);
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
899
|
+
}
|
|
900
|
+
function messageIdFromElement(element) {
|
|
901
|
+
if (!element.id.startsWith('message-'))
|
|
902
|
+
return null;
|
|
1180
903
|
return element.id.slice('message-'.length);
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
if (!viewport) return null;
|
|
1189
|
-
|
|
904
|
+
}
|
|
905
|
+
function renderedMessageById(messageId) {
|
|
906
|
+
return viewport?.querySelector(`#message-${CSS.escape(messageId)}`) ?? null;
|
|
907
|
+
}
|
|
908
|
+
function firstVisibleRenderedMessage() {
|
|
909
|
+
if (!viewport)
|
|
910
|
+
return null;
|
|
1190
911
|
const viewportRect = viewport.getBoundingClientRect();
|
|
1191
|
-
for (const message of viewport.querySelectorAll
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
912
|
+
for (const message of viewport.querySelectorAll('.chat-message')) {
|
|
913
|
+
const messageId = messageIdFromElement(message);
|
|
914
|
+
if (!messageId)
|
|
915
|
+
continue;
|
|
916
|
+
const rect = message.getBoundingClientRect();
|
|
917
|
+
if (rect.bottom <= viewportRect.top || rect.top >= viewportRect.bottom)
|
|
918
|
+
continue;
|
|
919
|
+
return {
|
|
920
|
+
messageId,
|
|
921
|
+
viewportOffset: rect.top - viewportRect.top,
|
|
922
|
+
};
|
|
1202
923
|
}
|
|
1203
|
-
|
|
1204
924
|
return null;
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
async function focusVirtualMessage(messageId: string): Promise<void> {
|
|
925
|
+
}
|
|
926
|
+
async function focusVirtualMessage(messageId) {
|
|
1208
927
|
const existing = renderedMessageById(messageId);
|
|
1209
928
|
if (existing) {
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
929
|
+
existing.focus();
|
|
930
|
+
existing.scrollIntoView({ behavior: scrollState.getScrollBehavior(), block: 'nearest' });
|
|
931
|
+
return;
|
|
1213
932
|
}
|
|
1214
|
-
|
|
1215
933
|
const targetIndex = findRenderRowIndexByMessageId(renderRows, messageId);
|
|
1216
|
-
if (targetIndex < 0)
|
|
1217
|
-
|
|
934
|
+
if (targetIndex < 0)
|
|
935
|
+
return;
|
|
1218
936
|
chatVirtualizer.scrollToIndex(targetIndex, {
|
|
1219
|
-
|
|
1220
|
-
|
|
937
|
+
align: 'auto',
|
|
938
|
+
behavior: scrollState.getScrollBehavior(),
|
|
1221
939
|
});
|
|
1222
940
|
await tick();
|
|
1223
941
|
const target = renderedMessageById(messageId);
|
|
1224
942
|
target?.focus();
|
|
1225
943
|
target?.scrollIntoView({ behavior: scrollState.getScrollBehavior(), block: 'nearest' });
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
const activeElement =
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
944
|
+
}
|
|
945
|
+
function navigateVirtualMessage(direction) {
|
|
946
|
+
if (!isVirtualized || !viewport)
|
|
947
|
+
return false;
|
|
948
|
+
const activeElement = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
949
|
+
if (!activeElement?.classList.contains('chat-message'))
|
|
950
|
+
return false;
|
|
1234
951
|
const currentMessageId = messageIdFromElement(activeElement);
|
|
1235
|
-
if (!currentMessageId)
|
|
1236
|
-
|
|
952
|
+
if (!currentMessageId)
|
|
953
|
+
return false;
|
|
1237
954
|
const currentIndex = findRenderRowIndexByMessageId(renderRows, currentMessageId);
|
|
1238
|
-
if (currentIndex < 0)
|
|
1239
|
-
|
|
955
|
+
if (currentIndex < 0)
|
|
956
|
+
return false;
|
|
1240
957
|
const step = direction === 'next' ? 1 : -1;
|
|
1241
|
-
for (
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
if (targetRow?.type !== 'message') continue;
|
|
1248
|
-
|
|
1249
|
-
void focusVirtualMessage(targetRow.message.id);
|
|
1250
|
-
return true;
|
|
958
|
+
for (let targetIndex = currentIndex + step; targetIndex >= 0 && targetIndex < renderRows.length; targetIndex += step) {
|
|
959
|
+
const targetRow = renderRows[targetIndex];
|
|
960
|
+
if (targetRow?.type !== 'message')
|
|
961
|
+
continue;
|
|
962
|
+
void focusVirtualMessage(targetRow.message.id);
|
|
963
|
+
return true;
|
|
1251
964
|
}
|
|
1252
|
-
|
|
1253
965
|
return true;
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
$effect(() => {
|
|
966
|
+
}
|
|
967
|
+
// Scroll to the currently matched message when the current match changes
|
|
968
|
+
$effect(() => {
|
|
1258
969
|
const match = searchState.currentMatch;
|
|
1259
|
-
if (!match || !viewport)
|
|
1260
|
-
|
|
970
|
+
if (!match || !viewport)
|
|
971
|
+
return;
|
|
1261
972
|
void scrollCurrentSearchMatch(match.message.id);
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
973
|
+
});
|
|
974
|
+
async function scrollCurrentSearchMatch(messageId) {
|
|
975
|
+
if (!viewport)
|
|
976
|
+
return;
|
|
1267
977
|
if (isVirtualized) {
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
978
|
+
const targetIndex = findRenderRowIndexByMessageId(renderRows, messageId);
|
|
979
|
+
if (targetIndex >= 0) {
|
|
980
|
+
chatVirtualizer.scrollToIndex(targetIndex, { align: 'center', behavior: 'auto' });
|
|
981
|
+
await tick();
|
|
982
|
+
}
|
|
1273
983
|
}
|
|
1274
|
-
|
|
1275
|
-
const messageElement = viewport.querySelector<HTMLElement>(`#message-${CSS.escape(messageId)}`);
|
|
984
|
+
const messageElement = viewport.querySelector(`#message-${CSS.escape(messageId)}`);
|
|
1276
985
|
if (messageElement) {
|
|
1277
|
-
|
|
986
|
+
messageElement.scrollIntoView({ behavior: 'auto', block: 'nearest' });
|
|
1278
987
|
}
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
function handleContainerDrop(event: DragEvent): void {
|
|
988
|
+
}
|
|
989
|
+
// ==========================================================================
|
|
990
|
+
// Container-Level Drag and Drop
|
|
991
|
+
// ==========================================================================
|
|
992
|
+
function handleContainerDrop(event) {
|
|
1286
993
|
// Only intercept file drops — text/URL drops should not have their
|
|
1287
994
|
// default behavior suppressed, matching the dragover guard above.
|
|
1288
|
-
if (!event.dataTransfer?.types.includes('Files'))
|
|
995
|
+
if (!event.dataTransfer?.types.includes('Files'))
|
|
996
|
+
return;
|
|
1289
997
|
isContainerDragOver = false;
|
|
1290
|
-
|
|
1291
|
-
|
|
998
|
+
if (!allowAttachments)
|
|
999
|
+
return;
|
|
1292
1000
|
event.preventDefault();
|
|
1293
|
-
|
|
1294
1001
|
const files = event.dataTransfer.files;
|
|
1295
1002
|
if (files.length > 0) {
|
|
1296
|
-
|
|
1003
|
+
inputRef?.addFiles(Array.from(files));
|
|
1297
1004
|
}
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
function handleContainerDragOver(event: DragEvent): void {
|
|
1005
|
+
}
|
|
1006
|
+
function handleContainerDragOver(event) {
|
|
1301
1007
|
// Only intercept file drags — text/URL drags should not show the file drop overlay
|
|
1302
1008
|
// or have their default behavior suppressed.
|
|
1303
|
-
if (!event.dataTransfer?.types.includes('Files'))
|
|
1304
|
-
|
|
1009
|
+
if (!event.dataTransfer?.types.includes('Files'))
|
|
1010
|
+
return;
|
|
1011
|
+
if (!allowAttachments)
|
|
1012
|
+
return;
|
|
1305
1013
|
event.preventDefault();
|
|
1306
1014
|
event.dataTransfer.dropEffect = 'copy';
|
|
1307
1015
|
isContainerDragOver = true;
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
function handleContainerDragLeave(event: DragEvent): void {
|
|
1016
|
+
}
|
|
1017
|
+
function handleContainerDragLeave(event) {
|
|
1311
1018
|
// Only clear if leaving the container entirely (not entering a child)
|
|
1312
|
-
const container = event.currentTarget
|
|
1313
|
-
if (!container.contains(event.relatedTarget
|
|
1314
|
-
isContainerDragOver = false;
|
|
1315
|
-
}
|
|
1316
|
-
}
|
|
1317
|
-
|
|
1318
|
-
// Capture-phase drop listener: resets the overlay even when a child (e.g. ChatInput)
|
|
1319
|
-
// calls stopPropagation() on the drop event, which prevents the bubbling ondrop handler
|
|
1320
|
-
// on this container from ever firing.
|
|
1321
|
-
$effect(() => {
|
|
1322
|
-
if (!containerRef) return;
|
|
1323
|
-
function resetDragOver(event: DragEvent): void {
|
|
1324
|
-
if (event.dataTransfer?.types.includes('Files')) {
|
|
1019
|
+
const container = event.currentTarget;
|
|
1020
|
+
if (!container.contains(event.relatedTarget)) {
|
|
1325
1021
|
isContainerDragOver = false;
|
|
1326
|
-
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
// Capture-phase drop listener: resets the overlay even when a child (e.g. ChatInput)
|
|
1025
|
+
// calls stopPropagation() on the drop event, which prevents the bubbling ondrop handler
|
|
1026
|
+
// on this container from ever firing.
|
|
1027
|
+
$effect(() => {
|
|
1028
|
+
if (!containerRef)
|
|
1029
|
+
return;
|
|
1030
|
+
function resetDragOver(event) {
|
|
1031
|
+
if (event.dataTransfer?.types.includes('Files')) {
|
|
1032
|
+
isContainerDragOver = false;
|
|
1033
|
+
}
|
|
1327
1034
|
}
|
|
1328
1035
|
containerRef.addEventListener('drop', resetDragOver, { capture: true });
|
|
1329
1036
|
return () => {
|
|
1330
|
-
|
|
1037
|
+
containerRef?.removeEventListener('drop', resetDragOver, { capture: true });
|
|
1331
1038
|
};
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
export function scrollToBottom(): void {
|
|
1039
|
+
});
|
|
1040
|
+
// ==========================================================================
|
|
1041
|
+
// Imperative API
|
|
1042
|
+
// ==========================================================================
|
|
1043
|
+
export function scrollToBottom() {
|
|
1339
1044
|
if (isVirtualized) {
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
} else {
|
|
1344
|
-
scrollState.scrollToBottom(viewport);
|
|
1045
|
+
chatVirtualizer.scrollToOffset(chatVirtualizer.scrollSize, {
|
|
1046
|
+
behavior: scrollState.getScrollBehavior(),
|
|
1047
|
+
});
|
|
1345
1048
|
}
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1049
|
+
else {
|
|
1050
|
+
scrollState.scrollToBottom(viewport);
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
export function scrollToTop() {
|
|
1349
1054
|
if (isVirtualized) {
|
|
1350
|
-
|
|
1351
|
-
} else {
|
|
1352
|
-
scrollState.scrollToTop(viewport);
|
|
1055
|
+
chatVirtualizer.scrollToOffset(0, { behavior: scrollState.getScrollBehavior() });
|
|
1353
1056
|
}
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1057
|
+
else {
|
|
1058
|
+
scrollState.scrollToTop(viewport);
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
export function focusInput() {
|
|
1357
1062
|
inputRef?.focus();
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
export function beginStreaming(messageId: string): void {
|
|
1063
|
+
}
|
|
1064
|
+
/**
|
|
1065
|
+
* Begin streaming content for a specific message.
|
|
1066
|
+
* The message should already exist in the conversation.
|
|
1067
|
+
* Replaces the typing indicator dots with actual content.
|
|
1068
|
+
* Cancels any pending rAF from a prior pushToken call so a stale flush does
|
|
1069
|
+
* not overwrite the fresh stream if beginStreaming is called without a
|
|
1070
|
+
* preceding endStreaming.
|
|
1071
|
+
*/
|
|
1072
|
+
export function beginStreaming(messageId) {
|
|
1369
1073
|
if (streamingScrollRaf !== undefined) {
|
|
1370
|
-
|
|
1371
|
-
|
|
1074
|
+
cancelAnimationFrame(streamingScrollRaf);
|
|
1075
|
+
streamingScrollRaf = undefined;
|
|
1372
1076
|
}
|
|
1373
1077
|
streamingMessageId = messageId;
|
|
1374
1078
|
streamingContent = '';
|
|
1375
1079
|
tokenBuffer = [];
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
export function pushToken(token: string): void {
|
|
1080
|
+
}
|
|
1081
|
+
/**
|
|
1082
|
+
* Append a token to the streaming content buffer.
|
|
1083
|
+
* Tokens are accumulated in an array and flushed (joined once) per animation frame,
|
|
1084
|
+
* avoiding O(n²) work from calling join() on every individual token push.
|
|
1085
|
+
* Scroll updates are batched in the same frame to avoid excessive layout work.
|
|
1086
|
+
*/
|
|
1087
|
+
export function pushToken(token) {
|
|
1385
1088
|
tokenBuffer.push(token);
|
|
1386
|
-
|
|
1387
1089
|
// Batch the join + scroll update to once per animation frame.
|
|
1388
1090
|
// Without this, join() is O(n) per push → O(n²) total across the stream.
|
|
1389
1091
|
if (streamingScrollRaf === undefined) {
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
if (streamingRowElement) {
|
|
1395
|
-
tick().then(() => {
|
|
1092
|
+
streamingScrollRaf = requestAnimationFrame(() => {
|
|
1093
|
+
streamingScrollRaf = undefined;
|
|
1094
|
+
// Flush: join the entire buffer once per frame
|
|
1095
|
+
streamingContent = tokenBuffer.join('');
|
|
1396
1096
|
if (streamingRowElement) {
|
|
1397
|
-
|
|
1097
|
+
tick().then(() => {
|
|
1098
|
+
if (streamingRowElement) {
|
|
1099
|
+
chatVirtualizer.measureElementNode(streamingRowElement);
|
|
1100
|
+
}
|
|
1101
|
+
});
|
|
1398
1102
|
}
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
}
|
|
1409
|
-
});
|
|
1103
|
+
// Auto-scroll if at bottom
|
|
1104
|
+
if (scrollState.atBottom && viewport) {
|
|
1105
|
+
if (isVirtualized) {
|
|
1106
|
+
chatVirtualizer.scrollToOffset(chatVirtualizer.scrollSize, { behavior: 'instant' });
|
|
1107
|
+
}
|
|
1108
|
+
else {
|
|
1109
|
+
viewport.scrollTo({ top: viewport.scrollHeight, behavior: 'instant' });
|
|
1110
|
+
}
|
|
1111
|
+
}
|
|
1112
|
+
});
|
|
1410
1113
|
}
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
export function endStreaming(): void {
|
|
1114
|
+
}
|
|
1115
|
+
/**
|
|
1116
|
+
* End streaming for the current message.
|
|
1117
|
+
* The message's final content should already be committed to the Conversation.
|
|
1118
|
+
* Cancels any pending rAF flush so the stale buffer is not written after endStreaming.
|
|
1119
|
+
*/
|
|
1120
|
+
export function endStreaming() {
|
|
1419
1121
|
if (streamingScrollRaf !== undefined) {
|
|
1420
|
-
|
|
1421
|
-
|
|
1122
|
+
cancelAnimationFrame(streamingScrollRaf);
|
|
1123
|
+
streamingScrollRaf = undefined;
|
|
1422
1124
|
}
|
|
1423
1125
|
streamingMessageId = null;
|
|
1424
1126
|
streamingContent = '';
|
|
1425
1127
|
tokenBuffer = [];
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
function virtualizedSpacerStyle(): string {
|
|
1128
|
+
}
|
|
1129
|
+
function virtualizedSpacerStyle() {
|
|
1429
1130
|
return `height: ${chatVirtualizer.totalSize}px; position: relative; width: 100%;`;
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
function virtualizedRowStyle(virtualItem: VirtualItem): string {
|
|
1131
|
+
}
|
|
1132
|
+
function virtualizedRowStyle(virtualItem) {
|
|
1433
1133
|
return `position: absolute; inset-inline: 0; top: 0; transform: translateY(${virtualItem.start}px);`;
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
function virtualRowAttachment(row: ChatRenderRow): Attachment<HTMLElement> {
|
|
1134
|
+
}
|
|
1135
|
+
function virtualRowAttachment(row) {
|
|
1437
1136
|
return (node) => {
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
}
|
|
1442
|
-
|
|
1443
|
-
return () => {
|
|
1444
|
-
detachMeasurement?.();
|
|
1445
|
-
if (streamingRowElement === node) {
|
|
1446
|
-
streamingRowElement = null;
|
|
1137
|
+
const detachMeasurement = chatVirtualizer.measureElement(node);
|
|
1138
|
+
if (row.type === 'message' && row.message.id === streamingMessageId) {
|
|
1139
|
+
streamingRowElement = node;
|
|
1447
1140
|
}
|
|
1448
|
-
|
|
1141
|
+
return () => {
|
|
1142
|
+
detachMeasurement?.();
|
|
1143
|
+
if (streamingRowElement === node) {
|
|
1144
|
+
streamingRowElement = null;
|
|
1145
|
+
}
|
|
1146
|
+
};
|
|
1449
1147
|
};
|
|
1450
|
-
|
|
1148
|
+
}
|
|
1451
1149
|
</script>
|
|
1452
1150
|
|
|
1453
1151
|
<div
|