@k2b/ui 0.4.2 → 0.5.1
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.map +1 -1
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/CopyButton.js.map +1 -1
- package/dist/browser/actions/Disclosure.js.map +1 -1
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/RemoveButton.js.map +1 -1
- package/dist/browser/actions/SegmentedControl.js.map +1 -1
- package/dist/browser/actions/SplitButton.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/Toolbar.js.map +1 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatContextPopup.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatRoot.js.map +1 -1
- package/dist/browser/chat/ChatTasks.js +1 -1
- package/dist/browser/chat/ChatTasks.js.map +1 -1
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/chat/chat-behavior.js.map +1 -1
- package/dist/browser/chat/composer-document.js.map +1 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartExplorerControls.js.map +1 -1
- package/dist/browser/content/ChartFilterControls.js +1 -1
- package/dist/browser/content/ChartFilterControls.js.map +1 -1
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/CodeDisplay.js.map +1 -1
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/Docs.js.map +1 -1
- package/dist/browser/content/FileBrowser.js.map +1 -1
- package/dist/browser/content/FileGrid.js.map +1 -1
- package/dist/browser/content/FileTree.js.map +1 -1
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/LogEntriesTable.js.map +1 -1
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/content/Pagination.js.map +1 -1
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/RangePicker.js.map +1 -1
- package/dist/browser/content/StructuredDataPreview.js.map +1 -1
- package/dist/browser/content/calendar-event-layout.js.map +1 -1
- package/dist/browser/content/calendar-pointer.js.map +1 -1
- package/dist/browser/content/chart-cursor.js.map +1 -1
- package/dist/browser/content/chart-explorer.js.map +1 -1
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/chart-line-gaps.js.map +1 -1
- package/dist/browser/content/chart-map-viewport.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js.map +1 -1
- package/dist/browser/content/chart-state-timeline.js.map +1 -1
- package/dist/browser/content/chart-svg.js.map +1 -1
- package/dist/browser/content/code-highlight.js.map +1 -1
- package/dist/browser/content/collection-selection.js.map +1 -1
- package/dist/browser/content/delimited-preferences.js.map +1 -1
- package/dist/browser/content/file-tree.js.map +1 -1
- package/dist/browser/content/file-view-preview.js.map +1 -1
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/feedback/InlineGuidance.js.map +1 -1
- package/dist/browser/feedback/Tooltip.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/index.js.map +1 -1
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/feedback/toast.js.map +1 -1
- package/dist/browser/feedback/tooltip-position.js.map +1 -1
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/browser/inputs/Checkbox.js.map +1 -1
- package/dist/browser/inputs/CheckboxCard.js.map +1 -1
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
- package/dist/browser/inputs/NumberInput.js.map +1 -1
- package/dist/browser/inputs/Select.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/SpecialInputs.js.map +1 -1
- package/dist/browser/inputs/Switch.js.map +1 -1
- package/dist/browser/inputs/TagEditor.js.map +1 -1
- package/dist/browser/inputs/TagsInput.js.map +1 -1
- package/dist/browser/inputs/TemplateEditor.js.map +1 -1
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/inputs/completion/behaviors.js.map +1 -1
- package/dist/browser/inputs/completion/engine.js.map +1 -1
- package/dist/browser/inputs/completion/index.js.map +1 -1
- package/dist/browser/inputs/completion/overlay.js.map +1 -1
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/inputs/editor-dom.js.map +1 -1
- package/dist/browser/inputs/field-contract.js.map +1 -1
- package/dist/browser/inputs/icon-options.js.map +1 -1
- package/dist/browser/inputs/image-crop.js.map +1 -1
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/browser/inputs/markdown/actions.js.map +1 -1
- package/dist/browser/inputs/markdown/active-formats.js.map +1 -1
- package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
- package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
- package/dist/browser/internal/color.js.map +1 -1
- package/dist/browser/internal/field.js.map +1 -1
- package/dist/browser/internal/portal.js.map +1 -1
- package/dist/browser/intl/Format.js.map +1 -1
- package/dist/browser/intl/index.js.map +1 -1
- package/dist/browser/intl/locale.js.map +1 -1
- package/dist/browser/intl/messages.js +2 -0
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppOverview.js +29 -20
- package/dist/browser/layout/AppOverview.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +60 -54
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js.map +1 -1
- package/dist/browser/layout/DataPanel.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/FloatingWindow.js.map +1 -1
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/PanelHeader.js +1 -1
- package/dist/browser/layout/PanelHeader.js.map +1 -1
- package/dist/browser/layout/Panes.js.map +1 -1
- package/dist/browser/layout/PullToRefresh.js +217 -0
- package/dist/browser/layout/PullToRefresh.js.map +1 -0
- package/dist/browser/layout/ScrollArea.js.map +1 -1
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SettingsCollection.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
- 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/floating-window-geometry.js.map +1 -1
- package/dist/browser/layout/index.js +1 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/layout/panes-layout.js.map +1 -1
- package/dist/browser/layout/scroll-fade.js.map +1 -1
- package/dist/browser/layout/stable-id.js.map +1 -1
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/DescriptionList.js.map +1 -1
- package/dist/browser/surfaces/LinkCard.js +13 -2
- package/dist/browser/surfaces/LinkCard.js.map +1 -1
- package/dist/browser/surfaces/NotFoundState.js.map +1 -1
- package/dist/browser/surfaces/NoticeCard.js.map +1 -1
- package/dist/browser/surfaces/Paper.js.map +1 -1
- package/dist/browser/surfaces/Placeholder.js.map +1 -1
- package/dist/browser/surfaces/ProgressBar.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/StatGrid.js.map +1 -1
- package/dist/browser/surfaces/StatusBadge.js.map +1 -1
- package/dist/browser/surfaces/Tag.js.map +1 -1
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/widgets/Widget.js.map +1 -1
- package/dist/browser/widgets/WidgetHero.js.map +1 -1
- package/dist/browser/widgets/WidgetList.js.map +1 -1
- package/dist/browser/widgets/WidgetPills.js.map +1 -1
- package/dist/browser/widgets/WidgetStat.js.map +1 -1
- package/dist/browser/widgets/WidgetStatus.js.map +1 -1
- package/dist/ssr/actions/Button.js +5 -4
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/CopyButton.js +2 -1
- package/dist/ssr/actions/CopyButton.js.map +1 -1
- package/dist/ssr/actions/Disclosure.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +7 -6
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +5 -4
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/RemoveButton.js +1 -0
- package/dist/ssr/actions/RemoveButton.js.map +1 -1
- package/dist/ssr/actions/SegmentedControl.js.map +1 -1
- package/dist/ssr/actions/SplitButton.js +1 -0
- package/dist/ssr/actions/SplitButton.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/Toolbar.js.map +1 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +6 -5
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +6 -5
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatRoot.js.map +1 -1
- package/dist/ssr/chat/ChatTasks.js +1 -1
- package/dist/ssr/chat/ChatTasks.js.map +1 -1
- package/dist/ssr/chat/ChatTimeline.js +5 -4
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/chat/chat-behavior.js.map +1 -1
- package/dist/ssr/chat/composer-document.js.map +1 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Calendar.js +2 -1
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartExplorerControls.js +5 -4
- package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
- package/dist/ssr/content/ChartFilterControls.js +3 -2
- package/dist/ssr/content/ChartFilterControls.js.map +1 -1
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/CodeDisplay.js.map +1 -1
- package/dist/ssr/content/DataTable.js +1 -0
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/Docs.js +1 -0
- package/dist/ssr/content/Docs.js.map +1 -1
- package/dist/ssr/content/FileBrowser.js +2 -1
- package/dist/ssr/content/FileBrowser.js.map +1 -1
- package/dist/ssr/content/FileGrid.js.map +1 -1
- package/dist/ssr/content/FileTree.js +2 -1
- package/dist/ssr/content/FileTree.js.map +1 -1
- package/dist/ssr/content/FileView.js +5 -4
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +2 -1
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/LogEntriesTable.js.map +1 -1
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/content/Pagination.js +2 -1
- package/dist/ssr/content/Pagination.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/RangePicker.js.map +1 -1
- package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
- package/dist/ssr/content/calendar-event-layout.js.map +1 -1
- package/dist/ssr/content/calendar-pointer.js.map +1 -1
- package/dist/ssr/content/chart-cursor.js.map +1 -1
- package/dist/ssr/content/chart-explorer.js.map +1 -1
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/chart-line-gaps.js.map +1 -1
- package/dist/ssr/content/chart-map-viewport.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js.map +1 -1
- package/dist/ssr/content/chart-state-timeline.js.map +1 -1
- package/dist/ssr/content/chart-svg.js.map +1 -1
- package/dist/ssr/content/code-highlight.js.map +1 -1
- package/dist/ssr/content/collection-selection.js.map +1 -1
- package/dist/ssr/content/delimited-preferences.js.map +1 -1
- package/dist/ssr/content/file-tree.js.map +1 -1
- package/dist/ssr/content/file-view-preview.js.map +1 -1
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
- package/dist/ssr/feedback/Tooltip.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/index.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +3 -2
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/feedback/toast.js.map +1 -1
- package/dist/ssr/feedback/tooltip-position.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
- package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/ssr/inputs/Checkbox.js +1 -0
- package/dist/ssr/inputs/Checkbox.js.map +1 -1
- package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
- package/dist/ssr/inputs/ChoiceInputs.js +1 -0
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/inputs/Combobox.js +2 -1
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +4 -3
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/FileInputs.js +2 -1
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/MultiSelectInput.js +4 -3
- package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
- package/dist/ssr/inputs/NumberInput.js +2 -1
- package/dist/ssr/inputs/NumberInput.js.map +1 -1
- package/dist/ssr/inputs/Select.js +4 -3
- package/dist/ssr/inputs/Select.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +3 -2
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/SpecialInputs.js +1 -0
- package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
- package/dist/ssr/inputs/Switch.js.map +1 -1
- package/dist/ssr/inputs/TagEditor.js +3 -2
- package/dist/ssr/inputs/TagEditor.js.map +1 -1
- package/dist/ssr/inputs/TagsInput.js.map +1 -1
- package/dist/ssr/inputs/TemplateEditor.js +1 -0
- package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +4 -3
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
- package/dist/ssr/inputs/completion/engine.js.map +1 -1
- package/dist/ssr/inputs/completion/index.js.map +1 -1
- package/dist/ssr/inputs/completion/overlay.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/inputs/editor-dom.js.map +1 -1
- package/dist/ssr/inputs/field-contract.js.map +1 -1
- package/dist/ssr/inputs/icon-options.js.map +1 -1
- package/dist/ssr/inputs/image-crop.js.map +1 -1
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/ssr/inputs/markdown/actions.js.map +1 -1
- package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
- package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
- package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
- package/dist/ssr/internal/color.js.map +1 -1
- package/dist/ssr/internal/field.js.map +1 -1
- package/dist/ssr/internal/portal.js.map +1 -1
- package/dist/ssr/intl/Format.js.map +1 -1
- package/dist/ssr/intl/index.js.map +1 -1
- package/dist/ssr/intl/locale.js.map +1 -1
- package/dist/ssr/intl/messages.js +2 -0
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppOverview.js +16 -6
- package/dist/ssr/layout/AppOverview.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +12 -8
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js.map +1 -1
- package/dist/ssr/layout/DataPanel.js +1 -0
- package/dist/ssr/layout/DataPanel.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +1 -0
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/Discussion.js +3 -2
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/FloatingWindow.js +1 -0
- package/dist/ssr/layout/FloatingWindow.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +3 -2
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PanelDialog.js +1 -0
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/PanelHeader.js +1 -1
- package/dist/ssr/layout/PanelHeader.js.map +1 -1
- package/dist/ssr/layout/Panes.js.map +1 -1
- package/dist/ssr/layout/PullToRefresh.js +177 -0
- package/dist/ssr/layout/PullToRefresh.js.map +1 -0
- package/dist/ssr/layout/ScrollArea.js.map +1 -1
- package/dist/ssr/layout/Settings.js +2 -1
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SettingsCollection.js +1 -0
- package/dist/ssr/layout/SettingsCollection.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
- 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/floating-window-geometry.js.map +1 -1
- package/dist/ssr/layout/index.js +1 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/layout/panes-layout.js.map +1 -1
- package/dist/ssr/layout/scroll-fade.js.map +1 -1
- package/dist/ssr/layout/stable-id.js.map +1 -1
- package/dist/ssr/surfaces/Avatar.js +2 -1
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
- package/dist/ssr/surfaces/LinkCard.js +11 -2
- package/dist/ssr/surfaces/LinkCard.js.map +1 -1
- package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
- package/dist/ssr/surfaces/Paper.js +2 -1
- package/dist/ssr/surfaces/Paper.js.map +1 -1
- package/dist/ssr/surfaces/Placeholder.js +2 -1
- package/dist/ssr/surfaces/Placeholder.js.map +1 -1
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +2 -1
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/StatGrid.js +1 -0
- package/dist/ssr/surfaces/StatGrid.js.map +1 -1
- package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
- package/dist/ssr/surfaces/Tag.js.map +1 -1
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/widgets/Widget.js +1 -0
- package/dist/ssr/widgets/Widget.js.map +1 -1
- package/dist/ssr/widgets/WidgetHero.js.map +1 -1
- package/dist/ssr/widgets/WidgetList.js.map +1 -1
- package/dist/ssr/widgets/WidgetPills.js.map +1 -1
- package/dist/ssr/widgets/WidgetStat.js +1 -0
- package/dist/ssr/widgets/WidgetStat.js.map +1 -1
- package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/SpotlightSearch.d.ts +1 -1
- package/dist/types/feedback/prompts.d.ts +2 -2
- package/dist/types/intl/messages.d.ts +1 -0
- package/dist/types/layout/AppOverview.d.ts +7 -0
- package/dist/types/layout/AppWorkspace.d.ts +14 -2
- package/dist/types/layout/PanelHeader.d.ts +1 -1
- package/dist/types/layout/PullToRefresh.d.ts +21 -0
- package/dist/types/layout/index.d.ts +3 -1
- package/dist/types/surfaces/LinkCard.d.ts +5 -2
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["children","createMemo","createUniqueId","Show","Button","useUiMessages","read","value","SettingsPage","props","_$ssr","_tmpl$4","class","_$escape","_$ssrStyle","style","_$createComponent","when","icon","_tmpl$5","_$ssrAttribute","title","subtitle","_tmpl$","actions","_tmpl$2","scrollPreserveKey","footer","_tmpl$3","SettingsSection","headingId","_tmpl$7","_tmpl$6","SETTINGS_GROUP_ACTION","Symbol","SettingsGroupAction","kind","collectSettingsGroupActions","Array","isArray","flatMap","collectSettingsGroupContent","SettingsGroup","resolved","action","content","_tmpl$8","description","slot","_tmpl$9","Action","sameSettingValue","left","right","JSON","stringify","readSettingsError","response","fallback","data","json","catch","message","fields","errors","SettingsField","messages","id","descriptionId","errorId","describedBy","error","control","_tmpl$1","label","changed","undefined","_tmpl$0","unsaved","_tmpl$10","SettingsActions","changeCount","loading","disabled","Boolean","disableWithoutChanges","saveDisabled","_tmpl$12","variant","onClick","onDiscard","discard","saveVariant","loadingLabel","saving","onSave","_tmpl$11","saveLabel","saveChanges","SettingsSaveBar","_tmpl$13","unsavedChangeLabel","count","SettingsPanelFooter","_tmpl$15","noUnsavedChanges","_tmpl$14","_$mergeProps"],"sources":["layout/Settings.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button, type ButtonVariant } from \"../actions/Button\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { useUiMessages } from \"../intl/messages\";\n\nconst read = <T,>(value: MaybeAccessor<T>): T => (typeof value === \"function\" ? (value as () => T)() : value);\n\nexport type SettingsPageProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n footer?: JSX.Element;\n scrollPreserveKey?: string;\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nexport function SettingsPage(props: SettingsPageProps): JSX.Element {\n return (\n <section class={`k2b-settings-page${props.class ? ` ${props.class}` : \"\"}`} style={props.style}>\n <header class=\"k2b-settings-page__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-page__heading\">\n <h1>{props.title}</h1>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-page__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-page__body\" data-scroll-preserve={props.scrollPreserveKey}>\n {props.children}\n </div>\n <Show when={props.footer}>\n <footer class=\"k2b-settings-page__footer\">{props.footer}</footer>\n </Show>\n </section>\n );\n}\n\nexport type SettingsSectionProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\n/**\n * A full-page settings group. Dialogs keep using PanelDialog.Section; this\n * component owns the quieter, observability-style paper used on admin pages.\n */\nexport function SettingsSection(props: SettingsSectionProps): JSX.Element {\n const headingId = `k2b-settings-section-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-section${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-section__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-section__heading\">\n <h2 id={headingId}>{props.title}</h2>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-section__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-section__body\">{props.children}</div>\n </section>\n );\n}\n\nconst SETTINGS_GROUP_ACTION = Symbol(\"SettingsGroup.Action\");\n\nexport type SettingsGroupProps = {\n title: JSX.Element;\n description?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\nexport type SettingsGroupActionProps = {\n children: JSX.Element;\n};\n\ntype SettingsGroupActionDefinition = {\n readonly kind: typeof SETTINGS_GROUP_ACTION;\n readonly props: SettingsGroupActionProps;\n};\n\ntype SettingsGroupComponent = ((props: SettingsGroupProps) => JSX.Element) & {\n Action: (props: SettingsGroupActionProps) => JSX.Element;\n};\n\nconst SettingsGroupAction = (props: SettingsGroupActionProps): JSX.Element =>\n ({ kind: SETTINGS_GROUP_ACTION, props }) satisfies SettingsGroupActionDefinition as unknown as JSX.Element;\n\nconst collectSettingsGroupActions = (value: unknown): SettingsGroupActionDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupActions);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION\n ? [value as SettingsGroupActionDefinition]\n : [];\n};\n\nconst collectSettingsGroupContent = (value: unknown): JSX.Element[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupContent);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION ? [] : [value as JSX.Element];\n};\n\nexport const SettingsGroup = ((props: SettingsGroupProps): JSX.Element => {\n const resolved = children(() => props.children);\n const action = createMemo(() => collectSettingsGroupActions(resolved())[0]);\n const content = createMemo(() => collectSettingsGroupContent(resolved()));\n const headingId = `k2b-settings-group-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-group${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-group__header\">\n <div class=\"k2b-settings-group__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-group__action\">{slot().props.children}</div>}</Show>\n </header>\n <div class=\"k2b-settings-group__body\">{content()}</div>\n </section>\n );\n}) as SettingsGroupComponent;\n\nSettingsGroup.Action = SettingsGroupAction;\n\nexport const sameSettingValue = (left: unknown, right: unknown): boolean => JSON.stringify(left) === JSON.stringify(right);\n\nexport const readSettingsError = async (\n response: Pick<Response, \"json\">,\n fallback: string,\n): Promise<{ message: string; fields: Record<string, string> }> => {\n const data = (await response.json().catch(() => null)) as {\n message?: string;\n errors?: Record<string, string>;\n } | null;\n return { message: data?.message ?? fallback, fields: data?.errors ?? {} };\n};\n\nexport type SettingsFieldProps = {\n label: string;\n description: string;\n error: MaybeAccessor<string | undefined>;\n changed?: MaybeAccessor<boolean>;\n children: JSX.Element | ((control: SettingsFieldControlProps) => JSX.Element);\n class?: string;\n};\n\nexport type SettingsFieldControlProps = {\n describedBy: () => string;\n};\n\nexport function SettingsField(props: SettingsFieldProps): JSX.Element {\n const messages = useUiMessages();\n const id = createUniqueId();\n const descriptionId = `k2b-settings-field-${id}-description`;\n const errorId = `k2b-settings-field-${id}-error`;\n const describedBy = () => (read(props.error) ? `${descriptionId} ${errorId}` : descriptionId);\n const control = () =>\n typeof props.children === \"function\"\n ? (props.children as (control: SettingsFieldControlProps) => JSX.Element)({ describedBy })\n : props.children;\n return (\n <div class={`k2b-settings-field ${props.class ?? \"\"}`}>\n <div class=\"k2b-settings-field__copy\">\n <div class=\"k2b-settings-field__heading\">\n <strong>{props.label}</strong>\n <Show when={props.changed !== undefined && read(props.changed)}>\n <span>{messages().unsaved}</span>\n </Show>\n </div>\n <p id={descriptionId}>{props.description}</p>\n </div>\n {control()}\n <Show when={read(props.error)}>\n {(error) => (\n <p id={errorId} class=\"k2b-settings-field__error\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" /> {error()}\n </p>\n )}\n </Show>\n </div>\n );\n}\n\nexport type SettingsSaveBarProps = {\n changeCount: MaybeAccessor<number>;\n loading: MaybeAccessor<boolean>;\n saveDisabled?: MaybeAccessor<boolean>;\n onDiscard: () => void;\n onSave: () => void;\n saveLabel?: string;\n saveVariant?: ButtonVariant;\n class?: string;\n};\n\nconst SettingsActions = (\n props: SettingsSaveBarProps & {\n disableWithoutChanges?: boolean;\n },\n): JSX.Element => {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n const loading = () => read(props.loading);\n const disabled = () => loading() || Boolean(props.disableWithoutChanges && changeCount() === 0);\n const saveDisabled = () => disabled() || Boolean(props.saveDisabled !== undefined && read(props.saveDisabled));\n return (\n <div class=\"k2b-settings-actions\">\n <Button variant=\"secondary\" disabled={disabled()} onClick={props.onDiscard}>\n {messages().discard}\n </Button>\n <Button\n variant={props.saveVariant ?? \"primary\"}\n loading={loading()}\n loadingLabel={messages().saving}\n disabled={saveDisabled()}\n onClick={props.onSave}\n >\n <i class=\"ti ti-device-floppy\" aria-hidden=\"true\" />\n {props.saveLabel ?? messages().saveChanges}\n </Button>\n </div>\n );\n};\n\nexport function SettingsSaveBar(props: SettingsSaveBarProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <Show when={changeCount() > 0}>\n <div class={`k2b-settings-save-bar ${props.class ?? \"\"}`}>\n <p role=\"status\" aria-live=\"polite\">\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </p>\n <SettingsActions {...props} />\n </div>\n </Show>\n );\n}\n\nexport type SettingsPanelFooterProps = SettingsSaveBarProps;\n\nexport function SettingsPanelFooter(props: SettingsPanelFooterProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <>\n <p class=\"k2b-settings-panel-footer__status\" role=\"status\" aria-live=\"polite\">\n <Show when={changeCount() > 0} fallback={messages().noUnsavedChanges}>\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </Show>\n </p>\n <SettingsActions {...props} disableWithoutChanges />\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/Settings.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button, type ButtonVariant } from \"../actions/Button\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { useUiMessages } from \"../intl/messages\";\n\nconst read = <T,>(value: MaybeAccessor<T>): T => (typeof value === \"function\" ? (value as () => T)() : value);\n\nexport type SettingsPageProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n footer?: JSX.Element;\n scrollPreserveKey?: string;\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nexport function SettingsPage(props: SettingsPageProps): JSX.Element {\n return (\n <section class={`k2b-settings-page${props.class ? ` ${props.class}` : \"\"}`} style={props.style}>\n <header class=\"k2b-settings-page__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-page__heading\">\n <h1>{props.title}</h1>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-page__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-page__body\" data-scroll-preserve={props.scrollPreserveKey}>\n {props.children}\n </div>\n <Show when={props.footer}>\n <footer class=\"k2b-settings-page__footer\">{props.footer}</footer>\n </Show>\n </section>\n );\n}\n\nexport type SettingsSectionProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\n/**\n * A full-page settings group. Dialogs keep using PanelDialog.Section; this\n * component owns the quieter, observability-style paper used on admin pages.\n */\nexport function SettingsSection(props: SettingsSectionProps): JSX.Element {\n const headingId = `k2b-settings-section-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-section${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-section__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-section__heading\">\n <h2 id={headingId}>{props.title}</h2>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-section__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-section__body\">{props.children}</div>\n </section>\n );\n}\n\nconst SETTINGS_GROUP_ACTION = Symbol(\"SettingsGroup.Action\");\n\nexport type SettingsGroupProps = {\n title: JSX.Element;\n description?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\nexport type SettingsGroupActionProps = {\n children: JSX.Element;\n};\n\ntype SettingsGroupActionDefinition = {\n readonly kind: typeof SETTINGS_GROUP_ACTION;\n readonly props: SettingsGroupActionProps;\n};\n\ntype SettingsGroupComponent = ((props: SettingsGroupProps) => JSX.Element) & {\n Action: (props: SettingsGroupActionProps) => JSX.Element;\n};\n\nconst SettingsGroupAction = (props: SettingsGroupActionProps): JSX.Element =>\n ({ kind: SETTINGS_GROUP_ACTION, props }) satisfies SettingsGroupActionDefinition as unknown as JSX.Element;\n\nconst collectSettingsGroupActions = (value: unknown): SettingsGroupActionDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupActions);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION\n ? [value as SettingsGroupActionDefinition]\n : [];\n};\n\nconst collectSettingsGroupContent = (value: unknown): JSX.Element[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupContent);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION ? [] : [value as JSX.Element];\n};\n\nexport const SettingsGroup = ((props: SettingsGroupProps): JSX.Element => {\n const resolved = children(() => props.children);\n const action = createMemo(() => collectSettingsGroupActions(resolved())[0]);\n const content = createMemo(() => collectSettingsGroupContent(resolved()));\n const headingId = `k2b-settings-group-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-group${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-group__header\">\n <div class=\"k2b-settings-group__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-group__action\">{slot().props.children}</div>}</Show>\n </header>\n <div class=\"k2b-settings-group__body\">{content()}</div>\n </section>\n );\n}) as SettingsGroupComponent;\n\nSettingsGroup.Action = SettingsGroupAction;\n\nexport const sameSettingValue = (left: unknown, right: unknown): boolean => JSON.stringify(left) === JSON.stringify(right);\n\nexport const readSettingsError = async (\n response: Pick<Response, \"json\">,\n fallback: string,\n): Promise<{ message: string; fields: Record<string, string> }> => {\n const data = (await response.json().catch(() => null)) as {\n message?: string;\n errors?: Record<string, string>;\n } | null;\n return { message: data?.message ?? fallback, fields: data?.errors ?? {} };\n};\n\nexport type SettingsFieldProps = {\n label: string;\n description: string;\n error: MaybeAccessor<string | undefined>;\n changed?: MaybeAccessor<boolean>;\n children: JSX.Element | ((control: SettingsFieldControlProps) => JSX.Element);\n class?: string;\n};\n\nexport type SettingsFieldControlProps = {\n describedBy: () => string;\n};\n\nexport function SettingsField(props: SettingsFieldProps): JSX.Element {\n const messages = useUiMessages();\n const id = createUniqueId();\n const descriptionId = `k2b-settings-field-${id}-description`;\n const errorId = `k2b-settings-field-${id}-error`;\n const describedBy = () => (read(props.error) ? `${descriptionId} ${errorId}` : descriptionId);\n const control = () =>\n typeof props.children === \"function\"\n ? (props.children as (control: SettingsFieldControlProps) => JSX.Element)({ describedBy })\n : props.children;\n return (\n <div class={`k2b-settings-field ${props.class ?? \"\"}`}>\n <div class=\"k2b-settings-field__copy\">\n <div class=\"k2b-settings-field__heading\">\n <strong>{props.label}</strong>\n <Show when={props.changed !== undefined && read(props.changed)}>\n <span>{messages().unsaved}</span>\n </Show>\n </div>\n <p id={descriptionId}>{props.description}</p>\n </div>\n {control()}\n <Show when={read(props.error)}>\n {(error) => (\n <p id={errorId} class=\"k2b-settings-field__error\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" /> {error()}\n </p>\n )}\n </Show>\n </div>\n );\n}\n\nexport type SettingsSaveBarProps = {\n changeCount: MaybeAccessor<number>;\n loading: MaybeAccessor<boolean>;\n saveDisabled?: MaybeAccessor<boolean>;\n onDiscard: () => void;\n onSave: () => void;\n saveLabel?: string;\n saveVariant?: ButtonVariant;\n class?: string;\n};\n\nconst SettingsActions = (\n props: SettingsSaveBarProps & {\n disableWithoutChanges?: boolean;\n },\n): JSX.Element => {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n const loading = () => read(props.loading);\n const disabled = () => loading() || Boolean(props.disableWithoutChanges && changeCount() === 0);\n const saveDisabled = () => disabled() || Boolean(props.saveDisabled !== undefined && read(props.saveDisabled));\n return (\n <div class=\"k2b-settings-actions\">\n <Button variant=\"secondary\" disabled={disabled()} onClick={props.onDiscard}>\n {messages().discard}\n </Button>\n <Button\n variant={props.saveVariant ?? \"primary\"}\n loading={loading()}\n loadingLabel={messages().saving}\n disabled={saveDisabled()}\n onClick={props.onSave}\n >\n <i class=\"ti ti-device-floppy\" aria-hidden=\"true\" />\n {props.saveLabel ?? messages().saveChanges}\n </Button>\n </div>\n );\n};\n\nexport function SettingsSaveBar(props: SettingsSaveBarProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <Show when={changeCount() > 0}>\n <div class={`k2b-settings-save-bar ${props.class ?? \"\"}`}>\n <p role=\"status\" aria-live=\"polite\">\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </p>\n <SettingsActions {...props} />\n </div>\n </Show>\n );\n}\n\nexport type SettingsPanelFooterProps = SettingsSaveBarProps;\n\nexport function SettingsPanelFooter(props: SettingsPanelFooterProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <>\n <p class=\"k2b-settings-panel-footer__status\" role=\"status\" aria-live=\"polite\">\n <Show when={changeCount() > 0} fallback={messages().noUnsavedChanges}>\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </Show>\n </p>\n <SettingsActions {...props} disableWithoutChanges />\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
|
2
2
|
import { escape as _$escape } from "solid-js/web";
|
|
3
3
|
import { createComponent as _$createComponent } from "solid-js/web";
|
|
4
4
|
import { ssr as _$ssr } from "solid-js/web";
|
|
5
|
+
import { memo as _$memo } from "solid-js/web";
|
|
5
6
|
var _tmpl$ = "<i class=\"ti ti-arrow-up\" aria-hidden=\"true\"></i>",
|
|
6
7
|
_tmpl$2 = "<i class=\"ti ti-arrow-down\" aria-hidden=\"true\"></i>",
|
|
7
8
|
_tmpl$3 = ["<p>", "</p>"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["children","createMemo","createUniqueId","For","Show","IconButton","useUiMessages","Placeholder","SETTINGS_COLLECTION_ACTION","Symbol","SETTINGS_COLLECTION_ITEM","SETTINGS_COLLECTION_ITEM_STATUS","SETTINGS_COLLECTION_ITEM_ACTIONS","definition","kind","props","isDefinition","value","Boolean","collect","match","Array","isArray","flatMap","entry","SettingsCollectionAction","SettingsCollectionItemStatus","SettingsCollectionItemActions","SettingsCollectionItemReorder","messages","_$createComponent","label","moveNamedUp","size","title","moveUp","disabled","index","onClick","onMove","_$ssr","_tmpl$","moveNamedDown","moveDown","count","_tmpl$2","SettingsCollectionItem","Status","Actions","Reorder","SettingsCollection","resolved","items","action","headingId","_tmpl$5","class","_$escape","_$ssrAttribute","when","description","_tmpl$3","slot","_tmpl$6","length","fallback","variant","align","empty","nothingHere","_tmpl$4","each","item","resolvedItem","status","actions","_tmpl$8","icon","_tmpl$7","_tmpl$9","_tmpl$0","Action","Item"],"sources":["layout/SettingsCollection.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport { IconButton } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\n\nconst SETTINGS_COLLECTION_ACTION = Symbol(\"SettingsCollection.Action\");\nconst SETTINGS_COLLECTION_ITEM = Symbol(\"SettingsCollection.Item\");\nconst SETTINGS_COLLECTION_ITEM_STATUS = Symbol(\"SettingsCollection.Item.Status\");\nconst SETTINGS_COLLECTION_ITEM_ACTIONS = Symbol(\"SettingsCollection.Item.Actions\");\n\ntype SlotDefinition<T extends symbol, P> = {\n readonly kind: T;\n readonly props: P;\n};\n\nexport type SettingsCollectionProps = {\n title: JSX.Element;\n description?: JSX.Element;\n empty?: JSX.Element;\n children?: JSX.Element;\n class?: string;\n};\n\nexport type SettingsCollectionActionProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemProps = {\n title: JSX.Element;\n description?: JSX.Element;\n icon?: JSX.Element;\n children?: JSX.Element;\n};\n\nexport type SettingsCollectionItemStatusProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemActionsProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemReorderProps = {\n label: string;\n index: number;\n count: number;\n disabled?: boolean;\n onMove: (direction: -1 | 1) => void;\n};\n\ntype SettingsCollectionActionDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ACTION, SettingsCollectionActionProps>;\ntype SettingsCollectionItemDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM, SettingsCollectionItemProps>;\ntype SettingsCollectionItemStatusDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM_STATUS, SettingsCollectionItemStatusProps>;\ntype SettingsCollectionItemActionsDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM_ACTIONS, SettingsCollectionItemActionsProps>;\n\ntype SettingsCollectionItemComponent = ((props: SettingsCollectionItemProps) => JSX.Element) & {\n Status: (props: SettingsCollectionItemStatusProps) => JSX.Element;\n Actions: (props: SettingsCollectionItemActionsProps) => JSX.Element;\n Reorder: (props: SettingsCollectionItemReorderProps) => JSX.Element;\n};\n\ntype SettingsCollectionComponent = ((props: SettingsCollectionProps) => JSX.Element) & {\n Action: (props: SettingsCollectionActionProps) => JSX.Element;\n Item: SettingsCollectionItemComponent;\n};\n\nconst definition = <T extends symbol, P>(kind: T, props: P): JSX.Element =>\n ({ kind, props }) satisfies SlotDefinition<T, P> as unknown as JSX.Element;\n\nconst isDefinition = <T extends symbol, P>(value: unknown, kind: T): value is SlotDefinition<T, P> =>\n Boolean(value && typeof value === \"object\" && (value as { kind?: unknown }).kind === kind);\n\nconst collect = <T,>(value: unknown, match: (entry: unknown) => entry is T): T[] => {\n if (Array.isArray(value)) return value.flatMap((entry) => collect(entry, match));\n return match(value) ? [value] : [];\n};\n\nconst SettingsCollectionAction = (props: SettingsCollectionActionProps): JSX.Element => definition(SETTINGS_COLLECTION_ACTION, props);\n\nconst SettingsCollectionItemStatus = (props: SettingsCollectionItemStatusProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM_STATUS, props);\n\nconst SettingsCollectionItemActions = (props: SettingsCollectionItemActionsProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM_ACTIONS, props);\n\nconst SettingsCollectionItemReorder = (props: SettingsCollectionItemReorderProps): JSX.Element => {\n const messages = useUiMessages();\n return (\n <>\n <IconButton\n label={messages().moveNamedUp({ label: props.label })}\n size=\"sm\"\n title={messages().moveUp}\n disabled={props.disabled || props.index <= 0}\n onClick={() => props.onMove(-1)}\n >\n <i class=\"ti ti-arrow-up\" aria-hidden=\"true\" />\n </IconButton>\n <IconButton\n label={messages().moveNamedDown({ label: props.label })}\n size=\"sm\"\n title={messages().moveDown}\n disabled={props.disabled || props.index >= props.count - 1}\n onClick={() => props.onMove(1)}\n >\n <i class=\"ti ti-arrow-down\" aria-hidden=\"true\" />\n </IconButton>\n </>\n );\n};\n\nconst SettingsCollectionItem = ((props: SettingsCollectionItemProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM, props)) as SettingsCollectionItemComponent;\n\nSettingsCollectionItem.Status = SettingsCollectionItemStatus;\nSettingsCollectionItem.Actions = SettingsCollectionItemActions;\nSettingsCollectionItem.Reorder = SettingsCollectionItemReorder;\n\nconst SettingsCollection = ((props: SettingsCollectionProps): JSX.Element => {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const items = createMemo(() =>\n collect<SettingsCollectionItemDefinition>(resolved(), (entry): entry is SettingsCollectionItemDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ITEM),\n ),\n );\n const action = createMemo(\n () =>\n collect<SettingsCollectionActionDefinition>(resolved(), (entry): entry is SettingsCollectionActionDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ACTION),\n )[0],\n );\n const headingId = `k2b-settings-collection-${createUniqueId()}`;\n\n return (\n <section class={`k2b-settings-collection${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-collection__header\">\n <div class=\"k2b-settings-collection__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-collection__action\">{slot().props.children}</div>}</Show>\n </header>\n <Show\n when={items().length > 0}\n fallback={<Placeholder variant=\"compact\" align=\"left\" description={props.empty ?? messages().nothingHere} />}\n >\n <ul class=\"k2b-settings-collection__list\">\n <For each={items()}>\n {(item) => {\n const resolvedItem = children(() => item.props.children);\n const status = () =>\n collect<SettingsCollectionItemStatusDefinition>(resolvedItem(), (entry): entry is SettingsCollectionItemStatusDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ITEM_STATUS),\n )[0];\n const actions = () =>\n collect<SettingsCollectionItemActionsDefinition>(\n resolvedItem(),\n (entry): entry is SettingsCollectionItemActionsDefinition => isDefinition(entry, SETTINGS_COLLECTION_ITEM_ACTIONS),\n )[0];\n return (\n <li class=\"k2b-settings-collection__item\">\n <Show when={item.props.icon}>\n <span class=\"k2b-settings-collection__item-icon\">{item.props.icon}</span>\n </Show>\n <div class=\"k2b-settings-collection__item-copy\">\n <h4>{item.props.title}</h4>\n <Show when={item.props.description}>\n <p>{item.props.description}</p>\n </Show>\n </div>\n <Show when={status()}>{(slot) => <div class=\"k2b-settings-collection__item-status\">{slot().props.children}</div>}</Show>\n <Show when={actions()}>{(slot) => <div class=\"k2b-settings-collection__item-actions\">{slot().props.children}</div>}</Show>\n </li>\n );\n }}\n </For>\n </ul>\n </Show>\n </section>\n );\n}) as SettingsCollectionComponent;\n\nSettingsCollection.Action = SettingsCollectionAction;\nSettingsCollection.Item = SettingsCollectionItem;\n\nexport default SettingsCollection;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/SettingsCollection.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport { IconButton } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\n\nconst SETTINGS_COLLECTION_ACTION = Symbol(\"SettingsCollection.Action\");\nconst SETTINGS_COLLECTION_ITEM = Symbol(\"SettingsCollection.Item\");\nconst SETTINGS_COLLECTION_ITEM_STATUS = Symbol(\"SettingsCollection.Item.Status\");\nconst SETTINGS_COLLECTION_ITEM_ACTIONS = Symbol(\"SettingsCollection.Item.Actions\");\n\ntype SlotDefinition<T extends symbol, P> = {\n readonly kind: T;\n readonly props: P;\n};\n\nexport type SettingsCollectionProps = {\n title: JSX.Element;\n description?: JSX.Element;\n empty?: JSX.Element;\n children?: JSX.Element;\n class?: string;\n};\n\nexport type SettingsCollectionActionProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemProps = {\n title: JSX.Element;\n description?: JSX.Element;\n icon?: JSX.Element;\n children?: JSX.Element;\n};\n\nexport type SettingsCollectionItemStatusProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemActionsProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemReorderProps = {\n label: string;\n index: number;\n count: number;\n disabled?: boolean;\n onMove: (direction: -1 | 1) => void;\n};\n\ntype SettingsCollectionActionDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ACTION, SettingsCollectionActionProps>;\ntype SettingsCollectionItemDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM, SettingsCollectionItemProps>;\ntype SettingsCollectionItemStatusDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM_STATUS, SettingsCollectionItemStatusProps>;\ntype SettingsCollectionItemActionsDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM_ACTIONS, SettingsCollectionItemActionsProps>;\n\ntype SettingsCollectionItemComponent = ((props: SettingsCollectionItemProps) => JSX.Element) & {\n Status: (props: SettingsCollectionItemStatusProps) => JSX.Element;\n Actions: (props: SettingsCollectionItemActionsProps) => JSX.Element;\n Reorder: (props: SettingsCollectionItemReorderProps) => JSX.Element;\n};\n\ntype SettingsCollectionComponent = ((props: SettingsCollectionProps) => JSX.Element) & {\n Action: (props: SettingsCollectionActionProps) => JSX.Element;\n Item: SettingsCollectionItemComponent;\n};\n\nconst definition = <T extends symbol, P>(kind: T, props: P): JSX.Element =>\n ({ kind, props }) satisfies SlotDefinition<T, P> as unknown as JSX.Element;\n\nconst isDefinition = <T extends symbol, P>(value: unknown, kind: T): value is SlotDefinition<T, P> =>\n Boolean(value && typeof value === \"object\" && (value as { kind?: unknown }).kind === kind);\n\nconst collect = <T,>(value: unknown, match: (entry: unknown) => entry is T): T[] => {\n if (Array.isArray(value)) return value.flatMap((entry) => collect(entry, match));\n return match(value) ? [value] : [];\n};\n\nconst SettingsCollectionAction = (props: SettingsCollectionActionProps): JSX.Element => definition(SETTINGS_COLLECTION_ACTION, props);\n\nconst SettingsCollectionItemStatus = (props: SettingsCollectionItemStatusProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM_STATUS, props);\n\nconst SettingsCollectionItemActions = (props: SettingsCollectionItemActionsProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM_ACTIONS, props);\n\nconst SettingsCollectionItemReorder = (props: SettingsCollectionItemReorderProps): JSX.Element => {\n const messages = useUiMessages();\n return (\n <>\n <IconButton\n label={messages().moveNamedUp({ label: props.label })}\n size=\"sm\"\n title={messages().moveUp}\n disabled={props.disabled || props.index <= 0}\n onClick={() => props.onMove(-1)}\n >\n <i class=\"ti ti-arrow-up\" aria-hidden=\"true\" />\n </IconButton>\n <IconButton\n label={messages().moveNamedDown({ label: props.label })}\n size=\"sm\"\n title={messages().moveDown}\n disabled={props.disabled || props.index >= props.count - 1}\n onClick={() => props.onMove(1)}\n >\n <i class=\"ti ti-arrow-down\" aria-hidden=\"true\" />\n </IconButton>\n </>\n );\n};\n\nconst SettingsCollectionItem = ((props: SettingsCollectionItemProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM, props)) as SettingsCollectionItemComponent;\n\nSettingsCollectionItem.Status = SettingsCollectionItemStatus;\nSettingsCollectionItem.Actions = SettingsCollectionItemActions;\nSettingsCollectionItem.Reorder = SettingsCollectionItemReorder;\n\nconst SettingsCollection = ((props: SettingsCollectionProps): JSX.Element => {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const items = createMemo(() =>\n collect<SettingsCollectionItemDefinition>(resolved(), (entry): entry is SettingsCollectionItemDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ITEM),\n ),\n );\n const action = createMemo(\n () =>\n collect<SettingsCollectionActionDefinition>(resolved(), (entry): entry is SettingsCollectionActionDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ACTION),\n )[0],\n );\n const headingId = `k2b-settings-collection-${createUniqueId()}`;\n\n return (\n <section class={`k2b-settings-collection${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-collection__header\">\n <div class=\"k2b-settings-collection__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-collection__action\">{slot().props.children}</div>}</Show>\n </header>\n <Show\n when={items().length > 0}\n fallback={<Placeholder variant=\"compact\" align=\"left\" description={props.empty ?? messages().nothingHere} />}\n >\n <ul class=\"k2b-settings-collection__list\">\n <For each={items()}>\n {(item) => {\n const resolvedItem = children(() => item.props.children);\n const status = () =>\n collect<SettingsCollectionItemStatusDefinition>(resolvedItem(), (entry): entry is SettingsCollectionItemStatusDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ITEM_STATUS),\n )[0];\n const actions = () =>\n collect<SettingsCollectionItemActionsDefinition>(\n resolvedItem(),\n (entry): entry is SettingsCollectionItemActionsDefinition => isDefinition(entry, SETTINGS_COLLECTION_ITEM_ACTIONS),\n )[0];\n return (\n <li class=\"k2b-settings-collection__item\">\n <Show when={item.props.icon}>\n <span class=\"k2b-settings-collection__item-icon\">{item.props.icon}</span>\n </Show>\n <div class=\"k2b-settings-collection__item-copy\">\n <h4>{item.props.title}</h4>\n <Show when={item.props.description}>\n <p>{item.props.description}</p>\n </Show>\n </div>\n <Show when={status()}>{(slot) => <div class=\"k2b-settings-collection__item-status\">{slot().props.children}</div>}</Show>\n <Show when={actions()}>{(slot) => <div class=\"k2b-settings-collection__item-actions\">{slot().props.children}</div>}</Show>\n </li>\n );\n }}\n </For>\n </ul>\n </Show>\n </section>\n );\n}) as SettingsCollectionComponent;\n\nSettingsCollection.Action = SettingsCollectionAction;\nSettingsCollection.Item = SettingsCollectionItem;\n\nexport default SettingsCollection;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["children","createMemo","createSignal","createUniqueId","For","Show","useUiMessages","assertUniqueStableUiIds","SETTINGS_MODAL_TAB","Symbol","SETTINGS_MODAL_GROUP","SETTINGS_MODAL_FOOTER","isTabDefinition","value","kind","isGroupDefinition","isFooterDefinition","collectTabs","Array","isArray","flatMap","props","collectRailEntries","splitPanelChildren","reduce","result","entry","next","content","push","footer","SettingsModalTab","SettingsModalGroup","SettingsModalFooter","SettingsModal","messages","resolved","railEntries","tabs","collected","map","tab","id","instanceId","tabRefs","Map","firstTabId","localActiveTab","setLocalActiveTab","defaultTab","requestedActiveTabId","activeTab","resolvedActiveTabId","some","find","resolvedPanelChildren","panelChildren","selectTab","undefined","onTabChange","moveTabFocus","event","currentId","currentIndex","findIndex","length","nextIndex","key","preventDefault","nextTab","get","focus","tabId","panelId","TabButton","active","_$ssr","_tmpl$","_$ssrAttribute","_$escape","tone","_$createComponent","when","icon","_tmpl$2","title","_tmpl$4","class","onClose","_tmpl$3","closeLabel","close","sectionsLabel","each","_tmpl$5","_tmpl$6","description","_tmpl$7","_tmpl$8","Tab","Group","Footer"],"sources":["layout/SettingsModal.tsx"],"sourcesContent":["import { children, createMemo, createSignal, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { assertUniqueStableUiIds } from \"./stable-id\";\n\nconst SETTINGS_MODAL_TAB = Symbol(\"SettingsModal.Tab\");\nconst SETTINGS_MODAL_GROUP = Symbol(\"SettingsModal.Group\");\nconst SETTINGS_MODAL_FOOTER = Symbol(\"SettingsModal.Footer\");\n\nexport type SettingsModalTabTone = \"default\" | \"danger\";\n\nexport type SettingsModalTabProps = {\n id: string;\n title: string;\n description?: string;\n icon?: string;\n tone?: SettingsModalTabTone;\n children: JSX.Element;\n};\n\nexport type SettingsModalGroupProps = {\n title: string;\n children: JSX.Element;\n};\n\nexport type SettingsModalFooterProps = {\n children: JSX.Element;\n};\n\ntype SettingsModalTabDefinition = {\n readonly kind: typeof SETTINGS_MODAL_TAB;\n readonly props: SettingsModalTabProps;\n};\n\ntype SettingsModalGroupDefinition = {\n readonly kind: typeof SETTINGS_MODAL_GROUP;\n readonly props: SettingsModalGroupProps;\n};\n\ntype SettingsModalFooterDefinition = {\n readonly kind: typeof SETTINGS_MODAL_FOOTER;\n readonly props: SettingsModalFooterProps;\n};\n\nexport type SettingsModalProps = {\n /** Accessible name for the settings surface. */\n title: string;\n /** @deprecated Retained for source compatibility; tab descriptions carry the visible context. */\n subtitle?: string;\n /** @deprecated Retained for source compatibility; tab icons identify the rail entries. */\n icon?: string;\n defaultTab?: string;\n activeTab?: string;\n onTabChange?: (id: string) => void;\n onClose?: () => void;\n closeLabel?: string;\n class?: string;\n children: JSX.Element;\n};\n\ntype SettingsModalComponent = ((props: SettingsModalProps) => JSX.Element) & {\n Tab: (props: SettingsModalTabProps) => JSX.Element;\n Group: (props: SettingsModalGroupProps) => JSX.Element;\n Footer: (props: SettingsModalFooterProps) => JSX.Element;\n};\n\nconst isTabDefinition = (value: unknown): value is SettingsModalTabDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_TAB;\n\nconst isGroupDefinition = (value: unknown): value is SettingsModalGroupDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_GROUP;\n\nconst isFooterDefinition = (value: unknown): value is SettingsModalFooterDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_FOOTER;\n\nconst collectTabs = (value: unknown): SettingsModalTabDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectTabs);\n if (isGroupDefinition(value)) return collectTabs(value.props.children);\n return isTabDefinition(value) ? [value] : [];\n};\n\nconst collectRailEntries = (value: unknown): (SettingsModalGroupDefinition | SettingsModalTabDefinition)[] => {\n if (Array.isArray(value)) return value.flatMap(collectRailEntries);\n if (isGroupDefinition(value) || isTabDefinition(value)) return [value];\n return [];\n};\n\nconst splitPanelChildren = (value: unknown): { content: JSX.Element[]; footer?: SettingsModalFooterDefinition } => {\n if (Array.isArray(value)) {\n return value.reduce<{ content: JSX.Element[]; footer?: SettingsModalFooterDefinition }>(\n (result, entry) => {\n const next = splitPanelChildren(entry);\n result.content.push(...next.content);\n if (next.footer) result.footer = next.footer;\n return result;\n },\n { content: [] },\n );\n }\n return isFooterDefinition(value) ? { content: [], footer: value } : { content: [value as JSX.Element] };\n};\n\nfunction SettingsModalTab(props: SettingsModalTabProps): JSX.Element {\n return { kind: SETTINGS_MODAL_TAB, props } satisfies SettingsModalTabDefinition as unknown as JSX.Element;\n}\n\nfunction SettingsModalGroup(props: SettingsModalGroupProps): JSX.Element {\n return { kind: SETTINGS_MODAL_GROUP, props } satisfies SettingsModalGroupDefinition as unknown as JSX.Element;\n}\n\nfunction SettingsModalFooter(props: SettingsModalFooterProps): JSX.Element {\n return { kind: SETTINGS_MODAL_FOOTER, props } satisfies SettingsModalFooterDefinition as unknown as JSX.Element;\n}\n\nconst SettingsModal = ((props: SettingsModalProps): JSX.Element => {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const railEntries = createMemo(() => collectRailEntries(resolved()));\n const tabs = createMemo(() => {\n const collected = collectTabs(resolved());\n assertUniqueStableUiIds(\n collected.map((tab) => tab.props.id),\n \"SettingsModal.Tab id\",\n );\n return collected;\n });\n const instanceId = `k2b-settings-${createUniqueId()}`;\n const tabRefs = new Map<string, HTMLButtonElement>();\n const firstTabId = () => tabs()[0]?.props.id ?? \"\";\n const [localActiveTab, setLocalActiveTab] = createSignal(props.defaultTab ?? firstTabId());\n const requestedActiveTabId = () => props.activeTab ?? (localActiveTab() || firstTabId());\n const resolvedActiveTabId = () => (tabs().some((tab) => tab.props.id === requestedActiveTabId()) ? requestedActiveTabId() : firstTabId());\n const activeTab = () => tabs().find((tab) => tab.props.id === resolvedActiveTabId()) ?? null;\n const resolvedPanelChildren = children(() => activeTab()?.props.children);\n const panelChildren = createMemo(() => splitPanelChildren(resolvedPanelChildren()));\n\n const selectTab = (id: string) => {\n if (props.activeTab === undefined) setLocalActiveTab(id);\n props.onTabChange?.(id);\n };\n\n const moveTabFocus = (event: KeyboardEvent, currentId: string) => {\n const currentIndex = tabs().findIndex((tab) => tab.props.id === currentId);\n if (currentIndex < 0 || tabs().length === 0) return;\n let nextIndex: number | null = null;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") nextIndex = (currentIndex + 1) % tabs().length;\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") nextIndex = (currentIndex - 1 + tabs().length) % tabs().length;\n if (event.key === \"Home\") nextIndex = 0;\n if (event.key === \"End\") nextIndex = tabs().length - 1;\n if (nextIndex === null) return;\n event.preventDefault();\n const nextTab = tabs()[nextIndex];\n if (!nextTab) return;\n selectTab(nextTab.props.id);\n tabRefs.get(nextTab.props.id)?.focus();\n };\n\n const tabId = (id: string) => `${instanceId}-tab-${id}`;\n const panelId = (id: string) => `${instanceId}-panel-${id}`;\n\n const TabButton = (tab: SettingsModalTabDefinition): JSX.Element => {\n const active = () => resolvedActiveTabId() === tab.props.id;\n return (\n <button\n ref={(element) => tabRefs.set(tab.props.id, element)}\n id={tabId(tab.props.id)}\n type=\"button\"\n role=\"tab\"\n aria-selected={active()}\n aria-controls={active() ? panelId(tab.props.id) : undefined}\n tabIndex={active() ? 0 : -1}\n data-state={active() ? \"active\" : \"idle\"}\n data-active={active() ? \"true\" : undefined}\n data-tone={tab.props.tone ?? \"default\"}\n onClick={() => selectTab(tab.props.id)}\n onKeyDown={(event) => moveTabFocus(event, tab.props.id)}\n >\n <Show when={tab.props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{tab.props.title}</span>\n </button>\n );\n };\n\n return (\n <div class={`k2b-settings ${props.class ?? \"\"}`} role=\"region\" aria-label={props.title}>\n <Show when={props.onClose}>\n <button\n type=\"button\"\n class=\"k2b-settings__close k2b-icon-button\"\n aria-label={props.closeLabel ?? messages().close}\n onClick={props.onClose}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <aside class=\"k2b-settings__rail\">\n <nav class=\"k2b-settings__tabs\" aria-label={messages().sectionsLabel({ title: props.title })} role=\"tablist\">\n <For each={railEntries()}>\n {(entry) =>\n isGroupDefinition(entry) ? (\n <div class=\"k2b-settings__tab-group\" role=\"presentation\">\n <span class=\"k2b-settings__tab-group-label\" aria-hidden=\"true\">\n {entry.props.title}\n </span>\n <For each={collectTabs(entry.props.children)}>{(tab) => TabButton(tab)}</For>\n </div>\n ) : (\n TabButton(entry)\n )\n }\n </For>\n </nav>\n </aside>\n <div class=\"k2b-settings__content\">\n <Show when={activeTab()}>\n {(tab) => (\n <section\n id={panelId(tab().props.id)}\n class=\"k2b-settings__body\"\n role=\"tabpanel\"\n aria-labelledby={tabId(tab().props.id)}\n tabIndex={0}\n data-tone={tab().props.tone ?? \"default\"}\n >\n <div class=\"k2b-settings__section\">\n <div class=\"k2b-settings__section-heading\">\n <h2>{tab().props.title}</h2>\n <Show when={tab().props.description}>{(description) => <p>{description()}</p>}</Show>\n </div>\n {panelChildren().content}\n </div>\n </section>\n )}\n </Show>\n <Show when={panelChildren().footer}>{(footer) => <footer class=\"k2b-settings__footer\">{footer().props.children}</footer>}</Show>\n </div>\n </div>\n );\n}) as SettingsModalComponent;\n\nSettingsModal.Tab = SettingsModalTab;\nSettingsModal.Group = SettingsModalGroup;\nSettingsModal.Footer = SettingsModalFooter;\n\nexport default SettingsModal;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/SettingsModal.tsx"],"sourcesContent":["import { children, createMemo, createSignal, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { assertUniqueStableUiIds } from \"./stable-id\";\n\nconst SETTINGS_MODAL_TAB = Symbol(\"SettingsModal.Tab\");\nconst SETTINGS_MODAL_GROUP = Symbol(\"SettingsModal.Group\");\nconst SETTINGS_MODAL_FOOTER = Symbol(\"SettingsModal.Footer\");\n\nexport type SettingsModalTabTone = \"default\" | \"danger\";\n\nexport type SettingsModalTabProps = {\n id: string;\n title: string;\n description?: string;\n icon?: string;\n tone?: SettingsModalTabTone;\n children: JSX.Element;\n};\n\nexport type SettingsModalGroupProps = {\n title: string;\n children: JSX.Element;\n};\n\nexport type SettingsModalFooterProps = {\n children: JSX.Element;\n};\n\ntype SettingsModalTabDefinition = {\n readonly kind: typeof SETTINGS_MODAL_TAB;\n readonly props: SettingsModalTabProps;\n};\n\ntype SettingsModalGroupDefinition = {\n readonly kind: typeof SETTINGS_MODAL_GROUP;\n readonly props: SettingsModalGroupProps;\n};\n\ntype SettingsModalFooterDefinition = {\n readonly kind: typeof SETTINGS_MODAL_FOOTER;\n readonly props: SettingsModalFooterProps;\n};\n\nexport type SettingsModalProps = {\n /** Accessible name for the settings surface. */\n title: string;\n /** @deprecated Retained for source compatibility; tab descriptions carry the visible context. */\n subtitle?: string;\n /** @deprecated Retained for source compatibility; tab icons identify the rail entries. */\n icon?: string;\n defaultTab?: string;\n activeTab?: string;\n onTabChange?: (id: string) => void;\n onClose?: () => void;\n closeLabel?: string;\n class?: string;\n children: JSX.Element;\n};\n\ntype SettingsModalComponent = ((props: SettingsModalProps) => JSX.Element) & {\n Tab: (props: SettingsModalTabProps) => JSX.Element;\n Group: (props: SettingsModalGroupProps) => JSX.Element;\n Footer: (props: SettingsModalFooterProps) => JSX.Element;\n};\n\nconst isTabDefinition = (value: unknown): value is SettingsModalTabDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_TAB;\n\nconst isGroupDefinition = (value: unknown): value is SettingsModalGroupDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_GROUP;\n\nconst isFooterDefinition = (value: unknown): value is SettingsModalFooterDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_FOOTER;\n\nconst collectTabs = (value: unknown): SettingsModalTabDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectTabs);\n if (isGroupDefinition(value)) return collectTabs(value.props.children);\n return isTabDefinition(value) ? [value] : [];\n};\n\nconst collectRailEntries = (value: unknown): (SettingsModalGroupDefinition | SettingsModalTabDefinition)[] => {\n if (Array.isArray(value)) return value.flatMap(collectRailEntries);\n if (isGroupDefinition(value) || isTabDefinition(value)) return [value];\n return [];\n};\n\nconst splitPanelChildren = (value: unknown): { content: JSX.Element[]; footer?: SettingsModalFooterDefinition } => {\n if (Array.isArray(value)) {\n return value.reduce<{ content: JSX.Element[]; footer?: SettingsModalFooterDefinition }>(\n (result, entry) => {\n const next = splitPanelChildren(entry);\n result.content.push(...next.content);\n if (next.footer) result.footer = next.footer;\n return result;\n },\n { content: [] },\n );\n }\n return isFooterDefinition(value) ? { content: [], footer: value } : { content: [value as JSX.Element] };\n};\n\nfunction SettingsModalTab(props: SettingsModalTabProps): JSX.Element {\n return { kind: SETTINGS_MODAL_TAB, props } satisfies SettingsModalTabDefinition as unknown as JSX.Element;\n}\n\nfunction SettingsModalGroup(props: SettingsModalGroupProps): JSX.Element {\n return { kind: SETTINGS_MODAL_GROUP, props } satisfies SettingsModalGroupDefinition as unknown as JSX.Element;\n}\n\nfunction SettingsModalFooter(props: SettingsModalFooterProps): JSX.Element {\n return { kind: SETTINGS_MODAL_FOOTER, props } satisfies SettingsModalFooterDefinition as unknown as JSX.Element;\n}\n\nconst SettingsModal = ((props: SettingsModalProps): JSX.Element => {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const railEntries = createMemo(() => collectRailEntries(resolved()));\n const tabs = createMemo(() => {\n const collected = collectTabs(resolved());\n assertUniqueStableUiIds(\n collected.map((tab) => tab.props.id),\n \"SettingsModal.Tab id\",\n );\n return collected;\n });\n const instanceId = `k2b-settings-${createUniqueId()}`;\n const tabRefs = new Map<string, HTMLButtonElement>();\n const firstTabId = () => tabs()[0]?.props.id ?? \"\";\n const [localActiveTab, setLocalActiveTab] = createSignal(props.defaultTab ?? firstTabId());\n const requestedActiveTabId = () => props.activeTab ?? (localActiveTab() || firstTabId());\n const resolvedActiveTabId = () => (tabs().some((tab) => tab.props.id === requestedActiveTabId()) ? requestedActiveTabId() : firstTabId());\n const activeTab = () => tabs().find((tab) => tab.props.id === resolvedActiveTabId()) ?? null;\n const resolvedPanelChildren = children(() => activeTab()?.props.children);\n const panelChildren = createMemo(() => splitPanelChildren(resolvedPanelChildren()));\n\n const selectTab = (id: string) => {\n if (props.activeTab === undefined) setLocalActiveTab(id);\n props.onTabChange?.(id);\n };\n\n const moveTabFocus = (event: KeyboardEvent, currentId: string) => {\n const currentIndex = tabs().findIndex((tab) => tab.props.id === currentId);\n if (currentIndex < 0 || tabs().length === 0) return;\n let nextIndex: number | null = null;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") nextIndex = (currentIndex + 1) % tabs().length;\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") nextIndex = (currentIndex - 1 + tabs().length) % tabs().length;\n if (event.key === \"Home\") nextIndex = 0;\n if (event.key === \"End\") nextIndex = tabs().length - 1;\n if (nextIndex === null) return;\n event.preventDefault();\n const nextTab = tabs()[nextIndex];\n if (!nextTab) return;\n selectTab(nextTab.props.id);\n tabRefs.get(nextTab.props.id)?.focus();\n };\n\n const tabId = (id: string) => `${instanceId}-tab-${id}`;\n const panelId = (id: string) => `${instanceId}-panel-${id}`;\n\n const TabButton = (tab: SettingsModalTabDefinition): JSX.Element => {\n const active = () => resolvedActiveTabId() === tab.props.id;\n return (\n <button\n ref={(element) => tabRefs.set(tab.props.id, element)}\n id={tabId(tab.props.id)}\n type=\"button\"\n role=\"tab\"\n aria-selected={active()}\n aria-controls={active() ? panelId(tab.props.id) : undefined}\n tabIndex={active() ? 0 : -1}\n data-state={active() ? \"active\" : \"idle\"}\n data-active={active() ? \"true\" : undefined}\n data-tone={tab.props.tone ?? \"default\"}\n onClick={() => selectTab(tab.props.id)}\n onKeyDown={(event) => moveTabFocus(event, tab.props.id)}\n >\n <Show when={tab.props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{tab.props.title}</span>\n </button>\n );\n };\n\n return (\n <div class={`k2b-settings ${props.class ?? \"\"}`} role=\"region\" aria-label={props.title}>\n <Show when={props.onClose}>\n <button\n type=\"button\"\n class=\"k2b-settings__close k2b-icon-button\"\n aria-label={props.closeLabel ?? messages().close}\n onClick={props.onClose}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <aside class=\"k2b-settings__rail\">\n <nav class=\"k2b-settings__tabs\" aria-label={messages().sectionsLabel({ title: props.title })} role=\"tablist\">\n <For each={railEntries()}>\n {(entry) =>\n isGroupDefinition(entry) ? (\n <div class=\"k2b-settings__tab-group\" role=\"presentation\">\n <span class=\"k2b-settings__tab-group-label\" aria-hidden=\"true\">\n {entry.props.title}\n </span>\n <For each={collectTabs(entry.props.children)}>{(tab) => TabButton(tab)}</For>\n </div>\n ) : (\n TabButton(entry)\n )\n }\n </For>\n </nav>\n </aside>\n <div class=\"k2b-settings__content\">\n <Show when={activeTab()}>\n {(tab) => (\n <section\n id={panelId(tab().props.id)}\n class=\"k2b-settings__body\"\n role=\"tabpanel\"\n aria-labelledby={tabId(tab().props.id)}\n tabIndex={0}\n data-tone={tab().props.tone ?? \"default\"}\n >\n <div class=\"k2b-settings__section\">\n <div class=\"k2b-settings__section-heading\">\n <h2>{tab().props.title}</h2>\n <Show when={tab().props.description}>{(description) => <p>{description()}</p>}</Show>\n </div>\n {panelChildren().content}\n </div>\n </section>\n )}\n </Show>\n <Show when={panelChildren().footer}>{(footer) => <footer class=\"k2b-settings__footer\">{footer().props.children}</footer>}</Show>\n </div>\n </div>\n );\n}) as SettingsModalComponent;\n\nSettingsModal.Tab = SettingsModalTab;\nSettingsModal.Group = SettingsModalGroup;\nSettingsModal.Footer = SettingsModalFooter;\n\nexport default SettingsModal;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createSignal","createUniqueId","onCleanup","onMount","positionTooltipSurface","ScrollArea","SidebarItemPreview","props","id","open","setOpen","button","panel","row","main","timer","pinned","dismissed","clear","clearTimeout","undefined","close","hidePopover","position","target","align","height","getBoundingClientRect","bottom","style","top","Math","round","max","min","window","innerHeight","show","showPopover","enter","setTimeout","leave","contains","document","activeElement","dismiss","restore","focus","toggle","closest","trigger","querySelector","setAttribute","label","addEventListener","pointerEnter","event","pointerType","focusOut","next","relatedTarget","Node","escape","key","reposition","observer","ResizeObserver","observe","disconnect","removeEventListener","_$ssr","_tmpl$","_$ssrAttribute","_$escape","_tmpl$2","_$createComponent","viewportSize","children"],"sources":["layout/SidebarItemPreview.tsx"],"sourcesContent":["import { createSignal, createUniqueId, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\nimport { ScrollArea, type ScrollAreaProps } from \"./ScrollArea\";\n\n/** A non-modal, interactive row preview. Native popover owns light dismissal. */\nexport function SidebarItemPreview(props: {\n label: string;\n children: JSX.Element | ((close: () => void) => JSX.Element);\n trigger?: \"action\" | \"row\";\n align?: \"center\" | \"end\";\n viewportSize?: ScrollAreaProps[\"viewportSize\"];\n onOpenChange?: (open: boolean) => void;\n}) {\n const id = `sidebar-preview-${createUniqueId()}`;\n const [open, setOpen] = createSignal(false);\n let button!: HTMLButtonElement;\n let panel!: HTMLDivElement;\n let row: HTMLElement | null = null;\n let main: HTMLButtonElement | null = null;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let pinned = false;\n let dismissed = false;\n const clear = () => {\n clearTimeout(timer);\n timer = undefined;\n };\n const close = () => {\n clear();\n panel.hidePopover();\n };\n const position = () => {\n const target = row ?? button;\n positionTooltipSurface(panel, target, \"right\");\n if (props.align === \"end\") {\n const height = panel.getBoundingClientRect().height;\n const bottom = target.getBoundingClientRect().bottom;\n panel.style.top = `${Math.round(Math.max(8, Math.min(bottom - height, window.innerHeight - height - 8)))}px`;\n }\n };\n const show = () => {\n clear();\n if (dismissed || open()) return;\n panel.showPopover();\n position();\n };\n const enter = () => {\n clear();\n if (!dismissed && !open()) timer = setTimeout(show, 250);\n };\n const leave = () => {\n clear();\n dismissed = false;\n if (!pinned)\n timer = setTimeout(() => {\n if (!panel.contains(document.activeElement) && !row?.contains(document.activeElement)) close();\n }, 180);\n };\n const dismiss = () => {\n const restore = panel.contains(document.activeElement);\n dismissed = true;\n close();\n if (restore) (main ?? button).focus();\n };\n const toggle = () => {\n clear();\n if (open() && pinned) {\n dismiss();\n return;\n }\n dismissed = false;\n pinned = true;\n show();\n panel.focus();\n };\n onMount(() => {\n row = button.closest<HTMLElement>(\".k2b-app-workspace__sidebar-item\");\n if (props.trigger === \"row\") {\n main = row?.querySelector<HTMLButtonElement>(\":scope > button.k2b-app-workspace__sidebar-item-main\") ?? null;\n main?.setAttribute(\"aria-label\", props.label);\n main?.setAttribute(\"aria-haspopup\", \"dialog\");\n main?.setAttribute(\"aria-controls\", id);\n main?.setAttribute(\"aria-expanded\", \"false\");\n main?.addEventListener(\"click\", toggle);\n }\n const pointerEnter = (event: PointerEvent) => {\n if (event.pointerType === \"mouse\") enter();\n };\n const focusOut = (event: FocusEvent) => {\n const next = event.relatedTarget;\n if (next instanceof Node && (panel.contains(next) || row?.contains(next))) return;\n pinned = false;\n leave();\n };\n const escape = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !open()) return;\n dismiss();\n };\n const reposition = () => {\n if (open()) position();\n };\n row?.addEventListener(\"pointerenter\", pointerEnter);\n row?.addEventListener(\"pointerleave\", leave);\n row?.addEventListener(\"focusin\", enter);\n row?.addEventListener(\"focusout\", focusOut);\n panel.addEventListener(\"focusout\", focusOut);\n document.addEventListener(\"keydown\", escape);\n window.addEventListener(\"resize\", reposition);\n window.addEventListener(\"scroll\", reposition, true);\n const observer = new ResizeObserver(reposition);\n observer.observe(panel);\n onCleanup(() => {\n clear();\n observer.disconnect();\n main?.removeEventListener(\"click\", toggle);\n row?.removeEventListener(\"pointerenter\", pointerEnter);\n row?.removeEventListener(\"pointerleave\", leave);\n row?.removeEventListener(\"focusin\", enter);\n row?.removeEventListener(\"focusout\", focusOut);\n panel.removeEventListener(\"focusout\", focusOut);\n document.removeEventListener(\"keydown\", escape);\n window.removeEventListener(\"resize\", reposition);\n window.removeEventListener(\"scroll\", reposition, true);\n });\n });\n return (\n <>\n <button\n ref={button}\n type=\"button\"\n class=\"k2b-app-workspace__sidebar-item-action k2b-app-workspace__sidebar-preview-trigger\"\n data-visibility=\"hover\"\n aria-label={props.label}\n aria-haspopup=\"dialog\"\n aria-expanded={open()}\n aria-controls={id}\n data-row-trigger={props.trigger === \"row\" ? \"true\" : undefined}\n onClick={toggle}\n >\n <i class={props.trigger === \"row\" ? \"ti ti-chevron-right\" : \"ti ti-info-circle\"} aria-hidden=\"true\" />\n </button>\n <div\n ref={panel}\n id={id}\n popover=\"auto\"\n role=\"dialog\"\n aria-label={props.label}\n tabIndex={-1}\n class=\"k2b-app-workspace__sidebar-preview\"\n onPointerEnter={clear}\n onPointerLeave={leave}\n onToggle={(event) => {\n const visible = event.newState === \"open\";\n setOpen(visible);\n main?.setAttribute(\"aria-expanded\", String(visible));\n props.onOpenChange?.(visible);\n if (!visible) pinned = false;\n }}\n >\n <ScrollArea viewportSize={props.viewportSize} class=\"k2b-app-workspace__sidebar-preview-body\">\n {typeof props.children === \"function\" ? props.children(dismiss) : props.children}\n </ScrollArea>\n </div>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/SidebarItemPreview.tsx"],"sourcesContent":["import { createSignal, createUniqueId, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\nimport { ScrollArea, type ScrollAreaProps } from \"./ScrollArea\";\n\n/** A non-modal, interactive row preview. Native popover owns light dismissal. */\nexport function SidebarItemPreview(props: {\n label: string;\n children: JSX.Element | ((close: () => void) => JSX.Element);\n trigger?: \"action\" | \"row\";\n align?: \"center\" | \"end\";\n viewportSize?: ScrollAreaProps[\"viewportSize\"];\n onOpenChange?: (open: boolean) => void;\n}) {\n const id = `sidebar-preview-${createUniqueId()}`;\n const [open, setOpen] = createSignal(false);\n let button!: HTMLButtonElement;\n let panel!: HTMLDivElement;\n let row: HTMLElement | null = null;\n let main: HTMLButtonElement | null = null;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let pinned = false;\n let dismissed = false;\n const clear = () => {\n clearTimeout(timer);\n timer = undefined;\n };\n const close = () => {\n clear();\n panel.hidePopover();\n };\n const position = () => {\n const target = row ?? button;\n positionTooltipSurface(panel, target, \"right\");\n if (props.align === \"end\") {\n const height = panel.getBoundingClientRect().height;\n const bottom = target.getBoundingClientRect().bottom;\n panel.style.top = `${Math.round(Math.max(8, Math.min(bottom - height, window.innerHeight - height - 8)))}px`;\n }\n };\n const show = () => {\n clear();\n if (dismissed || open()) return;\n panel.showPopover();\n position();\n };\n const enter = () => {\n clear();\n if (!dismissed && !open()) timer = setTimeout(show, 250);\n };\n const leave = () => {\n clear();\n dismissed = false;\n if (!pinned)\n timer = setTimeout(() => {\n if (!panel.contains(document.activeElement) && !row?.contains(document.activeElement)) close();\n }, 180);\n };\n const dismiss = () => {\n const restore = panel.contains(document.activeElement);\n dismissed = true;\n close();\n if (restore) (main ?? button).focus();\n };\n const toggle = () => {\n clear();\n if (open() && pinned) {\n dismiss();\n return;\n }\n dismissed = false;\n pinned = true;\n show();\n panel.focus();\n };\n onMount(() => {\n row = button.closest<HTMLElement>(\".k2b-app-workspace__sidebar-item\");\n if (props.trigger === \"row\") {\n main = row?.querySelector<HTMLButtonElement>(\":scope > button.k2b-app-workspace__sidebar-item-main\") ?? null;\n main?.setAttribute(\"aria-label\", props.label);\n main?.setAttribute(\"aria-haspopup\", \"dialog\");\n main?.setAttribute(\"aria-controls\", id);\n main?.setAttribute(\"aria-expanded\", \"false\");\n main?.addEventListener(\"click\", toggle);\n }\n const pointerEnter = (event: PointerEvent) => {\n if (event.pointerType === \"mouse\") enter();\n };\n const focusOut = (event: FocusEvent) => {\n const next = event.relatedTarget;\n if (next instanceof Node && (panel.contains(next) || row?.contains(next))) return;\n pinned = false;\n leave();\n };\n const escape = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !open()) return;\n dismiss();\n };\n const reposition = () => {\n if (open()) position();\n };\n row?.addEventListener(\"pointerenter\", pointerEnter);\n row?.addEventListener(\"pointerleave\", leave);\n row?.addEventListener(\"focusin\", enter);\n row?.addEventListener(\"focusout\", focusOut);\n panel.addEventListener(\"focusout\", focusOut);\n document.addEventListener(\"keydown\", escape);\n window.addEventListener(\"resize\", reposition);\n window.addEventListener(\"scroll\", reposition, true);\n const observer = new ResizeObserver(reposition);\n observer.observe(panel);\n onCleanup(() => {\n clear();\n observer.disconnect();\n main?.removeEventListener(\"click\", toggle);\n row?.removeEventListener(\"pointerenter\", pointerEnter);\n row?.removeEventListener(\"pointerleave\", leave);\n row?.removeEventListener(\"focusin\", enter);\n row?.removeEventListener(\"focusout\", focusOut);\n panel.removeEventListener(\"focusout\", focusOut);\n document.removeEventListener(\"keydown\", escape);\n window.removeEventListener(\"resize\", reposition);\n window.removeEventListener(\"scroll\", reposition, true);\n });\n });\n return (\n <>\n <button\n ref={button}\n type=\"button\"\n class=\"k2b-app-workspace__sidebar-item-action k2b-app-workspace__sidebar-preview-trigger\"\n data-visibility=\"hover\"\n aria-label={props.label}\n aria-haspopup=\"dialog\"\n aria-expanded={open()}\n aria-controls={id}\n data-row-trigger={props.trigger === \"row\" ? \"true\" : undefined}\n onClick={toggle}\n >\n <i class={props.trigger === \"row\" ? \"ti ti-chevron-right\" : \"ti ti-info-circle\"} aria-hidden=\"true\" />\n </button>\n <div\n ref={panel}\n id={id}\n popover=\"auto\"\n role=\"dialog\"\n aria-label={props.label}\n tabIndex={-1}\n class=\"k2b-app-workspace__sidebar-preview\"\n onPointerEnter={clear}\n onPointerLeave={leave}\n onToggle={(event) => {\n const visible = event.newState === \"open\";\n setOpen(visible);\n main?.setAttribute(\"aria-expanded\", String(visible));\n props.onOpenChange?.(visible);\n if (!visible) pinned = false;\n }}\n >\n <ScrollArea viewportSize={props.viewportSize} class=\"k2b-app-workspace__sidebar-preview-body\">\n {typeof props.children === \"function\" ? props.children(dismiss) : props.children}\n </ScrollArea>\n </div>\n </>\n );\n}\n"],"mappings":";;;;;;AAAA,SAAS,YAAY,EAAE,cAAc,EAAY,SAAS,EAAE,OAAO,QAAQ,UAAU;AACrF,SAAS,sBAAsB,QAAQ,8BAA8B;AACrE,SAAS,UAAU,QAA8B,cAAc;;AAE/D;AACA,OAAO,SAAS,kBAAkB,CAAC,KAOlC,EAAE;EACD,MAAM,EAAE,GAAG,mBAAmB,cAAc,CAAC,CAAC,EAAE;EAChD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC3C,IAAI,MAA0B;EAC9B,IAAI,KAAsB;EAC1B,IAAI,GAAuB,GAAG,IAAI;EAClC,IAAI,IAA8B,GAAG,IAAI;EACzC,IAAI,KAAgD;EACpD,IAAI,MAAM,GAAG,KAAK;EAClB,IAAI,SAAS,GAAG,KAAK;EACrB,MAAM,KAAK,GAAG,MAAM;IAClB,YAAY,CAAC,KAAK,CAAC;IACnB,KAAK,GAAG,SAAS;EACnB,CAAC;EACD,MAAM,KAAK,GAAG,MAAM;IAClB,KAAK,CAAC,CAAC;IACP,KAAK,CAAC,WAAW,CAAC,CAAC;EACrB,CAAC;EACD,MAAM,QAAQ,GAAG,MAAM;IACrB,MAAM,MAAM,GAAG,GAAG,IAAI,MAAM;IAC5B,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;IAC9C,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;MACzB,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM;MACnD,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM;MACpD,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;IAC9G;EACF,CAAC;EACD,MAAM,IAAI,GAAG,MAAM;IACjB,KAAK,CAAC,CAAC;IACP,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC,EAAE;IACzB,KAAK,CAAC,WAAW,CAAC,CAAC;IACnB,QAAQ,CAAC,CAAC;EACZ,CAAC;EACD,MAAM,KAAK,GAAG,MAAM;IAClB,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;EAC1D,CAAC;EACD,MAAM,KAAK,GAAG,MAAM;IAClB,KAAK,CAAC,CAAC;IACP,SAAS,GAAG,KAAK;IACjB,IAAI,CAAC,MAAM,EACT,KAAK,GAAG,UAAU,CAAC,MAAM;MACvB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;IAChG,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EACD,MAAM,OAAO,GAAG,MAAM;IACpB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;IACtD,SAAS,GAAG,IAAI;IAChB,KAAK,CAAC,CAAC;IACP,IAAI,OAAO,EAAE,CAAC,IAAI,IAAI,MAAM,EAAE,KAAK,CAAC,CAAC;EACvC,CAAC;EACD,MAAM,MAAM,GAAG,MAAM;IACnB,KAAK,CAAC,CAAC;IACP,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,EAAE;MACpB,OAAO,CAAC,CAAC;MACT;IACF;IACA,SAAS,GAAG,KAAK;IACjB,MAAM,GAAG,IAAI;IACb,IAAI,CAAC,CAAC;IACN,KAAK,CAAC,KAAK,CAAC,CAAC;EACf,CAAC;EACD,OAAO,CAAC,MAAM;IACZ,GAAG,GAAG,MAAM,CAAC,OAAO,CAAc,kCAAkC,CAAC;IACrE,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE;MAC3B,IAAI,GAAG,GAAG,EAAE,aAAa,CAAoB,sDAAsD,CAAC,IAAI,IAAI;MAC5G,IAAI,EAAE,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC;MAC7C,IAAI,EAAE,YAAY,CAAC,eAAe,EAAE,QAAQ,CAAC;MAC7C,IAAI,EAAE,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC;MACvC,IAAI,EAAE,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;MAC5C,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC;IACzC;IACA,MAAM,YAAY,GAAI,KAAmB,IAAK;MAC5C,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,QAAQ,GAAI,KAAiB,IAAK;MACtC,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa;MAChC,IAAI,IAAI,YAAY,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;MAC3E,MAAM,GAAG,KAAK;MACd,KAAK,CAAC,CAAC;IACT,CAAC;IACD,MAAM,MAAM,GAAI,KAAoB,IAAK;MACvC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;MACvC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,UAAU,GAAG,MAAM;MACvB,IAAI,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxB,CAAC;IACD,GAAG,EAAE,gBAAgB,CAAC,cAAc,EAAE,YAAY,CAAC;IACnD,GAAG,EAAE,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;IAC5C,GAAG,EAAE,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC;IACvC,GAAG,EAAE,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC3C,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;IACvB,SAAS,CAAC,MAAM;MACd,KAAK,CAAC,CAAC;MACP,QAAQ,CAAC,UAAU,CAAC,CAAC;MACrB,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;MAC1C,GAAG,EAAE,mBAAmB,CAAC,cAAc,EAAE,YAAY,CAAC;MACtD,GAAG,EAAE,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC;MAC/C,GAAG,EAAE,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;MAC1C,GAAG,EAAE,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC;MAC9C,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC;MAC/C,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC;MAC/C,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC;MAChD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC;IACxD,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,4DAOkB,KAAK,CAAC,KAAK,0DAER,IAAI,CAAC,CAAC,2DACN,EAAE,qDACC,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,MAAM,YAAG,SAAS,yCAGpD,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,qBAAqB,GAAG,mBAAmB,wDAI3E,EAAE,uDAGM,KAAK,CAAC,KAAK,4CAatB,UAAU;IAAA,IAAC,YAAY;MAAA,OAAE,KAAK,CAAC,YAAY;IAAA;IAAA;IAAA;MAAA,OACzC,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ;IAAA;EAAA;AAK1F","ignoreList":[]}
|
|
@@ -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","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
|
+
{"version":3,"names":[],"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":[]}
|