@k2b/ui 0.2.0 → 0.4.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/dist/browser/actions/Button.js +11 -2
- package/dist/browser/actions/Button.js.map +1 -1
- package/dist/browser/actions/Disclosure.js +11 -8
- package/dist/browser/actions/Disclosure.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +4 -1
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +16 -2
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/SplitButton.js +69 -22
- package/dist/browser/actions/SplitButton.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js +3 -7
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/Tabs.js +132 -47
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/index.js +2 -2
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +751 -423
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatContextPopup.js +123 -0
- package/dist/browser/chat/ChatContextPopup.js.map +1 -0
- package/dist/browser/chat/ChatPrimitives.js +141 -78
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatTasks.js +112 -0
- package/dist/browser/chat/ChatTasks.js.map +1 -0
- package/dist/browser/chat/ChatTimeline.js +31 -14
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/chat/chat-behavior.js +0 -5
- package/dist/browser/chat/chat-behavior.js.map +1 -1
- package/dist/browser/chat/composer-document.js +55 -0
- package/dist/browser/chat/composer-document.js.map +1 -0
- package/dist/browser/chat/index.js +6 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/chat/types.js.map +1 -1
- package/dist/browser/content/Chart.js +148 -239
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +324 -0
- package/dist/browser/content/ChartExplorer.js.map +1 -0
- package/dist/browser/content/ChartExplorerControls.js +153 -0
- package/dist/browser/content/ChartExplorerControls.js.map +1 -0
- package/dist/browser/content/ChartFilterControls.js +200 -0
- package/dist/browser/content/ChartFilterControls.js.map +1 -0
- package/dist/browser/content/ChartSnapshotView.js +114 -0
- package/dist/browser/content/ChartSnapshotView.js.map +1 -0
- package/dist/browser/content/DataTable.js +48 -32
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/FileBrowser.js +3 -0
- package/dist/browser/content/FileBrowser.js.map +1 -1
- package/dist/browser/content/FileGrid.js +93 -0
- package/dist/browser/content/FileGrid.js.map +1 -0
- package/dist/browser/content/FileTree.js +2 -2
- package/dist/browser/content/FileTree.js.map +1 -1
- package/dist/browser/content/FileView.js +511 -162
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/MarkdownView.js +6 -0
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/content/Pagination.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +107 -90
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/chart-cursor.js +33 -0
- package/dist/browser/content/chart-cursor.js.map +1 -0
- package/dist/browser/content/chart-explorer.js +147 -0
- package/dist/browser/content/chart-explorer.js.map +1 -0
- package/dist/browser/content/chart-inspection.js +447 -0
- package/dist/browser/content/chart-inspection.js.map +1 -0
- package/dist/browser/content/chart-line-gaps.js +53 -0
- package/dist/browser/content/chart-line-gaps.js.map +1 -0
- package/dist/browser/content/chart-map-viewport.js +5 -1
- package/dist/browser/content/chart-map-viewport.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js +63 -0
- package/dist/browser/content/chart-snapshot.js.map +1 -0
- package/dist/browser/content/chart-state-timeline.js +32 -4
- package/dist/browser/content/chart-state-timeline.js.map +1 -1
- package/dist/browser/content/chart-svg.js +54 -0
- package/dist/browser/content/chart-svg.js.map +1 -0
- package/dist/browser/content/collection-selection.js +109 -0
- package/dist/browser/content/collection-selection.js.map +1 -0
- package/dist/browser/content/delimited-preferences.js +21 -0
- package/dist/browser/content/delimited-preferences.js.map +1 -0
- package/dist/browser/content/file-tree.js.map +1 -1
- package/dist/browser/content/file-view-preview.js +11 -7
- package/dist/browser/content/file-view-preview.js.map +1 -1
- package/dist/browser/content/index.js +9 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/feedback/InlineGuidance.js +17 -3
- package/dist/browser/feedback/InlineGuidance.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js +81 -7
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/prompts.js +6 -0
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/feedback/toast.js +29 -6
- package/dist/browser/feedback/toast.js.map +1 -1
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
- package/dist/browser/inputs/Select.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js +3 -2
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +7 -1
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js +61 -37
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/behaviors.js +1 -1
- package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
- package/dist/browser/intl/Format.js +89 -16
- package/dist/browser/intl/Format.js.map +1 -1
- package/dist/browser/intl/index.js.map +1 -1
- package/dist/browser/intl/messages.js +130 -2
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +712 -624
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js +95 -0
- package/dist/browser/layout/BottomSheet.js.map +1 -0
- package/dist/browser/layout/DetailPanel.js +56 -44
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/Navigation.js +278 -0
- package/dist/browser/layout/Navigation.js.map +1 -0
- package/dist/browser/layout/PanelDialog.js +219 -71
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/ScrollArea.js +21 -1
- package/dist/browser/layout/ScrollArea.js.map +1 -1
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SidebarItemPreview.js +183 -0
- package/dist/browser/layout/SidebarItemPreview.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +3 -0
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/app-workspace-state.js.map +1 -1
- package/dist/browser/layout/index.js +3 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js +23 -0
- package/dist/browser/layout/navigation-model.js.map +1 -0
- package/dist/browser/layout/scroll-fade.js +100 -0
- package/dist/browser/layout/scroll-fade.js.map +1 -0
- package/dist/browser/surfaces/DescriptionList.js.map +1 -1
- package/dist/browser/surfaces/StatusBadge.js +2 -1
- package/dist/browser/surfaces/StatusBadge.js.map +1 -1
- package/dist/fonts/ibm-plex-mono-cyrillic-400-italic-4aded3f2f2a7d27d.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-400-normal-7635422bd10ddbbc.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-500-normal-1d89462e86cb8e87.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-600-normal-2b05a8695c7f9f4a.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-italic-a0b3b8cbe5a516e7.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-normal-f8c22ec1804bd696.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-ext-500-normal-3febe5c7f22e4b07.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-ext-600-normal-83109cdd4f8665b4.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-400-italic-0840095faae86403.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-400-normal-08949f728dc52d52.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-500-normal-01d285447409c8a5.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-600-normal-0d1f0b8d0722224e.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-ext-400-italic-1b07eee6df7d26b3.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-ext-400-normal-6bc0f226a5b7884a.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-ext-500-normal-6bb06407c97584b0.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-ext-600-normal-32057cf50dd14bdb.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-vietnamese-400-italic-a6bab38af4f9c761.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-vietnamese-400-normal-62632b6375305e70.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-vietnamese-500-normal-781633d95de88040.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-vietnamese-600-normal-51b74d53e106ba8a.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-400-italic-e8731a7e2b00fc4f.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-400-normal-69afad88a0740b6e.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-500-normal-200be3a2a6b1789f.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-600-normal-730becc6f005c18c.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-700-normal-40540598b4c9eb2c.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-italic-4ffb25726a7ce4cc.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-normal-e2580ad78906551e.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-500-normal-08578d906af6d986.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-600-normal-d60d3d0b182753d5.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-700-normal-d07dd53642480097.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-400-italic-1bc10b01688ba9fa.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-400-normal-02296067bc904d2a.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-500-normal-8cb6e20b4dbbaa5f.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-600-normal-0a9ebd9019415ee9.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-700-normal-c949641d10a3bebc.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-400-italic-6de912e531b6c980.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-400-normal-3b646991d30055a9.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-500-normal-0717336fb31fcdcd.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-600-normal-8960851d691c054e.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-700-normal-42e7b0c143c19df9.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-400-italic-c5c00e8a32022dfe.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-400-normal-c93d2a12aaa280f6.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-500-normal-2846035d85100f84.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-600-normal-b25dfd4f979e442a.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-700-normal-92f0392bd74fa395.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-400-italic-675d4bace127bffb.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-400-normal-771538f7f26551bd.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-500-normal-85ba3d9c2488a813.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-600-normal-5d34b803637befe3.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-700-normal-b79d0c4b68b85007.woff2 +0 -0
- package/dist/plex.css +1 -1
- package/dist/ssr/actions/Button.js +11 -2
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/Disclosure.js +2 -2
- package/dist/ssr/actions/Disclosure.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +4 -1
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +16 -2
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/SplitButton.js +69 -22
- package/dist/ssr/actions/SplitButton.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js +3 -7
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/Tabs.js +58 -11
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/index.js +2 -2
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +366 -134
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatContextPopup.js +86 -0
- package/dist/ssr/chat/ChatContextPopup.js.map +1 -0
- package/dist/ssr/chat/ChatPrimitives.js +49 -11
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatTasks.js +48 -0
- package/dist/ssr/chat/ChatTasks.js.map +1 -0
- package/dist/ssr/chat/ChatTimeline.js +14 -4
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/chat/chat-behavior.js +0 -5
- package/dist/ssr/chat/chat-behavior.js.map +1 -1
- package/dist/ssr/chat/composer-document.js +55 -0
- package/dist/ssr/chat/composer-document.js.map +1 -0
- package/dist/ssr/chat/index.js +6 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/chat/types.js.map +1 -1
- package/dist/ssr/content/Chart.js +121 -219
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +257 -0
- package/dist/ssr/content/ChartExplorer.js.map +1 -0
- package/dist/ssr/content/ChartExplorerControls.js +105 -0
- package/dist/ssr/content/ChartExplorerControls.js.map +1 -0
- package/dist/ssr/content/ChartFilterControls.js +139 -0
- package/dist/ssr/content/ChartFilterControls.js.map +1 -0
- package/dist/ssr/content/ChartSnapshotView.js +58 -0
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -0
- package/dist/ssr/content/DataTable.js +13 -9
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/FileBrowser.js +3 -0
- package/dist/ssr/content/FileBrowser.js.map +1 -1
- package/dist/ssr/content/FileGrid.js +38 -0
- package/dist/ssr/content/FileGrid.js.map +1 -0
- package/dist/ssr/content/FileTree.js +2 -2
- package/dist/ssr/content/FileTree.js.map +1 -1
- package/dist/ssr/content/FileView.js +356 -75
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/MarkdownView.js +6 -0
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/content/Pagination.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +37 -24
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/chart-cursor.js +33 -0
- package/dist/ssr/content/chart-cursor.js.map +1 -0
- package/dist/ssr/content/chart-explorer.js +147 -0
- package/dist/ssr/content/chart-explorer.js.map +1 -0
- package/dist/ssr/content/chart-inspection.js +447 -0
- package/dist/ssr/content/chart-inspection.js.map +1 -0
- package/dist/ssr/content/chart-line-gaps.js +53 -0
- package/dist/ssr/content/chart-line-gaps.js.map +1 -0
- package/dist/ssr/content/chart-map-viewport.js +5 -1
- package/dist/ssr/content/chart-map-viewport.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js +63 -0
- package/dist/ssr/content/chart-snapshot.js.map +1 -0
- package/dist/ssr/content/chart-state-timeline.js +32 -4
- package/dist/ssr/content/chart-state-timeline.js.map +1 -1
- package/dist/ssr/content/chart-svg.js +54 -0
- package/dist/ssr/content/chart-svg.js.map +1 -0
- package/dist/ssr/content/collection-selection.js +109 -0
- package/dist/ssr/content/collection-selection.js.map +1 -0
- package/dist/ssr/content/delimited-preferences.js +21 -0
- package/dist/ssr/content/delimited-preferences.js.map +1 -0
- package/dist/ssr/content/file-tree.js.map +1 -1
- package/dist/ssr/content/file-view-preview.js +11 -7
- package/dist/ssr/content/file-view-preview.js.map +1 -1
- package/dist/ssr/content/index.js +9 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/feedback/InlineGuidance.js +17 -3
- package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js +81 -7
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +6 -0
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/feedback/toast.js +29 -6
- package/dist/ssr/feedback/toast.js.map +1 -1
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
- package/dist/ssr/inputs/Select.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +3 -3
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +19 -11
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/behaviors.js +1 -1
- package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
- package/dist/ssr/intl/Format.js +61 -0
- package/dist/ssr/intl/Format.js.map +1 -1
- package/dist/ssr/intl/index.js.map +1 -1
- package/dist/ssr/intl/messages.js +130 -2
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +368 -275
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js +43 -0
- package/dist/ssr/layout/BottomSheet.js.map +1 -0
- package/dist/ssr/layout/DetailPanel.js +11 -4
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +181 -0
- package/dist/ssr/layout/Navigation.js.map +1 -0
- package/dist/ssr/layout/PanelDialog.js +111 -26
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/ScrollArea.js +16 -1
- package/dist/ssr/layout/ScrollArea.js.map +1 -1
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SidebarItemPreview.js +133 -0
- package/dist/ssr/layout/SidebarItemPreview.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +3 -0
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/app-workspace-state.js.map +1 -1
- package/dist/ssr/layout/index.js +3 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js +23 -0
- package/dist/ssr/layout/navigation-model.js.map +1 -0
- package/dist/ssr/layout/scroll-fade.js +100 -0
- package/dist/ssr/layout/scroll-fade.js.map +1 -0
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
- package/dist/ssr/surfaces/StatusBadge.js +2 -1
- package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tabler.css +1 -1
- package/dist/types/actions/Button.d.ts +4 -0
- package/dist/types/actions/Disclosure.d.ts +1 -0
- package/dist/types/actions/FilterChip.d.ts +4 -0
- package/dist/types/actions/SplitButton.d.ts +6 -0
- package/dist/types/actions/SpotlightSearch.d.ts +0 -4
- package/dist/types/actions/Tabs.d.ts +4 -0
- package/dist/types/actions/index.d.ts +4 -4
- package/dist/types/chat/ChatComposer.d.ts +20 -2
- package/dist/types/chat/ChatContextPopup.d.ts +6 -0
- package/dist/types/chat/ChatPrimitives.d.ts +4 -0
- package/dist/types/chat/ChatTasks.d.ts +15 -0
- package/dist/types/chat/ChatTimeline.d.ts +2 -0
- package/dist/types/chat/chat-behavior.d.ts +0 -3
- package/dist/types/chat/composer-document.d.ts +14 -0
- package/dist/types/chat/index.d.ts +8 -1
- package/dist/types/chat/types.d.ts +7 -0
- package/dist/types/content/Chart.d.ts +42 -23
- package/dist/types/content/ChartExplorer.d.ts +34 -0
- package/dist/types/content/ChartExplorerControls.d.ts +10 -0
- package/dist/types/content/ChartFilterControls.d.ts +21 -0
- package/dist/types/content/ChartSnapshotView.d.ts +11 -0
- package/dist/types/content/DataTable.d.ts +4 -0
- package/dist/types/content/FileBrowser.d.ts +1 -0
- package/dist/types/content/FileGrid.d.ts +21 -0
- package/dist/types/content/FileView.d.ts +20 -0
- package/dist/types/content/PdfPreview.d.ts +8 -1
- package/dist/types/content/chart-cursor.d.ts +15 -0
- package/dist/types/content/chart-explorer.d.ts +48 -0
- package/dist/types/content/chart-inspection.d.ts +40 -0
- package/dist/types/content/chart-line-gaps.d.ts +5 -0
- package/dist/types/content/chart-map-viewport.d.ts +1 -1
- package/dist/types/content/chart-snapshot.d.ts +26 -0
- package/dist/types/content/chart-svg.d.ts +21 -0
- package/dist/types/content/collection-selection.d.ts +24 -0
- package/dist/types/content/delimited-preferences.d.ts +11 -0
- package/dist/types/content/file-tree.d.ts +2 -0
- package/dist/types/content/file-view-preview.d.ts +4 -1
- package/dist/types/content/index.d.ts +16 -2
- package/dist/types/feedback/InlineGuidance.d.ts +1 -0
- package/dist/types/feedback/dialog-core.d.ts +11 -0
- package/dist/types/feedback/prompts.d.ts +2 -0
- package/dist/types/feedback/toast.d.ts +7 -1
- package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -1
- package/dist/types/intl/Format.d.ts +9 -0
- package/dist/types/intl/index.d.ts +1 -1
- package/dist/types/intl/messages.d.ts +31 -1
- package/dist/types/layout/AppWorkspace.d.ts +35 -18
- package/dist/types/layout/BottomSheet.d.ts +23 -0
- package/dist/types/layout/DetailPanel.d.ts +1 -0
- package/dist/types/layout/Navigation.d.ts +8 -0
- package/dist/types/layout/PanelDialog.d.ts +14 -1
- package/dist/types/layout/ScrollArea.d.ts +4 -0
- package/dist/types/layout/Settings.d.ts +1 -1
- package/dist/types/layout/SidebarItemPreview.d.ts +11 -0
- package/dist/types/layout/index.d.ts +4 -1
- package/dist/types/layout/navigation-model.d.ts +48 -0
- package/dist/types/layout/scroll-fade.d.ts +3 -0
- package/dist/types/surfaces/DescriptionList.d.ts +1 -1
- package/dist/types/surfaces/StatusBadge.d.ts +1 -1
- package/package.json +5 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["APP_WORKSPACE_DETAIL_MAX","APP_WORKSPACE_DETAIL_MIN","APP_WORKSPACE_DRAWER_MAX","APP_WORKSPACE_DRAWER_MIN","APP_WORKSPACE_MAIN_MIN","APP_WORKSPACE_PANE_MAX","APP_WORKSPACE_PANE_MIN","APP_WORKSPACE_SIDEBAR_COLLAPSED","APP_WORKSPACE_SIDEBAR_MAX","APP_WORKSPACE_SIDEBAR_MIN","appWorkspacePanelVariable","appWorkspaceResizeLimits","fitAppWorkspacePaneSizes","normalizeAppWorkspaceLayoutState","resolveAppWorkspaceSidebarWidth","safeAppWorkspacePanelId","shouldCollapseAppWorkspaceSidebar","HANDLE_SELECTOR","ROOT_SELECTOR","LAYOUT_REGION_SELECTOR","join","LABEL_SELECTOR","LABEL_TEXT_SELECTOR","ITEM_SELECTOR","clamp","value","min","max","Math","round","eventElement","event","target","Element","resizeHandle","closest","resizeKind","handle","dataset","appWorkspaceResize","resizeDirection","kind","workspaceResizeEdge","workspaceRoot","workspaceResizable","root","rootElements","selector","Array","from","querySelectorAll","filter","element","sidebarElement","mainElement","sidebarCollapsible","workspaceCollapsible","isVisible","Boolean","hidden","getComputedStyle","display","elementSize","rect","getBoundingClientRect","height","width","controlledPanel","controls","getAttribute","panel","document","getElementById","controlsResizableRegion","panelId","workspacePanelId","numberData","key","fallback","Number","isFinite","sizeLimits","controlled","main","panes","pane","classList","contains","details","sidebarWidth","otherDetailWidth","reduce","total","detail","defaultMin","defaultMax","workspaceSize","reservedSize","currentSize","updateHandleValue","size","limits","setAttribute","String","applySize","requestedSize","options","collapsible","sidebar","snapSidebar","collapsed","style","setProperty","sidebarCollapsed","reconcilePanes","layoutState","active","handles","length","Set","map","fixedWidth","has","fits","flatMap","preferred","moved","liveSize","paneWidths","desired","sizes","forEach","fit","index","measureLabel","label","text","querySelector","overflow","scrollWidth","clientWidth","installAppWorkspaceController","eventRoot","readState","version","resizeFrame","pendingClient","persistSize","writeState","flushPointerMove","cancelAnimationFrame","client","startClient","startSize","direction","onPointerMove","pointerId","clientY","clientX","requestAnimationFrame","stopResize","PointerEvent","finished","workspaceResizeActive","hasPointerCapture","releasePointerCapture","body","userSelect","previousUserSelect","window","removeEventListener","onPointerDown","button","preventDefault","setPointerCapture","addEventListener","onKeyDown","current","step","shiftKey","requested","collapsibleSidebar","allRoots","nested","HTMLElement","matches","roots","reconcile","persisted","detailWidths","drawerHeights","undefined","onFocusIn","onPointerOver","relatedTarget","Node","clearMeasuredLabels","removeProperty","reconcileFrame","scheduleReconcile","clearLabels","onResize","observedRoots","resizeObserver","ResizeObserver","syncObservedRoots","next","unobserve","delete","add","observe","layoutNode","node","mutationObserver","MutationObserver","records","changed","some","record","type","addedNodes","removedNodes","attributes","attributeFilter","childList","subtree","disconnect","clear"],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import {\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n direction: 1 | -1;\n previousUserSelect: string;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst LABEL_SELECTOR = \".k2b-app-workspace__sidebar-item-label[data-marquee='true']\";\nconst LABEL_TEXT_SELECTOR = \".k2b-app-workspace__sidebar-item-label-text\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n (kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle))?.dataset.workspaceResizable === \"true\";\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) => pane.closest(\".k2b-app-workspace__main\") === main && !pane.classList.contains(\"is-primary\") && isVisible(pane),\n )\n : [];\n const details = rootElements(root, \".k2b-app-workspace__detail\").filter(isVisible);\n const sidebarWidth = elementSize(sidebarElement(root), \"sidebar\");\n const otherDetailWidth = details.reduce((total, detail) => total + (detail === controlled ? 0 : elementSize(detail, \"detail\")), 0);\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n return appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : root.getBoundingClientRect().width,\n reservedSize:\n kind === \"sidebar\"\n ? otherDetailWidth\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0)\n : kind === \"detail\"\n ? sidebarWidth + otherDetailWidth\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n};\n\nconst currentSize = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? elementSize(sidebarElement(root), kind) : elementSize(controlledPanel(root, handle), kind);\n\nconst updateHandleValue = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n size: number,\n limits = sizeLimits(root, handle, kind),\n) => {\n const { min, max } = limits;\n handle.setAttribute(\"aria-valuemin\", String(min));\n handle.setAttribute(\"aria-valuemax\", String(max));\n handle.setAttribute(\"aria-valuenow\", String(clamp(size, min, max)));\n};\n\nconst applySize = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n requestedSize: number,\n /**\n * `snapSidebar: false` tracks the pointer continuously and only *previews*\n * the collapsed state. Snapping (the default, and what keyboard steps and\n * reconciliation want) quantises the width to either the collapsed rail or\n * the sidebar minimum, which during a live drag makes the handle jump.\n */\n options: { snapSidebar?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind);\n if (kind === \"sidebar\") {\n const collapsible = sidebarCollapsible(root);\n const sidebar =\n options.snapSidebar === false\n ? { width: clamp(requestedSize, min, max), collapsed: shouldCollapseAppWorkspaceSidebar(requestedSize, collapsible) }\n : resolveAppWorkspaceSidebarWidth(requestedSize, max, collapsible);\n root.style.setProperty(\"--k2b-workspace-sidebar-width\", `${sidebar.width}px`);\n // Cloud removes the attribute rather than writing \"false\", so that a\n // presence selector (`[data-sidebar-collapsed]`) means \"collapsed\".\n if (sidebar.collapsed) root.dataset.sidebarCollapsed = \"true\";\n else delete root.dataset.sidebarCollapsed;\n updateHandleValue(root, handle, kind, sidebar.width, { min, max });\n return sidebar.width;\n }\n const size = clamp(requestedSize, min, max);\n root.style.setProperty(appWorkspacePanelVariable(kind, panelId(handle)), `${size}px`);\n updateHandleValue(root, handle, kind, size, { min, max });\n return size;\n};\n\ntype PaneFit = {\n desired: number;\n handle: HTMLElement;\n min: number;\n};\n\n/**\n * Fits all auxiliary main panes as one group. One main region remains the\n * flexible anchor; the others keep their preferred sizes while space permits\n * and give up the same share of their optional space when the container,\n * navigation or detail panels reduce the available width.\n */\nconst reconcilePanes = (root: HTMLElement, layoutState: AppWorkspaceLayoutState, active: ActiveResize | null = null) => {\n const main = mainElement(root);\n if (!main || !isVisible(main)) return;\n const handles = rootElements(root, HANDLE_SELECTOR).filter(\n (handle) => resizeKind(handle) === \"pane\" && controlsResizableRegion(root, handle, \"pane\"),\n );\n if (!handles.length) return;\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : (layoutState.paneWidths?.[panelId(handle)] ?? numberData(handle, \"workspaceDefaultSize\", elementSize(panel, \"pane\")));\n const desired = clamp(preferred, min, max);\n return [{ desired, handle, min }];\n });\n if (!fits.length) return;\n\n const sizes = fitAppWorkspacePaneSizes(fits, main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN);\n fits.forEach((fit, index) => {\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(fit.handle)), `${sizes[index]}px`);\n });\n fits.forEach((fit, index) => updateHandleValue(root, fit.handle, \"pane\", sizes[index]!));\n};\n\n/**\n * Marquee support for a truncated sidebar label.\n *\n * The animation needs to know how far to travel, and that is only knowable\n * once the label has been laid out — so it is measured lazily, on the same\n * hover/focus that triggers it, and published as a custom property. Labels\n * that fit get no `data-overflow`, so they never animate.\n */\nconst measureLabel = (label: HTMLElement) => {\n const text = label.querySelector<HTMLElement>(LABEL_TEXT_SELECTOR);\n if (!text) return;\n const overflow = Math.max(0, text.scrollWidth - label.clientWidth);\n label.style.setProperty(\"--k2b-sidebar-label-overflow\", `${overflow}px`);\n if (overflow > 2) label.dataset.overflow = \"true\";\n else delete label.dataset.overflow;\n};\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n active.moved ||= client !== active.startClient;\n active.liveSize = applySize(\n active.root,\n active.handle,\n active.kind,\n active.startSize + (client - active.startClient) * active.direction,\n { snapSidebar: active.kind !== \"sidebar\" },\n );\n if (active.kind === \"sidebar\" || active.kind === \"detail\") reconcilePanes(active.root, layoutState, active);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!active || event.pointerId !== active.pointerId) return;\n pendingClient = active.kind === \"drawer\" ? event.clientY : event.clientX;\n if (resizeFrame !== null) return;\n resizeFrame = requestAnimationFrame(flushPointerMove);\n };\n const stopResize = (event?: Event) => {\n if (!active || (event instanceof PointerEvent && event.pointerId !== active.pointerId)) return;\n flushPointerMove();\n const finished = active;\n active = null;\n delete finished.root.dataset.workspaceResizeActive;\n delete finished.handle.dataset.workspaceResizeActive;\n if (finished.moved) {\n // A pane's rendered width may have been fitted below the pointer's live\n // preference to keep the main region usable. Persist that preference,\n // then fit the visible panes from the updated state. Reapplying it through\n // the per-handle limits here would count the already-fitted sibling panes\n // a second time and permanently shrink the preference on release.\n const size =\n finished.kind === \"pane\" ? finished.liveSize : applySize(finished.root, finished.handle, finished.kind, finished.liveSize);\n persistSize(finished.handle, finished.kind, size);\n if (finished.kind !== \"drawer\") reconcilePanes(finished.root, layoutState);\n }\n if (finished.handle.hasPointerCapture?.(finished.pointerId)) finished.handle.releasePointerCapture(finished.pointerId);\n document.body.style.userSelect = finished.previousUserSelect;\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", stopResize);\n window.removeEventListener(\"pointercancel\", stopResize);\n window.removeEventListener(\"blur\", stopResize);\n };\n const onPointerDown = (event: PointerEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind) || event.button !== 0)\n return;\n event.preventDefault();\n stopResize();\n pendingClient = null;\n const startSize = currentSize(root, handle, kind);\n active = {\n handle,\n root,\n kind,\n pointerId: event.pointerId,\n startClient: kind === \"drawer\" ? event.clientY : event.clientX,\n startSize,\n liveSize: startSize,\n moved: false,\n direction: resizeDirection(handle, kind),\n previousUserSelect: document.body.style.userSelect,\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n document.body.style.userSelect = \"none\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted);\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n const label = eventElement(event)?.closest<HTMLElement>(ITEM_SELECTOR)?.querySelector<HTMLElement>(LABEL_SELECTOR);\n if (label) requestAnimationFrame(() => measureLabel(label));\n };\n\n // Measured on entry rather than on every render: `scrollWidth` forces layout,\n // and a sidebar can hold hundreds of rows.\n const onPointerOver = (event: PointerEvent) => {\n const label = eventElement(event)?.closest<HTMLElement>(LABEL_SELECTOR);\n if (!label || (event.relatedTarget instanceof Node && label.contains(event.relatedTarget))) return;\n requestAnimationFrame(() => measureLabel(label));\n };\n\n // A resize changes every label's available width, so the cached measurement\n // is dropped and taken again on the next hover or focus.\n const clearMeasuredLabels = () => {\n eventRoot.querySelectorAll<HTMLElement>(LABEL_SELECTOR).forEach((label) => {\n delete label.dataset.overflow;\n label.style.removeProperty(\"--k2b-sidebar-label-overflow\");\n });\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = (clearLabels = false) => {\n if (clearLabels) clearMeasuredLabels();\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n });\n };\n const onResize = () => scheduleReconcile(true);\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n scheduleReconcile(true);\n });\n const syncObservedRoots = () => {\n if (!resizeObserver) return;\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n resizeObserver.unobserve(root);\n observedRoots.delete(root);\n }\n });\n next.forEach((root) => {\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver.observe(root);\n });\n };\n const layoutNode = (node: Node) =>\n node instanceof Element && (node.matches(LAYOUT_REGION_SELECTOR) || Boolean(node.querySelector(LAYOUT_REGION_SELECTOR)));\n const mutationObserver =\n typeof MutationObserver === \"undefined\"\n ? null\n : new MutationObserver((records) => {\n const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.addEventListener(\"pointerover\", onPointerOver as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncObservedRoots();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n observedRoots.clear();\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.removeEventListener(\"pointerover\", onPointerOver as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"AAAA,SACEA,wBAAwB,EACxBC,wBAAwB,EACxBC,wBAAwB,EACxBC,wBAAwB,EACxBC,sBAAsB,EACtBC,sBAAsB,EACtBC,sBAAsB,EACtBC,+BAA+B,EAC/BC,yBAAyB,EACzBC,yBAAyB,EAGzBC,yBAAyB,EACzBC,wBAAwB,EACxBC,wBAAwB,EACxBC,gCAAgC,EAChCC,+BAA+B,EAC/BC,uBAAuB,EACvBC,iCAAiC,QAC5B,uBAAuB;AAqB9B,MAAMC,eAAe,GAAG,6BAA6B;AACrD,MAAMC,aAAa,GAAG,0BAA0B;AAChD,MAAMC,sBAAsB,GAAG,CAC7BD,aAAa,EACb,6BAA6B,EAC7B,+BAA+B,EAC/B,4BAA4B,EAC5B,4BAA4B,EAC5BD,eAAe,CAChB,CAACG,IAAI,CAAC,GAAG,CAAC;AACX,MAAMC,cAAc,GAAG,6DAA6D;AACpF,MAAMC,mBAAmB,GAAG,6CAA6C;AACzE,MAAMC,aAAa,GAAG,kCAAkC;AACxD,MAAMC,KAAK,GAAGA,CAACC,KAAa,EAAEC,GAAW,EAAEC,GAAW,KAAKC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACF,GAAG,CAACC,GAAG,EAAEC,IAAI,CAACD,GAAG,CAACD,GAAG,EAAED,KAAK,CAAC,CAAC,CAAC;AAC1G,MAAMK,YAAY,GAAIC,KAAY,IAAMA,KAAK,CAACC,MAAM,YAAYC,OAAO,GAAGF,KAAK,CAACC,MAAM,GAAG,IAAK;AAC9F,MAAME,YAAY,GAAIH,KAAY,IAAKD,YAAY,CAACC,KAAK,CAAC,EAAEI,OAAO,CAAclB,eAAe,CAAC,IAAI,IAAI;AACzG,MAAMmB,UAAU,GAAIC,MAAmB,IAAoC;EACzE,MAAMZ,KAAK,GAAGY,MAAM,CAACC,OAAO,CAACC,kBAAkB;EAC/C,OAAOd,KAAK,KAAK,SAAS,IAAIA,KAAK,KAAK,MAAM,IAAIA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,IAAI;AAC3G,CAAC;AACD,MAAMe,eAAe,GAAGA,CAACH,MAAmB,EAAEI,IAA4B,KACxE,CAACJ,MAAM,CAACC,OAAO,CAACI,mBAAmB,KAAKD,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACnG,MAAME,aAAa,GAAIN,MAAmB,IAAKA,MAAM,CAACF,OAAO,CAAcjB,aAAa,CAAC;AACzF,MAAM0B,kBAAkB,GAAIC,IAAiB,IAAKA,IAAI,CAACP,OAAO,CAACM,kBAAkB,KAAK,OAAO;AAC7F,MAAME,YAAY,GAAGA,CAACD,IAAiB,EAAEE,QAAgB,KACvDC,KAAK,CAACC,IAAI,CAACJ,IAAI,CAACK,gBAAgB,CAAcH,QAAQ,CAAC,CAAC,CAACI,MAAM,CAAEC,OAAO,IAAKA,OAAO,CAACjB,OAAO,CAACjB,aAAa,CAAC,KAAK2B,IAAI,CAAC;AACvH,MAAMQ,cAAc,GAAIR,IAAiB,IAAKC,YAAY,CAACD,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AAC1G,MAAMS,WAAW,GAAIT,IAAiB,IAAKC,YAAY,CAACD,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AACpG,MAAMU,kBAAkB,GAAIV,IAAiB,IAAKQ,cAAc,CAACR,IAAI,CAAC,EAAEP,OAAO,CAACkB,oBAAoB,KAAK,MAAM;AAC/G,MAAMC,SAAS,GAAIL,OAA2B,IAC5CM,OAAO,CAACN,OAAO,IAAI,CAACA,OAAO,CAACO,MAAM,IAAIC,gBAAgB,CAACR,OAAO,CAAC,CAACS,OAAO,KAAK,MAAM,CAAC;AACrF,MAAMC,WAAW,GAAGA,CAACV,OAA2B,EAAEX,IAA4B,KAAK;EACjF,IAAI,CAACgB,SAAS,CAACL,OAAO,CAAC,EAAE,OAAO,CAAC;EACjC,MAAMW,IAAI,GAAGX,OAAO,CAACY,qBAAqB,CAAC,CAAC;EAC5C,OAAOvB,IAAI,KAAK,QAAQ,GAAGsB,IAAI,CAACE,MAAM,GAAGF,IAAI,CAACG,KAAK;AACrD,CAAC;AACD,MAAMC,eAAe,GAAGA,CAACtB,IAAiB,EAAER,MAAmB,KAAK;EAClE,MAAM+B,QAAQ,GAAG/B,MAAM,CAACgC,YAAY,CAAC,eAAe,CAAC;EACrD,IAAI,CAACD,QAAQ,EAAE,OAAO,IAAI;EAC1B,MAAME,KAAK,GAAGC,QAAQ,CAACC,cAAc,CAACJ,QAAQ,CAAC;EAC/C,OAAOE,KAAK,EAAEnC,OAAO,CAACjB,aAAa,CAAC,KAAK2B,IAAI,GAAGyB,KAAK,GAAG,IAAI;AAC9D,CAAC;AACD,MAAMG,uBAAuB,GAAGA,CAAC5B,IAAiB,EAAER,MAAmB,EAAEI,IAA4B,KACnG,CAACA,IAAI,KAAK,SAAS,GAAGY,cAAc,CAACR,IAAI,CAAC,GAAGsB,eAAe,CAACtB,IAAI,EAAER,MAAM,CAAC,GAAGC,OAAO,CAACM,kBAAkB,KAAK,MAAM;AACpH,MAAM8B,OAAO,GAAIrC,MAAmB,IAAKtB,uBAAuB,CAACsB,MAAM,CAACC,OAAO,CAACqC,gBAAgB,IAAI,SAAS,CAAC,IAAI,SAAS;AAC3H,MAAMC,UAAU,GAAGA,CAACvC,MAAmB,EAAEwC,GAAqE,EAAEC,QAAgB,KAAK;EACnI,MAAMrD,KAAK,GAAGsD,MAAM,CAAC1C,MAAM,CAACC,OAAO,CAACuC,GAAG,CAAC,CAAC;EACzC,OAAOE,MAAM,CAACC,QAAQ,CAACvD,KAAK,CAAC,GAAGA,KAAK,GAAGqD,QAAQ;AAClD,CAAC;AAED,MAAMG,UAAU,GAAGA,CAACpC,IAAiB,EAAER,MAAmB,EAAEI,IAA4B,KAAK;EAC3F,MAAMyC,UAAU,GAAGf,eAAe,CAACtB,IAAI,EAAER,MAAM,CAAC;EAChD,MAAM8C,IAAI,GAAG1C,IAAI,KAAK,MAAM,GAAGJ,MAAM,CAACF,OAAO,CAAc,0BAA0B,CAAC,GAAGmB,WAAW,CAACT,IAAI,CAAC;EAC1G,MAAMuC,KAAK,GAAGD,IAAI,GACdnC,KAAK,CAACC,IAAI,CAACkC,IAAI,CAACjC,gBAAgB,CAAc,+BAA+B,CAAC,CAAC,CAACC,MAAM,CACnFkC,IAAI,IAAKA,IAAI,CAAClD,OAAO,CAAC,0BAA0B,CAAC,KAAKgD,IAAI,IAAI,CAACE,IAAI,CAACC,SAAS,CAACC,QAAQ,CAAC,YAAY,CAAC,IAAI9B,SAAS,CAAC4B,IAAI,CACzH,CAAC,GACD,EAAE;EACN,MAAMG,OAAO,GAAG1C,YAAY,CAACD,IAAI,EAAE,4BAA4B,CAAC,CAACM,MAAM,CAACM,SAAS,CAAC;EAClF,MAAMgC,YAAY,GAAG3B,WAAW,CAACT,cAAc,CAACR,IAAI,CAAC,EAAE,SAAS,CAAC;EACjE,MAAM6C,gBAAgB,GAAGF,OAAO,CAACG,MAAM,CAAC,CAACC,KAAK,EAAEC,MAAM,KAAKD,KAAK,IAAIC,MAAM,KAAKX,UAAU,GAAG,CAAC,GAAGpB,WAAW,CAAC+B,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;EAClI,MAAMC,UAAU,GACdrD,IAAI,KAAK,SAAS,GACdhC,yBAAyB,GACzBgC,IAAI,KAAK,MAAM,GACbnC,sBAAsB,GACtBmC,IAAI,KAAK,QAAQ,GACfxC,wBAAwB,GACxBE,wBAAwB;EAClC,MAAM4F,UAAU,GACdtD,IAAI,KAAK,SAAS,GACdjC,yBAAyB,GACzBiC,IAAI,KAAK,MAAM,GACbpC,sBAAsB,GACtBoC,IAAI,KAAK,QAAQ,GACfzC,wBAAwB,GACxBE,wBAAwB;EAClC,OAAOS,wBAAwB,CAAC;IAC9B8B,IAAI;IACJuD,aAAa,EACXvD,IAAI,KAAK,QAAQ,GACbI,IAAI,CAACmB,qBAAqB,CAAC,CAAC,CAACC,MAAM,GACnCxB,IAAI,KAAK,MAAM,IAAI0C,IAAI,GACrBA,IAAI,CAACnB,qBAAqB,CAAC,CAAC,CAACE,KAAK,GAClCrB,IAAI,CAACmB,qBAAqB,CAAC,CAAC,CAACE,KAAK;IAC1C+B,YAAY,EACVxD,IAAI,KAAK,SAAS,GACdiD,gBAAgB,GAChBjD,IAAI,KAAK,MAAM,GACb2C,KAAK,CAACO,MAAM,CAAC,CAACC,KAAK,EAAEP,IAAI,KAAKO,KAAK,IAAIP,IAAI,KAAKH,UAAU,GAAG,CAAC,GAAGpB,WAAW,CAACuB,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAC/F5C,IAAI,KAAK,QAAQ,GACfgD,YAAY,GAAGC,gBAAgB,GAC/B,CAAC;IACXhE,GAAG,EAAEkD,UAAU,CAACvC,MAAM,EAAE,kBAAkB,EAAEyD,UAAU,CAAC;IACvDnE,GAAG,EAAEiD,UAAU,CAACvC,MAAM,EAAE,kBAAkB,EAAE0D,UAAU,CAAC;IACvDxC,kBAAkB,EAAEd,IAAI,KAAK,SAAS,IAAIc,kBAAkB,CAACV,IAAI;EACnE,CAAC,CAAC;AACJ,CAAC;AAED,MAAMqD,WAAW,GAAGA,CAACrD,IAAiB,EAAER,MAAmB,EAAEI,IAA4B,KACvFA,IAAI,KAAK,SAAS,GAAGqB,WAAW,CAACT,cAAc,CAACR,IAAI,CAAC,EAAEJ,IAAI,CAAC,GAAGqB,WAAW,CAACK,eAAe,CAACtB,IAAI,EAAER,MAAM,CAAC,EAAEI,IAAI,CAAC;AAEjH,MAAM0D,iBAAiB,GAAGA,CACxBtD,IAAiB,EACjBR,MAAmB,EACnBI,IAA4B,EAC5B2D,IAAY,EACZC,MAAM,GAAGpB,UAAU,CAACpC,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC,KACpC;EACH,MAAM;IAAEf,GAAG;IAAEC;EAAI,CAAC,GAAG0E,MAAM;EAC3BhE,MAAM,CAACiE,YAAY,CAAC,eAAe,EAAEC,MAAM,CAAC7E,GAAG,CAAC,CAAC;EACjDW,MAAM,CAACiE,YAAY,CAAC,eAAe,EAAEC,MAAM,CAAC5E,GAAG,CAAC,CAAC;EACjDU,MAAM,CAACiE,YAAY,CAAC,eAAe,EAAEC,MAAM,CAAC/E,KAAK,CAAC4E,IAAI,EAAE1E,GAAG,EAAEC,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM6E,SAAS,GAAGA,CAChB3D,IAAiB,EACjBR,MAAmB,EACnBI,IAA4B,EAC5BgE,aAAqB;AACrB;AACF;AACA;AACA;AACA;AACA;AACEC,OAAkC,GAAG,CAAC,CAAC,KACpC;EACH,MAAM;IAAEhF,GAAG;IAAEC;EAAI,CAAC,GAAGsD,UAAU,CAACpC,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC;EACnD,IAAIA,IAAI,KAAK,SAAS,EAAE;IACtB,MAAMkE,WAAW,GAAGpD,kBAAkB,CAACV,IAAI,CAAC;IAC5C,MAAM+D,OAAO,GACXF,OAAO,CAACG,WAAW,KAAK,KAAK,GACzB;MAAE3C,KAAK,EAAE1C,KAAK,CAACiF,aAAa,EAAE/E,GAAG,EAAEC,GAAG,CAAC;MAAEmF,SAAS,EAAE9F,iCAAiC,CAACyF,aAAa,EAAEE,WAAW;IAAE,CAAC,GACnH7F,+BAA+B,CAAC2F,aAAa,EAAE9E,GAAG,EAAEgF,WAAW,CAAC;IACtE9D,IAAI,CAACkE,KAAK,CAACC,WAAW,CAAC,+BAA+B,EAAE,GAAGJ,OAAO,CAAC1C,KAAK,IAAI,CAAC;IAC7E;IACA;IACA,IAAI0C,OAAO,CAACE,SAAS,EAAEjE,IAAI,CAACP,OAAO,CAAC2E,gBAAgB,GAAG,MAAM,CAAC,KACzD,OAAOpE,IAAI,CAACP,OAAO,CAAC2E,gBAAgB;IACzCd,iBAAiB,CAACtD,IAAI,EAAER,MAAM,EAAEI,IAAI,EAAEmE,OAAO,CAAC1C,KAAK,EAAE;MAAExC,GAAG;MAAEC;IAAI,CAAC,CAAC;IAClE,OAAOiF,OAAO,CAAC1C,KAAK;EACtB;EACA,MAAMkC,IAAI,GAAG5E,KAAK,CAACiF,aAAa,EAAE/E,GAAG,EAAEC,GAAG,CAAC;EAC3CkB,IAAI,CAACkE,KAAK,CAACC,WAAW,CAACtG,yBAAyB,CAAC+B,IAAI,EAAEiC,OAAO,CAACrC,MAAM,CAAC,CAAC,EAAE,GAAG+D,IAAI,IAAI,CAAC;EACrFD,iBAAiB,CAACtD,IAAI,EAAER,MAAM,EAAEI,IAAI,EAAE2D,IAAI,EAAE;IAAE1E,GAAG;IAAEC;EAAI,CAAC,CAAC;EACzD,OAAOyE,IAAI;AACb,CAAC;AAQD;AACA;AACA;AACA;AACA;AACA;AACA,MAAMc,cAAc,GAAGA,CAACrE,IAAiB,EAAEsE,WAAoC,EAAEC,MAA2B,GAAG,IAAI,KAAK;EACtH,MAAMjC,IAAI,GAAG7B,WAAW,CAACT,IAAI,CAAC;EAC9B,IAAI,CAACsC,IAAI,IAAI,CAAC1B,SAAS,CAAC0B,IAAI,CAAC,EAAE;EAC/B,MAAMkC,OAAO,GAAGvE,YAAY,CAACD,IAAI,EAAE5B,eAAe,CAAC,CAACkC,MAAM,CACvDd,MAAM,IAAKD,UAAU,CAACC,MAAM,CAAC,KAAK,MAAM,IAAIoC,uBAAuB,CAAC5B,IAAI,EAAER,MAAM,EAAE,MAAM,CAC3F,CAAC;EACD,IAAI,CAACgF,OAAO,CAACC,MAAM,EAAE;EAErB,MAAMpC,UAAU,GAAG,IAAIqC,GAAG,CAACF,OAAO,CAACG,GAAG,CAAEnF,MAAM,IAAK8B,eAAe,CAACtB,IAAI,EAAER,MAAM,CAAC,CAAC,CAACc,MAAM,CAACO,OAAO,CAAC,CAAC;EAClG,MAAM+D,UAAU,GAAGzE,KAAK,CAACC,IAAI,CAACkC,IAAI,CAACjC,gBAAgB,CAAc,+BAA+B,CAAC,CAAC,CAC/FC,MAAM,CACJkC,IAAI,IACHA,IAAI,CAAClD,OAAO,CAAC,0BAA0B,CAAC,KAAKgD,IAAI,IACjD,CAACE,IAAI,CAACC,SAAS,CAACC,QAAQ,CAAC,YAAY,CAAC,IACtC9B,SAAS,CAAC4B,IAAI,CAAC,IACf,CAACH,UAAU,CAACwC,GAAG,CAACrC,IAAI,CACxB,CAAC,CACAM,MAAM,CAAC,CAACC,KAAK,EAAEP,IAAI,KAAKO,KAAK,GAAG9B,WAAW,CAACuB,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;EAChE,MAAMsC,IAAe,GAAGN,OAAO,CAACO,OAAO,CAAEvF,MAAM,IAAK;IAClD,MAAMiC,KAAK,GAAGH,eAAe,CAACtB,IAAI,EAAER,MAAM,CAAC;IAC3C,IAAI,CAACoB,SAAS,CAACa,KAAK,CAAC,EAAE,OAAO,EAAE;IAChC,MAAM5C,GAAG,GAAGkD,UAAU,CAACvC,MAAM,EAAE,kBAAkB,EAAE/B,sBAAsB,CAAC;IAC1E,MAAMqB,GAAG,GAAGC,IAAI,CAACD,GAAG,CAACD,GAAG,EAAEkD,UAAU,CAACvC,MAAM,EAAE,kBAAkB,EAAEhC,sBAAsB,CAAC,CAAC;IACzF,MAAMwH,SAAS,GACbT,MAAM,EAAEU,KAAK,IAAIV,MAAM,CAACvE,IAAI,KAAKA,IAAI,IAAIuE,MAAM,CAAC3E,IAAI,KAAK,MAAM,IAAI2E,MAAM,CAAC/E,MAAM,KAAKA,MAAM,GACvF+E,MAAM,CAACW,QAAQ,GACdZ,WAAW,CAACa,UAAU,GAAGtD,OAAO,CAACrC,MAAM,CAAC,CAAC,IAAIuC,UAAU,CAACvC,MAAM,EAAE,sBAAsB,EAAEyB,WAAW,CAACQ,KAAK,EAAE,MAAM,CAAC,CAAE;IAC3H,MAAM2D,OAAO,GAAGzG,KAAK,CAACqG,SAAS,EAAEnG,GAAG,EAAEC,GAAG,CAAC;IAC1C,OAAO,CAAC;MAAEsG,OAAO;MAAE5F,MAAM;MAAEX;IAAI,CAAC,CAAC;EACnC,CAAC,CAAC;EACF,IAAI,CAACiG,IAAI,CAACL,MAAM,EAAE;EAElB,MAAMY,KAAK,GAAGtH,wBAAwB,CAAC+G,IAAI,EAAExC,IAAI,CAACnB,qBAAqB,CAAC,CAAC,CAACE,KAAK,GAAGuD,UAAU,GAAGrH,sBAAsB,CAAC;EACtHuH,IAAI,CAACQ,OAAO,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAK;IAC3BxF,IAAI,CAACkE,KAAK,CAACC,WAAW,CAACtG,yBAAyB,CAAC,MAAM,EAAEgE,OAAO,CAAC0D,GAAG,CAAC/F,MAAM,CAAC,CAAC,EAAE,GAAG6F,KAAK,CAACG,KAAK,CAAC,IAAI,CAAC;EACrG,CAAC,CAAC;EACFV,IAAI,CAACQ,OAAO,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAKlC,iBAAiB,CAACtD,IAAI,EAAEuF,GAAG,CAAC/F,MAAM,EAAE,MAAM,EAAE6F,KAAK,CAACG,KAAK,CAAE,CAAC,CAAC;AAC1F,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAIC,KAAkB,IAAK;EAC3C,MAAMC,IAAI,GAAGD,KAAK,CAACE,aAAa,CAAcnH,mBAAmB,CAAC;EAClE,IAAI,CAACkH,IAAI,EAAE;EACX,MAAME,QAAQ,GAAG9G,IAAI,CAACD,GAAG,CAAC,CAAC,EAAE6G,IAAI,CAACG,WAAW,GAAGJ,KAAK,CAACK,WAAW,CAAC;EAClEL,KAAK,CAACxB,KAAK,CAACC,WAAW,CAAC,8BAA8B,EAAE,GAAG0B,QAAQ,IAAI,CAAC;EACxE,IAAIA,QAAQ,GAAG,CAAC,EAAEH,KAAK,CAACjG,OAAO,CAACoG,QAAQ,GAAG,MAAM,CAAC,KAC7C,OAAOH,KAAK,CAACjG,OAAO,CAACoG,QAAQ;AACpC,CAAC;AAED,OAAO,MAAMG,6BAA6B,GAAGA,CAACnC,OAAsC,GAAG,CAAC,CAAC,KAAmB;EAC1G,MAAMoC,SAAS,GAAGpC,OAAO,CAAC7D,IAAI,IAAI0B,QAAQ;EAC1C,IAAI4C,WAAW,GAAGtG,gCAAgC,CAAC6F,OAAO,CAACqC,SAAS,GAAG,CAAC,CAAC,IAAI;IAAEC,OAAO,EAAE;EAAW,CAAC;EACpG,IAAI5B,MAA2B,GAAG,IAAI;EACtC,IAAI6B,WAA0B,GAAG,IAAI;EACrC,IAAIC,aAA4B,GAAG,IAAI;EAEvC,MAAMC,WAAW,GAAGA,CAAC9G,MAAmB,EAAEI,IAA4B,EAAE2D,IAAY,KAAK;IACvF,IAAI3D,IAAI,KAAK,SAAS,EAAE;MACtB,MAAMqE,SAAS,GAAGV,IAAI,KAAK7F,+BAA+B;MAC1D4G,WAAW,GAAG;QACZ,GAAGA,WAAW;QACd1B,YAAY,EAAEqB,SAAS,GAAGK,WAAW,CAAC1B,YAAY,GAAGW,IAAI;QACzDa,gBAAgB,EAAEH;MACpB,CAAC;IACH,CAAC,MAAM;MACL,MAAMjC,GAAG,GAAGpC,IAAI,KAAK,MAAM,GAAG,YAAY,GAAGA,IAAI,KAAK,QAAQ,GAAG,cAAc,GAAG,eAAe;MACjG0E,WAAW,GAAG;QAAE,GAAGA,WAAW;QAAE,CAACtC,GAAG,GAAG;UAAE,GAAGsC,WAAW,CAACtC,GAAG,CAAC;UAAE,CAACH,OAAO,CAACrC,MAAM,CAAC,GAAG+D;QAAK;MAAE,CAAC;IAC3F;IACAM,OAAO,CAAC0C,UAAU,GAAGjC,WAAW,CAAC;EACnC,CAAC;EAED,MAAMkC,gBAAgB,GAAGA,CAAA,KAAM;IAC7B,IAAIJ,WAAW,KAAK,IAAI,EAAE;MACxBK,oBAAoB,CAACL,WAAW,CAAC;MACjCA,WAAW,GAAG,IAAI;IACpB;IACA,IAAI,CAAC7B,MAAM,IAAI8B,aAAa,KAAK,IAAI,EAAE;IACvC,MAAMK,MAAM,GAAGL,aAAa;IAC5BA,aAAa,GAAG,IAAI;IACpB9B,MAAM,CAACU,KAAK,KAAKyB,MAAM,KAAKnC,MAAM,CAACoC,WAAW;IAC9CpC,MAAM,CAACW,QAAQ,GAAGvB,SAAS,CACzBY,MAAM,CAACvE,IAAI,EACXuE,MAAM,CAAC/E,MAAM,EACb+E,MAAM,CAAC3E,IAAI,EACX2E,MAAM,CAACqC,SAAS,GAAG,CAACF,MAAM,GAAGnC,MAAM,CAACoC,WAAW,IAAIpC,MAAM,CAACsC,SAAS,EACnE;MAAE7C,WAAW,EAAEO,MAAM,CAAC3E,IAAI,KAAK;IAAU,CAC3C,CAAC;IACD,IAAI2E,MAAM,CAAC3E,IAAI,KAAK,SAAS,IAAI2E,MAAM,CAAC3E,IAAI,KAAK,QAAQ,EAAEyE,cAAc,CAACE,MAAM,CAACvE,IAAI,EAAEsE,WAAW,EAAEC,MAAM,CAAC;EAC7G,CAAC;EACD,MAAMuC,aAAa,GAAI5H,KAAmB,IAAK;IAC7C,IAAI,CAACqF,MAAM,IAAIrF,KAAK,CAAC6H,SAAS,KAAKxC,MAAM,CAACwC,SAAS,EAAE;IACrDV,aAAa,GAAG9B,MAAM,CAAC3E,IAAI,KAAK,QAAQ,GAAGV,KAAK,CAAC8H,OAAO,GAAG9H,KAAK,CAAC+H,OAAO;IACxE,IAAIb,WAAW,KAAK,IAAI,EAAE;IAC1BA,WAAW,GAAGc,qBAAqB,CAACV,gBAAgB,CAAC;EACvD,CAAC;EACD,MAAMW,UAAU,GAAIjI,KAAa,IAAK;IACpC,IAAI,CAACqF,MAAM,IAAKrF,KAAK,YAAYkI,YAAY,IAAIlI,KAAK,CAAC6H,SAAS,KAAKxC,MAAM,CAACwC,SAAU,EAAE;IACxFP,gBAAgB,CAAC,CAAC;IAClB,MAAMa,QAAQ,GAAG9C,MAAM;IACvBA,MAAM,GAAG,IAAI;IACb,OAAO8C,QAAQ,CAACrH,IAAI,CAACP,OAAO,CAAC6H,qBAAqB;IAClD,OAAOD,QAAQ,CAAC7H,MAAM,CAACC,OAAO,CAAC6H,qBAAqB;IACpD,IAAID,QAAQ,CAACpC,KAAK,EAAE;MAClB;MACA;MACA;MACA;MACA;MACA,MAAM1B,IAAI,GACR8D,QAAQ,CAACzH,IAAI,KAAK,MAAM,GAAGyH,QAAQ,CAACnC,QAAQ,GAAGvB,SAAS,CAAC0D,QAAQ,CAACrH,IAAI,EAAEqH,QAAQ,CAAC7H,MAAM,EAAE6H,QAAQ,CAACzH,IAAI,EAAEyH,QAAQ,CAACnC,QAAQ,CAAC;MAC5HoB,WAAW,CAACe,QAAQ,CAAC7H,MAAM,EAAE6H,QAAQ,CAACzH,IAAI,EAAE2D,IAAI,CAAC;MACjD,IAAI8D,QAAQ,CAACzH,IAAI,KAAK,QAAQ,EAAEyE,cAAc,CAACgD,QAAQ,CAACrH,IAAI,EAAEsE,WAAW,CAAC;IAC5E;IACA,IAAI+C,QAAQ,CAAC7H,MAAM,CAAC+H,iBAAiB,GAAGF,QAAQ,CAACN,SAAS,CAAC,EAAEM,QAAQ,CAAC7H,MAAM,CAACgI,qBAAqB,CAACH,QAAQ,CAACN,SAAS,CAAC;IACtHrF,QAAQ,CAAC+F,IAAI,CAACvD,KAAK,CAACwD,UAAU,GAAGL,QAAQ,CAACM,kBAAkB;IAC5DC,MAAM,CAACC,mBAAmB,CAAC,aAAa,EAAEf,aAAa,CAAC;IACxDc,MAAM,CAACC,mBAAmB,CAAC,WAAW,EAAEV,UAAU,CAAC;IACnDS,MAAM,CAACC,mBAAmB,CAAC,eAAe,EAAEV,UAAU,CAAC;IACvDS,MAAM,CAACC,mBAAmB,CAAC,MAAM,EAAEV,UAAU,CAAC;EAChD,CAAC;EACD,MAAMW,aAAa,GAAI5I,KAAmB,IAAK;IAC7C,MAAMM,MAAM,GAAGH,YAAY,CAACH,KAAK,CAAC;IAClC,MAAMU,IAAI,GAAGJ,MAAM,GAAGD,UAAU,CAACC,MAAM,CAAC,GAAG,IAAI;IAC/C,MAAMQ,IAAI,GAAGR,MAAM,GAAGM,aAAa,CAACN,MAAM,CAAC,GAAG,IAAI;IAClD,IAAI,CAACA,MAAM,IAAI,CAACI,IAAI,IAAI,CAACI,IAAI,IAAI,CAACD,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC4B,uBAAuB,CAAC5B,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC,IAAIV,KAAK,CAAC6I,MAAM,KAAK,CAAC,EAC9H;IACF7I,KAAK,CAAC8I,cAAc,CAAC,CAAC;IACtBb,UAAU,CAAC,CAAC;IACZd,aAAa,GAAG,IAAI;IACpB,MAAMO,SAAS,GAAGvD,WAAW,CAACrD,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC;IACjD2E,MAAM,GAAG;MACP/E,MAAM;MACNQ,IAAI;MACJJ,IAAI;MACJmH,SAAS,EAAE7H,KAAK,CAAC6H,SAAS;MAC1BJ,WAAW,EAAE/G,IAAI,KAAK,QAAQ,GAAGV,KAAK,CAAC8H,OAAO,GAAG9H,KAAK,CAAC+H,OAAO;MAC9DL,SAAS;MACT1B,QAAQ,EAAE0B,SAAS;MACnB3B,KAAK,EAAE,KAAK;MACZ4B,SAAS,EAAElH,eAAe,CAACH,MAAM,EAAEI,IAAI,CAAC;MACxC+H,kBAAkB,EAAEjG,QAAQ,CAAC+F,IAAI,CAACvD,KAAK,CAACwD;IAC1C,CAAC;IACD1H,IAAI,CAACP,OAAO,CAAC6H,qBAAqB,GAAG1H,IAAI;IACzCJ,MAAM,CAACC,OAAO,CAAC6H,qBAAqB,GAAG,MAAM;IAC7C5F,QAAQ,CAAC+F,IAAI,CAACvD,KAAK,CAACwD,UAAU,GAAG,MAAM;IACvClI,MAAM,CAACyI,iBAAiB,GAAG/I,KAAK,CAAC6H,SAAS,CAAC;IAC3Ca,MAAM,CAACM,gBAAgB,CAAC,aAAa,EAAEpB,aAAa,CAAC;IACrDc,MAAM,CAACM,gBAAgB,CAAC,WAAW,EAAEf,UAAU,CAAC;IAChDS,MAAM,CAACM,gBAAgB,CAAC,eAAe,EAAEf,UAAU,CAAC;IACpDS,MAAM,CAACM,gBAAgB,CAAC,MAAM,EAAEf,UAAU,CAAC;EAC7C,CAAC;EACD,MAAMgB,SAAS,GAAIjJ,KAAoB,IAAK;IAC1C,MAAMM,MAAM,GAAGH,YAAY,CAACH,KAAK,CAAC;IAClC,MAAMU,IAAI,GAAGJ,MAAM,GAAGD,UAAU,CAACC,MAAM,CAAC,GAAG,IAAI;IAC/C,MAAMQ,IAAI,GAAGR,MAAM,GAAGM,aAAa,CAACN,MAAM,CAAC,GAAG,IAAI;IAClD,IAAI,CAACA,MAAM,IAAI,CAACI,IAAI,IAAI,CAACI,IAAI,IAAI,CAACD,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC4B,uBAAuB,CAAC5B,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC,EAAE;IAC5G,MAAMwI,OAAO,GAAG/E,WAAW,CAACrD,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC;IAC/C,MAAM;MAAEf,GAAG;MAAEC;IAAI,CAAC,GAAGsD,UAAU,CAACpC,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC;IACnD,MAAMyI,IAAI,GAAGnJ,KAAK,CAACoJ,QAAQ,GAAG,EAAE,GAAG,CAAC;IACpC,IAAIC,SAAwB,GAAG,IAAI;IACnC,MAAM1B,SAAS,GAAGlH,eAAe,CAACH,MAAM,EAAEI,IAAI,CAAC;IAC/C,MAAM4I,kBAAkB,GAAG5I,IAAI,KAAK,SAAS,IAAIc,kBAAkB,CAACV,IAAI,CAAC;IACzE,IAAId,KAAK,CAAC8C,GAAG,KAAK,MAAM,EAAEuG,SAAS,GAAG1J,GAAG,CAAC,KACrC,IAAIK,KAAK,CAAC8C,GAAG,KAAK,KAAK,EAAEuG,SAAS,GAAGzJ,GAAG;IAC7C;IACA;IAAA,KACK,IAAIc,IAAI,KAAK,QAAQ,IAAIV,KAAK,CAAC8C,GAAG,KAAK,SAAS,EAAEuG,SAAS,GAAGH,OAAO,GAAGC,IAAI,GAAGxB,SAAS,CAAC,KACzF,IAAIjH,IAAI,KAAK,QAAQ,IAAIV,KAAK,CAAC8C,GAAG,KAAK,WAAW,EAAEuG,SAAS,GAAGH,OAAO,GAAGC,IAAI,GAAGxB,SAAS;IAC/F;IACA;IACA;IACA;IAAA,KACK,IAAIjH,IAAI,KAAK,QAAQ,IAAIV,KAAK,CAAC8C,GAAG,KAAK,WAAW,EACrDuG,SAAS,GAAGC,kBAAkB,IAAIJ,OAAO,IAAIxK,yBAAyB,GAAGF,+BAA+B,GAAG0K,OAAO,GAAGC,IAAI,GAAGxB,SAAS,CAAC,KACnI,IAAIjH,IAAI,KAAK,QAAQ,IAAIV,KAAK,CAAC8C,GAAG,KAAK,YAAY,EACtDuG,SAAS,GACPC,kBAAkB,IAAIJ,OAAO,IAAI1K,+BAA+B,GAC3D4G,WAAW,CAAC1B,YAAY,IAAIhF,yBAAyB,GACtDwK,OAAO,GAAGC,IAAI,GAAGxB,SAAS;IAClC,IAAI0B,SAAS,KAAK,IAAI,EAAE;IACxBrJ,KAAK,CAAC8I,cAAc,CAAC,CAAC;IACtB1B,WAAW,CAAC9G,MAAM,EAAEI,IAAI,EAAE+D,SAAS,CAAC3D,IAAI,EAAER,MAAM,EAAEI,IAAI,EAAE2I,SAAS,CAAC,CAAC;IACnE,IAAI3I,IAAI,KAAK,SAAS,IAAIA,IAAI,KAAK,QAAQ,EAAEyE,cAAc,CAACrE,IAAI,EAAEsE,WAAW,CAAC;EAChF,CAAC;EAED,MAAMmE,QAAQ,GAAGA,CAAA,KAAM;IACrB,MAAMC,MAAM,GAAGvI,KAAK,CAACC,IAAI,CAAC6F,SAAS,CAAC5F,gBAAgB,CAAchC,aAAa,CAAC,CAAC;IACjF,OAAO4H,SAAS,YAAY0C,WAAW,IAAI1C,SAAS,CAAC2C,OAAO,CAACvK,aAAa,CAAC,GAAG,CAAC4H,SAAS,EAAE,GAAGyC,MAAM,CAAC,GAAGA,MAAM;EAC/G,CAAC;EACD,MAAMG,KAAK,GAAGA,CAAA,KAAM;IAClB;IACA;IACA;IACA,OAAOJ,QAAQ,CAAC,CAAC,CAACnI,MAAM,CAAEN,IAAI,IAAKe,gBAAgB,CAACf,IAAI,CAAC,CAACgB,OAAO,KAAK,MAAM,IAAIhB,IAAI,CAACmB,qBAAqB,CAAC,CAAC,CAACE,KAAK,GAAG,CAAC,CAAC;EACzH,CAAC;EACD,MAAMyH,SAAS,GAAGA,CAAA,KAAM;IACtBD,KAAK,CAAC,CAAC,CAACvD,OAAO,CAAEtF,IAAI,IAAK;MACxB;MACA;MACA;MACA,IAAI,CAACD,kBAAkB,CAACC,IAAI,CAAC,EAAE;MAC/B,MAAMwE,OAAO,GAAGvE,YAAY,CAACD,IAAI,EAAE5B,eAAe,CAAC;MACnD;MACA;MACA;MACAoG,OAAO,CACJlE,MAAM,CAAEd,MAAM,IAAKD,UAAU,CAACC,MAAM,CAAC,KAAK,MAAM,CAAC,CACjD8F,OAAO,CAAE9F,MAAM,IAAK;QACnB,MAAMI,IAAI,GAAGL,UAAU,CAACC,MAAM,CAAC;QAC/B,IAAI,CAACI,IAAI,IAAI,CAACgC,uBAAuB,CAAC5B,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC,EAAE;QAC3D,IAAI2E,MAAM,EAAEU,KAAK,IAAIV,MAAM,CAACvE,IAAI,KAAKA,IAAI,IAAIuE,MAAM,CAAC/E,MAAM,KAAKA,MAAM,IAAI+E,MAAM,CAAC3E,IAAI,KAAKA,IAAI,EAAE;UAC7F+D,SAAS,CAAC3D,IAAI,EAAER,MAAM,EAAEI,IAAI,EAAE2E,MAAM,CAACW,QAAQ,EAAE;YAAElB,WAAW,EAAEpE,IAAI,KAAK;UAAU,CAAC,CAAC;UACnF;QACF;QACA,MAAMmJ,SAAS,GACbnJ,IAAI,KAAK,SAAS,GACd0E,WAAW,CAACF,gBAAgB,IAAI1D,kBAAkB,CAACV,IAAI,CAAC,GACtDtC,+BAA+B,GAC/B4G,WAAW,CAAC1B,YAAY,GAC1BhD,IAAI,KAAK,QAAQ,GACf0E,WAAW,CAAC0E,YAAY,GAAGnH,OAAO,CAACrC,MAAM,CAAC,CAAC,GAC3C8E,WAAW,CAAC2E,aAAa,GAAGpH,OAAO,CAACrC,MAAM,CAAC,CAAC;QACpD,IAAIuJ,SAAS,KAAKG,SAAS,EAAEvF,SAAS,CAAC3D,IAAI,EAAER,MAAM,EAAEI,IAAI,EAAEmJ,SAAS,CAAC,CAAC,KACjEzF,iBAAiB,CAACtD,IAAI,EAAER,MAAM,EAAEI,IAAI,EAAEyD,WAAW,CAACrD,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC,CAAC;MAC7E,CAAC,CAAC;MACJyE,cAAc,CAACrE,IAAI,EAAEsE,WAAW,EAAEC,MAAM,EAAEvE,IAAI,KAAKA,IAAI,GAAGuE,MAAM,GAAG,IAAI,CAAC;IAC1E,CAAC,CAAC;EACJ,CAAC;EACD;AACF;AACA;AACA;AACA;AACA;EACE,MAAM4E,SAAS,GAAIjK,KAAiB,IAAK;IACvC,MAAMM,MAAM,GAAGH,YAAY,CAACH,KAAK,CAAC;IAClC,MAAMU,IAAI,GAAGJ,MAAM,GAAGD,UAAU,CAACC,MAAM,CAAC,GAAG,IAAI;IAC/C,MAAMQ,IAAI,GAAGR,MAAM,GAAGM,aAAa,CAACN,MAAM,CAAC,GAAG,IAAI;IAClD,IAAIA,MAAM,IAAII,IAAI,IAAII,IAAI,IAAI4B,uBAAuB,CAAC5B,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC,EAAE;MACzE0D,iBAAiB,CAACtD,IAAI,EAAER,MAAM,EAAEI,IAAI,EAAEyD,WAAW,CAACrD,IAAI,EAAER,MAAM,EAAEI,IAAI,CAAC,CAAC;IACxE;IACA,MAAM8F,KAAK,GAAGzG,YAAY,CAACC,KAAK,CAAC,EAAEI,OAAO,CAAcZ,aAAa,CAAC,EAAEkH,aAAa,CAAcpH,cAAc,CAAC;IAClH,IAAIkH,KAAK,EAAEwB,qBAAqB,CAAC,MAAMzB,YAAY,CAACC,KAAK,CAAC,CAAC;EAC7D,CAAC;;EAED;EACA;EACA,MAAM0D,aAAa,GAAIlK,KAAmB,IAAK;IAC7C,MAAMwG,KAAK,GAAGzG,YAAY,CAACC,KAAK,CAAC,EAAEI,OAAO,CAAcd,cAAc,CAAC;IACvE,IAAI,CAACkH,KAAK,IAAKxG,KAAK,CAACmK,aAAa,YAAYC,IAAI,IAAI5D,KAAK,CAAChD,QAAQ,CAACxD,KAAK,CAACmK,aAAa,CAAE,EAAE;IAC5FnC,qBAAqB,CAAC,MAAMzB,YAAY,CAACC,KAAK,CAAC,CAAC;EAClD,CAAC;;EAED;EACA;EACA,MAAM6D,mBAAmB,GAAGA,CAAA,KAAM;IAChCtD,SAAS,CAAC5F,gBAAgB,CAAc7B,cAAc,CAAC,CAAC8G,OAAO,CAAEI,KAAK,IAAK;MACzE,OAAOA,KAAK,CAACjG,OAAO,CAACoG,QAAQ;MAC7BH,KAAK,CAACxB,KAAK,CAACsF,cAAc,CAAC,8BAA8B,CAAC;IAC5D,CAAC,CAAC;EACJ,CAAC;;EAED;EACA;EACA;EACA,IAAIC,cAA6B,GAAG,IAAI;EACxC,MAAMC,iBAAiB,GAAGA,CAACC,WAAW,GAAG,KAAK,KAAK;IACjD,IAAIA,WAAW,EAAEJ,mBAAmB,CAAC,CAAC;IACtC,IAAIE,cAAc,KAAK,IAAI,EAAE;IAC7BA,cAAc,GAAGvC,qBAAqB,CAAC,MAAM;MAC3CuC,cAAc,GAAG,IAAI;MACrBX,SAAS,CAAC,CAAC;IACb,CAAC,CAAC;EACJ,CAAC;EACD,MAAMc,QAAQ,GAAGA,CAAA,KAAMF,iBAAiB,CAAC,IAAI,CAAC;EAE9C,MAAMG,aAAa,GAAG,IAAInF,GAAG,CAAc,CAAC;EAC5C,MAAMoF,cAAc,GAClB,OAAOC,cAAc,KAAK,WAAW,GACjC,IAAI,GACJ,IAAIA,cAAc,CAAC,MAAM;IACvBL,iBAAiB,CAAC,IAAI,CAAC;EACzB,CAAC,CAAC;EACR,MAAMM,iBAAiB,GAAGA,CAAA,KAAM;IAC9B,IAAI,CAACF,cAAc,EAAE;IACrB,MAAMG,IAAI,GAAG,IAAIvF,GAAG,CAAC+D,QAAQ,CAAC,CAAC,CAAC;IAChCoB,aAAa,CAACvE,OAAO,CAAEtF,IAAI,IAAK;MAC9B,IAAI,CAACiK,IAAI,CAACpF,GAAG,CAAC7E,IAAI,CAAC,EAAE;QACnB8J,cAAc,CAACI,SAAS,CAAClK,IAAI,CAAC;QAC9B6J,aAAa,CAACM,MAAM,CAACnK,IAAI,CAAC;MAC5B;IACF,CAAC,CAAC;IACFiK,IAAI,CAAC3E,OAAO,CAAEtF,IAAI,IAAK;MACrB,IAAI6J,aAAa,CAAChF,GAAG,CAAC7E,IAAI,CAAC,EAAE;MAC7B6J,aAAa,CAACO,GAAG,CAACpK,IAAI,CAAC;MACvB8J,cAAc,CAACO,OAAO,CAACrK,IAAI,CAAC;IAC9B,CAAC,CAAC;EACJ,CAAC;EACD,MAAMsK,UAAU,GAAIC,IAAU,IAC5BA,IAAI,YAAYnL,OAAO,KAAKmL,IAAI,CAAC3B,OAAO,CAACtK,sBAAsB,CAAC,IAAIuC,OAAO,CAAC0J,IAAI,CAAC3E,aAAa,CAACtH,sBAAsB,CAAC,CAAC,CAAC;EAC1H,MAAMkM,gBAAgB,GACpB,OAAOC,gBAAgB,KAAK,WAAW,GACnC,IAAI,GACJ,IAAIA,gBAAgB,CAAEC,OAAO,IAAK;IAChC,MAAMC,OAAO,GAAGD,OAAO,CAACE,IAAI,CAAEC,MAAM,IAClCA,MAAM,CAACC,IAAI,KAAK,YAAY,GACxBD,MAAM,CAAC1L,MAAM,YAAYC,OAAO,IAAIyL,MAAM,CAAC1L,MAAM,CAACyJ,OAAO,CAACtK,sBAAsB,CAAC,GACjF,CAAC,GAAG6B,KAAK,CAACC,IAAI,CAACyK,MAAM,CAACE,UAAU,CAAC,EAAE,GAAG5K,KAAK,CAACC,IAAI,CAACyK,MAAM,CAACG,YAAY,CAAC,CAAC,CAACJ,IAAI,CAACN,UAAU,CAC5F,CAAC;IACD,IAAI,CAACK,OAAO,EAAE;IACdX,iBAAiB,CAAC,CAAC;IACnBN,iBAAiB,CAAC,CAAC;EACrB,CAAC,CAAC;EAERzD,SAAS,CAACiC,gBAAgB,CAAC,aAAa,EAAEJ,aAA8B,CAAC;EACzE7B,SAAS,CAACiC,gBAAgB,CAAC,SAAS,EAAEC,SAA0B,CAAC;EACjElC,SAAS,CAACiC,gBAAgB,CAAC,SAAS,EAAEiB,SAA0B,CAAC;EACjElD,SAAS,CAACiC,gBAAgB,CAAC,aAAa,EAAEkB,aAA8B,CAAC;EACzExB,MAAM,CAACM,gBAAgB,CAAC,QAAQ,EAAE0B,QAAQ,CAAC;EAC3CI,iBAAiB,CAAC,CAAC;EACnBQ,gBAAgB,EAAEH,OAAO,CAACpE,SAAS,EAAE;IACnCgF,UAAU,EAAE,IAAI;IAChBC,eAAe,EAAE,CAAC,QAAQ,CAAC;IAC3BC,SAAS,EAAE,IAAI;IACfC,OAAO,EAAE;EACX,CAAC,CAAC;EACF1B,iBAAiB,CAAC,CAAC;EACnB,OAAO,MAAM;IACX;IACA;IACAvC,UAAU,CAAC,CAAC;IACZ,IAAIsC,cAAc,KAAK,IAAI,EAAEhD,oBAAoB,CAACgD,cAAc,CAAC;IACjEe,gBAAgB,EAAEa,UAAU,CAAC,CAAC;IAC9BvB,cAAc,EAAEuB,UAAU,CAAC,CAAC;IAC5BxB,aAAa,CAACyB,KAAK,CAAC,CAAC;IACrBrF,SAAS,CAAC4B,mBAAmB,CAAC,aAAa,EAAEC,aAA8B,CAAC;IAC5E7B,SAAS,CAAC4B,mBAAmB,CAAC,SAAS,EAAEM,SAA0B,CAAC;IACpElC,SAAS,CAAC4B,mBAAmB,CAAC,SAAS,EAAEsB,SAA0B,CAAC;IACpElD,SAAS,CAAC4B,mBAAmB,CAAC,aAAa,EAAEuB,aAA8B,CAAC;IAC5ExB,MAAM,CAACC,mBAAmB,CAAC,QAAQ,EAAE+B,QAAQ,CAAC;EAChD,CAAC;AACH,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["APP_WORKSPACE_DETAIL_MAX","APP_WORKSPACE_DETAIL_MIN","APP_WORKSPACE_DRAWER_MAX","APP_WORKSPACE_DRAWER_MIN","APP_WORKSPACE_MAIN_MIN","APP_WORKSPACE_PANE_MAX","APP_WORKSPACE_PANE_MIN","APP_WORKSPACE_SIDEBAR_COLLAPSED","APP_WORKSPACE_SIDEBAR_MAX","APP_WORKSPACE_SIDEBAR_MIN","appWorkspacePanelVariable","appWorkspaceResizeLimits","fitAppWorkspacePaneSizes","normalizeAppWorkspaceLayoutState","resolveAppWorkspaceSidebarWidth","safeAppWorkspacePanelId","shouldCollapseAppWorkspaceSidebar","installScrollFades","HANDLE_SELECTOR","ROOT_SELECTOR","LAYOUT_REGION_SELECTOR","join","LABEL_SELECTOR","LABEL_TEXT_SELECTOR","ITEM_SELECTOR","clamp","value","min","max","Math","round","eventElement","event","target","Element","resizeHandle","closest","resizeKind","handle","dataset","appWorkspaceResize","resizeDirection","kind","workspaceResizeEdge","workspaceRoot","workspaceResizable","root","rootElements","selector","Array","from","querySelectorAll","filter","element","sidebarElement","mainElement","sidebarCollapsible","workspaceCollapsible","isVisible","Boolean","hidden","getComputedStyle","display","elementSize","rect","getBoundingClientRect","height","width","controlledPanel","controls","getAttribute","panel","document","getElementById","controlsResizableRegion","panelId","workspacePanelId","numberData","key","fallback","Number","isFinite","sizeLimits","controlled","main","panes","pane","classList","contains","details","sidebarWidth","otherDetailWidth","reduce","total","detail","defaultMin","defaultMax","workspaceSize","reservedSize","currentSize","updateHandleValue","size","limits","setAttribute","String","applySize","requestedSize","options","collapsible","sidebar","snapSidebar","collapsed","style","setProperty","sidebarCollapsed","reconcilePanes","layoutState","active","handles","length","Set","map","fixedWidth","has","fits","flatMap","preferred","moved","liveSize","paneWidths","desired","sizes","forEach","fit","index","measureLabel","label","text","querySelector","overflow","scrollWidth","clientWidth","installAppWorkspaceController","eventRoot","stopScrollFades","readState","version","resizeFrame","pendingClient","persistSize","writeState","flushPointerMove","cancelAnimationFrame","client","startClient","startSize","direction","onPointerMove","pointerId","clientY","clientX","requestAnimationFrame","stopResize","PointerEvent","finished","workspaceResizeActive","hasPointerCapture","releasePointerCapture","body","userSelect","previousUserSelect","window","removeEventListener","onPointerDown","button","preventDefault","setPointerCapture","addEventListener","onKeyDown","current","step","shiftKey","requested","collapsibleSidebar","allRoots","nested","HTMLElement","matches","roots","reconcile","persisted","detailWidths","drawerHeights","undefined","onFocusIn","onPointerOver","relatedTarget","Node","clearMeasuredLabels","removeProperty","reconcileFrame","scheduleReconcile","clearLabels","onResize","observedRoots","resizeObserver","ResizeObserver","syncObservedRoots","next","unobserve","delete","add","observe","layoutNode","node","mutationObserver","MutationObserver","records","changed","some","record","type","addedNodes","removedNodes","attributes","attributeFilter","childList","subtree","disconnect","clear"],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import {\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nimport { installScrollFades } from \"./scroll-fade\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n direction: 1 | -1;\n previousUserSelect: string;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst LABEL_SELECTOR = \".k2b-app-workspace__sidebar-item-label[data-marquee='true']\";\nconst LABEL_TEXT_SELECTOR = \".k2b-app-workspace__sidebar-item-label-text\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n (kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle))?.dataset.workspaceResizable === \"true\";\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) => pane.closest(\".k2b-app-workspace__main\") === main && !pane.classList.contains(\"is-primary\") && isVisible(pane),\n )\n : [];\n const details = rootElements(root, \".k2b-app-workspace__detail\").filter(isVisible);\n const sidebarWidth = elementSize(sidebarElement(root), \"sidebar\");\n const otherDetailWidth = details.reduce((total, detail) => total + (detail === controlled ? 0 : elementSize(detail, \"detail\")), 0);\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n return appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : root.getBoundingClientRect().width,\n reservedSize:\n kind === \"sidebar\"\n ? otherDetailWidth\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0)\n : kind === \"detail\"\n ? sidebarWidth + otherDetailWidth\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n};\n\nconst currentSize = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? elementSize(sidebarElement(root), kind) : elementSize(controlledPanel(root, handle), kind);\n\nconst updateHandleValue = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n size: number,\n limits = sizeLimits(root, handle, kind),\n) => {\n const { min, max } = limits;\n handle.setAttribute(\"aria-valuemin\", String(min));\n handle.setAttribute(\"aria-valuemax\", String(max));\n handle.setAttribute(\"aria-valuenow\", String(clamp(size, min, max)));\n};\n\nconst applySize = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n requestedSize: number,\n /**\n * `snapSidebar: false` tracks the pointer continuously and only *previews*\n * the collapsed state. Snapping (the default, and what keyboard steps and\n * reconciliation want) quantises the width to either the collapsed rail or\n * the sidebar minimum, which during a live drag makes the handle jump.\n */\n options: { snapSidebar?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind);\n if (kind === \"sidebar\") {\n const collapsible = sidebarCollapsible(root);\n const sidebar =\n options.snapSidebar === false\n ? { width: clamp(requestedSize, min, max), collapsed: shouldCollapseAppWorkspaceSidebar(requestedSize, collapsible) }\n : resolveAppWorkspaceSidebarWidth(requestedSize, max, collapsible);\n root.style.setProperty(\"--k2b-workspace-sidebar-width\", `${sidebar.width}px`);\n // Cloud removes the attribute rather than writing \"false\", so that a\n // presence selector (`[data-sidebar-collapsed]`) means \"collapsed\".\n if (sidebar.collapsed) root.dataset.sidebarCollapsed = \"true\";\n else delete root.dataset.sidebarCollapsed;\n updateHandleValue(root, handle, kind, sidebar.width, { min, max });\n return sidebar.width;\n }\n const size = clamp(requestedSize, min, max);\n root.style.setProperty(appWorkspacePanelVariable(kind, panelId(handle)), `${size}px`);\n updateHandleValue(root, handle, kind, size, { min, max });\n return size;\n};\n\ntype PaneFit = {\n desired: number;\n handle: HTMLElement;\n min: number;\n};\n\n/**\n * Fits all auxiliary main panes as one group. One main region remains the\n * flexible anchor; the others keep their preferred sizes while space permits\n * and give up the same share of their optional space when the container,\n * navigation or detail panels reduce the available width.\n */\nconst reconcilePanes = (root: HTMLElement, layoutState: AppWorkspaceLayoutState, active: ActiveResize | null = null) => {\n const main = mainElement(root);\n if (!main || !isVisible(main)) return;\n const handles = rootElements(root, HANDLE_SELECTOR).filter(\n (handle) => resizeKind(handle) === \"pane\" && controlsResizableRegion(root, handle, \"pane\"),\n );\n if (!handles.length) return;\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : (layoutState.paneWidths?.[panelId(handle)] ?? numberData(handle, \"workspaceDefaultSize\", elementSize(panel, \"pane\")));\n const desired = clamp(preferred, min, max);\n return [{ desired, handle, min }];\n });\n if (!fits.length) return;\n\n const sizes = fitAppWorkspacePaneSizes(fits, main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN);\n fits.forEach((fit, index) => {\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(fit.handle)), `${sizes[index]}px`);\n });\n fits.forEach((fit, index) => updateHandleValue(root, fit.handle, \"pane\", sizes[index]!));\n};\n\n/**\n * Marquee support for a truncated sidebar label.\n *\n * The animation needs to know how far to travel, and that is only knowable\n * once the label has been laid out — so it is measured lazily, on the same\n * hover/focus that triggers it, and published as a custom property. Labels\n * that fit get no `data-overflow`, so they never animate.\n */\nconst measureLabel = (label: HTMLElement) => {\n const text = label.querySelector<HTMLElement>(LABEL_TEXT_SELECTOR);\n if (!text) return;\n const overflow = Math.max(0, text.scrollWidth - label.clientWidth);\n label.style.setProperty(\"--k2b-sidebar-label-overflow\", `${overflow}px`);\n if (overflow > 2) label.dataset.overflow = \"true\";\n else delete label.dataset.overflow;\n};\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n active.moved ||= client !== active.startClient;\n active.liveSize = applySize(\n active.root,\n active.handle,\n active.kind,\n active.startSize + (client - active.startClient) * active.direction,\n { snapSidebar: active.kind !== \"sidebar\" },\n );\n if (active.kind === \"sidebar\" || active.kind === \"detail\") reconcilePanes(active.root, layoutState, active);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!active || event.pointerId !== active.pointerId) return;\n pendingClient = active.kind === \"drawer\" ? event.clientY : event.clientX;\n if (resizeFrame !== null) return;\n resizeFrame = requestAnimationFrame(flushPointerMove);\n };\n const stopResize = (event?: Event) => {\n if (!active || (event instanceof PointerEvent && event.pointerId !== active.pointerId)) return;\n flushPointerMove();\n const finished = active;\n active = null;\n delete finished.root.dataset.workspaceResizeActive;\n delete finished.handle.dataset.workspaceResizeActive;\n if (finished.moved) {\n // A pane's rendered width may have been fitted below the pointer's live\n // preference to keep the main region usable. Persist that preference,\n // then fit the visible panes from the updated state. Reapplying it through\n // the per-handle limits here would count the already-fitted sibling panes\n // a second time and permanently shrink the preference on release.\n const size =\n finished.kind === \"pane\" ? finished.liveSize : applySize(finished.root, finished.handle, finished.kind, finished.liveSize);\n persistSize(finished.handle, finished.kind, size);\n if (finished.kind !== \"drawer\") reconcilePanes(finished.root, layoutState);\n }\n if (finished.handle.hasPointerCapture?.(finished.pointerId)) finished.handle.releasePointerCapture(finished.pointerId);\n document.body.style.userSelect = finished.previousUserSelect;\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", stopResize);\n window.removeEventListener(\"pointercancel\", stopResize);\n window.removeEventListener(\"blur\", stopResize);\n };\n const onPointerDown = (event: PointerEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind) || event.button !== 0)\n return;\n event.preventDefault();\n stopResize();\n pendingClient = null;\n const startSize = currentSize(root, handle, kind);\n active = {\n handle,\n root,\n kind,\n pointerId: event.pointerId,\n startClient: kind === \"drawer\" ? event.clientY : event.clientX,\n startSize,\n liveSize: startSize,\n moved: false,\n direction: resizeDirection(handle, kind),\n previousUserSelect: document.body.style.userSelect,\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n document.body.style.userSelect = \"none\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted);\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n const label = eventElement(event)?.closest<HTMLElement>(ITEM_SELECTOR)?.querySelector<HTMLElement>(LABEL_SELECTOR);\n if (label) requestAnimationFrame(() => measureLabel(label));\n };\n\n // Measured on entry rather than on every render: `scrollWidth` forces layout,\n // and a sidebar can hold hundreds of rows.\n const onPointerOver = (event: PointerEvent) => {\n const label = eventElement(event)?.closest<HTMLElement>(LABEL_SELECTOR);\n if (!label || (event.relatedTarget instanceof Node && label.contains(event.relatedTarget))) return;\n requestAnimationFrame(() => measureLabel(label));\n };\n\n // A resize changes every label's available width, so the cached measurement\n // is dropped and taken again on the next hover or focus.\n const clearMeasuredLabels = () => {\n eventRoot.querySelectorAll<HTMLElement>(LABEL_SELECTOR).forEach((label) => {\n delete label.dataset.overflow;\n label.style.removeProperty(\"--k2b-sidebar-label-overflow\");\n });\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = (clearLabels = false) => {\n if (clearLabels) clearMeasuredLabels();\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n });\n };\n const onResize = () => scheduleReconcile(true);\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n scheduleReconcile(true);\n });\n const syncObservedRoots = () => {\n if (!resizeObserver) return;\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n resizeObserver.unobserve(root);\n observedRoots.delete(root);\n }\n });\n next.forEach((root) => {\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver.observe(root);\n });\n };\n const layoutNode = (node: Node) =>\n node instanceof Element && (node.matches(LAYOUT_REGION_SELECTOR) || Boolean(node.querySelector(LAYOUT_REGION_SELECTOR)));\n const mutationObserver =\n typeof MutationObserver === \"undefined\"\n ? null\n : new MutationObserver((records) => {\n const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.addEventListener(\"pointerover\", onPointerOver as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncObservedRoots();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n stopScrollFades();\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n observedRoots.clear();\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.removeEventListener(\"pointerover\", onPointerOver as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["APP_WORKSPACE_SIDEBAR_DEFAULT","APP_WORKSPACE_SIDEBAR_COLLAPSED","APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD","APP_WORKSPACE_SIDEBAR_MIN","APP_WORKSPACE_SIDEBAR_MAX","APP_WORKSPACE_SIDEBAR_STATE_MAX","APP_WORKSPACE_DETAIL_DEFAULT","APP_WORKSPACE_DETAIL_MIN","APP_WORKSPACE_DETAIL_MAX","APP_WORKSPACE_DRAWER_DEFAULT","APP_WORKSPACE_DRAWER_MIN","APP_WORKSPACE_DRAWER_MAX","APP_WORKSPACE_MAIN_MIN","APP_WORKSPACE_MAIN_MIN_HEIGHT","APP_WORKSPACE_PANE_DEFAULT","APP_WORKSPACE_PANE_MIN","APP_WORKSPACE_PANE_MAX","appWorkspaceResizeLimits","options","min","kind","sidebarCollapsible","configuredMax","max","mainMinimum","Math","workspaceSize","reservedSize","fitAppWorkspacePaneSizes","panes","availableSize","sizes","map","pane","minimumTotal","reduce","total","size","desiredTotal","desired","budget","floor","extraBudget","desiredExtra","fractions","index","raw","extra","fraction","remainder","sort","a","b","shouldCollapseAppWorkspaceSidebar","width","collapsible","resolveAppWorkspaceSidebarWidth","maxWidth","collapsed","round","finiteSize","value","Number","isFinite","undefined","safeAppWorkspacePanelId","panelId","isStableUiId","normalizeSizes","Array","isArray","entries","Object","slice","flatMap","key","normalized","length","fromEntries","appWorkspacePanelVariable","assertStableUiId","normalizeAppWorkspaceLayoutState","candidate","version","sidebarWidth","sidebarCollapsed","legacy","paneWidths","detailWidths","detailWidth","primary","drawerHeights","parseAppWorkspaceLayoutState","JSON","parse","decodeURIComponent","serializeAppWorkspaceLayoutState","state","encodeURIComponent","stringify","appWorkspaceLayoutStyle","declarations","id","height","filter","Boolean","join"],"sources":["layout/app-workspace-state.ts"],"sourcesContent":["export type AppWorkspaceLayoutState = {\n version: 2;\n sidebarWidth?: number;\n sidebarCollapsed?: boolean;\n paneWidths?: Record<string, number>;\n detailWidths?: Record<string, number>;\n drawerHeights?: Record<string, number>;\n};\n\nexport const APP_WORKSPACE_SIDEBAR_DEFAULT = 208;\nexport const APP_WORKSPACE_SIDEBAR_COLLAPSED = 64;\nexport const APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD = 128;\nexport const APP_WORKSPACE_SIDEBAR_MIN = 176;\nexport const APP_WORKSPACE_SIDEBAR_MAX = 360;\n/** Absolute persistence envelope for sidebars with an app-defined wider max. */\nconst APP_WORKSPACE_SIDEBAR_STATE_MAX = 960;\nexport const APP_WORKSPACE_DETAIL_DEFAULT = 384;\nexport const APP_WORKSPACE_DETAIL_MIN = 288;\nexport const APP_WORKSPACE_DETAIL_MAX = 640;\nexport const APP_WORKSPACE_DRAWER_DEFAULT = 240;\nexport const APP_WORKSPACE_DRAWER_MIN = 160;\nexport const APP_WORKSPACE_DRAWER_MAX = 560;\n/** Space `appWorkspaceResizeLimits` always reserves for the main region. */\nexport const APP_WORKSPACE_MAIN_MIN = 320;\nexport const APP_WORKSPACE_MAIN_MIN_HEIGHT = 240;\nexport const APP_WORKSPACE_PANE_DEFAULT = 320;\nexport const APP_WORKSPACE_PANE_MIN = 240;\nexport const APP_WORKSPACE_PANE_MAX = 640;\n\nexport type AppWorkspaceResizeKind = \"sidebar\" | \"pane\" | \"detail\" | \"drawer\";\n\nexport const appWorkspaceResizeLimits = (options: {\n kind: AppWorkspaceResizeKind;\n workspaceSize: number;\n reservedSize: number;\n min?: number;\n max?: number;\n sidebarCollapsible?: boolean;\n}): { min: number; max: number } => {\n const min =\n options.min ??\n (options.kind === \"sidebar\"\n ? options.sidebarCollapsible\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : APP_WORKSPACE_SIDEBAR_MIN\n : options.kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : options.kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : APP_WORKSPACE_DRAWER_MIN);\n const configuredMax =\n options.max ??\n (options.kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : options.kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : options.kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : APP_WORKSPACE_DRAWER_MAX);\n const mainMinimum = options.kind === \"drawer\" ? APP_WORKSPACE_MAIN_MIN_HEIGHT : APP_WORKSPACE_MAIN_MIN;\n return { min, max: Math.max(min, Math.min(configuredMax, options.workspaceSize - options.reservedSize - mainMinimum)) };\n};\n\n/**\n * Fits preferred auxiliary pane widths into a shared budget without giving\n * DOM order priority. Minimums are reserved first; remaining space is shared\n * in proportion to how much each pane still needs to reach its preference.\n */\nexport const fitAppWorkspacePaneSizes = (panes: ReadonlyArray<{ desired: number; min: number }>, availableSize: number): number[] => {\n const sizes = panes.map((pane) => pane.min);\n const minimumTotal = sizes.reduce((total, size) => total + size, 0);\n const desiredTotal = panes.reduce((total, pane) => total + pane.desired, 0);\n const budget = Math.max(0, Math.floor(availableSize));\n if (desiredTotal <= budget) return panes.map((pane) => pane.desired);\n if (budget <= minimumTotal) return sizes;\n\n const extraBudget = budget - minimumTotal;\n const desiredExtra = desiredTotal - minimumTotal;\n const fractions = panes.map((pane, index) => {\n const raw = ((pane.desired - pane.min) * extraBudget) / desiredExtra;\n const extra = Math.floor(raw);\n sizes[index]! += extra;\n return { fraction: raw - extra, index };\n });\n let remainder = extraBudget - sizes.reduce((total, size, index) => total + size - panes[index]!.min, 0);\n fractions.sort((a, b) => b.fraction - a.fraction || a.index - b.index);\n for (const { index } of fractions) {\n if (remainder-- <= 0) break;\n sizes[index]! += 1;\n }\n return sizes;\n};\n\nexport const shouldCollapseAppWorkspaceSidebar = (width: number, collapsible: boolean): boolean =>\n collapsible && width < APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD;\n\nexport const resolveAppWorkspaceSidebarWidth = (\n width: number,\n maxWidth: number,\n collapsible: boolean,\n): { width: number; collapsed: boolean } =>\n shouldCollapseAppWorkspaceSidebar(width, collapsible)\n ? { width: APP_WORKSPACE_SIDEBAR_COLLAPSED, collapsed: true }\n : { width: Math.round(Math.min(maxWidth, Math.max(APP_WORKSPACE_SIDEBAR_MIN, width))), collapsed: false };\n\nconst finiteSize = (value: unknown, min: number, max: number) =>\n typeof value === \"number\" && Number.isFinite(value) ? Math.round(Math.min(max, Math.max(min, value))) : undefined;\n\nexport const safeAppWorkspacePanelId = (panelId: string): string => (isStableUiId(panelId) ? panelId : \"\");\n\nconst normalizeSizes = (value: unknown, min: number, max: number) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const entries = Object.entries(value)\n .slice(0, 16)\n .flatMap(([key, size]) => {\n const normalized = finiteSize(size, min, max);\n return isStableUiId(key) && normalized !== undefined ? [[key, normalized] as const] : [];\n });\n return entries.length ? Object.fromEntries(entries) : undefined;\n};\n\nexport const appWorkspacePanelVariable = (kind: \"pane\" | \"detail\" | \"drawer\", panelId: string): string =>\n `--k2b-workspace-${kind}-${assertStableUiId(panelId, \"AppWorkspace panel id\")}-${kind === \"drawer\" ? \"height\" : \"width\"}`;\n\nexport const normalizeAppWorkspaceLayoutState = (value: unknown): AppWorkspaceLayoutState | null => {\n if (!value || typeof value !== \"object\") return null;\n const candidate = value as Record<string, unknown>;\n if (candidate.version !== 1 && candidate.version !== 2) return null;\n const sidebarWidth = finiteSize(candidate.sidebarWidth, APP_WORKSPACE_SIDEBAR_MIN, APP_WORKSPACE_SIDEBAR_STATE_MAX);\n const sidebarCollapsed = typeof candidate.sidebarCollapsed === \"boolean\" ? candidate.sidebarCollapsed : undefined;\n // Keyed panel maps only exist from version 2 on; a version-1 payload that\n // carries them was not written by this component and is not trusted.\n const legacy = candidate.version === 1;\n const paneWidths = legacy ? undefined : normalizeSizes(candidate.paneWidths, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_PANE_MAX);\n const detailWidths = legacy\n ? (() => {\n const width = finiteSize(candidate.detailWidth, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DETAIL_MAX);\n return width === undefined ? undefined : { primary: width };\n })()\n : normalizeSizes(candidate.detailWidths, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DETAIL_MAX);\n const drawerHeights = legacy ? undefined : normalizeSizes(candidate.drawerHeights, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_DRAWER_MAX);\n return sidebarWidth === undefined && sidebarCollapsed === undefined && !paneWidths && !detailWidths && !drawerHeights\n ? null\n : { version: 2, sidebarWidth, sidebarCollapsed, paneWidths, detailWidths, drawerHeights };\n};\n\nexport const parseAppWorkspaceLayoutState = (value: string | null | undefined): AppWorkspaceLayoutState | null => {\n if (!value) return null;\n try {\n return normalizeAppWorkspaceLayoutState(JSON.parse(decodeURIComponent(value)));\n } catch {\n return null;\n }\n};\n\nexport const serializeAppWorkspaceLayoutState = (state: AppWorkspaceLayoutState): string =>\n encodeURIComponent(JSON.stringify(normalizeAppWorkspaceLayoutState(state) ?? { version: 2 }));\n\nexport const appWorkspaceLayoutStyle = (state: AppWorkspaceLayoutState | null | undefined): string | undefined => {\n if (!state) return undefined;\n const declarations = [\n state.sidebarCollapsed\n ? `--k2b-workspace-sidebar-width:${APP_WORKSPACE_SIDEBAR_COLLAPSED}px`\n : state.sidebarWidth === undefined\n ? null\n : `--k2b-workspace-sidebar-width:${state.sidebarWidth}px`,\n ...Object.entries(state.paneWidths ?? {}).map(([id, width]) => `${appWorkspacePanelVariable(\"pane\", id)}:${width}px`),\n ...Object.entries(state.detailWidths ?? {}).map(([id, width]) => `${appWorkspacePanelVariable(\"detail\", id)}:${width}px`),\n ...Object.entries(state.drawerHeights ?? {}).map(([id, height]) => `${appWorkspacePanelVariable(\"drawer\", id)}:${height}px`),\n ].filter(Boolean);\n return declarations.length ? declarations.join(\";\") : undefined;\n};\nimport { assertStableUiId, isStableUiId } from \"./stable-id\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["APP_WORKSPACE_SIDEBAR_DEFAULT","APP_WORKSPACE_SIDEBAR_COLLAPSED","APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD","APP_WORKSPACE_SIDEBAR_MIN","APP_WORKSPACE_SIDEBAR_MAX","APP_WORKSPACE_SIDEBAR_STATE_MAX","APP_WORKSPACE_DETAIL_DEFAULT","APP_WORKSPACE_DETAIL_MIN","APP_WORKSPACE_DETAIL_MAX","APP_WORKSPACE_DRAWER_DEFAULT","APP_WORKSPACE_DRAWER_MIN","APP_WORKSPACE_DRAWER_MAX","APP_WORKSPACE_MAIN_MIN","APP_WORKSPACE_MAIN_MIN_HEIGHT","APP_WORKSPACE_PANE_DEFAULT","APP_WORKSPACE_PANE_MIN","APP_WORKSPACE_PANE_MAX","appWorkspaceResizeLimits","options","min","kind","sidebarCollapsible","configuredMax","max","mainMinimum","Math","workspaceSize","reservedSize","fitAppWorkspacePaneSizes","panes","availableSize","sizes","map","pane","minimumTotal","reduce","total","size","desiredTotal","desired","budget","floor","extraBudget","desiredExtra","fractions","index","raw","extra","fraction","remainder","sort","a","b","shouldCollapseAppWorkspaceSidebar","width","collapsible","resolveAppWorkspaceSidebarWidth","maxWidth","collapsed","round","finiteSize","value","Number","isFinite","undefined","safeAppWorkspacePanelId","panelId","isStableUiId","normalizeSizes","Array","isArray","entries","Object","slice","flatMap","key","normalized","length","fromEntries","appWorkspacePanelVariable","assertStableUiId","normalizeAppWorkspaceLayoutState","candidate","version","sidebarWidth","sidebarCollapsed","legacy","paneWidths","detailWidths","detailWidth","primary","drawerHeights","parseAppWorkspaceLayoutState","JSON","parse","decodeURIComponent","serializeAppWorkspaceLayoutState","state","encodeURIComponent","stringify","appWorkspaceLayoutStyle","declarations","id","height","filter","Boolean","join"],"sources":["layout/app-workspace-state.ts"],"sourcesContent":["export type AppWorkspaceLayoutState = {\n version: 2;\n sidebarWidth?: number;\n sidebarCollapsed?: boolean;\n paneWidths?: Record<string, number>;\n detailWidths?: Record<string, number>;\n drawerHeights?: Record<string, number>;\n};\n\nexport const APP_WORKSPACE_SIDEBAR_DEFAULT = 208;\nexport const APP_WORKSPACE_SIDEBAR_COLLAPSED = 64;\nexport const APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD = 128;\nexport const APP_WORKSPACE_SIDEBAR_MIN = 176;\nexport const APP_WORKSPACE_SIDEBAR_MAX = 360;\n/** Absolute persistence envelope for sidebars with an app-defined wider max. */\nconst APP_WORKSPACE_SIDEBAR_STATE_MAX = 960;\nexport const APP_WORKSPACE_DETAIL_DEFAULT = 384;\nexport const APP_WORKSPACE_DETAIL_MIN = 288;\nexport const APP_WORKSPACE_DETAIL_MAX = 640;\nexport const APP_WORKSPACE_DRAWER_DEFAULT = 240;\nexport const APP_WORKSPACE_DRAWER_MIN = 160;\nexport const APP_WORKSPACE_DRAWER_MAX = 560;\n/** Space `appWorkspaceResizeLimits` always reserves for the main region. */\nexport const APP_WORKSPACE_MAIN_MIN = 320;\nexport const APP_WORKSPACE_MAIN_MIN_HEIGHT = 240;\nexport const APP_WORKSPACE_PANE_DEFAULT = 320;\nexport const APP_WORKSPACE_PANE_MIN = 240;\nexport const APP_WORKSPACE_PANE_MAX = 640;\n\nexport type AppWorkspaceResizeKind = \"sidebar\" | \"pane\" | \"detail\" | \"drawer\";\n\nexport const appWorkspaceResizeLimits = (options: {\n kind: AppWorkspaceResizeKind;\n workspaceSize: number;\n reservedSize: number;\n min?: number;\n max?: number;\n sidebarCollapsible?: boolean;\n}): { min: number; max: number } => {\n const min =\n options.min ??\n (options.kind === \"sidebar\"\n ? options.sidebarCollapsible\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : APP_WORKSPACE_SIDEBAR_MIN\n : options.kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : options.kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : APP_WORKSPACE_DRAWER_MIN);\n const configuredMax =\n options.max ??\n (options.kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : options.kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : options.kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : APP_WORKSPACE_DRAWER_MAX);\n const mainMinimum = options.kind === \"drawer\" ? APP_WORKSPACE_MAIN_MIN_HEIGHT : APP_WORKSPACE_MAIN_MIN;\n return { min, max: Math.max(min, Math.min(configuredMax, options.workspaceSize - options.reservedSize - mainMinimum)) };\n};\n\n/**\n * Fits preferred auxiliary pane widths into a shared budget without giving\n * DOM order priority. Minimums are reserved first; remaining space is shared\n * in proportion to how much each pane still needs to reach its preference.\n */\nexport const fitAppWorkspacePaneSizes = (panes: ReadonlyArray<{ desired: number; min: number }>, availableSize: number): number[] => {\n const sizes = panes.map((pane) => pane.min);\n const minimumTotal = sizes.reduce((total, size) => total + size, 0);\n const desiredTotal = panes.reduce((total, pane) => total + pane.desired, 0);\n const budget = Math.max(0, Math.floor(availableSize));\n if (desiredTotal <= budget) return panes.map((pane) => pane.desired);\n if (budget <= minimumTotal) return sizes;\n\n const extraBudget = budget - minimumTotal;\n const desiredExtra = desiredTotal - minimumTotal;\n const fractions = panes.map((pane, index) => {\n const raw = ((pane.desired - pane.min) * extraBudget) / desiredExtra;\n const extra = Math.floor(raw);\n sizes[index]! += extra;\n return { fraction: raw - extra, index };\n });\n let remainder = extraBudget - sizes.reduce((total, size, index) => total + size - panes[index]!.min, 0);\n fractions.sort((a, b) => b.fraction - a.fraction || a.index - b.index);\n for (const { index } of fractions) {\n if (remainder-- <= 0) break;\n sizes[index]! += 1;\n }\n return sizes;\n};\n\nexport const shouldCollapseAppWorkspaceSidebar = (width: number, collapsible: boolean): boolean =>\n collapsible && width < APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD;\n\nexport const resolveAppWorkspaceSidebarWidth = (\n width: number,\n maxWidth: number,\n collapsible: boolean,\n): { width: number; collapsed: boolean } =>\n shouldCollapseAppWorkspaceSidebar(width, collapsible)\n ? { width: APP_WORKSPACE_SIDEBAR_COLLAPSED, collapsed: true }\n : { width: Math.round(Math.min(maxWidth, Math.max(APP_WORKSPACE_SIDEBAR_MIN, width))), collapsed: false };\n\nconst finiteSize = (value: unknown, min: number, max: number) =>\n typeof value === \"number\" && Number.isFinite(value) ? Math.round(Math.min(max, Math.max(min, value))) : undefined;\n\nexport const safeAppWorkspacePanelId = (panelId: string): string => (isStableUiId(panelId) ? panelId : \"\");\n\nconst normalizeSizes = (value: unknown, min: number, max: number) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const entries = Object.entries(value)\n .slice(0, 16)\n .flatMap(([key, size]) => {\n const normalized = finiteSize(size, min, max);\n return isStableUiId(key) && normalized !== undefined ? [[key, normalized] as const] : [];\n });\n return entries.length ? Object.fromEntries(entries) : undefined;\n};\n\nexport const appWorkspacePanelVariable = (kind: \"pane\" | \"detail\" | \"drawer\", panelId: string): string =>\n `--k2b-workspace-${kind}-${assertStableUiId(panelId, \"AppWorkspace panel id\")}-${kind === \"drawer\" ? \"height\" : \"width\"}`;\n\nexport const normalizeAppWorkspaceLayoutState = (value: unknown): AppWorkspaceLayoutState | null => {\n if (!value || typeof value !== \"object\") return null;\n const candidate = value as Record<string, unknown>;\n if (candidate.version !== 1 && candidate.version !== 2) return null;\n const sidebarWidth = finiteSize(candidate.sidebarWidth, APP_WORKSPACE_SIDEBAR_MIN, APP_WORKSPACE_SIDEBAR_STATE_MAX);\n const sidebarCollapsed = typeof candidate.sidebarCollapsed === \"boolean\" ? candidate.sidebarCollapsed : undefined;\n // Keyed panel maps only exist from version 2 on; a version-1 payload that\n // carries them was not written by this component and is not trusted.\n const legacy = candidate.version === 1;\n const paneWidths = legacy ? undefined : normalizeSizes(candidate.paneWidths, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_PANE_MAX);\n const detailWidths = legacy\n ? (() => {\n const width = finiteSize(candidate.detailWidth, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DETAIL_MAX);\n return width === undefined ? undefined : { primary: width };\n })()\n : normalizeSizes(candidate.detailWidths, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DETAIL_MAX);\n const drawerHeights = legacy ? undefined : normalizeSizes(candidate.drawerHeights, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_DRAWER_MAX);\n return sidebarWidth === undefined && sidebarCollapsed === undefined && !paneWidths && !detailWidths && !drawerHeights\n ? null\n : { version: 2, sidebarWidth, sidebarCollapsed, paneWidths, detailWidths, drawerHeights };\n};\n\nexport const parseAppWorkspaceLayoutState = (value: string | null | undefined): AppWorkspaceLayoutState | null => {\n if (!value) return null;\n try {\n return normalizeAppWorkspaceLayoutState(JSON.parse(decodeURIComponent(value)));\n } catch {\n return null;\n }\n};\n\nexport const serializeAppWorkspaceLayoutState = (state: AppWorkspaceLayoutState): string =>\n encodeURIComponent(JSON.stringify(normalizeAppWorkspaceLayoutState(state) ?? { version: 2 }));\n\nexport const appWorkspaceLayoutStyle = (state: AppWorkspaceLayoutState | null | undefined): string | undefined => {\n if (!state) return undefined;\n const declarations = [\n state.sidebarCollapsed\n ? `--k2b-workspace-sidebar-width:${APP_WORKSPACE_SIDEBAR_COLLAPSED}px`\n : state.sidebarWidth === undefined\n ? null\n : `--k2b-workspace-sidebar-width:${state.sidebarWidth}px`,\n ...Object.entries(state.paneWidths ?? {}).map(([id, width]) => `${appWorkspacePanelVariable(\"pane\", id)}:${width}px`),\n ...Object.entries(state.detailWidths ?? {}).map(([id, width]) => `${appWorkspacePanelVariable(\"detail\", id)}:${width}px`),\n ...Object.entries(state.drawerHeights ?? {}).map(([id, height]) => `${appWorkspacePanelVariable(\"drawer\", id)}:${height}px`),\n ].filter(Boolean);\n return declarations.length ? declarations.join(\";\") : undefined;\n};\n\nimport { assertStableUiId, isStableUiId } from \"./stable-id\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,10 +2,13 @@ export { default as AppOverview } from "./AppOverview";
|
|
|
2
2
|
export { default as AppWorkspace } from "./AppWorkspace";
|
|
3
3
|
export { installAppWorkspaceController } from "./app-workspace-controller";
|
|
4
4
|
export { APP_WORKSPACE_DETAIL_DEFAULT, APP_WORKSPACE_DETAIL_MAX, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DRAWER_DEFAULT, APP_WORKSPACE_DRAWER_MAX, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_MAIN_MIN, APP_WORKSPACE_MAIN_MIN_HEIGHT, APP_WORKSPACE_PANE_DEFAULT, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_DEFAULT, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspaceLayoutStyle, appWorkspacePanelVariable, appWorkspaceResizeLimits, normalizeAppWorkspaceLayoutState, parseAppWorkspaceLayoutState, resolveAppWorkspaceSidebarWidth, safeAppWorkspacePanelId, serializeAppWorkspaceLayoutState, shouldCollapseAppWorkspaceSidebar } from "./app-workspace-state";
|
|
5
|
+
export { bottomSheetOptions, default as BottomSheet } from "./BottomSheet";
|
|
5
6
|
export { DataPanel } from "./DataPanel";
|
|
6
7
|
export { default as DetailPanel } from "./DetailPanel";
|
|
7
8
|
export { default as Discussion } from "./Discussion";
|
|
8
9
|
export { default as FloatingWindow, fitFloatingWindowRect, openFloatingWindow } from "./FloatingWindow";
|
|
10
|
+
export { default as Navigation } from "./Navigation";
|
|
11
|
+
export { createNavigation, findNavigationItem } from "./navigation-model";
|
|
9
12
|
export { confirmDiscardIfDirty, default as PanelDialog, panelDialogFixedOptions, panelDialogFixedPanelClass, panelDialogOptions, panelDialogPanelClass, panelDialogWideOptions, panelDialogWidePanelClass, panelDialogWorkspaceOptions, panelDialogWorkspacePanelClass } from "./PanelDialog";
|
|
10
13
|
export { PanelHeader } from "./PanelHeader";
|
|
11
14
|
export { default as Panes } from "./Panes";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["default","AppOverview","AppWorkspace","installAppWorkspaceController","APP_WORKSPACE_DETAIL_DEFAULT","APP_WORKSPACE_DETAIL_MAX","APP_WORKSPACE_DETAIL_MIN","APP_WORKSPACE_DRAWER_DEFAULT","APP_WORKSPACE_DRAWER_MAX","APP_WORKSPACE_DRAWER_MIN","APP_WORKSPACE_MAIN_MIN","APP_WORKSPACE_MAIN_MIN_HEIGHT","APP_WORKSPACE_PANE_DEFAULT","APP_WORKSPACE_PANE_MAX","APP_WORKSPACE_PANE_MIN","APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD","APP_WORKSPACE_SIDEBAR_COLLAPSED","APP_WORKSPACE_SIDEBAR_DEFAULT","APP_WORKSPACE_SIDEBAR_MAX","APP_WORKSPACE_SIDEBAR_MIN","appWorkspaceLayoutStyle","appWorkspacePanelVariable","appWorkspaceResizeLimits","normalizeAppWorkspaceLayoutState","parseAppWorkspaceLayoutState","resolveAppWorkspaceSidebarWidth","safeAppWorkspacePanelId","serializeAppWorkspaceLayoutState","shouldCollapseAppWorkspaceSidebar","DataPanel","DetailPanel","Discussion","FloatingWindow","fitFloatingWindowRect","openFloatingWindow","confirmDiscardIfDirty","PanelDialog","panelDialogFixedOptions","panelDialogFixedPanelClass","panelDialogOptions","panelDialogPanelClass","panelDialogWideOptions","panelDialogWidePanelClass","panelDialogWorkspaceOptions","panelDialogWorkspacePanelClass","PanelHeader","Panes","activatePanesItem","addPanesItem","applyPanesIntent","createPanesLayout","isPanesItemVisible","PANES_LAYOUT_VERSION","parsePanesLayout","reconcilePanesLayout","removePanesItem","resizePanesSplit","ScrollArea","readSettingsError","SettingsField","SettingsGroup","SettingsPage","SettingsPanelFooter","SettingsSaveBar","SettingsSection","sameSettingValue","SettingsCollection","SettingsModal"],"sources":["layout/index.ts"],"sourcesContent":["export type {\n AppOverviewEmptyStateProps,\n AppOverviewPanelProps,\n AppOverviewProps,\n} from \"./AppOverview\";\nexport { default as AppOverview } from \"./AppOverview\";\nexport type {\n AppWorkspaceBottomDrawerHeight,\n AppWorkspaceBottomDrawerProps,\n AppWorkspaceContentProps,\n AppWorkspaceDetailProps,\n AppWorkspaceDetailWidth,\n AppWorkspaceMainPaneProps,\n AppWorkspaceMainProps,\n AppWorkspaceNavTreeItemProps,\n AppWorkspaceNavTreeProps,\n AppWorkspaceProps,\n AppWorkspaceSidebarAccessoryVisibility,\n AppWorkspaceSidebarBodyProps,\n AppWorkspaceSidebarIconActionProps,\n AppWorkspaceSidebarIconActionTone,\n AppWorkspaceSidebarIconGridProps,\n AppWorkspaceSidebarItemActionProps,\n AppWorkspaceSidebarItemActionsProps,\n AppWorkspaceSidebarItemIconProps,\n AppWorkspaceSidebarItemLabelProps,\n AppWorkspaceSidebarItemMetaProps,\n AppWorkspaceSidebarItemProps,\n AppWorkspaceSidebarItemTone,\n
|
|
1
|
+
{"version":3,"names":["default","AppOverview","AppWorkspace","installAppWorkspaceController","APP_WORKSPACE_DETAIL_DEFAULT","APP_WORKSPACE_DETAIL_MAX","APP_WORKSPACE_DETAIL_MIN","APP_WORKSPACE_DRAWER_DEFAULT","APP_WORKSPACE_DRAWER_MAX","APP_WORKSPACE_DRAWER_MIN","APP_WORKSPACE_MAIN_MIN","APP_WORKSPACE_MAIN_MIN_HEIGHT","APP_WORKSPACE_PANE_DEFAULT","APP_WORKSPACE_PANE_MAX","APP_WORKSPACE_PANE_MIN","APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD","APP_WORKSPACE_SIDEBAR_COLLAPSED","APP_WORKSPACE_SIDEBAR_DEFAULT","APP_WORKSPACE_SIDEBAR_MAX","APP_WORKSPACE_SIDEBAR_MIN","appWorkspaceLayoutStyle","appWorkspacePanelVariable","appWorkspaceResizeLimits","normalizeAppWorkspaceLayoutState","parseAppWorkspaceLayoutState","resolveAppWorkspaceSidebarWidth","safeAppWorkspacePanelId","serializeAppWorkspaceLayoutState","shouldCollapseAppWorkspaceSidebar","bottomSheetOptions","BottomSheet","DataPanel","DetailPanel","Discussion","FloatingWindow","fitFloatingWindowRect","openFloatingWindow","Navigation","createNavigation","findNavigationItem","confirmDiscardIfDirty","PanelDialog","panelDialogFixedOptions","panelDialogFixedPanelClass","panelDialogOptions","panelDialogPanelClass","panelDialogWideOptions","panelDialogWidePanelClass","panelDialogWorkspaceOptions","panelDialogWorkspacePanelClass","PanelHeader","Panes","activatePanesItem","addPanesItem","applyPanesIntent","createPanesLayout","isPanesItemVisible","PANES_LAYOUT_VERSION","parsePanesLayout","reconcilePanesLayout","removePanesItem","resizePanesSplit","ScrollArea","readSettingsError","SettingsField","SettingsGroup","SettingsPage","SettingsPanelFooter","SettingsSaveBar","SettingsSection","sameSettingValue","SettingsCollection","SettingsModal"],"sources":["layout/index.ts"],"sourcesContent":["export type {\n AppOverviewEmptyStateProps,\n AppOverviewPanelProps,\n AppOverviewProps,\n} from \"./AppOverview\";\nexport { default as AppOverview } from \"./AppOverview\";\nexport type {\n AppWorkspaceBottomDrawerHeight,\n AppWorkspaceBottomDrawerProps,\n AppWorkspaceContentProps,\n AppWorkspaceDetailProps,\n AppWorkspaceDetailWidth,\n AppWorkspaceMainPaneProps,\n AppWorkspaceMainProps,\n AppWorkspaceNavTreeItemProps,\n AppWorkspaceNavTreeProps,\n AppWorkspaceProps,\n AppWorkspaceSidebarAccessoryVisibility,\n AppWorkspaceSidebarBodyProps,\n AppWorkspaceSidebarIconActionProps,\n AppWorkspaceSidebarIconActionTone,\n AppWorkspaceSidebarIconGridProps,\n AppWorkspaceSidebarItemActionProps,\n AppWorkspaceSidebarItemActionsProps,\n AppWorkspaceSidebarItemIconProps,\n AppWorkspaceSidebarItemLabelProps,\n AppWorkspaceSidebarItemMetaProps,\n AppWorkspaceSidebarItemProps,\n AppWorkspaceSidebarItemTone,\n AppWorkspaceSidebarProps,\n AppWorkspaceSidebarSectionProps,\n AppWorkspaceSidebarVisibility,\n} from \"./AppWorkspace\";\nexport { default as AppWorkspace } from \"./AppWorkspace\";\nexport type { AppWorkspaceControllerOptions } from \"./app-workspace-controller\";\nexport { installAppWorkspaceController } from \"./app-workspace-controller\";\nexport type {\n AppWorkspaceLayoutState,\n AppWorkspaceResizeKind,\n} from \"./app-workspace-state\";\nexport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_DEFAULT,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_MAIN_MIN_HEIGHT,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n appWorkspaceLayoutStyle,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n normalizeAppWorkspaceLayoutState,\n parseAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n serializeAppWorkspaceLayoutState,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nexport { type BottomSheetProps, bottomSheetOptions, default as BottomSheet } from \"./BottomSheet\";\nexport type { DataPanelProps } from \"./DataPanel\";\nexport { DataPanel } from \"./DataPanel\";\nexport type {\n DetailPanelActionButtonProps,\n DetailPanelActionLinkProps,\n DetailPanelActionProps,\n DetailPanelBodyProps,\n DetailPanelGroupProps,\n DetailPanelHeaderProps,\n DetailPanelProps,\n DetailPanelSectionProps,\n DetailPanelSummaryProps,\n DetailPanelTone,\n} from \"./DetailPanel\";\nexport { default as DetailPanel } from \"./DetailPanel\";\nexport type { DiscussionComposerProps, DiscussionItemProps, DiscussionListProps, DiscussionProps } from \"./Discussion\";\nexport { default as Discussion } from \"./Discussion\";\nexport type {\n FloatingWindowClose,\n FloatingWindowProps,\n OpenFloatingWindowOptions,\n} from \"./FloatingWindow\";\nexport {\n default as FloatingWindow,\n type FloatingWindowRect,\n fitFloatingWindowRect,\n openFloatingWindow,\n} from \"./FloatingWindow\";\nexport { default as Navigation, type NavigationProps } from \"./Navigation\";\nexport {\n createNavigation,\n findNavigationItem,\n type NavigationController,\n type NavigationItem,\n type NavigationOptions,\n} from \"./navigation-model\";\nexport type {\n PanelDialogBodyProps,\n PanelDialogFooterProps,\n PanelDialogHeaderProps,\n PanelDialogProps,\n PanelDialogSectionProps,\n PanelDialogSurface,\n PanelDialogTabOption,\n PanelDialogTabsProps,\n} from \"./PanelDialog\";\nexport {\n confirmDiscardIfDirty,\n default as PanelDialog,\n panelDialogFixedOptions,\n panelDialogFixedPanelClass,\n panelDialogOptions,\n panelDialogPanelClass,\n panelDialogWideOptions,\n panelDialogWidePanelClass,\n panelDialogWorkspaceOptions,\n panelDialogWorkspacePanelClass,\n} from \"./PanelDialog\";\nexport type { PanelHeaderProps } from \"./PanelHeader\";\nexport { PanelHeader } from \"./PanelHeader\";\nexport type { PanesItem, PanesProps } from \"./Panes\";\nexport { default as Panes } from \"./Panes\";\nexport type {\n AddPanesItemOptions,\n PanesDirection,\n PanesGroup,\n PanesIntent,\n PanesLayout,\n PanesNode,\n PanesPath,\n PanesPathSegment,\n PanesSide,\n PanesSplit,\n} from \"./panes-layout\";\nexport {\n activatePanesItem,\n addPanesItem,\n applyPanesIntent,\n createPanesLayout,\n isPanesItemVisible,\n PANES_LAYOUT_VERSION,\n parsePanesLayout,\n reconcilePanesLayout,\n removePanesItem,\n resizePanesSplit,\n} from \"./panes-layout\";\nexport type { ScrollAreaProps } from \"./ScrollArea\";\nexport { default as ScrollArea } from \"./ScrollArea\";\nexport type {\n SettingsFieldControlProps,\n SettingsFieldProps,\n SettingsGroupActionProps,\n SettingsGroupProps,\n SettingsPageProps,\n SettingsPanelFooterProps,\n SettingsSaveBarProps,\n SettingsSectionProps,\n} from \"./Settings\";\nexport {\n readSettingsError,\n SettingsField,\n SettingsGroup,\n SettingsPage,\n SettingsPanelFooter,\n SettingsSaveBar,\n SettingsSection,\n sameSettingValue,\n} from \"./Settings\";\nexport type {\n SettingsCollectionActionProps,\n SettingsCollectionItemActionsProps,\n SettingsCollectionItemProps,\n SettingsCollectionItemReorderProps,\n SettingsCollectionItemStatusProps,\n SettingsCollectionProps,\n} from \"./SettingsCollection\";\nexport { default as SettingsCollection } from \"./SettingsCollection\";\nexport type {\n SettingsModalFooterProps,\n SettingsModalGroupProps,\n SettingsModalProps,\n SettingsModalTabProps,\n SettingsModalTabTone,\n} from \"./SettingsModal\";\nexport { default as SettingsModal } from \"./SettingsModal\";\n"],"mappings":"AAKA,SAASA,OAAO,IAAIC,WAAW,QAAQ,eAAe;AA4BtD,SAASD,OAAO,IAAIE,YAAY,QAAQ,gBAAgB;AAExD,SAASC,6BAA6B,QAAQ,4BAA4B;AAK1E,SACEC,4BAA4B,EAC5BC,wBAAwB,EACxBC,wBAAwB,EACxBC,4BAA4B,EAC5BC,wBAAwB,EACxBC,wBAAwB,EACxBC,sBAAsB,EACtBC,6BAA6B,EAC7BC,0BAA0B,EAC1BC,sBAAsB,EACtBC,sBAAsB,EACtBC,wCAAwC,EACxCC,+BAA+B,EAC/BC,6BAA6B,EAC7BC,yBAAyB,EACzBC,yBAAyB,EACzBC,uBAAuB,EACvBC,yBAAyB,EACzBC,wBAAwB,EACxBC,gCAAgC,EAChCC,4BAA4B,EAC5BC,+BAA+B,EAC/BC,uBAAuB,EACvBC,gCAAgC,EAChCC,iCAAiC,QAC5B,uBAAuB;AAC9B,SAAgCC,kBAAkB,EAAE7B,OAAO,IAAI8B,WAAW,QAAQ,eAAe;AAEjG,SAASC,SAAS,QAAQ,aAAa;AAavC,SAAS/B,OAAO,IAAIgC,WAAW,QAAQ,eAAe;AAEtD,SAAShC,OAAO,IAAIiC,UAAU,QAAQ,cAAc;AAMpD,SACEjC,OAAO,IAAIkC,cAAc,EAEzBC,qBAAqB,EACrBC,kBAAkB,QACb,kBAAkB;AACzB,SAASpC,OAAO,IAAIqC,UAAU,QAA8B,cAAc;AAC1E,SACEC,gBAAgB,EAChBC,kBAAkB,QAIb,oBAAoB;AAW3B,SACEC,qBAAqB,EACrBxC,OAAO,IAAIyC,WAAW,EACtBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,kBAAkB,EAClBC,qBAAqB,EACrBC,sBAAsB,EACtBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,8BAA8B,QACzB,eAAe;AAEtB,SAASC,WAAW,QAAQ,eAAe;AAE3C,SAASlD,OAAO,IAAImD,KAAK,QAAQ,SAAS;AAa1C,SACEC,iBAAiB,EACjBC,YAAY,EACZC,gBAAgB,EAChBC,iBAAiB,EACjBC,kBAAkB,EAClBC,oBAAoB,EACpBC,gBAAgB,EAChBC,oBAAoB,EACpBC,eAAe,EACfC,gBAAgB,QACX,gBAAgB;AAEvB,SAAS7D,OAAO,IAAI8D,UAAU,QAAQ,cAAc;AAWpD,SACEC,iBAAiB,EACjBC,aAAa,EACbC,aAAa,EACbC,YAAY,EACZC,mBAAmB,EACnBC,eAAe,EACfC,eAAe,EACfC,gBAAgB,QACX,YAAY;AASnB,SAAStE,OAAO,IAAIuE,kBAAkB,QAAQ,sBAAsB;AAQpE,SAASvE,OAAO,IAAIwE,aAAa,QAAQ,iBAAiB","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Serializable presentation. Functions stay with the controller's owning island. */
|
|
2
|
+
|
|
3
|
+
export function findNavigationItem(items, id) {
|
|
4
|
+
for (const item of items) {
|
|
5
|
+
if (item.disabled) continue;
|
|
6
|
+
if (item.id === id) return item;
|
|
7
|
+
const found = findNavigationItem(item.children ?? [], id) ?? findNavigationItem(item.actions ?? [], id);
|
|
8
|
+
if (found) return found;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** One live source for renderers; no router, registry, fetching or persisted state. */
|
|
13
|
+
export function createNavigation(options) {
|
|
14
|
+
return {
|
|
15
|
+
items: options.items,
|
|
16
|
+
onNavigate: options.onNavigate,
|
|
17
|
+
async activate(id) {
|
|
18
|
+
const item = findNavigationItem(options.items(), id);
|
|
19
|
+
if (item?.action) await options.onAction?.(item.action);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=navigation-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["findNavigationItem","items","id","item","disabled","found","children","actions","createNavigation","options","onNavigate","activate","action","onAction"],"sources":["layout/navigation-model.ts"],"sourcesContent":["import type { LinkNavigateEvent, NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport type { Accessor } from \"solid-js\";\n\ntype NavigationEntry = {\n id: string;\n label: string;\n icon?: string;\n badge?: string | number;\n description?: string;\n active?: boolean;\n disabled?: boolean;\n color?: string;\n children?: readonly NavigationItem[];\n /** Initial disclosure state; subsequent toggles remain local to the renderer. */\n defaultExpanded?: boolean;\n actions?: readonly NavigationItem[];\n};\n\n/** Serializable presentation. Functions stay with the controller's owning island. */\nexport type NavigationItem = NavigationEntry &\n (\n | { href: string; action?: string; navigation?: \"document\" | \"enhanced\"; scroll?: NavigationScrollMode }\n | { action: string; href?: never; navigation?: never; scroll?: never }\n | { href?: never; action?: never; navigation?: never; scroll?: never; children: readonly NavigationItem[] }\n );\n\nexport type NavigationOptions = {\n items: Accessor<readonly NavigationItem[]>;\n onAction?: (action: string) => void | Promise<void>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n};\n\nexport function findNavigationItem(items: readonly NavigationItem[], id: string): NavigationItem | undefined {\n for (const item of items) {\n if (item.disabled) continue;\n if (item.id === id) return item;\n const found = findNavigationItem(item.children ?? [], id) ?? findNavigationItem(item.actions ?? [], id);\n if (found) return found;\n }\n}\n\n/** One live source for renderers; no router, registry, fetching or persisted state. */\nexport function createNavigation(options: NavigationOptions) {\n return {\n items: options.items,\n onNavigate: options.onNavigate,\n async activate(id: string) {\n const item = findNavigationItem(options.items(), id);\n if (item?.action) await options.onAction?.(item.action);\n },\n };\n}\n\nexport type NavigationController = ReturnType<typeof createNavigation>;\n"],"mappings":"AAkBA;;AAcA,OAAO,SAASA,kBAAkBA,CAACC,KAAgC,EAAEC,EAAU,EAA8B;EAC3G,KAAK,MAAMC,IAAI,IAAIF,KAAK,EAAE;IACxB,IAAIE,IAAI,CAACC,QAAQ,EAAE;IACnB,IAAID,IAAI,CAACD,EAAE,KAAKA,EAAE,EAAE,OAAOC,IAAI;IAC/B,MAAME,KAAK,GAAGL,kBAAkB,CAACG,IAAI,CAACG,QAAQ,IAAI,EAAE,EAAEJ,EAAE,CAAC,IAAIF,kBAAkB,CAACG,IAAI,CAACI,OAAO,IAAI,EAAE,EAAEL,EAAE,CAAC;IACvG,IAAIG,KAAK,EAAE,OAAOA,KAAK;EACzB;AACF;;AAEA;AACA,OAAO,SAASG,gBAAgBA,CAACC,OAA0B,EAAE;EAC3D,OAAO;IACLR,KAAK,EAAEQ,OAAO,CAACR,KAAK;IACpBS,UAAU,EAAED,OAAO,CAACC,UAAU;IAC9B,MAAMC,QAAQA,CAACT,EAAU,EAAE;MACzB,MAAMC,IAAI,GAAGH,kBAAkB,CAACS,OAAO,CAACR,KAAK,CAAC,CAAC,EAAEC,EAAE,CAAC;MACpD,IAAIC,IAAI,EAAES,MAAM,EAAE,MAAMH,OAAO,CAACI,QAAQ,GAAGV,IAAI,CAACS,MAAM,CAAC;IACzD;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createEffect, onCleanup } from "solid-js";
|
|
2
|
+
const selector = "[data-scroll-fade-mode]";
|
|
3
|
+
const active = new WeakMap();
|
|
4
|
+
|
|
5
|
+
/** Shared by hydrated components and the workspace's server-rendered scrollports. */
|
|
6
|
+
function observeScrollFade(body) {
|
|
7
|
+
let entry = active.get(body);
|
|
8
|
+
if (!entry) {
|
|
9
|
+
const update = () => {
|
|
10
|
+
const mode = body.getAttribute("data-scroll-fade-mode");
|
|
11
|
+
const horizontal = body.getAttribute("data-scroll-fade-axis") === "horizontal";
|
|
12
|
+
const overflow = horizontal ? body.scrollWidth - body.clientWidth : body.scrollHeight - body.clientHeight;
|
|
13
|
+
// Horizontal RTL scrollLeft starts at zero on the right and becomes negative.
|
|
14
|
+
const rtl = horizontal && getComputedStyle(body).direction === "rtl";
|
|
15
|
+
const offset = horizontal ? rtl ? overflow + body.scrollLeft : body.scrollLeft : body.scrollTop;
|
|
16
|
+
const top = mode === "both" && overflow > 1 && offset > 1;
|
|
17
|
+
const bottom = !!mode && overflow > 1 && overflow - offset > 1;
|
|
18
|
+
const edges = top && bottom ? "both" : top ? "top" : bottom ? "bottom" : undefined;
|
|
19
|
+
if (edges) {
|
|
20
|
+
if (body.getAttribute("data-scroll-fade") !== edges) body.setAttribute("data-scroll-fade", edges);
|
|
21
|
+
} else if (body.hasAttribute("data-scroll-fade")) body.removeAttribute("data-scroll-fade");
|
|
22
|
+
};
|
|
23
|
+
const resize = new ResizeObserver(update);
|
|
24
|
+
const observe = () => {
|
|
25
|
+
resize.disconnect();
|
|
26
|
+
resize.observe(body);
|
|
27
|
+
for (const child of Array.from(body.children)) resize.observe(child);
|
|
28
|
+
update();
|
|
29
|
+
};
|
|
30
|
+
const mutations = new MutationObserver(records => {
|
|
31
|
+
if (records.some(record => record.type === "childList" && record.target === body)) observe();else update();
|
|
32
|
+
});
|
|
33
|
+
mutations.observe(body, {
|
|
34
|
+
childList: true,
|
|
35
|
+
subtree: true,
|
|
36
|
+
characterData: true,
|
|
37
|
+
attributes: true,
|
|
38
|
+
attributeFilter: ["class", "style", "hidden", "open", "data-scroll-fade-mode", "data-scroll-fade-axis", "dir"]
|
|
39
|
+
});
|
|
40
|
+
body.addEventListener("scroll", update, {
|
|
41
|
+
passive: true
|
|
42
|
+
});
|
|
43
|
+
observe();
|
|
44
|
+
entry = {
|
|
45
|
+
users: 0,
|
|
46
|
+
stop: () => {
|
|
47
|
+
resize.disconnect();
|
|
48
|
+
mutations.disconnect();
|
|
49
|
+
body.removeEventListener("scroll", update);
|
|
50
|
+
body.removeAttribute("data-scroll-fade");
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
active.set(body, entry);
|
|
54
|
+
}
|
|
55
|
+
entry.users++;
|
|
56
|
+
return () => {
|
|
57
|
+
if (--entry.users === 0) {
|
|
58
|
+
entry.stop();
|
|
59
|
+
active.delete(body);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function createScrollFade(element, enabled) {
|
|
64
|
+
createEffect(() => {
|
|
65
|
+
if (!enabled()) return;
|
|
66
|
+
const body = element();
|
|
67
|
+
if (body) onCleanup(observeScrollFade(body));
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Enrich only explicitly marked UI scrollports, including SSR and later navigation. */
|
|
72
|
+
export function installScrollFades(root) {
|
|
73
|
+
const owned = new Map();
|
|
74
|
+
const sync = () => {
|
|
75
|
+
const next = new Set(Array.from(root.querySelectorAll(selector)));
|
|
76
|
+
if (root instanceof HTMLElement && root.matches(selector)) next.add(root);
|
|
77
|
+
for (const [element, stop] of owned) if (!next.has(element)) {
|
|
78
|
+
stop();
|
|
79
|
+
owned.delete(element);
|
|
80
|
+
}
|
|
81
|
+
for (const element of next) if (!owned.has(element)) owned.set(element, observeScrollFade(element));
|
|
82
|
+
};
|
|
83
|
+
const containsPort = node => node instanceof Element && (node.matches(selector) || node.querySelector(selector));
|
|
84
|
+
const mutations = new MutationObserver(records => {
|
|
85
|
+
if (records.some(record => record.type === "attributes" || Array.from(record.addedNodes).some(containsPort) || Array.from(record.removedNodes).some(containsPort))) sync();
|
|
86
|
+
});
|
|
87
|
+
mutations.observe(root, {
|
|
88
|
+
childList: true,
|
|
89
|
+
subtree: true,
|
|
90
|
+
attributes: true,
|
|
91
|
+
attributeFilter: ["data-scroll-fade-mode"]
|
|
92
|
+
});
|
|
93
|
+
sync();
|
|
94
|
+
return () => {
|
|
95
|
+
mutations.disconnect();
|
|
96
|
+
for (const stop of owned.values()) stop();
|
|
97
|
+
owned.clear();
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=scroll-fade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createEffect","onCleanup","selector","active","WeakMap","observeScrollFade","body","entry","get","update","mode","getAttribute","horizontal","overflow","scrollWidth","clientWidth","scrollHeight","clientHeight","rtl","getComputedStyle","direction","offset","scrollLeft","scrollTop","top","bottom","edges","undefined","setAttribute","hasAttribute","removeAttribute","resize","ResizeObserver","observe","disconnect","child","Array","from","children","mutations","MutationObserver","records","some","record","type","target","childList","subtree","characterData","attributes","attributeFilter","addEventListener","passive","users","stop","removeEventListener","set","delete","createScrollFade","element","enabled","installScrollFades","root","owned","Map","sync","next","Set","querySelectorAll","HTMLElement","matches","add","has","containsPort","node","Element","querySelector","addedNodes","removedNodes","values","clear"],"sources":["layout/scroll-fade.ts"],"sourcesContent":["import { createEffect, onCleanup } from \"solid-js\";\n\nconst selector = \"[data-scroll-fade-mode]\";\nconst active = new WeakMap<HTMLElement, { users: number; stop: () => void }>();\n\n/** Shared by hydrated components and the workspace's server-rendered scrollports. */\nfunction observeScrollFade(body: HTMLElement) {\n let entry = active.get(body);\n if (!entry) {\n const update = () => {\n const mode = body.getAttribute(\"data-scroll-fade-mode\");\n const horizontal = body.getAttribute(\"data-scroll-fade-axis\") === \"horizontal\";\n const overflow = horizontal ? body.scrollWidth - body.clientWidth : body.scrollHeight - body.clientHeight;\n // Horizontal RTL scrollLeft starts at zero on the right and becomes negative.\n const rtl = horizontal && getComputedStyle(body).direction === \"rtl\";\n const offset = horizontal ? (rtl ? overflow + body.scrollLeft : body.scrollLeft) : body.scrollTop;\n const top = mode === \"both\" && overflow > 1 && offset > 1;\n const bottom = !!mode && overflow > 1 && overflow - offset > 1;\n const edges = top && bottom ? \"both\" : top ? \"top\" : bottom ? \"bottom\" : undefined;\n if (edges) {\n if (body.getAttribute(\"data-scroll-fade\") !== edges) body.setAttribute(\"data-scroll-fade\", edges);\n } else if (body.hasAttribute(\"data-scroll-fade\")) body.removeAttribute(\"data-scroll-fade\");\n };\n const resize = new ResizeObserver(update);\n const observe = () => {\n resize.disconnect();\n resize.observe(body);\n for (const child of Array.from(body.children)) resize.observe(child);\n update();\n };\n const mutations = new MutationObserver((records) => {\n if (records.some((record) => record.type === \"childList\" && record.target === body)) observe();\n else update();\n });\n mutations.observe(body, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\", \"open\", \"data-scroll-fade-mode\", \"data-scroll-fade-axis\", \"dir\"],\n });\n body.addEventListener(\"scroll\", update, { passive: true });\n observe();\n entry = {\n users: 0,\n stop: () => {\n resize.disconnect();\n mutations.disconnect();\n body.removeEventListener(\"scroll\", update);\n body.removeAttribute(\"data-scroll-fade\");\n },\n };\n active.set(body, entry);\n }\n entry.users++;\n return () => {\n if (--entry.users === 0) {\n entry.stop();\n active.delete(body);\n }\n };\n}\n\nexport function createScrollFade(element: () => HTMLElement | undefined, enabled: () => boolean) {\n createEffect(() => {\n if (!enabled()) return;\n const body = element();\n if (body) onCleanup(observeScrollFade(body));\n });\n}\n\n/** Enrich only explicitly marked UI scrollports, including SSR and later navigation. */\nexport function installScrollFades(root: Document | HTMLElement) {\n const owned = new Map<HTMLElement, () => void>();\n const sync = () => {\n const next = new Set(Array.from(root.querySelectorAll<HTMLElement>(selector)));\n if (root instanceof HTMLElement && root.matches(selector)) next.add(root);\n for (const [element, stop] of owned)\n if (!next.has(element)) {\n stop();\n owned.delete(element);\n }\n for (const element of next) if (!owned.has(element)) owned.set(element, observeScrollFade(element));\n };\n const containsPort = (node: Node) => node instanceof Element && (node.matches(selector) || node.querySelector(selector));\n const mutations = new MutationObserver((records) => {\n if (\n records.some(\n (record) =>\n record.type === \"attributes\" ||\n Array.from(record.addedNodes).some(containsPort) ||\n Array.from(record.removedNodes).some(containsPort),\n )\n )\n sync();\n });\n mutations.observe(root, { childList: true, subtree: true, attributes: true, attributeFilter: [\"data-scroll-fade-mode\"] });\n sync();\n return () => {\n mutations.disconnect();\n for (const stop of owned.values()) stop();\n owned.clear();\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["For","Show","DescriptionList","props","columns","Math","max","min","_el$","_$getNextElement","_tmpl$","_$insert","_$createComponent","each","items","children","item","_el$2","_tmpl$2","_el$3","firstChild","_el$4","nextSibling","_el$5","_el$6","_co$","_$getNextMarker","term","description","when","action","_el$7","_tmpl$3","_$effect","_p$","_v$","class","_v$2","_v$3","layout","_v$4","size","_v$5","actionVisibility","e","_$className","t","_$setAttribute","a","o","i","undefined"],"sources":["surfaces/DescriptionList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\n\nexport type DescriptionListItem = {\n term: JSX.Element;\n description: JSX.Element;\n action?: JSX.Element;\n};\n\nexport type DescriptionListProps = {\n items: readonly DescriptionListItem[];\n columns?: 1 | 2 | 3;\n layout?: \"grid\" | \"rows\";\n size?: \"sm\" | \"md\";\n actionVisibility?: \"always\" | \"progressive\";\n class?: string;\n};\n\n/** Semantic key-value content with predictable responsive density. */\nexport function DescriptionList(props: DescriptionListProps): JSX.Element {\n const columns = () => Math.max(1, Math.min(3, props.columns ?? 1));\n return (\n <dl\n class={`k2b-description-list ${props.class ?? \"\"}`}\n data-columns={columns()}\n data-layout={props.layout ?? \"grid\"}\n data-size={props.size ?? \"md\"}\n data-action-visibility={props.actionVisibility ?? \"always\"}\n >\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-description-list__item\">\n <dt>{item.term}</dt>\n <dd>{item.description}</dd>\n <Show when={item.action}>{(action) => <div class=\"k2b-description-list__action\">{action()}</div>}</Show>\n </div>\n )}\n </For>\n </dl>\n );\n}\n\nexport default DescriptionList;\n"],"mappings":";;;;;;;;;;;AAAA,SAASA,GAAG,EAAYC,IAAI,QAAQ,UAAU;AAiB9C;AACA,OAAO,SAASC,eAAeA,CAACC,KAA2B,EAAe;EACxE,MAAMC,OAAO,GAAGA,CAAA,KAAMC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEJ,KAAK,CAACC,OAAO,IAAI,CAAC,CAAC,CAAC;EAClE;IAAA,IAAAI,IAAA,GAAAC,gBAAA,CAAAC,MAAA;IAAAC,QAAA,CAAAH,IAAA,EAAAI,iBAAA,CAQKZ,GAAG;MAAA,IAACa,IAAIA,CAAA;QAAA,OAAEV,KAAK,CAACW,KAAK;MAAA;MAAAC,QAAA,EAClBC,IAAI;QAAA,IAAAC,KAAA,GAAAR,gBAAA,CAAAS,OAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAG,UAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAG,WAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAC,WAAA;UAAA,CAAAE,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAH,KAAA,CAAAD,WAAA;QAAAX,QAAA,CAAAQ,KAAA,QAEGH,IAAI,CAACW,IAAI;QAAAhB,QAAA,CAAAU,KAAA,QACTL,IAAI,CAACY,WAAW;QAAAjB,QAAA,CAAAM,KAAA,EAAAL,iBAAA,CACpBX,IAAI;UAAA,IAAC4B,IAAIA,CAAA;YAAA,OAAEb,IAAI,CAACc,MAAM;UAAA;UAAAf,QAAA,EAAIe,MAAM;YAAA,IAAAC,KAAA,GAAAtB,gBAAA,CAAAuB,OAAA;YAAArB,QAAA,CAAAoB,KAAA,EAAgDD,MAAM;YAAA,OAAAC,KAAA;UAAA;QAAS,IAAAP,KAAA,EAAAC,IAAA;QAAA,OAAAR,KAAA;MAAA;IAEnG;IAAAgB,QAAA,CAAAC,GAAA;MAAA,IAAAC,GAAA,GAbI,wBAAwBhC,KAAK,CAACiC,KAAK,IAAI,EAAE,EAAE;QAAAC,IAAA,GACpCjC,OAAO,CAAC,CAAC;QAAAkC,IAAA,GACVnC,KAAK,CAACoC,MAAM,IAAI,MAAM;QAAAC,IAAA,GACxBrC,KAAK,CAACsC,IAAI,IAAI,IAAI;QAAAC,IAAA,GACLvC,KAAK,CAACwC,gBAAgB,IAAI,QAAQ;MAAAR,GAAA,KAAAD,GAAA,CAAAU,CAAA,IAAAC,WAAA,CAAArC,IAAA,EAAA0B,GAAA,CAAAU,CAAA,GAAAT,GAAA;MAAAE,IAAA,KAAAH,GAAA,CAAAY,CAAA,IAAAC,cAAA,CAAAvC,IAAA,kBAAA0B,GAAA,CAAAY,CAAA,GAAAT,IAAA;MAAAC,IAAA,KAAAJ,GAAA,CAAAc,CAAA,IAAAD,cAAA,CAAAvC,IAAA,iBAAA0B,GAAA,CAAAc,CAAA,GAAAV,IAAA;MAAAE,IAAA,KAAAN,GAAA,CAAAe,CAAA,IAAAF,cAAA,CAAAvC,IAAA,eAAA0B,GAAA,CAAAe,CAAA,GAAAT,IAAA;MAAAE,IAAA,KAAAR,GAAA,CAAAgB,CAAA,IAAAH,cAAA,CAAAvC,IAAA,4BAAA0B,GAAA,CAAAgB,CAAA,GAAAR,IAAA;MAAA,OAAAR,GAAA;IAAA;MAAAU,CAAA,EAAAO,SAAA;MAAAL,CAAA,EAAAK,SAAA;MAAAH,CAAA,EAAAG,SAAA;MAAAF,CAAA,EAAAE,SAAA;MAAAD,CAAA,EAAAC;IAAA;IAAA,OAAA3C,IAAA;EAAA;AAahE;AAEA,eAAeN,eAAe","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["For","Show","DescriptionList","props","columns","Math","max","min","_el$","_$getNextElement","_tmpl$","_$insert","_$createComponent","each","items","children","item","_el$2","_tmpl$2","_el$3","firstChild","_el$4","nextSibling","_el$5","_el$6","_co$","_$getNextMarker","term","description","when","action","_el$7","_tmpl$3","_$effect","_p$","_v$","class","_v$2","_v$3","layout","_v$4","size","_v$5","actionVisibility","e","_$className","t","_$setAttribute","a","o","i","undefined"],"sources":["surfaces/DescriptionList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\n\nexport type DescriptionListItem = {\n term: JSX.Element;\n description: JSX.Element;\n action?: JSX.Element;\n};\n\nexport type DescriptionListProps = {\n items: readonly DescriptionListItem[];\n columns?: 1 | 2 | 3;\n layout?: \"grid\" | \"rows\" | \"compact\";\n size?: \"sm\" | \"md\";\n actionVisibility?: \"always\" | \"progressive\";\n class?: string;\n};\n\n/** Semantic key-value content with predictable responsive density. */\nexport function DescriptionList(props: DescriptionListProps): JSX.Element {\n const columns = () => Math.max(1, Math.min(3, props.columns ?? 1));\n return (\n <dl\n class={`k2b-description-list ${props.class ?? \"\"}`}\n data-columns={columns()}\n data-layout={props.layout ?? \"grid\"}\n data-size={props.size ?? \"md\"}\n data-action-visibility={props.actionVisibility ?? \"always\"}\n >\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-description-list__item\">\n <dt>{item.term}</dt>\n <dd>{item.description}</dd>\n <Show when={item.action}>{(action) => <div class=\"k2b-description-list__action\">{action()}</div>}</Show>\n </div>\n )}\n </For>\n </dl>\n );\n}\n\nexport default DescriptionList;\n"],"mappings":";;;;;;;;;;;AAAA,SAASA,GAAG,EAAYC,IAAI,QAAQ,UAAU;AAiB9C;AACA,OAAO,SAASC,eAAeA,CAACC,KAA2B,EAAe;EACxE,MAAMC,OAAO,GAAGA,CAAA,KAAMC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEJ,KAAK,CAACC,OAAO,IAAI,CAAC,CAAC,CAAC;EAClE;IAAA,IAAAI,IAAA,GAAAC,gBAAA,CAAAC,MAAA;IAAAC,QAAA,CAAAH,IAAA,EAAAI,iBAAA,CAQKZ,GAAG;MAAA,IAACa,IAAIA,CAAA;QAAA,OAAEV,KAAK,CAACW,KAAK;MAAA;MAAAC,QAAA,EAClBC,IAAI;QAAA,IAAAC,KAAA,GAAAR,gBAAA,CAAAS,OAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAG,UAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAG,WAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAC,WAAA;UAAA,CAAAE,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAH,KAAA,CAAAD,WAAA;QAAAX,QAAA,CAAAQ,KAAA,QAEGH,IAAI,CAACW,IAAI;QAAAhB,QAAA,CAAAU,KAAA,QACTL,IAAI,CAACY,WAAW;QAAAjB,QAAA,CAAAM,KAAA,EAAAL,iBAAA,CACpBX,IAAI;UAAA,IAAC4B,IAAIA,CAAA;YAAA,OAAEb,IAAI,CAACc,MAAM;UAAA;UAAAf,QAAA,EAAIe,MAAM;YAAA,IAAAC,KAAA,GAAAtB,gBAAA,CAAAuB,OAAA;YAAArB,QAAA,CAAAoB,KAAA,EAAgDD,MAAM;YAAA,OAAAC,KAAA;UAAA;QAAS,IAAAP,KAAA,EAAAC,IAAA;QAAA,OAAAR,KAAA;MAAA;IAEnG;IAAAgB,QAAA,CAAAC,GAAA;MAAA,IAAAC,GAAA,GAbI,wBAAwBhC,KAAK,CAACiC,KAAK,IAAI,EAAE,EAAE;QAAAC,IAAA,GACpCjC,OAAO,CAAC,CAAC;QAAAkC,IAAA,GACVnC,KAAK,CAACoC,MAAM,IAAI,MAAM;QAAAC,IAAA,GACxBrC,KAAK,CAACsC,IAAI,IAAI,IAAI;QAAAC,IAAA,GACLvC,KAAK,CAACwC,gBAAgB,IAAI,QAAQ;MAAAR,GAAA,KAAAD,GAAA,CAAAU,CAAA,IAAAC,WAAA,CAAArC,IAAA,EAAA0B,GAAA,CAAAU,CAAA,GAAAT,GAAA;MAAAE,IAAA,KAAAH,GAAA,CAAAY,CAAA,IAAAC,cAAA,CAAAvC,IAAA,kBAAA0B,GAAA,CAAAY,CAAA,GAAAT,IAAA;MAAAC,IAAA,KAAAJ,GAAA,CAAAc,CAAA,IAAAD,cAAA,CAAAvC,IAAA,iBAAA0B,GAAA,CAAAc,CAAA,GAAAV,IAAA;MAAAE,IAAA,KAAAN,GAAA,CAAAe,CAAA,IAAAF,cAAA,CAAAvC,IAAA,eAAA0B,GAAA,CAAAe,CAAA,GAAAT,IAAA;MAAAE,IAAA,KAAAR,GAAA,CAAAgB,CAAA,IAAAH,cAAA,CAAAvC,IAAA,4BAAA0B,GAAA,CAAAgB,CAAA,GAAAR,IAAA;MAAA,OAAAR,GAAA;IAAA;MAAAU,CAAA,EAAAO,SAAA;MAAAL,CAAA,EAAAK,SAAA;MAAAH,CAAA,EAAAG,SAAA;MAAAF,CAAA,EAAAE,SAAA;MAAAD,CAAA,EAAAC;IAAA;IAAA,OAAA3C,IAAA;EAAA;AAahE;AAEA,eAAeN,eAAe","ignoreList":[]}
|