@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":["createMemo","createSignal","For","Show","createFieldMeta","Field","fieldControlAria","useUiMessages","ChoiceGroups","createChoiceLoader","createChoicePopover","filterChoiceOptions","nextEnabledChoiceIndex","commitFieldValue","resolveMaybeAccessor","normalize","option","value","label","id","Select","props","messages","meta","listboxId","controlId","query","setQuery","focusedIndex","setFocusedIndex","cache","setCache","selectedGroup","setSelectedGroup","defaultGroup","selectedView","setSelectedView","defaultView","searchRef","optionRefs","error","activeGroup","current","groups","some","group","groupChoices","allGroupLabel","all","activeView","viewToggle","loader","fetchData","signal","map","loadOptions","undefined","fetchDebounceMs","debounceMs","isAsync","Boolean","isSearchable","searchable","sourceOptions","options","groupedOptions","filter","includes","filterOptions","selected","find","selectedOption","selectedLabel","hasClearAction","clearable","disabled","accessibleLabel","placeholder","selectOption","popover","focusedOption","focus","index","scrollIntoView","block","move","direction","chooseGroup","load","open","selectedIndex","findIndex","show","queueMicrotask","close","restoreFocus","hide","cancel","select","onKeyDown","event","inToolbar","target","closest","key","preventDefault","clear","stopPropagation","trigger","_$createComponent","class","description","required","children","_el$","_$getNextElement","_tmpl$6","_el$2","firstChild","_el$5","_el$6","_co$","_$getNextMarker","nextSibling","_el$3","_el$4","_el$31","_el$32","_co$9","_el$33","_el$34","_co$0","_el$8","_el$27","_el$28","_co$7","_el$29","_el$30","_co$8","_el$17","_el$21","_el$22","_co$4","_el$23","_el$24","_co$5","_el$25","_el$26","_co$6","_ref$","setTrigger","_$use","_$setAttribute","_$spread","_$mergeProps","aria-expanded","aria-activedescendant","_$memo","data-clearable","onClick","_$insert","when","color","fallback","icon","_el$35","_tmpl$7","_$effect","_$className","_el$36","_tmpl$8","_$p","_$setStyleProperty","name","_el$37","_tmpl$9","_$setProperty","_el$7","_tmpl$","$$click","clearSelection","_$runHydrationEvents","$$keydown","_ref$2","setPopover","_el$9","_tmpl$2","_el$0","_el$1","$$input","currentTarget","_ref$3","_p$","_v$","searchPlaceholder","search","_v$2","searchOptions","_v$3","e","t","a","length","_el$10","_tmpl$4","_el$13","_el$14","_co$2","_el$15","_el$16","_co$3","choices","onValueChange","ariaLabel","groupsAriaLabel","controls","_el$11","_tmpl$3","_el$12","_v$4","showGridView","showListView","_v$5","message","_el$38","_tmpl$0","_el$39","_el$40","_$addEventListener","retry","loading","_el$18","_tmpl$5","_el$19","_el$20","each","_el$41","_tmpl$1","_c$","noResults","noOptions","_el$42","_tmpl$10","_el$47","_el$48","_co$10","_el$43","_el$44","_el$45","_el$46","_co$1","$$pointermove","element","_el$49","_el$50","_el$51","_tmpl$11","_v$10","_v$11","_v$12","_v$13","_v$14","o","i","_v$6","_v$7","_v$8","activeIcon","_v$9","_v$0","_v$1","gridSize","n","_$delegateEvents"],"sources":["inputs/Select.tsx"],"sourcesContent":["import { createMemo, createSignal, For, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChoiceGroups } from \"./ChoiceGroups\";\nimport { type ChoiceOption, createChoiceLoader, createChoicePopover, filterChoiceOptions, nextEnabledChoiceIndex } from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SelectOption = ChoiceOption<string>;\nexport type SelectGroup = {\n value: string;\n label: string;\n};\nexport type SelectView = \"list\" | \"grid\";\nexport type SelectGridSize = \"sm\" | \"md\" | \"lg\";\nexport type SelectSourceOption =\n | string\n | {\n id: string;\n label?: string;\n description?: string;\n icon?: string;\n color?: string;\n groups?: readonly string[];\n }\n | SelectOption;\n\nexport type SelectProps = ValueFieldProps<string | null> & {\n placeholder?: string;\n icon?: string;\n activeIcon?: string;\n options?: SelectSourceOption[];\n fetchData?: (query: string, signal: AbortSignal, group: string | null) => Promise<SelectSourceOption[]>;\n loadOptions?: (query: string, signal: AbortSignal, group: string | null) => Promise<readonly ChoiceOption<string>[]>;\n selectedOption?: ChoiceOption<string>;\n selectedLabel?: () => string | undefined;\n fetchDebounceMs?: number;\n debounceMs?: number;\n searchable?: boolean;\n /** Optional synchronous filter for static options. */\n filterOptions?: (options: readonly SelectOption[], query: string) => readonly SelectOption[];\n /** Optional filters. An option may belong to more than one group. */\n groups?: readonly SelectGroup[];\n /** Group selected when the component is created. Omit to start with all options. */\n defaultGroup?: string;\n groupsAriaLabel?: string;\n allGroupLabel?: string;\n /** Show a local list/grid layout toggle in the dropdown. */\n viewToggle?: boolean;\n /** Initial dropdown layout when `viewToggle` is enabled. */\n defaultView?: SelectView;\n /** Tile density for the grid layout. */\n gridSize?: SelectGridSize;\n searchPlaceholder?: string;\n clearable?: boolean;\n name?: string;\n};\n\ntype NormalizedOption = ChoiceOption<string>;\nconst normalize = (option: SelectSourceOption): NormalizedOption =>\n typeof option === \"string\"\n ? { value: option, label: option }\n : \"value\" in option\n ? option\n : { ...option, value: option.id, label: option.label || option.id };\n\nexport function Select(props: SelectProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [query, setQuery] = createSignal(\"\");\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n const [cache, setCache] = createSignal<Record<string, NormalizedOption>>({});\n const [selectedGroup, setSelectedGroup] = createSignal<string | null>(props.defaultGroup ?? null);\n const [selectedView, setSelectedView] = createSignal<SelectView>(props.defaultView ?? \"list\");\n let searchRef: HTMLInputElement | undefined;\n let optionRefs: HTMLButtonElement[] = [];\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const error = () => resolveMaybeAccessor(props.error);\n const activeGroup = createMemo(() => {\n const current = selectedGroup();\n return current && props.groups?.some((group) => group.value === current) ? current : null;\n });\n const groupChoices = createMemo(() => [{ value: null, label: props.allGroupLabel ?? messages().all }, ...(props.groups ?? [])]);\n const activeView = () => (props.viewToggle ? selectedView() : \"list\");\n\n const loader = createChoiceLoader(\n () =>\n props.fetchData\n ? async (value, signal) => (await props.fetchData!(value, signal, activeGroup())).map(normalize)\n : props.loadOptions\n ? (value, signal) => props.loadOptions!(value, signal, activeGroup())\n : undefined,\n () => props.fetchDebounceMs ?? props.debounceMs ?? 200,\n );\n const isAsync = () => Boolean(props.fetchData || props.loadOptions);\n const isSearchable = () => isAsync() || Boolean(props.searchable);\n const sourceOptions = createMemo(() => (isAsync() ? loader.options() : (props.options ?? []).map(normalize)));\n const groupedOptions = createMemo(() => {\n const group = activeGroup();\n return !isAsync() && group ? sourceOptions().filter((option) => option.groups?.includes(group)) : sourceOptions();\n });\n // Remote loaders filter server-side; a static list has to be filtered here or\n // the search field would render but do nothing.\n const options = createMemo(() =>\n isAsync() || !props.searchable\n ? groupedOptions()\n : props.filterOptions\n ? [...props.filterOptions(groupedOptions(), query())]\n : filterChoiceOptions(groupedOptions(), query()),\n );\n const selected = createMemo(() => {\n const current = value();\n if (current === null) return undefined;\n // Resolve against the unfiltered list so typing in the search field never\n // blanks the trigger label of the current selection.\n return (\n sourceOptions().find((option) => option.value === current) ??\n cache()[current] ??\n (props.selectedOption?.value === current ? props.selectedOption : undefined) ?? {\n value: current,\n label: props.selectedLabel?.() ?? current,\n }\n );\n });\n const hasClearAction = () => Boolean(props.clearable && selected() && !props.disabled);\n const accessibleLabel = () =>\n props[\"aria-label\"] ?? (typeof props.label === \"string\" ? undefined : (props.placeholder ?? messages().selectOption));\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const focusedOption = () => options()[focusedIndex()];\n const focus = (index: number) => {\n setFocusedIndex(index);\n optionRefs[index]?.scrollIntoView({ block: \"nearest\" });\n };\n const move = (direction: 1 | -1) => focus(nextEnabledChoiceIndex(options(), focusedIndex(), direction));\n const chooseGroup = (group: string | null) => {\n if (group === activeGroup()) return;\n setSelectedGroup(group);\n setFocusedIndex(nextEnabledChoiceIndex(options(), -1, 1));\n if (isAsync()) loader.load(query(), true);\n };\n const open = () => {\n if (props.disabled) return;\n setQuery(\"\");\n if (isAsync()) loader.load(\"\", true);\n const selectedIndex = options().findIndex((option) => option.value === value());\n focus(selectedIndex >= 0 ? selectedIndex : nextEnabledChoiceIndex(options(), -1, 1));\n popover.show();\n if (isSearchable()) queueMicrotask(() => searchRef?.focus());\n };\n const close = (restoreFocus = false) => {\n // Hide the top-layer surface before any reactive cleanup or consumer\n // callback can rerender its contents. Selection must feel atomic: the old\n // listbox must never remain visible with the next value.\n popover.hide(restoreFocus);\n loader.cancel();\n setQuery(\"\");\n setFocusedIndex(-1);\n };\n const select = (option: NormalizedOption) => {\n if (option.disabled) return;\n close(true);\n setCache({ ...cache(), [option.value]: option });\n commitFieldValue(props, option.value);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const inToolbar = Boolean((event.target as HTMLElement | null)?.closest?.(\".k2b-choice-toolbar\"));\n if (inToolbar && event.key !== \"Escape\" && event.key !== \"Tab\") return;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) open();\n else move(event.key === \"ArrowDown\" ? 1 : -1);\n } else if ((event.key === \"Enter\" || event.key === \" \") && !popover.open()) {\n event.preventDefault();\n open();\n } else if (event.key === \"Enter\" && focusedOption()) {\n event.preventDefault();\n select(focusedOption()!);\n } else if (event.key === \"Escape\" && popover.open()) {\n // Only swallow Escape while the list is open — a closed select must let\n // the key bubble to an enclosing dialog or drawer.\n event.preventDefault();\n close(true);\n } else if (event.key === \"Tab\" && popover.open()) close();\n };\n const clear = (event: MouseEvent) => {\n event.stopPropagation();\n commitFieldValue(props, null);\n popover.trigger()?.focus();\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-choice-control\" data-invalid={error() ? \"true\" : undefined}>\n <button\n ref={popover.setTrigger}\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-choice-trigger\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n data-clearable={hasClearAction() ? \"true\" : undefined}\n {...fieldControlAria(meta, {\n ...props,\n \"aria-label\": accessibleLabel(),\n })}\n disabled={props.disabled}\n onClick={() => (popover.open() ? close() : open())}\n onKeyDown={onKeyDown}\n >\n <Show\n when={selected()?.color}\n fallback={<Show when={selected()?.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-choice-trigger__value\" data-placeholder={selected() ? undefined : \"true\"}>\n {selected()?.label ?? props.placeholder ?? messages().select}\n </span>\n <i class={popover.open() ? (props.activeIcon ?? \"ti ti-chevron-up\") : (props.icon ?? \"ti ti-chevron-down\")} aria-hidden=\"true\" />\n </button>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value() ?? \"\"} />}</Show>\n <Show when={hasClearAction()}>\n <button\n type=\"button\"\n class=\"k2b-choice-control__clear k2b-input-clear-action\"\n aria-label={messages().clearSelection}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <div\n ref={popover.setPopover}\n popover=\"manual\"\n class=\"k2b-choice-popover\"\n role=\"group\"\n onKeyDown={onKeyDown}\n aria-label={typeof props.label === \"string\" ? props.label : messages().options}\n >\n <Show when={isSearchable()}>\n <div class=\"k2b-choice-search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().searchOptions}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n onInput={(event) => {\n setQuery(event.currentTarget.value);\n if (isAsync()) loader.load(event.currentTarget.value);\n focus(isAsync() ? -1 : nextEnabledChoiceIndex(options(), -1, 1));\n }}\n />\n </div>\n </Show>\n <Show when={(props.groups?.length ?? 0) > 0 || props.viewToggle}>\n <div class=\"k2b-choice-toolbar\">\n <Show when={(props.groups?.length ?? 0) > 0}>\n <ChoiceGroups\n choices={groupChoices()}\n value={activeGroup()}\n onValueChange={chooseGroup}\n ariaLabel={props.groupsAriaLabel ?? messages().filterOptions}\n controls={listboxId}\n />\n </Show>\n <Show when={props.viewToggle}>\n <button\n type=\"button\"\n class=\"k2b-choice-view-toggle\"\n aria-label={activeView() === \"list\" ? messages().showGridView : messages().showListView}\n aria-controls={listboxId}\n onClick={() => setSelectedView(activeView() === \"list\" ? \"grid\" : \"list\")}\n >\n <i class={activeView() === \"list\" ? \"ti ti-category-2\" : \"ti ti-list-details\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Show>\n <div\n id={listboxId}\n class=\"k2b-choice-options\"\n role=\"listbox\"\n data-view={activeView()}\n data-grid-size={activeView() === \"grid\" ? (props.gridSize ?? \"md\") : undefined}\n >\n <Show when={loader.error()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button type=\"button\" onClick={loader.retry}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <Show when={loader.loading() && options().length === 0}>\n <div class=\"k2b-choice-status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span>{messages().loading}</span>\n </div>\n </Show>\n <For\n each={loader.error() ? [] : options()}\n fallback={\n <Show when={!loader.loading() && !loader.error()}>\n <div class=\"k2b-choice-status\">{isSearchable() ? messages().noResults : messages().noOptions}</div>\n </Show>\n }\n >\n {(option, index) => (\n <button\n ref={(element) => (optionRefs[index()] = element)}\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-label={option.label}\n aria-selected={option.value === value()}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n disabled={option.disabled}\n onPointerMove={() => focus(index())}\n onClick={() => select(option)}\n >\n <Show when={option.color} fallback={<Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n </div>\n </Field>\n );\n}\n\nexport default Select;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/Select.tsx"],"sourcesContent":["import { createMemo, createSignal, For, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChoiceGroups } from \"./ChoiceGroups\";\nimport { type ChoiceOption, createChoiceLoader, createChoicePopover, filterChoiceOptions, nextEnabledChoiceIndex } from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SelectOption = ChoiceOption<string>;\nexport type SelectGroup = {\n value: string;\n label: string;\n};\nexport type SelectView = \"list\" | \"grid\";\nexport type SelectGridSize = \"sm\" | \"md\" | \"lg\";\nexport type SelectSourceOption =\n | string\n | {\n id: string;\n label?: string;\n description?: string;\n icon?: string;\n color?: string;\n groups?: readonly string[];\n }\n | SelectOption;\n\nexport type SelectProps = ValueFieldProps<string | null> & {\n placeholder?: string;\n icon?: string;\n activeIcon?: string;\n options?: SelectSourceOption[];\n fetchData?: (query: string, signal: AbortSignal, group: string | null) => Promise<SelectSourceOption[]>;\n loadOptions?: (query: string, signal: AbortSignal, group: string | null) => Promise<readonly ChoiceOption<string>[]>;\n selectedOption?: ChoiceOption<string>;\n selectedLabel?: () => string | undefined;\n fetchDebounceMs?: number;\n debounceMs?: number;\n searchable?: boolean;\n /** Optional synchronous filter for static options. */\n filterOptions?: (options: readonly SelectOption[], query: string) => readonly SelectOption[];\n /** Optional filters. An option may belong to more than one group. */\n groups?: readonly SelectGroup[];\n /** Group selected when the component is created. Omit to start with all options. */\n defaultGroup?: string;\n groupsAriaLabel?: string;\n allGroupLabel?: string;\n /** Show a local list/grid layout toggle in the dropdown. */\n viewToggle?: boolean;\n /** Initial dropdown layout when `viewToggle` is enabled. */\n defaultView?: SelectView;\n /** Tile density for the grid layout. */\n gridSize?: SelectGridSize;\n searchPlaceholder?: string;\n clearable?: boolean;\n name?: string;\n};\n\ntype NormalizedOption = ChoiceOption<string>;\nconst normalize = (option: SelectSourceOption): NormalizedOption =>\n typeof option === \"string\"\n ? { value: option, label: option }\n : \"value\" in option\n ? option\n : { ...option, value: option.id, label: option.label || option.id };\n\nexport function Select(props: SelectProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [query, setQuery] = createSignal(\"\");\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n const [cache, setCache] = createSignal<Record<string, NormalizedOption>>({});\n const [selectedGroup, setSelectedGroup] = createSignal<string | null>(props.defaultGroup ?? null);\n const [selectedView, setSelectedView] = createSignal<SelectView>(props.defaultView ?? \"list\");\n let searchRef: HTMLInputElement | undefined;\n let optionRefs: HTMLButtonElement[] = [];\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const error = () => resolveMaybeAccessor(props.error);\n const activeGroup = createMemo(() => {\n const current = selectedGroup();\n return current && props.groups?.some((group) => group.value === current) ? current : null;\n });\n const groupChoices = createMemo(() => [{ value: null, label: props.allGroupLabel ?? messages().all }, ...(props.groups ?? [])]);\n const activeView = () => (props.viewToggle ? selectedView() : \"list\");\n\n const loader = createChoiceLoader(\n () =>\n props.fetchData\n ? async (value, signal) => (await props.fetchData!(value, signal, activeGroup())).map(normalize)\n : props.loadOptions\n ? (value, signal) => props.loadOptions!(value, signal, activeGroup())\n : undefined,\n () => props.fetchDebounceMs ?? props.debounceMs ?? 200,\n );\n const isAsync = () => Boolean(props.fetchData || props.loadOptions);\n const isSearchable = () => isAsync() || Boolean(props.searchable);\n const sourceOptions = createMemo(() => (isAsync() ? loader.options() : (props.options ?? []).map(normalize)));\n const groupedOptions = createMemo(() => {\n const group = activeGroup();\n return !isAsync() && group ? sourceOptions().filter((option) => option.groups?.includes(group)) : sourceOptions();\n });\n // Remote loaders filter server-side; a static list has to be filtered here or\n // the search field would render but do nothing.\n const options = createMemo(() =>\n isAsync() || !props.searchable\n ? groupedOptions()\n : props.filterOptions\n ? [...props.filterOptions(groupedOptions(), query())]\n : filterChoiceOptions(groupedOptions(), query()),\n );\n const selected = createMemo(() => {\n const current = value();\n if (current === null) return undefined;\n // Resolve against the unfiltered list so typing in the search field never\n // blanks the trigger label of the current selection.\n return (\n sourceOptions().find((option) => option.value === current) ??\n cache()[current] ??\n (props.selectedOption?.value === current ? props.selectedOption : undefined) ?? {\n value: current,\n label: props.selectedLabel?.() ?? current,\n }\n );\n });\n const hasClearAction = () => Boolean(props.clearable && selected() && !props.disabled);\n const accessibleLabel = () =>\n props[\"aria-label\"] ?? (typeof props.label === \"string\" ? undefined : (props.placeholder ?? messages().selectOption));\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const focusedOption = () => options()[focusedIndex()];\n const focus = (index: number) => {\n setFocusedIndex(index);\n optionRefs[index]?.scrollIntoView({ block: \"nearest\" });\n };\n const move = (direction: 1 | -1) => focus(nextEnabledChoiceIndex(options(), focusedIndex(), direction));\n const chooseGroup = (group: string | null) => {\n if (group === activeGroup()) return;\n setSelectedGroup(group);\n setFocusedIndex(nextEnabledChoiceIndex(options(), -1, 1));\n if (isAsync()) loader.load(query(), true);\n };\n const open = () => {\n if (props.disabled) return;\n setQuery(\"\");\n if (isAsync()) loader.load(\"\", true);\n const selectedIndex = options().findIndex((option) => option.value === value());\n focus(selectedIndex >= 0 ? selectedIndex : nextEnabledChoiceIndex(options(), -1, 1));\n popover.show();\n if (isSearchable()) queueMicrotask(() => searchRef?.focus());\n };\n const close = (restoreFocus = false) => {\n // Hide the top-layer surface before any reactive cleanup or consumer\n // callback can rerender its contents. Selection must feel atomic: the old\n // listbox must never remain visible with the next value.\n popover.hide(restoreFocus);\n loader.cancel();\n setQuery(\"\");\n setFocusedIndex(-1);\n };\n const select = (option: NormalizedOption) => {\n if (option.disabled) return;\n close(true);\n setCache({ ...cache(), [option.value]: option });\n commitFieldValue(props, option.value);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const inToolbar = Boolean((event.target as HTMLElement | null)?.closest?.(\".k2b-choice-toolbar\"));\n if (inToolbar && event.key !== \"Escape\" && event.key !== \"Tab\") return;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) open();\n else move(event.key === \"ArrowDown\" ? 1 : -1);\n } else if ((event.key === \"Enter\" || event.key === \" \") && !popover.open()) {\n event.preventDefault();\n open();\n } else if (event.key === \"Enter\" && focusedOption()) {\n event.preventDefault();\n select(focusedOption()!);\n } else if (event.key === \"Escape\" && popover.open()) {\n // Only swallow Escape while the list is open — a closed select must let\n // the key bubble to an enclosing dialog or drawer.\n event.preventDefault();\n close(true);\n } else if (event.key === \"Tab\" && popover.open()) close();\n };\n const clear = (event: MouseEvent) => {\n event.stopPropagation();\n commitFieldValue(props, null);\n popover.trigger()?.focus();\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-choice-control\" data-invalid={error() ? \"true\" : undefined}>\n <button\n ref={popover.setTrigger}\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-choice-trigger\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n data-clearable={hasClearAction() ? \"true\" : undefined}\n {...fieldControlAria(meta, {\n ...props,\n \"aria-label\": accessibleLabel(),\n })}\n disabled={props.disabled}\n onClick={() => (popover.open() ? close() : open())}\n onKeyDown={onKeyDown}\n >\n <Show\n when={selected()?.color}\n fallback={<Show when={selected()?.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-choice-trigger__value\" data-placeholder={selected() ? undefined : \"true\"}>\n {selected()?.label ?? props.placeholder ?? messages().select}\n </span>\n <i class={popover.open() ? (props.activeIcon ?? \"ti ti-chevron-up\") : (props.icon ?? \"ti ti-chevron-down\")} aria-hidden=\"true\" />\n </button>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value() ?? \"\"} />}</Show>\n <Show when={hasClearAction()}>\n <button\n type=\"button\"\n class=\"k2b-choice-control__clear k2b-input-clear-action\"\n aria-label={messages().clearSelection}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <div\n ref={popover.setPopover}\n popover=\"manual\"\n class=\"k2b-choice-popover\"\n role=\"group\"\n onKeyDown={onKeyDown}\n aria-label={typeof props.label === \"string\" ? props.label : messages().options}\n >\n <Show when={isSearchable()}>\n <div class=\"k2b-choice-search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().searchOptions}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n onInput={(event) => {\n setQuery(event.currentTarget.value);\n if (isAsync()) loader.load(event.currentTarget.value);\n focus(isAsync() ? -1 : nextEnabledChoiceIndex(options(), -1, 1));\n }}\n />\n </div>\n </Show>\n <Show when={(props.groups?.length ?? 0) > 0 || props.viewToggle}>\n <div class=\"k2b-choice-toolbar\">\n <Show when={(props.groups?.length ?? 0) > 0}>\n <ChoiceGroups\n choices={groupChoices()}\n value={activeGroup()}\n onValueChange={chooseGroup}\n ariaLabel={props.groupsAriaLabel ?? messages().filterOptions}\n controls={listboxId}\n />\n </Show>\n <Show when={props.viewToggle}>\n <button\n type=\"button\"\n class=\"k2b-choice-view-toggle\"\n aria-label={activeView() === \"list\" ? messages().showGridView : messages().showListView}\n aria-controls={listboxId}\n onClick={() => setSelectedView(activeView() === \"list\" ? \"grid\" : \"list\")}\n >\n <i class={activeView() === \"list\" ? \"ti ti-category-2\" : \"ti ti-list-details\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Show>\n <div\n id={listboxId}\n class=\"k2b-choice-options\"\n role=\"listbox\"\n data-view={activeView()}\n data-grid-size={activeView() === \"grid\" ? (props.gridSize ?? \"md\") : undefined}\n >\n <Show when={loader.error()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button type=\"button\" onClick={loader.retry}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <Show when={loader.loading() && options().length === 0}>\n <div class=\"k2b-choice-status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span>{messages().loading}</span>\n </div>\n </Show>\n <For\n each={loader.error() ? [] : options()}\n fallback={\n <Show when={!loader.loading() && !loader.error()}>\n <div class=\"k2b-choice-status\">{isSearchable() ? messages().noResults : messages().noOptions}</div>\n </Show>\n }\n >\n {(option, index) => (\n <button\n ref={(element) => (optionRefs[index()] = element)}\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-label={option.label}\n aria-selected={option.value === value()}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n disabled={option.disabled}\n onPointerMove={() => focus(index())}\n onClick={() => select(option)}\n >\n <Show when={option.color} fallback={<Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n </div>\n </Field>\n );\n}\n\nexport default Select;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/SelectChip.tsx"],"sourcesContent":["import { createMemo, type JSX, Show } from \"solid-js\";\nimport type { ButtonSize } from \"../actions/Button\";\nimport { Dropdown, type DropdownItem, type DropdownPosition } from \"../actions/Dropdown\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SelectChipOption<T extends string | number = string> = {\n value: T;\n label: string;\n description?: string;\n icon?: string;\n image?: string;\n disabled?: boolean;\n};\n\nexport type SelectChipProps<T extends string | number = string> = ValueFieldProps<T> & {\n value: MaybeAccessor<T>;\n options: SelectChipOption<T>[];\n icon?: string;\n iconOnly?: boolean;\n size?: ButtonSize;\n placeholder?: string;\n position?: DropdownPosition;\n menuWidth?: string;\n name?: string;\n};\n\nexport function SelectChip<T extends string | number = string>(props: SelectChipProps<T>): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const value = () => resolveMaybeAccessor(props.value)!;\n const selected = () => props.options.find((option) => option.value === value());\n const triggerLabel = () => props[\"aria-label\"] ?? (typeof props.label === \"string\" ? props.label : messages().chooseOption);\n const items = createMemo<DropdownItem[]>(() =>\n props.options.map((option) => ({\n action: () => commitFieldValue(props, option.value),\n checked: () => option.value === value(),\n choice: \"radio\" as const,\n class: \"k2b-select-chip__option\",\n description: option.description,\n disabled: option.disabled,\n icon: option.icon,\n image: option.image,\n label: option.label,\n })),\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <Dropdown.Root\n position={props.position ?? \"bottom-right\"}\n /* Cloud opens this menu at `w-40`. */\n width={props.menuWidth ?? \"10rem\"}\n label={triggerLabel()}\n items={items()}\n >\n <Dropdown.Trigger\n appearance={props.iconOnly ? \"button\" : \"plain\"}\n id={meta.controlId}\n class={props.iconOnly ? undefined : \"k2b-select-chip\"}\n disabled={props.disabled}\n iconOnly={props.iconOnly}\n label={triggerLabel()}\n size={props.iconOnly ? props.size : undefined}\n title={props.iconOnly ? triggerLabel() : undefined}\n {...fieldControlAria(meta, props)}\n >\n <Show\n when={selected()?.image}\n fallback={<Show when={selected()?.icon ?? props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(image) => <img src={image()} alt=\"\" />}\n </Show>\n <Show when={!props.iconOnly}>\n <span data-placeholder={selected() ? undefined : \"true\"}>{selected()?.label ?? props.placeholder ?? \"\"}</span>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown.Root>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value()} />}</Show>\n </Field>\n );\n}\n\nexport default SelectChip;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/SpecialInputs.tsx"],"sourcesContent":["import { fuzzy } from \"@k2b/stdlib\";\nimport { createMemo, type JSX } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { resolveMaybeAccessor } from \"./field-contract\";\nimport { DEFAULT_ICON_GROUPS, DEFAULT_ICON_OPTIONS } from \"./icon-options\";\nimport { Select, type SelectGridSize, type SelectGroup, type SelectOption, type SelectView } from \"./Select\";\n\nexport type IconOption = SelectOption & { keywords?: readonly string[] };\nexport type IconInputProps = ValueFieldProps<string | null> & {\n options?: readonly IconOption[];\n placeholder?: string;\n clearable?: boolean;\n searchLimit?: number;\n groups?: readonly SelectGroup[];\n defaultGroup?: string;\n groupsAriaLabel?: string;\n allGroupLabel?: string;\n viewToggle?: boolean;\n defaultView?: SelectView;\n gridSize?: SelectGridSize;\n name?: string;\n};\n\nexport function IconInput(props: IconInputProps): JSX.Element {\n const messages = useUiMessages();\n const options = () => props.options ?? DEFAULT_ICON_OPTIONS;\n const groups = () => props.groups ?? (props.options === undefined ? DEFAULT_ICON_GROUPS : undefined);\n const filterOptions = (source: readonly SelectOption[], query: string): readonly SelectOption[] => {\n const normalized = query.trim().toLowerCase();\n if (!normalized) {\n return [...source].sort((left, right) => String(left.label).localeCompare(String(right.label), undefined, { sensitivity: \"base\" }));\n }\n return fuzzy\n .filter(normalized, source, {\n // Cloud's key is `[label, ...keywords]`. Including `value` as well put\n // the literal \"ti ti-\" in front of every entry, so short queries matched\n // the whole catalogue and fuzzy scores were skewed. The bare glyph name\n // is already the first keyword (see `icon()` in ./icon-options), so\n // nothing is lost by dropping it.\n key: (option) => {\n const keywords = \"keywords\" in option && Array.isArray(option.keywords) ? option.keywords.join(\" \") : \"\";\n return `${String(option.label)} ${keywords}`.toLowerCase();\n },\n limit: props.searchLimit ?? 50,\n })\n .map((match) => match.item);\n };\n const selectedOption = createMemo(() => options().find((option) => option.value === resolveMaybeAccessor(props.value)));\n\n return (\n <Select\n id={props.id}\n name={props.name}\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n aria-label={props[\"aria-label\"]}\n aria-describedby={props[\"aria-describedby\"]}\n placeholder={props.placeholder ?? messages().pickIcon}\n disabled={props.disabled}\n required={props.required}\n clearable={props.clearable ?? true}\n value={resolveMaybeAccessor(props.value)}\n selectedOption={selectedOption()}\n onValueChange={props.onValueChange}\n onValueCommit={props.onValueCommit}\n options={[...options()]}\n groups={groups()}\n defaultGroup={props.defaultGroup ?? (props.options === undefined ? \"recommended\" : undefined)}\n groupsAriaLabel={props.groupsAriaLabel ?? messages().filterIcons}\n allGroupLabel={props.allGroupLabel}\n viewToggle={props.viewToggle ?? true}\n defaultView={props.defaultView ?? \"grid\"}\n gridSize={props.gridSize ?? \"sm\"}\n searchable\n filterOptions={filterOptions}\n searchPlaceholder={messages().search}\n icon={selectedOption()?.icon ?? \"ti ti-icons\"}\n />\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/Switch.tsx"],"sourcesContent":["import { type JSX, Show, splitProps } from \"solid-js\";\nimport { createFieldMeta, fieldControlAria } from \"../internal/field\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SwitchProps = ValueFieldProps<boolean> & {\n name?: string;\n};\n\nexport function Switch(props: SwitchProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"label\", \"onValueChange\", \"onValueCommit\", \"value\"]);\n const meta = createFieldMeta(props.id);\n const checked = () => resolveMaybeAccessor(local.value) ?? false;\n const error = () => resolveMaybeAccessor(props.error);\n\n return (\n <div\n class={`k2b-switch-field ${props.class ?? \"\"}`}\n data-disabled={rest.disabled ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n >\n <label class=\"k2b-switch\">\n <input\n id={meta.controlId}\n name={props.name}\n type=\"checkbox\"\n role=\"switch\"\n checked={checked()}\n disabled={rest.disabled}\n required={rest.required}\n {...fieldControlAria(meta, props)}\n onChange={(event) => commitFieldValue(local, event.currentTarget.checked)}\n />\n <span class=\"k2b-switch__track\" aria-hidden=\"true\">\n <span class=\"k2b-switch__thumb\" />\n </span>\n {local.label && (\n <span id={meta.labelId} class=\"k2b-switch__label\">\n {local.label}\n <Show when={rest.required}>\n <span class=\"k2b-field__required\" aria-hidden=\"true\">\n *\n </span>\n </Show>\n </span>\n )}\n </label>\n <Show when={props.description}>\n <span id={meta.descriptionId} class=\"k2b-field__description\">\n {props.description}\n </span>\n </Show>\n <Show when={error()}>\n <p id={meta.errorId} class=\"k2b-field__error\" role=\"alert\" aria-live=\"polite\">\n {error()}\n </p>\n </Show>\n </div>\n );\n}\n\nexport default Switch;\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAmB,IAAI,EAAE,UAAU,QAAQ,UAAU;AACrD,SAAS,eAAe,EAAE,gBAAgB,QAAQ,mBAAmB;AAErE,SAAS,gBAAgB,EAAE,oBAAoB,QAAQ,kBAAkB;AAMzE,OAAO,SAAS,MAAM,CAAC,KAAkB,EAAe;EACtD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;EAC7F,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;EACtC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK;EAChE,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;EAErD;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA,IAQQ,EAAE;QAAA,OAAE,IAAI,CAAC,SAAS;MAAA;MAAA,IAClB,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,IAGhB,OAAO;QAAA,OAAE,OAAO,CAAC,CAAC;MAAA;MAAA,IAClB,QAAQ;QAAA,OAAE,IAAI,CAAC,QAAQ;MAAA;MAAA,IACvB,QAAQ;QAAA,OAAE,IAAI,CAAC,QAAQ;MAAA;IAAA,SACnB,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;MAAA,YACtB,KAAK,IAAK,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO;IAAC;IAAA;MAAA,yBAK1E,KAAK,CAAC,KAAK;MAAA,aAAX;QAAA;UAAA;UAAA;UAAA;UAAA;QAAA,uBAEI,KAAK,CAAC,KAAK;QAAA,mCACX,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,IAAI,CAAC,QAAQ;UAAA;UAAA;YAAA;UAAA;QAAA;QAAA,4CAFjB,IAAI,CAAC,OAAO;QAAA;MAAA,IAQvB;IAAA;IAAA,iCAEF,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,WAAW;MAAA;MAAA;QAAA;QAAA,sBAExB,KAAK,CAAC,WAAW;QAAA,2CADV,IAAI,CAAC,aAAa;QAAA;MAAA;IAAA;IAAA,iCAI7B,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,CAAC;MAAA;MAAA;QAAA;QAAA,gBAEd,KAAK;QAAA,2CADD,IAAI,CAAC,OAAO;QAAA;MAAA;IAAA;IAAA;MAAA,UApCd,oBAAoB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS;QAAA,OACnC,KAAK,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;IAAA;IAAA;IAAA;EAAA;AAwChD;AAEA,eAAe,MAAM","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createEffect","createSignal","For","onCleanup","Show","Button","IconButton","useUiMessages","Tag","ColorInput","TextInput","EditorForm","props","initialName","initial","name","initialColor","color","defaultColor","setName","setColor","error","setError","onDirtyChange","submit","event","preventDefault","normalized","trim","busy","undefined","onSave","cause","Error","message","saveError","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","_el$4","_co$","_$getNextMarker","nextSibling","_el$5","_el$6","_co$2","_el$10","_el$11","_co$5","_el$7","_el$8","_el$9","_co$3","_el$0","_el$1","_co$4","addEventListener","_$insert","_$createComponent","label","labels","placeholder","namePlaceholder","value","onValueChange","disabled","required","autofocus","aria-label","onValueCommit","compact","when","children","_el$12","_tmpl$2","type","size","loading","save","variant","onClick","onCancel","cancel","_$effect","_$setAttribute","TagEditor","messages","mode","setMode","busyId","setBusyId","rowError","setRowError","create","addTag","empty","noTagsYet","tagName","edit","remove","delete","run","id","action","tagActionFailed","_el$13","_tmpl$4","_el$15","_el$16","_co$6","_el$17","_el$18","_co$7","items","length","fallback","_el$19","_tmpl$5","_el$14","_tmpl$3","each","item","_el$20","_tmpl$6","_el$21","_el$22","_co$8","_el$23","_el$24","_co$9","_$memo","onUpdate","_el$25","_tmpl$8","_el$27","_el$28","_co$0","_el$29","_el$30","_co$1","Boolean","_tmpl$7","onDelete","catch","_tmpl$9","tagCouldNotBeSaved","_el$32","onCreate","_tmpl$0","_p$","_v$","class","_v$2","e","_$className","t"],"sources":["inputs/TagEditor.tsx"],"sourcesContent":["import { createEffect, createSignal, For, type JSX, onCleanup, Show } from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Tag } from \"../surfaces/Tag\";\nimport { ColorInput } from \"./ChoiceInputs\";\nimport { TextInput } from \"./TextInput\";\n\nexport type TagEditorItem = {\n id: string;\n name: string;\n color?: string | null;\n};\n\nexport type TagEditorValue = {\n name: string;\n color: string;\n};\n\nexport type TagEditorLabels = {\n create: string;\n empty: string;\n name: string;\n namePlaceholder: string;\n color: string;\n save: string;\n cancel: string;\n edit: string;\n remove: string;\n};\n\nexport type TagEditorProps<T extends TagEditorItem = TagEditorItem> = {\n items: readonly T[];\n onCreate?: (value: TagEditorValue) => void | Promise<void>;\n onUpdate?: (item: T, value: TagEditorValue) => void | Promise<void>;\n onDelete?: (item: T) => void | Promise<void>;\n labels?: Partial<TagEditorLabels>;\n defaultColor?: string;\n disabled?: boolean;\n onDirtyChange?: (dirty: boolean) => void;\n class?: string;\n};\n\ntype EditorFormProps = {\n initial?: TagEditorItem;\n labels: TagEditorLabels;\n defaultColor: string;\n busy: boolean;\n saveError: string;\n onCancel: () => void;\n onDirtyChange?: (dirty: boolean) => void;\n onSave: (value: TagEditorValue) => Promise<void>;\n};\n\nfunction EditorForm(props: EditorFormProps): JSX.Element {\n const initialName = props.initial?.name ?? \"\";\n const initialColor = props.initial?.color ?? props.defaultColor;\n const [name, setName] = createSignal(initialName);\n const [color, setColor] = createSignal(initialColor);\n const [error, setError] = createSignal<string>();\n\n createEffect(() => props.onDirtyChange?.(name() !== initialName || color() !== initialColor));\n onCleanup(() => props.onDirtyChange?.(false));\n\n const submit = async (event: SubmitEvent) => {\n event.preventDefault();\n const normalized = name().trim();\n if (!normalized || props.busy) return;\n setError(undefined);\n try {\n await props.onSave({ name: normalized, color: color() });\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : props.saveError);\n }\n };\n\n return (\n <form class=\"k2b-tag-editor__form\" aria-busy={props.busy ? \"true\" : undefined} onSubmit={submit}>\n <div class=\"k2b-tag-editor__fields\">\n <TextInput\n label={props.labels.name}\n placeholder={props.labels.namePlaceholder}\n value={name}\n onValueChange={setName}\n disabled={props.busy}\n required\n autofocus\n />\n <ColorInput\n aria-label={props.labels.color}\n value={color}\n onValueChange={setColor}\n onValueCommit={setColor}\n disabled={props.busy}\n compact\n />\n </div>\n <Show when={error()}>\n {(message) => (\n <p class=\"k2b-tag-editor__error\" role=\"alert\">\n {message()}\n </p>\n )}\n </Show>\n <div class=\"k2b-tag-editor__form-actions\">\n <Button type=\"submit\" size=\"sm\" loading={props.busy} disabled={!name().trim()}>\n {props.labels.save}\n </Button>\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" disabled={props.busy} onClick={props.onCancel}>\n {props.labels.cancel}\n </Button>\n </div>\n </form>\n );\n}\n\n/** Controlled tag manager. Persistence, authorization, confirmation, and toasts stay with the consumer. */\nexport function TagEditor<T extends TagEditorItem = TagEditorItem>(props: TagEditorProps<T>): JSX.Element {\n const messages = useUiMessages();\n const [mode, setMode] = createSignal<\"create\" | string | null>(null);\n const [busyId, setBusyId] = createSignal<string | null>(null);\n const [rowError, setRowError] = createSignal<{ id: string; message: string }>();\n const labels = (): TagEditorLabels => ({\n create: messages().addTag,\n empty: messages().noTagsYet,\n name: messages().name,\n namePlaceholder: messages().tagName,\n color: messages().color,\n save: messages().save,\n cancel: messages().cancel,\n edit: messages().edit,\n remove: messages().delete,\n ...props.labels,\n });\n const defaultColor = () => props.defaultColor ?? \"#6b7280\";\n const run = async (id: string, action: () => void | Promise<void>) => {\n if (busyId()) return;\n setBusyId(id);\n setRowError(undefined);\n try {\n await action();\n setMode(null);\n } catch (cause) {\n setRowError({ id, message: cause instanceof Error ? cause.message : messages().tagActionFailed });\n throw cause;\n } finally {\n setBusyId(null);\n }\n };\n\n return (\n <div class={`k2b-tag-editor ${props.class ?? \"\"}`} data-disabled={props.disabled ? \"true\" : undefined}>\n <Show when={props.items.length > 0} fallback={<p class=\"k2b-tag-editor__empty\">{labels().empty}</p>}>\n <ul class=\"k2b-tag-editor__list\">\n <For each={props.items}>\n {(item) => (\n <li class=\"k2b-tag-editor__row\">\n <Show\n when={mode() === item.id && props.onUpdate}\n fallback={\n <>\n <Tag color={item.color}>{item.name}</Tag>\n <span class=\"k2b-tag-editor__row-actions\">\n <Show when={props.onUpdate}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n label={`${labels().edit} ${item.name}`}\n disabled={props.disabled || Boolean(busyId())}\n onClick={() => setMode(item.id)}\n >\n <i class=\"ti ti-pencil\" aria-hidden=\"true\" />\n </IconButton>\n </Show>\n <Show when={props.onDelete}>\n {(remove) => (\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n label={`${labels().remove} ${item.name}`}\n loading={busyId() === item.id}\n disabled={props.disabled || Boolean(busyId())}\n onClick={() => void run(item.id, () => remove()(item)).catch(() => undefined)}\n >\n <i class=\"ti ti-trash\" aria-hidden=\"true\" />\n </IconButton>\n )}\n </Show>\n </span>\n </>\n }\n >\n <EditorForm\n initial={item}\n labels={labels()}\n defaultColor={defaultColor()}\n busy={busyId() === item.id}\n saveError={messages().tagCouldNotBeSaved}\n onCancel={() => setMode(null)}\n onDirtyChange={props.onDirtyChange}\n onSave={(value) => run(item.id, () => props.onUpdate?.(item, value))}\n />\n </Show>\n <Show when={rowError()?.id === item.id && mode() !== item.id ? rowError() : undefined}>\n {(error) => (\n <p class=\"k2b-tag-editor__error\" role=\"alert\">\n {error().message}\n </p>\n )}\n </Show>\n </li>\n )}\n </For>\n </ul>\n </Show>\n\n <Show when={props.onCreate}>\n {(create) => (\n <Show\n when={mode() === \"create\"}\n fallback={\n <Button size=\"xs\" variant=\"subtle\" disabled={props.disabled || Boolean(busyId())} onClick={() => setMode(\"create\")}>\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n {labels().create}\n </Button>\n }\n >\n <EditorForm\n labels={labels()}\n defaultColor={defaultColor()}\n busy={busyId() === \"create\"}\n saveError={messages().tagCouldNotBeSaved}\n onCancel={() => setMode(null)}\n onDirtyChange={props.onDirtyChange}\n onSave={(value) => run(\"create\", () => create()(value))}\n />\n </Show>\n )}\n </Show>\n </div>\n );\n}\n\nexport default TagEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/TagEditor.tsx"],"sourcesContent":["import { createEffect, createSignal, For, type JSX, onCleanup, Show } from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Tag } from \"../surfaces/Tag\";\nimport { ColorInput } from \"./ChoiceInputs\";\nimport { TextInput } from \"./TextInput\";\n\nexport type TagEditorItem = {\n id: string;\n name: string;\n color?: string | null;\n};\n\nexport type TagEditorValue = {\n name: string;\n color: string;\n};\n\nexport type TagEditorLabels = {\n create: string;\n empty: string;\n name: string;\n namePlaceholder: string;\n color: string;\n save: string;\n cancel: string;\n edit: string;\n remove: string;\n};\n\nexport type TagEditorProps<T extends TagEditorItem = TagEditorItem> = {\n items: readonly T[];\n onCreate?: (value: TagEditorValue) => void | Promise<void>;\n onUpdate?: (item: T, value: TagEditorValue) => void | Promise<void>;\n onDelete?: (item: T) => void | Promise<void>;\n labels?: Partial<TagEditorLabels>;\n defaultColor?: string;\n disabled?: boolean;\n onDirtyChange?: (dirty: boolean) => void;\n class?: string;\n};\n\ntype EditorFormProps = {\n initial?: TagEditorItem;\n labels: TagEditorLabels;\n defaultColor: string;\n busy: boolean;\n saveError: string;\n onCancel: () => void;\n onDirtyChange?: (dirty: boolean) => void;\n onSave: (value: TagEditorValue) => Promise<void>;\n};\n\nfunction EditorForm(props: EditorFormProps): JSX.Element {\n const initialName = props.initial?.name ?? \"\";\n const initialColor = props.initial?.color ?? props.defaultColor;\n const [name, setName] = createSignal(initialName);\n const [color, setColor] = createSignal(initialColor);\n const [error, setError] = createSignal<string>();\n\n createEffect(() => props.onDirtyChange?.(name() !== initialName || color() !== initialColor));\n onCleanup(() => props.onDirtyChange?.(false));\n\n const submit = async (event: SubmitEvent) => {\n event.preventDefault();\n const normalized = name().trim();\n if (!normalized || props.busy) return;\n setError(undefined);\n try {\n await props.onSave({ name: normalized, color: color() });\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : props.saveError);\n }\n };\n\n return (\n <form class=\"k2b-tag-editor__form\" aria-busy={props.busy ? \"true\" : undefined} onSubmit={submit}>\n <div class=\"k2b-tag-editor__fields\">\n <TextInput\n label={props.labels.name}\n placeholder={props.labels.namePlaceholder}\n value={name}\n onValueChange={setName}\n disabled={props.busy}\n required\n autofocus\n />\n <ColorInput\n aria-label={props.labels.color}\n value={color}\n onValueChange={setColor}\n onValueCommit={setColor}\n disabled={props.busy}\n compact\n />\n </div>\n <Show when={error()}>\n {(message) => (\n <p class=\"k2b-tag-editor__error\" role=\"alert\">\n {message()}\n </p>\n )}\n </Show>\n <div class=\"k2b-tag-editor__form-actions\">\n <Button type=\"submit\" size=\"sm\" loading={props.busy} disabled={!name().trim()}>\n {props.labels.save}\n </Button>\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" disabled={props.busy} onClick={props.onCancel}>\n {props.labels.cancel}\n </Button>\n </div>\n </form>\n );\n}\n\n/** Controlled tag manager. Persistence, authorization, confirmation, and toasts stay with the consumer. */\nexport function TagEditor<T extends TagEditorItem = TagEditorItem>(props: TagEditorProps<T>): JSX.Element {\n const messages = useUiMessages();\n const [mode, setMode] = createSignal<\"create\" | string | null>(null);\n const [busyId, setBusyId] = createSignal<string | null>(null);\n const [rowError, setRowError] = createSignal<{ id: string; message: string }>();\n const labels = (): TagEditorLabels => ({\n create: messages().addTag,\n empty: messages().noTagsYet,\n name: messages().name,\n namePlaceholder: messages().tagName,\n color: messages().color,\n save: messages().save,\n cancel: messages().cancel,\n edit: messages().edit,\n remove: messages().delete,\n ...props.labels,\n });\n const defaultColor = () => props.defaultColor ?? \"#6b7280\";\n const run = async (id: string, action: () => void | Promise<void>) => {\n if (busyId()) return;\n setBusyId(id);\n setRowError(undefined);\n try {\n await action();\n setMode(null);\n } catch (cause) {\n setRowError({ id, message: cause instanceof Error ? cause.message : messages().tagActionFailed });\n throw cause;\n } finally {\n setBusyId(null);\n }\n };\n\n return (\n <div class={`k2b-tag-editor ${props.class ?? \"\"}`} data-disabled={props.disabled ? \"true\" : undefined}>\n <Show when={props.items.length > 0} fallback={<p class=\"k2b-tag-editor__empty\">{labels().empty}</p>}>\n <ul class=\"k2b-tag-editor__list\">\n <For each={props.items}>\n {(item) => (\n <li class=\"k2b-tag-editor__row\">\n <Show\n when={mode() === item.id && props.onUpdate}\n fallback={\n <>\n <Tag color={item.color}>{item.name}</Tag>\n <span class=\"k2b-tag-editor__row-actions\">\n <Show when={props.onUpdate}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n label={`${labels().edit} ${item.name}`}\n disabled={props.disabled || Boolean(busyId())}\n onClick={() => setMode(item.id)}\n >\n <i class=\"ti ti-pencil\" aria-hidden=\"true\" />\n </IconButton>\n </Show>\n <Show when={props.onDelete}>\n {(remove) => (\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n label={`${labels().remove} ${item.name}`}\n loading={busyId() === item.id}\n disabled={props.disabled || Boolean(busyId())}\n onClick={() => void run(item.id, () => remove()(item)).catch(() => undefined)}\n >\n <i class=\"ti ti-trash\" aria-hidden=\"true\" />\n </IconButton>\n )}\n </Show>\n </span>\n </>\n }\n >\n <EditorForm\n initial={item}\n labels={labels()}\n defaultColor={defaultColor()}\n busy={busyId() === item.id}\n saveError={messages().tagCouldNotBeSaved}\n onCancel={() => setMode(null)}\n onDirtyChange={props.onDirtyChange}\n onSave={(value) => run(item.id, () => props.onUpdate?.(item, value))}\n />\n </Show>\n <Show when={rowError()?.id === item.id && mode() !== item.id ? rowError() : undefined}>\n {(error) => (\n <p class=\"k2b-tag-editor__error\" role=\"alert\">\n {error().message}\n </p>\n )}\n </Show>\n </li>\n )}\n </For>\n </ul>\n </Show>\n\n <Show when={props.onCreate}>\n {(create) => (\n <Show\n when={mode() === \"create\"}\n fallback={\n <Button size=\"xs\" variant=\"subtle\" disabled={props.disabled || Boolean(busyId())} onClick={() => setMode(\"create\")}>\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n {labels().create}\n </Button>\n }\n >\n <EditorForm\n labels={labels()}\n defaultColor={defaultColor()}\n busy={busyId() === \"create\"}\n saveError={messages().tagCouldNotBeSaved}\n onCancel={() => setMode(null)}\n onDirtyChange={props.onDirtyChange}\n onSave={(value) => run(\"create\", () => create()(value))}\n />\n </Show>\n )}\n </Show>\n </div>\n );\n}\n\nexport default TagEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createEffect","createSignal","createUniqueId","Show","createFieldMeta","Field","fieldControlAria","useUiMessages","resolveMaybeAccessor","TagsInput","props","messages","meta","id","announcementId","error","placeholder","tagsPlaceholder","focused","setFocused","focusStartValue","normalize","text","replace","trim","parseTags","tags","seen","Set","limit","maxTags","undefined","Number","POSITIVE_INFINITY","Math","max","floor","rawTag","split","tag","has","length","add","push","value","join","draft","setDraft","announce","previous","next","previousTags","nextTags","added","filter","removed","announcement","document","getElementById","textContent","tagsAdded","tagsRemoved","Boolean","_$createComponent","class","label","description","labelFor","required","disabled","children","_el$","_$getNextElement","_tmpl$2","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$7","_el$8","_co$","_$getNextMarker","_el$6","_$insert","when","_el$5","_tmpl$","fallback","_el$0","_tmpl$4","map","_el$1","_tmpl$5","_$spread","_$mergeProps","controlId","_$memo","onFocus","event","nextDraft","currentTarget","onValueChange","onBlur","onValueCommit","key","preventDefault","blur","_$effect","_p$","_v$","_v$2","_v$3","icon","_v$4","activeIcon","e","_$setAttribute","t","a","_$className","o","_$runHydrationEvents","name","_el$10","_tmpl$6","_$setProperty","_el$9","_tmpl$3"],"sources":["inputs/TagsInput.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { resolveMaybeAccessor } from \"./field-contract\";\n\nexport type TagsInputProps = ValueFieldProps<string[]> & {\n placeholder?: string;\n icon?: string;\n activeIcon?: string;\n maxTags?: number;\n name?: string;\n};\n\nexport function TagsInput(props: TagsInputProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const announcementId = `k2b-tags-${createUniqueId()}`;\n const error = () => resolveMaybeAccessor(props.error);\n const placeholder = () => props.placeholder ?? messages().tagsPlaceholder;\n const [focused, setFocused] = createSignal(false);\n let focusStartValue: readonly string[] = [];\n const normalize = (text: string) => text.replace(/\\s+/g, \" \").trim();\n const parseTags = (text: string): string[] => {\n const tags: string[] = [];\n const seen = new Set<string>();\n const limit = props.maxTags === undefined ? Number.POSITIVE_INFINITY : Math.max(0, Math.floor(props.maxTags));\n for (const rawTag of text.split(\",\")) {\n const tag = normalize(rawTag);\n if (!tag || seen.has(tag)) continue;\n if (tags.length >= limit) break;\n seen.add(tag);\n tags.push(tag);\n }\n return tags;\n };\n const value = () => parseTags((resolveMaybeAccessor(props.value) ?? []).join(\",\"));\n const [draft, setDraft] = createSignal(value().join(\", \"));\n createEffect(() => {\n if (!focused()) setDraft(value().join(\", \"));\n });\n\n const announce = (previous: readonly string[], next: readonly string[]) => {\n const previousTags = new Set(previous);\n const nextTags = new Set(next);\n const added = next.filter((tag) => !previousTags.has(tag));\n const removed = previous.filter((tag) => !nextTags.has(tag));\n const announcement = document.getElementById(announcementId);\n if (announcement) {\n announcement.textContent = [\n added.length ? messages().tagsAdded({ tags: added.join(\", \") }) : \"\",\n removed.length ? messages().tagsRemoved({ tags: removed.join(\", \") }) : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n }\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n labelFor={false}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-tags-input\" data-invalid={error() ? \"true\" : undefined} data-disabled={props.disabled ? \"true\" : undefined}>\n <span class=\"k2b-tags-input__icon\" aria-hidden=\"true\">\n <i class={`${props.icon ?? \"ti ti-tag\"} k2b-tags-input__icon-idle`} />\n <i class={`${props.activeIcon ?? \"ti ti-pencil\"} k2b-tags-input__icon-active`} />\n </span>\n <Show when={!focused()}>\n <span class=\"k2b-tags-input__values\" aria-hidden=\"true\">\n <Show when={value().length > 0} fallback={<span class=\"k2b-tags-input__placeholder\">{placeholder()}</span>}>\n {value().map((tag) => (\n <span class=\"k2b-tag\">{tag}</span>\n ))}\n </Show>\n </span>\n </Show>\n <input\n id={meta.controlId}\n type=\"text\"\n {...fieldControlAria(meta, props)}\n disabled={props.disabled}\n placeholder={focused() || value().length === 0 ? placeholder() : undefined}\n value={draft()}\n onFocus={() => {\n if (props.disabled) return;\n focusStartValue = value();\n setDraft(focusStartValue.join(\", \"));\n setFocused(true);\n }}\n onInput={(event) => {\n if (props.disabled) return;\n const nextDraft = event.currentTarget.value;\n setDraft(nextDraft);\n props.onValueChange?.(parseTags(nextDraft));\n }}\n onBlur={() => {\n if (props.disabled) return;\n const next = parseTags(draft());\n announce(focusStartValue, next);\n props.onValueCommit?.(next);\n setFocused(false);\n }}\n onKeyDown={(event) => event.key === \"Enter\" && (event.preventDefault(), event.currentTarget.blur())}\n />\n </div>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value().join(\",\")} />}</Show>\n <div id={announcementId} class=\"k2b-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" />\n </Field>\n );\n}\n\nexport default TagsInput;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/TagsInput.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { resolveMaybeAccessor } from \"./field-contract\";\n\nexport type TagsInputProps = ValueFieldProps<string[]> & {\n placeholder?: string;\n icon?: string;\n activeIcon?: string;\n maxTags?: number;\n name?: string;\n};\n\nexport function TagsInput(props: TagsInputProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const announcementId = `k2b-tags-${createUniqueId()}`;\n const error = () => resolveMaybeAccessor(props.error);\n const placeholder = () => props.placeholder ?? messages().tagsPlaceholder;\n const [focused, setFocused] = createSignal(false);\n let focusStartValue: readonly string[] = [];\n const normalize = (text: string) => text.replace(/\\s+/g, \" \").trim();\n const parseTags = (text: string): string[] => {\n const tags: string[] = [];\n const seen = new Set<string>();\n const limit = props.maxTags === undefined ? Number.POSITIVE_INFINITY : Math.max(0, Math.floor(props.maxTags));\n for (const rawTag of text.split(\",\")) {\n const tag = normalize(rawTag);\n if (!tag || seen.has(tag)) continue;\n if (tags.length >= limit) break;\n seen.add(tag);\n tags.push(tag);\n }\n return tags;\n };\n const value = () => parseTags((resolveMaybeAccessor(props.value) ?? []).join(\",\"));\n const [draft, setDraft] = createSignal(value().join(\", \"));\n createEffect(() => {\n if (!focused()) setDraft(value().join(\", \"));\n });\n\n const announce = (previous: readonly string[], next: readonly string[]) => {\n const previousTags = new Set(previous);\n const nextTags = new Set(next);\n const added = next.filter((tag) => !previousTags.has(tag));\n const removed = previous.filter((tag) => !nextTags.has(tag));\n const announcement = document.getElementById(announcementId);\n if (announcement) {\n announcement.textContent = [\n added.length ? messages().tagsAdded({ tags: added.join(\", \") }) : \"\",\n removed.length ? messages().tagsRemoved({ tags: removed.join(\", \") }) : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n }\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n labelFor={false}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-tags-input\" data-invalid={error() ? \"true\" : undefined} data-disabled={props.disabled ? \"true\" : undefined}>\n <span class=\"k2b-tags-input__icon\" aria-hidden=\"true\">\n <i class={`${props.icon ?? \"ti ti-tag\"} k2b-tags-input__icon-idle`} />\n <i class={`${props.activeIcon ?? \"ti ti-pencil\"} k2b-tags-input__icon-active`} />\n </span>\n <Show when={!focused()}>\n <span class=\"k2b-tags-input__values\" aria-hidden=\"true\">\n <Show when={value().length > 0} fallback={<span class=\"k2b-tags-input__placeholder\">{placeholder()}</span>}>\n {value().map((tag) => (\n <span class=\"k2b-tag\">{tag}</span>\n ))}\n </Show>\n </span>\n </Show>\n <input\n id={meta.controlId}\n type=\"text\"\n {...fieldControlAria(meta, props)}\n disabled={props.disabled}\n placeholder={focused() || value().length === 0 ? placeholder() : undefined}\n value={draft()}\n onFocus={() => {\n if (props.disabled) return;\n focusStartValue = value();\n setDraft(focusStartValue.join(\", \"));\n setFocused(true);\n }}\n onInput={(event) => {\n if (props.disabled) return;\n const nextDraft = event.currentTarget.value;\n setDraft(nextDraft);\n props.onValueChange?.(parseTags(nextDraft));\n }}\n onBlur={() => {\n if (props.disabled) return;\n const next = parseTags(draft());\n announce(focusStartValue, next);\n props.onValueCommit?.(next);\n setFocused(false);\n }}\n onKeyDown={(event) => event.key === \"Enter\" && (event.preventDefault(), event.currentTarget.blur())}\n />\n </div>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value().join(\",\")} />}</Show>\n <div id={announcementId} class=\"k2b-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" />\n </Field>\n );\n}\n\nexport default TagsInput;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createMemo","For","useUiMessages","PANES_LAYOUT_VERSION","AutocompleteEditor","TextInput","createTemplateEditorPanesLayout","version","root","type","direction","ratio","first","items","active","second","HTML_TAGS","name","snippet","hint","suggestion","text","label","appendSpace","templateCompletions","variables","trigger","dropdown","allowAfterWord","suggest","query","context","normalized","toLowerCase","leadingBrace","tokenStart","fullText","open","close","values","filter","variable","startsWith","map","kind","conditions","loops","tag","escapeHtml","value","replace","highlightLiquidToken","token","inner","trim","keyword","split","includes","highlightTag","match","attrs","highlightTemplate","stashed","escaped","marker","length","push","withTags","_","index","Number","TemplateEditor","props","messages","completions","_$createComponent","_$mergeProps","lines","spellcheck","placeholder","templateEditorPlaceholder","highlight","TemplatePreview","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_$effect","_p$","_v$","class","_v$2","html","_v$3","title","templatePreview","e","_$className","t","_$setAttribute","a","undefined","TemplateSampleData","_el$3","_tmpl$2","_$insert","each","children","description","onValueChange"],"sources":["inputs/TemplateEditor.tsx"],"sourcesContent":["import { createMemo, For, type JSX } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { PANES_LAYOUT_VERSION, type PanesLayout } from \"../layout/panes-layout\";\nimport { AutocompleteEditor, type AutocompleteEditorProps } from \"./AutocompleteEditor\";\nimport type { Completion, Suggestion } from \"./completion\";\nimport { TextInput } from \"./TextInput\";\n\nexport type TemplateVariableKind = \"string\" | \"email\" | \"url\" | \"number\" | \"boolean\" | \"array\" | \"object\";\n\nexport type TemplateVariable = {\n name: string;\n kind?: TemplateVariableKind;\n description?: string;\n};\n\nexport type TemplateEditorProps = Omit<AutocompleteEditorProps, \"completions\" | \"highlight\"> & {\n variables: readonly TemplateVariable[];\n};\n\nexport type TemplatePreviewProps = {\n html: string;\n title?: string;\n class?: string;\n};\n\nexport type TemplateSampleDataProps = {\n variables: readonly TemplateVariable[];\n values: Readonly<Record<string, string>>;\n onValueChange: (name: string, value: string) => void;\n class?: string;\n};\n\nexport type TemplateEditorLayout = PanesLayout;\n\nexport const createTemplateEditorPanesLayout = (): TemplateEditorLayout => ({\n version: PANES_LAYOUT_VERSION,\n root: {\n type: \"split\",\n direction: \"horizontal\",\n ratio: 0.5,\n first: { type: \"group\", items: [\"html\"], active: \"html\" },\n second: { type: \"group\", items: [\"preview\", \"sample-data\"], active: \"preview\" },\n },\n});\n\nconst HTML_TAGS = [\n { name: \"p\", snippet: \"<p></p>\", hint: \"paragraph\" },\n {\n name: \"a\",\n snippet: '<a href=\"{{ LOGIN_URL }}\">Link</a>',\n hint: \"link\",\n },\n { name: \"strong\", snippet: \"<strong></strong>\", hint: \"bold\" },\n { name: \"em\", snippet: \"<em></em>\", hint: \"emphasis\" },\n { name: \"br\", snippet: \"<br>\", hint: \"line break\" },\n { name: \"ul\", snippet: \"<ul>\\n <li></li>\\n</ul>\", hint: \"list\" },\n {\n name: \"table\",\n snippet: \"<table>\\n <tr><td></td></tr>\\n</table>\",\n hint: \"table\",\n },\n] as const;\n\nconst suggestion = (text: string, hint: string, label?: string): Suggestion => ({ text, hint, label, appendSpace: false });\n\nconst templateCompletions = (variables: readonly TemplateVariable[]): Completion[] => [\n {\n trigger: \"{\",\n dropdown: true,\n allowAfterWord: true,\n suggest: (query, context) => {\n const normalized = query.toLowerCase();\n const leadingBrace = context.tokenStart > 0 && context.fullText[context.tokenStart - 1] === \"{\";\n const open = leadingBrace ? \"{ \" : \"{{ \";\n const close = leadingBrace ? \" }}\" : \" }}\";\n const values = variables\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`${open}${variable.name}${close}`, variable.kind ?? \"string\", variable.name));\n const conditions = variables\n .filter((variable) => variable.kind !== \"array\")\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`{% if ${variable.name} != blank %}\\n \\n{% endif %}`, \"condition\", `if ${variable.name}`));\n const loops = variables\n .filter((variable) => variable.kind === \"array\")\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`{% for item in ${variable.name} %}\\n {{ item }}\\n{% endfor %}`, \"loop\", `for ${variable.name}`));\n return [...values, ...conditions, ...loops];\n },\n },\n {\n trigger: \"%\",\n dropdown: true,\n allowAfterWord: true,\n suggest: (query) => {\n const normalized = query.toLowerCase();\n const conditions = variables\n .filter((variable) => variable.kind !== \"array\")\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`% if ${variable.name} != blank %}\\n \\n{% endif %}`, \"condition\", `if ${variable.name}`));\n const loops = variables\n .filter((variable) => variable.kind === \"array\")\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`% for item in ${variable.name} %}\\n {{ item }}\\n{% endfor %}`, \"loop\", `for ${variable.name}`));\n return [...conditions, ...loops];\n },\n },\n {\n trigger: \"<\",\n dropdown: true,\n allowAfterWord: true,\n suggest: (query) => {\n const normalized = query.toLowerCase();\n return HTML_TAGS.filter((tag) => tag.name.startsWith(normalized)).map((tag) => suggestion(tag.snippet, tag.hint, tag.name));\n },\n },\n];\n\nconst escapeHtml = (value: string): string =>\n value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\n\nconst highlightLiquidToken = (token: string): string => {\n const inner = token.replace(/^\\{\\{|\\}\\}$|^\\{%|\\%}$/g, \"\").trim();\n const keyword = inner.split(/\\s+/)[0] ?? \"\";\n const kind = token.startsWith(\"{%\") ? (keyword.startsWith(\"end\") ? \"end\" : \"control\") : inner.includes(\"| raw\") ? \"raw\" : \"value\";\n return `<span class=\"k2b-template-token\" data-kind=\"${kind}\">${escapeHtml(token)}</span>`;\n};\n\nconst highlightTag = (tag: string): string => {\n const match = tag.match(/^(<\\/?)([a-zA-Z][\\w:-]*)([\\s\\S]*?)(>)$/);\n if (!match) return `<span class=\"k2b-template-tag\">${tag}</span>`;\n const attrs = (match[3] ?? \"\").replace(\n /([\\w:-]+)(=)("[\\s\\S]*?"|'[\\s\\S]*?'|[^\\s&]+)/g,\n '<span class=\"k2b-template-attribute\">$1</span><span class=\"k2b-template-punctuation\">$2</span><span class=\"k2b-template-string\">$3</span>',\n );\n return `<span class=\"k2b-template-punctuation\">${match[1]}</span><span class=\"k2b-template-tag\">${match[2]}</span>${attrs}<span class=\"k2b-template-punctuation\">${match[4]}</span>`;\n};\n\nconst highlightTemplate = (text: string): string => {\n const stashed: string[] = [];\n const escaped = escapeHtml(text).replace(/{{[\\s\\S]*?}}|{%[\\s\\S]*?%}/g, (token) => {\n const marker = `\\uE000${stashed.length}\\uE001`;\n stashed.push(highlightLiquidToken(token));\n return marker;\n });\n const withTags = escaped.replace(/<!--[\\s\\S]*?-->|<\\/?[a-zA-Z][\\s\\S]*?>/g, (tag) =>\n tag.startsWith(\"<!--\") ? `<span class=\"k2b-template-comment\">${tag}</span>` : highlightTag(tag),\n );\n return withTags.replace(/\\uE000(\\d+)\\uE001/g, (_, index) => stashed[Number(index)] ?? \"\");\n};\n\nexport function TemplateEditor(props: TemplateEditorProps): JSX.Element {\n const messages = useUiMessages();\n const completions = createMemo(() => templateCompletions(props.variables));\n return (\n <AutocompleteEditor\n {...props}\n lines={props.lines ?? 22}\n spellcheck={props.spellcheck ?? false}\n placeholder={props.placeholder ?? messages().templateEditorPlaceholder}\n highlight={highlightTemplate}\n completions={completions()}\n />\n );\n}\n\nexport function TemplatePreview(props: TemplatePreviewProps): JSX.Element {\n const messages = useUiMessages();\n return (\n <section class={`k2b-template-preview ${props.class ?? \"\"}`}>\n <iframe sandbox=\"\" srcdoc={props.html} title={props.title ?? messages().templatePreview} />\n </section>\n );\n}\n\nexport function TemplateSampleData(props: TemplateSampleDataProps): JSX.Element {\n return (\n <section class={`k2b-template-sample ${props.class ?? \"\"}`}>\n <For each={props.variables}>\n {(variable) => (\n <TextInput\n label={`{{ ${variable.name} }}`}\n description={variable.description}\n value={props.values[variable.name] ?? \"\"}\n onValueChange={(value) => props.onValueChange(variable.name, value)}\n />\n )}\n </For>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/TemplateEditor.tsx"],"sourcesContent":["import { createMemo, For, type JSX } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { PANES_LAYOUT_VERSION, type PanesLayout } from \"../layout/panes-layout\";\nimport { AutocompleteEditor, type AutocompleteEditorProps } from \"./AutocompleteEditor\";\nimport type { Completion, Suggestion } from \"./completion\";\nimport { TextInput } from \"./TextInput\";\n\nexport type TemplateVariableKind = \"string\" | \"email\" | \"url\" | \"number\" | \"boolean\" | \"array\" | \"object\";\n\nexport type TemplateVariable = {\n name: string;\n kind?: TemplateVariableKind;\n description?: string;\n};\n\nexport type TemplateEditorProps = Omit<AutocompleteEditorProps, \"completions\" | \"highlight\"> & {\n variables: readonly TemplateVariable[];\n};\n\nexport type TemplatePreviewProps = {\n html: string;\n title?: string;\n class?: string;\n};\n\nexport type TemplateSampleDataProps = {\n variables: readonly TemplateVariable[];\n values: Readonly<Record<string, string>>;\n onValueChange: (name: string, value: string) => void;\n class?: string;\n};\n\nexport type TemplateEditorLayout = PanesLayout;\n\nexport const createTemplateEditorPanesLayout = (): TemplateEditorLayout => ({\n version: PANES_LAYOUT_VERSION,\n root: {\n type: \"split\",\n direction: \"horizontal\",\n ratio: 0.5,\n first: { type: \"group\", items: [\"html\"], active: \"html\" },\n second: { type: \"group\", items: [\"preview\", \"sample-data\"], active: \"preview\" },\n },\n});\n\nconst HTML_TAGS = [\n { name: \"p\", snippet: \"<p></p>\", hint: \"paragraph\" },\n {\n name: \"a\",\n snippet: '<a href=\"{{ LOGIN_URL }}\">Link</a>',\n hint: \"link\",\n },\n { name: \"strong\", snippet: \"<strong></strong>\", hint: \"bold\" },\n { name: \"em\", snippet: \"<em></em>\", hint: \"emphasis\" },\n { name: \"br\", snippet: \"<br>\", hint: \"line break\" },\n { name: \"ul\", snippet: \"<ul>\\n <li></li>\\n</ul>\", hint: \"list\" },\n {\n name: \"table\",\n snippet: \"<table>\\n <tr><td></td></tr>\\n</table>\",\n hint: \"table\",\n },\n] as const;\n\nconst suggestion = (text: string, hint: string, label?: string): Suggestion => ({ text, hint, label, appendSpace: false });\n\nconst templateCompletions = (variables: readonly TemplateVariable[]): Completion[] => [\n {\n trigger: \"{\",\n dropdown: true,\n allowAfterWord: true,\n suggest: (query, context) => {\n const normalized = query.toLowerCase();\n const leadingBrace = context.tokenStart > 0 && context.fullText[context.tokenStart - 1] === \"{\";\n const open = leadingBrace ? \"{ \" : \"{{ \";\n const close = leadingBrace ? \" }}\" : \" }}\";\n const values = variables\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`${open}${variable.name}${close}`, variable.kind ?? \"string\", variable.name));\n const conditions = variables\n .filter((variable) => variable.kind !== \"array\")\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`{% if ${variable.name} != blank %}\\n \\n{% endif %}`, \"condition\", `if ${variable.name}`));\n const loops = variables\n .filter((variable) => variable.kind === \"array\")\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`{% for item in ${variable.name} %}\\n {{ item }}\\n{% endfor %}`, \"loop\", `for ${variable.name}`));\n return [...values, ...conditions, ...loops];\n },\n },\n {\n trigger: \"%\",\n dropdown: true,\n allowAfterWord: true,\n suggest: (query) => {\n const normalized = query.toLowerCase();\n const conditions = variables\n .filter((variable) => variable.kind !== \"array\")\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`% if ${variable.name} != blank %}\\n \\n{% endif %}`, \"condition\", `if ${variable.name}`));\n const loops = variables\n .filter((variable) => variable.kind === \"array\")\n .filter((variable) => variable.name.toLowerCase().startsWith(normalized))\n .map((variable) => suggestion(`% for item in ${variable.name} %}\\n {{ item }}\\n{% endfor %}`, \"loop\", `for ${variable.name}`));\n return [...conditions, ...loops];\n },\n },\n {\n trigger: \"<\",\n dropdown: true,\n allowAfterWord: true,\n suggest: (query) => {\n const normalized = query.toLowerCase();\n return HTML_TAGS.filter((tag) => tag.name.startsWith(normalized)).map((tag) => suggestion(tag.snippet, tag.hint, tag.name));\n },\n },\n];\n\nconst escapeHtml = (value: string): string =>\n value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\n\nconst highlightLiquidToken = (token: string): string => {\n const inner = token.replace(/^\\{\\{|\\}\\}$|^\\{%|\\%}$/g, \"\").trim();\n const keyword = inner.split(/\\s+/)[0] ?? \"\";\n const kind = token.startsWith(\"{%\") ? (keyword.startsWith(\"end\") ? \"end\" : \"control\") : inner.includes(\"| raw\") ? \"raw\" : \"value\";\n return `<span class=\"k2b-template-token\" data-kind=\"${kind}\">${escapeHtml(token)}</span>`;\n};\n\nconst highlightTag = (tag: string): string => {\n const match = tag.match(/^(<\\/?)([a-zA-Z][\\w:-]*)([\\s\\S]*?)(>)$/);\n if (!match) return `<span class=\"k2b-template-tag\">${tag}</span>`;\n const attrs = (match[3] ?? \"\").replace(\n /([\\w:-]+)(=)("[\\s\\S]*?"|'[\\s\\S]*?'|[^\\s&]+)/g,\n '<span class=\"k2b-template-attribute\">$1</span><span class=\"k2b-template-punctuation\">$2</span><span class=\"k2b-template-string\">$3</span>',\n );\n return `<span class=\"k2b-template-punctuation\">${match[1]}</span><span class=\"k2b-template-tag\">${match[2]}</span>${attrs}<span class=\"k2b-template-punctuation\">${match[4]}</span>`;\n};\n\nconst highlightTemplate = (text: string): string => {\n const stashed: string[] = [];\n const escaped = escapeHtml(text).replace(/{{[\\s\\S]*?}}|{%[\\s\\S]*?%}/g, (token) => {\n const marker = `\\uE000${stashed.length}\\uE001`;\n stashed.push(highlightLiquidToken(token));\n return marker;\n });\n const withTags = escaped.replace(/<!--[\\s\\S]*?-->|<\\/?[a-zA-Z][\\s\\S]*?>/g, (tag) =>\n tag.startsWith(\"<!--\") ? `<span class=\"k2b-template-comment\">${tag}</span>` : highlightTag(tag),\n );\n return withTags.replace(/\\uE000(\\d+)\\uE001/g, (_, index) => stashed[Number(index)] ?? \"\");\n};\n\nexport function TemplateEditor(props: TemplateEditorProps): JSX.Element {\n const messages = useUiMessages();\n const completions = createMemo(() => templateCompletions(props.variables));\n return (\n <AutocompleteEditor\n {...props}\n lines={props.lines ?? 22}\n spellcheck={props.spellcheck ?? false}\n placeholder={props.placeholder ?? messages().templateEditorPlaceholder}\n highlight={highlightTemplate}\n completions={completions()}\n />\n );\n}\n\nexport function TemplatePreview(props: TemplatePreviewProps): JSX.Element {\n const messages = useUiMessages();\n return (\n <section class={`k2b-template-preview ${props.class ?? \"\"}`}>\n <iframe sandbox=\"\" srcdoc={props.html} title={props.title ?? messages().templatePreview} />\n </section>\n );\n}\n\nexport function TemplateSampleData(props: TemplateSampleDataProps): JSX.Element {\n return (\n <section class={`k2b-template-sample ${props.class ?? \"\"}`}>\n <For each={props.variables}>\n {(variable) => (\n <TextInput\n label={`{{ ${variable.name} }}`}\n description={variable.description}\n value={props.values[variable.name] ?? \"\"}\n onValueChange={(value) => props.onValueChange(variable.name, value)}\n />\n )}\n </For>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|