@k2b/ui 0.5.0 → 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.map +1 -1
- package/dist/browser/layout/AppOverview.js.map +1 -1
- 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.map +1 -1
- package/dist/browser/layout/Panes.js.map +1 -1
- package/dist/browser/layout/PullToRefresh.js.map +1 -1
- 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.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.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.map +1 -1
- package/dist/ssr/layout/AppOverview.js +2 -1
- package/dist/ssr/layout/AppOverview.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +7 -6
- 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.map +1 -1
- package/dist/ssr/layout/Panes.js.map +1 -1
- package/dist/ssr/layout/PullToRefresh.js.map +1 -1
- 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.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.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/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/ScrollArea.tsx"],"sourcesContent":["import { type JSX, splitProps } from \"solid-js\";\nimport { createScrollFade } from \"./scroll-fade\";\n\nexport type ScrollAreaProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\"> & {\n children: JSX.Element;\n scrollFade?: boolean;\n /** Stable compact catalog height, clamped to 60% of the dynamic viewport. */\n viewportSize?: \"compact\";\n orientation?: \"vertical\" | \"horizontal\";\n scrollPreserveKey?: string | false;\n class?: string;\n};\n\nexport function ScrollArea(props: ScrollAreaProps): JSX.Element {\n const [local, elementProps] = splitProps(props, [\n \"children\",\n \"scrollPreserveKey\",\n \"class\",\n \"scrollFade\",\n \"orientation\",\n \"viewportSize\",\n \"ref\",\n ]);\n let body!: HTMLDivElement;\n createScrollFade(\n () => body,\n () => local.scrollFade !== false,\n );\n const className = () => local.class?.trim();\n\n return (\n <div\n {...elementProps}\n ref={(el) => {\n body = el;\n if (typeof local.ref === \"function\") local.ref(el);\n }}\n data-scroll-fade-axis={local.orientation ?? \"vertical\"}\n data-viewport-size={local.viewportSize}\n data-orientation={local.orientation ?? \"vertical\"}\n data-scroll-fade-mode={local.scrollFade !== false ? \"both\" : undefined}\n class={className() ? `k2b-scroll-area ${className()}` : \"k2b-scroll-area\"}\n data-scroll-preserve={local.scrollPreserveKey || undefined}\n >\n {local.children}\n </div>\n );\n}\n\nexport default ScrollArea;\n"],"mappings":";;;;;;;;;AAAA,SAAmB,UAAU,QAAQ,UAAU;AAC/C,SAAS,gBAAgB,QAAQ,eAAe;AAYhD,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAC9C,UAAU,EACV,mBAAmB,EACnB,OAAO,EACP,YAAY,EACZ,aAAa,EACb,cAAc,EACd,KAAK,CACN,CAAC;EACF,IAAI,IAAqB;EACzB,gBAAgB,CACd,MAAM,IAAI,EACV,MAAM,KAAK,CAAC,UAAU,KAAK,KAC7B,CAAC;EACD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EAE3C;IAAA;IAAA,MAGU,EAAE,IAAK;MACX,IAAI,GAAG,EAAE;MACT,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACpD,CAAC;IAAA,4BAJG,YAAY;MAAA;QAAA,OAKO,KAAK,CAAC,WAAW,IAAI,UAAU;MAAA;MAAA;QAAA,OAClC,KAAK,CAAC,YAAY;MAAA;MAAA;QAAA,OACpB,KAAK,CAAC,WAAW,IAAI,UAAU;MAAA;MAAA;QAAA,OAC1B,KAAK,CAAC,UAAU,KAAK,KAAK,GAAG,MAAM,GAAG,SAAS;MAAA;MAAA;QAAA,OAC/D,wBAAS,CAAC,CAAC,MAAG,mBAAmB,SAAS,CAAC,CAAC,EAAE,GAAG,iBAAiB;MAAA;MAAA;QAAA,OACnD,KAAK,CAAC,iBAAiB,IAAI,SAAS;MAAA;IAAA;IAAA,qBAEzD,KAAK,CAAC,QAAQ;IAAA;IAAA;EAAA;AAGrB;AAEA,eAAe,UAAU","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["children","createMemo","createUniqueId","Show","Button","useUiMessages","read","value","SettingsPage","props","_el$","_$getNextElement","_tmpl$4","_el$2","firstChild","_el$9","_el$0","_co$2","_$getNextMarker","nextSibling","_el$3","_el$4","_el$6","_el$7","_co$","_el$1","_el$10","_co$3","_el$11","_el$13","_el$14","_co$4","_$insert","_$createComponent","when","icon","_el$15","_tmpl$5","_$effect","_$className","title","subtitle","_el$5","_tmpl$","actions","_el$8","_tmpl$2","footer","_el$12","_tmpl$3","_p$","_v$","class","_v$2","style","_v$3","scrollPreserveKey","e","t","_$style","a","_$setAttribute","undefined","SettingsSection","headingId","_el$16","_tmpl$7","_el$17","_el$24","_el$25","_co$6","_el$18","_el$19","_el$21","_el$22","_co$5","_el$26","_el$27","_co$7","_el$28","_el$29","_el$20","_el$23","_tmpl$6","SETTINGS_GROUP_ACTION","Symbol","SettingsGroupAction","kind","collectSettingsGroupActions","Array","isArray","flatMap","collectSettingsGroupContent","SettingsGroup","resolved","action","content","_el$30","_tmpl$8","_el$31","_el$32","_el$33","_el$35","_el$36","_co$8","_el$37","_el$38","_co$9","_el$39","description","_el$34","slot","_el$40","_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","_el$41","_tmpl$1","_el$42","_el$43","_el$44","_el$46","_el$47","_co$0","_el$48","_el$49","_el$50","_co$1","_el$51","_el$52","_co$10","label","_$memo","changed","_el$45","_tmpl$0","unsaved","_el$53","_tmpl$10","_el$54","_el$55","_el$56","_el$57","_co$11","SettingsActions","changeCount","loading","disabled","Boolean","disableWithoutChanges","saveDisabled","_el$58","_tmpl$12","_el$60","_el$61","_co$12","_el$62","_el$63","_co$13","variant","onClick","onDiscard","discard","saveVariant","loadingLabel","saving","onSave","_tmpl$11","saveLabel","saveChanges","SettingsSaveBar","_el$64","_tmpl$13","_el$65","_el$66","_el$67","_el$68","_el$69","_co$14","_el$70","_el$71","_co$15","unsavedChangeLabel","count","SettingsPanelFooter","_el$72","_tmpl$15","noUnsavedChanges","_el$73","_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":[]}
|
|
@@ -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","_$getNextElement","_tmpl$","moveNamedDown","moveDown","count","_tmpl$2","SettingsCollectionItem","Status","Actions","Reorder","SettingsCollection","resolved","items","action","headingId","_el$3","_tmpl$5","_el$4","firstChild","_el$5","_el$6","_el$8","nextSibling","_el$9","_co$","_$getNextMarker","_el$0","_el$1","_co$2","_el$11","_el$12","_co$3","_$setAttribute","_$insert","when","description","_el$7","_tmpl$3","slot","_el$13","_tmpl$6","length","fallback","variant","align","empty","nothingHere","_el$10","_tmpl$4","each","item","resolvedItem","status","actions","_el$14","_tmpl$8","_el$21","_el$22","_co$5","_el$16","_el$17","_el$19","_el$20","_co$4","_el$23","_el$24","_co$6","_el$25","_el$26","_co$7","icon","_el$15","_tmpl$7","_el$18","_el$27","_tmpl$9","_el$28","_tmpl$0","_$effect","_$className","class","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","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","$$keydown","$$click","_$use","element","set","_$insert","_$createComponent","when","icon","_el$5","_tmpl$2","_$effect","_$className","title","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_v$7","tone","e","_$setAttribute","t","a","o","i","n","s","_$runHydrationEvents","_el$6","_tmpl$4","_el$13","_el$14","_co$4","_el$8","_el$9","_el$0","_el$1","_el$10","_co$2","_el$11","_el$12","_co$3","onClose","_el$7","_tmpl$3","_$addEventListener","closeLabel","close","each","_el$15","_tmpl$5","_el$16","_el$17","_el$18","_co$5","_el$19","_tmpl$6","_el$20","_el$21","_el$22","_el$23","_el$24","_co$6","_el$25","_el$26","_co$7","description","_el$27","_tmpl$7","_v$1","_v$10","_v$11","_el$28","_tmpl$8","_v$8","class","_v$9","_v$0","sectionsLabel","Tab","Group","Footer","_$delegateEvents"],"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":";;;;;;;;;;;;;;;;;;;;AAAA,SAAS,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,EAAY,IAAI,QAAQ,UAAU;AAClG,SAAS,aAAa,QAAQ,kBAAkB;AAChD,SAAS,uBAAuB,QAAQ,aAAa;AAErD,MAAM,kBAAkB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACtD,MAAM,oBAAoB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC1D,MAAM,qBAAqB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AA2D5D,MAAM,eAAe,GAAI,KAAc,IACrC,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAAK,CAAwB,IAAI,KAAK,kBAAkB;AAEnG,MAAM,iBAAiB,GAAI,KAAc,IACvC,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAAK,CAAwB,IAAI,KAAK,oBAAoB;AAErG,MAAM,kBAAkB,GAAI,KAAc,IACxC,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAAK,CAAwB,IAAI,KAAK,qBAAqB;AAEtG,MAAM,WAAW,GAAI,KAAc,IAAmC;EACpE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;EAC3D,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;EACtE,OAAO,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;AAC9C,CAAC;AAED,MAAM,kBAAkB,GAAI,KAAc,IAAoE;EAC5G,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;EAClE,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC;EACtE,OAAO,EAAE;AACX,CAAC;AAED,MAAM,kBAAkB,GAAI,KAAc,IAAyE;EACjH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACxB,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,MAAM,EAAE,KAAK,KAAK;MACjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC;MACtC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;MACpC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;MAC5C,OAAO,MAAM;IACf,CAAC,EACD;MAAE,OAAO,EAAE;IAAG,CAChB,CAAC;EACH;EACA,OAAO,kBAAkB,CAAC,KAAK,CAAC,GAAG;IAAE,OAAO,EAAE,EAAE;IAAE,MAAM,EAAE;EAAM,CAAC,GAAG;IAAE,OAAO,EAAE,CAAC,KAAK;EAAiB,CAAC;AACzG,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA4B,EAAe;EACnE,OAAO;IAAE,IAAI,EAAE,kBAAkB;IAAE;EAAM,CAAC;AAC5C;AAEA,SAAS,kBAAkB,CAAC,KAA8B,EAAe;EACvE,OAAO;IAAE,IAAI,EAAE,oBAAoB;IAAE;EAAM,CAAC;AAC9C;AAEA,SAAS,mBAAmB,CAAC,KAA+B,EAAe;EACzE,OAAO;IAAE,IAAI,EAAE,qBAAqB;IAAE;EAAM,CAAC;AAC/C;AAEA,MAAM,aAAa,GAAK,KAAyB,IAAkB;EACjE,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC;EAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACpE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM;IAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,uBAAuB,CACrB,SAAS,CAAC,GAAG,CAAE,GAAG,IAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EACpC,sBACF,CAAC;IACD,OAAO,SAAS;EAClB,CAAC,CAAC;EACF,MAAM,UAAU,GAAG,gBAAgB,cAAc,CAAC,CAAC,EAAE;EACrD,MAAM,OAAO,GAAG,IAAI,GAAG,CAA4B,CAAC;EACpD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;EAClD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC;EAC1F,MAAM,oBAAoB,GAAG,MAAM,KAAK,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;EACxF,MAAM,mBAAmB,GAAG,MAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAE,GAAG,IAAK,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,oBAAoB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,GAAG,UAAU,CAAC,CAAE;EACzI,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAE,GAAG,IAAK,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,mBAAmB,CAAC,CAAC,CAAC,IAAI,IAAI;EAC5F,MAAM,qBAAqB,GAAG,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;EACzE,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,kBAAkB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;EAEnF,MAAM,SAAS,GAAI,EAAU,IAAK;IAChC,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,iBAAiB,CAAC,EAAE,CAAC;IACxD,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;EACzB,CAAC;EAED,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAE,SAAiB,KAAK;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAE,GAAG,IAAK,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC;IAC1E,IAAI,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;IAC7C,IAAI,SAAwB,GAAG,IAAI;IACnC,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM;IAC3G,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM;IACxH,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,SAAS,GAAG,CAAC;IACvC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;IACtD,IAAI,SAAS,KAAK,IAAI,EAAE;IACxB,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE;IACd,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;EACxC,CAAC;EAED,MAAM,KAAK,GAAI,EAAU,IAAK,GAAG,UAAU,QAAQ,EAAE,EAAE;EACvD,MAAM,OAAO,GAAI,EAAU,IAAK,GAAG,UAAU,UAAU,EAAE,EAAE;EAE3D,MAAM,SAAS,GAAI,GAA+B,IAAkB;IAClE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE;IAC3D;MAAA;QAAA;QAAA;QAAA;MAAA,iBAagB,KAAK,IAAK,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;MAAA,eAD9C,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;MAAA,MAVhC,OAAO,IAAK,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC;MAAA,iCAanD,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,GAAG,CAAC,KAAK,CAAC,IAAI;QAAA;QAAA,UAAI,IAAI;UAAA;UAAA,kCAAe,IAAI,CAAC,CAAC;UAAA;QAAA;MAAuB;MAAA,sBACvE,GAAG,CAAC,KAAK,CAAC,KAAK;MAAA;QAAA,UAblB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;UAAA,OAGR,MAAM,CAAC,CAAC;UAAA,OACR,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,SAAS;UAAA,OACjD,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;UAAA,OACf,MAAM,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM;UAAA,OAC3B,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;UAAA,OAC/B,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;MAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;MAAA;MAAA;MAAA;IAAA;EAQ5C,CAAC;EAED;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,kCAEK,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,OAAO;MAAA;MAAA;QAAA;QAAA,mCAKZ,KAAK,CAAC,OAAO;QAAA,mDADV,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK;QAAA;QAAA;MAAA;IAAA;IAAA,kCAQ/C,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,WAAW,CAAC,CAAC;MAAA;MAAA,UACpB,KAAK,IACL,iBAAiB,CAAC,KAAK,CAAC;QAAA;UAAA;UAAA;UAAA;QAAA,uBAGjB,KAAK,CAAC,KAAK,CAAC,KAAK;QAAA,mCAEnB,GAAG;UAAA,IAAC,IAAI;YAAA,OAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;UAAA;UAAA,UAAI,GAAG,IAAK,SAAS,CAAC,GAAG;QAAC;QAAA;MAAA,OAGxE,SAAS,CAAC,KAAK;IAChB;IAAA,kCAMN,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,SAAS,CAAC,CAAC;MAAA;MAAA,UACnB,GAAG;QAAA;UAAA;UAAA;UAAA;UAAA;UAAA;UAAA;UAAA;QAAA,uBAWQ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;QAAA,mCACrB,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW;UAAA;UAAA,UAAI,WAAW;YAAA;YAAA,iBAAS,WAAW;YAAA;UAAA;QAAO;QAAA,uBAE9E,aAAa,CAAC,CAAC,CAAC,OAAO;QAAA;UAAA,WAZtB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAAA,QAGV,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAAA,QAE3B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;UAAA;UAAA;UAAA;UAAA;QAAA;UAAA;UAAA;UAAA;QAAA;QAAA;MAAA;IAU3C;IAAA,kCAEF,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,aAAa,CAAC,CAAC,CAAC,MAAM;MAAA;MAAA,UAAI,MAAM;QAAA;QAAA,uBAA2C,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;QAAA;MAAA;IAAU;IAAA;MAAA,WAlDhH,gBAAgB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAA4B,KAAK,CAAC,KAAK;QAAA,OAYtC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;UAAE,KAAK,EAAE,KAAK,CAAC;QAAM,CAAC,CAAC;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AA0CpG,CAA4B;AAE5B,aAAa,CAAC,GAAG,GAAG,gBAAgB;AACpC,aAAa,CAAC,KAAK,GAAG,kBAAkB;AACxC,aAAa,CAAC,MAAM,GAAG,mBAAmB;AAE1C,eAAe,aAAa;AAAC","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","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","$$click","_ref$","_$use","_$setAttribute","_$effect","_p$","_v$","_v$2","_v$3","_v$4","e","t","a","o","_$className","_$runHydrationEvents","_el$3","_tmpl$2","visible","newState","String","onOpenChange","_ref$2","_$insert","_$createComponent","viewportSize","children","_$memo","_$delegateEvents"],"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":"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","ignoreList":[]}
|