@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/index.ts"],"sourcesContent":["export type {\n AppOverviewCardsProps,\n AppOverviewEmptyStateProps,\n AppOverviewPanelProps,\n AppOverviewProps,\n} from \"./AppOverview\";\nexport { default as AppOverview } from \"./AppOverview\";\nexport type {\n AppWorkspaceBottomDrawerHeight,\n AppWorkspaceBottomDrawerProps,\n AppWorkspaceContentProps,\n AppWorkspaceDetailProps,\n AppWorkspaceDetailWidth,\n AppWorkspaceMainPaneProps,\n AppWorkspaceMainProps,\n AppWorkspaceNavTreeItemProps,\n AppWorkspaceNavTreeProps,\n AppWorkspaceProps,\n AppWorkspaceSidebarAccessoryVisibility,\n AppWorkspaceSidebarBodyProps,\n AppWorkspaceSidebarIconActionProps,\n AppWorkspaceSidebarIconActionTone,\n AppWorkspaceSidebarIconGridProps,\n AppWorkspaceSidebarItemActionProps,\n AppWorkspaceSidebarItemActionsProps,\n AppWorkspaceSidebarItemIconProps,\n AppWorkspaceSidebarItemLabelProps,\n AppWorkspaceSidebarItemMetaProps,\n AppWorkspaceSidebarItemProps,\n AppWorkspaceSidebarItemTone,\n AppWorkspaceSidebarProps,\n AppWorkspaceSidebarSectionProps,\n AppWorkspaceSidebarVisibility,\n} from \"./AppWorkspace\";\nexport { default as AppWorkspace } from \"./AppWorkspace\";\nexport type { AppWorkspaceControllerOptions } from \"./app-workspace-controller\";\nexport { installAppWorkspaceController } from \"./app-workspace-controller\";\nexport type {\n AppWorkspaceLayoutState,\n AppWorkspaceResizeKind,\n} from \"./app-workspace-state\";\nexport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_DEFAULT,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_MAIN_MIN_HEIGHT,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n appWorkspaceLayoutStyle,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n normalizeAppWorkspaceLayoutState,\n parseAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n serializeAppWorkspaceLayoutState,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nexport { type BottomSheetProps, bottomSheetOptions, default as BottomSheet } from \"./BottomSheet\";\nexport type { DataPanelProps } from \"./DataPanel\";\nexport { DataPanel } from \"./DataPanel\";\nexport type {\n DetailPanelActionButtonProps,\n DetailPanelActionLinkProps,\n DetailPanelActionProps,\n DetailPanelBodyProps,\n DetailPanelGroupProps,\n DetailPanelHeaderProps,\n DetailPanelProps,\n DetailPanelSectionProps,\n DetailPanelSummaryProps,\n DetailPanelTone,\n} from \"./DetailPanel\";\nexport { default as DetailPanel } from \"./DetailPanel\";\nexport type { DiscussionComposerProps, DiscussionItemProps, DiscussionListProps, DiscussionProps } from \"./Discussion\";\nexport { default as Discussion } from \"./Discussion\";\nexport type {\n FloatingWindowClose,\n FloatingWindowProps,\n OpenFloatingWindowOptions,\n} from \"./FloatingWindow\";\nexport {\n default as FloatingWindow,\n type FloatingWindowRect,\n fitFloatingWindowRect,\n openFloatingWindow,\n} from \"./FloatingWindow\";\nexport { default as Navigation, type NavigationProps } from \"./Navigation\";\nexport {\n createNavigation,\n findNavigationItem,\n type NavigationController,\n type NavigationItem,\n type NavigationOptions,\n} from \"./navigation-model\";\nexport type {\n PanelDialogBodyProps,\n PanelDialogFooterProps,\n PanelDialogHeaderProps,\n PanelDialogProps,\n PanelDialogSectionProps,\n PanelDialogSurface,\n PanelDialogTabOption,\n PanelDialogTabsProps,\n} from \"./PanelDialog\";\nexport {\n confirmDiscardIfDirty,\n default as PanelDialog,\n panelDialogFixedOptions,\n panelDialogFixedPanelClass,\n panelDialogOptions,\n panelDialogPanelClass,\n panelDialogWideOptions,\n panelDialogWidePanelClass,\n panelDialogWorkspaceOptions,\n panelDialogWorkspacePanelClass,\n} from \"./PanelDialog\";\nexport type { PanelHeaderProps } from \"./PanelHeader\";\nexport { PanelHeader } from \"./PanelHeader\";\nexport type { PanesItem, PanesProps } from \"./Panes\";\nexport { default as Panes } from \"./Panes\";\nexport type { PullToRefreshProps, PullToRefreshState } from \"./PullToRefresh\";\nexport { default as PullToRefresh } from \"./PullToRefresh\";\nexport type {\n AddPanesItemOptions,\n PanesDirection,\n PanesGroup,\n PanesIntent,\n PanesLayout,\n PanesNode,\n PanesPath,\n PanesPathSegment,\n PanesSide,\n PanesSplit,\n} from \"./panes-layout\";\nexport {\n activatePanesItem,\n addPanesItem,\n applyPanesIntent,\n createPanesLayout,\n isPanesItemVisible,\n PANES_LAYOUT_VERSION,\n parsePanesLayout,\n reconcilePanesLayout,\n removePanesItem,\n resizePanesSplit,\n} from \"./panes-layout\";\nexport type { ScrollAreaProps } from \"./ScrollArea\";\nexport { default as ScrollArea } from \"./ScrollArea\";\nexport type {\n SettingsFieldControlProps,\n SettingsFieldProps,\n SettingsGroupActionProps,\n SettingsGroupProps,\n SettingsPageProps,\n SettingsPanelFooterProps,\n SettingsSaveBarProps,\n SettingsSectionProps,\n} from \"./Settings\";\nexport {\n readSettingsError,\n SettingsField,\n SettingsGroup,\n SettingsPage,\n SettingsPanelFooter,\n SettingsSaveBar,\n SettingsSection,\n sameSettingValue,\n} from \"./Settings\";\nexport type {\n SettingsCollectionActionProps,\n SettingsCollectionItemActionsProps,\n SettingsCollectionItemProps,\n SettingsCollectionItemReorderProps,\n SettingsCollectionItemStatusProps,\n SettingsCollectionProps,\n} from \"./SettingsCollection\";\nexport { default as SettingsCollection } from \"./SettingsCollection\";\nexport type {\n SettingsModalFooterProps,\n SettingsModalGroupProps,\n SettingsModalProps,\n SettingsModalTabProps,\n SettingsModalTabTone,\n} from \"./SettingsModal\";\nexport { default as SettingsModal } from \"./SettingsModal\";\n"],"mappings":"AAMA,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AA4BtD,SAAS,OAAO,IAAI,YAAY,QAAQ,gBAAgB;AAExD,SAAS,6BAA6B,QAAQ,4BAA4B;AAK1E,SACE,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wCAAwC,EACxC,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,uBAAuB,EACvB,gCAAgC,EAChC,iCAAiC,QAC5B,uBAAuB;AAC9B,SAAgC,kBAAkB,EAAE,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEjG,SAAS,SAAS,QAAQ,aAAa;AAavC,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAMpD,SACE,OAAO,IAAI,cAAc,EAEzB,qBAAqB,EACrB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,OAAO,IAAI,UAAU,QAA8B,cAAc;AAC1E,SACE,gBAAgB,EAChB,kBAAkB,QAIb,oBAAoB;AAW3B,SACE,qBAAqB,EACrB,OAAO,IAAI,WAAW,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,QACzB,eAAe;AAEtB,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB;AAa1D,SACE,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,QACX,gBAAgB;AAEvB,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAWpD,SACE,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,QACX,YAAY;AASnB,SAAS,OAAO,IAAI,kBAAkB,QAAQ,sBAAsB;AAQpE,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/navigation-model.ts"],"sourcesContent":["import type { LinkNavigateEvent, NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport type { Accessor } from \"solid-js\";\n\ntype NavigationEntry = {\n id: string;\n label: string;\n icon?: string;\n badge?: string | number;\n description?: string;\n active?: boolean;\n disabled?: boolean;\n color?: string;\n children?: readonly NavigationItem[];\n /** Initial disclosure state; subsequent toggles remain local to the renderer. */\n defaultExpanded?: boolean;\n actions?: readonly NavigationItem[];\n};\n\n/** Serializable presentation. Functions stay with the controller's owning island. */\nexport type NavigationItem = NavigationEntry &\n (\n | { href: string; action?: string; navigation?: \"document\" | \"enhanced\"; scroll?: NavigationScrollMode }\n | { action: string; href?: never; navigation?: never; scroll?: never }\n | { href?: never; action?: never; navigation?: never; scroll?: never; children: readonly NavigationItem[] }\n );\n\nexport type NavigationOptions = {\n items: Accessor<readonly NavigationItem[]>;\n onAction?: (action: string) => void | Promise<void>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n};\n\nexport function findNavigationItem(items: readonly NavigationItem[], id: string): NavigationItem | undefined {\n for (const item of items) {\n if (item.disabled) continue;\n if (item.id === id) return item;\n const found = findNavigationItem(item.children ?? [], id) ?? findNavigationItem(item.actions ?? [], id);\n if (found) return found;\n }\n}\n\n/** One live source for renderers; no router, registry, fetching or persisted state. */\nexport function createNavigation(options: NavigationOptions) {\n return {\n items: options.items,\n onNavigate: options.onNavigate,\n async activate(id: string) {\n const item = findNavigationItem(options.items(), id);\n if (item?.action) await options.onAction?.(item.action);\n },\n };\n}\n\nexport type NavigationController = ReturnType<typeof createNavigation>;\n"],"mappings":"AAkBA;;AAcA,OAAO,SAAS,kBAAkB,CAAC,KAAgC,EAAE,EAAU,EAA8B;EAC3G,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;IACnB,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,IAAI;IAC/B,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC;IACvG,IAAI,KAAK,EAAE,OAAO,KAAK;EACzB;AACF;;AAEA;AACA,OAAO,SAAS,gBAAgB,CAAC,OAA0B,EAAE;EAC3D,OAAO;IACL,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,UAAU,EAAE,OAAO,CAAC,UAAU;IAC9B,MAAM,QAAQ,CAAC,EAAU,EAAE;MACzB,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;MACpD,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IACzD;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["assertUniqueStableUiIds","isStableUiId","PANES_LAYOUT_VERSION","PANES_MIN_RATIO","PANES_MAX_ID_LENGTH","MAX_DEPTH","MAX_NODES","isRecord","value","Array","isArray","isItemId","parseNode","usedItems","budget","depth","nodes","type","items","length","active","item","has","add","push","includes","direction","ratio","Number","isFinite","first","second","parsePanesLayout","version","root","Set","createPanesLayout","itemIds","findItem","node","itemId","path","index","indexOf","group","firstGroup","mapAtPath","update","segment","rest","removeFromNode","filter","id","Math","min","reconcileNode","desiredOpen","sameItems","left","right","every","sameNode","isWithinLayoutLimits","insertIntoGroup","beforeItemId","splice","activatePanesItem","layout","located","isPanesItemVisible","removePanesItem","addPanesItem","options","targetItemId","target","applyPanesIntent","intent","source","rootWithoutSource","nextTarget","side","itemGroup","itemFirst","nextRoot","reconcilePanesLayout","desiredOpenItemIds","present","collectPresent","missing","ids","forEach","resizePanesSplit","nextRatio","max","intentKey","samePanesIntent","canSplitSide","split","collectGroups","groups","nodeAtPath","current","isExistingSplitPlacement","parent","slice","sourceFirst","sibling","collectTreeStats","stats","maxDepth","itemDepth","Map","set","getPanesDropTargets","movable","splitStats","targets","seen","noop","sameGroup","remaining","kind","targetDepth","get","exceedsLimits","undefined"],"sources":["layout/panes-layout.ts"],"sourcesContent":["import { assertUniqueStableUiIds, isStableUiId } from \"./stable-id\";\n\nexport const PANES_LAYOUT_VERSION = 2 as const;\nexport const PANES_MIN_RATIO = 0.08;\nexport const PANES_MAX_ID_LENGTH = 160;\n\nexport type PanesDirection = \"horizontal\" | \"vertical\";\nexport type PanesSide = \"left\" | \"right\" | \"top\" | \"bottom\";\nexport type PanesPathSegment = \"first\" | \"second\";\nexport type PanesPath = readonly PanesPathSegment[];\n\nexport type PanesGroup = {\n type: \"group\";\n items: string[];\n active: string;\n};\n\nexport type PanesSplit = {\n type: \"split\";\n direction: PanesDirection;\n ratio: number;\n first: PanesNode;\n second: PanesNode;\n};\n\nexport type PanesNode = PanesGroup | PanesSplit;\n\nexport type PanesLayout = {\n version: typeof PANES_LAYOUT_VERSION;\n root: PanesNode | null;\n};\n\nexport type PanesIntent =\n | {\n type: \"tab\";\n itemId: string;\n targetItemId: string;\n beforeItemId: string | null;\n }\n | {\n type: \"split\";\n itemId: string;\n targetItemId: string;\n side: PanesSide;\n };\n\nexport type PanesDropTarget = {\n id: string;\n kind: \"tab\" | \"group\" | \"split\";\n targetItemId: string;\n beforeItemId?: string | null;\n side?: PanesSide;\n intent: PanesIntent;\n};\n\nexport type PanesDropTargetOptions = {\n movable: boolean;\n split: false | PanesDirection | \"both\";\n};\n\nconst MAX_DEPTH = 12;\nconst MAX_NODES = 64;\n\ntype LocatedGroup = {\n group: PanesGroup;\n path: PanesPathSegment[];\n index: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => !!value && typeof value === \"object\" && !Array.isArray(value);\n\nconst isItemId = (value: unknown): value is string => isStableUiId(value, PANES_MAX_ID_LENGTH);\n\nconst parseNode = (value: unknown, usedItems: Set<string>, budget: { nodes: number }, depth = 0): PanesNode | null => {\n if (!isRecord(value) || depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return null;\n budget.nodes += 1;\n\n if (value.type === \"group\") {\n if (!Array.isArray(value.items) || value.items.length === 0 || !isItemId(value.active)) return null;\n const items: string[] = [];\n for (const item of value.items) {\n if (!isItemId(item) || usedItems.has(item)) return null;\n usedItems.add(item);\n items.push(item);\n }\n if (!items.includes(value.active)) return null;\n return { type: \"group\", items, active: value.active };\n }\n\n if (\n value.type !== \"split\" ||\n (value.direction !== \"horizontal\" && value.direction !== \"vertical\") ||\n typeof value.ratio !== \"number\" ||\n !Number.isFinite(value.ratio) ||\n value.ratio < PANES_MIN_RATIO ||\n value.ratio > 1 - PANES_MIN_RATIO\n ) {\n return null;\n }\n const first = parseNode(value.first, usedItems, budget, depth + 1);\n const second = parseNode(value.second, usedItems, budget, depth + 1);\n if (!first || !second) return null;\n return {\n type: \"split\",\n direction: value.direction,\n ratio: value.ratio,\n first,\n second,\n };\n};\n\nexport const parsePanesLayout = (value: unknown): PanesLayout | null => {\n if (!isRecord(value) || value.version !== PANES_LAYOUT_VERSION) return null;\n if (value.root === null) return { version: PANES_LAYOUT_VERSION, root: null };\n const root = parseNode(value.root, new Set<string>(), { nodes: 0 });\n return root ? { version: PANES_LAYOUT_VERSION, root } : null;\n};\n\nexport const createPanesLayout = (itemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(itemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n return {\n version: PANES_LAYOUT_VERSION,\n root: itemIds.length > 0 ? { type: \"group\", items: [...itemIds], active: itemIds[0]! } : null,\n };\n};\n\nconst findItem = (node: PanesNode | null, itemId: string, path: PanesPathSegment[] = []): LocatedGroup | null => {\n if (!node) return null;\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n return index >= 0 ? { group: node, path, index } : null;\n }\n return findItem(node.first, itemId, [...path, \"first\"]) ?? findItem(node.second, itemId, [...path, \"second\"]);\n};\n\nconst firstGroup = (node: PanesNode | null): PanesGroup | null => {\n if (!node) return null;\n return node.type === \"group\" ? node : firstGroup(node.first);\n};\n\nconst mapAtPath = (node: PanesNode, path: PanesPath, update: (node: PanesNode) => PanesNode): PanesNode => {\n const [segment, ...rest] = path;\n if (!segment) return update(node);\n if (node.type !== \"split\") return node;\n if (segment === \"first\") {\n const first = mapAtPath(node.first, rest, update);\n return first === node.first ? node : { ...node, first };\n }\n const second = mapAtPath(node.second, rest, update);\n return second === node.second ? node : { ...node, second };\n};\n\nconst removeFromNode = (node: PanesNode, itemId: string): PanesNode | null => {\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n if (index < 0) return node;\n const items = node.items.filter((id) => id !== itemId);\n if (items.length === 0) return null;\n const active = node.active === itemId ? items[Math.min(index, items.length - 1)]! : node.active;\n return { ...node, items, active };\n }\n\n const first = removeFromNode(node.first, itemId);\n const second = removeFromNode(node.second, itemId);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst reconcileNode = (node: PanesNode, desiredOpen: ReadonlySet<string>): PanesNode | null => {\n if (node.type === \"group\") {\n const items = node.items.filter((itemId) => desiredOpen.has(itemId));\n if (items.length === 0) return null;\n if (sameItems(items, node.items)) return node;\n const active = items.includes(node.active) ? node.active : items[Math.min(node.items.indexOf(node.active), items.length - 1)]!;\n return { ...node, items, active };\n }\n const first = reconcileNode(node.first, desiredOpen);\n const second = reconcileNode(node.second, desiredOpen);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst sameItems = (left: readonly string[], right: readonly string[]): boolean =>\n left.length === right.length && left.every((item, index) => item === right[index]);\n\nconst sameNode = (left: PanesNode, right: PanesNode): boolean => {\n if (left.type !== right.type) return false;\n if (left.type === \"group\" && right.type === \"group\") {\n return left.active === right.active && sameItems(left.items, right.items);\n }\n if (left.type === \"split\" && right.type === \"split\") {\n return (\n left.direction === right.direction &&\n left.ratio === right.ratio &&\n sameNode(left.first, right.first) &&\n sameNode(left.second, right.second)\n );\n }\n return false;\n};\n\nconst isWithinLayoutLimits = (node: PanesNode, budget = { nodes: 0 }, depth = 0): boolean => {\n if (depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return false;\n budget.nodes += 1;\n return (\n node.type === \"group\" || (isWithinLayoutLimits(node.first, budget, depth + 1) && isWithinLayoutLimits(node.second, budget, depth + 1))\n );\n};\n\nconst insertIntoGroup = (group: PanesGroup, itemId: string, beforeItemId: string | null): PanesGroup | null => {\n if (beforeItemId !== null && !group.items.includes(beforeItemId)) return null;\n const items = group.items.filter((id) => id !== itemId);\n const index = beforeItemId === null ? items.length : items.indexOf(beforeItemId);\n if (index < 0) return null;\n items.splice(index, 0, itemId);\n if (sameItems(items, group.items)) return group;\n return { ...group, items, active: itemId };\n};\n\nexport const activatePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n const located = findItem(layout.root, itemId);\n if (!located || located.group.active === itemId || !layout.root) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, located.path, (node) => (node.type === \"group\" ? { ...node, active: itemId } : node)),\n };\n};\n\nexport const isPanesItemVisible = (layout: PanesLayout, itemId: string): boolean => findItem(layout.root, itemId)?.group.active === itemId;\n\nexport const removePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n if (!layout.root || !findItem(layout.root, itemId)) return layout;\n return { version: PANES_LAYOUT_VERSION, root: removeFromNode(layout.root, itemId) };\n};\n\nexport type AddPanesItemOptions = {\n itemId: string;\n targetItemId: string | null;\n beforeItemId?: string | null;\n};\n\nexport const addPanesItem = (layout: PanesLayout, options: AddPanesItemOptions): PanesLayout => {\n if (!isItemId(options.itemId) || findItem(layout.root, options.itemId)) return layout;\n if (!layout.root) {\n return options.targetItemId === null ? createPanesLayout([options.itemId]) : layout;\n }\n if (options.targetItemId === null) return layout;\n const target = findItem(layout.root, options.targetItemId);\n if (!target) return layout;\n const group = insertIntoGroup(target.group, options.itemId, options.beforeItemId ?? null);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, target.path, () => group) };\n};\n\nexport const applyPanesIntent = (layout: PanesLayout, intent: PanesIntent): PanesLayout => {\n if (!layout.root || intent.itemId === intent.targetItemId) return layout;\n const source = findItem(layout.root, intent.itemId);\n const target = findItem(layout.root, intent.targetItemId);\n if (!source || !target) return layout;\n\n if (intent.type === \"tab\" && source.group === target.group) {\n const group = insertIntoGroup(source.group, intent.itemId, intent.beforeItemId);\n if (!group || group === source.group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, source.path, () => group) };\n }\n\n const rootWithoutSource = removeFromNode(layout.root, intent.itemId);\n if (!rootWithoutSource) return layout;\n const nextTarget = findItem(rootWithoutSource, intent.targetItemId);\n if (!nextTarget) return layout;\n\n if (intent.type === \"tab\") {\n const group = insertIntoGroup(nextTarget.group, intent.itemId, intent.beforeItemId);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(rootWithoutSource, nextTarget.path, () => group) };\n }\n\n const direction: PanesDirection = intent.side === \"left\" || intent.side === \"right\" ? \"horizontal\" : \"vertical\";\n const itemGroup: PanesGroup = { type: \"group\", items: [intent.itemId], active: intent.itemId };\n const itemFirst = intent.side === \"left\" || intent.side === \"top\";\n const nextRoot = mapAtPath(rootWithoutSource, nextTarget.path, (node) => ({\n type: \"split\",\n direction,\n ratio: 0.5,\n first: itemFirst ? itemGroup : node,\n second: itemFirst ? node : itemGroup,\n }));\n if (!isWithinLayoutLimits(nextRoot) || sameNode(nextRoot, layout.root)) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: nextRoot,\n };\n};\n\nexport const reconcilePanesLayout = (layout: PanesLayout, desiredOpenItemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(desiredOpenItemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n const desiredOpen = new Set(desiredOpenItemIds);\n const root = layout.root ? reconcileNode(layout.root, desiredOpen) : null;\n const present = new Set<string>();\n collectPresent(root, present);\n const missing = desiredOpenItemIds.filter((itemId) => !present.has(itemId));\n if (missing.length === 0) return root === layout.root ? layout : { version: PANES_LAYOUT_VERSION, root };\n if (!root) return createPanesLayout(missing);\n const target = firstGroup(root);\n if (!target) return createPanesLayout(missing);\n const located = findItem(root, target.active);\n if (!located) return createPanesLayout(missing);\n const group = { ...located.group, items: [...located.group.items, ...missing] };\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(root, located.path, () => group) };\n};\n\nconst collectPresent = (node: PanesNode | null, ids: Set<string>): void => {\n if (!node) return;\n if (node.type === \"group\") {\n node.items.forEach((item) => ids.add(item));\n return;\n }\n collectPresent(node.first, ids);\n collectPresent(node.second, ids);\n};\n\nexport const resizePanesSplit = (layout: PanesLayout, path: PanesPath, ratio: number): PanesLayout => {\n if (!layout.root || !Number.isFinite(ratio)) return layout;\n let target: PanesNode = layout.root;\n for (const segment of path) {\n if (target.type !== \"split\") return layout;\n target = target[segment];\n }\n if (target.type !== \"split\") return layout;\n const nextRatio = Math.min(1 - PANES_MIN_RATIO, Math.max(PANES_MIN_RATIO, ratio));\n if (nextRatio === target.ratio) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, path, (node) => (node.type === \"split\" ? { ...node, ratio: nextRatio } : node)),\n };\n};\n\nconst intentKey = (intent: PanesIntent): string =>\n intent.type === \"tab\"\n ? `tab:${intent.itemId}:${intent.targetItemId}:${intent.beforeItemId === null ? \"end:\" : `before:${intent.beforeItemId}`}`\n : `split:${intent.itemId}:${intent.targetItemId}:${intent.side}`;\n\nexport const samePanesIntent = (left: PanesIntent | null, right: PanesIntent | null): boolean =>\n left === right ||\n (!!left &&\n !!right &&\n left.type === right.type &&\n left.itemId === right.itemId &&\n left.targetItemId === right.targetItemId &&\n (left.type === \"tab\" && right.type === \"tab\"\n ? left.beforeItemId === right.beforeItemId\n : left.type === \"split\" && right.type === \"split\" && left.side === right.side));\n\nconst canSplitSide = (side: PanesSide, split: PanesDropTargetOptions[\"split\"]): boolean => {\n if (split === false) return false;\n const direction = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n return split === \"both\" || split === direction;\n};\n\nconst collectGroups = (node: PanesNode | null, groups: PanesGroup[] = []): PanesGroup[] => {\n if (!node) return groups;\n if (node.type === \"group\") groups.push(node);\n else {\n collectGroups(node.first, groups);\n collectGroups(node.second, groups);\n }\n return groups;\n};\n\nconst nodeAtPath = (node: PanesNode, path: PanesPath): PanesNode | null => {\n let current = node;\n for (const segment of path) {\n if (current.type !== \"split\") return null;\n current = current[segment];\n }\n return current;\n};\n\nconst isExistingSplitPlacement = (layout: PanesLayout, source: LocatedGroup, targetItemId: string, side: PanesSide): boolean => {\n if (!layout.root || source.group.items.length !== 1 || source.path.length === 0) return false;\n const segment = source.path[source.path.length - 1]!;\n const parent = nodeAtPath(layout.root, source.path.slice(0, -1));\n if (!parent || parent.type !== \"split\" || parent.ratio !== 0.5) return false;\n const direction: PanesDirection = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n const sourceFirst = side === \"left\" || side === \"top\";\n if (parent.direction !== direction || (segment === \"first\") !== sourceFirst) return false;\n const sibling = parent[segment === \"first\" ? \"second\" : \"first\"];\n return sibling.type === \"group\" && sibling.items.includes(targetItemId);\n};\n\nconst collectTreeStats = (\n node: PanesNode,\n depth = 0,\n stats: { nodes: number; maxDepth: number; itemDepth: Map<string, number> } = {\n nodes: 0,\n maxDepth: 0,\n itemDepth: new Map(),\n },\n) => {\n stats.nodes += 1;\n stats.maxDepth = Math.max(stats.maxDepth, depth);\n if (node.type === \"group\") node.items.forEach((itemId) => stats.itemDepth.set(itemId, depth));\n else {\n collectTreeStats(node.first, depth + 1, stats);\n collectTreeStats(node.second, depth + 1, stats);\n }\n return stats;\n};\n\nexport const getPanesDropTargets = (layout: PanesLayout, itemId: string, options: PanesDropTargetOptions): PanesDropTarget[] => {\n if (!options.movable || !layout.root) return [];\n const source = findItem(layout.root, itemId);\n if (!source) return [];\n const rootWithoutSource = removeFromNode(layout.root, itemId);\n const splitStats = rootWithoutSource ? collectTreeStats(rootWithoutSource) : null;\n const targets: PanesDropTarget[] = [];\n const seen = new Set<string>();\n const add = (target: Omit<PanesDropTarget, \"id\">, noop = false) => {\n const id = intentKey(target.intent);\n if (noop || seen.has(id)) return;\n seen.add(id);\n targets.push({ ...target, id });\n };\n\n for (const group of collectGroups(layout.root)) {\n const sameGroup = group === source.group;\n const remaining = group.items.filter((id) => id !== itemId);\n const targetItemId = sameGroup ? remaining[0] : group.active;\n if (!targetItemId) continue;\n for (const beforeItemId of remaining) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId,\n intent,\n },\n sameGroup && group.items[source.index + 1] === beforeItemId,\n );\n }\n if (sameGroup) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId: null };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId: null,\n intent,\n },\n source.index === group.items.length - 1,\n );\n } else {\n add({\n kind: \"group\",\n targetItemId,\n intent: { type: \"tab\", itemId, targetItemId, beforeItemId: null },\n });\n }\n\n for (const side of [\"top\", \"right\", \"bottom\", \"left\"] as const) {\n if (!canSplitSide(side, options.split)) continue;\n const intent: PanesIntent = { type: \"split\", itemId, targetItemId, side };\n const targetDepth = splitStats?.itemDepth.get(targetItemId);\n const exceedsLimits =\n !splitStats ||\n targetDepth === undefined ||\n splitStats.nodes + 2 > MAX_NODES ||\n Math.max(splitStats.maxDepth, targetDepth + 1) > MAX_DEPTH;\n add(\n {\n kind: \"split\",\n targetItemId,\n side,\n intent,\n },\n exceedsLimits || isExistingSplitPlacement(layout, source, targetItemId, side),\n );\n }\n }\n return targets;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/panes-layout.ts"],"sourcesContent":["import { assertUniqueStableUiIds, isStableUiId } from \"./stable-id\";\n\nexport const PANES_LAYOUT_VERSION = 2 as const;\nexport const PANES_MIN_RATIO = 0.08;\nexport const PANES_MAX_ID_LENGTH = 160;\n\nexport type PanesDirection = \"horizontal\" | \"vertical\";\nexport type PanesSide = \"left\" | \"right\" | \"top\" | \"bottom\";\nexport type PanesPathSegment = \"first\" | \"second\";\nexport type PanesPath = readonly PanesPathSegment[];\n\nexport type PanesGroup = {\n type: \"group\";\n items: string[];\n active: string;\n};\n\nexport type PanesSplit = {\n type: \"split\";\n direction: PanesDirection;\n ratio: number;\n first: PanesNode;\n second: PanesNode;\n};\n\nexport type PanesNode = PanesGroup | PanesSplit;\n\nexport type PanesLayout = {\n version: typeof PANES_LAYOUT_VERSION;\n root: PanesNode | null;\n};\n\nexport type PanesIntent =\n | {\n type: \"tab\";\n itemId: string;\n targetItemId: string;\n beforeItemId: string | null;\n }\n | {\n type: \"split\";\n itemId: string;\n targetItemId: string;\n side: PanesSide;\n };\n\nexport type PanesDropTarget = {\n id: string;\n kind: \"tab\" | \"group\" | \"split\";\n targetItemId: string;\n beforeItemId?: string | null;\n side?: PanesSide;\n intent: PanesIntent;\n};\n\nexport type PanesDropTargetOptions = {\n movable: boolean;\n split: false | PanesDirection | \"both\";\n};\n\nconst MAX_DEPTH = 12;\nconst MAX_NODES = 64;\n\ntype LocatedGroup = {\n group: PanesGroup;\n path: PanesPathSegment[];\n index: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => !!value && typeof value === \"object\" && !Array.isArray(value);\n\nconst isItemId = (value: unknown): value is string => isStableUiId(value, PANES_MAX_ID_LENGTH);\n\nconst parseNode = (value: unknown, usedItems: Set<string>, budget: { nodes: number }, depth = 0): PanesNode | null => {\n if (!isRecord(value) || depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return null;\n budget.nodes += 1;\n\n if (value.type === \"group\") {\n if (!Array.isArray(value.items) || value.items.length === 0 || !isItemId(value.active)) return null;\n const items: string[] = [];\n for (const item of value.items) {\n if (!isItemId(item) || usedItems.has(item)) return null;\n usedItems.add(item);\n items.push(item);\n }\n if (!items.includes(value.active)) return null;\n return { type: \"group\", items, active: value.active };\n }\n\n if (\n value.type !== \"split\" ||\n (value.direction !== \"horizontal\" && value.direction !== \"vertical\") ||\n typeof value.ratio !== \"number\" ||\n !Number.isFinite(value.ratio) ||\n value.ratio < PANES_MIN_RATIO ||\n value.ratio > 1 - PANES_MIN_RATIO\n ) {\n return null;\n }\n const first = parseNode(value.first, usedItems, budget, depth + 1);\n const second = parseNode(value.second, usedItems, budget, depth + 1);\n if (!first || !second) return null;\n return {\n type: \"split\",\n direction: value.direction,\n ratio: value.ratio,\n first,\n second,\n };\n};\n\nexport const parsePanesLayout = (value: unknown): PanesLayout | null => {\n if (!isRecord(value) || value.version !== PANES_LAYOUT_VERSION) return null;\n if (value.root === null) return { version: PANES_LAYOUT_VERSION, root: null };\n const root = parseNode(value.root, new Set<string>(), { nodes: 0 });\n return root ? { version: PANES_LAYOUT_VERSION, root } : null;\n};\n\nexport const createPanesLayout = (itemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(itemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n return {\n version: PANES_LAYOUT_VERSION,\n root: itemIds.length > 0 ? { type: \"group\", items: [...itemIds], active: itemIds[0]! } : null,\n };\n};\n\nconst findItem = (node: PanesNode | null, itemId: string, path: PanesPathSegment[] = []): LocatedGroup | null => {\n if (!node) return null;\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n return index >= 0 ? { group: node, path, index } : null;\n }\n return findItem(node.first, itemId, [...path, \"first\"]) ?? findItem(node.second, itemId, [...path, \"second\"]);\n};\n\nconst firstGroup = (node: PanesNode | null): PanesGroup | null => {\n if (!node) return null;\n return node.type === \"group\" ? node : firstGroup(node.first);\n};\n\nconst mapAtPath = (node: PanesNode, path: PanesPath, update: (node: PanesNode) => PanesNode): PanesNode => {\n const [segment, ...rest] = path;\n if (!segment) return update(node);\n if (node.type !== \"split\") return node;\n if (segment === \"first\") {\n const first = mapAtPath(node.first, rest, update);\n return first === node.first ? node : { ...node, first };\n }\n const second = mapAtPath(node.second, rest, update);\n return second === node.second ? node : { ...node, second };\n};\n\nconst removeFromNode = (node: PanesNode, itemId: string): PanesNode | null => {\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n if (index < 0) return node;\n const items = node.items.filter((id) => id !== itemId);\n if (items.length === 0) return null;\n const active = node.active === itemId ? items[Math.min(index, items.length - 1)]! : node.active;\n return { ...node, items, active };\n }\n\n const first = removeFromNode(node.first, itemId);\n const second = removeFromNode(node.second, itemId);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst reconcileNode = (node: PanesNode, desiredOpen: ReadonlySet<string>): PanesNode | null => {\n if (node.type === \"group\") {\n const items = node.items.filter((itemId) => desiredOpen.has(itemId));\n if (items.length === 0) return null;\n if (sameItems(items, node.items)) return node;\n const active = items.includes(node.active) ? node.active : items[Math.min(node.items.indexOf(node.active), items.length - 1)]!;\n return { ...node, items, active };\n }\n const first = reconcileNode(node.first, desiredOpen);\n const second = reconcileNode(node.second, desiredOpen);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst sameItems = (left: readonly string[], right: readonly string[]): boolean =>\n left.length === right.length && left.every((item, index) => item === right[index]);\n\nconst sameNode = (left: PanesNode, right: PanesNode): boolean => {\n if (left.type !== right.type) return false;\n if (left.type === \"group\" && right.type === \"group\") {\n return left.active === right.active && sameItems(left.items, right.items);\n }\n if (left.type === \"split\" && right.type === \"split\") {\n return (\n left.direction === right.direction &&\n left.ratio === right.ratio &&\n sameNode(left.first, right.first) &&\n sameNode(left.second, right.second)\n );\n }\n return false;\n};\n\nconst isWithinLayoutLimits = (node: PanesNode, budget = { nodes: 0 }, depth = 0): boolean => {\n if (depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return false;\n budget.nodes += 1;\n return (\n node.type === \"group\" || (isWithinLayoutLimits(node.first, budget, depth + 1) && isWithinLayoutLimits(node.second, budget, depth + 1))\n );\n};\n\nconst insertIntoGroup = (group: PanesGroup, itemId: string, beforeItemId: string | null): PanesGroup | null => {\n if (beforeItemId !== null && !group.items.includes(beforeItemId)) return null;\n const items = group.items.filter((id) => id !== itemId);\n const index = beforeItemId === null ? items.length : items.indexOf(beforeItemId);\n if (index < 0) return null;\n items.splice(index, 0, itemId);\n if (sameItems(items, group.items)) return group;\n return { ...group, items, active: itemId };\n};\n\nexport const activatePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n const located = findItem(layout.root, itemId);\n if (!located || located.group.active === itemId || !layout.root) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, located.path, (node) => (node.type === \"group\" ? { ...node, active: itemId } : node)),\n };\n};\n\nexport const isPanesItemVisible = (layout: PanesLayout, itemId: string): boolean => findItem(layout.root, itemId)?.group.active === itemId;\n\nexport const removePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n if (!layout.root || !findItem(layout.root, itemId)) return layout;\n return { version: PANES_LAYOUT_VERSION, root: removeFromNode(layout.root, itemId) };\n};\n\nexport type AddPanesItemOptions = {\n itemId: string;\n targetItemId: string | null;\n beforeItemId?: string | null;\n};\n\nexport const addPanesItem = (layout: PanesLayout, options: AddPanesItemOptions): PanesLayout => {\n if (!isItemId(options.itemId) || findItem(layout.root, options.itemId)) return layout;\n if (!layout.root) {\n return options.targetItemId === null ? createPanesLayout([options.itemId]) : layout;\n }\n if (options.targetItemId === null) return layout;\n const target = findItem(layout.root, options.targetItemId);\n if (!target) return layout;\n const group = insertIntoGroup(target.group, options.itemId, options.beforeItemId ?? null);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, target.path, () => group) };\n};\n\nexport const applyPanesIntent = (layout: PanesLayout, intent: PanesIntent): PanesLayout => {\n if (!layout.root || intent.itemId === intent.targetItemId) return layout;\n const source = findItem(layout.root, intent.itemId);\n const target = findItem(layout.root, intent.targetItemId);\n if (!source || !target) return layout;\n\n if (intent.type === \"tab\" && source.group === target.group) {\n const group = insertIntoGroup(source.group, intent.itemId, intent.beforeItemId);\n if (!group || group === source.group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, source.path, () => group) };\n }\n\n const rootWithoutSource = removeFromNode(layout.root, intent.itemId);\n if (!rootWithoutSource) return layout;\n const nextTarget = findItem(rootWithoutSource, intent.targetItemId);\n if (!nextTarget) return layout;\n\n if (intent.type === \"tab\") {\n const group = insertIntoGroup(nextTarget.group, intent.itemId, intent.beforeItemId);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(rootWithoutSource, nextTarget.path, () => group) };\n }\n\n const direction: PanesDirection = intent.side === \"left\" || intent.side === \"right\" ? \"horizontal\" : \"vertical\";\n const itemGroup: PanesGroup = { type: \"group\", items: [intent.itemId], active: intent.itemId };\n const itemFirst = intent.side === \"left\" || intent.side === \"top\";\n const nextRoot = mapAtPath(rootWithoutSource, nextTarget.path, (node) => ({\n type: \"split\",\n direction,\n ratio: 0.5,\n first: itemFirst ? itemGroup : node,\n second: itemFirst ? node : itemGroup,\n }));\n if (!isWithinLayoutLimits(nextRoot) || sameNode(nextRoot, layout.root)) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: nextRoot,\n };\n};\n\nexport const reconcilePanesLayout = (layout: PanesLayout, desiredOpenItemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(desiredOpenItemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n const desiredOpen = new Set(desiredOpenItemIds);\n const root = layout.root ? reconcileNode(layout.root, desiredOpen) : null;\n const present = new Set<string>();\n collectPresent(root, present);\n const missing = desiredOpenItemIds.filter((itemId) => !present.has(itemId));\n if (missing.length === 0) return root === layout.root ? layout : { version: PANES_LAYOUT_VERSION, root };\n if (!root) return createPanesLayout(missing);\n const target = firstGroup(root);\n if (!target) return createPanesLayout(missing);\n const located = findItem(root, target.active);\n if (!located) return createPanesLayout(missing);\n const group = { ...located.group, items: [...located.group.items, ...missing] };\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(root, located.path, () => group) };\n};\n\nconst collectPresent = (node: PanesNode | null, ids: Set<string>): void => {\n if (!node) return;\n if (node.type === \"group\") {\n node.items.forEach((item) => ids.add(item));\n return;\n }\n collectPresent(node.first, ids);\n collectPresent(node.second, ids);\n};\n\nexport const resizePanesSplit = (layout: PanesLayout, path: PanesPath, ratio: number): PanesLayout => {\n if (!layout.root || !Number.isFinite(ratio)) return layout;\n let target: PanesNode = layout.root;\n for (const segment of path) {\n if (target.type !== \"split\") return layout;\n target = target[segment];\n }\n if (target.type !== \"split\") return layout;\n const nextRatio = Math.min(1 - PANES_MIN_RATIO, Math.max(PANES_MIN_RATIO, ratio));\n if (nextRatio === target.ratio) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, path, (node) => (node.type === \"split\" ? { ...node, ratio: nextRatio } : node)),\n };\n};\n\nconst intentKey = (intent: PanesIntent): string =>\n intent.type === \"tab\"\n ? `tab:${intent.itemId}:${intent.targetItemId}:${intent.beforeItemId === null ? \"end:\" : `before:${intent.beforeItemId}`}`\n : `split:${intent.itemId}:${intent.targetItemId}:${intent.side}`;\n\nexport const samePanesIntent = (left: PanesIntent | null, right: PanesIntent | null): boolean =>\n left === right ||\n (!!left &&\n !!right &&\n left.type === right.type &&\n left.itemId === right.itemId &&\n left.targetItemId === right.targetItemId &&\n (left.type === \"tab\" && right.type === \"tab\"\n ? left.beforeItemId === right.beforeItemId\n : left.type === \"split\" && right.type === \"split\" && left.side === right.side));\n\nconst canSplitSide = (side: PanesSide, split: PanesDropTargetOptions[\"split\"]): boolean => {\n if (split === false) return false;\n const direction = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n return split === \"both\" || split === direction;\n};\n\nconst collectGroups = (node: PanesNode | null, groups: PanesGroup[] = []): PanesGroup[] => {\n if (!node) return groups;\n if (node.type === \"group\") groups.push(node);\n else {\n collectGroups(node.first, groups);\n collectGroups(node.second, groups);\n }\n return groups;\n};\n\nconst nodeAtPath = (node: PanesNode, path: PanesPath): PanesNode | null => {\n let current = node;\n for (const segment of path) {\n if (current.type !== \"split\") return null;\n current = current[segment];\n }\n return current;\n};\n\nconst isExistingSplitPlacement = (layout: PanesLayout, source: LocatedGroup, targetItemId: string, side: PanesSide): boolean => {\n if (!layout.root || source.group.items.length !== 1 || source.path.length === 0) return false;\n const segment = source.path[source.path.length - 1]!;\n const parent = nodeAtPath(layout.root, source.path.slice(0, -1));\n if (!parent || parent.type !== \"split\" || parent.ratio !== 0.5) return false;\n const direction: PanesDirection = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n const sourceFirst = side === \"left\" || side === \"top\";\n if (parent.direction !== direction || (segment === \"first\") !== sourceFirst) return false;\n const sibling = parent[segment === \"first\" ? \"second\" : \"first\"];\n return sibling.type === \"group\" && sibling.items.includes(targetItemId);\n};\n\nconst collectTreeStats = (\n node: PanesNode,\n depth = 0,\n stats: { nodes: number; maxDepth: number; itemDepth: Map<string, number> } = {\n nodes: 0,\n maxDepth: 0,\n itemDepth: new Map(),\n },\n) => {\n stats.nodes += 1;\n stats.maxDepth = Math.max(stats.maxDepth, depth);\n if (node.type === \"group\") node.items.forEach((itemId) => stats.itemDepth.set(itemId, depth));\n else {\n collectTreeStats(node.first, depth + 1, stats);\n collectTreeStats(node.second, depth + 1, stats);\n }\n return stats;\n};\n\nexport const getPanesDropTargets = (layout: PanesLayout, itemId: string, options: PanesDropTargetOptions): PanesDropTarget[] => {\n if (!options.movable || !layout.root) return [];\n const source = findItem(layout.root, itemId);\n if (!source) return [];\n const rootWithoutSource = removeFromNode(layout.root, itemId);\n const splitStats = rootWithoutSource ? collectTreeStats(rootWithoutSource) : null;\n const targets: PanesDropTarget[] = [];\n const seen = new Set<string>();\n const add = (target: Omit<PanesDropTarget, \"id\">, noop = false) => {\n const id = intentKey(target.intent);\n if (noop || seen.has(id)) return;\n seen.add(id);\n targets.push({ ...target, id });\n };\n\n for (const group of collectGroups(layout.root)) {\n const sameGroup = group === source.group;\n const remaining = group.items.filter((id) => id !== itemId);\n const targetItemId = sameGroup ? remaining[0] : group.active;\n if (!targetItemId) continue;\n for (const beforeItemId of remaining) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId,\n intent,\n },\n sameGroup && group.items[source.index + 1] === beforeItemId,\n );\n }\n if (sameGroup) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId: null };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId: null,\n intent,\n },\n source.index === group.items.length - 1,\n );\n } else {\n add({\n kind: \"group\",\n targetItemId,\n intent: { type: \"tab\", itemId, targetItemId, beforeItemId: null },\n });\n }\n\n for (const side of [\"top\", \"right\", \"bottom\", \"left\"] as const) {\n if (!canSplitSide(side, options.split)) continue;\n const intent: PanesIntent = { type: \"split\", itemId, targetItemId, side };\n const targetDepth = splitStats?.itemDepth.get(targetItemId);\n const exceedsLimits =\n !splitStats ||\n targetDepth === undefined ||\n splitStats.nodes + 2 > MAX_NODES ||\n Math.max(splitStats.maxDepth, targetDepth + 1) > MAX_DEPTH;\n add(\n {\n kind: \"split\",\n targetItemId,\n side,\n intent,\n },\n exceedsLimits || isExistingSplitPlacement(layout, source, targetItemId, side),\n );\n }\n }\n return targets;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/scroll-fade.ts"],"sourcesContent":["import { createEffect, onCleanup } from \"solid-js\";\n\nconst selector = \"[data-scroll-fade-mode]\";\nconst active = new WeakMap<HTMLElement, { users: number; stop: () => void }>();\n\n/** Shared by hydrated components and the workspace's server-rendered scrollports. */\nfunction observeScrollFade(body: HTMLElement) {\n let entry = active.get(body);\n if (!entry) {\n const update = () => {\n const mode = body.getAttribute(\"data-scroll-fade-mode\");\n const horizontal = body.getAttribute(\"data-scroll-fade-axis\") === \"horizontal\";\n const overflow = horizontal ? body.scrollWidth - body.clientWidth : body.scrollHeight - body.clientHeight;\n // Horizontal RTL scrollLeft starts at zero on the right and becomes negative.\n const rtl = horizontal && getComputedStyle(body).direction === \"rtl\";\n const offset = horizontal ? (rtl ? overflow + body.scrollLeft : body.scrollLeft) : body.scrollTop;\n const top = mode === \"both\" && overflow > 1 && offset > 1;\n const bottom = !!mode && overflow > 1 && overflow - offset > 1;\n const edges = top && bottom ? \"both\" : top ? \"top\" : bottom ? \"bottom\" : undefined;\n if (edges) {\n if (body.getAttribute(\"data-scroll-fade\") !== edges) body.setAttribute(\"data-scroll-fade\", edges);\n } else if (body.hasAttribute(\"data-scroll-fade\")) body.removeAttribute(\"data-scroll-fade\");\n };\n const resize = new ResizeObserver(update);\n const observe = () => {\n resize.disconnect();\n resize.observe(body);\n for (const child of Array.from(body.children)) resize.observe(child);\n update();\n };\n const mutations = new MutationObserver((records) => {\n if (records.some((record) => record.type === \"childList\" && record.target === body)) observe();\n else update();\n });\n mutations.observe(body, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\", \"open\", \"data-scroll-fade-mode\", \"data-scroll-fade-axis\", \"dir\"],\n });\n body.addEventListener(\"scroll\", update, { passive: true });\n observe();\n entry = {\n users: 0,\n stop: () => {\n resize.disconnect();\n mutations.disconnect();\n body.removeEventListener(\"scroll\", update);\n body.removeAttribute(\"data-scroll-fade\");\n },\n };\n active.set(body, entry);\n }\n entry.users++;\n return () => {\n if (--entry.users === 0) {\n entry.stop();\n active.delete(body);\n }\n };\n}\n\nexport function createScrollFade(element: () => HTMLElement | undefined, enabled: () => boolean) {\n createEffect(() => {\n if (!enabled()) return;\n const body = element();\n if (body) onCleanup(observeScrollFade(body));\n });\n}\n\n/** Enrich only explicitly marked UI scrollports, including SSR and later navigation. */\nexport function installScrollFades(root: Document | HTMLElement) {\n const owned = new Map<HTMLElement, () => void>();\n const sync = () => {\n const next = new Set(Array.from(root.querySelectorAll<HTMLElement>(selector)));\n if (root instanceof HTMLElement && root.matches(selector)) next.add(root);\n for (const [element, stop] of owned)\n if (!next.has(element)) {\n stop();\n owned.delete(element);\n }\n for (const element of next) if (!owned.has(element)) owned.set(element, observeScrollFade(element));\n };\n const containsPort = (node: Node) => node instanceof Element && (node.matches(selector) || node.querySelector(selector));\n const mutations = new MutationObserver((records) => {\n if (\n records.some(\n (record) =>\n record.type === \"attributes\" ||\n Array.from(record.addedNodes).some(containsPort) ||\n Array.from(record.removedNodes).some(containsPort),\n )\n )\n sync();\n });\n mutations.observe(root, { childList: true, subtree: true, attributes: true, attributeFilter: [\"data-scroll-fade-mode\"] });\n sync();\n return () => {\n mutations.disconnect();\n for (const stop of owned.values()) stop();\n owned.clear();\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/stable-id.ts"],"sourcesContent":["const STABLE_UI_ID = /^[A-Za-z][A-Za-z0-9_-]*$/;\n\nexport const isStableUiId = (value: unknown, maxLength = 64): value is string =>\n typeof value === \"string\" && value.length > 0 && value.length <= maxLength && STABLE_UI_ID.test(value);\n\nexport const assertStableUiId = (value: string, label: string, maxLength = 64): string => {\n if (!isStableUiId(value, maxLength)) {\n throw new Error(`${label} must start with a letter and contain only letters, numbers, underscores, or hyphens.`);\n }\n return value;\n};\n\nexport const assertUniqueStableUiIds = (values: readonly string[], label: string, maxLength = 64): void => {\n const seen = new Set<string>();\n values.forEach((value) => {\n assertStableUiId(value, label, maxLength);\n if (seen.has(value)) throw new Error(`${label} must be unique; received duplicate id \"${value}\".`);\n seen.add(value);\n });\n};\n"],"mappings":"AAAA,MAAM,YAAY,GAAG,0BAA0B;AAE/C,OAAO,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,SAAS,GAAG,EAAE,KACzD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAExG,OAAO,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,SAAS,GAAG,EAAE,KAAa;EACxF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;IACnC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,uFAAuF,CAAC;EAClH;EACA,OAAO,KAAK;AACd,CAAC;AAED,OAAO,MAAM,uBAAuB,GAAG,CAAC,MAAyB,EAAE,KAAa,EAAE,SAAS,GAAG,EAAE,KAAW;EACzG,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC;EAC9B,MAAM,CAAC,OAAO,CAAE,KAAK,IAAK;IACxB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IACzC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,2CAA2C,KAAK,IAAI,CAAC;IAClG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;EACjB,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ssrStyle as _$ssrStyle } from "solid-js/web";
|
|
2
2
|
import { createComponent as _$createComponent } from "solid-js/web";
|
|
3
|
+
import { memo as _$memo } from "solid-js/web";
|
|
3
4
|
import { ssr as _$ssr } from "solid-js/web";
|
|
4
5
|
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
5
6
|
import { escape as _$escape } from "solid-js/web";
|
|
@@ -28,7 +29,7 @@ export function Avatar(props) {
|
|
|
28
29
|
}));
|
|
29
30
|
return _$createComponent(Show, {
|
|
30
31
|
get when() {
|
|
31
|
-
return
|
|
32
|
+
return _$memo(() => !!!failed())() ? props.src || undefined : undefined;
|
|
32
33
|
},
|
|
33
34
|
get fallback() {
|
|
34
35
|
return _$ssr(_tmpl$2, _$ssrAttribute("class", _$escape(className(), true), false) + _$ssrAttribute("data-size", _$escape(props.size ?? "md", true), false), _$ssrStyle(props.style), _$ssrAttribute("aria-label", _$escape(props.alt ?? messages().avatarLabel({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/Avatar.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, on, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type AvatarProps = {\n name: string;\n src?: string | null;\n icon?: string;\n alt?: string;\n fallback?: string;\n size?: AvatarSize;\n loading?: \"eager\" | \"lazy\";\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nconst initialsFor = (name: string): string => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0]?.slice(0, 2).toUpperCase() ?? \"?\";\n return `${parts[0]?.[0] ?? \"\"}${parts.at(-1)?.[0] ?? \"\"}`.toUpperCase();\n};\n\nexport function Avatar(props: AvatarProps): JSX.Element {\n const messages = useUiMessages();\n const [failed, setFailed] = createSignal(false);\n const label = () => props.name.trim() || messages().unknownUser;\n // Derive initials from the given name, not from the accessible-name fallback:\n // an empty `name` must render \"?\" the way Cloud's avatar does, not \"UU\".\n const fallback = () => props.fallback ?? initialsFor(props.name);\n const fallbackContent = () => (props.icon ? <i class={props.icon} aria-hidden=\"true\" /> : fallback());\n const className = () => `k2b-avatar ${props.class ?? \"\"}`;\n\n createEffect(\n on(\n () => props.src,\n () => setFailed(false),\n { defer: true },\n ),\n );\n\n return (\n <Show\n when={!failed() ? props.src || undefined : undefined}\n fallback={\n <span\n class={className()}\n data-size={props.size ?? \"md\"}\n style={props.style}\n role=\"img\"\n aria-label={props.alt ?? messages().avatarLabel({ name: label() })}\n >\n {fallbackContent()}\n </span>\n }\n >\n {(src) => (\n <img\n src={src()}\n alt={props.alt ?? messages().avatarLabel({ name: label() })}\n class={className()}\n data-size={props.size ?? \"md\"}\n style={props.style}\n loading={props.loading ?? \"lazy\"}\n decoding=\"async\"\n onError={() => setFailed(true)}\n />\n )}\n </Show>\n );\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,YAAY,EAAE,YAAY,EAAY,EAAE,EAAE,IAAI,QAAQ,UAAU;AACzE,SAAS,aAAa,QAAQ,kBAAkB;AAgBhD,MAAM,WAAW,GAAI,IAAY,IAAa;EAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;EACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,GAAG;EAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG;EACzE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;AACzE,CAAC;AAED,OAAO,SAAS,MAAM,CAAC,KAAkB,EAAe;EACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC/C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW;EAC/D;EACA;EACA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;EAChE,MAAM,eAAe,GAAG,MAAO,KAAK,CAAC,IAAI,kDAAa,KAAK,CAAC,IAAI,mBAA0B,QAAQ,CAAC,CAAE;EACrG,MAAM,SAAS,GAAG,MAAM,cAAc,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;EAEzD,YAAY,CACV,EAAE,CACA,MAAM,KAAK,CAAC,GAAG,EACf,MAAM,SAAS,CAAC,KAAK,CAAC,EACtB;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EAED,yBACG,IAAI;IAAA,IACH,IAAI;MAAA,OAAE,gBAAC,MAAM,CAAC,CAAC,MAAG,KAAK,CAAC,GAAG,IAAI,SAAS,GAAG,SAAS;IAAA;IAAA,IACpD,QAAQ;MAAA,uDAEG,SAAS,CAAC,CAAC,uDACP,KAAK,CAAC,IAAI,IAAI,IAAI,4BACtB,KAAK,CAAC,KAAK,yCAEN,KAAK,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;MAAE,CAAC,CAAC,0BAEjE,eAAe,CAAC,CAAC;IAAA;IAAA,UAIpB,GAAG,kDAEI,GAAG,CAAC,CAAC,iDACL,KAAK,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;MAAE,IAAI,EAAE,KAAK,CAAC;IAAE,CAAC,CAAC,mDACpD,SAAS,CAAC,CAAC,uDACP,KAAK,CAAC,IAAI,IAAI,IAAI,4BACtB,KAAK,CAAC,KAAK,sCACT,KAAK,CAAC,OAAO,IAAI,MAAM;EAInC;AAGP","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/DescriptionList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\n\nexport type DescriptionListItem = {\n term: JSX.Element;\n description: JSX.Element;\n action?: JSX.Element;\n};\n\nexport type DescriptionListProps = {\n items: readonly DescriptionListItem[];\n columns?: 1 | 2 | 3;\n layout?: \"grid\" | \"rows\" | \"compact\";\n size?: \"sm\" | \"md\";\n actionVisibility?: \"always\" | \"progressive\";\n class?: string;\n};\n\n/** Semantic key-value content with predictable responsive density. */\nexport function DescriptionList(props: DescriptionListProps): JSX.Element {\n const columns = () => Math.max(1, Math.min(3, props.columns ?? 1));\n return (\n <dl\n class={`k2b-description-list ${props.class ?? \"\"}`}\n data-columns={columns()}\n data-layout={props.layout ?? \"grid\"}\n data-size={props.size ?? \"md\"}\n data-action-visibility={props.actionVisibility ?? \"always\"}\n >\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-description-list__item\">\n <dt>{item.term}</dt>\n <dd>{item.description}</dd>\n <Show when={item.action}>{(action) => <div class=\"k2b-description-list__action\">{action()}</div>}</Show>\n </div>\n )}\n </For>\n </dl>\n );\n}\n\nexport default DescriptionList;\n"],"mappings":";;;;;;;AAAA,SAAS,GAAG,EAAY,IAAI,QAAQ,UAAU;AAiB9C;AACA,OAAO,SAAS,eAAe,CAAC,KAA2B,EAAe;EACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;EAClE,qBAEW,iCAAwB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,0CACpC,OAAO,CAAC,CAAC,yDACV,KAAK,CAAC,MAAM,IAAI,MAAM,uDACxB,KAAK,CAAC,IAAI,IAAI,IAAI,oEACL,KAAK,CAAC,gBAAgB,IAAI,QAAQ,4CAEzD,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,KAAK;IAAA;IAAA,UAClB,IAAI,4BAEG,IAAI,CAAC,IAAI,YACT,IAAI,CAAC,WAAW,8BACpB,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,IAAI,CAAC,MAAM;MAAA;MAAA,UAAI,MAAM,4BAAgD,MAAM,CAAC,CAAC;IAAO;EAEnG;AAIT;AAEA,eAAe,eAAe","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/LinkCard.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { Paper } from \"./Paper\";\n\nexport type LinkCardColor = \"blue\" | \"emerald\" | \"violet\" | \"orange\" | \"red\" | \"amber\" | \"zinc\" | \"cyan\" | \"rose\";\n\nexport type LinkCardProps = {\n href: string;\n title: string;\n description: string;\n icon: string;\n /** Glyph color. Omit it to use the host application's accent. */\n color?: LinkCardColor;\n /** One trailing fact, such as a count or a badge. */\n meta?: JSX.Element;\n};\n\nexport function LinkCard(props: LinkCardProps): JSX.Element {\n return (\n <Paper as=\"a\" href={props.href} class=\"k2b-link-card\" data-color={props.color} interactive>\n <div class=\"k2b-link-card__icon\">\n <i class={`${props.icon} k2b-link-card__glyph`} aria-hidden=\"true\" />\n </div>\n <div class=\"k2b-link-card__copy\">\n <span class=\"k2b-link-card__title\">{props.title}</span>\n <p class=\"k2b-link-card__description\">{props.description}</p>\n </div>\n <Show when={props.meta}>\n <span class=\"k2b-link-card__meta\">{props.meta}</span>\n </Show>\n <i class=\"ti ti-chevron-right k2b-link-card__chevron\" aria-hidden=\"true\" />\n </Paper>\n );\n}\n\nexport default LinkCard;\n"],"mappings":";;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,KAAK,QAAQ,SAAS;AAe/B,OAAO,SAAS,QAAQ,CAAC,KAAoB,EAAe;EAC1D,yBACG,KAAK;IAAC,EAAE;IAAA,IAAK,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA;IAAA;MAAA,OAAoC,KAAK,CAAC,KAAK;IAAA;IAAE,WAAW;IAAA;MAAA,sBAE5E,YAAG,KAAK,CAAC,IAAI,8BAAuB,2BAGV,KAAK,CAAC,KAAK,YACR,KAAK,CAAC,WAAW,sBAEzD,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA;UAAA,+BACe,KAAK,CAAC,IAAI;QAAA;MAAA;IAAA;EAAA;AAKrD;AAEA,eAAe,QAAQ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/NotFoundState.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\n\nexport type NotFoundStateAction = {\n label: string;\n href: string;\n icon?: string;\n};\n\nexport type NotFoundStateProps = {\n code?: string;\n title: string;\n description?: string;\n icon?: string;\n action?: NotFoundStateAction;\n};\n\nexport function NotFoundState(props: NotFoundStateProps): JSX.Element {\n return (\n <div class=\"k2b-not-found\">\n <Show\n when={props.code}\n fallback={<Show when={props.icon}>{(icon) => <i class={`${icon()} k2b-not-found__icon`} aria-hidden=\"true\" />}</Show>}\n >\n {(code) => <div class=\"k2b-not-found__code\">{code()}</div>}\n </Show>\n <div class=\"k2b-not-found__copy\">\n <h1>{props.title}</h1>\n <Show when={props.description}>{(description) => <p>{description()}</p>}</Show>\n </div>\n <Show when={props.action}>\n {(action) => (\n <a href={action().href} class=\"k2b-button\" data-size=\"sm\" data-variant=\"primary\">\n <i class={action().icon ?? \"ti ti-home\"} aria-hidden=\"true\" />\n <span>{action().label}</span>\n </a>\n )}\n </Show>\n </div>\n );\n}\n\nexport default NotFoundState;\n"],"mappings":";;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAgBzC,OAAO,SAAS,aAAa,CAAC,KAAyB,EAAe;EACpE,gDAEK,IAAI;IAAA,IACH,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA,IAChB,QAAQ;MAAA,yBAAG,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA,UAAI,IAAI,mBAAe,YAAG,IAAI,CAAC,CAAC,6BAAsB;MAAuB;IAAA;IAAA,UAE3G,IAAI,4BAAuC,IAAI,CAAC,CAAC;EAAO,cAGrD,KAAK,CAAC,KAAK,8BACf,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,WAAW;IAAA;IAAA,UAAI,WAAW,4BAAS,WAAW,CAAC,CAAC;EAAK,gCAExE,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,MAAM;IAAA;IAAA,UACpB,MAAM,mDACG,MAAM,CAAC,CAAC,CAAC,IAAI,kDACV,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,YAAY,0BAChC,MAAM,CAAC,CAAC,CAAC,KAAK;EAExB;AAIT;AAEA,eAAe,aAAa","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/NoticeCard.tsx"],"sourcesContent":["import { For, type JSX, Show, splitProps } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type NoticeTone = Extract<IntentTone, \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\">;\n\ntype NoticeCardContentProps =\n | { title: JSX.Element; detail?: JSX.Element; children?: JSX.Element }\n | { title?: never; detail?: never; children: JSX.Element };\n\nexport type NoticeCardProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"title\"> &\n NoticeCardContentProps & {\n tone?: NoticeTone;\n icon?: string | false;\n class?: string;\n bodyClass?: string;\n };\n\nexport const NOTICE_CARD_CLASSES = {\n root: \"k2b-notice-card\",\n inner: \"k2b-notice-card__inner\",\n icon: \"k2b-notice-card__icon\",\n content: \"k2b-notice-card__content\",\n title: \"k2b-notice-card__title\",\n description: \"k2b-notice-card__description\",\n body: \"k2b-notice-card__body\",\n} as const;\n\nexport const NOTICE_CARD_ICONS: Readonly<Record<NoticeTone, string>> = {\n neutral: \"ti ti-note\",\n info: \"ti ti-info-circle\",\n success: \"ti ti-circle-check\",\n warning: \"ti ti-alert-triangle\",\n danger: \"ti ti-alert-circle\",\n};\n\nfunction NoticeCardComponent(props: NoticeCardProps): JSX.Element {\n const [local, articleProps] = splitProps(props, [\"tone\", \"title\", \"detail\", \"children\", \"icon\", \"class\", \"bodyClass\"]);\n const tone = () => local.tone ?? \"warning\";\n return (\n <article {...articleProps} class={`${NOTICE_CARD_CLASSES.root} ${local.class ?? \"\"}`} data-tone={tone()}>\n <div class={NOTICE_CARD_CLASSES.inner}>\n <Show when={local.icon !== false}>\n <i\n class={`${typeof local.icon === \"string\" ? local.icon : NOTICE_CARD_ICONS[tone()]} ${NOTICE_CARD_CLASSES.icon}`}\n aria-hidden=\"true\"\n />\n </Show>\n <div class={NOTICE_CARD_CLASSES.content}>\n <Show when={local.title}>{(title) => <p class={NOTICE_CARD_CLASSES.title}>{title()}</p>}</Show>\n <Show when={local.detail}>{(detail) => <p class={NOTICE_CARD_CLASSES.description}>{detail()}</p>}</Show>\n <Show when={local.children}>{(body) => <div class={`${NOTICE_CARD_CLASSES.body} ${local.bodyClass ?? \"\"}`}>{body()}</div>}</Show>\n </div>\n </div>\n </article>\n );\n}\n\nexport type NoticeGridProps<T> = {\n items: readonly T[];\n children: (item: T) => JSX.Element;\n class?: string;\n};\n\nfunction NoticeGrid<T>(props: NoticeGridProps<T>): JSX.Element {\n const columns = () => (props.items.length <= 1 ? \"one\" : props.items.length === 2 ? \"two\" : \"three\");\n return (\n <Show when={props.items.length > 0}>\n <div class={`k2b-notice-grid ${props.class ?? \"\"}`} data-columns={columns()}>\n <For each={props.items}>{(item) => props.children(item)}</For>\n </div>\n </Show>\n );\n}\n\nexport const NoticeCard = Object.assign(NoticeCardComponent, { Grid: NoticeGrid });\nexport default NoticeCard;\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,GAAG,EAAY,IAAI,EAAE,UAAU,QAAQ,UAAU;AAiB1D,OAAO,MAAM,mBAAmB,GAAG;EACjC,IAAI,EAAE,iBAAiB;EACvB,KAAK,EAAE,wBAAwB;EAC/B,IAAI,EAAE,uBAAuB;EAC7B,OAAO,EAAE,0BAA0B;EACnC,KAAK,EAAE,wBAAwB;EAC/B,WAAW,EAAE,8BAA8B;EAC3C,IAAI,EAAE;AACR,CAAU;AAEV,OAAO,MAAM,iBAAuD,GAAG;EACrE,OAAO,EAAE,YAAY;EACrB,IAAI,EAAE,mBAAmB;EACzB,OAAO,EAAE,oBAAoB;EAC7B,OAAO,EAAE,sBAAsB;EAC/B,MAAM,EAAE;AACV,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAsB,EAAe;EAChE,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;EACtH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,IAAI,SAAS;EAC1C,4CACe,YAAY;IAAA;MAAA,OAAS,GAAG,mBAAmB,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA;MAAA,OAAa,IAAI,CAAC,CAAC;IAAA;EAAA,oDACzF,mBAAmB,CAAC,KAAK,4CAClC,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,KAAK,KAAK;IAAA;IAAA;MAAA,qBAErB,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,YAAG,KAAK,CAAC,IAAI,mBAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAI,mBAAmB,CAAC,IAAI,SAAE;IAAA;EAAA,sCAIvG,mBAAmB,CAAC,OAAO,4CACpC,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,KAAK;IAAA;IAAA,UAAI,KAAK,oDAAe,mBAAmB,CAAC,KAAK,0BAAG,KAAK,CAAC,CAAC;EAAK,gCACtF,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,MAAM;IAAA;IAAA,UAAI,MAAM,oDAAe,mBAAmB,CAAC,WAAW,0BAAG,MAAM,CAAC,CAAC;EAAK,gCAC/F,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;IAAA,UAAI,IAAI,mBAAiB,YAAG,mBAAmB,CAAC,IAAI,oBAAI,KAAK,CAAC,SAAS,IAAI,EAAE,SAAE,WAAG,IAAI,CAAC,CAAC;EAAO;AAKnI;AAQA,SAAS,UAAU,CAAI,KAAyB,EAAe;EAC7D,MAAM,OAAO,GAAG,MAAO,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,OAAQ;EACpG,yBACG,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAAA;IAAA;MAAA,sBACpB,4BAAmB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,0CAAgB,OAAO,CAAC,CAAC,4CACxE,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,UAAI,IAAI,IAAK,KAAK,CAAC,QAAQ,CAAC,IAAI;MAAC;IAAA;EAAA;AAI/D;AAEA,OAAO,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE;EAAE,IAAI,EAAE;AAAW,CAAC,CAAC;AAClF,eAAe,UAAU","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createComponent as _$createComponent } from "solid-js/web";
|
|
2
2
|
import { mergeProps as _$mergeProps } from "solid-js/web";
|
|
3
|
+
import { memo as _$memo } from "solid-js/web";
|
|
3
4
|
import { splitProps } from "solid-js";
|
|
4
5
|
import { Dynamic } from "solid-js/web";
|
|
5
6
|
const PaperElement = Dynamic;
|
|
@@ -12,7 +13,7 @@ export function Paper(props) {
|
|
|
12
13
|
}
|
|
13
14
|
}, elementProps, {
|
|
14
15
|
get ["class"]() {
|
|
15
|
-
return className() ? `k2b-paper ${className()}` : "k2b-paper";
|
|
16
|
+
return _$memo(() => !!className())() ? `k2b-paper ${className()}` : "k2b-paper";
|
|
16
17
|
},
|
|
17
18
|
get ["data-elevated"]() {
|
|
18
19
|
return local.elevated ? "true" : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/Paper.tsx"],"sourcesContent":["import { type JSX, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\n\nexport type PaperTag = \"div\" | \"section\" | \"article\" | \"a\";\n\ntype PaperOwnProps<T extends PaperTag> = {\n as?: T;\n children?: JSX.Element;\n class?: string;\n elevated?: boolean;\n interactive?: boolean;\n tabIndex?: number;\n};\n\nexport type PaperProps<T extends PaperTag = \"div\"> = PaperOwnProps<T> & Omit<JSX.IntrinsicElements[T], keyof PaperOwnProps<T>>;\n\nconst PaperElement = Dynamic as unknown as (props: Record<string, unknown>) => JSX.Element;\n\nexport function Paper<T extends PaperTag = \"div\">(props: PaperProps<T>): JSX.Element {\n const [local, elementProps] = splitProps(props, [\"as\", \"children\", \"class\", \"elevated\", \"interactive\", \"tabIndex\"]);\n const className = () => local.class?.trim();\n\n return (\n <PaperElement\n component={local.as ?? \"div\"}\n {...elementProps}\n class={className() ? `k2b-paper ${className()}` : \"k2b-paper\"}\n data-elevated={local.elevated ? \"true\" : undefined}\n data-interactive={local.interactive ? \"true\" : undefined}\n tabindex={local.tabIndex}\n >\n {local.children}\n </PaperElement>\n );\n}\n\nexport default Paper;\n"],"mappings":";;;AAAA,SAAmB,UAAU,QAAQ,UAAU;AAC/C,SAAS,OAAO,QAAQ,cAAc;AAetC,MAAM,YAAY,GAAG,OAAqE;AAE1F,OAAO,SAAS,KAAK,CAA6B,KAAoB,EAAe;EACnF,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;EACnH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EAE3C,yBACG,YAAY;IAAA,IACX,SAAS;MAAA,OAAE,KAAK,CAAC,EAAE,IAAI,KAAK;IAAA;EAAA,GACxB,YAAY;IAAA;MAAA,OACT,wBAAS,CAAC,CAAC,MAAG,aAAa,SAAS,CAAC,CAAC,EAAE,GAAG,WAAW;IAAA;IAAA;MAAA,OAC9C,KAAK,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS;IAAA;IAAA;MAAA,OAChC,KAAK,CAAC,WAAW,GAAG,MAAM,GAAG,SAAS;IAAA;IAAA,IACxD,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;IAAA;MAAA,OAEvB,KAAK,CAAC,QAAQ;IAAA;EAAA;AAGrB;AAEA,eAAe,KAAK","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
|
2
2
|
import { ssr as _$ssr } from "solid-js/web";
|
|
3
3
|
import { escape as _$escape } from "solid-js/web";
|
|
4
4
|
import { createComponent as _$createComponent } from "solid-js/web";
|
|
5
|
+
import { memo as _$memo } from "solid-js/web";
|
|
5
6
|
var _tmpl$ = ["<p class=\"k2b-placeholder__title\">", "</p>"],
|
|
6
7
|
_tmpl$2 = ["<div class=\"k2b-placeholder__description\">", "</div>"],
|
|
7
8
|
_tmpl$3 = ["<div class=\"k2b-placeholder__action\">", "</div>"],
|
|
@@ -34,7 +35,7 @@ export default function Placeholder(props) {
|
|
|
34
35
|
return variant();
|
|
35
36
|
},
|
|
36
37
|
get role() {
|
|
37
|
-
return state() === "error" ? "alert" : state() === "loading" ? "status" : undefined;
|
|
38
|
+
return _$memo(() => state() === "error")() ? "alert" : state() === "loading" ? "status" : undefined;
|
|
38
39
|
},
|
|
39
40
|
get ["aria-live"]() {
|
|
40
41
|
return state() === "loading" ? "polite" : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/Placeholder.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport { Paper } from \"./Paper\";\n\nexport type PlaceholderAlign = \"center\" | \"left\";\nexport type PlaceholderSurface = \"none\" | \"paper\";\nexport type PlaceholderState = \"empty\" | \"loading\" | \"error\";\nexport type PlaceholderVariant = \"compact\" | \"panel\";\n\nexport type PlaceholderProps = {\n title?: JSX.Element;\n description?: JSX.Element;\n icon?: string;\n action?: JSX.Element;\n align?: PlaceholderAlign;\n surface?: PlaceholderSurface;\n state?: PlaceholderState;\n variant?: PlaceholderVariant;\n class?: string;\n};\n\nexport default function Placeholder(props: PlaceholderProps): JSX.Element {\n const align = () => props.align ?? \"center\";\n const state = () => props.state ?? \"empty\";\n const variant = () => props.variant ?? \"compact\";\n const icon = () => props.icon ?? (state() === \"loading\" ? \"ti ti-loader-2\" : state() === \"error\" ? \"ti ti-alert-circle\" : undefined);\n\n return (\n <Dynamic\n component={props.surface === \"paper\" ? Paper : \"div\"}\n class={`k2b-placeholder ${props.class ?? \"\"}`}\n data-align={align()}\n data-state={state()}\n data-surface={props.surface ?? \"none\"}\n data-variant={variant()}\n role={state() === \"error\" ? \"alert\" : state() === \"loading\" ? \"status\" : undefined}\n aria-live={state() === \"loading\" ? \"polite\" : undefined}\n aria-busy={state() === \"loading\" ? \"true\" : undefined}\n >\n <Show when={icon()}>\n {(iconClass) => (\n <span class=\"k2b-placeholder__icon\">\n <i class={iconClass()} aria-hidden=\"true\" />\n </span>\n )}\n </Show>\n <Show when={props.title}>\n <p class=\"k2b-placeholder__title\">{props.title}</p>\n </Show>\n <Show when={props.description}>\n <div class=\"k2b-placeholder__description\">{props.description}</div>\n </Show>\n <Show when={props.action}>\n <div class=\"k2b-placeholder__action\">{props.action}</div>\n </Show>\n </Dynamic>\n );\n}\n"],"mappings":";;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,OAAO,QAAQ,cAAc;AACtC,SAAS,KAAK,QAAQ,SAAS;AAmB/B,eAAe,SAAS,WAAW,CAAC,KAAuB,EAAe;EACxE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,QAAQ;EAC3C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,OAAO;EAC1C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,IAAI,SAAS;EAChD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,gBAAgB,GAAG,KAAK,CAAC,CAAC,KAAK,OAAO,GAAG,oBAAoB,GAAG,SAAS,CAAC;EAEpI,yBACG,OAAO;IAAA,IACN,SAAS;MAAA,OAAE,KAAK,CAAC,OAAO,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK;IAAA;IAAA;MAAA,OAC7C,mBAAmB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA;MAAA,OACjC,KAAK,CAAC,CAAC;IAAA;IAAA;MAAA,OACP,KAAK,CAAC,CAAC;IAAA;IAAA;MAAA,OACL,KAAK,CAAC,OAAO,IAAI,MAAM;IAAA;IAAA;MAAA,OACvB,OAAO,CAAC,CAAC;IAAA;IAAA,IACvB,IAAI;MAAA,OAAE,kBAAK,CAAC,CAAC,KAAK,OAAO,MAAG,OAAO,GAAG,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,QAAQ,GAAG,SAAS;IAAA;IAAA;MAAA,OACvE,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,QAAQ,GAAG,SAAS;IAAA;IAAA;MAAA,OAC5C,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,MAAM,GAAG,SAAS;IAAA;IAAA;MAAA,0BAEpD,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,IAAI,CAAC,CAAC;QAAA;QAAA,UACd,SAAS,oDAEG,SAAS,CAAC,CAAC;MAExB,sBAEF,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA;UAAA,8BACc,KAAK,CAAC,KAAK;QAAA;MAAA,sBAE/C,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,WAAW;QAAA;QAAA;UAAA,+BACgB,KAAK,CAAC,WAAW;QAAA;MAAA,sBAE7D,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,MAAM;QAAA;QAAA;UAAA,+BACgB,KAAK,CAAC,MAAM;QAAA;MAAA;IAAA;EAAA;AAI1D","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/ProgressBar.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type ProgressBarTone = Extract<IntentTone, \"info\" | \"success\" | \"danger\">;\n\nexport type ProgressBarProps = {\n value: number;\n size?: \"xs\" | \"sm\" | \"md\";\n tone?: ProgressBarTone;\n showValue?: boolean;\n label: string;\n class?: string;\n};\n\nconst clamp = (value: number) => (Number.isFinite(value) ? Math.max(0, Math.min(100, Math.round(value))) : 0);\n\nexport function ProgressBar(props: ProgressBarProps): JSX.Element {\n const percent = () => clamp(props.value);\n return (\n <div class={`k2b-progress ${props.class ?? \"\"}`} data-size={props.size ?? \"md\"} data-tone={props.tone ?? \"info\"}>\n <div\n class=\"k2b-progress__track\"\n role=\"progressbar\"\n aria-label={props.label}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={percent()}\n >\n <div class=\"k2b-progress__value\" style={`width: ${percent()}%`} />\n </div>\n {props.showValue ? <span class=\"k2b-progress__percent\">{percent()}%</span> : null}\n </div>\n );\n}\n\nexport default ProgressBar;\n"],"mappings":";;;;;;AAcA,MAAM,KAAK,GAAI,KAAa,IAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE;AAE7G,OAAO,SAAS,WAAW,CAAC,KAAuB,EAAe;EAChE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;EACxC,qBACc,yBAAgB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,uCAAa,KAAK,CAAC,IAAI,IAAI,IAAI,uDAAa,KAAK,CAAC,IAAI,IAAI,MAAM,uDAI/F,KAAK,CAAC,KAAK,0DAGR,OAAO,CAAC,CAAC,4BAEgB,UAAU,OAAO,CAAC,CAAC,GAAG,GAE/D,KAAK,CAAC,SAAS,2BAAwC,OAAO,CAAC,CAAC,cAAY,IAAI;AAGvF;AAEA,eAAe,WAAW","ignoreList":[]}
|