@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":["surfaces/StatusBadge.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\n\nexport type StatusTone = \"info\" | \"ok\" | \"warning\" | \"error\" | \"degraded\" | \"running\" | \"neutral\";\n\nexport type StatusBadgeProps = {\n tone: StatusTone;\n label: JSX.Element;\n icon?: string | null;\n variant?: \"chip\" | \"dot\" | \"text\";\n title?: string;\n class?: string;\n};\n\nconst DEFAULT_ICONS: Record<StatusTone, string> = {\n info: \"ti ti-info-circle\",\n ok: \"ti ti-check\",\n warning: \"ti ti-alert-triangle\",\n error: \"ti ti-alert-circle\",\n degraded: \"ti ti-plug-connected-x\",\n running: \"ti ti-loader-2\",\n neutral: \"ti ti-alert-square-rounded\",\n};\n\nexport function StatusBadge(props: StatusBadgeProps): JSX.Element {\n const variant = () => props.variant ?? \"chip\";\n const icon = () => (props.icon === null ? undefined : (props.icon ?? DEFAULT_ICONS[props.tone]));\n return (\n <span class={`k2b-status-badge ${props.class ?? \"\"}`} data-tone={props.tone} data-variant={variant()} title={props.title}>\n <Show when={variant() !== \"dot\"} fallback={<span class=\"k2b-status-badge__dot\" aria-hidden=\"true\" />}>\n <Show when={icon()}>{(glyph) => <i class={glyph()} aria-hidden=\"true\" />}</Show>\n </Show>\n <span class=\"k2b-status-badge__label\">{props.label}</span>\n </span>\n );\n}\n\nexport default StatusBadge;\n"],"mappings":";;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAazC,MAAM,aAAyC,GAAG;EAChD,IAAI,EAAE,mBAAmB;EACzB,EAAE,EAAE,aAAa;EACjB,OAAO,EAAE,sBAAsB;EAC/B,KAAK,EAAE,oBAAoB;EAC3B,QAAQ,EAAE,wBAAwB;EAClC,OAAO,EAAE,gBAAgB;EACzB,OAAO,EAAE;AACX,CAAC;AAED,OAAO,SAAS,WAAW,CAAC,KAAuB,EAAe;EAChE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,IAAI,MAAM;EAC7C,MAAM,IAAI,GAAG,MAAO,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,SAAS,GAAI,KAAK,CAAC,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAG;EAChG;IAAA;MAAA;MAAA;MAAA;IAAA,iCAEK,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,OAAO,CAAC,CAAC,KAAK,KAAK;MAAA;MAAA,IAAE,QAAQ;QAAA;MAAA;MAAA;QAAA,yBACtC,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,IAAI,CAAC,CAAC;UAAA;UAAA,UAAI,KAAK;YAAA;YAAA,kCAAe,KAAK,CAAC,CAAC;YAAA;UAAA;QAAuB;MAAA;IAAA;IAAA,sBAEnC,KAAK,CAAC,KAAK;IAAA;MAAA,UAJvC,oBAAoB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAAa,KAAK,CAAC,IAAI;QAAA,OAAgB,OAAO,CAAC,CAAC;QAAA,OAAS,KAAK,CAAC,KAAK;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAO5H;AAEA,eAAe,WAAW","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/Tag.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { colorTintStyle } from \"../internal/color\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type TagSize = \"sm\" | \"md\" | \"lg\";\n\nexport type TagProps = {\n children: JSX.Element;\n color?: string | null;\n icon?: string;\n size?: TagSize;\n selected?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n disabled?: boolean;\n class?: string;\n};\n\n/** Compact label presentation with optional color, icon, and remove action. */\nexport function Tag(props: TagProps): JSX.Element {\n const messages = useUiMessages();\n const hasIconSlot = () => props.selected !== undefined || Boolean(props.icon);\n const icon = () => (props.selected ? \"ti ti-check\" : (props.icon ?? \"ti ti-check\"));\n\n return (\n <span\n class={`k2b-tag ${props.class ?? \"\"}`}\n data-size={props.size ?? \"md\"}\n data-selected={props.selected ? \"true\" : undefined}\n style={colorTintStyle(props.color)}\n >\n <Show when={hasIconSlot()}>\n <i class={`${icon()} k2b-tag__icon`} data-placeholder={!props.selected && !props.icon ? \"true\" : undefined} aria-hidden=\"true\" />\n </Show>\n <span class=\"k2b-tag__label\">{props.children}</span>\n <Show when={props.onRemove}>\n {(remove) => (\n <button\n type=\"button\"\n class=\"k2b-tag__remove\"\n aria-label={props.removeLabel ?? messages().removeTag}\n disabled={props.disabled}\n onClick={remove()}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n )}\n </Show>\n </span>\n );\n}\n\nexport default Tag;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,cAAc,QAAQ,mBAAmB;AAClD,SAAS,aAAa,QAAQ,kBAAkB;AAgBhD;AACA,OAAO,SAAS,GAAG,CAAC,KAAe,EAAe;EAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;EAC7E,MAAM,IAAI,GAAG,MAAO,KAAK,CAAC,QAAQ,GAAG,aAAa,GAAI,KAAK,CAAC,IAAI,IAAI,aAAe;EAEnF;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,iCAOK,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,WAAW,CAAC,CAAC;MAAA;MAAA;QAAA;QAAA;UAAA,UACb,GAAG,IAAI,CAAC,CAAC,gBAAgB;YAAA,OAAoB,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;UAAA;UAAA;UAAA;QAAA;UAAA;UAAA;QAAA;QAAA;MAAA;IAAA;IAAA,sBAE9E,KAAK,CAAC,QAAQ;IAAA,iCAC3C,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,QAAQ;MAAA;MAAA,UACtB,MAAM;QAAA;QAAA,mCAMK,MAAM,CAAC,CAAC;QAAA;UAAA,WAFL,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS;YAAA,OAC3C,KAAK,CAAC,QAAQ;UAAA;UAAA;UAAA;QAAA;UAAA;UAAA;QAAA;QAAA;QAAA;MAAA;IAK3B;IAAA;MAAA,WApBI,WAAW,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAC1B,KAAK,CAAC,IAAI,IAAI,IAAI;QAAA,OACd,KAAK,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS;QAAA,OAC3C,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAqBxC;AAEA,eAAe,GAAG;AAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/index.ts"],"sourcesContent":["export type { AvatarProps, AvatarSize } from \"./Avatar\";\nexport { Avatar } from \"./Avatar\";\nexport type { DescriptionListItem, DescriptionListProps } from \"./DescriptionList\";\nexport { DescriptionList } from \"./DescriptionList\";\nexport type { LinkCardColor, LinkCardProps } from \"./LinkCard\";\nexport { LinkCard } from \"./LinkCard\";\nexport type { NotFoundStateAction, NotFoundStateProps } from \"./NotFoundState\";\nexport { NotFoundState } from \"./NotFoundState\";\nexport type { NoticeCardProps, NoticeGridProps, NoticeTone } from \"./NoticeCard\";\nexport { NOTICE_CARD_CLASSES, NOTICE_CARD_ICONS, NoticeCard } from \"./NoticeCard\";\nexport type { PaperProps, PaperTag } from \"./Paper\";\nexport { Paper } from \"./Paper\";\nexport type {\n PlaceholderAlign,\n PlaceholderProps,\n PlaceholderState,\n PlaceholderSurface,\n PlaceholderVariant,\n} from \"./Placeholder\";\nexport { default as Placeholder } from \"./Placeholder\";\nexport type { ProgressBarProps, ProgressBarTone } from \"./ProgressBar\";\nexport { ProgressBar } from \"./ProgressBar\";\nexport type { StatCellAccent, StatCellProps, StatCellTone } from \"./StatCell\";\nexport { StatCell } from \"./StatCell\";\nexport type {\n StatGridAction,\n StatGridColumns,\n StatGridProps,\n StatGridSize,\n StatGridSurface,\n} from \"./StatGrid\";\nexport { StatGrid } from \"./StatGrid\";\nexport type { StatusBadgeProps, StatusTone } from \"./StatusBadge\";\nexport { StatusBadge } from \"./StatusBadge\";\nexport type { TagProps, TagSize } from \"./Tag\";\nexport { Tag } from \"./Tag\";\n"],"mappings":"AACA,SAAS,MAAM,QAAQ,UAAU;AAEjC,SAAS,eAAe,QAAQ,mBAAmB;AAEnD,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,QAAQ,cAAc;AAEjF,SAAS,KAAK,QAAQ,SAAS;AAQ/B,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,QAAQ,QAAQ,YAAY;AAQrC,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,GAAG,QAAQ,OAAO","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["widgets/Widget.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { Paper } from \"../surfaces/Paper\";\n\nexport type WidgetSize = \"content\" | \"compact\" | \"standard\";\n\nexport type WidgetProps = {\n title: string;\n icon?: string;\n href?: string;\n meta?: string;\n size?: WidgetSize;\n children: JSX.Element;\n};\n\nfunction Header(props: WidgetProps): JSX.Element {\n return (\n <>\n <Show when={props.icon}>\n {(icon) => (\n <span class=\"k2b-widget__icon\">\n <i class={icon()} aria-hidden=\"true\" />\n </span>\n )}\n </Show>\n <span class=\"k2b-widget__heading\">\n <span class=\"k2b-widget__title\">{props.title}</span>\n <Show when={props.meta}>{(meta) => <span class=\"k2b-widget__meta\">{meta()}</span>}</Show>\n </span>\n <Show when={props.href}>\n <i class=\"ti ti-chevron-right k2b-widget__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n );\n}\n\nexport function Widget(props: WidgetProps): JSX.Element {\n return (\n <Paper class=\"k2b-widget\" data-size={props.size ?? \"standard\"}>\n <Show\n when={props.href}\n fallback={\n <div class=\"k2b-widget__header\">\n <Header {...props} />\n </div>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-widget__header\">\n <Header {...props} />\n </a>\n )}\n </Show>\n <div class=\"k2b-widget__body\">{props.children}</div>\n </Paper>\n );\n}\n\nexport default Widget;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,KAAK,QAAQ,mBAAmB;AAazC,SAAS,MAAM,CAAC,KAAkB,EAAe;EAC/C,0BAEK,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA,UAClB,IAAI;MAAA;QAAA;MAAA,kCAEQ,IAAI,CAAC,CAAC;MAAA;IAAA;EAEnB;IAAA;MAAA;MAAA;MAAA;IAAA,sBAGgC,KAAK,CAAC,KAAK;IAAA,iCAC3C,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,UAAI,IAAI;QAAA;QAAA,gBAAqC,IAAI;QAAA;MAAA;IAAU;IAAA;EAAA,wBAElF,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA;MAAA;IAAA;EAAA;AAK5B;AAEA,OAAO,SAAS,MAAM,CAAC,KAAkB,EAAe;EACtD,yBACG,KAAK;IAAA;IAAA;MAAA,OAA+B,KAAK,CAAC,IAAI,IAAI,UAAU;IAAA;IAAA;MAAA,0BAC1D,IAAI;QAAA,IACH,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA,IAChB,QAAQ;UAAA;YAAA;YAAA,kCAEH,MAAM,EAAK,KAAK;YAAA;UAAA;QAAA;QAAA,UAInB,IAAI;UAAA;UAAA,kCAED,MAAM,EAAK,KAAK;UAAA,6CADV,IAAI,CAAC,CAAC;UAAA;QAAA;MAGhB;QAAA;QAAA,sBAE4B,KAAK,CAAC,QAAQ;QAAA;MAAA;IAAA;EAAA;AAGnD;AAEA,eAAe,MAAM","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["widgets/WidgetHero.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { AccentColor } from \"../semantics\";\n\nexport type WidgetTone = AccentColor;\n\nexport type WidgetHeroProps = {\n title: string;\n subtitle?: string;\n icon?: string;\n tone?: WidgetTone;\n};\n\nexport function WidgetHero(props: WidgetHeroProps): JSX.Element {\n return (\n <div class=\"k2b-widget-hero\" data-tone={props.tone}>\n <Show when={props.icon}>{(icon) => <i class={`${icon()} k2b-widget-hero__icon`} aria-hidden=\"true\" />}</Show>\n <span class=\"k2b-widget-hero__title\">{props.title}</span>\n <Show when={props.subtitle}>{(subtitle) => <span class=\"k2b-widget-hero__subtitle\">{subtitle()}</span>}</Show>\n </div>\n );\n}\n\nexport default WidgetHero;\n"],"mappings":";;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAYzC,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,iCAEK,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,UAAI,IAAI;QAAA;QAAA,kCAAe,GAAG,IAAI,CAAC,CAAC,wBAAwB;QAAA;MAAA;IAAuB;IAAA,sBAC/D,KAAK,CAAC,KAAK;IAAA,iCAChD,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,QAAQ;MAAA;MAAA,UAAI,QAAQ;QAAA;QAAA,gBAA8C,QAAQ;QAAA;MAAA;IAAU;IAAA,iDAHhE,KAAK,CAAC,IAAI;IAAA;EAAA;AAMtD;AAEA,eAAe,UAAU","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["widgets/WidgetList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { WidgetTone } from \"./WidgetHero\";\n\nexport type WidgetListItem = {\n icon?: string;\n iconTone?: WidgetTone;\n label: string;\n sub?: string;\n meta?: string;\n href?: string;\n};\n\nexport type WidgetListProps = {\n items: readonly WidgetListItem[];\n emptyMessage?: string;\n grow?: boolean;\n};\n\nfunction ItemContent(props: { item: WidgetListItem }): JSX.Element {\n return (\n <>\n <Show when={props.item.icon}>\n {(icon) => <i class={`${icon()} k2b-widget-list__icon`} data-tone={props.item.iconTone} aria-hidden=\"true\" />}\n </Show>\n <div class=\"k2b-widget-list__copy\">\n <span class=\"k2b-widget-list__label\">{props.item.label}</span>\n <Show when={props.item.sub}>{(sub) => <span class=\"k2b-widget-list__sub\">{sub()}</span>}</Show>\n </div>\n <Show when={props.item.meta}>{(meta) => <span class=\"k2b-widget-list__meta\">{meta()}</span>}</Show>\n <Show when={props.item.href}>\n <i class=\"ti ti-chevron-right k2b-widget-list__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n );\n}\n\nexport function WidgetList(props: WidgetListProps): JSX.Element {\n const messages = useUiMessages();\n return (\n <Show\n when={props.items.length > 0}\n fallback={\n <div class=\"k2b-widget-list__empty\" data-grow={props.grow ? \"true\" : undefined}>\n <span>{props.emptyMessage ?? messages().nothingHere}</span>\n </div>\n }\n >\n <div class=\"k2b-widget-list\" data-grow={props.grow ? \"true\" : undefined}>\n <For each={props.items}>\n {(item) => (\n <Show\n when={item.href}\n fallback={\n <div class=\"k2b-widget-list__item\">\n <ItemContent item={item} />\n </div>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-widget-list__item\">\n <ItemContent item={item} />\n </a>\n )}\n </Show>\n )}\n </For>\n </div>\n </Show>\n );\n}\n\nexport default WidgetList;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,SAAS,GAAG,EAAY,IAAI,QAAQ,UAAU;AAC9C,SAAS,aAAa,QAAQ,kBAAkB;AAkBhD,SAAS,WAAW,CAAC,KAA+B,EAAe;EACjE,0BAEK,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,CAAC,IAAI;IAAA;IAAA,UACvB,IAAI;MAAA;MAAA;QAAA,UAAe,GAAG,IAAI,CAAC,CAAC,wBAAwB;UAAA,OAAa,KAAK,CAAC,IAAI,CAAC,QAAQ;QAAA;QAAA;QAAA;MAAA;QAAA;QAAA;MAAA;MAAA;IAAA;EAAuB;IAAA;MAAA;MAAA;MAAA;IAAA,sBAGvE,KAAK,CAAC,IAAI,CAAC,KAAK;IAAA,iCACrD,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI,CAAC,GAAG;MAAA;MAAA,UAAI,GAAG;QAAA;QAAA,gBAAyC,GAAG;QAAA;MAAA;IAAU;IAAA;EAAA,wBAExF,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,CAAC,IAAI;IAAA;IAAA,UAAI,IAAI;MAAA;MAAA,gBAA0C,IAAI;MAAA;IAAA;EAAU,sBAC1F,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,CAAC,IAAI;IAAA;IAAA;MAAA;IAAA;EAAA;AAKjC;AAEA,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,yBACG,IAAI;IAAA,IACH,IAAI;MAAA,OAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAAA;IAAA,IAC5B,QAAQ;MAAA;QAAA;UAAA;QAAA,sBAEG,KAAK,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW;QAAA,kDADN,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;QAAA;MAAA;IAAA;IAAA;MAAA;MAAA,kCAM7E,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,UAClB,IAAI,sBACH,IAAI;UAAA,IACH,IAAI;YAAA,OAAE,IAAI,CAAC,IAAI;UAAA;UAAA,IACf,QAAQ;YAAA;cAAA;cAAA,mCAEH,WAAW;gBAAC,IAAI,EAAE;cAAI;cAAA;YAAA;UAAA;UAAA,UAIzB,IAAI;YAAA;YAAA,mCAED,WAAW;cAAC,IAAI,EAAE;YAAI;YAAA,8CADhB,IAAI,CAAC,CAAC;YAAA;UAAA;QAGhB;MAEJ;MAAA,kDAjBmC,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;MAAA;IAAA;EAAA;AAsB7E;AAEA,eAAe,UAAU","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["widgets/WidgetPills.tsx"],"sourcesContent":["import { text } from \"@k2b/stdlib\";\nimport { For, type JSX, Show } from \"solid-js\";\nimport { useLocale } from \"../intl/locale\";\nimport type { WidgetTone } from \"./WidgetHero\";\n\nexport type WidgetPill = {\n label: string;\n value: string | number;\n tone?: WidgetTone;\n href?: string;\n};\n\nexport type WidgetPillsProps = {\n pills: readonly WidgetPill[];\n grow?: boolean;\n};\n\nfunction Content(props: { pill: WidgetPill }): JSX.Element {\n const locale = useLocale();\n return (\n <>\n <span class=\"k2b-widget-pill__label\">{props.pill.label}</span>\n <span class=\"k2b-widget-pill__value\">\n {typeof props.pill.value === \"number\" ? text.pprintNumber(props.pill.value, { locale: locale() }) : props.pill.value}\n </span>\n </>\n );\n}\n\nexport function WidgetPills(props: WidgetPillsProps): JSX.Element {\n return (\n <div class=\"k2b-widget-pills\" data-grow={props.grow ? \"true\" : undefined}>\n <For each={props.pills}>\n {(pill) => (\n <Show\n when={pill.href}\n fallback={\n <span class=\"k2b-widget-pill\" data-tone={pill.tone ?? \"zinc\"}>\n <Content pill={pill} />\n </span>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-widget-pill\" data-tone={pill.tone ?? \"zinc\"}>\n <Content pill={pill} />\n </a>\n )}\n </Show>\n )}\n </For>\n </div>\n );\n}\n\nexport default WidgetPills;\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,GAAG,EAAY,IAAI,QAAQ,UAAU;AAC9C,SAAS,SAAS,QAAQ,gBAAgB;AAe1C,SAAS,OAAO,CAAC,KAA2B,EAAe;EACzD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B;IAAA;IAAA,qBAE0C,KAAK,CAAC,IAAI,CAAC,KAAK;IAAA;EAAA;IAAA;IAAA;MAAA,uBAEnD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;MAAA,aAApC,QAAuC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;MAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK;IAAA;IAAA;EAAA;AAI5H;AAEA,OAAO,SAAS,WAAW,CAAC,KAAuB,EAAe;EAChE;IAAA;IAAA,kCAEK,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK;MAAA;MAAA,UAClB,IAAI,sBACH,IAAI;QAAA,IACH,IAAI;UAAA,OAAE,IAAI,CAAC,IAAI;QAAA;QAAA,IACf,QAAQ;UAAA;YAAA;YAAA,kCAEH,OAAO;cAAC,IAAI,EAAE;YAAI;YAAA,kDADoB,IAAI,CAAC,IAAI,IAAI,MAAM;YAAA;UAAA;QAAA;QAAA,UAK5D,IAAI;UAAA;UAAA,kCAED,OAAO;YAAC,IAAI,EAAE;UAAI;UAAA;YAAA,UADZ,IAAI,CAAC,CAAC;cAAA,OAAqC,IAAI,CAAC,IAAI,IAAI,MAAM;YAAA;YAAA;YAAA;UAAA;YAAA;YAAA;UAAA;UAAA;QAAA;MAGxE;IAEJ;IAAA,kDAjBoC,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;IAAA;EAAA;AAqB5E;AAEA,eAAe,WAAW","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["widgets/WidgetStat.tsx"],"sourcesContent":["import { text } from \"@k2b/stdlib\";\nimport { type JSX, Show } from \"solid-js\";\nimport { useLocale } from \"../intl/locale\";\nimport type { WidgetTone } from \"./WidgetHero\";\n\nexport type WidgetStatAccent = {\n tone: WidgetTone;\n icon: string;\n text?: string;\n};\n\nexport type WidgetStatProps = {\n value: string | number;\n label: string;\n sub?: string;\n valueClass?: string;\n accent?: WidgetStatAccent;\n grow?: boolean;\n};\n\nexport function WidgetStat(props: WidgetStatProps): JSX.Element {\n const locale = useLocale();\n return (\n <div class=\"k2b-widget-stat\" data-grow={props.grow ? \"true\" : undefined}>\n <span class=\"k2b-widget-stat__label\">{props.label}</span>\n <span class={`k2b-widget-stat__value ${props.valueClass ?? \"\"}`}>\n {typeof props.value === \"number\" ? text.pprintNumber(props.value, { locale: locale() }) : props.value}\n </span>\n <Show when={props.sub || props.accent}>\n <div class=\"k2b-widget-stat__support\">\n <Show when={props.sub}>{(sub) => <span class=\"k2b-widget-stat__sub\">{sub()}</span>}</Show>\n <Show when={props.accent}>\n {(accent) => (\n <Show\n when={accent().text}\n fallback={<i class={`${accent().icon} k2b-widget-stat__accent-icon`} data-tone={accent().tone} aria-hidden=\"true\" />}\n >\n {(text) => (\n <span class=\"k2b-widget-stat__accent\" data-tone={accent().tone}>\n <i class={accent().icon} aria-hidden=\"true\" />\n {text()}\n </span>\n )}\n </Show>\n )}\n </Show>\n </div>\n </Show>\n </div>\n );\n}\n\nexport default WidgetStat;\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,SAAS,QAAQ,gBAAgB;AAkB1C,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA,sBAE0C,KAAK,CAAC,KAAK;IAAA;MAAA,uBAE9C,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;MAAA,aAA/B,QAAkC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;MAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK;IAAA;IAAA,iCAEtG,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM;MAAA;MAAA;QAAA;UAAA;UAAA;UAAA;UAAA;QAAA,kCAEhC,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,GAAG;UAAA;UAAA,UAAI,GAAG;YAAA;YAAA,gBAAyC,GAAG;YAAA;UAAA;QAAU;QAAA,kCACjF,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,MAAM;UAAA;UAAA,UACpB,MAAM,sBACL,IAAI;YAAA,IACH,IAAI;cAAA,OAAE,MAAM,CAAC,CAAC,CAAC,IAAI;YAAA;YAAA,IACnB,QAAQ;cAAA;gBAAA;gBAAA;kBAAA,WAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,+BAA+B;oBAAA,OAAa,MAAM,CAAC,CAAC,CAAC,IAAI;kBAAA;kBAAA;kBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;YAAA;YAAA,UAE3F,IAAI;cAAA;gBAAA;gBAAA;gBAAA;cAAA,iBAGD,IAAI;cAAA;gBAAA,WAF0C,MAAM,CAAC,CAAC,CAAC,IAAI;kBAAA,OAClD,MAAM,CAAC,CAAC,CAAC,IAAI;gBAAA;gBAAA;gBAAA;cAAA;gBAAA;gBAAA;cAAA;cAAA;YAAA;UAG1B;QAEJ;QAAA;MAAA;IAAA;IAAA;MAAA,UArB+B,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;QAAA,OAExD,0BAA0B,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAyBrE;AAEA,eAAe,UAAU","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["widgets/WidgetStatus.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type WidgetStatusTone = Extract<IntentTone, \"info\" | \"success\" | \"warning\" | \"danger\">;\n\nexport type WidgetStatusProps = {\n tone: WidgetStatusTone;\n title: string;\n message?: string;\n icon?: string;\n grow?: boolean;\n};\n\nconst DEFAULT_ICONS: Record<WidgetStatusTone, string> = {\n success: \"ti ti-circle-check\",\n warning: \"ti ti-alert-triangle\",\n danger: \"ti ti-alert-circle\",\n info: \"ti ti-info-circle\",\n};\n\nexport function WidgetStatus(props: WidgetStatusProps): JSX.Element {\n return (\n <div class=\"k2b-widget-status\" data-tone={props.tone} data-grow={props.grow ? \"true\" : undefined}>\n <i class={`${props.icon ?? DEFAULT_ICONS[props.tone]} k2b-widget-status__icon`} aria-hidden=\"true\" />\n <div class=\"k2b-widget-status__copy\">\n <span class=\"k2b-widget-status__title\">{props.title}</span>\n <Show when={props.message}>{(message) => <span class=\"k2b-widget-status__message\">{message()}</span>}</Show>\n </div>\n </div>\n );\n}\n\nexport default WidgetStatus;\n"],"mappings":";;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAazC,MAAM,aAA+C,GAAG;EACtD,OAAO,EAAE,oBAAoB;EAC7B,OAAO,EAAE,sBAAsB;EAC/B,MAAM,EAAE,oBAAoB;EAC5B,IAAI,EAAE;AACR,CAAC;AAED,OAAO,SAAS,YAAY,CAAC,KAAwB,EAAe;EAClE;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,sBAI8C,KAAK,CAAC,KAAK;IAAA,kCAClD,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,OAAO;MAAA;MAAA,UAAI,OAAO;QAAA;QAAA,gBAA+C,OAAO;QAAA;MAAA;IAAU;IAAA;MAAA,UAJ9D,KAAK,CAAC,IAAI;QAAA,OAAa,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;QAAA,OACpF,GAAG,KAAK,CAAC,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAOpF;AAEA,eAAe,YAAY","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ssrElement as _$ssrElement } 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 { escape as _$escape } from "solid-js/web";
|
|
4
5
|
import { createComponent as _$createComponent } from "solid-js/web";
|
|
5
6
|
import { ssr as _$ssr } from "solid-js/web";
|
|
@@ -47,7 +48,7 @@ export function Button(props) {
|
|
|
47
48
|
}
|
|
48
49
|
})), _$ssr(_tmpl$2, _$escape(_$createComponent(Show, {
|
|
49
50
|
get when() {
|
|
50
|
-
return local.loading && local.loadingLabel;
|
|
51
|
+
return _$memo(() => !!local.loading)() && local.loadingLabel;
|
|
51
52
|
},
|
|
52
53
|
get fallback() {
|
|
53
54
|
return local.children;
|
|
@@ -58,7 +59,7 @@ export function Button(props) {
|
|
|
58
59
|
})))], false);
|
|
59
60
|
return [control, _$createComponent(Show, {
|
|
60
61
|
get when() {
|
|
61
|
-
return local.tooltip !== false && local.tooltip !== undefined;
|
|
62
|
+
return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
|
|
62
63
|
},
|
|
63
64
|
get children() {
|
|
64
65
|
return _$createComponent(Tooltip, {
|
|
@@ -90,7 +91,7 @@ export function ButtonLink(props) {
|
|
|
90
91
|
const content = _$ssr(_tmpl$2, _$escape(local.children));
|
|
91
92
|
const tooltip = () => _$createComponent(Show, {
|
|
92
93
|
get when() {
|
|
93
|
-
return local.tooltip !== false && local.tooltip !== undefined;
|
|
94
|
+
return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
|
|
94
95
|
},
|
|
95
96
|
get children() {
|
|
96
97
|
return _$createComponent(Tooltip, {
|
|
@@ -166,7 +167,7 @@ export function IconButton(props) {
|
|
|
166
167
|
return `k2b-icon-button ${local.class ?? ""}`;
|
|
167
168
|
},
|
|
168
169
|
get ["aria-label"]() {
|
|
169
|
-
return local.loading ? local.loadingLabel ?? local.label : local.label;
|
|
170
|
+
return _$memo(() => !!local.loading)() ? local.loadingLabel ?? local.label : local.label;
|
|
170
171
|
},
|
|
171
172
|
get title() {
|
|
172
173
|
return rest.title ?? (local.tooltip === undefined ? local.label : undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Link","Show","splitProps","Tooltip","buttonClass","className","filter","Boolean","join","Button","props","local","rest","target","setRef","element","ref","control","_$ssrElement","_$mergeProps","type","class","data-size","size","data-variant","variant","data-wrap","wrap","undefined","disabled","loading","aria-busy","_$escape","_$createComponent","when","children","_$ssr","_tmpl$","_tmpl$2","loadingLabel","fallback","tooltip","content","delay","tooltipDelay","placement","tooltipPlacement","ButtonLink","navigation","href","onNavigate","onClick","replace","scroll","IconButton","aria-label","label","title","IconButtonLink"],"sources":["actions/Button.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent, type NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport { type JSX, Show, splitProps } from \"solid-js\";\nimport { Tooltip, type TooltipPlacement } from \"../feedback/Tooltip\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"text\" | \"subtle\" | \"input\" | \"warning\" | \"danger\" | \"success\" | \"ai\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport type ButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n /** Allow a deliberately long or rich label to wrap. Defaults to false. */\n wrap?: boolean;\n loading?: boolean;\n loadingLabel?: string;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nexport type ButtonLinkProps = Omit<JSX.AnchorHTMLAttributes<HTMLAnchorElement>, \"onClick\"> & {\n /** Allow a deliberately long or rich label to wrap. Defaults to false. */\n wrap?: boolean;\n navigation?: \"document\" | \"enhanced\";\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n replace?: boolean;\n scroll?: NavigationScrollMode;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nconst buttonClass = (className?: string): string => [\"k2b-button\", className].filter(Boolean).join(\" \");\n\nexport function Button(props: ButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"disabled\",\n \"loading\",\n \"loadingLabel\",\n \"ref\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"type\",\n \"variant\",\n \"wrap\",\n ]);\n let target: HTMLButtonElement | undefined;\n const setRef = (element: HTMLButtonElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n\n const control = (\n <button\n {...rest}\n ref={setRef}\n type={local.type ?? \"button\"}\n class={buttonClass(local.class)}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n <Show when={local.loading}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n <span class=\"k2b-button__label\">\n <Show when={local.loading && local.loadingLabel} fallback={local.children}>\n {local.loadingLabel}\n </Show>\n </span>\n </button>\n );\n\n return (\n <>\n {control}\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip\n content={local.tooltip as JSX.Element}\n target={() => target}\n delay={local.tooltipDelay}\n disabled={local.disabled || local.loading}\n placement={local.tooltipPlacement}\n />\n </Show>\n </>\n );\n}\n\nexport function ButtonLink(props: ButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"href\",\n \"navigation\",\n \"onClick\",\n \"onNavigate\",\n \"replace\",\n \"ref\",\n \"scroll\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"variant\",\n \"wrap\",\n ]);\n let target: HTMLAnchorElement | undefined;\n const setRef = (element: HTMLAnchorElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n const className = buttonClass(local.class);\n const content = <span class=\"k2b-button__label\">{local.children}</span>;\n\n const tooltip = () => (\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip content={local.tooltip as JSX.Element} target={() => target} delay={local.tooltipDelay} placement={local.tooltipPlacement} />\n </Show>\n );\n\n if (local.navigation === \"enhanced\" && local.href && local.onNavigate) {\n return (\n <>\n <Link\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n onClick={local.onClick}\n onNavigate={local.onNavigate}\n replace={local.replace}\n scroll={local.scroll}\n >\n {content}\n </Link>\n {tooltip()}\n </>\n );\n }\n\n return (\n <>\n <a\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n onClick={local.onClick}\n >\n {content}\n </a>\n {tooltip()}\n </>\n );\n}\n\nexport type IconButtonProps = Omit<ButtonProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport type IconButtonLinkProps = Omit<ButtonLinkProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport function IconButton(props: IconButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"loading\", \"loadingLabel\", \"tooltip\", \"variant\"]);\n\n return (\n <Button\n {...rest}\n loading={local.loading}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.loading ? (local.loadingLabel ?? local.label) : local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n <Show when={!local.loading}>{local.children}</Show>\n </Button>\n );\n}\n\nexport function IconButtonLink(props: IconButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"tooltip\", \"variant\"]);\n\n return (\n <ButtonLink\n {...rest}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n {local.children}\n </ButtonLink>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["actions/Button.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent, type NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport { type JSX, Show, splitProps } from \"solid-js\";\nimport { Tooltip, type TooltipPlacement } from \"../feedback/Tooltip\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"text\" | \"subtle\" | \"input\" | \"warning\" | \"danger\" | \"success\" | \"ai\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport type ButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n /** Allow a deliberately long or rich label to wrap. Defaults to false. */\n wrap?: boolean;\n loading?: boolean;\n loadingLabel?: string;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nexport type ButtonLinkProps = Omit<JSX.AnchorHTMLAttributes<HTMLAnchorElement>, \"onClick\"> & {\n /** Allow a deliberately long or rich label to wrap. Defaults to false. */\n wrap?: boolean;\n navigation?: \"document\" | \"enhanced\";\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n replace?: boolean;\n scroll?: NavigationScrollMode;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nconst buttonClass = (className?: string): string => [\"k2b-button\", className].filter(Boolean).join(\" \");\n\nexport function Button(props: ButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"disabled\",\n \"loading\",\n \"loadingLabel\",\n \"ref\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"type\",\n \"variant\",\n \"wrap\",\n ]);\n let target: HTMLButtonElement | undefined;\n const setRef = (element: HTMLButtonElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n\n const control = (\n <button\n {...rest}\n ref={setRef}\n type={local.type ?? \"button\"}\n class={buttonClass(local.class)}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n <Show when={local.loading}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n <span class=\"k2b-button__label\">\n <Show when={local.loading && local.loadingLabel} fallback={local.children}>\n {local.loadingLabel}\n </Show>\n </span>\n </button>\n );\n\n return (\n <>\n {control}\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip\n content={local.tooltip as JSX.Element}\n target={() => target}\n delay={local.tooltipDelay}\n disabled={local.disabled || local.loading}\n placement={local.tooltipPlacement}\n />\n </Show>\n </>\n );\n}\n\nexport function ButtonLink(props: ButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"href\",\n \"navigation\",\n \"onClick\",\n \"onNavigate\",\n \"replace\",\n \"ref\",\n \"scroll\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"variant\",\n \"wrap\",\n ]);\n let target: HTMLAnchorElement | undefined;\n const setRef = (element: HTMLAnchorElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n const className = buttonClass(local.class);\n const content = <span class=\"k2b-button__label\">{local.children}</span>;\n\n const tooltip = () => (\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip content={local.tooltip as JSX.Element} target={() => target} delay={local.tooltipDelay} placement={local.tooltipPlacement} />\n </Show>\n );\n\n if (local.navigation === \"enhanced\" && local.href && local.onNavigate) {\n return (\n <>\n <Link\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n onClick={local.onClick}\n onNavigate={local.onNavigate}\n replace={local.replace}\n scroll={local.scroll}\n >\n {content}\n </Link>\n {tooltip()}\n </>\n );\n }\n\n return (\n <>\n <a\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n onClick={local.onClick}\n >\n {content}\n </a>\n {tooltip()}\n </>\n );\n}\n\nexport type IconButtonProps = Omit<ButtonProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport type IconButtonLinkProps = Omit<ButtonLinkProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport function IconButton(props: IconButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"loading\", \"loadingLabel\", \"tooltip\", \"variant\"]);\n\n return (\n <Button\n {...rest}\n loading={local.loading}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.loading ? (local.loadingLabel ?? local.label) : local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n <Show when={!local.loading}>{local.children}</Show>\n </Button>\n );\n}\n\nexport function IconButtonLink(props: IconButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"tooltip\", \"variant\"]);\n\n return (\n <ButtonLink\n {...rest}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n {local.children}\n </ButtonLink>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createMemo","createSignal","createUniqueId","onCleanup","onMount","Show","Portal","useUiMessages","DropdownItems","dropdownPosition","closeActiveContextMenu","focusableItems","menu","Array","from","querySelectorAll","join","ContextMenu","props","messages","generatedId","menuId","position","setPosition","host","listenersAttached","isOpen","undefined","hostClass","class","items","dismiss","event","contains","target","close","closeOnViewportChange","Node","attachOpenListeners","document","addEventListener","keyDown","window","detachOpenListeners","removeEventListener","onClose","focusItem","index","length","focus","open","x","y","disabled","point","DOMRect","width","height","Math","min","innerWidth","innerHeight","left","top","onOpen","queueMicrotask","current","indexOf","activeElement","key","preventDefault","_$ssr","_tmpl$","_$ssrAttribute","_$escape","id","tabIndex","label","contextMenu","children","_$createComponent","when","_tmpl$2","_$ssrStyleProperty"],"sources":["actions/ContextMenu.tsx"],"sourcesContent":["import { createMemo, createSignal, createUniqueId, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { type DropdownItem, DropdownItems, type DropdownPosition, dropdownPosition } from \"./Dropdown\";\n\nexport type ContextMenuProps = {\n items: readonly DropdownItem[];\n children: JSX.Element;\n class?: string | ((isOpen: boolean) => string);\n /** Tab order of the context-menu host. Descendant-focused composite widgets use -1. */\n tabIndex?: number;\n disabled?: boolean;\n onClose?: () => void;\n onOpen?: () => void;\n id?: string;\n label?: string;\n};\n\nlet closeActiveContextMenu: (() => void) | undefined;\n\nconst focusableItems = (menu: HTMLElement | undefined): HTMLElement[] =>\n menu\n ? Array.from(\n menu.querySelectorAll<HTMLElement>(\n [\n \"[role='menuitem']:not([aria-disabled='true'])\",\n \"[role='menuitemcheckbox']:not([aria-disabled='true'])\",\n \"[role='menuitemradio']:not([aria-disabled='true'])\",\n ].join(\", \"),\n ),\n )\n : [];\n\n/** Right-click menu with keyboard invocation, one-open-at-a-time behavior, and viewport clamping. */\nexport function ContextMenu(props: ContextMenuProps): JSX.Element {\n const messages = useUiMessages();\n const generatedId = `k2b-context-${createUniqueId()}`;\n const menuId = `${generatedId}-menu`;\n const [position, setPosition] = createSignal<{ x: number; y: number }>();\n let host: HTMLDivElement | undefined;\n let menu: HTMLDivElement | undefined;\n let listenersAttached = false;\n\n const isOpen = () => position() !== undefined;\n const hostClass = createMemo(() => (typeof props.class === \"function\" ? props.class(isOpen()) : props.class));\n const items = createMemo<readonly DropdownItem[]>(() => props.items);\n\n const dismiss = (event: PointerEvent) => {\n if (menu?.contains(event.target as Node)) return;\n close();\n };\n const closeOnViewportChange = (event: Event) => {\n const target = event.target;\n if (target instanceof Node && menu?.contains(target)) return;\n close();\n };\n const attachOpenListeners = () => {\n if (listenersAttached) return;\n listenersAttached = true;\n document.addEventListener(\"pointerdown\", dismiss);\n document.addEventListener(\"keydown\", keyDown);\n window.addEventListener(\"resize\", closeOnViewportChange);\n window.addEventListener(\"scroll\", closeOnViewportChange, true);\n };\n const detachOpenListeners = () => {\n if (!listenersAttached) return;\n listenersAttached = false;\n document.removeEventListener(\"pointerdown\", dismiss);\n document.removeEventListener(\"keydown\", keyDown);\n window.removeEventListener(\"resize\", closeOnViewportChange);\n window.removeEventListener(\"scroll\", closeOnViewportChange, true);\n };\n const close = () => {\n detachOpenListeners();\n if (!isOpen()) return;\n setPosition();\n if (closeActiveContextMenu === close) closeActiveContextMenu = undefined;\n props.onClose?.();\n };\n const focusItem = (index: number) => {\n const items = focusableItems(menu);\n if (items.length === 0) return;\n items[(index + items.length) % items.length]?.focus();\n };\n const open = (x: number, y: number) => {\n if (props.disabled) return;\n closeActiveContextMenu?.();\n const point = dropdownPosition(\n new DOMRect(x, y, 0, 0),\n // Matches the fixed 13rem `.k2b-context-menu` surface (border-box).\n { width: 208, height: Math.min(items().length * 38 + 12, 384) },\n \"bottom-right\" satisfies DropdownPosition,\n { width: window.innerWidth, height: window.innerHeight },\n 0,\n );\n setPosition({ x: point.left, y: point.top });\n closeActiveContextMenu = close;\n attachOpenListeners();\n props.onOpen?.();\n queueMicrotask(() => {\n focusItem(0);\n });\n };\n const keyDown = (event: KeyboardEvent) => {\n if (!isOpen()) return;\n const items = focusableItems(menu);\n const current = items.indexOf(document.activeElement as HTMLElement);\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n focusItem(current + (event.key === \"ArrowDown\" ? 1 : -1));\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n focusItem(event.key === \"Home\" ? 0 : -1);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close();\n host?.focus();\n } else if (event.key === \"Tab\") {\n close();\n }\n };\n\n onMount(() => {\n onCleanup(() => {\n detachOpenListeners();\n if (closeActiveContextMenu === close) closeActiveContextMenu = undefined;\n });\n });\n\n return (\n <>\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: the named group owns the context-menu relationship without pretending arbitrary children form one button. */}\n <div\n ref={host}\n id={props.id ?? generatedId}\n class={hostClass()}\n role=\"group\"\n tabIndex={props.disabled ? undefined : (props.tabIndex ?? 0)}\n aria-label={props.label ?? messages().contextMenu}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen()}\n aria-controls={isOpen() ? menuId : undefined}\n aria-disabled={props.disabled ? \"true\" : undefined}\n onContextMenu={(event) => {\n if (props.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n open(event.clientX, event.clientY);\n }}\n onKeyDown={(event) => {\n if (props.disabled || (event.key !== \"ContextMenu\" && !(event.shiftKey && event.key === \"F10\"))) return;\n event.preventDefault();\n const rect = host?.getBoundingClientRect();\n if (rect) open(rect.left + 12, rect.top + 12);\n }}\n >\n {props.children}\n </div>\n <Show when={position()}>\n {(point) => (\n <Portal>\n <div\n ref={menu}\n id={menuId}\n class=\"k2b-ui k2b-context-menu\"\n role=\"menu\"\n aria-label={props.label ?? messages().contextMenu}\n style={{ left: `${point().x}px`, top: `${point().y}px` }}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <DropdownItems items={items()} close={close} />\n </div>\n </Portal>\n )}\n </Show>\n </>\n );\n}\n\nexport default ContextMenu;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["actions/ContextMenu.tsx"],"sourcesContent":["import { createMemo, createSignal, createUniqueId, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { type DropdownItem, DropdownItems, type DropdownPosition, dropdownPosition } from \"./Dropdown\";\n\nexport type ContextMenuProps = {\n items: readonly DropdownItem[];\n children: JSX.Element;\n class?: string | ((isOpen: boolean) => string);\n /** Tab order of the context-menu host. Descendant-focused composite widgets use -1. */\n tabIndex?: number;\n disabled?: boolean;\n onClose?: () => void;\n onOpen?: () => void;\n id?: string;\n label?: string;\n};\n\nlet closeActiveContextMenu: (() => void) | undefined;\n\nconst focusableItems = (menu: HTMLElement | undefined): HTMLElement[] =>\n menu\n ? Array.from(\n menu.querySelectorAll<HTMLElement>(\n [\n \"[role='menuitem']:not([aria-disabled='true'])\",\n \"[role='menuitemcheckbox']:not([aria-disabled='true'])\",\n \"[role='menuitemradio']:not([aria-disabled='true'])\",\n ].join(\", \"),\n ),\n )\n : [];\n\n/** Right-click menu with keyboard invocation, one-open-at-a-time behavior, and viewport clamping. */\nexport function ContextMenu(props: ContextMenuProps): JSX.Element {\n const messages = useUiMessages();\n const generatedId = `k2b-context-${createUniqueId()}`;\n const menuId = `${generatedId}-menu`;\n const [position, setPosition] = createSignal<{ x: number; y: number }>();\n let host: HTMLDivElement | undefined;\n let menu: HTMLDivElement | undefined;\n let listenersAttached = false;\n\n const isOpen = () => position() !== undefined;\n const hostClass = createMemo(() => (typeof props.class === \"function\" ? props.class(isOpen()) : props.class));\n const items = createMemo<readonly DropdownItem[]>(() => props.items);\n\n const dismiss = (event: PointerEvent) => {\n if (menu?.contains(event.target as Node)) return;\n close();\n };\n const closeOnViewportChange = (event: Event) => {\n const target = event.target;\n if (target instanceof Node && menu?.contains(target)) return;\n close();\n };\n const attachOpenListeners = () => {\n if (listenersAttached) return;\n listenersAttached = true;\n document.addEventListener(\"pointerdown\", dismiss);\n document.addEventListener(\"keydown\", keyDown);\n window.addEventListener(\"resize\", closeOnViewportChange);\n window.addEventListener(\"scroll\", closeOnViewportChange, true);\n };\n const detachOpenListeners = () => {\n if (!listenersAttached) return;\n listenersAttached = false;\n document.removeEventListener(\"pointerdown\", dismiss);\n document.removeEventListener(\"keydown\", keyDown);\n window.removeEventListener(\"resize\", closeOnViewportChange);\n window.removeEventListener(\"scroll\", closeOnViewportChange, true);\n };\n const close = () => {\n detachOpenListeners();\n if (!isOpen()) return;\n setPosition();\n if (closeActiveContextMenu === close) closeActiveContextMenu = undefined;\n props.onClose?.();\n };\n const focusItem = (index: number) => {\n const items = focusableItems(menu);\n if (items.length === 0) return;\n items[(index + items.length) % items.length]?.focus();\n };\n const open = (x: number, y: number) => {\n if (props.disabled) return;\n closeActiveContextMenu?.();\n const point = dropdownPosition(\n new DOMRect(x, y, 0, 0),\n // Matches the fixed 13rem `.k2b-context-menu` surface (border-box).\n { width: 208, height: Math.min(items().length * 38 + 12, 384) },\n \"bottom-right\" satisfies DropdownPosition,\n { width: window.innerWidth, height: window.innerHeight },\n 0,\n );\n setPosition({ x: point.left, y: point.top });\n closeActiveContextMenu = close;\n attachOpenListeners();\n props.onOpen?.();\n queueMicrotask(() => {\n focusItem(0);\n });\n };\n const keyDown = (event: KeyboardEvent) => {\n if (!isOpen()) return;\n const items = focusableItems(menu);\n const current = items.indexOf(document.activeElement as HTMLElement);\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n focusItem(current + (event.key === \"ArrowDown\" ? 1 : -1));\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n focusItem(event.key === \"Home\" ? 0 : -1);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close();\n host?.focus();\n } else if (event.key === \"Tab\") {\n close();\n }\n };\n\n onMount(() => {\n onCleanup(() => {\n detachOpenListeners();\n if (closeActiveContextMenu === close) closeActiveContextMenu = undefined;\n });\n });\n\n return (\n <>\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: the named group owns the context-menu relationship without pretending arbitrary children form one button. */}\n <div\n ref={host}\n id={props.id ?? generatedId}\n class={hostClass()}\n role=\"group\"\n tabIndex={props.disabled ? undefined : (props.tabIndex ?? 0)}\n aria-label={props.label ?? messages().contextMenu}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen()}\n aria-controls={isOpen() ? menuId : undefined}\n aria-disabled={props.disabled ? \"true\" : undefined}\n onContextMenu={(event) => {\n if (props.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n open(event.clientX, event.clientY);\n }}\n onKeyDown={(event) => {\n if (props.disabled || (event.key !== \"ContextMenu\" && !(event.shiftKey && event.key === \"F10\"))) return;\n event.preventDefault();\n const rect = host?.getBoundingClientRect();\n if (rect) open(rect.left + 12, rect.top + 12);\n }}\n >\n {props.children}\n </div>\n <Show when={position()}>\n {(point) => (\n <Portal>\n <div\n ref={menu}\n id={menuId}\n class=\"k2b-ui k2b-context-menu\"\n role=\"menu\"\n aria-label={props.label ?? messages().contextMenu}\n style={{ left: `${point().x}px`, top: `${point().y}px` }}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <DropdownItems items={items()} close={close} />\n </div>\n </Portal>\n )}\n </Show>\n </>\n );\n}\n\nexport default ContextMenu;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,6 +3,7 @@ import { mergeProps as _$mergeProps } from "solid-js/web";
|
|
|
3
3
|
import { ssr as _$ssr } from "solid-js/web";
|
|
4
4
|
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
5
5
|
import { escape as _$escape } from "solid-js/web";
|
|
6
|
+
import { memo as _$memo } from "solid-js/web";
|
|
6
7
|
var _tmpl$ = ["<i", " aria-hidden=\"true\"></i>"],
|
|
7
8
|
_tmpl$2 = ["<span>", "</span>"],
|
|
8
9
|
_tmpl$3 = ["<span class=\"k2b-sr-only\" aria-live=\"polite\">", "</span>"];
|
|
@@ -66,7 +67,7 @@ export function CopyButton(props) {
|
|
|
66
67
|
return local.loading ? "true" : undefined;
|
|
67
68
|
},
|
|
68
69
|
get ["aria-label"]() {
|
|
69
|
-
return iconOnly() ? buttonLabel() : undefined;
|
|
70
|
+
return _$memo(() => !!iconOnly())() ? buttonLabel() : undefined;
|
|
70
71
|
},
|
|
71
72
|
onClick: copy,
|
|
72
73
|
get children() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["actions/CopyButton.tsx"],"sourcesContent":["import { copyToClipboard } from \"@k2b/stdlib/browser\";\nimport { createSignal, type JSX, onCleanup, splitProps } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Button, type ButtonProps } from \"./Button\";\n\nexport type CopyButtonValue = { text: string; value?: string } | { text?: string; value: string };\n\nexport type CopyButtonProps = CopyButtonValue &\n Omit<ButtonProps, \"children\" | \"onClick\"> & {\n label?: string;\n copiedLabel?: string;\n iconOnly?: boolean;\n onCopied?: () => void;\n onCopyError?: (error: unknown) => void;\n resetAfter?: number;\n };\n\nexport async function copyText(\n text: string,\n onCopyError?: (error: unknown) => void,\n copy: (text: string) => Promise<void> = copyToClipboard,\n): Promise<void> {\n try {\n await copy(text);\n } catch (error) {\n onCopyError?.(error);\n throw error;\n }\n}\n\nexport function CopyButton(props: CopyButtonProps): JSX.Element {\n const messages = useUiMessages();\n const [local, rest] = splitProps(props, [\n \"class\",\n \"copiedLabel\",\n \"disabled\",\n \"iconOnly\",\n \"label\",\n \"loading\",\n \"loadingLabel\",\n \"onCopied\",\n \"onCopyError\",\n \"resetAfter\",\n \"size\",\n \"text\",\n \"type\",\n \"value\",\n \"variant\",\n ]);\n const [copied, setCopied] = createSignal(false);\n let resetTimer: ReturnType<typeof setTimeout> | undefined;\n\n onCleanup(() => {\n if (resetTimer) clearTimeout(resetTimer);\n });\n\n const copy = async () => {\n // `copyText` reports through `onCopyError` and then rethrows so direct\n // callers can await it. The click handler is not awaited by anyone, so it\n // has to absorb the rejection here — otherwise a denied clipboard\n // permission surfaces as an unhandled rejection despite `onCopyError`.\n try {\n await copyText(local.text ?? local.value ?? \"\", local.onCopyError);\n } catch {\n return;\n }\n setCopied(true);\n local.onCopied?.();\n if (resetTimer) clearTimeout(resetTimer);\n resetTimer = setTimeout(() => setCopied(false), local.resetAfter ?? 2000);\n };\n\n const visibleLabel = () => (copied() ? (local.copiedLabel ?? messages().copied) : (local.label ?? messages().copy));\n const icon = () => (copied() ? \"ti ti-check\" : \"ti ti-copy\");\n const iconOnly = () => local.iconOnly ?? local.label === undefined;\n const buttonLabel = () => (local.loading && local.loadingLabel ? local.loadingLabel : visibleLabel());\n const button = (tooltip?: string) => (\n <Button\n {...rest}\n tooltip={tooltip}\n disabled={local.disabled || local.loading}\n type={local.type ?? \"button\"}\n class={`k2b-copy-button ${local.class ?? \"\"}`}\n size={local.size ?? \"sm\"}\n variant={local.variant ?? \"ghost\"}\n aria-busy={local.loading ? \"true\" : undefined}\n aria-label={iconOnly() ? buttonLabel() : undefined}\n onClick={copy}\n >\n <i class={local.loading ? \"ti ti-loader-2 k2b-spin\" : icon()} aria-hidden=\"true\" />\n {!iconOnly() && <span>{buttonLabel()}</span>}\n </Button>\n );\n\n return iconOnly() ? (\n <>\n {button(visibleLabel())}\n <span class=\"k2b-sr-only\" aria-live=\"polite\">\n {copied() ? visibleLabel() : \"\"}\n </span>\n </>\n ) : (\n button(undefined)\n );\n}\n\nexport default CopyButton;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["actions/Disclosure.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, Show } from \"solid-js\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { resolveMaybeAccessor } from \"../inputs/field-contract\";\n\nexport type DisclosureProps = {\n summary: JSX.Element;\n surface?: \"paper\" | \"plain\";\n children: JSX.Element;\n value?: MaybeAccessor<boolean>;\n defaultValue?: boolean;\n onValueChange?: (value: boolean) => void;\n icon?: string;\n disabled?: boolean;\n class?: string;\n};\n\n/** Native disclosure with the same value/onValueChange vocabulary as other controls. */\nexport function Disclosure(props: DisclosureProps): JSX.Element {\n const controlled = () => props.value !== undefined;\n const [internal, setInternal] = createSignal(props.defaultValue ?? false);\n const open = () => (controlled() ? Boolean(resolveMaybeAccessor(props.value)) : internal());\n let details: HTMLDetailsElement | undefined;\n\n createEffect(() => {\n if (details && details.open !== open()) details.open = open();\n });\n\n return (\n <details\n ref={details}\n class={`k2b-disclosure ${props.class ?? \"\"}`}\n data-surface={props.surface ?? \"paper\"}\n open={open()}\n data-disabled={props.disabled ? \"true\" : undefined}\n onToggle={(event) => {\n if (props.disabled) {\n event.currentTarget.open = open();\n return;\n }\n const next = event.currentTarget.open;\n // A controlled owner may change `value` without user input. Reflecting\n // that value onto <details> emits a native toggle event; it must not be\n // reported back as a second user change.\n if (controlled() && next === open()) return;\n if (!controlled()) setInternal(next);\n props.onValueChange?.(next);\n }}\n >\n {/* biome-ignore lint/a11y/noStaticElementInteractions: summary is the native interactive trigger for details. */}\n <summary aria-disabled={props.disabled ? \"true\" : undefined} onClick={(event) => props.disabled && event.preventDefault()}>\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{props.summary}</span>\n <i class=\"ti ti-chevron-down k2b-disclosure__chevron\" aria-hidden=\"true\" />\n </summary>\n <div class=\"k2b-disclosure__content\">{props.children}</div>\n </details>\n );\n}\n\nexport default Disclosure;\n"],"mappings":";;;;;;AAAA,SAAS,YAAY,EAAE,YAAY,EAAY,IAAI,QAAQ,UAAU;AAErE,SAAS,oBAAoB,QAAQ,0BAA0B;AAc/D;AACA,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,KAAK,KAAK,SAAS;EAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC;EACzE,MAAM,IAAI,GAAG,MAAO,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAE;EAC3F,IAAI,OAAuC;EAE3C,YAAY,CAAC,MAAM;IACjB,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;EAC/D,CAAC,CAAC;EAEF,qBAGW,2BAAkB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,0CAC9B,KAAK,CAAC,OAAO,IAAI,OAAO,wCAChC,IAAI,CAAC,CAAC,0CACG,KAAK,CAAC,QAAQ,GAAG,MAAM,YAAG,SAAS,iDAgB1B,KAAK,CAAC,QAAQ,GAAG,MAAM,YAAG,SAAS,4CACxD,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA,UAAI,IAAI,oDAAe,IAAI,CAAC,CAAC;EAAuB,cACnE,KAAK,CAAC,OAAO,YAGgB,KAAK,CAAC,QAAQ;AAG1D;AAEA,eAAe,UAAU","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@ import { ssrStyle as _$ssrStyle } from "solid-js/web";
|
|
|
2
2
|
import { ssrElement as _$ssrElement } from "solid-js/web";
|
|
3
3
|
import { mergeProps as _$mergeProps } from "solid-js/web";
|
|
4
4
|
import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
|
|
5
|
+
import { memo as _$memo } from "solid-js/web";
|
|
5
6
|
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
6
7
|
import { ssr as _$ssr } from "solid-js/web";
|
|
7
8
|
import { escape as _$escape } from "solid-js/web";
|
|
@@ -77,7 +78,7 @@ export function DropdownItem(props) {
|
|
|
77
78
|
const content = itemContent(props);
|
|
78
79
|
return _$createComponent(Show, {
|
|
79
80
|
get when() {
|
|
80
|
-
return
|
|
81
|
+
return _$memo(() => !!!props.disabled)() ? props.href : undefined;
|
|
81
82
|
},
|
|
82
83
|
get fallback() {
|
|
83
84
|
return _$ssr(_tmpl$5, `k2b-dropdown__item ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-danger", danger() ? "true" : _$escape(undefined, true), false), _$ssrAttribute("disabled", props.disabled, true) + _$ssrAttribute("aria-disabled", props.disabled ? "true" : _$escape(undefined, true), false), _$escape(content));
|
|
@@ -128,7 +129,7 @@ function DropdownChoiceItem(props) {
|
|
|
128
129
|
children: description => _$ssr(_tmpl$4, _$escape(description()))
|
|
129
130
|
})), _$escape(_$createComponent(Show, {
|
|
130
131
|
get when() {
|
|
131
|
-
return props.choice === "radio" && checked();
|
|
132
|
+
return _$memo(() => props.choice === "radio")() && checked();
|
|
132
133
|
},
|
|
133
134
|
get children() {
|
|
134
135
|
return _$ssr(_tmpl$9);
|
|
@@ -158,10 +159,10 @@ export function DropdownItems(props) {
|
|
|
158
159
|
return item.class;
|
|
159
160
|
},
|
|
160
161
|
get href() {
|
|
161
|
-
return "href" in item ? item.href : undefined;
|
|
162
|
+
return _$memo(() => "href" in item)() ? item.href : undefined;
|
|
162
163
|
},
|
|
163
164
|
get external() {
|
|
164
|
-
return "external" in item ? item.external : undefined;
|
|
165
|
+
return _$memo(() => "external" in item)() ? item.external : undefined;
|
|
165
166
|
},
|
|
166
167
|
get onSelect() {
|
|
167
168
|
return selectAction(item);
|
|
@@ -237,7 +238,7 @@ function DropdownTrigger(props) {
|
|
|
237
238
|
return disabled();
|
|
238
239
|
},
|
|
239
240
|
get tabIndex() {
|
|
240
|
-
return disabled() ? -1 : local.tabIndex;
|
|
241
|
+
return _$memo(() => !!disabled())() ? -1 : local.tabIndex;
|
|
241
242
|
},
|
|
242
243
|
onClick: click,
|
|
243
244
|
get onKeyDown() {
|
|
@@ -294,7 +295,7 @@ function DropdownTrigger(props) {
|
|
|
294
295
|
}
|
|
295
296
|
}), _$escape(local.children), false), _$createComponent(Show, {
|
|
296
297
|
get when() {
|
|
297
|
-
return local.tooltip !== false && local.tooltip !== undefined;
|
|
298
|
+
return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
|
|
298
299
|
},
|
|
299
300
|
get children() {
|
|
300
301
|
return _$createComponent(Tooltip, {
|