@lostgradient/cinder 0.6.0 → 0.8.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 +30 -0
- package/README.md +6 -1
- package/components.json +3 -3
- package/dist/_internal/strict-stable-context.d.ts +9 -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/index.js +29 -28
- package/dist/components/alert/index.js +19 -18
- package/dist/components/alert-dialog/index.js +62 -62
- package/dist/components/approval-card/index.js +342 -342
- package/dist/components/area-chart/index.js +65 -67
- package/dist/components/aspect-ratio/index.js +12 -11
- package/dist/components/autocomplete/index.js +60 -59
- package/dist/components/avatar/index.js +31 -29
- package/dist/components/avatar-group/index.js +69 -65
- 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.js +16 -15
- package/dist/components/bento-grid/index.js +30 -28
- 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/index.js +23 -24
- package/dist/components/capability-gate/index.js +33 -32
- package/dist/components/card/index.js +32 -31
- package/dist/components/carousel/index.js +40 -44
- package/dist/components/chat/chat.schema.js +6 -1
- package/dist/components/chat/chat.svelte.d.ts +2 -0
- package/dist/components/chat/chat.types.d.ts +6 -0
- package/dist/components/chat/container/chat.svelte.d.ts +2 -0
- package/dist/components/chat/index.d.ts +1 -1
- package/dist/components/chat/index.js +4479 -7891
- package/dist/components/chat/input/chat-input.svelte.d.ts +3 -0
- package/dist/components/chat-conversation-header/index.js +123 -120
- package/dist/components/chat-conversation-list/index.js +28 -28
- package/dist/components/checkbox/index.js +29 -28
- 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/index.js +24 -24
- 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 +34 -33
- package/dist/components/command-item/index.js +9 -9
- package/dist/components/command-menu/index.js +14 -13
- 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 +84 -77
- package/dist/components/context-menu-trigger/index.js +17 -16
- package/dist/components/copy-button/index.js +15 -14
- 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 +133 -130
- package/dist/components/date-picker/index.js +72 -69
- package/dist/components/date-range-field/index.js +100 -96
- 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 +263 -246
- package/dist/components/divider/index.js +19 -19
- package/dist/components/drawer/index.js +43 -41
- package/dist/components/dropdown/index.js +100 -92
- 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 +23 -21
- 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 +108 -107
- package/dist/components/event-timeline/index.js +27 -26
- package/dist/components/experimental/json-viewer/index.js +25 -27
- package/dist/components/experimental/message/index.js +19 -18
- package/dist/components/faceted-filter-bar/index.js +101 -101
- 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/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/index.js +42 -40
- package/dist/components/hover-card/index.js +18 -17
- 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 +527 -503
- 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/markdown-editor/index.js +368 -340
- 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 +89 -85
- 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.js +75 -37
- package/dist/components/navigation-item/index.js +20 -19
- package/dist/components/newsletter-section/index.js +121 -119
- package/dist/components/number-input/index.js +36 -36
- package/dist/components/page-header/index.js +17 -16
- package/dist/components/pagination/index.js +21 -20
- package/dist/components/payload-inspector/index.js +132 -136
- 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 +18 -17
- package/dist/components/portal/index.js +12 -11
- package/dist/components/pricing-card/index.js +62 -62
- package/dist/components/pricing-section/index.js +96 -94
- 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 +768 -743
- package/dist/components/run-step-timeline/index.js +127 -122
- package/dist/components/schema-form/index.js +200 -195
- 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 +32 -30
- 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 +74 -69
- package/dist/components/sidebar/sidebar.css +4 -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.js +35 -34
- 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 +13 -10
- package/dist/components/tag-input/index.js +36 -35
- package/dist/components/team-section/index.js +143 -136
- package/dist/components/testimonial-section/index.js +100 -95
- 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 +28 -25
- package/dist/components/tooltip/index.js +12 -11
- 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 +1 -1
- package/dist/index.js +21360 -22817
- package/dist/server/components/access-gate/index.js +1 -1
- package/dist/server/components/accordion/index.js +4 -3
- package/dist/server/components/accordion-item/index.js +4 -3
- package/dist/server/components/approval-card/index.js +1 -1
- package/dist/server/components/chat/index.js +2 -16
- package/dist/server/components/color-field/index.js +2 -2
- package/dist/server/components/color-picker/index.js +1 -1
- package/dist/server/components/command-menu/index.js +1 -1
- package/dist/server/components/command-palette/index.js +1 -1
- package/dist/server/components/diff-viewer/index.js +6 -6
- package/dist/server/components/json-schema-editor/index.js +7 -7
- package/dist/server/components/markdown-editor/index.js +5 -5
- package/dist/server/components/navigation-bar/index.js +1 -1
- package/dist/server/components/review-editor/index.js +17 -17
- package/dist/server/components/segment/index.js +3 -3
- package/dist/server/components/segmented-control/index.js +9 -5
- package/dist/server/components/sidebar/index.js +1 -1
- package/dist/server/components/steps/index.js +1 -1
- package/dist/server/components/tabs/index.js +14 -5
- package/dist/server/index.js +23 -24
- 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-5tf22d6e.js +221 -0
- package/dist/server/index.server-69epaape.js +144 -0
- package/dist/server/index.server-a2hz77tt.js +458 -0
- package/dist/server/index.server-bn02606y.js +19 -0
- package/dist/server/index.server-cf6pxeyg.js +9 -0
- package/dist/server/index.server-e3fnv1g6.js +223 -0
- package/dist/server/index.server-ejyf7e48.js +9 -0
- package/dist/server/index.server-hfx487zj.js +42 -0
- package/dist/server/index.server-j3ddzcaa.js +1028 -0
- package/dist/server/index.server-jeqg2d22.js +123 -0
- package/dist/server/index.server-jtj3r53y.js +9 -0
- package/dist/server/index.server-jync915v.js +2309 -0
- package/dist/server/index.server-pe929n15.js +107 -0
- package/dist/server/index.server-v4zabrsx.js +3822 -0
- package/dist/server/index.server-w83kmcrx.js +1163 -0
- package/package.json +2211 -1594
- 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/command-list-context.ts +79 -0
- package/src/components/_internal/create-command-list-state.svelte.ts +144 -0
- package/src/components/_internal/create-sliding-dialog-state.svelte.ts +146 -0
- package/src/components/_internal/side-navigation-group-context.ts +48 -0
- package/src/components/_radio/index.ts +6 -0
- package/src/components/_radio/radio.schema.ts +41 -0
- package/src/components/_radio/radio.svelte +65 -0
- package/src/components/_radio/radio.types.ts +27 -0
- package/src/components/_radio/radio.variables.ts +3 -0
- package/src/components/_sortable-item.svelte +519 -0
- package/src/components/_timeline-item/index.ts +5 -0
- package/src/components/_timeline-item/timeline-item.svelte +46 -0
- package/src/components/_timeline-item/timeline-item.types.ts +51 -0
- package/src/components/_tree-expand-all/index.ts +5 -0
- package/src/components/_tree-expand-all/tree-expand-all.svelte +58 -0
- package/src/components/_tree-expand-all/tree-expand-all.types.ts +15 -0
- package/src/components/_tree-select-all/index.ts +5 -0
- package/src/components/_tree-select-all/tree-select-all.schema.ts +43 -0
- package/src/components/_tree-select-all/tree-select-all.svelte +41 -0
- package/src/components/_tree-select-all/tree-select-all.types.ts +15 -0
- package/src/components/_tree-select-all/tree-select-all.variables.ts +3 -0
- package/src/components/_visually-hidden-live-region.svelte +65 -0
- package/src/components/access-gate/access-gate-inline.svelte +336 -0
- package/src/components/access-gate/access-gate.schema.ts +43 -0
- package/src/components/access-gate/access-gate.svelte +52 -0
- package/src/components/access-gate/access-gate.types.ts +46 -0
- package/src/components/access-gate/access-gate.variables.ts +3 -0
- package/src/components/access-gate/index.ts +6 -0
- package/src/components/accordion/accordion.context.ts +16 -0
- package/src/components/accordion/accordion.schema.ts +30 -0
- package/src/components/accordion/accordion.svelte +34 -0
- package/src/components/accordion/accordion.types.ts +37 -0
- package/src/components/accordion/accordion.variables.ts +3 -0
- package/src/components/accordion/index.ts +16 -0
- package/src/components/accordion-item/accordion-item.schema.ts +39 -0
- package/src/components/accordion-item/accordion-item.svelte +60 -0
- package/src/components/accordion-item/accordion-item.types.ts +33 -0
- package/src/components/accordion-item/accordion-item.variables.ts +3 -0
- package/src/components/accordion-item/index.ts +6 -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.ts +3 -0
- package/src/components/action-row/index.ts +11 -0
- package/src/components/alert/alert.schema.ts +43 -0
- package/src/components/alert/alert.svelte +108 -0
- package/src/components/alert/alert.types.ts +58 -0
- package/src/components/alert/alert.variables.ts +3 -0
- package/src/components/alert/index.ts +6 -0
- package/src/components/alert-dialog/alert-dialog.schema.ts +60 -0
- package/src/components/alert-dialog/alert-dialog.svelte +50 -0
- package/src/components/alert-dialog/alert-dialog.types.ts +19 -0
- package/src/components/alert-dialog/alert-dialog.variables.ts +3 -0
- package/src/components/alert-dialog/index.ts +6 -0
- package/src/components/approval-card/approval-card-state.ts +24 -0
- package/src/components/approval-card/approval-card.schema.ts +219 -0
- package/src/components/approval-card/approval-card.svelte +575 -0
- package/src/components/approval-card/approval-card.types.ts +202 -0
- package/src/components/approval-card/approval-card.variables.ts +3 -0
- package/src/components/approval-card/index.ts +18 -0
- package/src/components/area-chart/area-chart.schema.ts +149 -0
- package/src/components/area-chart/area-chart.svelte +337 -0
- package/src/components/area-chart/area-chart.types.ts +61 -0
- package/src/components/area-chart/area-chart.variables.ts +3 -0
- package/src/components/area-chart/index.ts +6 -0
- package/src/components/aspect-ratio/aspect-ratio.schema.ts +147 -0
- package/src/components/aspect-ratio/aspect-ratio.svelte +23 -0
- package/src/components/aspect-ratio/aspect-ratio.types.ts +53 -0
- package/src/components/aspect-ratio/aspect-ratio.variables.ts +3 -0
- package/src/components/aspect-ratio/index.ts +10 -0
- package/src/components/autocomplete/autocomplete.schema.ts +90 -0
- package/src/components/autocomplete/autocomplete.svelte +488 -0
- package/src/components/autocomplete/autocomplete.types.ts +74 -0
- package/src/components/autocomplete/autocomplete.variables.ts +3 -0
- package/src/components/autocomplete/index.ts +11 -0
- package/src/components/avatar/avatar.schema.ts +41 -0
- package/src/components/avatar/avatar.svelte +48 -0
- package/src/components/avatar/avatar.types.ts +33 -0
- package/src/components/avatar/avatar.variables.ts +3 -0
- package/src/components/avatar/index.ts +6 -0
- package/src/components/avatar-group/avatar-group.schema.ts +74 -0
- package/src/components/avatar-group/avatar-group.svelte +138 -0
- package/src/components/avatar-group/avatar-group.types.ts +97 -0
- package/src/components/avatar-group/avatar-group.variables.ts +3 -0
- package/src/components/avatar-group/index.ts +6 -0
- package/src/components/backdrop/backdrop.schema.ts +52 -0
- package/src/components/backdrop/backdrop.svelte +80 -0
- package/src/components/backdrop/backdrop.types.ts +30 -0
- package/src/components/backdrop/backdrop.variables.ts +3 -0
- package/src/components/backdrop/index.ts +6 -0
- package/src/components/badge/badge.schema.ts +46 -0
- package/src/components/badge/badge.svelte +75 -0
- package/src/components/badge/badge.types.ts +67 -0
- package/src/components/badge/badge.variables.ts +3 -0
- package/src/components/badge/index.ts +6 -0
- package/src/components/banner/banner.schema.ts +44 -0
- package/src/components/banner/banner.svelte +117 -0
- package/src/components/banner/banner.types.ts +46 -0
- package/src/components/banner/banner.variables.ts +3 -0
- package/src/components/banner/index.ts +6 -0
- package/src/components/bar-chart/bar-chart.schema.ts +153 -0
- package/src/components/bar-chart/bar-chart.svelte +350 -0
- package/src/components/bar-chart/bar-chart.types.ts +62 -0
- package/src/components/bar-chart/bar-chart.variables.ts +3 -0
- package/src/components/bar-chart/index.ts +6 -0
- package/src/components/bento-cell/bento-cell.schema.ts +109 -0
- package/src/components/bento-cell/bento-cell.svelte +32 -0
- package/src/components/bento-cell/bento-cell.types.ts +24 -0
- package/src/components/bento-cell/bento-cell.variables.ts +3 -0
- package/src/components/bento-cell/index.ts +6 -0
- package/src/components/bento-grid/bento-grid.schema.ts +60 -0
- package/src/components/bento-grid/bento-grid.svelte +67 -0
- package/src/components/bento-grid/bento-grid.types.ts +33 -0
- package/src/components/bento-grid/bento-grid.variables.ts +3 -0
- package/src/components/bento-grid/index.ts +12 -0
- package/src/components/blog-section/blog-section.schema.ts +86 -0
- package/src/components/blog-section/blog-section.svelte +79 -0
- package/src/components/blog-section/blog-section.types.ts +59 -0
- package/src/components/blog-section/blog-section.variables.ts +3 -0
- package/src/components/blog-section/index.ts +6 -0
- package/src/components/breadcrumbs/breadcrumbs.schema.ts +25 -0
- package/src/components/breadcrumbs/breadcrumbs.svelte +31 -0
- package/src/components/breadcrumbs/breadcrumbs.types.ts +43 -0
- package/src/components/breadcrumbs/breadcrumbs.variables.ts +3 -0
- package/src/components/breadcrumbs/index.ts +6 -0
- package/src/components/button/button.constraints.ts +102 -0
- package/src/components/button/button.schema.ts +68 -0
- package/src/components/button/button.svelte +154 -0
- package/src/components/button/button.types.ts +120 -0
- package/src/components/button/button.variables.ts +3 -0
- package/src/components/button/index.ts +6 -0
- package/src/components/button-group/button-group.schema.ts +39 -0
- package/src/components/button-group/button-group.svelte +96 -0
- package/src/components/button-group/button-group.types.ts +34 -0
- package/src/components/button-group/button-group.variables.ts +3 -0
- package/src/components/button-group/index.ts +6 -0
- package/src/components/calendar/calendar.schema.ts +65 -0
- package/src/components/calendar/calendar.svelte +308 -0
- package/src/components/calendar/calendar.types.ts +31 -0
- package/src/components/calendar/calendar.variables.ts +3 -0
- package/src/components/calendar/index.ts +6 -0
- package/src/components/callout/callout.schema.ts +46 -0
- package/src/components/callout/callout.svelte +78 -0
- package/src/components/callout/callout.types.ts +92 -0
- package/src/components/callout/callout.variables.ts +3 -0
- package/src/components/callout/index.ts +6 -0
- package/src/components/capability-gate/capability-gate.schema.ts +76 -0
- package/src/components/capability-gate/capability-gate.svelte +137 -0
- package/src/components/capability-gate/capability-gate.types.ts +83 -0
- package/src/components/capability-gate/capability-gate.variables.ts +3 -0
- package/src/components/capability-gate/index.ts +10 -0
- package/src/components/card/card.schema.ts +71 -0
- package/src/components/card/card.svelte +73 -0
- package/src/components/card/card.types.ts +58 -0
- package/src/components/card/card.variables.ts +3 -0
- package/src/components/card/index.ts +12 -0
- package/src/components/carousel/carousel.schema.ts +50 -0
- package/src/components/carousel/carousel.svelte +221 -0
- package/src/components/carousel/carousel.types.ts +47 -0
- package/src/components/carousel/carousel.variables.ts +3 -0
- package/src/components/carousel/index.ts +11 -0
- package/src/components/chart.types.ts +116 -0
- package/src/components/chat/adapter/chat-adapter.ts +132 -0
- package/src/components/chat/adapter/index.ts +15 -0
- package/src/components/chat/artifact/artifact-panel.svelte +112 -0
- package/src/components/chat/artifact/artifact-viewer.svelte +101 -0
- package/src/components/chat/artifact/chat-artifact-layout.svelte +56 -0
- package/src/components/chat/artifact/index.ts +3 -0
- package/src/components/chat/builders.ts +33 -0
- package/src/components/chat/chat.schema.json +5 -0
- package/src/components/chat/chat.schema.ts +292 -0
- package/src/components/chat/chat.svelte +55 -0
- package/src/components/chat/chat.types.ts +252 -0
- package/src/components/chat/chat.variables.ts +3 -0
- package/src/components/chat/container/chat-events.ts +26 -0
- package/src/components/chat/container/chat-history-trigger.svelte +95 -0
- package/src/components/chat/container/chat-jump-controls.svelte +191 -0
- package/src/components/chat/container/chat-participant-typing.svelte +128 -0
- package/src/components/chat/container/chat-search-bar.svelte +219 -0
- package/src/components/chat/container/chat-status-announcer.svelte +22 -0
- package/src/components/chat/container/chat.svelte +1809 -0
- package/src/components/chat/container/index.ts +64 -0
- package/src/components/chat/container/scroll-utilities.ts +204 -0
- package/src/components/chat/container/use-chat-disclosure-state.svelte.ts +62 -0
- package/src/components/chat/container/use-chat-keyboard-nav.svelte.ts +153 -0
- package/src/components/chat/container/use-chat-message-groups.svelte.ts +146 -0
- package/src/components/chat/container/use-chat-read-receipts.svelte.ts +62 -0
- package/src/components/chat/container/use-chat-scroll-state.svelte.ts +292 -0
- package/src/components/chat/container/use-chat-search.svelte.ts +116 -0
- package/src/components/chat/container/use-chat-typing-indicator.svelte.ts +153 -0
- package/src/components/chat/container/use-chat-unread-state.svelte.ts +170 -0
- package/src/components/chat/container/use-chat-virtualizer.svelte.ts +260 -0
- package/src/components/chat/conversation-model.ts +44 -0
- package/src/components/chat/export/conversation-export-actions.svelte +174 -0
- package/src/components/chat/export/index.ts +9 -0
- package/src/components/chat/index.ts +125 -0
- package/src/components/chat/input/attachment-kind.ts +28 -0
- package/src/components/chat/input/chat-attachment-preview.svelte +223 -0
- package/src/components/chat/input/chat-attachment.ts +12 -0
- package/src/components/chat/input/chat-input.svelte +793 -0
- package/src/components/chat/input/index.ts +4 -0
- package/src/components/chat/message/chat-date-separator.svelte +87 -0
- package/src/components/chat/message/chat-message-parts-renderer.svelte +139 -0
- package/src/components/chat/message/chat-message-parts.ts +163 -0
- package/src/components/chat/message/chat-message.svelte +861 -0
- package/src/components/chat/message/chat-read-receipt.svelte +85 -0
- package/src/components/chat/message/image-lightbox.svelte +255 -0
- package/src/components/chat/message/index.ts +6 -0
- package/src/components/chat/message/markdown-preview.svelte +77 -0
- package/src/components/chat/message/message-attachments.svelte +178 -0
- package/src/components/chat/message/message-content.svelte +132 -0
- package/src/components/chat/message/parts/image-part.svelte +11 -0
- package/src/components/chat/message/parts/markdown-part.svelte +17 -0
- package/src/components/chat/message/parts/reasoning-part.svelte +274 -0
- package/src/components/chat/message/parts/step-part.svelte +127 -0
- package/src/components/chat/message/parts/suggestion-part.svelte +83 -0
- package/src/components/chat/message/parts/tool-approval-part.svelte +298 -0
- package/src/components/chat/message/parts/tool-call-part.svelte +19 -0
- package/src/components/chat/message/parts/tool-result-part.svelte +65 -0
- package/src/components/chat/message/tool-call-group.svelte +274 -0
- package/src/components/chat/message/tool-payload-code.svelte +35 -0
- package/src/components/chat/utilities/conversation.ts +26 -0
- package/src/components/chat/utilities/index.ts +33 -0
- package/src/components/chat/utilities/types.ts +288 -0
- package/src/components/chat/utilities/utilities.ts +507 -0
- package/src/components/chat-conversation-header/chat-conversation-header.schema.ts +38 -0
- package/src/components/chat-conversation-header/chat-conversation-header.svelte +49 -0
- package/src/components/chat-conversation-header/chat-conversation-header.types.ts +20 -0
- package/src/components/chat-conversation-header/chat-conversation-header.variables.ts +3 -0
- package/src/components/chat-conversation-header/index.ts +9 -0
- package/src/components/chat-conversation-list/chat-conversation-list.schema.ts +52 -0
- package/src/components/chat-conversation-list/chat-conversation-list.svelte +75 -0
- package/src/components/chat-conversation-list/chat-conversation-list.types.ts +18 -0
- package/src/components/chat-conversation-list/chat-conversation-list.variables.ts +3 -0
- package/src/components/chat-conversation-list/conversation-summary.ts +88 -0
- package/src/components/chat-conversation-list/index.ts +11 -0
- package/src/components/checkbox/checkbox.schema.ts +59 -0
- package/src/components/checkbox/checkbox.svelte +126 -0
- package/src/components/checkbox/checkbox.types.ts +39 -0
- package/src/components/checkbox/checkbox.variables.ts +3 -0
- package/src/components/checkbox/index.ts +6 -0
- package/src/components/checkbox-group/checkbox-group.schema.ts +54 -0
- package/src/components/checkbox-group/checkbox-group.svelte +69 -0
- package/src/components/checkbox-group/checkbox-group.types.ts +58 -0
- package/src/components/checkbox-group/checkbox-group.variables.ts +3 -0
- package/src/components/checkbox-group/index.ts +6 -0
- package/src/components/chip/chip.schema.ts +68 -0
- package/src/components/chip/chip.svelte +156 -0
- package/src/components/chip/chip.types.ts +89 -0
- package/src/components/chip/chip.variables.ts +3 -0
- package/src/components/chip/index.ts +15 -0
- package/src/components/choice-grid/choice-grid-context.ts +30 -0
- package/src/components/choice-grid/choice-grid.schema.ts +73 -0
- package/src/components/choice-grid/choice-grid.svelte +205 -0
- package/src/components/choice-grid/choice-grid.types.ts +152 -0
- package/src/components/choice-grid/choice-grid.variables.ts +3 -0
- package/src/components/choice-grid/index.ts +22 -0
- package/src/components/choice-grid-item/choice-grid-item.schema.ts +40 -0
- package/src/components/choice-grid-item/choice-grid-item.svelte +102 -0
- package/src/components/choice-grid-item/choice-grid-item.types.ts +30 -0
- package/src/components/choice-grid-item/choice-grid-item.variables.ts +3 -0
- package/src/components/choice-grid-item/index.ts +6 -0
- package/src/components/click-away-listener/click-away-listener.schema.ts +37 -0
- package/src/components/click-away-listener/click-away-listener.svelte +49 -0
- package/src/components/click-away-listener/click-away-listener.types.ts +28 -0
- package/src/components/click-away-listener/click-away-listener.variables.ts +3 -0
- package/src/components/click-away-listener/index.ts +5 -0
- package/src/components/code-block/code-block-default-highlighter.ts +63 -0
- package/src/components/code-block/code-block.schema.ts +44 -0
- package/src/components/code-block/code-block.svelte +117 -0
- package/src/components/code-block/code-block.types.ts +54 -0
- package/src/components/code-block/code-block.variables.ts +3 -0
- package/src/components/code-block/index.ts +6 -0
- package/src/components/collapsible/collapsible-bindable-harness.svelte +18 -0
- package/src/components/collapsible/collapsible-open-prop-harness.svelte +18 -0
- package/src/components/collapsible/collapsible-snippet-trigger-harness.svelte +16 -0
- package/src/components/collapsible/collapsible.schema.ts +57 -0
- package/src/components/collapsible/collapsible.svelte +89 -0
- package/src/components/collapsible/collapsible.types.ts +75 -0
- package/src/components/collapsible/collapsible.variables.ts +3 -0
- package/src/components/collapsible/index.ts +6 -0
- package/src/components/color-field/color-field.schema.ts +92 -0
- package/src/components/color-field/color-field.svelte +396 -0
- package/src/components/color-field/color-field.types.ts +60 -0
- package/src/components/color-field/color-field.variables.ts +3 -0
- package/src/components/color-field/index.ts +6 -0
- package/src/components/color-picker/color-picker.schema.ts +62 -0
- package/src/components/color-picker/color-picker.svelte +629 -0
- package/src/components/color-picker/color-picker.types.ts +27 -0
- package/src/components/color-picker/color-picker.variables.ts +3 -0
- package/src/components/color-picker/index.ts +6 -0
- package/src/components/color-swatch-picker/color-swatch-picker.schema.ts +67 -0
- package/src/components/color-swatch-picker/color-swatch-picker.svelte +168 -0
- package/src/components/color-swatch-picker/color-swatch-picker.types.ts +55 -0
- package/src/components/color-swatch-picker/color-swatch-picker.variables.ts +3 -0
- package/src/components/color-swatch-picker/index.ts +6 -0
- package/src/components/combobox/combobox.schema.ts +83 -0
- package/src/components/combobox/combobox.svelte +376 -0
- package/src/components/combobox/combobox.types.ts +80 -0
- package/src/components/combobox/combobox.variables.ts +3 -0
- package/src/components/combobox/index.ts +6 -0
- package/src/components/command-item/command-item.schema.ts +66 -0
- package/src/components/command-item/command-item.svelte +100 -0
- package/src/components/command-item/command-item.types.ts +42 -0
- package/src/components/command-item/command-item.variables.ts +3 -0
- package/src/components/command-item/index.ts +6 -0
- package/src/components/command-menu/caret-rect.svelte.ts +78 -0
- package/src/components/command-menu/command-menu-trigger.ts +41 -0
- package/src/components/command-menu/command-menu.schema.ts +85 -0
- package/src/components/command-menu/command-menu.svelte +129 -0
- package/src/components/command-menu/command-menu.types.ts +49 -0
- package/src/components/command-menu/command-menu.variables.ts +3 -0
- package/src/components/command-menu/index.ts +12 -0
- package/src/components/command-palette/command-palette.schema.ts +64 -0
- package/src/components/command-palette/command-palette.svelte +194 -0
- package/src/components/command-palette/command-palette.types.ts +30 -0
- package/src/components/command-palette/command-palette.variables.ts +3 -0
- package/src/components/command-palette/index.ts +6 -0
- package/src/components/confirm-dialog/confirm-dialog.schema.ts +66 -0
- package/src/components/confirm-dialog/confirm-dialog.svelte +43 -0
- package/src/components/confirm-dialog/confirm-dialog.types.ts +52 -0
- package/src/components/confirm-dialog/confirm-dialog.variables.ts +3 -0
- package/src/components/confirm-dialog/index.ts +6 -0
- package/src/components/container/container.schema.ts +144 -0
- package/src/components/container/container.svelte +19 -0
- package/src/components/container/container.types.ts +54 -0
- package/src/components/container/container.variables.ts +3 -0
- package/src/components/container/index.ts +6 -0
- package/src/components/context-menu/context-menu.context.ts +22 -0
- package/src/components/context-menu/context-menu.schema.ts +57 -0
- package/src/components/context-menu/context-menu.svelte +175 -0
- package/src/components/context-menu/context-menu.types.ts +24 -0
- package/src/components/context-menu/context-menu.variables.ts +3 -0
- package/src/components/context-menu/index.ts +21 -0
- package/src/components/context-menu-trigger/context-menu-trigger.schema.ts +24 -0
- package/src/components/context-menu-trigger/context-menu-trigger.svelte +134 -0
- package/src/components/context-menu-trigger/context-menu-trigger.types.ts +8 -0
- package/src/components/context-menu-trigger/context-menu-trigger.variables.ts +3 -0
- package/src/components/context-menu-trigger/index.ts +5 -0
- package/src/components/copy-button/__test-helpers__/copy-state-wrapper.svelte +21 -0
- package/src/components/copy-button/copy-button.schema.ts +52 -0
- package/src/components/copy-button/copy-button.svelte +78 -0
- package/src/components/copy-button/copy-button.types.ts +49 -0
- package/src/components/copy-button/copy-button.variables.ts +3 -0
- package/src/components/copy-button/index.ts +6 -0
- package/src/components/copy-button/use-copy-state.svelte.ts +76 -0
- package/src/components/cta-section/cta-section.schema.ts +71 -0
- package/src/components/cta-section/cta-section.svelte +36 -0
- package/src/components/cta-section/cta-section.types.ts +55 -0
- package/src/components/cta-section/cta-section.variables.ts +3 -0
- package/src/components/cta-section/index.ts +6 -0
- package/src/components/data-grid/_internal/column-model.svelte.ts +126 -0
- package/src/components/data-grid/_internal/geometry.ts +87 -0
- package/src/components/data-grid/_internal/keyboard-model.ts +131 -0
- package/src/components/data-grid/_internal/selection-model.svelte.ts +130 -0
- package/src/components/data-grid/_internal/sort-model.ts +134 -0
- package/src/components/data-grid/_internal/virtualization-adapter.svelte.ts +393 -0
- package/src/components/data-grid/data-grid-selection-bind-probe.ts +15 -0
- package/src/components/data-grid/data-grid.schema.ts +114 -0
- package/src/components/data-grid/data-grid.svelte +835 -0
- package/src/components/data-grid/data-grid.types.ts +124 -0
- package/src/components/data-grid/data-grid.variables.ts +3 -0
- package/src/components/data-grid/index.ts +16 -0
- package/src/components/data-list/data-list.schema.ts +50 -0
- package/src/components/data-list/data-list.svelte +35 -0
- package/src/components/data-list/data-list.types.ts +53 -0
- package/src/components/data-list/data-list.variables.ts +3 -0
- package/src/components/data-list/index.ts +6 -0
- package/src/components/data-table/data-table.schema.ts +112 -0
- package/src/components/data-table/data-table.svelte +455 -0
- package/src/components/data-table/data-table.types.ts +150 -0
- package/src/components/data-table/data-table.variables.ts +3 -0
- package/src/components/data-table/index.ts +11 -0
- package/src/components/date-picker/date-picker.schema.ts +65 -0
- package/src/components/date-picker/date-picker.svelte +209 -0
- package/src/components/date-picker/date-picker.types.ts +33 -0
- package/src/components/date-picker/date-picker.variables.ts +3 -0
- package/src/components/date-picker/index.ts +6 -0
- package/src/components/date-range-field/date-range-field.schema.ts +75 -0
- package/src/components/date-range-field/date-range-field.svelte +323 -0
- package/src/components/date-range-field/date-range-field.types.ts +84 -0
- package/src/components/date-range-field/date-range-field.variables.ts +3 -0
- package/src/components/date-range-field/index.ts +11 -0
- package/src/components/description-list/description-list.schema.ts +35 -0
- package/src/components/description-list/description-list.svelte +62 -0
- package/src/components/description-list/description-list.types.ts +37 -0
- package/src/components/description-list/description-list.variables.ts +3 -0
- package/src/components/description-list/index.ts +11 -0
- package/src/components/diff-statistics/diff-statistics.schema.ts +42 -0
- package/src/components/diff-statistics/diff-statistics.svelte +78 -0
- package/src/components/diff-statistics/diff-statistics.types.ts +32 -0
- package/src/components/diff-statistics/diff-statistics.variables.ts +3 -0
- package/src/components/diff-statistics/index.ts +10 -0
- package/src/components/diff-viewer/diff-controller.svelte.ts +250 -0
- package/src/components/diff-viewer/diff-front-matter.svelte +52 -0
- package/src/components/diff-viewer/diff-line.svelte +340 -0
- package/src/components/diff-viewer/diff-summary-bar.svelte +106 -0
- package/src/components/diff-viewer/diff-toolbar.svelte +182 -0
- package/src/components/diff-viewer/diff-viewer.schema.ts +70 -0
- package/src/components/diff-viewer/diff-viewer.svelte +400 -0
- package/src/components/diff-viewer/diff-viewer.types.ts +56 -0
- package/src/components/diff-viewer/diff-viewer.variables.ts +3 -0
- package/src/components/diff-viewer/front-matter-header.svelte +137 -0
- package/src/components/diff-viewer/index.ts +5 -0
- package/src/components/divider/divider.schema.ts +35 -0
- package/src/components/divider/divider.svelte +54 -0
- package/src/components/divider/divider.types.ts +75 -0
- package/src/components/divider/divider.variables.ts +3 -0
- package/src/components/divider/index.ts +6 -0
- package/src/components/drawer/drawer.schema.ts +64 -0
- package/src/components/drawer/drawer.svelte +159 -0
- package/src/components/drawer/drawer.types.ts +52 -0
- package/src/components/drawer/drawer.variables.ts +3 -0
- package/src/components/drawer/index.ts +6 -0
- package/src/components/dropdown/dropdown.context.ts +23 -0
- package/src/components/dropdown/dropdown.schema.ts +40 -0
- package/src/components/dropdown/dropdown.svelte +209 -0
- package/src/components/dropdown/dropdown.types.ts +48 -0
- package/src/components/dropdown/dropdown.variables.ts +3 -0
- package/src/components/dropdown/index.ts +32 -0
- package/src/components/dropdown-group/dropdown-group.schema.ts +34 -0
- package/src/components/dropdown-group/dropdown-group.svelte +43 -0
- package/src/components/dropdown-group/dropdown-group.types.ts +26 -0
- package/src/components/dropdown-group/dropdown-group.variables.ts +3 -0
- package/src/components/dropdown-group/index.ts +5 -0
- package/src/components/dropdown-item/dropdown-item.schema.ts +62 -0
- package/src/components/dropdown-item/dropdown-item.svelte +95 -0
- package/src/components/dropdown-item/dropdown-item.types.ts +75 -0
- package/src/components/dropdown-item/dropdown-item.variables.ts +3 -0
- package/src/components/dropdown-item/index.ts +10 -0
- package/src/components/dropdown-label/dropdown-label.schema.ts +23 -0
- package/src/components/dropdown-label/dropdown-label.svelte +16 -0
- package/src/components/dropdown-label/dropdown-label.types.ts +7 -0
- package/src/components/dropdown-label/dropdown-label.variables.ts +3 -0
- package/src/components/dropdown-label/index.ts +5 -0
- package/src/components/dropdown-menu/dropdown-menu.schema.ts +23 -0
- package/src/components/dropdown-menu/dropdown-menu.svelte +188 -0
- package/src/components/dropdown-menu/dropdown-menu.types.ts +7 -0
- package/src/components/dropdown-menu/dropdown-menu.variables.ts +3 -0
- package/src/components/dropdown-menu/index.ts +5 -0
- package/src/components/dropdown-separator/dropdown-separator.schema.ts +15 -0
- package/src/components/dropdown-separator/dropdown-separator.svelte +18 -0
- package/src/components/dropdown-separator/dropdown-separator.types.ts +5 -0
- package/src/components/dropdown-separator/dropdown-separator.variables.ts +3 -0
- package/src/components/dropdown-separator/index.ts +5 -0
- package/src/components/dropdown-trigger/dropdown-trigger.schema.ts +27 -0
- package/src/components/dropdown-trigger/dropdown-trigger.svelte +56 -0
- package/src/components/dropdown-trigger/dropdown-trigger.types.ts +9 -0
- package/src/components/dropdown-trigger/dropdown-trigger.variables.ts +3 -0
- package/src/components/dropdown-trigger/index.ts +5 -0
- package/src/components/empty-state/empty-state.schema.ts +42 -0
- package/src/components/empty-state/empty-state.svelte +41 -0
- package/src/components/empty-state/empty-state.types.ts +18 -0
- package/src/components/empty-state/empty-state.variables.ts +3 -0
- package/src/components/empty-state/index.ts +6 -0
- package/src/components/event-stream-viewer/event-stream-viewer-keys.ts +74 -0
- package/src/components/event-stream-viewer/event-stream-viewer.schema.ts +150 -0
- package/src/components/event-stream-viewer/event-stream-viewer.svelte +390 -0
- package/src/components/event-stream-viewer/event-stream-viewer.types.ts +212 -0
- package/src/components/event-stream-viewer/event-stream-viewer.variables.ts +3 -0
- package/src/components/event-stream-viewer/index.ts +17 -0
- package/src/components/event-timeline/event-timeline.schema.ts +99 -0
- package/src/components/event-timeline/event-timeline.svelte +141 -0
- package/src/components/event-timeline/event-timeline.types.ts +80 -0
- package/src/components/event-timeline/event-timeline.variables.ts +3 -0
- package/src/components/event-timeline/index.ts +12 -0
- package/src/components/experimental/json-viewer/index.ts +19 -0
- package/src/components/experimental/message/index.ts +19 -0
- package/src/components/faceted-filter-bar/faceted-filter-bar.schema.ts +71 -0
- package/src/components/faceted-filter-bar/faceted-filter-bar.svelte +166 -0
- package/src/components/faceted-filter-bar/faceted-filter-bar.types.ts +98 -0
- package/src/components/faceted-filter-bar/faceted-filter-bar.variables.ts +3 -0
- package/src/components/faceted-filter-bar/index.ts +13 -0
- package/src/components/feature-section/feature-section.schema.ts +86 -0
- package/src/components/feature-section/feature-section.svelte +53 -0
- package/src/components/feature-section/feature-section.types.ts +63 -0
- package/src/components/feature-section/feature-section.variables.ts +3 -0
- package/src/components/feature-section/index.ts +11 -0
- package/src/components/feed/feed.schema.ts +30 -0
- package/src/components/feed/feed.svelte +13 -0
- package/src/components/feed/feed.types.ts +15 -0
- package/src/components/feed/feed.variables.ts +3 -0
- package/src/components/feed/index.ts +16 -0
- package/src/components/feed-event/feed-event.schema.ts +51 -0
- package/src/components/feed-event/feed-event.svelte +26 -0
- package/src/components/feed-event/feed-event.types.ts +58 -0
- package/src/components/feed-event/feed-event.variables.ts +3 -0
- package/src/components/feed-event/index.ts +5 -0
- package/src/components/file-upload/file-upload.schema.ts +74 -0
- package/src/components/file-upload/file-upload.svelte +377 -0
- package/src/components/file-upload/file-upload.types.ts +60 -0
- package/src/components/file-upload/file-upload.variables.ts +8 -0
- package/src/components/file-upload/index.ts +12 -0
- package/src/components/floating-action-button/floating-action-button.schema.ts +49 -0
- package/src/components/floating-action-button/floating-action-button.svelte +86 -0
- package/src/components/floating-action-button/floating-action-button.types.ts +100 -0
- package/src/components/floating-action-button/floating-action-button.variables.ts +3 -0
- package/src/components/floating-action-button/index.ts +11 -0
- package/src/components/focus-trap/focus-trap.schema.ts +58 -0
- package/src/components/focus-trap/focus-trap.svelte +22 -0
- package/src/components/focus-trap/focus-trap.types.ts +28 -0
- package/src/components/focus-trap/focus-trap.utilities.svelte.ts +249 -0
- package/src/components/focus-trap/focus-trap.variables.ts +3 -0
- package/src/components/focus-trap/index.ts +6 -0
- package/src/components/footer/footer.schema.ts +45 -0
- package/src/components/footer/footer.svelte +54 -0
- package/src/components/footer/footer.types.ts +30 -0
- package/src/components/footer/footer.variables.ts +3 -0
- package/src/components/footer/index.ts +6 -0
- package/src/components/form-field/form-field.schema.ts +52 -0
- package/src/components/form-field/form-field.svelte +68 -0
- package/src/components/form-field/form-field.types.ts +19 -0
- package/src/components/form-field/form-field.variables.ts +3 -0
- package/src/components/form-field/index.ts +6 -0
- package/src/components/form-section/form-section.schema.ts +45 -0
- package/src/components/form-section/form-section.svelte +65 -0
- package/src/components/form-section/form-section.types.ts +34 -0
- package/src/components/form-section/form-section.variables.ts +3 -0
- package/src/components/form-section/index.ts +6 -0
- package/src/components/grid/grid.schema.ts +59 -0
- package/src/components/grid/grid.svelte +34 -0
- package/src/components/grid/grid.types.ts +31 -0
- package/src/components/grid/grid.variables.ts +3 -0
- package/src/components/grid/index.ts +17 -0
- package/src/components/grid-item/grid-item.schema.ts +84 -0
- package/src/components/grid-item/grid-item.svelte +29 -0
- package/src/components/grid-item/grid-item.types.ts +22 -0
- package/src/components/grid-item/grid-item.variables.ts +3 -0
- package/src/components/grid-item/index.ts +5 -0
- package/src/components/grid-list/grid-list.schema.ts +31 -0
- package/src/components/grid-list/grid-list.svelte +18 -0
- package/src/components/grid-list/grid-list.types.ts +15 -0
- package/src/components/grid-list/grid-list.variables.ts +3 -0
- package/src/components/grid-list/index.ts +16 -0
- package/src/components/grid-list-item/grid-list-item.schema.ts +69 -0
- package/src/components/grid-list-item/grid-list-item.svelte +56 -0
- package/src/components/grid-list-item/grid-list-item.types.ts +53 -0
- package/src/components/grid-list-item/grid-list-item.variables.ts +3 -0
- package/src/components/grid-list-item/index.ts +5 -0
- package/src/components/hero-section/hero-section.schema.ts +67 -0
- package/src/components/hero-section/hero-section.svelte +47 -0
- package/src/components/hero-section/hero-section.types.ts +51 -0
- package/src/components/hero-section/hero-section.variables.ts +3 -0
- package/src/components/hero-section/index.ts +10 -0
- package/src/components/hover-card/hover-card.schema.ts +83 -0
- package/src/components/hover-card/hover-card.svelte +201 -0
- package/src/components/hover-card/hover-card.types.ts +38 -0
- package/src/components/hover-card/hover-card.variables.ts +3 -0
- package/src/components/hover-card/index.ts +6 -0
- package/src/components/icons/index.ts +47 -0
- package/src/components/image/image.schema.ts +72 -0
- package/src/components/image/image.svelte +77 -0
- package/src/components/image/image.types.ts +58 -0
- package/src/components/image/image.variables.ts +3 -0
- package/src/components/image/index.ts +6 -0
- package/src/components/inline-loading/index.ts +6 -0
- package/src/components/inline-loading/inline-loading.schema.ts +35 -0
- package/src/components/inline-loading/inline-loading.svelte +96 -0
- package/src/components/inline-loading/inline-loading.types.ts +41 -0
- package/src/components/inline-loading/inline-loading.variables.ts +3 -0
- package/src/components/input/index.ts +6 -0
- package/src/components/input/input.constraints.ts +58 -0
- package/src/components/input/input.schema.ts +86 -0
- package/src/components/input/input.svelte +169 -0
- package/src/components/input/input.types.ts +62 -0
- package/src/components/input/input.variables.ts +3 -0
- package/src/components/invocation-rule-builder/index.ts +14 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.schema.ts +173 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.svelte +500 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.types.ts +235 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.variables.ts +3 -0
- package/src/components/json-schema-editor/composition-branch-keys.ts +35 -0
- package/src/components/json-schema-editor/diff-view.svelte +39 -0
- package/src/components/json-schema-editor/form-view.svelte +50 -0
- package/src/components/json-schema-editor/index.ts +19 -0
- package/src/components/json-schema-editor/json-schema-editor-impl.svelte +212 -0
- package/src/components/json-schema-editor/json-schema-editor-state.svelte.ts +443 -0
- package/src/components/json-schema-editor/json-schema-editor-state.types.ts +21 -0
- package/src/components/json-schema-editor/json-schema-editor-types.ts +110 -0
- package/src/components/json-schema-editor/json-schema-editor.schema.ts +67 -0
- package/src/components/json-schema-editor/json-schema-editor.svelte +12 -0
- package/src/components/json-schema-editor/json-schema-editor.types.ts +47 -0
- package/src/components/json-schema-editor/json-schema-editor.variables.ts +3 -0
- package/src/components/json-schema-editor/json-schema-toolbar.svelte +175 -0
- package/src/components/json-schema-editor/json-schema-validator.ts +345 -0
- package/src/components/json-schema-editor/json-view.svelte +68 -0
- package/src/components/json-schema-editor/property-editor.svelte +566 -0
- package/src/components/json-schema-editor/property-list-validation.ts +10 -0
- package/src/components/json-schema-editor/property-list.svelte +306 -0
- package/src/components/json-viewer/_json-viewer-node.svelte +134 -0
- package/src/components/json-viewer/index.ts +6 -0
- package/src/components/json-viewer/json-viewer.schema.ts +38 -0
- package/src/components/json-viewer/json-viewer.svelte +113 -0
- package/src/components/json-viewer/json-viewer.types.ts +25 -0
- package/src/components/json-viewer/json-viewer.variables.ts +3 -0
- package/src/components/kanban-board/index.ts +15 -0
- package/src/components/kanban-board/kanban-board-helpers.ts +210 -0
- package/src/components/kanban-board/kanban-board.schema.ts +70 -0
- package/src/components/kanban-board/kanban-board.svelte +572 -0
- package/src/components/kanban-board/kanban-board.types.ts +75 -0
- package/src/components/kanban-board/kanban-board.variables.ts +8 -0
- package/src/components/kbd/index.ts +6 -0
- package/src/components/kbd/kbd.schema.ts +33 -0
- package/src/components/kbd/kbd.svelte +12 -0
- package/src/components/kbd/kbd.types.ts +46 -0
- package/src/components/kbd/kbd.variables.ts +3 -0
- package/src/components/keyboard-shortcuts/index.ts +10 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.schema.ts +34 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.svelte +66 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.types.ts +46 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.variables.ts +3 -0
- package/src/components/label/index.ts +6 -0
- package/src/components/label/label.schema.ts +40 -0
- package/src/components/label/label.svelte +23 -0
- package/src/components/label/label.types.ts +22 -0
- package/src/components/label/label.variables.ts +3 -0
- package/src/components/line-chart/index.ts +6 -0
- package/src/components/line-chart/line-chart.schema.ts +145 -0
- package/src/components/line-chart/line-chart.svelte +351 -0
- package/src/components/line-chart/line-chart.types.ts +56 -0
- package/src/components/line-chart/line-chart.variables.ts +3 -0
- package/src/components/link/index.ts +6 -0
- package/src/components/link/link.schema.ts +72 -0
- package/src/components/link/link.svelte +84 -0
- package/src/components/link/link.types.ts +69 -0
- package/src/components/link/link.variables.ts +3 -0
- package/src/components/load-more/index.ts +6 -0
- package/src/components/load-more/load-more.schema.ts +64 -0
- package/src/components/load-more/load-more.svelte +101 -0
- package/src/components/load-more/load-more.types.ts +29 -0
- package/src/components/load-more/load-more.variables.ts +3 -0
- package/src/components/locale-provider/index.ts +5 -0
- package/src/components/locale-provider/locale-provider.schema.ts +28 -0
- package/src/components/locale-provider/locale-provider.svelte +20 -0
- package/src/components/locale-provider/locale-provider.types.ts +21 -0
- package/src/components/locale-provider/locale-provider.variables.ts +3 -0
- package/src/components/logo-cloud/index.ts +6 -0
- package/src/components/logo-cloud/logo-cloud.schema.ts +67 -0
- package/src/components/logo-cloud/logo-cloud.svelte +49 -0
- package/src/components/logo-cloud/logo-cloud.types.ts +51 -0
- package/src/components/logo-cloud/logo-cloud.variables.ts +3 -0
- package/src/components/markdown-editor/editor-skeleton.svelte +85 -0
- package/src/components/markdown-editor/editor-toolbar/editor-toolbar.svelte +318 -0
- package/src/components/markdown-editor/editor-toolbar/index.ts +18 -0
- package/src/components/markdown-editor/editor-toolbar/link-popover.svelte +314 -0
- package/src/components/markdown-editor/editor-toolbar/toolbar-button.svelte +97 -0
- package/src/components/markdown-editor/editor-toolbar/toolbar-dropdown.svelte +106 -0
- package/src/components/markdown-editor/editor-toolbar/toolbar-separator.svelte +30 -0
- package/src/components/markdown-editor/editor-toolbar/types.ts +15 -0
- package/src/components/markdown-editor/index.ts +10 -0
- package/src/components/markdown-editor/markdown-editor.schema.ts +122 -0
- package/src/components/markdown-editor/markdown-editor.svelte +872 -0
- package/src/components/markdown-editor/markdown-editor.types.ts +124 -0
- package/src/components/markdown-editor/markdown-editor.variables.ts +3 -0
- package/src/components/marquee/index.ts +6 -0
- package/src/components/marquee/marquee.schema.ts +54 -0
- package/src/components/marquee/marquee.svelte +214 -0
- package/src/components/marquee/marquee.types.ts +44 -0
- package/src/components/marquee/marquee.variables.ts +7 -0
- package/src/components/masonry/index.ts +6 -0
- package/src/components/masonry/masonry.schema.ts +39 -0
- package/src/components/masonry/masonry.svelte +18 -0
- package/src/components/masonry/masonry.types.ts +38 -0
- package/src/components/masonry/masonry.variables.ts +3 -0
- package/src/components/matrix-chart/index.ts +10 -0
- package/src/components/matrix-chart/matrix-chart.schema.ts +95 -0
- package/src/components/matrix-chart/matrix-chart.svelte +273 -0
- package/src/components/matrix-chart/matrix-chart.types.ts +69 -0
- package/src/components/matrix-chart/matrix-chart.variables.ts +3 -0
- package/src/components/media-controls/index.ts +6 -0
- package/src/components/media-controls/media-controls.schema.ts +72 -0
- package/src/components/media-controls/media-controls.svelte +202 -0
- package/src/components/media-controls/media-controls.types.ts +83 -0
- package/src/components/media-controls/media-controls.variables.ts +3 -0
- package/src/components/mega-menu/index.ts +11 -0
- package/src/components/mega-menu/mega-menu.schema.ts +41 -0
- package/src/components/mega-menu/mega-menu.svelte +370 -0
- package/src/components/mega-menu/mega-menu.types.ts +48 -0
- package/src/components/mega-menu/mega-menu.variables.ts +3 -0
- package/src/components/menu-bar/index.ts +16 -0
- package/src/components/menu-bar/menu-bar-dropdown-context.svelte +13 -0
- package/src/components/menu-bar/menu-bar.schema.ts +38 -0
- package/src/components/menu-bar/menu-bar.svelte +726 -0
- package/src/components/menu-bar/menu-bar.types.ts +73 -0
- package/src/components/menu-bar/menu-bar.variables.ts +3 -0
- package/src/components/message/index.ts +6 -0
- package/src/components/message/message.schema.ts +44 -0
- package/src/components/message/message.svelte +32 -0
- package/src/components/message/message.types.ts +31 -0
- package/src/components/message/message.variables.ts +3 -0
- package/src/components/meter/index.ts +6 -0
- package/src/components/meter/meter.schema.ts +59 -0
- package/src/components/meter/meter.svelte +147 -0
- package/src/components/meter/meter.types.ts +50 -0
- package/src/components/meter/meter.variables.ts +3 -0
- package/src/components/modal/index.ts +6 -0
- package/src/components/modal/modal.constraints.ts +72 -0
- package/src/components/modal/modal.schema.ts +8 -0
- package/src/components/modal/modal.svelte +223 -0
- package/src/components/modal/modal.types.ts +41 -0
- package/src/components/modal/modal.variables.ts +3 -0
- package/src/components/multi-select/index.ts +11 -0
- package/src/components/multi-select/multi-select.schema.ts +93 -0
- package/src/components/multi-select/multi-select.svelte +529 -0
- package/src/components/multi-select/multi-select.types.ts +53 -0
- package/src/components/multi-select/multi-select.variables.ts +3 -0
- package/src/components/navigation-bar/index.ts +14 -0
- package/src/components/navigation-bar/navigation-bar.schema.ts +66 -0
- package/src/components/navigation-bar/navigation-bar.svelte +247 -0
- package/src/components/navigation-bar/navigation-bar.types.ts +54 -0
- package/src/components/navigation-bar/navigation-bar.variables.ts +3 -0
- package/src/components/navigation-item/index.ts +6 -0
- package/src/components/navigation-item/navigation-item.schema.ts +55 -0
- package/src/components/navigation-item/navigation-item.svelte +85 -0
- package/src/components/navigation-item/navigation-item.types.ts +60 -0
- package/src/components/navigation-item/navigation-item.variables.ts +3 -0
- package/src/components/newsletter-section/index.ts +6 -0
- package/src/components/newsletter-section/newsletter-section.schema.ts +66 -0
- package/src/components/newsletter-section/newsletter-section.svelte +58 -0
- package/src/components/newsletter-section/newsletter-section.types.ts +50 -0
- package/src/components/newsletter-section/newsletter-section.variables.ts +3 -0
- package/src/components/number-input/index.ts +6 -0
- package/src/components/number-input/number-input.schema.ts +103 -0
- package/src/components/number-input/number-input.svelte +509 -0
- package/src/components/number-input/number-input.types.ts +56 -0
- package/src/components/number-input/number-input.variables.ts +3 -0
- package/src/components/page-header/index.ts +6 -0
- package/src/components/page-header/page-header.schema.ts +33 -0
- package/src/components/page-header/page-header.svelte +23 -0
- package/src/components/page-header/page-header.types.ts +14 -0
- package/src/components/page-header/page-header.variables.ts +3 -0
- package/src/components/pagination/index.ts +6 -0
- package/src/components/pagination/pagination.schema.ts +39 -0
- package/src/components/pagination/pagination.svelte +143 -0
- package/src/components/pagination/pagination.types.ts +16 -0
- package/src/components/pagination/pagination.variables.ts +3 -0
- package/src/components/payload-inspector/index.ts +12 -0
- package/src/components/payload-inspector/payload-inspector.schema.ts +76 -0
- package/src/components/payload-inspector/payload-inspector.svelte +344 -0
- package/src/components/payload-inspector/payload-inspector.types.ts +123 -0
- package/src/components/payload-inspector/payload-inspector.variables.ts +3 -0
- package/src/components/permission-matrix/index.ts +12 -0
- package/src/components/permission-matrix/permission-matrix.schema.ts +74 -0
- package/src/components/permission-matrix/permission-matrix.svelte +128 -0
- package/src/components/permission-matrix/permission-matrix.types.ts +73 -0
- package/src/components/permission-matrix/permission-matrix.variables.ts +3 -0
- package/src/components/phone-input/index.ts +12 -0
- package/src/components/phone-input/phone-input-formatting.ts +229 -0
- package/src/components/phone-input/phone-input.schema.ts +579 -0
- package/src/components/phone-input/phone-input.svelte +420 -0
- package/src/components/phone-input/phone-input.types.ts +91 -0
- package/src/components/phone-input/phone-input.variables.ts +3 -0
- package/src/components/pin-input/index.ts +6 -0
- package/src/components/pin-input/pin-input.schema.ts +91 -0
- package/src/components/pin-input/pin-input.svelte +290 -0
- package/src/components/pin-input/pin-input.types.ts +68 -0
- package/src/components/pin-input/pin-input.variables.ts +3 -0
- package/src/components/popover/index.ts +6 -0
- package/src/components/popover/popover.schema.ts +93 -0
- package/src/components/popover/popover.svelte +253 -0
- package/src/components/popover/popover.types.ts +60 -0
- package/src/components/popover/popover.variables.ts +3 -0
- package/src/components/portal/index.ts +6 -0
- package/src/components/portal/portal.schema.ts +46 -0
- package/src/components/portal/portal.svelte +34 -0
- package/src/components/portal/portal.types.ts +25 -0
- package/src/components/portal/portal.utilities.svelte.ts +211 -0
- package/src/components/portal/portal.variables.ts +3 -0
- package/src/components/pricing-card/index.ts +6 -0
- package/src/components/pricing-card/pricing-card.schema.ts +54 -0
- package/src/components/pricing-card/pricing-card.svelte +68 -0
- package/src/components/pricing-card/pricing-card.types.ts +49 -0
- package/src/components/pricing-card/pricing-card.variables.ts +3 -0
- package/src/components/pricing-section/index.ts +6 -0
- package/src/components/pricing-section/pricing-section.schema.ts +86 -0
- package/src/components/pricing-section/pricing-section.svelte +53 -0
- package/src/components/pricing-section/pricing-section.types.ts +55 -0
- package/src/components/pricing-section/pricing-section.variables.ts +3 -0
- package/src/components/progress/index.ts +6 -0
- package/src/components/progress/progress.schema.ts +46 -0
- package/src/components/progress/progress.svelte +86 -0
- package/src/components/progress/progress.types.ts +45 -0
- package/src/components/progress/progress.variables.ts +3 -0
- package/src/components/qr-code/index.ts +6 -0
- package/src/components/qr-code/qr-code.schema.ts +40 -0
- package/src/components/qr-code/qr-code.svelte +116 -0
- package/src/components/qr-code/qr-code.types.ts +36 -0
- package/src/components/qr-code/qr-code.variables.ts +3 -0
- package/src/components/radio-group/index.ts +22 -0
- package/src/components/radio-group/radio-group-context.ts +33 -0
- package/src/components/radio-group/radio-group.schema.ts +61 -0
- package/src/components/radio-group/radio-group.svelte +87 -0
- package/src/components/radio-group/radio-group.types.ts +47 -0
- package/src/components/radio-group/radio-group.variables.ts +3 -0
- package/src/components/rating/index.ts +6 -0
- package/src/components/rating/rating.schema.ts +85 -0
- package/src/components/rating/rating.svelte +324 -0
- package/src/components/rating/rating.types.ts +59 -0
- package/src/components/rating/rating.variables.ts +3 -0
- package/src/components/resizable-panels/index.ts +16 -0
- package/src/components/resizable-panels/resizable-panels-sizing.ts +706 -0
- package/src/components/resizable-panels/resizable-panels.schema.ts +60 -0
- package/src/components/resizable-panels/resizable-panels.svelte +363 -0
- package/src/components/resizable-panels/resizable-panels.types.ts +79 -0
- package/src/components/resizable-panels/resizable-panels.variables.ts +3 -0
- package/src/components/review-editor/comment-composer.svelte +271 -0
- package/src/components/review-editor/comment-list.svelte +311 -0
- package/src/components/review-editor/comment-sidebar.svelte +449 -0
- package/src/components/review-editor/export-actions.svelte +188 -0
- package/src/components/review-editor/focus-navigation.ts +220 -0
- package/src/components/review-editor/front-matter-fields.svelte +159 -0
- package/src/components/review-editor/index.ts +59 -0
- package/src/components/review-editor/live-region.svelte +109 -0
- package/src/components/review-editor/review-editor-anchors.svelte.ts +219 -0
- package/src/components/review-editor/review-editor-controls.svelte +201 -0
- package/src/components/review-editor/review-editor-exports.ts +145 -0
- package/src/components/review-editor/review-editor-front-matter.ts +237 -0
- package/src/components/review-editor/review-editor-impl.svelte +1509 -0
- package/src/components/review-editor/review-editor-selection-geometry.ts +31 -0
- package/src/components/review-editor/review-editor-selection-types.ts +68 -0
- package/src/components/review-editor/review-editor-selection.svelte.ts +292 -0
- package/src/components/review-editor/review-editor-state.svelte.ts +117 -0
- package/src/components/review-editor/review-editor-threads.svelte.ts +435 -0
- package/src/components/review-editor/review-editor.schema.ts +88 -0
- package/src/components/review-editor/review-editor.svelte +18 -0
- package/src/components/review-editor/review-editor.types.ts +92 -0
- package/src/components/review-editor/review-editor.variables.ts +3 -0
- package/src/components/review-editor/thread-popover.svelte +261 -0
- package/src/components/run-step-timeline/index.ts +17 -0
- package/src/components/run-step-timeline/run-step-timeline.schema.ts +439 -0
- package/src/components/run-step-timeline/run-step-timeline.svelte +377 -0
- package/src/components/run-step-timeline/run-step-timeline.types.ts +310 -0
- package/src/components/run-step-timeline/run-step-timeline.variables.ts +3 -0
- package/src/components/schema-form/index.ts +13 -0
- package/src/components/schema-form/schema-form-body.svelte +553 -0
- package/src/components/schema-form/schema-form-model.ts +369 -0
- package/src/components/schema-form/schema-form-validation.ts +235 -0
- package/src/components/schema-form/schema-form.schema.ts +44 -0
- package/src/components/schema-form/schema-form.svelte +34 -0
- package/src/components/schema-form/schema-form.types.ts +40 -0
- package/src/components/schema-form/schema-form.variables.ts +3 -0
- package/src/components/scroll-area/index.ts +10 -0
- package/src/components/scroll-area/scroll-area.schema.ts +51 -0
- package/src/components/scroll-area/scroll-area.svelte +34 -0
- package/src/components/scroll-area/scroll-area.types.ts +57 -0
- package/src/components/scroll-area/scroll-area.variables.ts +3 -0
- package/src/components/search-field/index.ts +6 -0
- package/src/components/search-field/search-field.schema.ts +69 -0
- package/src/components/search-field/search-field.svelte +104 -0
- package/src/components/search-field/search-field.types.ts +46 -0
- package/src/components/search-field/search-field.variables.ts +3 -0
- package/src/components/secret-value-field/index.ts +6 -0
- package/src/components/secret-value-field/secret-value-field.schema.ts +64 -0
- package/src/components/secret-value-field/secret-value-field.svelte +195 -0
- package/src/components/secret-value-field/secret-value-field.types.ts +47 -0
- package/src/components/secret-value-field/secret-value-field.variables.ts +3 -0
- package/src/components/section-heading/index.ts +6 -0
- package/src/components/section-heading/section-heading.schema.ts +52 -0
- package/src/components/section-heading/section-heading.svelte +40 -0
- package/src/components/section-heading/section-heading.types.ts +37 -0
- package/src/components/section-heading/section-heading.variables.ts +3 -0
- package/src/components/segment/index.ts +5 -0
- package/src/components/segment/segment.schema.ts +50 -0
- package/src/components/segment/segment.svelte +73 -0
- package/src/components/segment/segment.types.ts +39 -0
- package/src/components/segment/segment.variables.ts +3 -0
- package/src/components/segmented-control/index.ts +8 -0
- package/src/components/segmented-control/segmented-control-state.svelte.ts +170 -0
- package/src/components/segmented-control/segmented-control.schema.ts +93 -0
- package/src/components/segmented-control/segmented-control.svelte +122 -0
- package/src/components/segmented-control/segmented-control.types.ts +89 -0
- package/src/components/segmented-control/segmented-control.variables.ts +3 -0
- package/src/components/select/index.ts +6 -0
- package/src/components/select/select.schema.ts +57 -0
- package/src/components/select/select.svelte +89 -0
- package/src/components/select/select.types.ts +28 -0
- package/src/components/select/select.variables.ts +3 -0
- package/src/components/selection-popover/index.ts +6 -0
- package/src/components/selection-popover/selection-popover.schema.ts +54 -0
- package/src/components/selection-popover/selection-popover.svelte +225 -0
- package/src/components/selection-popover/selection-popover.types.ts +31 -0
- package/src/components/selection-popover/selection-popover.variables.ts +3 -0
- package/src/components/share-card/index.ts +6 -0
- package/src/components/share-card/share-card.schema.ts +60 -0
- package/src/components/share-card/share-card.svelte +309 -0
- package/src/components/share-card/share-card.types.ts +69 -0
- package/src/components/share-card/share-card.variables.ts +3 -0
- package/src/components/sheet/index.ts +6 -0
- package/src/components/sheet/sheet.schema.ts +61 -0
- package/src/components/sheet/sheet.svelte +141 -0
- package/src/components/sheet/sheet.types.ts +55 -0
- package/src/components/sheet/sheet.variables.ts +3 -0
- package/src/components/shortcut-hint/index.ts +6 -0
- package/src/components/shortcut-hint/shortcut-hint.schema.ts +41 -0
- package/src/components/shortcut-hint/shortcut-hint.svelte +40 -0
- package/src/components/shortcut-hint/shortcut-hint.types.ts +35 -0
- package/src/components/shortcut-hint/shortcut-hint.variables.ts +3 -0
- package/src/components/side-navigation/index.ts +19 -0
- package/src/components/side-navigation/side-navigation.schema.ts +32 -0
- package/src/components/side-navigation/side-navigation.svelte +20 -0
- package/src/components/side-navigation/side-navigation.types.ts +14 -0
- package/src/components/side-navigation/side-navigation.variables.ts +3 -0
- package/src/components/side-navigation-group/_contains-active-harness.svelte +23 -0
- package/src/components/side-navigation-group/index.ts +6 -0
- package/src/components/side-navigation-group/side-navigation-group.schema.ts +56 -0
- package/src/components/side-navigation-group/side-navigation-group.svelte +110 -0
- package/src/components/side-navigation-group/side-navigation-group.types.ts +21 -0
- package/src/components/side-navigation-group/side-navigation-group.variables.ts +3 -0
- package/src/components/side-navigation-item/index.ts +5 -0
- package/src/components/side-navigation-item/side-navigation-item.schema.ts +54 -0
- package/src/components/side-navigation-item/side-navigation-item.svelte +43 -0
- package/src/components/side-navigation-item/side-navigation-item.types.ts +22 -0
- package/src/components/side-navigation-item/side-navigation-item.variables.ts +3 -0
- package/src/components/sidebar/index.ts +6 -0
- package/src/components/sidebar/sidebar.css +4 -0
- package/src/components/sidebar/sidebar.schema.ts +45 -0
- package/src/components/sidebar/sidebar.svelte +93 -0
- package/src/components/sidebar/sidebar.types.ts +36 -0
- package/src/components/sidebar/sidebar.variables.ts +3 -0
- package/src/components/skeleton/index.ts +6 -0
- package/src/components/skeleton/skeleton.schema.ts +30 -0
- package/src/components/skeleton/skeleton.svelte +17 -0
- package/src/components/skeleton/skeleton.types.ts +11 -0
- package/src/components/skeleton/skeleton.variables.ts +3 -0
- package/src/components/skip-link/index.ts +5 -0
- package/src/components/skip-link/skip-link.schema.ts +29 -0
- package/src/components/skip-link/skip-link.svelte +56 -0
- package/src/components/skip-link/skip-link.types.ts +40 -0
- package/src/components/skip-link/skip-link.variables.ts +3 -0
- package/src/components/slider/index.ts +12 -0
- package/src/components/slider/slider.schema.ts +88 -0
- package/src/components/slider/slider.svelte +485 -0
- package/src/components/slider/slider.types.ts +65 -0
- package/src/components/slider/slider.variables.ts +3 -0
- package/src/components/sortable-list/index.ts +6 -0
- package/src/components/sortable-list/sortable-list.schema.ts +71 -0
- package/src/components/sortable-list/sortable-list.svelte +113 -0
- package/src/components/sortable-list/sortable-list.types.ts +41 -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.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.ts +3 -0
- package/src/components/sparkbar/index.ts +6 -0
- package/src/components/sparkbar/sparkbar.schema.ts +49 -0
- package/src/components/sparkbar/sparkbar.svelte +42 -0
- package/src/components/sparkbar/sparkbar.types.ts +48 -0
- package/src/components/sparkbar/sparkbar.variables.ts +3 -0
- package/src/components/spectrogram/index.ts +10 -0
- package/src/components/spectrogram/spectrogram.schema.ts +86 -0
- package/src/components/spectrogram/spectrogram.svelte +207 -0
- package/src/components/spectrogram/spectrogram.types.ts +74 -0
- package/src/components/spectrogram/spectrogram.variables.ts +3 -0
- package/src/components/spectrum-chart/index.ts +10 -0
- package/src/components/spectrum-chart/spectrum-chart.schema.ts +73 -0
- package/src/components/spectrum-chart/spectrum-chart.svelte +186 -0
- package/src/components/spectrum-chart/spectrum-chart.types.ts +53 -0
- package/src/components/spectrum-chart/spectrum-chart.variables.ts +3 -0
- package/src/components/speed-dial/index.ts +25 -0
- package/src/components/speed-dial/speed-dial.context.ts +16 -0
- package/src/components/speed-dial/speed-dial.schema.ts +51 -0
- package/src/components/speed-dial/speed-dial.svelte +161 -0
- package/src/components/speed-dial/speed-dial.types.ts +59 -0
- package/src/components/speed-dial/speed-dial.variables.ts +3 -0
- package/src/components/speed-dial-action/index.ts +8 -0
- package/src/components/speed-dial-action/speed-dial-action.schema.ts +45 -0
- package/src/components/speed-dial-action/speed-dial-action.svelte +49 -0
- package/src/components/speed-dial-action/speed-dial-action.types.ts +50 -0
- package/src/components/speed-dial-action/speed-dial-action.variables.ts +3 -0
- package/src/components/spinner/index.ts +6 -0
- package/src/components/spinner/spinner.schema.ts +25 -0
- package/src/components/spinner/spinner.svelte +18 -0
- package/src/components/spinner/spinner.types.ts +27 -0
- package/src/components/spinner/spinner.variables.ts +3 -0
- package/src/components/stacked-list-item/index.ts +6 -0
- package/src/components/stacked-list-item/stacked-list-item.schema.ts +84 -0
- package/src/components/stacked-list-item/stacked-list-item.svelte +97 -0
- package/src/components/stacked-list-item/stacked-list-item.types.ts +47 -0
- package/src/components/stacked-list-item/stacked-list-item.variables.ts +3 -0
- package/src/components/stat/index.ts +6 -0
- package/src/components/stat/stat.schema.ts +55 -0
- package/src/components/stat/stat.svelte +59 -0
- package/src/components/stat/stat.types.ts +35 -0
- package/src/components/stat/stat.variables.ts +3 -0
- package/src/components/stat-group/index.ts +16 -0
- package/src/components/stat-group/stat-group.schema.ts +41 -0
- package/src/components/stat-group/stat-group.svelte +21 -0
- package/src/components/stat-group/stat-group.types.ts +30 -0
- package/src/components/stat-group/stat-group.variables.ts +3 -0
- package/src/components/stats-section/index.ts +6 -0
- package/src/components/stats-section/stats-section.schema.ts +87 -0
- package/src/components/stats-section/stats-section.svelte +47 -0
- package/src/components/stats-section/stats-section.types.ts +61 -0
- package/src/components/stats-section/stats-section.variables.ts +3 -0
- package/src/components/status-dot/index.ts +11 -0
- package/src/components/status-dot/status-dot.schema.ts +45 -0
- package/src/components/status-dot/status-dot.svelte +67 -0
- package/src/components/status-dot/status-dot.types.ts +74 -0
- package/src/components/status-dot/status-dot.variables.ts +3 -0
- package/src/components/steps/index.ts +6 -0
- package/src/components/steps/steps.css +15 -1
- package/src/components/steps/steps.examples.json +6 -0
- package/src/components/steps/steps.schema.json +4 -0
- package/src/components/steps/steps.schema.ts +49 -0
- package/src/components/steps/steps.svelte +106 -0
- package/src/components/steps/steps.types.ts +54 -0
- package/src/components/steps/steps.variables.ts +3 -0
- package/src/components/surface/index.ts +6 -0
- package/src/components/surface/surface.schema.ts +29 -0
- package/src/components/surface/surface.svelte +19 -0
- package/src/components/surface/surface.types.ts +20 -0
- package/src/components/surface/surface.variables.ts +3 -0
- package/src/components/tab/index.ts +6 -0
- package/src/components/tab/tab.schema.ts +44 -0
- package/src/components/tab/tab.svelte +94 -0
- package/src/components/tab/tab.types.ts +25 -0
- package/src/components/tab/tab.variables.ts +3 -0
- package/src/components/tab-list/index.ts +6 -0
- package/src/components/tab-list/tab-list.schema.ts +33 -0
- package/src/components/tab-list/tab-list.svelte +21 -0
- package/src/components/tab-list/tab-list.types.ts +11 -0
- package/src/components/tab-list/tab-list.variables.ts +3 -0
- package/src/components/tab-panel/index.ts +6 -0
- package/src/components/tab-panel/tab-panel-aria-labelledby-harness.svelte +18 -0
- package/src/components/tab-panel/tab-panel.schema.ts +35 -0
- package/src/components/tab-panel/tab-panel.svelte +33 -0
- package/src/components/tab-panel/tab-panel.types.ts +16 -0
- package/src/components/tab-panel/tab-panel.variables.ts +3 -0
- package/src/components/table/index.ts +33 -0
- package/src/components/table/table.context.ts +65 -0
- package/src/components/table/table.schema.ts +49 -0
- package/src/components/table/table.svelte +61 -0
- package/src/components/table/table.types.ts +82 -0
- package/src/components/table/table.variables.ts +3 -0
- package/src/components/table-body/index.ts +6 -0
- package/src/components/table-body/table-body.schema.ts +25 -0
- package/src/components/table-body/table-body.svelte +14 -0
- package/src/components/table-body/table-body.types.ts +7 -0
- package/src/components/table-body/table-body.variables.ts +3 -0
- package/src/components/table-cell/index.ts +6 -0
- package/src/components/table-cell/table-cell.schema.ts +34 -0
- package/src/components/table-cell/table-cell.svelte +18 -0
- package/src/components/table-cell/table-cell.types.ts +32 -0
- package/src/components/table-cell/table-cell.variables.ts +3 -0
- package/src/components/table-header/index.ts +6 -0
- package/src/components/table-header/table-header.schema.ts +46 -0
- package/src/components/table-header/table-header.svelte +44 -0
- package/src/components/table-header/table-header.types.ts +24 -0
- package/src/components/table-header/table-header.variables.ts +3 -0
- package/src/components/table-header-cell/index.ts +6 -0
- package/src/components/table-header-cell/table-header-cell.schema.ts +43 -0
- package/src/components/table-header-cell/table-header-cell.svelte +73 -0
- package/src/components/table-header-cell/table-header-cell.types.ts +30 -0
- package/src/components/table-header-cell/table-header-cell.variables.ts +3 -0
- package/src/components/table-of-contents/index.ts +6 -0
- package/src/components/table-of-contents/table-of-contents.schema.ts +43 -0
- package/src/components/table-of-contents/table-of-contents.svelte +484 -0
- package/src/components/table-of-contents/table-of-contents.types.ts +70 -0
- package/src/components/table-of-contents/table-of-contents.variables.ts +9 -0
- package/src/components/table-row/index.ts +6 -0
- package/src/components/table-row/table-row.schema.ts +44 -0
- package/src/components/table-row/table-row.svelte +94 -0
- package/src/components/table-row/table-row.types.ts +51 -0
- package/src/components/table-row/table-row.variables.ts +3 -0
- package/src/components/tabs/index.ts +24 -0
- package/src/components/tabs/tabs-context.ts +29 -0
- package/src/components/tabs/tabs.schema.ts +49 -0
- package/src/components/tabs/tabs.svelte +216 -0
- package/src/components/tabs/tabs.types.ts +80 -0
- package/src/components/tabs/tabs.variables.ts +3 -0
- package/src/components/tag-input/index.ts +6 -0
- package/src/components/tag-input/tag-input.schema.ts +172 -0
- package/src/components/tag-input/tag-input.svelte +348 -0
- package/src/components/tag-input/tag-input.types.ts +98 -0
- package/src/components/tag-input/tag-input.variables.ts +3 -0
- package/src/components/team-section/index.ts +6 -0
- package/src/components/team-section/team-section.schema.ts +80 -0
- package/src/components/team-section/team-section.svelte +70 -0
- package/src/components/team-section/team-section.types.ts +59 -0
- package/src/components/team-section/team-section.variables.ts +3 -0
- package/src/components/testimonial-section/index.ts +10 -0
- package/src/components/testimonial-section/testimonial-section.schema.ts +75 -0
- package/src/components/testimonial-section/testimonial-section.svelte +56 -0
- package/src/components/testimonial-section/testimonial-section.types.ts +57 -0
- package/src/components/testimonial-section/testimonial-section.variables.ts +3 -0
- package/src/components/textarea/index.ts +6 -0
- package/src/components/textarea/textarea.schema.ts +65 -0
- package/src/components/textarea/textarea.svelte +69 -0
- package/src/components/textarea/textarea.types.ts +37 -0
- package/src/components/textarea/textarea.variables.ts +3 -0
- package/src/components/textarea-count.ts +19 -0
- package/src/components/time-field/index.ts +6 -0
- package/src/components/time-field/time-field.schema.ts +81 -0
- package/src/components/time-field/time-field.svelte +219 -0
- package/src/components/time-field/time-field.types.ts +70 -0
- package/src/components/time-field/time-field.variables.ts +3 -0
- package/src/components/timeline/index.ts +14 -0
- package/src/components/timeline/timeline-groups.ts +158 -0
- package/src/components/timeline/timeline.schema.ts +97 -0
- package/src/components/timeline/timeline.svelte +51 -0
- package/src/components/timeline/timeline.types.ts +80 -0
- package/src/components/timeline/timeline.variables.ts +3 -0
- package/src/components/toast-region/index.ts +14 -0
- package/src/components/toast-region/toast-region.schema.ts +37 -0
- package/src/components/toast-region/toast-region.svelte +627 -0
- package/src/components/toast-region/toast-region.types.ts +31 -0
- package/src/components/toast-region/toast-region.variables.ts +3 -0
- package/src/components/toggle/index.ts +6 -0
- package/src/components/toggle/toggle.schema.ts +64 -0
- package/src/components/toggle/toggle.svelte +73 -0
- package/src/components/toggle/toggle.types.ts +49 -0
- package/src/components/toggle/toggle.variables.ts +3 -0
- package/src/components/toolbar/index.ts +18 -0
- package/src/components/toolbar/toolbar-group.svelte +27 -0
- package/src/components/toolbar/toolbar-spacer.svelte +23 -0
- package/src/components/toolbar/toolbar.schema.ts +31 -0
- package/src/components/toolbar/toolbar.svelte +350 -0
- package/src/components/toolbar/toolbar.types.ts +59 -0
- package/src/components/toolbar/toolbar.variables.ts +3 -0
- package/src/components/tooltip/index.ts +6 -0
- package/src/components/tooltip/tooltip.schema.ts +38 -0
- package/src/components/tooltip/tooltip.svelte +192 -0
- package/src/components/tooltip/tooltip.types.ts +14 -0
- package/src/components/tooltip/tooltip.variables.ts +3 -0
- package/src/components/transfer-list/index.ts +10 -0
- package/src/components/transfer-list/transfer-list.schema.ts +68 -0
- package/src/components/transfer-list/transfer-list.svelte +358 -0
- package/src/components/transfer-list/transfer-list.types.ts +58 -0
- package/src/components/transfer-list/transfer-list.variables.ts +3 -0
- package/src/components/tree/index.ts +38 -0
- package/src/components/tree/tree-selection.ts +88 -0
- package/src/components/tree/tree.schema.ts +141 -0
- package/src/components/tree/tree.svelte +1205 -0
- package/src/components/tree/tree.types.ts +106 -0
- package/src/components/tree/tree.variables.ts +7 -0
- package/src/components/tree-item/index.ts +5 -0
- package/src/components/tree-item/tree-item.schema.ts +75 -0
- package/src/components/tree-item/tree-item.svelte +831 -0
- package/src/components/tree-item/tree-item.types.ts +53 -0
- package/src/components/tree-item/tree-item.variables.ts +3 -0
- package/src/components/typography/index.ts +6 -0
- package/src/components/typography/typography.schema.ts +158 -0
- package/src/components/typography/typography.svelte +45 -0
- package/src/components/typography/typography.types.ts +117 -0
- package/src/components/typography/typography.variables.ts +3 -0
- package/src/components/virtual-list/index.ts +16 -0
- package/src/components/virtual-list/virtual-list.schema.ts +61 -0
- package/src/components/virtual-list/virtual-list.svelte +130 -0
- package/src/components/virtual-list/virtual-list.types.ts +60 -0
- package/src/components/virtual-list/virtual-list.variables.ts +3 -0
- package/src/components/visually-hidden/index.ts +5 -0
- package/src/components/visually-hidden/visually-hidden.schema.ts +136 -0
- package/src/components/visually-hidden/visually-hidden.svelte +11 -0
- package/src/components/visually-hidden/visually-hidden.types.ts +70 -0
- package/src/components/visually-hidden/visually-hidden.variables.ts +3 -0
- package/src/components/waveform/index.ts +6 -0
- package/src/components/waveform/waveform.schema.ts +67 -0
- package/src/components/waveform/waveform.svelte +235 -0
- package/src/components/waveform/waveform.types.ts +54 -0
- package/src/components/waveform/waveform.variables.ts +3 -0
- package/src/index.ts +6 -1
- 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/components/schema-form/schema-form-async.fixture.d.ts +0 -1
- 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/action-row/action-row.schema.js +0 -75
- package/dist/server/components/action-row/action-row.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 -220
- 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 -47
- 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 -73
- 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 -62
- 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 -66
- 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 -42
- 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/source-diff-viewer/source-diff-viewer.schema.js +0 -45
- package/dist/server/components/source-diff-viewer/source-diff-viewer.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 -54
- 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.server-0jw824y0.js +0 -9
- package/dist/server/index.server-2a789g24.js +0 -1163
- package/dist/server/index.server-2ef5byty.js +0 -41
- package/dist/server/index.server-2ssdpqz0.js +0 -458
- package/dist/server/index.server-30zw3bv3.js +0 -52
- package/dist/server/index.server-3qdm4kcn.js +0 -1028
- package/dist/server/index.server-6dfav8r0.js +0 -142
- package/dist/server/index.server-98zf89h7.js +0 -3842
- package/dist/server/index.server-a3dhq5t8.js +0 -2309
- package/dist/server/index.server-e9eyxk7a.js +0 -9
- package/dist/server/index.server-ndss6byn.js +0 -123
- package/dist/server/index.server-pp6vn6z6.js +0 -294
- package/dist/server/index.server-qwknp759.js +0 -141
- package/dist/server/index.server-tbxe02px.js +0 -9
- package/dist/server/index.server-xpad931e.js +0 -85
- package/dist/server/index.server-yb5b3hnv.js +0 -9
- package/dist/server/index.server-ze9xj0kf.js +0 -100
- package/dist/server/index.server-zeqv7nrz.js +0 -184
- /package/dist/{index.browser.css → components/markdown-editor/index.css} +0 -0
|
@@ -0,0 +1,1509 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export {};
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<script lang="ts">
|
|
6
|
+
import { classNames } from '../../utilities/class-names.ts';
|
|
7
|
+
import { devWarn } from '../../utilities/dev-warn.ts';
|
|
8
|
+
import { useReducedMotion } from '../../utilities/use-reduced-motion.svelte.ts';
|
|
9
|
+
import { createFocusRegionNavigator } from './focus-navigation.ts';
|
|
10
|
+
import { createChangeTracker } from '../../utilities/change-tracker.svelte.ts';
|
|
11
|
+
import { stringifyOrNull } from '../../utilities/stringify.ts';
|
|
12
|
+
import MarkdownEditor from '../markdown-editor/markdown-editor.svelte';
|
|
13
|
+
import { contentEquals, normalize } from '@lostgradient/cinder/markdown/pipeline';
|
|
14
|
+
import { textOffsetToProseMirrorPosition } from '@lostgradient/cinder/editor';
|
|
15
|
+
import { createAnchorPlugin, anchorPluginKey, } from '@lostgradient/cinder/commentary/anchor-decorations';
|
|
16
|
+
import { reanchorQuote, ANCHOR_CONTEXT_LENGTH, generateId, extractMentions, createDocumentAnchor, } from '@lostgradient/cinder/commentary/comments';
|
|
17
|
+
import { buildAnchorFromSelection } from '@lostgradient/cinder/commentary/anchoring';
|
|
18
|
+
import ThreadPopover from './thread-popover.svelte';
|
|
19
|
+
import LiveRegion from './live-region.svelte';
|
|
20
|
+
import ExportActions from './export-actions.svelte';
|
|
21
|
+
import CommentSidebar from './comment-sidebar.svelte';
|
|
22
|
+
import FrontMatterFields from './front-matter-fields.svelte';
|
|
23
|
+
import ReviewEditorControls from './review-editor-controls.svelte';
|
|
24
|
+
import { bodyAnchorToDocumentAnchor, bodyAnchorUpdateToDocumentAnchorUpdate, combineFrontMatterAndBody, documentAnchorToBodyAnchor, documentPersistedAnchorToBodyAnchor, documentPositionToBodyPosition, parseReviewEditorFrontMatter, replaceFrontMatterData, remapDocumentAnchorBodyOffset, reviewStateToMarkdown, } from './review-editor-front-matter.ts';
|
|
25
|
+
import { getSelectionAnchorPosition, } from './review-editor-selection-geometry.ts';
|
|
26
|
+
import DiffViewer from '../diff-viewer/diff-viewer.svelte';
|
|
27
|
+
import SelectionPopover from '../selection-popover/selection-popover.svelte';
|
|
28
|
+
import { computeLineDiff, getDiffStats } from '@lostgradient/cinder/markdown/diff/line-diff';
|
|
29
|
+
import { generateMarkdownSummary, generateUnifiedDiff, generateCommentsExport, } from '@lostgradient/cinder/commentary/export';
|
|
30
|
+
// Shared reduced-motion preference (OVERLAY-POLICY: use the shared hook, not inline matchMedia).
|
|
31
|
+
const reducedMotion = useReducedMotion();
|
|
32
|
+
let { id, original = $bindable(''), value = $bindable(''), threads = $bindable([]), mode = 'edit', currentUserId, placeholder = 'Start writing...', name, class: className, onchange, onthreadcreate, onthreaddelete, oncommentcreate, oncommentupdate, oncommentdelete, snapshotMode = false, } = $props();
|
|
33
|
+
// Blur any focused element inside this component on mount when snapshotMode
|
|
34
|
+
// is active. This prevents the initial screenshot from capturing a focused
|
|
35
|
+
// ring or blinking caret. We track the container element via bind:this.
|
|
36
|
+
let containerElement = $state(null);
|
|
37
|
+
$effect(() => {
|
|
38
|
+
if (!snapshotMode)
|
|
39
|
+
return;
|
|
40
|
+
if (!containerElement)
|
|
41
|
+
return;
|
|
42
|
+
const active = document.activeElement;
|
|
43
|
+
if (active instanceof HTMLElement && containerElement.contains(active)) {
|
|
44
|
+
active.blur();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// Reference to the underlying MarkdownEditor. Using the imported component
|
|
48
|
+
// as a type is the Svelte ambient pattern — `*.svelte` declares the import
|
|
49
|
+
// as a constructable type with the component's `export function` methods.
|
|
50
|
+
let editorRef = $state();
|
|
51
|
+
// Reference to LiveRegion for screen reader announcements (DEP-47)
|
|
52
|
+
let liveRegionRef = $state();
|
|
53
|
+
// Track when editor view is ready (for effects that need to wait for async editor creation)
|
|
54
|
+
let editorViewReady = $state(false);
|
|
55
|
+
// Track current selection for thread creation
|
|
56
|
+
let currentSelection = $state(null);
|
|
57
|
+
// =========================================================================
|
|
58
|
+
// Thread Popover State
|
|
59
|
+
// =========================================================================
|
|
60
|
+
// Thread popover state
|
|
61
|
+
let popoverThreadId = $state(null);
|
|
62
|
+
let popoverPosition = $state(null);
|
|
63
|
+
// Timer handle for panel selection scroll-then-position delay.
|
|
64
|
+
// Stored at component level so we can cancel it when switching threads.
|
|
65
|
+
let selectTimeoutId = null;
|
|
66
|
+
// Cleanup: cancel pending panel selection timeout on component unmount.
|
|
67
|
+
// This prevents the callback from executing on a destroyed component.
|
|
68
|
+
$effect(() => {
|
|
69
|
+
return () => {
|
|
70
|
+
if (selectTimeoutId !== null) {
|
|
71
|
+
clearTimeout(selectTimeoutId);
|
|
72
|
+
selectTimeoutId = null;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
// Internal active thread tracking (not exposed as bindable prop)
|
|
77
|
+
let activeThreadId = $state(null);
|
|
78
|
+
// Comment sidebar toggle state
|
|
79
|
+
let sidebarOpen = $state(false);
|
|
80
|
+
const currentDocument = $derived(parseReviewEditorFrontMatter(value));
|
|
81
|
+
const editorValue = $derived(currentDocument.body);
|
|
82
|
+
const viewPanelIds = $derived({
|
|
83
|
+
editor: `${id}-editor-panel`,
|
|
84
|
+
diff: `${id}-diff-panel`,
|
|
85
|
+
summary: `${id}-summary-panel`,
|
|
86
|
+
});
|
|
87
|
+
// =========================================================================
|
|
88
|
+
// View Switching State (DEP-47)
|
|
89
|
+
// =========================================================================
|
|
90
|
+
/** Active view: editor for editing, diff for comparing, summary for review */
|
|
91
|
+
let activeView = $state('editor');
|
|
92
|
+
/** Diff view mode: unified shows all changes, final shows current state, original shows baseline */
|
|
93
|
+
let diffViewMode = $state('unified');
|
|
94
|
+
// =========================================================================
|
|
95
|
+
// Diff Statistics (DEP-47)
|
|
96
|
+
// =========================================================================
|
|
97
|
+
/**
|
|
98
|
+
* Compute diff statistics from original vs current content.
|
|
99
|
+
* Uses the same line-diff algorithm as DiffViewer for consistency.
|
|
100
|
+
*/
|
|
101
|
+
const diffStats = $derived.by(() => {
|
|
102
|
+
if (!original) {
|
|
103
|
+
return { added: 0, removed: 0, modified: 0 };
|
|
104
|
+
}
|
|
105
|
+
// Normalize both inputs to avoid false positives from formatting differences
|
|
106
|
+
const normalizedOriginal = normalize(original);
|
|
107
|
+
const normalizedCurrent = normalize(value);
|
|
108
|
+
const lineDiffs = computeLineDiff(normalizedOriginal, normalizedCurrent);
|
|
109
|
+
return getDiffStats(lineDiffs);
|
|
110
|
+
});
|
|
111
|
+
/** Whether there are any content changes */
|
|
112
|
+
const hasContentChanges = $derived(diffStats.added > 0 || diffStats.removed > 0 || diffStats.modified > 0);
|
|
113
|
+
/** Total comment count (excluding soft-deleted comments) */
|
|
114
|
+
const commentCount = $derived(threads.reduce((count, thread) => {
|
|
115
|
+
return count + thread.comments.filter((c) => !c.deletedAt).length;
|
|
116
|
+
}, 0));
|
|
117
|
+
/**
|
|
118
|
+
* Summary content for the Summary view (without the "# Review Summary" heading).
|
|
119
|
+
* The heading is useful for clipboard exports but redundant in the UI preview
|
|
120
|
+
* since the view tab already indicates this is a summary.
|
|
121
|
+
*/
|
|
122
|
+
const summaryContent = $derived.by(() => {
|
|
123
|
+
const result = exportMarkdownSummary();
|
|
124
|
+
// Strip the "# Review Summary\n" heading from the beginning
|
|
125
|
+
return result.markdown.replace(/^# Review Summary\n+/, '');
|
|
126
|
+
});
|
|
127
|
+
// =========================================================================
|
|
128
|
+
// Selection Popover State (DEP-47)
|
|
129
|
+
// =========================================================================
|
|
130
|
+
/** Position for the selection popover (viewport-relative) */
|
|
131
|
+
let selectionPopoverPosition = $state(null);
|
|
132
|
+
/**
|
|
133
|
+
* Captured selection range for thread creation.
|
|
134
|
+
* We capture this when the popover appears because clicking the popover button
|
|
135
|
+
* will collapse the browser selection before handleSelectionComment runs.
|
|
136
|
+
*/
|
|
137
|
+
let capturedSelectionForPopover = $state(null);
|
|
138
|
+
/** Whether the selection popover is in expanded form state (user clicked to add comment) */
|
|
139
|
+
let selectionPopoverExpanded = $state(false);
|
|
140
|
+
/** Whether the selection popover should be visible */
|
|
141
|
+
const showSelectionPopover = $derived(activeView === 'editor' &&
|
|
142
|
+
mode === 'edit' &&
|
|
143
|
+
// Must have a user ID to create comments
|
|
144
|
+
currentUserId !== undefined &&
|
|
145
|
+
// Position is only set when browser selection is non-collapsed
|
|
146
|
+
// (checked via window.getSelection() in the debounced handler)
|
|
147
|
+
// OR the popover is already expanded (user is composing a comment)
|
|
148
|
+
(selectionPopoverPosition !== null || selectionPopoverExpanded) &&
|
|
149
|
+
// Don't show if a thread popover is already open
|
|
150
|
+
popoverThreadId === null);
|
|
151
|
+
/** Delay for scroll-then-position pattern (matches smooth scroll duration) */
|
|
152
|
+
const POSITION_DELAY_MS = 350;
|
|
153
|
+
/**
|
|
154
|
+
* Get the preferred scroll behavior respecting prefers-reduced-motion.
|
|
155
|
+
* @returns 'instant' if user prefers reduced motion, 'smooth' otherwise
|
|
156
|
+
*/
|
|
157
|
+
function getScrollBehavior() {
|
|
158
|
+
return reducedMotion.current ? 'instant' : 'smooth';
|
|
159
|
+
}
|
|
160
|
+
// =========================================================================
|
|
161
|
+
// Screen Reader Announcements (DEP-47)
|
|
162
|
+
// =========================================================================
|
|
163
|
+
/**
|
|
164
|
+
* Announce a message to screen readers via the LiveRegion component.
|
|
165
|
+
* Safe to call before the ref is available (no-op in that case).
|
|
166
|
+
*
|
|
167
|
+
* @param message - The message to announce
|
|
168
|
+
* @param priority - 'polite' (default) or 'assertive'
|
|
169
|
+
*/
|
|
170
|
+
function announce(message, priority = 'polite') {
|
|
171
|
+
liveRegionRef?.announce(message, priority);
|
|
172
|
+
}
|
|
173
|
+
// Get the popover thread
|
|
174
|
+
const popoverThread = $derived.by(() => {
|
|
175
|
+
if (!popoverThreadId)
|
|
176
|
+
return null;
|
|
177
|
+
return threads.find((t) => t.id === popoverThreadId) ?? null;
|
|
178
|
+
});
|
|
179
|
+
// Clear popover if thread is deleted
|
|
180
|
+
$effect(() => {
|
|
181
|
+
if (popoverThreadId && !popoverThread) {
|
|
182
|
+
popoverThreadId = null;
|
|
183
|
+
popoverPosition = null;
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
// Clear internal active thread if it no longer exists
|
|
187
|
+
$effect(() => {
|
|
188
|
+
if (activeThreadId && !threads.some((t) => t.id === activeThreadId)) {
|
|
189
|
+
activeThreadId = null;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
// Deep linking: open popover when activeThreadId is set externally (e.g., URL navigation).
|
|
193
|
+
$effect(() => {
|
|
194
|
+
let positionTimeoutId = null;
|
|
195
|
+
if (activeThreadId && popoverThreadId !== activeThreadId) {
|
|
196
|
+
const thread = threads.find((t) => t.id === activeThreadId);
|
|
197
|
+
if (thread) {
|
|
198
|
+
const threadIdToOpen = activeThreadId;
|
|
199
|
+
// First, scroll the anchor into view. We defer popover positioning until
|
|
200
|
+
// after the scroll completes to avoid the popover appearing off-screen.
|
|
201
|
+
scrollAnchorIntoView(threadIdToOpen);
|
|
202
|
+
// After scrolling, calculate position and open the popover.
|
|
203
|
+
// We re-fetch the thread inside the callback to avoid using stale data
|
|
204
|
+
// if the threads array changes during the scroll delay.
|
|
205
|
+
positionTimeoutId = setTimeout(() => {
|
|
206
|
+
// Re-fetch thread to ensure we have current data (thread may have been deleted/modified)
|
|
207
|
+
const currentThread = threads.find((t) => t.id === threadIdToOpen);
|
|
208
|
+
if (!currentThread)
|
|
209
|
+
return;
|
|
210
|
+
const pos = calculateViewportPosition(currentThread.anchor.from);
|
|
211
|
+
if (pos) {
|
|
212
|
+
popoverPosition = { x: pos.left + 16, y: pos.top };
|
|
213
|
+
popoverThreadId = threadIdToOpen;
|
|
214
|
+
}
|
|
215
|
+
}, POSITION_DELAY_MS);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Cleanup: cancel pending timeout if effect re-runs or component unmounts
|
|
219
|
+
return () => {
|
|
220
|
+
if (positionTimeoutId !== null) {
|
|
221
|
+
clearTimeout(positionTimeoutId);
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
/**
|
|
226
|
+
* Scroll the editor to bring an anchor position into view.
|
|
227
|
+
* @param threadId - The thread ID to scroll to (passed explicitly to avoid stale closure)
|
|
228
|
+
*/
|
|
229
|
+
function scrollAnchorIntoView(threadId) {
|
|
230
|
+
// Query using the passed threadId, not the reactive activeThreadId,
|
|
231
|
+
// to avoid race conditions when called from setTimeout.
|
|
232
|
+
// Scope query to editor DOM to handle multiple ReviewEditor instances on page.
|
|
233
|
+
const editorDom = editorRef?.getView()?.dom;
|
|
234
|
+
const anchorElement = editorDom?.querySelector(`[data-thread-id="${threadId}"]`);
|
|
235
|
+
if (anchorElement) {
|
|
236
|
+
anchorElement.scrollIntoView({ behavior: getScrollBehavior(), block: 'center' });
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// =========================================================================
|
|
240
|
+
// Thread Popover Handlers
|
|
241
|
+
// =========================================================================
|
|
242
|
+
/**
|
|
243
|
+
* Handle closing the thread popover.
|
|
244
|
+
* Also clears activeThreadId to prevent the deep-linking effect from
|
|
245
|
+
* immediately reopening the popover, and cancels any pending panel selection timeout.
|
|
246
|
+
*/
|
|
247
|
+
function handlePopoverClose() {
|
|
248
|
+
// Cancel any pending panel selection timeout
|
|
249
|
+
if (selectTimeoutId !== null) {
|
|
250
|
+
clearTimeout(selectTimeoutId);
|
|
251
|
+
selectTimeoutId = null;
|
|
252
|
+
}
|
|
253
|
+
popoverThreadId = null;
|
|
254
|
+
popoverPosition = null;
|
|
255
|
+
activeThreadId = null;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Handle thread delete from popover.
|
|
259
|
+
*/
|
|
260
|
+
function handlePopoverDelete(threadId) {
|
|
261
|
+
if (currentUserId) {
|
|
262
|
+
deleteThread(threadId);
|
|
263
|
+
handlePopoverClose();
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Handle comment update from popover.
|
|
268
|
+
*/
|
|
269
|
+
function handlePopoverCommentUpdate(threadId, commentId, body) {
|
|
270
|
+
updateComment(threadId, commentId, body);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Handle comment delete from popover.
|
|
274
|
+
*/
|
|
275
|
+
function handlePopoverCommentDelete(threadId, commentId) {
|
|
276
|
+
deleteComment(threadId, commentId);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Handle comment create from popover.
|
|
280
|
+
*/
|
|
281
|
+
function handlePopoverCommentCreate(threadId, body) {
|
|
282
|
+
if (currentUserId) {
|
|
283
|
+
createComment(threadId, body, currentUserId);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Calculate position for fixed-position popovers near an anchor.
|
|
288
|
+
* Returns viewport-relative coordinates for use with position: fixed elements
|
|
289
|
+
* (ThreadPopover).
|
|
290
|
+
*/
|
|
291
|
+
function calculateViewportPosition(from) {
|
|
292
|
+
const view = editorRef?.getView();
|
|
293
|
+
if (!view)
|
|
294
|
+
return null;
|
|
295
|
+
try {
|
|
296
|
+
const coords = view.coordsAtPos(documentPositionToBodyPosition(from, currentDocument.bodyOffset));
|
|
297
|
+
if (coords) {
|
|
298
|
+
// coords are already viewport-relative from ProseMirror
|
|
299
|
+
return {
|
|
300
|
+
top: coords.top + 24, // Below the anchor
|
|
301
|
+
left: Math.max(16, coords.left), // Minimum 16px from viewport edge
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
// Position may be invalid
|
|
307
|
+
}
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
// =========================================================================
|
|
311
|
+
// Anchor Plugin Integration (DEP-39)
|
|
312
|
+
// =========================================================================
|
|
313
|
+
// Track last synced state to prevent thrashing
|
|
314
|
+
let lastSyncedFingerprint = null;
|
|
315
|
+
// Pending state for deferred re-anchoring (setState flow)
|
|
316
|
+
let pendingState = $state(null);
|
|
317
|
+
/**
|
|
318
|
+
* Create fingerprint including all mutable anchor fields.
|
|
319
|
+
* This prevents sync thrashing when quote/prefix/suffix change.
|
|
320
|
+
*/
|
|
321
|
+
function createSyncFingerprint(threadsToSync) {
|
|
322
|
+
return threadsToSync
|
|
323
|
+
.map((t) => {
|
|
324
|
+
const a = t.anchor;
|
|
325
|
+
// Include lastKnownOffset to propagate disambiguation updates
|
|
326
|
+
return `${t.id}:${a.from}:${a.to}:${a.quote}:${a.prefix}:${a.suffix}:${a.lastKnownOffset ?? ''}`;
|
|
327
|
+
})
|
|
328
|
+
.join('|');
|
|
329
|
+
}
|
|
330
|
+
function createPluginSyncFingerprint(threadsToSync) {
|
|
331
|
+
return `${currentDocument.bodyOffset}|${createSyncFingerprint(threadsToSync)}`;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Handle anchor position updates from the plugin.
|
|
335
|
+
* Called when the plugin detects position changes.
|
|
336
|
+
*/
|
|
337
|
+
function handleAnchorsUpdate(updates) {
|
|
338
|
+
// Update published threads
|
|
339
|
+
threads = threads.map((thread) => {
|
|
340
|
+
const update = updates.find((u) => u.threadId === thread.id);
|
|
341
|
+
if (update) {
|
|
342
|
+
const documentUpdate = bodyAnchorUpdateToDocumentAnchorUpdate(update, currentDocument.bodyOffset);
|
|
343
|
+
return {
|
|
344
|
+
...thread,
|
|
345
|
+
anchor: {
|
|
346
|
+
...thread.anchor,
|
|
347
|
+
from: documentUpdate.from,
|
|
348
|
+
to: documentUpdate.to,
|
|
349
|
+
quote: documentUpdate.quote,
|
|
350
|
+
prefix: documentUpdate.prefix,
|
|
351
|
+
suffix: documentUpdate.suffix,
|
|
352
|
+
lastKnownOffset: documentUpdate.lastKnownOffset,
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
return thread;
|
|
357
|
+
});
|
|
358
|
+
// Update fingerprint to skip re-sync
|
|
359
|
+
lastSyncedFingerprint = createPluginSyncFingerprint(threads);
|
|
360
|
+
}
|
|
361
|
+
// Create anchor plugin in instance script (per-instance, before mount)
|
|
362
|
+
// This runs once per ReviewEditor instance during initialization
|
|
363
|
+
const anchorPlugin = createAnchorPlugin({
|
|
364
|
+
onAnchorsUpdate: handleAnchorsUpdate,
|
|
365
|
+
onAnchorClick: handleAnchorClick,
|
|
366
|
+
});
|
|
367
|
+
/**
|
|
368
|
+
* Handle click on an anchor decoration.
|
|
369
|
+
* Opens the thread popover at the click location.
|
|
370
|
+
*/
|
|
371
|
+
function handleAnchorClick(threadId, event) {
|
|
372
|
+
// Cancel any pending panel selection timer to prevent race conditions
|
|
373
|
+
// where the timer callback would unexpectedly switch to a different thread
|
|
374
|
+
if (selectTimeoutId !== null) {
|
|
375
|
+
clearTimeout(selectTimeoutId);
|
|
376
|
+
selectTimeoutId = null;
|
|
377
|
+
}
|
|
378
|
+
// Clear selection popover state when opening a thread popover
|
|
379
|
+
// Otherwise stale state persists and the popover may reappear at an invalid position
|
|
380
|
+
selectionPopoverPosition = null;
|
|
381
|
+
capturedSelectionForPopover = null;
|
|
382
|
+
selectionPopoverExpanded = false;
|
|
383
|
+
// Set active thread and open popover
|
|
384
|
+
activeThreadId = threadId;
|
|
385
|
+
// Find the thread to show the popover
|
|
386
|
+
const thread = threads.find((t) => t.id === threadId);
|
|
387
|
+
if (thread) {
|
|
388
|
+
// Position popover near the click location
|
|
389
|
+
popoverPosition = { x: event.clientX + 16, y: event.clientY };
|
|
390
|
+
popoverThreadId = threadId;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Sync threads to the anchor plugin via meta-transaction.
|
|
395
|
+
*/
|
|
396
|
+
function syncThreadsToPlugin(threadsToSync) {
|
|
397
|
+
const view = editorRef?.getView();
|
|
398
|
+
if (!view)
|
|
399
|
+
return;
|
|
400
|
+
const fingerprint = createPluginSyncFingerprint(threadsToSync);
|
|
401
|
+
// Skip if already synced
|
|
402
|
+
if (fingerprint === lastSyncedFingerprint)
|
|
403
|
+
return;
|
|
404
|
+
lastSyncedFingerprint = fingerprint;
|
|
405
|
+
view.dispatch(view.state.tr.setMeta(anchorPluginKey, {
|
|
406
|
+
type: 'sync',
|
|
407
|
+
threads: threadsToSync.map((thread) => ({
|
|
408
|
+
...thread,
|
|
409
|
+
anchor: documentAnchorToBodyAnchor(thread.anchor, currentDocument.bodyOffset),
|
|
410
|
+
})),
|
|
411
|
+
source: 'external',
|
|
412
|
+
}));
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Attempt re-anchoring for pending state.
|
|
416
|
+
* Called when setState is invoked and when editor content changes.
|
|
417
|
+
*
|
|
418
|
+
* Threads whose anchor text cannot be found are removed (auto-delete behavior).
|
|
419
|
+
*/
|
|
420
|
+
function attemptReanchoring() {
|
|
421
|
+
if (!pendingState)
|
|
422
|
+
return;
|
|
423
|
+
const view = editorRef?.getView();
|
|
424
|
+
if (!view)
|
|
425
|
+
return;
|
|
426
|
+
// Compare markdown using contentEquals (handles normalization)
|
|
427
|
+
const currentMarkdown = editorRef?.getMarkdown() ?? '';
|
|
428
|
+
const pendingDocument = parseReviewEditorFrontMatter(pendingState.content);
|
|
429
|
+
const expectedMarkdown = pendingDocument.body;
|
|
430
|
+
if (!contentEquals(currentMarkdown, expectedMarkdown)) {
|
|
431
|
+
// Content not synced yet - will retry when editor updates
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
const state = pendingState;
|
|
435
|
+
pendingState = null;
|
|
436
|
+
const { doc } = view.state;
|
|
437
|
+
const documentText = doc.textBetween(0, doc.content.size, '\n');
|
|
438
|
+
// Re-anchor threads, filtering out those that can't be found
|
|
439
|
+
const reanchoredThreads = [];
|
|
440
|
+
for (const persistedThread of state.threads) {
|
|
441
|
+
const bodyPersistedAnchor = documentPersistedAnchorToBodyAnchor(persistedThread.anchor, pendingDocument.bodyOffset);
|
|
442
|
+
const result = reanchorQuote(documentText, bodyPersistedAnchor);
|
|
443
|
+
// If anchor text not found, skip this thread (auto-delete)
|
|
444
|
+
if (!result.found) {
|
|
445
|
+
onthreaddelete?.({ threadId: persistedThread.id });
|
|
446
|
+
continue;
|
|
447
|
+
}
|
|
448
|
+
const from = textOffsetToProseMirrorPosition(doc, result.from);
|
|
449
|
+
const to = textOffsetToProseMirrorPosition(doc, result.to);
|
|
450
|
+
if (from !== null && to !== null) {
|
|
451
|
+
// Extract the matched quote and context from the current document
|
|
452
|
+
// This prevents the plugin from detecting false drift on subsequent transactions
|
|
453
|
+
const matchedQuote = documentText.slice(result.from, result.to);
|
|
454
|
+
const newPrefix = documentText.slice(Math.max(0, result.from - ANCHOR_CONTEXT_LENGTH), result.from);
|
|
455
|
+
const newSuffix = documentText.slice(result.to, Math.min(documentText.length, result.to + ANCHOR_CONTEXT_LENGTH));
|
|
456
|
+
reanchoredThreads.push({
|
|
457
|
+
...persistedThread,
|
|
458
|
+
anchor: {
|
|
459
|
+
...persistedThread.anchor,
|
|
460
|
+
from: from + pendingDocument.bodyOffset,
|
|
461
|
+
to: to + pendingDocument.bodyOffset,
|
|
462
|
+
quote: matchedQuote,
|
|
463
|
+
prefix: newPrefix,
|
|
464
|
+
suffix: newSuffix,
|
|
465
|
+
status: 'anchored',
|
|
466
|
+
lastKnownOffset: result.from + pendingDocument.bodyOffset,
|
|
467
|
+
},
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
threads = reanchoredThreads;
|
|
472
|
+
// Sync threads to plugin
|
|
473
|
+
syncThreadsToPlugin(threads);
|
|
474
|
+
}
|
|
475
|
+
// Retry re-anchoring when editor content changes (handles async content sync)
|
|
476
|
+
// We read `value` to create a dependency so this effect re-runs when content changes.
|
|
477
|
+
// This is critical for setState flow where pendingState exists but content isn't synced yet.
|
|
478
|
+
$effect(() => {
|
|
479
|
+
void value; // Create dependency on value
|
|
480
|
+
if (pendingState && editorRef?.getView()) {
|
|
481
|
+
attemptReanchoring();
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
// Sync threads to plugin when they change externally
|
|
485
|
+
// Runs for empty arrays too - needed to clear stale decorations when all threads removed
|
|
486
|
+
$effect(() => {
|
|
487
|
+
// Only sync if editor is ready and we don't have pending state
|
|
488
|
+
if (editorRef?.getView() && !pendingState) {
|
|
489
|
+
syncThreadsToPlugin(threads);
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
// Determine if editor is readonly based on mode
|
|
493
|
+
const isReadonly = $derived(mode === 'readonly');
|
|
494
|
+
// Clear selection popover state when mode changes to readonly
|
|
495
|
+
// This prevents stale popover state from persisting across mode transitions
|
|
496
|
+
$effect(() => {
|
|
497
|
+
if (mode === 'readonly') {
|
|
498
|
+
selectionPopoverPosition = null;
|
|
499
|
+
capturedSelectionForPopover = null;
|
|
500
|
+
selectionPopoverExpanded = false;
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
// =========================================================================
|
|
504
|
+
// Optimized Change Detection (DEP-47)
|
|
505
|
+
// =========================================================================
|
|
506
|
+
/**
|
|
507
|
+
* Change tracker with lazy dirty flag and debounced semantic verification.
|
|
508
|
+
* Avoids per-keystroke normalize() calls which are expensive for large documents.
|
|
509
|
+
*/
|
|
510
|
+
const changeTracker = createChangeTracker({
|
|
511
|
+
debounceMs: 300,
|
|
512
|
+
includeFrontMatter: true,
|
|
513
|
+
});
|
|
514
|
+
// Wire baseline and current values to the tracker
|
|
515
|
+
$effect(() => {
|
|
516
|
+
changeTracker.setBaseline(original);
|
|
517
|
+
});
|
|
518
|
+
$effect(() => {
|
|
519
|
+
changeTracker.setCurrent(value);
|
|
520
|
+
});
|
|
521
|
+
/** Timeout ID for debounced selection position calculation */
|
|
522
|
+
let selectionTimeoutId = null;
|
|
523
|
+
/** Debounce delay for selection position calculation (ms) */
|
|
524
|
+
const SELECTION_DEBOUNCE_MS = 20;
|
|
525
|
+
// Listen to browser's native selectionchange event
|
|
526
|
+
// This is more reliable than ProseMirror's selection events for detecting visual selection
|
|
527
|
+
$effect(() => {
|
|
528
|
+
if (typeof document === 'undefined')
|
|
529
|
+
return;
|
|
530
|
+
function handleBrowserSelectionChange() {
|
|
531
|
+
// Clear any pending calculation
|
|
532
|
+
if (selectionTimeoutId !== null) {
|
|
533
|
+
clearTimeout(selectionTimeoutId);
|
|
534
|
+
selectionTimeoutId = null;
|
|
535
|
+
}
|
|
536
|
+
// Only process in edit mode
|
|
537
|
+
if (mode !== 'edit') {
|
|
538
|
+
selectionPopoverPosition = null;
|
|
539
|
+
capturedSelectionForPopover = null;
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
// Don't clear the popover if focus is within it (user is interacting with the form)
|
|
543
|
+
const selectionPopoverElement = document.getElementById(`${id}-selection-popover`);
|
|
544
|
+
if (selectionPopoverElement?.contains(document.activeElement)) {
|
|
545
|
+
return;
|
|
546
|
+
}
|
|
547
|
+
// Don't clear the popover if it's expanded (user is composing a comment)
|
|
548
|
+
// This is especially important for Safari where clicking a button doesn't focus it,
|
|
549
|
+
// which would otherwise cause the popover to close unexpectedly
|
|
550
|
+
if (selectionPopoverExpanded) {
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
const browserSelection = window.getSelection();
|
|
554
|
+
// If selection is collapsed, hide popover immediately and reset all popover state
|
|
555
|
+
if (!browserSelection || browserSelection.isCollapsed) {
|
|
556
|
+
selectionPopoverPosition = null;
|
|
557
|
+
capturedSelectionForPopover = null;
|
|
558
|
+
selectionPopoverExpanded = false;
|
|
559
|
+
return;
|
|
560
|
+
}
|
|
561
|
+
// Check if selection is within the actual editor DOM (not front matter controls,
|
|
562
|
+
// sidebar, or toolbar content).
|
|
563
|
+
const anchorNode = browserSelection.anchorNode;
|
|
564
|
+
const editorDom = editorRef?.getView()?.dom;
|
|
565
|
+
if (!editorDom || !anchorNode || !editorDom.contains(anchorNode)) {
|
|
566
|
+
selectionPopoverPosition = null;
|
|
567
|
+
capturedSelectionForPopover = null;
|
|
568
|
+
selectionPopoverExpanded = false;
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
// Debounce position calculation to let rapid selection events settle
|
|
572
|
+
selectionTimeoutId = setTimeout(() => {
|
|
573
|
+
selectionTimeoutId = null;
|
|
574
|
+
// Re-check selection after debounce
|
|
575
|
+
const sel = window.getSelection();
|
|
576
|
+
if (!sel || sel.isCollapsed) {
|
|
577
|
+
selectionPopoverPosition = null;
|
|
578
|
+
capturedSelectionForPopover = null;
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
// Get the selection range and compute position from the browser's DOM
|
|
582
|
+
const range = sel.getRangeAt(0);
|
|
583
|
+
const anchorPosition = getSelectionAnchorPosition(range);
|
|
584
|
+
if (anchorPosition) {
|
|
585
|
+
// Capture the ProseMirror selection range for thread creation
|
|
586
|
+
// We need this because clicking the popover will collapse the selection
|
|
587
|
+
// Get selection directly from the view since currentSelection state
|
|
588
|
+
// may not be updated yet when the native selectionchange fires
|
|
589
|
+
const view = editorRef?.getView();
|
|
590
|
+
if (view) {
|
|
591
|
+
const { from, to } = view.state.selection;
|
|
592
|
+
if (from !== to) {
|
|
593
|
+
capturedSelectionForPopover = { from, to };
|
|
594
|
+
// Only show popover when we have a valid captured selection
|
|
595
|
+
// This prevents showing a popover that can't submit due to timing mismatches
|
|
596
|
+
selectionPopoverPosition = anchorPosition;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
}, SELECTION_DEBOUNCE_MS);
|
|
601
|
+
}
|
|
602
|
+
document.addEventListener('selectionchange', handleBrowserSelectionChange);
|
|
603
|
+
return () => {
|
|
604
|
+
document.removeEventListener('selectionchange', handleBrowserSelectionChange);
|
|
605
|
+
if (selectionTimeoutId !== null) {
|
|
606
|
+
clearTimeout(selectionTimeoutId);
|
|
607
|
+
selectionTimeoutId = null;
|
|
608
|
+
}
|
|
609
|
+
};
|
|
610
|
+
});
|
|
611
|
+
// Handle selection changes from ProseMirror (for currentSelection state)
|
|
612
|
+
function handleSelectionChange(selection) {
|
|
613
|
+
// Mark editor as ready on first selection change (fired when editor initializes)
|
|
614
|
+
if (!editorViewReady) {
|
|
615
|
+
editorViewReady = true;
|
|
616
|
+
}
|
|
617
|
+
currentSelection = selection;
|
|
618
|
+
}
|
|
619
|
+
// Handle content changes
|
|
620
|
+
function handleChange(newValue) {
|
|
621
|
+
value = newValue;
|
|
622
|
+
onchange?.(newValue);
|
|
623
|
+
}
|
|
624
|
+
function handleEditorBodyChange(newBody) {
|
|
625
|
+
handleChange(combineFrontMatterAndBody(currentDocument, newBody));
|
|
626
|
+
}
|
|
627
|
+
function handleFrontMatterChange(data) {
|
|
628
|
+
const previousBodyOffset = currentDocument.bodyOffset;
|
|
629
|
+
const nextValue = replaceFrontMatterData(value, data);
|
|
630
|
+
const nextDocument = parseReviewEditorFrontMatter(nextValue);
|
|
631
|
+
if (previousBodyOffset !== nextDocument.bodyOffset) {
|
|
632
|
+
threads = threads.map((thread) => ({
|
|
633
|
+
...thread,
|
|
634
|
+
anchor: remapDocumentAnchorBodyOffset(thread.anchor, previousBodyOffset, nextDocument.bodyOffset, nextValue),
|
|
635
|
+
}));
|
|
636
|
+
}
|
|
637
|
+
handleChange(nextValue);
|
|
638
|
+
}
|
|
639
|
+
// =========================================================================
|
|
640
|
+
// Imperative Methods
|
|
641
|
+
// =========================================================================
|
|
642
|
+
/** Focus the editor */
|
|
643
|
+
export function focus() {
|
|
644
|
+
editorRef?.focus();
|
|
645
|
+
}
|
|
646
|
+
/** Get current markdown content */
|
|
647
|
+
export function getMarkdown() {
|
|
648
|
+
const body = editorRef?.getMarkdown() ?? currentDocument.body;
|
|
649
|
+
return combineFrontMatterAndBody(currentDocument, body);
|
|
650
|
+
}
|
|
651
|
+
/** Set markdown content */
|
|
652
|
+
export function setMarkdown(content) {
|
|
653
|
+
value = content;
|
|
654
|
+
editorRef?.setMarkdown(parseReviewEditorFrontMatter(content).body);
|
|
655
|
+
}
|
|
656
|
+
/** Get current AST */
|
|
657
|
+
export function getAst() {
|
|
658
|
+
return editorRef?.getAst();
|
|
659
|
+
}
|
|
660
|
+
/** Get current selection */
|
|
661
|
+
export function getSelection() {
|
|
662
|
+
const selection = editorRef?.getSelection();
|
|
663
|
+
if (!selection)
|
|
664
|
+
return null;
|
|
665
|
+
return {
|
|
666
|
+
...selection,
|
|
667
|
+
from: selection.from + currentDocument.bodyOffset,
|
|
668
|
+
to: selection.to + currentDocument.bodyOffset,
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
/** Scroll to a specific thread's anchor position in the editor */
|
|
672
|
+
export function scrollToThread(threadId) {
|
|
673
|
+
const thread = threads.find((t) => t.id === threadId);
|
|
674
|
+
if (!thread)
|
|
675
|
+
return;
|
|
676
|
+
const view = editorRef?.getView();
|
|
677
|
+
if (view && thread.anchor.from !== undefined) {
|
|
678
|
+
// Scroll the anchor position into view
|
|
679
|
+
const coords = view.coordsAtPos(documentPositionToBodyPosition(thread.anchor.from, currentDocument.bodyOffset));
|
|
680
|
+
if (coords) {
|
|
681
|
+
view.dom.scrollTo({
|
|
682
|
+
top: coords.top - 100, // Offset from top
|
|
683
|
+
behavior: getScrollBehavior(),
|
|
684
|
+
});
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
/**
|
|
689
|
+
* Handle thread selection from the comment sidebar.
|
|
690
|
+
* Scrolls to the thread and opens its popover.
|
|
691
|
+
*/
|
|
692
|
+
function handleSidebarThreadSelect(threadId) {
|
|
693
|
+
const thread = threads.find((t) => t.id === threadId);
|
|
694
|
+
if (!thread)
|
|
695
|
+
return;
|
|
696
|
+
// Set active thread
|
|
697
|
+
activeThreadId = threadId;
|
|
698
|
+
// Scroll to the thread
|
|
699
|
+
scrollToThread(threadId);
|
|
700
|
+
// Open popover at anchor position after scroll completes
|
|
701
|
+
setTimeout(() => {
|
|
702
|
+
const view = editorRef?.getView();
|
|
703
|
+
if (view && thread.anchor.from !== undefined) {
|
|
704
|
+
const coords = view.coordsAtPos(documentPositionToBodyPosition(thread.anchor.from, currentDocument.bodyOffset));
|
|
705
|
+
if (coords) {
|
|
706
|
+
popoverPosition = { x: coords.left + 16, y: coords.top };
|
|
707
|
+
popoverThreadId = threadId;
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
}, POSITION_DELAY_MS);
|
|
711
|
+
}
|
|
712
|
+
/**
|
|
713
|
+
* Handle request to add a document-level comment from the sidebar.
|
|
714
|
+
* The body is provided by the inline CommentComposer in the sidebar.
|
|
715
|
+
*/
|
|
716
|
+
function handleAddDocumentComment(body) {
|
|
717
|
+
if (!currentUserId) {
|
|
718
|
+
devWarn('Cannot add document comment: no currentUserId');
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
createDocumentThread(body, currentUserId);
|
|
722
|
+
}
|
|
723
|
+
/**
|
|
724
|
+
* Get serializable review state.
|
|
725
|
+
* Threads are converted to persisted format for re-anchoring.
|
|
726
|
+
*
|
|
727
|
+
* Content is preserved as the complete Markdown document, including front matter.
|
|
728
|
+
*/
|
|
729
|
+
export function getState() {
|
|
730
|
+
const persistedThreads = threads.map((thread) => ({
|
|
731
|
+
...thread,
|
|
732
|
+
anchor: {
|
|
733
|
+
quote: thread.anchor.quote,
|
|
734
|
+
prefix: thread.anchor.prefix,
|
|
735
|
+
suffix: thread.anchor.suffix,
|
|
736
|
+
status: thread.anchor.status,
|
|
737
|
+
blockId: thread.anchor.blockId,
|
|
738
|
+
originalPosition: thread.anchor.originalPosition,
|
|
739
|
+
originalQuote: thread.anchor.originalQuote, // Preserve for history
|
|
740
|
+
lastKnownOffset: thread.anchor.lastKnownOffset, // For disambiguation
|
|
741
|
+
},
|
|
742
|
+
}));
|
|
743
|
+
return {
|
|
744
|
+
schemaVersion: 4,
|
|
745
|
+
content: value,
|
|
746
|
+
original: original || undefined,
|
|
747
|
+
threads: persistedThreads,
|
|
748
|
+
reviewSession: undefined,
|
|
749
|
+
frontMatter: currentDocument.data,
|
|
750
|
+
frontMatterRaw: currentDocument.raw,
|
|
751
|
+
updatedAt: new Date().toISOString(),
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* Restore review state from serialized data.
|
|
756
|
+
* Thread anchors are re-anchored using the quote/prefix/suffix context.
|
|
757
|
+
*
|
|
758
|
+
* Note: This updates both content and original baseline from the incoming state,
|
|
759
|
+
* ensuring subsequent diffs and exports use the correct baseline.
|
|
760
|
+
*/
|
|
761
|
+
export function setState(state) {
|
|
762
|
+
const nextValue = reviewStateToMarkdown(state);
|
|
763
|
+
value = nextValue;
|
|
764
|
+
// Update original baseline if provided in state, so diffs work correctly
|
|
765
|
+
if (state.original !== undefined) {
|
|
766
|
+
original = state.original;
|
|
767
|
+
}
|
|
768
|
+
pendingState = { ...state, content: nextValue };
|
|
769
|
+
// Attempt re-anchoring immediately if editor is ready
|
|
770
|
+
attemptReanchoring();
|
|
771
|
+
}
|
|
772
|
+
/** Get direct access to ProseMirror view (advanced use) */
|
|
773
|
+
export function getView() {
|
|
774
|
+
return editorRef?.getView() ?? null;
|
|
775
|
+
}
|
|
776
|
+
/** Get direct access to Milkdown editor (advanced use) */
|
|
777
|
+
export function getEditor() {
|
|
778
|
+
return editorRef?.getEditor() ?? null;
|
|
779
|
+
}
|
|
780
|
+
// =========================================================================
|
|
781
|
+
// Export Operations
|
|
782
|
+
// =========================================================================
|
|
783
|
+
/**
|
|
784
|
+
* Export an LLM-optimized Markdown summary of the review.
|
|
785
|
+
* Includes document changes and comment threads
|
|
786
|
+
* in a structured format suitable for LLM analysis.
|
|
787
|
+
*/
|
|
788
|
+
export function exportMarkdownSummary(options = undefined) {
|
|
789
|
+
return generateMarkdownSummary(getState(), options);
|
|
790
|
+
}
|
|
791
|
+
/**
|
|
792
|
+
* Export a Git-compatible unified diff.
|
|
793
|
+
* The output can be applied with `git apply` or `patch` command.
|
|
794
|
+
*/
|
|
795
|
+
export function exportUnifiedDiff(options = undefined) {
|
|
796
|
+
return generateUnifiedDiff(getState(), options);
|
|
797
|
+
}
|
|
798
|
+
// =========================================================================
|
|
799
|
+
// Export Action Callbacks (for ExportActions component)
|
|
800
|
+
// =========================================================================
|
|
801
|
+
/** Get plain markdown content for clipboard export */
|
|
802
|
+
function handleExportContent() {
|
|
803
|
+
return value;
|
|
804
|
+
}
|
|
805
|
+
/** Get LLM-optimized summary for clipboard export */
|
|
806
|
+
function handleExportSummary() {
|
|
807
|
+
return exportMarkdownSummary().markdown;
|
|
808
|
+
}
|
|
809
|
+
/** Get JSON state for clipboard export */
|
|
810
|
+
function handleExportJSON() {
|
|
811
|
+
const json = stringifyOrNull(getState());
|
|
812
|
+
// Return error message if serialization fails (circular refs, BigInt, etc.)
|
|
813
|
+
// This prevents copying invalid JSON like "[object Object]" to clipboard
|
|
814
|
+
if (json === null) {
|
|
815
|
+
return '{"error": "Failed to serialize editor state"}';
|
|
816
|
+
}
|
|
817
|
+
return json;
|
|
818
|
+
}
|
|
819
|
+
/** Get unified diff for clipboard export */
|
|
820
|
+
function handleExportDiff() {
|
|
821
|
+
return exportUnifiedDiff().diff;
|
|
822
|
+
}
|
|
823
|
+
/** Get comments export for clipboard export */
|
|
824
|
+
function handleExportComments() {
|
|
825
|
+
return generateCommentsExport(getState()).markdown;
|
|
826
|
+
}
|
|
827
|
+
// =========================================================================
|
|
828
|
+
// Form Participation (FormData integration)
|
|
829
|
+
// =========================================================================
|
|
830
|
+
/**
|
|
831
|
+
* Derive field name with optional prefix.
|
|
832
|
+
* Used for hidden inputs when participating in a parent form.
|
|
833
|
+
*/
|
|
834
|
+
function getFieldName(field) {
|
|
835
|
+
return name ? `${name}-${field}` : field;
|
|
836
|
+
}
|
|
837
|
+
/**
|
|
838
|
+
* Derived values for hidden inputs (computed reactively).
|
|
839
|
+
* These power both the hidden form inputs and the getFormData() method.
|
|
840
|
+
*/
|
|
841
|
+
const formOriginal = $derived(original);
|
|
842
|
+
const formCurrent = $derived(value);
|
|
843
|
+
const formComments = $derived(JSON.stringify(threads));
|
|
844
|
+
const formDiff = $derived(exportUnifiedDiff().diff);
|
|
845
|
+
const formSummary = $derived(exportMarkdownSummary().markdown);
|
|
846
|
+
/**
|
|
847
|
+
* Get form data as a structured object.
|
|
848
|
+
* Use this for programmatic access when not using native form submission.
|
|
849
|
+
*
|
|
850
|
+
* @example
|
|
851
|
+
* ```ts
|
|
852
|
+
* const data = editor.getFormData();
|
|
853
|
+
* await fetch('/api/review', {
|
|
854
|
+
* method: 'POST',
|
|
855
|
+
* body: JSON.stringify(data)
|
|
856
|
+
* });
|
|
857
|
+
* ```
|
|
858
|
+
*/
|
|
859
|
+
export function getFormData() {
|
|
860
|
+
return {
|
|
861
|
+
original: formOriginal,
|
|
862
|
+
current: formCurrent,
|
|
863
|
+
comments: formComments,
|
|
864
|
+
diff: formDiff,
|
|
865
|
+
summary: formSummary,
|
|
866
|
+
};
|
|
867
|
+
}
|
|
868
|
+
/**
|
|
869
|
+
* Reset the editor to its initial state.
|
|
870
|
+
* Reverts content to original and clears all threads.
|
|
871
|
+
*/
|
|
872
|
+
export function reset() {
|
|
873
|
+
// Revert content
|
|
874
|
+
value = original;
|
|
875
|
+
onchange?.(original);
|
|
876
|
+
// Clear all threads
|
|
877
|
+
for (const thread of threads) {
|
|
878
|
+
onthreaddelete?.({ threadId: thread.id });
|
|
879
|
+
}
|
|
880
|
+
// Clear UI state
|
|
881
|
+
popoverThreadId = null;
|
|
882
|
+
popoverPosition = null;
|
|
883
|
+
activeThreadId = null;
|
|
884
|
+
activeView = 'editor';
|
|
885
|
+
selectionPopoverPosition = null;
|
|
886
|
+
capturedSelectionForPopover = null;
|
|
887
|
+
selectionPopoverExpanded = false;
|
|
888
|
+
announce('Review reset');
|
|
889
|
+
}
|
|
890
|
+
// =========================================================================
|
|
891
|
+
// Selection Popover Handlers
|
|
892
|
+
// =========================================================================
|
|
893
|
+
/**
|
|
894
|
+
* Handle the comment submission from the selection popover.
|
|
895
|
+
* Creates a new thread at the captured selection using currentUserId as author.
|
|
896
|
+
*
|
|
897
|
+
* We use capturedSelectionForPopover instead of currentSelection because
|
|
898
|
+
* clicking the popover button collapses the browser selection before this runs.
|
|
899
|
+
*
|
|
900
|
+
* @param body - The comment body from the selection popover form
|
|
901
|
+
*/
|
|
902
|
+
function handleSelectionComment(body) {
|
|
903
|
+
// Helper to clear popover state and announce failure
|
|
904
|
+
function failWithMessage(message) {
|
|
905
|
+
devWarn(message);
|
|
906
|
+
selectionPopoverPosition = null;
|
|
907
|
+
capturedSelectionForPopover = null;
|
|
908
|
+
selectionPopoverExpanded = false;
|
|
909
|
+
announce('Could not add comment. Please try selecting text again.', 'assertive');
|
|
910
|
+
}
|
|
911
|
+
if (!currentUserId) {
|
|
912
|
+
failWithMessage('Cannot create comment: no currentUserId set');
|
|
913
|
+
return;
|
|
914
|
+
}
|
|
915
|
+
// Use captured selection - clicking the popover collapses browser selection
|
|
916
|
+
if (!capturedSelectionForPopover) {
|
|
917
|
+
failWithMessage('Cannot create comment: no captured selection');
|
|
918
|
+
return;
|
|
919
|
+
}
|
|
920
|
+
if (mode === 'readonly') {
|
|
921
|
+
failWithMessage('Cannot create thread: editor is readonly');
|
|
922
|
+
return;
|
|
923
|
+
}
|
|
924
|
+
const view = editorRef?.getView();
|
|
925
|
+
if (!view) {
|
|
926
|
+
failWithMessage('Cannot create thread: editor view not available');
|
|
927
|
+
return;
|
|
928
|
+
}
|
|
929
|
+
const { from, to } = capturedSelectionForPopover;
|
|
930
|
+
// Validate positions are still within document bounds
|
|
931
|
+
// User may have edited the document while popover was expanded
|
|
932
|
+
const docSize = view.state.doc.content.size;
|
|
933
|
+
if (from < 0 || to > docSize || from > to) {
|
|
934
|
+
failWithMessage('Cannot create thread: captured selection is out of bounds');
|
|
935
|
+
return;
|
|
936
|
+
}
|
|
937
|
+
// Build anchor using shared helper
|
|
938
|
+
const anchor = bodyAnchorToDocumentAnchor(buildAnchorFromSelection(view, from, to), currentDocument.bodyOffset, value);
|
|
939
|
+
// Generate requestId for correlating optimistic updates
|
|
940
|
+
const requestId = generateId();
|
|
941
|
+
// Extract @mentions from the comment body
|
|
942
|
+
const mentions = extractMentions(body);
|
|
943
|
+
// Fire the create event with the comment body
|
|
944
|
+
const event = {
|
|
945
|
+
requestId,
|
|
946
|
+
anchor,
|
|
947
|
+
body,
|
|
948
|
+
authorId: currentUserId,
|
|
949
|
+
mentions: mentions.length > 0 ? mentions : undefined,
|
|
950
|
+
};
|
|
951
|
+
onthreadcreate?.(event);
|
|
952
|
+
// Clear state
|
|
953
|
+
capturedSelectionForPopover = null;
|
|
954
|
+
selectionPopoverPosition = null;
|
|
955
|
+
selectionPopoverExpanded = false;
|
|
956
|
+
announce('Comment added');
|
|
957
|
+
}
|
|
958
|
+
/**
|
|
959
|
+
* Handle the selection popover expanding to show the comment form.
|
|
960
|
+
* This keeps the popover visible even when the browser selection collapses.
|
|
961
|
+
*/
|
|
962
|
+
function handleSelectionPopoverExpand() {
|
|
963
|
+
selectionPopoverExpanded = true;
|
|
964
|
+
}
|
|
965
|
+
/**
|
|
966
|
+
* Handle the selection popover cancel action.
|
|
967
|
+
* Resets expanded state so new selections can be processed.
|
|
968
|
+
*/
|
|
969
|
+
function handleSelectionPopoverCancel() {
|
|
970
|
+
selectionPopoverExpanded = false;
|
|
971
|
+
// Keep position and captured selection so user can re-expand if they want
|
|
972
|
+
}
|
|
973
|
+
/**
|
|
974
|
+
* Close the selection popover.
|
|
975
|
+
*/
|
|
976
|
+
function handleSelectionPopoverClose() {
|
|
977
|
+
selectionPopoverPosition = null;
|
|
978
|
+
capturedSelectionForPopover = null;
|
|
979
|
+
selectionPopoverExpanded = false;
|
|
980
|
+
}
|
|
981
|
+
// =========================================================================
|
|
982
|
+
// Thread Operations
|
|
983
|
+
// =========================================================================
|
|
984
|
+
/**
|
|
985
|
+
* Create a new thread at the current selection.
|
|
986
|
+
* Requires non-collapsed selection in edit or comment mode.
|
|
987
|
+
*
|
|
988
|
+
* Returns requestId for correlating with backend response, or null if creation failed.
|
|
989
|
+
*
|
|
990
|
+
* No-op (returns null) if:
|
|
991
|
+
* - No text is selected (collapsed selection)
|
|
992
|
+
* - Editor is in readonly mode
|
|
993
|
+
* - Editor view is not available
|
|
994
|
+
*/
|
|
995
|
+
export function createThread(body, authorId) {
|
|
996
|
+
if (!currentSelection || currentSelection.isCollapsed) {
|
|
997
|
+
devWarn('Cannot create thread: no text selected');
|
|
998
|
+
return null;
|
|
999
|
+
}
|
|
1000
|
+
if (mode === 'readonly') {
|
|
1001
|
+
devWarn('Cannot create thread: editor is readonly');
|
|
1002
|
+
return null;
|
|
1003
|
+
}
|
|
1004
|
+
const view = editorRef?.getView();
|
|
1005
|
+
if (!view) {
|
|
1006
|
+
devWarn('Cannot create thread: editor view not available');
|
|
1007
|
+
return null;
|
|
1008
|
+
}
|
|
1009
|
+
const { from, to } = currentSelection;
|
|
1010
|
+
// Build anchor using shared helper
|
|
1011
|
+
const anchor = bodyAnchorToDocumentAnchor(buildAnchorFromSelection(view, from, to), currentDocument.bodyOffset, value);
|
|
1012
|
+
// Extract mentions from comment body
|
|
1013
|
+
const mentions = extractMentions(body);
|
|
1014
|
+
// Generate requestId for correlating optimistic updates
|
|
1015
|
+
const requestId = generateId();
|
|
1016
|
+
// Fire the create event (parent handles actual thread creation)
|
|
1017
|
+
const event = {
|
|
1018
|
+
requestId,
|
|
1019
|
+
anchor,
|
|
1020
|
+
body,
|
|
1021
|
+
authorId,
|
|
1022
|
+
mentions: mentions.length > 0 ? mentions : undefined,
|
|
1023
|
+
};
|
|
1024
|
+
onthreadcreate?.(event);
|
|
1025
|
+
announce('Comment added');
|
|
1026
|
+
return requestId;
|
|
1027
|
+
}
|
|
1028
|
+
/**
|
|
1029
|
+
* Create a document-level comment thread.
|
|
1030
|
+
*
|
|
1031
|
+
* Document-level comments are not anchored to specific text but apply to
|
|
1032
|
+
* the entire document. They appear at the top of the comment sidebar.
|
|
1033
|
+
*
|
|
1034
|
+
* Returns requestId for correlating with backend response, or null if creation failed.
|
|
1035
|
+
*/
|
|
1036
|
+
export function createDocumentThread(body, authorId) {
|
|
1037
|
+
if (mode === 'readonly') {
|
|
1038
|
+
devWarn('Cannot create thread: editor is readonly');
|
|
1039
|
+
return null;
|
|
1040
|
+
}
|
|
1041
|
+
// Create document-level anchor
|
|
1042
|
+
const anchor = createDocumentAnchor();
|
|
1043
|
+
// Extract mentions from comment body
|
|
1044
|
+
const mentions = extractMentions(body);
|
|
1045
|
+
// Generate requestId for correlating optimistic updates
|
|
1046
|
+
const requestId = generateId();
|
|
1047
|
+
// Fire the create event (parent handles actual thread creation)
|
|
1048
|
+
const event = {
|
|
1049
|
+
requestId,
|
|
1050
|
+
anchor,
|
|
1051
|
+
body,
|
|
1052
|
+
authorId,
|
|
1053
|
+
mentions: mentions.length > 0 ? mentions : undefined,
|
|
1054
|
+
};
|
|
1055
|
+
onthreadcreate?.(event);
|
|
1056
|
+
announce('Document comment added');
|
|
1057
|
+
return requestId;
|
|
1058
|
+
}
|
|
1059
|
+
/**
|
|
1060
|
+
* Delete a thread.
|
|
1061
|
+
*
|
|
1062
|
+
* Silently returns without emitting an event if:
|
|
1063
|
+
* - Editor is in readonly mode (mode === 'readonly')
|
|
1064
|
+
* - Thread does not exist
|
|
1065
|
+
*
|
|
1066
|
+
* This silent no-op behavior supports declarative UI patterns where callers
|
|
1067
|
+
* don't need to pre-check conditions before calling mutation methods.
|
|
1068
|
+
*/
|
|
1069
|
+
export function deleteThread(threadId) {
|
|
1070
|
+
if (mode === 'readonly')
|
|
1071
|
+
return;
|
|
1072
|
+
const thread = threads.find((t) => t.id === threadId);
|
|
1073
|
+
if (!thread)
|
|
1074
|
+
return;
|
|
1075
|
+
onthreaddelete?.({ threadId });
|
|
1076
|
+
}
|
|
1077
|
+
/**
|
|
1078
|
+
* Delete all threads (clear all comments).
|
|
1079
|
+
*
|
|
1080
|
+
* Silently does nothing if:
|
|
1081
|
+
* - Editor is in readonly mode (mode === 'readonly')
|
|
1082
|
+
* - No threads exist
|
|
1083
|
+
*
|
|
1084
|
+
* Fires onthreaddelete for each thread.
|
|
1085
|
+
*/
|
|
1086
|
+
export function clearAllThreads() {
|
|
1087
|
+
if (mode === 'readonly')
|
|
1088
|
+
return;
|
|
1089
|
+
if (threads.length === 0)
|
|
1090
|
+
return;
|
|
1091
|
+
// Fire delete event for each thread
|
|
1092
|
+
for (const thread of threads) {
|
|
1093
|
+
onthreaddelete?.({ threadId: thread.id });
|
|
1094
|
+
}
|
|
1095
|
+
// Clear any active selection state
|
|
1096
|
+
popoverThreadId = null;
|
|
1097
|
+
popoverPosition = null;
|
|
1098
|
+
activeThreadId = null;
|
|
1099
|
+
announce('All comments cleared');
|
|
1100
|
+
}
|
|
1101
|
+
// =========================================================================
|
|
1102
|
+
// Comment Operations
|
|
1103
|
+
// =========================================================================
|
|
1104
|
+
/**
|
|
1105
|
+
* Create a new comment in an existing thread.
|
|
1106
|
+
*
|
|
1107
|
+
* @returns requestId for correlating with backend response, or null if creation was blocked
|
|
1108
|
+
*
|
|
1109
|
+
* Silently returns null without emitting an event if:
|
|
1110
|
+
* - Editor is in readonly mode (mode === 'readonly')
|
|
1111
|
+
* - Thread does not exist
|
|
1112
|
+
*
|
|
1113
|
+
* This silent no-op behavior supports declarative UI patterns where callers
|
|
1114
|
+
* don't need to pre-check conditions before calling mutation methods.
|
|
1115
|
+
*/
|
|
1116
|
+
export function createComment(threadId, body, authorId) {
|
|
1117
|
+
if (mode === 'readonly')
|
|
1118
|
+
return null;
|
|
1119
|
+
const thread = threads.find((t) => t.id === threadId);
|
|
1120
|
+
if (!thread)
|
|
1121
|
+
return null;
|
|
1122
|
+
const mentions = extractMentions(body);
|
|
1123
|
+
const requestId = generateId();
|
|
1124
|
+
oncommentcreate?.({
|
|
1125
|
+
requestId,
|
|
1126
|
+
threadId,
|
|
1127
|
+
body,
|
|
1128
|
+
authorId,
|
|
1129
|
+
mentions: mentions.length > 0 ? mentions : undefined,
|
|
1130
|
+
});
|
|
1131
|
+
announce('Comment added');
|
|
1132
|
+
return requestId;
|
|
1133
|
+
}
|
|
1134
|
+
/**
|
|
1135
|
+
* Update an existing comment.
|
|
1136
|
+
*
|
|
1137
|
+
* Silently returns without emitting an event if:
|
|
1138
|
+
* - Editor is in readonly mode (mode === 'readonly')
|
|
1139
|
+
* - Thread or comment does not exist
|
|
1140
|
+
* - Comment is soft-deleted
|
|
1141
|
+
*
|
|
1142
|
+
* This silent no-op behavior supports declarative UI patterns where callers
|
|
1143
|
+
* don't need to pre-check conditions before calling mutation methods.
|
|
1144
|
+
*/
|
|
1145
|
+
export function updateComment(threadId, commentId, body) {
|
|
1146
|
+
if (mode === 'readonly')
|
|
1147
|
+
return;
|
|
1148
|
+
const thread = threads.find((t) => t.id === threadId);
|
|
1149
|
+
const comment = thread?.comments.find((c) => c.id === commentId);
|
|
1150
|
+
if (!comment || comment.deletedAt)
|
|
1151
|
+
return;
|
|
1152
|
+
const mentions = extractMentions(body);
|
|
1153
|
+
oncommentupdate?.({
|
|
1154
|
+
threadId,
|
|
1155
|
+
commentId,
|
|
1156
|
+
body,
|
|
1157
|
+
mentions: mentions.length > 0 ? mentions : undefined,
|
|
1158
|
+
});
|
|
1159
|
+
}
|
|
1160
|
+
/**
|
|
1161
|
+
* Delete a comment.
|
|
1162
|
+
*
|
|
1163
|
+
* Silently returns without emitting an event if:
|
|
1164
|
+
* - Editor is in readonly mode (mode === 'readonly')
|
|
1165
|
+
* - Thread or comment does not exist
|
|
1166
|
+
* - Soft delete is requested but comment is already soft-deleted
|
|
1167
|
+
*
|
|
1168
|
+
* This silent no-op behavior supports declarative UI patterns where callers
|
|
1169
|
+
* don't need to pre-check conditions before calling mutation methods.
|
|
1170
|
+
*
|
|
1171
|
+
* @param soft - If true (default), sets deletedAt for soft delete. If false, requests hard delete.
|
|
1172
|
+
*/
|
|
1173
|
+
export function deleteComment(threadId, commentId, soft = true) {
|
|
1174
|
+
if (mode === 'readonly')
|
|
1175
|
+
return;
|
|
1176
|
+
const thread = threads.find((t) => t.id === threadId);
|
|
1177
|
+
const comment = thread?.comments.find((c) => c.id === commentId);
|
|
1178
|
+
if (!comment || (soft && comment.deletedAt))
|
|
1179
|
+
return;
|
|
1180
|
+
oncommentdelete?.({ threadId, commentId, soft });
|
|
1181
|
+
announce('Comment deleted');
|
|
1182
|
+
}
|
|
1183
|
+
// =========================================================================
|
|
1184
|
+
// Block-Level Thread Creation
|
|
1185
|
+
// =========================================================================
|
|
1186
|
+
/**
|
|
1187
|
+
* Create a thread anchored to the block containing the cursor.
|
|
1188
|
+
* Works even with a collapsed selection (no text selected).
|
|
1189
|
+
*
|
|
1190
|
+
* Returns requestId for correlating with backend response, or null if creation failed.
|
|
1191
|
+
*
|
|
1192
|
+
* No-op (returns null) if:
|
|
1193
|
+
* - Editor is in readonly mode
|
|
1194
|
+
* - Editor view is not available
|
|
1195
|
+
* - Cursor is not inside a block
|
|
1196
|
+
*/
|
|
1197
|
+
export function createBlockThread(body, authorId) {
|
|
1198
|
+
if (mode === 'readonly') {
|
|
1199
|
+
devWarn('Cannot create block thread: editor is readonly');
|
|
1200
|
+
return null;
|
|
1201
|
+
}
|
|
1202
|
+
const view = editorRef?.getView();
|
|
1203
|
+
if (!view) {
|
|
1204
|
+
devWarn('Cannot create block thread: editor view not available');
|
|
1205
|
+
return null;
|
|
1206
|
+
}
|
|
1207
|
+
const { from } = view.state.selection;
|
|
1208
|
+
const resolvedPos = view.state.doc.resolve(from);
|
|
1209
|
+
// Find the nearest block-level node
|
|
1210
|
+
for (let depth = resolvedPos.depth; depth > 0; depth--) {
|
|
1211
|
+
const node = resolvedPos.node(depth);
|
|
1212
|
+
if (!node.isBlock)
|
|
1213
|
+
continue;
|
|
1214
|
+
// Get the block's inner positions (content bounds)
|
|
1215
|
+
const blockFrom = resolvedPos.start(depth);
|
|
1216
|
+
const blockTo = resolvedPos.end(depth);
|
|
1217
|
+
// Build anchor for the entire block
|
|
1218
|
+
const anchor = bodyAnchorToDocumentAnchor(buildAnchorFromSelection(view, blockFrom, blockTo), currentDocument.bodyOffset, value);
|
|
1219
|
+
// Extract mentions and generate requestId
|
|
1220
|
+
const mentions = extractMentions(body);
|
|
1221
|
+
const requestId = generateId();
|
|
1222
|
+
// Fire the create event
|
|
1223
|
+
onthreadcreate?.({
|
|
1224
|
+
requestId,
|
|
1225
|
+
anchor,
|
|
1226
|
+
body,
|
|
1227
|
+
authorId,
|
|
1228
|
+
mentions: mentions.length > 0 ? mentions : undefined,
|
|
1229
|
+
});
|
|
1230
|
+
return requestId;
|
|
1231
|
+
}
|
|
1232
|
+
devWarn('Cannot create block thread: cursor not inside a block');
|
|
1233
|
+
return null;
|
|
1234
|
+
}
|
|
1235
|
+
// =========================================================================
|
|
1236
|
+
// Keyboard Navigation (F6 Landmark Navigation)
|
|
1237
|
+
// =========================================================================
|
|
1238
|
+
/**
|
|
1239
|
+
* Focus regions for F6 navigation.
|
|
1240
|
+
* The 'popover' region is conditionally included when a thread popover is open.
|
|
1241
|
+
*/
|
|
1242
|
+
const focusRegions = [
|
|
1243
|
+
{ id: 'editor', selector: '.review-editor-main', label: 'Editor' },
|
|
1244
|
+
{ id: 'popover', selector: '.thread-popover', label: 'Thread' },
|
|
1245
|
+
];
|
|
1246
|
+
/**
|
|
1247
|
+
* Focus region navigator with conditional popover inclusion and custom editor focus.
|
|
1248
|
+
*/
|
|
1249
|
+
const focusNavigator = createFocusRegionNavigator(focusRegions, {
|
|
1250
|
+
// Only include popover region when a thread popover is actually open
|
|
1251
|
+
isRegionActive: (region) => {
|
|
1252
|
+
if (region.id === 'popover') {
|
|
1253
|
+
return popoverThread !== null;
|
|
1254
|
+
}
|
|
1255
|
+
return true;
|
|
1256
|
+
},
|
|
1257
|
+
// Custom focus handler for the editor region (ProseMirror needs special handling)
|
|
1258
|
+
customFocusHandler: (region) => {
|
|
1259
|
+
if (region.id === 'editor') {
|
|
1260
|
+
editorRef?.getView()?.focus();
|
|
1261
|
+
return true; // Handled
|
|
1262
|
+
}
|
|
1263
|
+
return false; // Use default behavior
|
|
1264
|
+
},
|
|
1265
|
+
});
|
|
1266
|
+
/**
|
|
1267
|
+
* Handle F6 keyboard navigation between regions.
|
|
1268
|
+
* Uses event.currentTarget to scope navigation to this specific editor instance,
|
|
1269
|
+
* supporting multiple ReviewEditor instances on the same page.
|
|
1270
|
+
*/
|
|
1271
|
+
function handleContainerKeyDown(event) {
|
|
1272
|
+
if (event.key !== 'F6')
|
|
1273
|
+
return;
|
|
1274
|
+
// Use currentTarget (the element with the listener) to get this specific editor container
|
|
1275
|
+
const container = event.currentTarget;
|
|
1276
|
+
if (!(container instanceof HTMLElement))
|
|
1277
|
+
return;
|
|
1278
|
+
event.preventDefault();
|
|
1279
|
+
const current = focusNavigator.getCurrentRegion(container);
|
|
1280
|
+
const next = focusNavigator.getNextRegion(current, event.shiftKey);
|
|
1281
|
+
focusNavigator.focusRegion(container, next);
|
|
1282
|
+
}
|
|
1283
|
+
</script>
|
|
1284
|
+
|
|
1285
|
+
<!-- Export actions snippet for passing to controls -->
|
|
1286
|
+
{#snippet exportActionsSnippet()}
|
|
1287
|
+
<ExportActions
|
|
1288
|
+
id="{id}-export"
|
|
1289
|
+
onexportcontent={handleExportContent}
|
|
1290
|
+
onexportsummary={handleExportSummary}
|
|
1291
|
+
onexportjson={handleExportJSON}
|
|
1292
|
+
onexportdiff={handleExportDiff}
|
|
1293
|
+
onexportcomments={handleExportComments}
|
|
1294
|
+
/>
|
|
1295
|
+
{/snippet}
|
|
1296
|
+
|
|
1297
|
+
<!--
|
|
1298
|
+
The a11y_no_static_element_interactions ignore is intentional:
|
|
1299
|
+
F6 landmark navigation requires a container-level keydown listener to cycle
|
|
1300
|
+
focus between editor/popover regions. The container itself is not
|
|
1301
|
+
interactive; it only captures keyboard events for region-level focus management.
|
|
1302
|
+
-->
|
|
1303
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
1304
|
+
<div
|
|
1305
|
+
bind:this={containerElement}
|
|
1306
|
+
data-testid="review-editor"
|
|
1307
|
+
class={classNames('review-editor-container', className)}
|
|
1308
|
+
data-mode={mode}
|
|
1309
|
+
data-view={activeView}
|
|
1310
|
+
data-ready={editorViewReady && !pendingState ? true : undefined}
|
|
1311
|
+
data-snapshot-mode={snapshotMode || undefined}
|
|
1312
|
+
onkeydown={handleContainerKeyDown}
|
|
1313
|
+
>
|
|
1314
|
+
<!-- Screen reader announcements (DEP-47) -->
|
|
1315
|
+
<LiveRegion bind:this={liveRegionRef} />
|
|
1316
|
+
|
|
1317
|
+
<!-- Hidden form inputs for FormData participation -->
|
|
1318
|
+
{#if name}
|
|
1319
|
+
<input type="hidden" name={getFieldName('original')} value={formOriginal} />
|
|
1320
|
+
<input type="hidden" name={getFieldName('current')} value={formCurrent} />
|
|
1321
|
+
<input type="hidden" name={getFieldName('comments')} value={formComments} />
|
|
1322
|
+
<input type="hidden" name={getFieldName('diff')} value={formDiff} />
|
|
1323
|
+
<input type="hidden" name={getFieldName('summary')} value={formSummary} />
|
|
1324
|
+
{/if}
|
|
1325
|
+
|
|
1326
|
+
<!-- Unified controls bar - consistent across all views -->
|
|
1327
|
+
<ReviewEditorControls
|
|
1328
|
+
id="{id}-controls"
|
|
1329
|
+
{activeView}
|
|
1330
|
+
{viewPanelIds}
|
|
1331
|
+
onViewChange={(view) => {
|
|
1332
|
+
// Clear selection popover state when leaving editor view
|
|
1333
|
+
// Otherwise stale expanded state blocks new selections when returning
|
|
1334
|
+
if (view !== 'editor') {
|
|
1335
|
+
selectionPopoverPosition = null;
|
|
1336
|
+
capturedSelectionForPopover = null;
|
|
1337
|
+
selectionPopoverExpanded = false;
|
|
1338
|
+
}
|
|
1339
|
+
activeView = view;
|
|
1340
|
+
announce(`Switched to ${view} view`);
|
|
1341
|
+
}}
|
|
1342
|
+
showDiffTabs={!!original}
|
|
1343
|
+
{diffStats}
|
|
1344
|
+
bind:diffViewMode
|
|
1345
|
+
{hasContentChanges}
|
|
1346
|
+
readonly={isReadonly}
|
|
1347
|
+
onRevertAll={() => {
|
|
1348
|
+
value = original;
|
|
1349
|
+
onchange?.(original);
|
|
1350
|
+
announce('All changes reverted');
|
|
1351
|
+
}}
|
|
1352
|
+
{commentCount}
|
|
1353
|
+
{sidebarOpen}
|
|
1354
|
+
onSidebarToggle={() => (sidebarOpen = !sidebarOpen)}
|
|
1355
|
+
trailing={exportActionsSnippet}
|
|
1356
|
+
/>
|
|
1357
|
+
|
|
1358
|
+
<!-- Main content area -->
|
|
1359
|
+
<div class="review-editor-main">
|
|
1360
|
+
{#if activeView === 'editor'}
|
|
1361
|
+
<!-- Editor view: formatting toolbar + editor content -->
|
|
1362
|
+
<div
|
|
1363
|
+
id={viewPanelIds.editor}
|
|
1364
|
+
class="review-editor-view-panel"
|
|
1365
|
+
role="tabpanel"
|
|
1366
|
+
aria-label="Editor view"
|
|
1367
|
+
>
|
|
1368
|
+
{#if currentDocument.hasFrontMatter}
|
|
1369
|
+
<FrontMatterFields
|
|
1370
|
+
id={`${id}-front-matter`}
|
|
1371
|
+
data={currentDocument.data}
|
|
1372
|
+
raw={currentDocument.raw}
|
|
1373
|
+
readonly={isReadonly}
|
|
1374
|
+
onchange={handleFrontMatterChange}
|
|
1375
|
+
/>
|
|
1376
|
+
{/if}
|
|
1377
|
+
<MarkdownEditor
|
|
1378
|
+
{id}
|
|
1379
|
+
bind:this={editorRef}
|
|
1380
|
+
value={editorValue}
|
|
1381
|
+
mode="wysiwyg"
|
|
1382
|
+
readonly={isReadonly}
|
|
1383
|
+
{placeholder}
|
|
1384
|
+
plugins={[anchorPlugin]}
|
|
1385
|
+
{snapshotMode}
|
|
1386
|
+
onchange={handleEditorBodyChange}
|
|
1387
|
+
onready={() => {
|
|
1388
|
+
if (!editorViewReady) {
|
|
1389
|
+
editorViewReady = true;
|
|
1390
|
+
}
|
|
1391
|
+
}}
|
|
1392
|
+
onselectionchange={handleSelectionChange}
|
|
1393
|
+
/>
|
|
1394
|
+
</div>
|
|
1395
|
+
{:else if activeView === 'diff'}
|
|
1396
|
+
<!-- Diff view content -->
|
|
1397
|
+
<div
|
|
1398
|
+
id={viewPanelIds.diff}
|
|
1399
|
+
class="review-editor-view-panel"
|
|
1400
|
+
role="tabpanel"
|
|
1401
|
+
aria-label="Diff view"
|
|
1402
|
+
>
|
|
1403
|
+
<DiffViewer {original} current={value} bind:viewMode={diffViewMode} readonly={isReadonly}>
|
|
1404
|
+
{#snippet toolbar()}
|
|
1405
|
+
<!-- Empty toolbar - controls are in the unified bar above -->
|
|
1406
|
+
{/snippet}
|
|
1407
|
+
</DiffViewer>
|
|
1408
|
+
</div>
|
|
1409
|
+
{:else}
|
|
1410
|
+
<!-- Summary view (auto-generated, readonly preview) -->
|
|
1411
|
+
<div
|
|
1412
|
+
id={viewPanelIds.summary}
|
|
1413
|
+
class="review-editor-view-panel"
|
|
1414
|
+
role="tabpanel"
|
|
1415
|
+
aria-label="Summary view"
|
|
1416
|
+
>
|
|
1417
|
+
{#if hasContentChanges || threads.length > 0}
|
|
1418
|
+
<MarkdownEditor
|
|
1419
|
+
id="{id}-summary"
|
|
1420
|
+
value={summaryContent}
|
|
1421
|
+
mode="wysiwyg"
|
|
1422
|
+
readonly
|
|
1423
|
+
showToolbar={false}
|
|
1424
|
+
placeholder=""
|
|
1425
|
+
/>
|
|
1426
|
+
{:else}
|
|
1427
|
+
<div class="summary-view" role="region" aria-label="Review summary">
|
|
1428
|
+
<div class="summary-empty">
|
|
1429
|
+
<p>No changes or comments to summarize.</p>
|
|
1430
|
+
<p class="summary-hint">Edit the document or add comments to generate a summary.</p>
|
|
1431
|
+
</div>
|
|
1432
|
+
</div>
|
|
1433
|
+
{/if}
|
|
1434
|
+
</div>
|
|
1435
|
+
{/if}
|
|
1436
|
+
</div>
|
|
1437
|
+
|
|
1438
|
+
<!-- Comment sidebar -->
|
|
1439
|
+
{#if sidebarOpen}
|
|
1440
|
+
<CommentSidebar
|
|
1441
|
+
id="{id}-sidebar"
|
|
1442
|
+
{threads}
|
|
1443
|
+
{activeThreadId}
|
|
1444
|
+
readonly={isReadonly}
|
|
1445
|
+
onthreadselect={handleSidebarThreadSelect}
|
|
1446
|
+
onclearall={clearAllThreads}
|
|
1447
|
+
onadddocumentcomment={handleAddDocumentComment}
|
|
1448
|
+
/>
|
|
1449
|
+
{/if}
|
|
1450
|
+
|
|
1451
|
+
<!-- Thread popover -->
|
|
1452
|
+
{#if popoverThread && popoverPosition}
|
|
1453
|
+
<ThreadPopover
|
|
1454
|
+
id="{id}-thread-popover"
|
|
1455
|
+
thread={popoverThread}
|
|
1456
|
+
{currentUserId}
|
|
1457
|
+
{mode}
|
|
1458
|
+
position={popoverPosition}
|
|
1459
|
+
onclose={handlePopoverClose}
|
|
1460
|
+
ondelete={handlePopoverDelete}
|
|
1461
|
+
oncommentcreate={handlePopoverCommentCreate}
|
|
1462
|
+
oncommentupdate={handlePopoverCommentUpdate}
|
|
1463
|
+
oncommentdelete={handlePopoverCommentDelete}
|
|
1464
|
+
/>
|
|
1465
|
+
{/if}
|
|
1466
|
+
|
|
1467
|
+
<!-- Selection popover for quick comment creation -->
|
|
1468
|
+
{#if showSelectionPopover}
|
|
1469
|
+
<SelectionPopover
|
|
1470
|
+
id="{id}-selection-popover"
|
|
1471
|
+
position={selectionPopoverPosition}
|
|
1472
|
+
open={showSelectionPopover}
|
|
1473
|
+
oncommentsubmit={handleSelectionComment}
|
|
1474
|
+
onexpand={handleSelectionPopoverExpand}
|
|
1475
|
+
oncancel={handleSelectionPopoverCancel}
|
|
1476
|
+
onclose={handleSelectionPopoverClose}
|
|
1477
|
+
/>
|
|
1478
|
+
{/if}
|
|
1479
|
+
</div>
|
|
1480
|
+
|
|
1481
|
+
<style>
|
|
1482
|
+
/*
|
|
1483
|
+
* Reset outer border/radius/overflow on the markdown-editor-wrapper when
|
|
1484
|
+
* nested inside review-editor-main (.review-editor-main provides the outer shape).
|
|
1485
|
+
*
|
|
1486
|
+
* :global() is required because .markdown-editor-wrapper is rendered by
|
|
1487
|
+
* MarkdownEditor (a child component) and would not match a scoped selector.
|
|
1488
|
+
*/
|
|
1489
|
+
:global(.review-editor-container .review-editor-main .markdown-editor-wrapper) {
|
|
1490
|
+
border: none;
|
|
1491
|
+
border-radius: 0;
|
|
1492
|
+
overflow: visible;
|
|
1493
|
+
}
|
|
1494
|
+
|
|
1495
|
+
.review-editor-view-panel {
|
|
1496
|
+
min-width: 0;
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
/*
|
|
1500
|
+
* Snapshot mode: suppress the blinking caret and text selection highlights
|
|
1501
|
+
* so visual regression screenshots are pixel-stable across runs.
|
|
1502
|
+
* Scoped to [data-snapshot-mode] so normal editing is completely unaffected.
|
|
1503
|
+
*/
|
|
1504
|
+
.review-editor-container[data-snapshot-mode],
|
|
1505
|
+
.review-editor-container[data-snapshot-mode] * {
|
|
1506
|
+
caret-color: transparent;
|
|
1507
|
+
user-select: none;
|
|
1508
|
+
}
|
|
1509
|
+
</style>
|