@k2b/ui 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/actions/Button.js.map +1 -1
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/CopyButton.js.map +1 -1
- package/dist/browser/actions/Disclosure.js.map +1 -1
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/RemoveButton.js.map +1 -1
- package/dist/browser/actions/SegmentedControl.js.map +1 -1
- package/dist/browser/actions/SplitButton.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/Toolbar.js.map +1 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatContextPopup.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatRoot.js.map +1 -1
- package/dist/browser/chat/ChatTasks.js +1 -1
- package/dist/browser/chat/ChatTasks.js.map +1 -1
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/chat/chat-behavior.js.map +1 -1
- package/dist/browser/chat/composer-document.js.map +1 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartExplorerControls.js.map +1 -1
- package/dist/browser/content/ChartFilterControls.js +1 -1
- package/dist/browser/content/ChartFilterControls.js.map +1 -1
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/CodeDisplay.js.map +1 -1
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/Docs.js.map +1 -1
- package/dist/browser/content/FileBrowser.js.map +1 -1
- package/dist/browser/content/FileGrid.js.map +1 -1
- package/dist/browser/content/FileTree.js.map +1 -1
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/LogEntriesTable.js.map +1 -1
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/content/Pagination.js.map +1 -1
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/RangePicker.js.map +1 -1
- package/dist/browser/content/StructuredDataPreview.js.map +1 -1
- package/dist/browser/content/calendar-event-layout.js.map +1 -1
- package/dist/browser/content/calendar-pointer.js.map +1 -1
- package/dist/browser/content/chart-cursor.js.map +1 -1
- package/dist/browser/content/chart-explorer.js.map +1 -1
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/chart-line-gaps.js.map +1 -1
- package/dist/browser/content/chart-map-viewport.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js.map +1 -1
- package/dist/browser/content/chart-state-timeline.js.map +1 -1
- package/dist/browser/content/chart-svg.js.map +1 -1
- package/dist/browser/content/code-highlight.js.map +1 -1
- package/dist/browser/content/collection-selection.js.map +1 -1
- package/dist/browser/content/delimited-preferences.js.map +1 -1
- package/dist/browser/content/file-tree.js.map +1 -1
- package/dist/browser/content/file-view-preview.js.map +1 -1
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/feedback/InlineGuidance.js.map +1 -1
- package/dist/browser/feedback/Tooltip.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/index.js.map +1 -1
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/feedback/toast.js.map +1 -1
- package/dist/browser/feedback/tooltip-position.js.map +1 -1
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/browser/inputs/Checkbox.js.map +1 -1
- package/dist/browser/inputs/CheckboxCard.js.map +1 -1
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
- package/dist/browser/inputs/NumberInput.js.map +1 -1
- package/dist/browser/inputs/Select.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/SpecialInputs.js.map +1 -1
- package/dist/browser/inputs/Switch.js.map +1 -1
- package/dist/browser/inputs/TagEditor.js.map +1 -1
- package/dist/browser/inputs/TagsInput.js.map +1 -1
- package/dist/browser/inputs/TemplateEditor.js.map +1 -1
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/inputs/completion/behaviors.js.map +1 -1
- package/dist/browser/inputs/completion/engine.js.map +1 -1
- package/dist/browser/inputs/completion/index.js.map +1 -1
- package/dist/browser/inputs/completion/overlay.js.map +1 -1
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/inputs/editor-dom.js.map +1 -1
- package/dist/browser/inputs/field-contract.js.map +1 -1
- package/dist/browser/inputs/icon-options.js.map +1 -1
- package/dist/browser/inputs/image-crop.js.map +1 -1
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/browser/inputs/markdown/actions.js.map +1 -1
- package/dist/browser/inputs/markdown/active-formats.js.map +1 -1
- package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
- package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
- package/dist/browser/internal/color.js.map +1 -1
- package/dist/browser/internal/field.js.map +1 -1
- package/dist/browser/internal/portal.js.map +1 -1
- package/dist/browser/intl/Format.js.map +1 -1
- package/dist/browser/intl/index.js.map +1 -1
- package/dist/browser/intl/locale.js.map +1 -1
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppOverview.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js.map +1 -1
- package/dist/browser/layout/DataPanel.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/FloatingWindow.js.map +1 -1
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/PanelHeader.js.map +1 -1
- package/dist/browser/layout/Panes.js.map +1 -1
- package/dist/browser/layout/PullToRefresh.js.map +1 -1
- package/dist/browser/layout/ScrollArea.js.map +1 -1
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SettingsCollection.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/app-workspace-state.js.map +1 -1
- package/dist/browser/layout/floating-window-geometry.js.map +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/layout/panes-layout.js.map +1 -1
- package/dist/browser/layout/scroll-fade.js.map +1 -1
- package/dist/browser/layout/stable-id.js.map +1 -1
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/DescriptionList.js.map +1 -1
- package/dist/browser/surfaces/LinkCard.js.map +1 -1
- package/dist/browser/surfaces/NotFoundState.js.map +1 -1
- package/dist/browser/surfaces/NoticeCard.js.map +1 -1
- package/dist/browser/surfaces/Paper.js.map +1 -1
- package/dist/browser/surfaces/Placeholder.js.map +1 -1
- package/dist/browser/surfaces/ProgressBar.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/StatGrid.js.map +1 -1
- package/dist/browser/surfaces/StatusBadge.js.map +1 -1
- package/dist/browser/surfaces/Tag.js.map +1 -1
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/widgets/Widget.js.map +1 -1
- package/dist/browser/widgets/WidgetHero.js.map +1 -1
- package/dist/browser/widgets/WidgetList.js.map +1 -1
- package/dist/browser/widgets/WidgetPills.js.map +1 -1
- package/dist/browser/widgets/WidgetStat.js.map +1 -1
- package/dist/browser/widgets/WidgetStatus.js.map +1 -1
- package/dist/ssr/actions/Button.js +5 -4
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/CopyButton.js +2 -1
- package/dist/ssr/actions/CopyButton.js.map +1 -1
- package/dist/ssr/actions/Disclosure.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +7 -6
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +5 -4
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/RemoveButton.js +1 -0
- package/dist/ssr/actions/RemoveButton.js.map +1 -1
- package/dist/ssr/actions/SegmentedControl.js.map +1 -1
- package/dist/ssr/actions/SplitButton.js +1 -0
- package/dist/ssr/actions/SplitButton.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/Toolbar.js.map +1 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +6 -5
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +6 -5
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatRoot.js.map +1 -1
- package/dist/ssr/chat/ChatTasks.js +1 -1
- package/dist/ssr/chat/ChatTasks.js.map +1 -1
- package/dist/ssr/chat/ChatTimeline.js +5 -4
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/chat/chat-behavior.js.map +1 -1
- package/dist/ssr/chat/composer-document.js.map +1 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Calendar.js +2 -1
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartExplorerControls.js +5 -4
- package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
- package/dist/ssr/content/ChartFilterControls.js +3 -2
- package/dist/ssr/content/ChartFilterControls.js.map +1 -1
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/CodeDisplay.js.map +1 -1
- package/dist/ssr/content/DataTable.js +1 -0
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/Docs.js +1 -0
- package/dist/ssr/content/Docs.js.map +1 -1
- package/dist/ssr/content/FileBrowser.js +2 -1
- package/dist/ssr/content/FileBrowser.js.map +1 -1
- package/dist/ssr/content/FileGrid.js.map +1 -1
- package/dist/ssr/content/FileTree.js +2 -1
- package/dist/ssr/content/FileTree.js.map +1 -1
- package/dist/ssr/content/FileView.js +5 -4
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +2 -1
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/LogEntriesTable.js.map +1 -1
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/content/Pagination.js +2 -1
- package/dist/ssr/content/Pagination.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/RangePicker.js.map +1 -1
- package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
- package/dist/ssr/content/calendar-event-layout.js.map +1 -1
- package/dist/ssr/content/calendar-pointer.js.map +1 -1
- package/dist/ssr/content/chart-cursor.js.map +1 -1
- package/dist/ssr/content/chart-explorer.js.map +1 -1
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/chart-line-gaps.js.map +1 -1
- package/dist/ssr/content/chart-map-viewport.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js.map +1 -1
- package/dist/ssr/content/chart-state-timeline.js.map +1 -1
- package/dist/ssr/content/chart-svg.js.map +1 -1
- package/dist/ssr/content/code-highlight.js.map +1 -1
- package/dist/ssr/content/collection-selection.js.map +1 -1
- package/dist/ssr/content/delimited-preferences.js.map +1 -1
- package/dist/ssr/content/file-tree.js.map +1 -1
- package/dist/ssr/content/file-view-preview.js.map +1 -1
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
- package/dist/ssr/feedback/Tooltip.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/index.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +3 -2
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/feedback/toast.js.map +1 -1
- package/dist/ssr/feedback/tooltip-position.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
- package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/ssr/inputs/Checkbox.js +1 -0
- package/dist/ssr/inputs/Checkbox.js.map +1 -1
- package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
- package/dist/ssr/inputs/ChoiceInputs.js +1 -0
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/inputs/Combobox.js +2 -1
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +4 -3
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/FileInputs.js +2 -1
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/MultiSelectInput.js +4 -3
- package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
- package/dist/ssr/inputs/NumberInput.js +2 -1
- package/dist/ssr/inputs/NumberInput.js.map +1 -1
- package/dist/ssr/inputs/Select.js +4 -3
- package/dist/ssr/inputs/Select.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +3 -2
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/SpecialInputs.js +1 -0
- package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
- package/dist/ssr/inputs/Switch.js.map +1 -1
- package/dist/ssr/inputs/TagEditor.js +3 -2
- package/dist/ssr/inputs/TagEditor.js.map +1 -1
- package/dist/ssr/inputs/TagsInput.js.map +1 -1
- package/dist/ssr/inputs/TemplateEditor.js +1 -0
- package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +4 -3
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
- package/dist/ssr/inputs/completion/engine.js.map +1 -1
- package/dist/ssr/inputs/completion/index.js.map +1 -1
- package/dist/ssr/inputs/completion/overlay.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/inputs/editor-dom.js.map +1 -1
- package/dist/ssr/inputs/field-contract.js.map +1 -1
- package/dist/ssr/inputs/icon-options.js.map +1 -1
- package/dist/ssr/inputs/image-crop.js.map +1 -1
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/ssr/inputs/markdown/actions.js.map +1 -1
- package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
- package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
- package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
- package/dist/ssr/internal/color.js.map +1 -1
- package/dist/ssr/internal/field.js.map +1 -1
- package/dist/ssr/internal/portal.js.map +1 -1
- package/dist/ssr/intl/Format.js.map +1 -1
- package/dist/ssr/intl/index.js.map +1 -1
- package/dist/ssr/intl/locale.js.map +1 -1
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppOverview.js +2 -1
- package/dist/ssr/layout/AppOverview.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +7 -6
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js.map +1 -1
- package/dist/ssr/layout/DataPanel.js +1 -0
- package/dist/ssr/layout/DataPanel.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +1 -0
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/Discussion.js +3 -2
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/FloatingWindow.js +1 -0
- package/dist/ssr/layout/FloatingWindow.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +3 -2
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PanelDialog.js +1 -0
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/PanelHeader.js.map +1 -1
- package/dist/ssr/layout/Panes.js.map +1 -1
- package/dist/ssr/layout/PullToRefresh.js.map +1 -1
- package/dist/ssr/layout/ScrollArea.js.map +1 -1
- package/dist/ssr/layout/Settings.js +2 -1
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SettingsCollection.js +1 -0
- package/dist/ssr/layout/SettingsCollection.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/app-workspace-state.js.map +1 -1
- package/dist/ssr/layout/floating-window-geometry.js.map +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/layout/panes-layout.js.map +1 -1
- package/dist/ssr/layout/scroll-fade.js.map +1 -1
- package/dist/ssr/layout/stable-id.js.map +1 -1
- package/dist/ssr/surfaces/Avatar.js +2 -1
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
- package/dist/ssr/surfaces/LinkCard.js.map +1 -1
- package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
- package/dist/ssr/surfaces/Paper.js +2 -1
- package/dist/ssr/surfaces/Paper.js.map +1 -1
- package/dist/ssr/surfaces/Placeholder.js +2 -1
- package/dist/ssr/surfaces/Placeholder.js.map +1 -1
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +2 -1
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/StatGrid.js +1 -0
- package/dist/ssr/surfaces/StatGrid.js.map +1 -1
- package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
- package/dist/ssr/surfaces/Tag.js.map +1 -1
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/widgets/Widget.js +1 -0
- package/dist/ssr/widgets/Widget.js.map +1 -1
- package/dist/ssr/widgets/WidgetHero.js.map +1 -1
- package/dist/ssr/widgets/WidgetList.js.map +1 -1
- package/dist/ssr/widgets/WidgetPills.js.map +1 -1
- package/dist/ssr/widgets/WidgetStat.js +1 -0
- package/dist/ssr/widgets/WidgetStat.js.map +1 -1
- package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/SpotlightSearch.d.ts +1 -1
- package/dist/types/feedback/prompts.d.ts +2 -2
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/markdown/Toolbar.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n insertLink,\n toggleBold,\n toggleBulletList,\n toggleCode,\n toggleHeading,\n toggleItalic,\n toggleNumberedList,\n toggleQuote,\n} from \"./actions\";\n\ntype ToolbarProps = {\n textarea: () => HTMLTextAreaElement | null;\n activeFormats?: () => Set<string>;\n disabled?: boolean;\n trailing?: JSX.Element;\n};\n\ntype Tool =\n | {\n kind: \"button\";\n id: string;\n icon: string;\n title: string;\n run: (textarea: HTMLTextAreaElement) => void;\n }\n | { kind: \"separator\" };\n\nconst TOOLS: readonly Tool[] = [\n { kind: \"button\", id: \"bold\", icon: \"ti ti-bold\", title: \"Bold (Ctrl/Cmd+B)\", run: toggleBold },\n { kind: \"button\", id: \"italic\", icon: \"ti ti-italic\", title: \"Italic (Ctrl/Cmd+I)\", run: toggleItalic },\n { kind: \"button\", id: \"code\", icon: \"ti ti-code\", title: \"Inline code (Ctrl/Cmd+E)\", run: toggleCode },\n { kind: \"button\", id: \"link\", icon: \"ti ti-link\", title: \"Link (Ctrl/Cmd+K)\", run: insertLink },\n { kind: \"separator\" },\n { kind: \"button\", id: \"h1\", icon: \"ti ti-h-1\", title: \"Heading 1 (Ctrl/Cmd+Shift+1)\", run: (textarea) => toggleHeading(textarea, 1) },\n { kind: \"button\", id: \"h2\", icon: \"ti ti-h-2\", title: \"Heading 2 (Ctrl/Cmd+Shift+2)\", run: (textarea) => toggleHeading(textarea, 2) },\n { kind: \"button\", id: \"h3\", icon: \"ti ti-h-3\", title: \"Heading 3 (Ctrl/Cmd+Shift+3)\", run: (textarea) => toggleHeading(textarea, 3) },\n { kind: \"separator\" },\n { kind: \"button\", id: \"bullet\", icon: \"ti ti-list\", title: \"Bullet list (Ctrl/Cmd+Shift+8)\", run: toggleBulletList },\n { kind: \"button\", id: \"ordered\", icon: \"ti ti-list-numbers\", title: \"Numbered list (Ctrl/Cmd+Shift+7)\", run: toggleNumberedList },\n { kind: \"button\", id: \"quote\", icon: \"ti ti-quote\", title: \"Quote\", run: toggleQuote },\n];\n\nexport default function Toolbar(props: ToolbarProps): JSX.Element {\n const messages = useUiMessages();\n const title = (id: string, fallback: string): string =>\n ({\n bold: messages().boldShortcut,\n italic: messages().italicShortcut,\n code: messages().inlineCodeShortcut,\n link: messages().linkShortcut,\n h1: messages().heading1Shortcut,\n h2: messages().heading2Shortcut,\n h3: messages().heading3Shortcut,\n bullet: messages().bulletListShortcut,\n ordered: messages().numberedListShortcut,\n quote: messages().quote,\n })[id] ?? fallback;\n let toolbar!: HTMLDivElement;\n const moveFocus = (event: KeyboardEvent): void => {\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) return;\n const buttons = Array.from(toolbar.querySelectorAll<HTMLButtonElement>(\".k2b-markdown-editor__tool:not(:disabled)\"));\n if (buttons.length === 0) return;\n const current = Math.max(\n 0,\n buttons.findIndex((button) => button === document.activeElement),\n );\n const next =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? buttons.length - 1\n : event.key === \"ArrowLeft\"\n ? (current - 1 + buttons.length) % buttons.length\n : (current + 1) % buttons.length;\n event.preventDefault();\n for (const button of buttons) button.tabIndex = -1;\n buttons[next]!.tabIndex = 0;\n buttons[next]!.focus();\n };\n\n return (\n <div ref={toolbar} class=\"k2b-markdown-editor__toolbar\" role=\"toolbar\" aria-label={messages().markdownFormatting} onKeyDown={moveFocus}>\n <For each={TOOLS}>\n {(tool, index) =>\n tool.kind === \"separator\" ? (\n <span class=\"k2b-markdown-editor__separator\" aria-hidden=\"true\" />\n ) : (\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={title(tool.id, tool.title)}\n aria-label={title(tool.id, tool.title)}\n aria-pressed={props.activeFormats?.().has(tool.id) ? \"true\" : undefined}\n disabled={props.disabled}\n tabIndex={index() === 0 ? 0 : -1}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n const textarea = props.textarea();\n if (textarea) tool.run(textarea);\n }}\n >\n <i class={tool.icon} aria-hidden=\"true\" />\n </button>\n )\n }\n </For>\n <Show when={props.trailing}>\n <span class=\"k2b-markdown-editor__trailing\">{props.trailing}</span>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["replaceTextareaRange","replaceRange","lineAt","value","position","lineStart","lastIndexOf","nextNewline","indexOf","lineEnd","length","line","slice","selectedLineRange","textarea","selectionStart","selectionEnd","startLine","adjustedEnd","endLine","start","end","lines","split","toggleInlineWrap","marker","placeholder","markerLength","before","Math","max","after","setSelectionRange","selected","startsWith","endsWith","stripped","toggleBold","toggleItalic","toggleCode","insertLink","url","label","finalUrl","caret","togglePrefix","prefix","parts","map","match","exec","indent","body","remove","every","replacement","join","toggleHeading","level","oldCaret","repeat","existing","next","desired","min","toggleBulletList","toggleQuote","toggleNumberedList","Boolean","index"],"sources":["inputs/markdown/actions.ts"],"sourcesContent":["import { replaceTextareaRange as replaceRange } from \"../editor-dom\";\n\nconst lineAt = (value: string, position: number): { lineStart: number; lineEnd: number; line: string } => {\n const lineStart = value.lastIndexOf(\"\\n\", position - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", position);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n return { lineStart, lineEnd, line: value.slice(lineStart, lineEnd) };\n};\n\nconst selectedLineRange = (textarea: HTMLTextAreaElement): { start: number; end: number; lines: string[] } => {\n const { value, selectionStart, selectionEnd } = textarea;\n const startLine = lineAt(value, selectionStart);\n const adjustedEnd =\n selectionEnd > selectionStart && selectionEnd > 0 && value[selectionEnd - 1] === \"\\n\" ? selectionEnd - 1 : selectionEnd;\n const endLine = lineAt(value, adjustedEnd);\n return {\n start: startLine.lineStart,\n end: endLine.lineEnd,\n lines: value.slice(startLine.lineStart, endLine.lineEnd).split(\"\\n\"),\n };\n};\n\nconst toggleInlineWrap = (textarea: HTMLTextAreaElement, marker: string, placeholder: string): void => {\n const { value, selectionStart, selectionEnd } = textarea;\n const markerLength = marker.length;\n const before = value.slice(Math.max(0, selectionStart - markerLength), selectionStart);\n const after = value.slice(selectionEnd, selectionEnd + markerLength);\n if (before === marker && after === marker) {\n replaceRange(textarea, selectionStart - markerLength, selectionEnd + markerLength, value.slice(selectionStart, selectionEnd));\n textarea.setSelectionRange(selectionStart - markerLength, selectionEnd - markerLength);\n return;\n }\n\n const selected = value.slice(selectionStart, selectionEnd);\n if (selected.length >= markerLength * 2 && selected.startsWith(marker) && selected.endsWith(marker)) {\n const stripped = selected.slice(markerLength, -markerLength);\n replaceRange(textarea, selectionStart, selectionEnd, stripped);\n textarea.setSelectionRange(selectionStart, selectionStart + stripped.length);\n return;\n }\n\n if (selectionStart === selectionEnd) {\n replaceRange(textarea, selectionStart, selectionEnd, marker + placeholder + marker);\n textarea.setSelectionRange(selectionStart + markerLength, selectionStart + markerLength + placeholder.length);\n } else {\n replaceRange(textarea, selectionStart, selectionEnd, marker + selected + marker);\n textarea.setSelectionRange(selectionStart + markerLength, selectionStart + markerLength + selected.length);\n }\n};\n\nexport const toggleBold = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"**\", \"bold text\");\nexport const toggleItalic = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"*\", \"italic text\");\nexport const toggleCode = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"`\", \"code\");\n\nexport const insertLink = (textarea: HTMLTextAreaElement, url?: string): void => {\n const { value, selectionStart, selectionEnd } = textarea;\n const selected = value.slice(selectionStart, selectionEnd);\n const label = selected || \"link\";\n const finalUrl = url ?? \"\";\n replaceRange(textarea, selectionStart, selectionEnd, `[${label}](${finalUrl})`);\n if (finalUrl) {\n textarea.setSelectionRange(selectionStart + 1, selectionStart + 1 + label.length);\n } else {\n const caret = selectionStart + label.length + 3;\n textarea.setSelectionRange(caret, caret);\n }\n};\n\nconst togglePrefix = (textarea: HTMLTextAreaElement, prefix: string): void => {\n const { start, end, lines } = selectedLineRange(textarea);\n const parts = lines.map((line) => {\n const match = /^(\\s*)(.*)$/.exec(line)!;\n return { indent: match[1]!, body: match[2]! };\n });\n const remove = parts.every(({ body }) => body.startsWith(prefix));\n const replacement = parts.map(({ indent, body }) => (remove ? indent + body.slice(prefix.length) : indent + prefix + body)).join(\"\\n\");\n replaceRange(textarea, start, end, replacement);\n textarea.setSelectionRange(start, start + replacement.length);\n};\n\nexport const toggleHeading = (textarea: HTMLTextAreaElement, level: 1 | 2 | 3): void => {\n const oldCaret = textarea.selectionStart;\n const { lineStart, lineEnd, line } = lineAt(textarea.value, oldCaret);\n const prefix = `${\"#\".repeat(level)} `;\n const existing = /^(#{1,6})\\s/.exec(line);\n const next =\n existing?.[1]?.length === level ? line.slice(existing[0].length) : existing ? prefix + line.slice(existing[0].length) : prefix + line;\n replaceRange(textarea, lineStart, lineEnd, next);\n const desired = Math.max(lineStart, oldCaret + next.length - line.length);\n const caret = Math.min(desired, lineStart + next.length);\n textarea.setSelectionRange(caret, caret);\n};\n\nexport const toggleBulletList = (textarea: HTMLTextAreaElement): void => togglePrefix(textarea, \"- \");\nexport const toggleQuote = (textarea: HTMLTextAreaElement): void => togglePrefix(textarea, \"> \");\n\nexport const toggleNumberedList = (textarea: HTMLTextAreaElement): void => {\n const { start, end, lines } = selectedLineRange(textarea);\n const parts = lines.map((line) => {\n const match = /^(\\s*)(\\d+\\.\\s)?(.*)$/.exec(line)!;\n return {\n indent: match[1] ?? \"\",\n marker: match[2],\n body: match[3] ?? \"\",\n };\n });\n const remove = parts.every(({ marker }) => Boolean(marker));\n const replacement = parts.map(({ indent, body }, index) => (remove ? indent + body : `${indent}${index + 1}. ${body}`)).join(\"\\n\");\n replaceRange(textarea, start, end, replacement);\n textarea.setSelectionRange(start, start + replacement.length);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/markdown/actions.ts"],"sourcesContent":["import { replaceTextareaRange as replaceRange } from \"../editor-dom\";\n\nconst lineAt = (value: string, position: number): { lineStart: number; lineEnd: number; line: string } => {\n const lineStart = value.lastIndexOf(\"\\n\", position - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", position);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n return { lineStart, lineEnd, line: value.slice(lineStart, lineEnd) };\n};\n\nconst selectedLineRange = (textarea: HTMLTextAreaElement): { start: number; end: number; lines: string[] } => {\n const { value, selectionStart, selectionEnd } = textarea;\n const startLine = lineAt(value, selectionStart);\n const adjustedEnd =\n selectionEnd > selectionStart && selectionEnd > 0 && value[selectionEnd - 1] === \"\\n\" ? selectionEnd - 1 : selectionEnd;\n const endLine = lineAt(value, adjustedEnd);\n return {\n start: startLine.lineStart,\n end: endLine.lineEnd,\n lines: value.slice(startLine.lineStart, endLine.lineEnd).split(\"\\n\"),\n };\n};\n\nconst toggleInlineWrap = (textarea: HTMLTextAreaElement, marker: string, placeholder: string): void => {\n const { value, selectionStart, selectionEnd } = textarea;\n const markerLength = marker.length;\n const before = value.slice(Math.max(0, selectionStart - markerLength), selectionStart);\n const after = value.slice(selectionEnd, selectionEnd + markerLength);\n if (before === marker && after === marker) {\n replaceRange(textarea, selectionStart - markerLength, selectionEnd + markerLength, value.slice(selectionStart, selectionEnd));\n textarea.setSelectionRange(selectionStart - markerLength, selectionEnd - markerLength);\n return;\n }\n\n const selected = value.slice(selectionStart, selectionEnd);\n if (selected.length >= markerLength * 2 && selected.startsWith(marker) && selected.endsWith(marker)) {\n const stripped = selected.slice(markerLength, -markerLength);\n replaceRange(textarea, selectionStart, selectionEnd, stripped);\n textarea.setSelectionRange(selectionStart, selectionStart + stripped.length);\n return;\n }\n\n if (selectionStart === selectionEnd) {\n replaceRange(textarea, selectionStart, selectionEnd, marker + placeholder + marker);\n textarea.setSelectionRange(selectionStart + markerLength, selectionStart + markerLength + placeholder.length);\n } else {\n replaceRange(textarea, selectionStart, selectionEnd, marker + selected + marker);\n textarea.setSelectionRange(selectionStart + markerLength, selectionStart + markerLength + selected.length);\n }\n};\n\nexport const toggleBold = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"**\", \"bold text\");\nexport const toggleItalic = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"*\", \"italic text\");\nexport const toggleCode = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"`\", \"code\");\n\nexport const insertLink = (textarea: HTMLTextAreaElement, url?: string): void => {\n const { value, selectionStart, selectionEnd } = textarea;\n const selected = value.slice(selectionStart, selectionEnd);\n const label = selected || \"link\";\n const finalUrl = url ?? \"\";\n replaceRange(textarea, selectionStart, selectionEnd, `[${label}](${finalUrl})`);\n if (finalUrl) {\n textarea.setSelectionRange(selectionStart + 1, selectionStart + 1 + label.length);\n } else {\n const caret = selectionStart + label.length + 3;\n textarea.setSelectionRange(caret, caret);\n }\n};\n\nconst togglePrefix = (textarea: HTMLTextAreaElement, prefix: string): void => {\n const { start, end, lines } = selectedLineRange(textarea);\n const parts = lines.map((line) => {\n const match = /^(\\s*)(.*)$/.exec(line)!;\n return { indent: match[1]!, body: match[2]! };\n });\n const remove = parts.every(({ body }) => body.startsWith(prefix));\n const replacement = parts.map(({ indent, body }) => (remove ? indent + body.slice(prefix.length) : indent + prefix + body)).join(\"\\n\");\n replaceRange(textarea, start, end, replacement);\n textarea.setSelectionRange(start, start + replacement.length);\n};\n\nexport const toggleHeading = (textarea: HTMLTextAreaElement, level: 1 | 2 | 3): void => {\n const oldCaret = textarea.selectionStart;\n const { lineStart, lineEnd, line } = lineAt(textarea.value, oldCaret);\n const prefix = `${\"#\".repeat(level)} `;\n const existing = /^(#{1,6})\\s/.exec(line);\n const next =\n existing?.[1]?.length === level ? line.slice(existing[0].length) : existing ? prefix + line.slice(existing[0].length) : prefix + line;\n replaceRange(textarea, lineStart, lineEnd, next);\n const desired = Math.max(lineStart, oldCaret + next.length - line.length);\n const caret = Math.min(desired, lineStart + next.length);\n textarea.setSelectionRange(caret, caret);\n};\n\nexport const toggleBulletList = (textarea: HTMLTextAreaElement): void => togglePrefix(textarea, \"- \");\nexport const toggleQuote = (textarea: HTMLTextAreaElement): void => togglePrefix(textarea, \"> \");\n\nexport const toggleNumberedList = (textarea: HTMLTextAreaElement): void => {\n const { start, end, lines } = selectedLineRange(textarea);\n const parts = lines.map((line) => {\n const match = /^(\\s*)(\\d+\\.\\s)?(.*)$/.exec(line)!;\n return {\n indent: match[1] ?? \"\",\n marker: match[2],\n body: match[3] ?? \"\",\n };\n });\n const remove = parts.every(({ marker }) => Boolean(marker));\n const replacement = parts.map(({ indent, body }, index) => (remove ? indent + body : `${indent}${index + 1}. ${body}`)).join(\"\\n\");\n replaceRange(textarea, start, end, replacement);\n textarea.setSelectionRange(start, start + replacement.length);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/markdown/active-formats.ts"],"sourcesContent":["const inOpenCode = (before: string): boolean => (before.match(/`/g) ?? []).length % 2 !== 0;\n\nconst inLinkUrl = (before: string): boolean => {\n const open = before.lastIndexOf(\"](\");\n return open !== -1 && !before.slice(open + 2).includes(\")\");\n};\n\nconst scrub = (value: string): string =>\n value\n .replace(/(?<!`)(`+)(?!`)([^\\n]+?)\\1(?!`)/g, (match) => \" \".repeat(match.length))\n .replace(/\\]\\(([^)\\n]*?)\\)/g, (match) => \" \".repeat(match.length));\n\nexport const computeActiveFormats = (textarea: HTMLTextAreaElement): Set<string> => {\n const { value, selectionStart } = textarea;\n const active = new Set<string>();\n const lineStart = value.lastIndexOf(\"\\n\", selectionStart - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", selectionStart);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n const line = value.slice(lineStart, lineEnd);\n const before = value.slice(lineStart, selectionStart);\n\n const heading = /^(#{1,3})\\s/.exec(line);\n if (heading) active.add(`h${heading[1]!.length}`);\n else if (/^\\s*[-*+]\\s/.test(line)) active.add(\"bullet\");\n else if (/^\\s*\\d+\\.\\s/.test(line)) active.add(\"ordered\");\n else if (/^>\\s/.test(line)) active.add(\"quote\");\n\n if (inOpenCode(before)) {\n active.add(\"code\");\n return active;\n }\n if (inLinkUrl(before)) return active;\n\n const clean = scrub(before);\n if ((clean.match(/\\*\\*/g) ?? []).length % 2 !== 0) active.add(\"bold\");\n if ((clean.replace(/\\*\\*/g, \"\").match(/\\*/g) ?? []).length % 2 !== 0) {\n active.add(\"italic\");\n }\n if ((clean.match(/__/g) ?? []).length % 2 !== 0) active.add(\"bold\");\n if ((clean.replace(/__/g, \"\").match(/_/g) ?? []).length % 2 !== 0) {\n active.add(\"italic\");\n }\n return active;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/markdown/behaviors.ts"],"sourcesContent":["import { replaceTextareaRange } from \"../editor-dom\";\nimport { insertLink, toggleBold, toggleBulletList, toggleCode, toggleHeading, toggleItalic, toggleNumberedList } from \"./actions\";\n\nconst isMac = (): boolean => typeof navigator !== \"undefined\" && /Mac|iPhone|iPad|iPod/i.test(navigator.platform);\n\ntype EditorAction = (element: HTMLTextAreaElement) => void;\n\n/** Keyed by `event.key.toLowerCase()`. A `Map` (not an object literal) so a\n * key that collides with an `Object.prototype` member — `constructor`,\n * `__proto__`, `valueOf`, … — resolves to \"no shortcut\" instead of picking\n * up an inherited value and throwing inside the keydown handler. */\nconst INLINE_ACTIONS = new Map<string, EditorAction>([\n [\"b\", toggleBold],\n [\"i\", toggleItalic],\n [\"e\", toggleCode],\n [\"k\", insertLink],\n]);\n\n/** Keyed by `event.code` (layout-independent physical key), so Shift+1 maps\n * to H1 on QWERTY, AZERTY and German layouts alike. Same `Map` rationale. */\nconst BLOCK_ACTIONS = new Map<string, EditorAction>([\n [\"Digit1\", (element) => toggleHeading(element, 1)],\n [\"Digit2\", (element) => toggleHeading(element, 2)],\n [\"Digit3\", (element) => toggleHeading(element, 3)],\n [\"Digit7\", toggleNumberedList],\n [\"Digit8\", toggleBulletList],\n]);\n\nexport const handleShortcut = (event: KeyboardEvent, textarea: HTMLTextAreaElement): boolean => {\n if (event.isComposing || event.altKey) return false;\n if (!(isMac() ? event.metaKey : event.ctrlKey)) return false;\n const action = event.shiftKey ? BLOCK_ACTIONS.get(event.code) : INLINE_ACTIONS.get(event.key.toLowerCase());\n if (!action) return false;\n action(textarea);\n return true;\n};\n\nconst LIST_RE = /^(\\s*)([-*+]|\\d+\\.)(\\s+)(.*)$/;\n\nexport const handleListContinuation = (textarea: HTMLTextAreaElement): boolean => {\n const { value, selectionStart, selectionEnd } = textarea;\n if (selectionStart !== selectionEnd) return false;\n const lineStart = value.lastIndexOf(\"\\n\", selectionStart - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", selectionStart);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n const match = LIST_RE.exec(value.slice(lineStart, lineEnd));\n if (!match) return false;\n\n const [, indent = \"\", marker = \"-\", spaces = \" \", content = \"\"] = match;\n const markerEnd = lineStart + indent.length + marker.length + spaces.length;\n if (selectionStart < markerEnd) return false;\n if (content.trim() === \"\") {\n replaceTextareaRange(textarea, lineStart, lineEnd, \"\");\n return true;\n }\n const numbered = /^(\\d+)\\.$/.exec(marker);\n const nextMarker = numbered ? `${Number.parseInt(numbered[1]!, 10) + 1}.` : marker;\n replaceTextareaRange(textarea, selectionStart, selectionStart, `\\n${indent}${nextMarker}${spaces}`);\n return true;\n};\n\nconst URL_RE = /^https?:\\/\\/\\S+$/;\nconst validUrl = (value: string): boolean => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const handleSmartPaste = (event: ClipboardEvent, textarea: HTMLTextAreaElement): boolean => {\n const value = event.clipboardData?.getData(\"text/plain\").trim();\n if (!value || !URL_RE.test(value) || !validUrl(value) || textarea.selectionStart === textarea.selectionEnd) {\n return false;\n }\n insertLink(textarea, value.replace(/\\(/g, \"%28\").replace(/\\)/g, \"%29\"));\n return true;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/markdown/code-zone.ts"],"sourcesContent":["export const isInCodeZone = (text: string, position: number): boolean => {\n const before = text.slice(0, position);\n const fences = before.match(/^```/gm);\n if (fences && fences.length % 2 !== 0) return true;\n const line = before.slice(before.lastIndexOf(\"\\n\") + 1);\n return (line.match(/`/g) ?? []).length % 2 !== 0;\n};\n"],"mappings":"AAAA,OAAO,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,QAAgB,KAAc;EACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;EACtC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;EACrC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI;EAClD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACvD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,KAAK,CAAC;AAClD,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["internal/color.ts"],"sourcesContent":["import type { JSX } from \"solid-js\";\n\nconst HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;\n\nexport const normalizeHexColor = (value: string | null | undefined): string | undefined => {\n const color = value?.trim();\n return color && HEX_COLOR.test(color) ? color : undefined;\n};\n\nexport const hexWithAlpha = (value: string, alpha: string): string => {\n const hex = value.slice(1);\n const expanded = hex.length === 3 ? [...hex].map((digit) => `${digit}${digit}`).join(\"\") : hex;\n return `#${expanded}${alpha}`;\n};\n\nexport const colorTintStyle = (value: string | null | undefined): JSX.CSSProperties | undefined => {\n const color = normalizeHexColor(value);\n return color\n ? {\n \"--k2b-choice-color\": color,\n \"--k2b-choice-background\": hexWithAlpha(color, \"1f\"),\n }\n : undefined;\n};\n"],"mappings":"AAEA,MAAM,SAAS,GAAG,iCAAiC;AAEnD,OAAO,MAAM,iBAAiB,GAAI,KAAgC,IAAyB;EACzF,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;EAC3B,OAAO,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,SAAS;AAC3D,CAAC;AAED,OAAO,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,KAAa,KAAa;EACpE,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAE,KAAK,IAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG;EAC9F,OAAO,IAAI,QAAQ,GAAG,KAAK,EAAE;AAC/B,CAAC;AAED,OAAO,MAAM,cAAc,GAAI,KAAgC,IAAoC;EACjG,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;EACtC,OAAO,KAAK,GACR;IACE,oBAAoB,EAAE,KAAK;IAC3B,yBAAyB,EAAE,YAAY,CAAC,KAAK,EAAE,IAAI;EACrD,CAAC,GACD,SAAS;AACf,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["aria-label","aria-labelledby","aria-describedby","aria-invalid","aria-required"],"sources":["internal/field.tsx"],"sourcesContent":["import { createUniqueId, type JSX, Show } from \"solid-js\";\nimport type { FieldProps } from \"../inputs/field-contract\";\nimport { resolveMaybeAccessor } from \"../inputs/field-contract\";\n\nexport type FieldMeta = {\n controlId: string;\n labelId: string;\n descriptionId: string;\n errorId: string;\n};\n\nexport const createFieldMeta = (id?: string): FieldMeta => {\n const generatedId = createUniqueId();\n const controlId = id ?? `k2b-field-${generatedId}`;\n\n return {\n controlId,\n labelId: `${controlId}-label`,\n descriptionId: `${controlId}-description`,\n errorId: `${controlId}-error`,\n };\n};\n\ntype FieldLayoutProps = {\n children: JSX.Element;\n meta: FieldMeta;\n fill?: boolean;\n /** Composite controls use aria-labelledby instead of an HTML label target. */\n labelFor?: string | false;\n} & Pick<FieldProps, \"class\" | \"description\" | \"error\" | \"label\" | \"required\" | \"disabled\">;\n\nexport function Field(props: FieldLayoutProps): JSX.Element {\n const error = () => resolveMaybeAccessor(props.error);\n\n return (\n <div\n class={`k2b-field ${props.class ?? \"\"}`}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-fill={props.fill ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n >\n <Show when={props.label}>\n <Show\n when={props.labelFor !== false}\n fallback={\n <span id={props.meta.labelId} class=\"k2b-field__label\">\n {props.label}\n <Show when={props.required}>\n <span class=\"k2b-field__required\" aria-hidden=\"true\">\n *\n </span>\n </Show>\n </span>\n }\n >\n <label id={props.meta.labelId} class=\"k2b-field__label\" for={props.labelFor || props.meta.controlId}>\n {props.label}\n <Show when={props.required}>\n <span class=\"k2b-field__required\" aria-hidden=\"true\">\n *\n </span>\n </Show>\n </label>\n </Show>\n </Show>\n <Show when={props.description}>\n <p class=\"k2b-field__description\" id={props.meta.descriptionId}>\n {props.description}\n </p>\n </Show>\n {props.children}\n <Show when={error()}>\n <p class=\"k2b-field__error\" id={props.meta.errorId} role=\"alert\" aria-live=\"polite\">\n {error()}\n </p>\n </Show>\n </div>\n );\n}\n\ntype FieldAriaOwner = Pick<FieldProps, \"aria-describedby\" | \"aria-label\" | \"description\" | \"error\" | \"label\" | \"required\">;\n\nexport const fieldDescribedBy = (meta: FieldMeta, owner: FieldAriaOwner): string | undefined =>\n [\n owner[\"aria-describedby\"],\n owner.description ? meta.descriptionId : undefined,\n resolveMaybeAccessor(owner.error) ? meta.errorId : undefined,\n ]\n .filter(Boolean)\n .join(\" \") || undefined;\n\nexport const fieldControlAria = (meta: FieldMeta, owner: FieldAriaOwner) => ({\n get \"aria-label\"() {\n return owner.label ? undefined : owner[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return owner.label ? meta.labelId : undefined;\n },\n get \"aria-describedby\"() {\n return fieldDescribedBy(meta, owner);\n },\n get \"aria-invalid\"() {\n return resolveMaybeAccessor(owner.error) ? (\"true\" as const) : undefined;\n },\n get \"aria-required\"() {\n return owner.required || undefined;\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["internal/portal.ts"],"sourcesContent":["const PORTAL_ATTRIBUTE = \"data-k2b-ui-portal\";\n\nconst activeScope = (): HTMLElement | undefined => {\n const active = document.activeElement;\n return active instanceof Element ? ((active.closest(\".k2b-ui\") as HTMLElement | null) ?? undefined) : undefined;\n};\n\nexport const getK2bPortalRoot = (scope?: HTMLElement | null): HTMLElement => {\n const owner = scope ?? activeScope() ?? document.querySelector<HTMLElement>(\".k2b-ui\") ?? document.body;\n const existing = Array.from(owner.children).find((child) => child instanceof HTMLElement && child.hasAttribute(PORTAL_ATTRIBUTE));\n if (existing instanceof HTMLElement) return existing;\n\n const root = document.createElement(\"div\");\n root.setAttribute(PORTAL_ATTRIBUTE, \"\");\n root.classList.add(\"k2b-ui-portal\");\n if (owner === document.body && !owner.classList.contains(\"k2b-ui\")) root.classList.add(\"k2b-ui\");\n owner.appendChild(root);\n return root;\n};\n"],"mappings":"AAAA,MAAM,gBAAgB,GAAG,oBAAoB;AAE7C,MAAM,WAAW,GAAG,MAA+B;EACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa;EACrC,OAAO,MAAM,YAAY,OAAO,GAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAA2B,SAAS,GAAI,SAAS;AACjH,CAAC;AAED,OAAO,MAAM,gBAAgB,GAAI,KAA0B,IAAkB;EAC3E,MAAM,KAAK,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAc,SAAS,CAAC,IAAI,QAAQ,CAAC,IAAI;EACvG,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAE,KAAK,IAAK,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;EACjI,IAAI,QAAQ,YAAY,WAAW,EAAE,OAAO,QAAQ;EAEpD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EAC1C,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC;EACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;EACnC,IAAI,KAAK,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;EAChG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;EACvB,OAAO,IAAI;AACb,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["dates","text","Show","splitProps","useLocale","FALLBACK","toDate","value","date","Date","Number","isNaN","getTime","isoDuration","ms","totalMilliseconds","Math","round","totalSeconds","floor","milliseconds","days","hours","minutes","seconds","fractionalSeconds","String","padStart","replace","time","FormatNumber","props","own","rest","locale","_$ssrElement","_$escape","pprintNumber","compact","decimals","fallback","FormatPercent","pprintPercent","clamp","FormatCurrency","pprintCurrency","currency","FormatBytes","isFinite","pprintBytes","mode","temporalComponent","format","_$createComponent","when","children","_$mergeProps","datetime","toISOString","timeZone","FormatDate","context","formatDate","FormatTime","formatTime","FormatDateTime","formatDateTime","FormatRelativeTime","formatTimeSpan","base","calendarDay","test","startsWith","instant","slice","FormatRelativeDate","relative","targetDay","zone","isValidTimeZone","baseDay","parts","Intl","DateTimeFormat","calendar","numberingSystem","year","month","day","era","formatToParts","part","type","find","item","label","RelativeTimeFormat","numeric","undefined","FormatDuration","range","from","to","abs","formatDuration","FormatDurationMs","valid","duration","pprintDurationMs","Format","Percent","Currency","Bytes","Time","DateTime","RelativeTime","RelativeDate","Duration","DurationMs"],"sources":["intl/Format.tsx"],"sourcesContent":["import { type ByteMode, dates, text } from \"@k2b/stdlib\";\nimport { type JSX, Show, splitProps } from \"solid-js\";\nimport { useLocale } from \"./locale\";\n\nconst FALLBACK = \"—\";\n\ntype SpanProps = JSX.HTMLAttributes<HTMLSpanElement>;\n// Temporal components render `<time>` for valid values and a `<span>` fallback\n// otherwise, so their native attributes are typed against the shared element\n// base; `ref` is excluded because its value form is element-specific. The\n// `datetime` attribute is owned by the component itself.\ntype TimeElementProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"ref\">;\n\ntype LocaleProp = {\n /** Explicit locale override; defaults to the inherited render locale. */\n locale?: string;\n};\n\ntype FallbackProp = {\n /** Text rendered for null or invalid input. Defaults to `\"—\"`. */\n fallback?: string;\n};\n\nexport type FormatNumberProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n value: number | null | undefined;\n /** Use deterministic compact suffixes (`k`, `M`, `B`, `T`). */\n compact?: boolean;\n /** Fixed fraction digits. */\n decimals?: number;\n };\n\nexport type FormatPercentProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n /** Ratio input: `0.12` renders as `12%`. */\n value: number | null | undefined;\n /** Fixed fraction digits. Defaults to 0. */\n decimals?: number;\n /** Clamp the ratio to 0..1 before formatting. */\n clamp?: boolean;\n };\n\nexport type FormatCurrencyProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n value: number | null | undefined;\n /** ISO 4217 currency code, e.g. `\"EUR\"` or `\"USD\"`. */\n currency: string;\n /** Fixed fraction digits. Defaults to the currency's standard digits. */\n decimals?: number;\n };\n\nexport type FormatBytesProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n value: number | null | undefined;\n /** `\"iec\"` (default, 1024-base) or `\"si\"` (1000-base). */\n mode?: ByteMode;\n };\n\nexport type FormatDateProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n value: Date | string | null | undefined;\n /** IANA timezone. Defaults to `\"UTC\"` so server and browser text agree. */\n timeZone?: string;\n };\n\nexport type FormatTimeProps = FormatDateProps;\nexport type FormatDateTimeProps = FormatDateProps;\n\nexport type FormatRelativeTimeProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n value: Date | string | null | undefined;\n /** Deterministic base timestamp; defaults to now. */\n base?: Date | string;\n /** IANA timezone used to select calendar-relative labels. Defaults to `\"UTC\"`. */\n timeZone?: string;\n };\n\nexport type FormatRelativeDateProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n /** A Gregorian calendar date in strict YYYY-MM-DD format, never timezone-shifted. */\n value: string | null | undefined;\n /** Calendar date, Date, or ISO timestamp with an explicit offset. Defaults to now. */\n base?: Date | string;\n /** Zone used to read the base instant as a calendar day. Defaults to UTC. */\n timeZone?: string;\n };\n\nexport type FormatDurationProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n from: Date | string | null | undefined;\n to: Date | string | null | undefined;\n };\n\nexport type FormatDurationMsProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n /** Duration in milliseconds. */\n value: number | null | undefined;\n };\n\nconst toDate = (value: Date | string | null | undefined): Date | null => {\n if (value == null) return null;\n const date = typeof value === \"string\" ? new Date(value) : value;\n return Number.isNaN(date.getTime()) ? null : date;\n};\n\n/** ISO 8601 duration for the `<time datetime>` attribute, e.g. `\"PT2H30M\"`. */\nconst isoDuration = (ms: number): string => {\n const totalMilliseconds = Math.round(ms);\n if (totalMilliseconds <= 0) return \"PT0S\";\n const totalSeconds = Math.floor(totalMilliseconds / 1000);\n const milliseconds = totalMilliseconds % 1000;\n const days = Math.floor(totalSeconds / 86_400);\n const hours = Math.floor((totalSeconds % 86_400) / 3_600);\n const minutes = Math.floor((totalSeconds % 3_600) / 60);\n const seconds = totalSeconds % 60;\n const fractionalSeconds = milliseconds ? `${seconds}.${String(milliseconds).padStart(3, \"0\").replace(/0+$/, \"\")}S` : \"\";\n const time = `${hours ? `${hours}H` : \"\"}${minutes ? `${minutes}M` : \"\"}${fractionalSeconds || (seconds ? `${seconds}S` : \"\")}`;\n return `P${days ? `${days}D` : \"\"}${time ? `T${time}` : \"\"}`;\n};\n\nconst FormatNumber = (props: FormatNumberProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"compact\", \"decimals\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {text.pprintNumber(own.value, {\n locale: own.locale ?? locale(),\n compact: own.compact,\n decimals: own.decimals,\n fallback: own.fallback,\n })}\n </span>\n );\n};\n\nconst FormatPercent = (props: FormatPercentProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"decimals\", \"clamp\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {text.pprintPercent(own.value, {\n locale: own.locale ?? locale(),\n decimals: own.decimals,\n clamp: own.clamp,\n fallback: own.fallback,\n })}\n </span>\n );\n};\n\nconst FormatCurrency = (props: FormatCurrencyProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"currency\", \"locale\", \"decimals\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {text.pprintCurrency(own.value, own.currency, {\n locale: own.locale ?? locale(),\n decimals: own.decimals,\n fallback: own.fallback,\n })}\n </span>\n );\n};\n\nconst FormatBytes = (props: FormatBytesProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"mode\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {typeof own.value === \"number\" && Number.isFinite(own.value)\n ? text.pprintBytes(own.value, { locale: own.locale ?? locale(), mode: own.mode })\n : (own.fallback ?? FALLBACK)}\n </span>\n );\n};\n\ntype TemporalFormatter = (date: Date, context: { locale: string; timeZone: string }) => string;\n\nconst temporalComponent =\n (format: TemporalFormatter) =>\n (props: FormatDateProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"timeZone\", \"fallback\"]);\n const locale = useLocale();\n return (\n <Show when={toDate(own.value)} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(date) => (\n <time {...rest} datetime={date().toISOString()}>\n {format(date(), { locale: own.locale ?? locale(), timeZone: own.timeZone ?? \"UTC\" })}\n </time>\n )}\n </Show>\n );\n };\n\nconst FormatDate = temporalComponent((date, context) => dates.formatDate(date, context));\nconst FormatTime = temporalComponent((date, context) => dates.formatTime(date, context));\nconst FormatDateTime = temporalComponent((date, context) => dates.formatDateTime(date, context));\n\nconst FormatRelativeTime = (props: FormatRelativeTimeProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"base\", \"timeZone\", \"fallback\"]);\n const locale = useLocale();\n return (\n <Show when={toDate(own.value)} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(date) => (\n <time {...rest} datetime={date().toISOString()}>\n {dates.formatTimeSpan(date(), { locale: own.locale ?? locale(), base: own.base, timeZone: own.timeZone ?? \"UTC\" })}\n </time>\n )}\n </Show>\n );\n};\n\n// Encode calendar dates as UTC day ordinals, not elapsed local-midnight time:\n// a calendar day remains one day across 23-hour and 25-hour DST transitions.\nconst calendarDay = (value: string | null | undefined): number | null => {\n if (!value || !/^\\d{4}-\\d{2}-\\d{2}$/.test(value) || value.startsWith(\"0000\")) return null;\n const instant = new Date(`${value}T00:00:00Z`);\n if (!Number.isFinite(instant.getTime()) || instant.toISOString().slice(0, 10) !== value) return null;\n return instant.getTime() / 86_400_000;\n};\n\nconst FormatRelativeDate = (props: FormatRelativeDateProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"base\", \"timeZone\", \"fallback\"]);\n const locale = useLocale();\n const relative = () => {\n const targetDay = calendarDay(own.value);\n const zone = own.timeZone ?? \"UTC\";\n if (targetDay === null || !dates.isValidTimeZone(zone)) return null;\n const base = own.base ?? new Date();\n let baseDay: number | null;\n if (typeof base === \"string\" && /^\\d{4}-\\d{2}-\\d{2}$/.test(base)) {\n baseDay = calendarDay(base);\n } else {\n // Offsetless timestamps depend on the host timezone and cannot hydrate reliably.\n if (typeof base === \"string\" && !/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})$/.test(base)) return null;\n if (typeof base === \"string\" && calendarDay(base.slice(0, 10)) === null) return null;\n const instant = toDate(base);\n if (!instant) return null;\n const parts = new Intl.DateTimeFormat(\"en-US\", {\n calendar: \"gregory\",\n numberingSystem: \"latn\",\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n era: \"short\",\n }).formatToParts(instant);\n const part = (type: Intl.DateTimeFormatPartTypes) => parts.find((item) => item.type === type)?.value;\n if (part(\"era\") !== \"AD\") return null;\n baseDay = calendarDay(`${part(\"year\")?.padStart(4, \"0\")}-${part(\"month\")}-${part(\"day\")}`);\n }\n if (baseDay === null) return null;\n return { label: new Intl.RelativeTimeFormat(own.locale ?? locale(), { numeric: \"auto\" }).format(targetDay - baseDay, \"day\") };\n };\n return (\n <Show when={relative()} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(value) => (\n <time {...rest} datetime={own.value ?? undefined}>\n {value().label}\n </time>\n )}\n </Show>\n );\n};\n\nconst FormatDuration = (props: FormatDurationProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"from\", \"to\", \"locale\", \"fallback\"]);\n const locale = useLocale();\n const range = () => {\n const from = toDate(own.from);\n const to = toDate(own.to);\n return from && to ? { from, to } : null;\n };\n return (\n <Show when={range()} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(value) => (\n <time {...rest} datetime={isoDuration(Math.abs(value().to.getTime() - value().from.getTime()))}>\n {dates.formatDuration(value().from, value().to, { locale: own.locale ?? locale() })}\n </time>\n )}\n </Show>\n );\n};\n\nconst FormatDurationMs = (props: FormatDurationMsProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"fallback\"]);\n const locale = useLocale();\n // Wrapped in an object because a valid duration of 0ms is falsy.\n const valid = (): { ms: number } | null => {\n const value = own.value;\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? { ms: value } : null;\n };\n return (\n <Show when={valid()} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(duration) => (\n <time {...rest} datetime={isoDuration(duration().ms)}>\n {text.pprintDurationMs(duration().ms, { locale: own.locale ?? locale() })}\n </time>\n )}\n </Show>\n );\n};\n\n/**\n * Unstyled semantic formatter components backed by `@k2b/stdlib`.\n *\n * Numeric components render a plain `<span>`; date/time components render\n * `<time>` with a canonical `datetime` attribute. All components inherit the\n * render locale (see `LocaleProvider` / `useLocale`) and accept an explicit\n * `locale` override. Date, Time, and DateTime format in UTC unless an\n * explicit `timeZone` is given, so server and browser output never diverge\n * with the runtime timezone.\n */\nexport const Format = {\n Number: FormatNumber,\n Percent: FormatPercent,\n Currency: FormatCurrency,\n Bytes: FormatBytes,\n Date: FormatDate,\n Time: FormatTime,\n DateTime: FormatDateTime,\n RelativeTime: FormatRelativeTime,\n RelativeDate: FormatRelativeDate,\n Duration: FormatDuration,\n DurationMs: FormatDurationMs,\n} as const;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["intl/Format.tsx"],"sourcesContent":["import { type ByteMode, dates, text } from \"@k2b/stdlib\";\nimport { type JSX, Show, splitProps } from \"solid-js\";\nimport { useLocale } from \"./locale\";\n\nconst FALLBACK = \"—\";\n\ntype SpanProps = JSX.HTMLAttributes<HTMLSpanElement>;\n// Temporal components render `<time>` for valid values and a `<span>` fallback\n// otherwise, so their native attributes are typed against the shared element\n// base; `ref` is excluded because its value form is element-specific. The\n// `datetime` attribute is owned by the component itself.\ntype TimeElementProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"ref\">;\n\ntype LocaleProp = {\n /** Explicit locale override; defaults to the inherited render locale. */\n locale?: string;\n};\n\ntype FallbackProp = {\n /** Text rendered for null or invalid input. Defaults to `\"—\"`. */\n fallback?: string;\n};\n\nexport type FormatNumberProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n value: number | null | undefined;\n /** Use deterministic compact suffixes (`k`, `M`, `B`, `T`). */\n compact?: boolean;\n /** Fixed fraction digits. */\n decimals?: number;\n };\n\nexport type FormatPercentProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n /** Ratio input: `0.12` renders as `12%`. */\n value: number | null | undefined;\n /** Fixed fraction digits. Defaults to 0. */\n decimals?: number;\n /** Clamp the ratio to 0..1 before formatting. */\n clamp?: boolean;\n };\n\nexport type FormatCurrencyProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n value: number | null | undefined;\n /** ISO 4217 currency code, e.g. `\"EUR\"` or `\"USD\"`. */\n currency: string;\n /** Fixed fraction digits. Defaults to the currency's standard digits. */\n decimals?: number;\n };\n\nexport type FormatBytesProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n value: number | null | undefined;\n /** `\"iec\"` (default, 1024-base) or `\"si\"` (1000-base). */\n mode?: ByteMode;\n };\n\nexport type FormatDateProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n value: Date | string | null | undefined;\n /** IANA timezone. Defaults to `\"UTC\"` so server and browser text agree. */\n timeZone?: string;\n };\n\nexport type FormatTimeProps = FormatDateProps;\nexport type FormatDateTimeProps = FormatDateProps;\n\nexport type FormatRelativeTimeProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n value: Date | string | null | undefined;\n /** Deterministic base timestamp; defaults to now. */\n base?: Date | string;\n /** IANA timezone used to select calendar-relative labels. Defaults to `\"UTC\"`. */\n timeZone?: string;\n };\n\nexport type FormatRelativeDateProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n /** A Gregorian calendar date in strict YYYY-MM-DD format, never timezone-shifted. */\n value: string | null | undefined;\n /** Calendar date, Date, or ISO timestamp with an explicit offset. Defaults to now. */\n base?: Date | string;\n /** Zone used to read the base instant as a calendar day. Defaults to UTC. */\n timeZone?: string;\n };\n\nexport type FormatDurationProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n from: Date | string | null | undefined;\n to: Date | string | null | undefined;\n };\n\nexport type FormatDurationMsProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n /** Duration in milliseconds. */\n value: number | null | undefined;\n };\n\nconst toDate = (value: Date | string | null | undefined): Date | null => {\n if (value == null) return null;\n const date = typeof value === \"string\" ? new Date(value) : value;\n return Number.isNaN(date.getTime()) ? null : date;\n};\n\n/** ISO 8601 duration for the `<time datetime>` attribute, e.g. `\"PT2H30M\"`. */\nconst isoDuration = (ms: number): string => {\n const totalMilliseconds = Math.round(ms);\n if (totalMilliseconds <= 0) return \"PT0S\";\n const totalSeconds = Math.floor(totalMilliseconds / 1000);\n const milliseconds = totalMilliseconds % 1000;\n const days = Math.floor(totalSeconds / 86_400);\n const hours = Math.floor((totalSeconds % 86_400) / 3_600);\n const minutes = Math.floor((totalSeconds % 3_600) / 60);\n const seconds = totalSeconds % 60;\n const fractionalSeconds = milliseconds ? `${seconds}.${String(milliseconds).padStart(3, \"0\").replace(/0+$/, \"\")}S` : \"\";\n const time = `${hours ? `${hours}H` : \"\"}${minutes ? `${minutes}M` : \"\"}${fractionalSeconds || (seconds ? `${seconds}S` : \"\")}`;\n return `P${days ? `${days}D` : \"\"}${time ? `T${time}` : \"\"}`;\n};\n\nconst FormatNumber = (props: FormatNumberProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"compact\", \"decimals\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {text.pprintNumber(own.value, {\n locale: own.locale ?? locale(),\n compact: own.compact,\n decimals: own.decimals,\n fallback: own.fallback,\n })}\n </span>\n );\n};\n\nconst FormatPercent = (props: FormatPercentProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"decimals\", \"clamp\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {text.pprintPercent(own.value, {\n locale: own.locale ?? locale(),\n decimals: own.decimals,\n clamp: own.clamp,\n fallback: own.fallback,\n })}\n </span>\n );\n};\n\nconst FormatCurrency = (props: FormatCurrencyProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"currency\", \"locale\", \"decimals\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {text.pprintCurrency(own.value, own.currency, {\n locale: own.locale ?? locale(),\n decimals: own.decimals,\n fallback: own.fallback,\n })}\n </span>\n );\n};\n\nconst FormatBytes = (props: FormatBytesProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"mode\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {typeof own.value === \"number\" && Number.isFinite(own.value)\n ? text.pprintBytes(own.value, { locale: own.locale ?? locale(), mode: own.mode })\n : (own.fallback ?? FALLBACK)}\n </span>\n );\n};\n\ntype TemporalFormatter = (date: Date, context: { locale: string; timeZone: string }) => string;\n\nconst temporalComponent =\n (format: TemporalFormatter) =>\n (props: FormatDateProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"timeZone\", \"fallback\"]);\n const locale = useLocale();\n return (\n <Show when={toDate(own.value)} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(date) => (\n <time {...rest} datetime={date().toISOString()}>\n {format(date(), { locale: own.locale ?? locale(), timeZone: own.timeZone ?? \"UTC\" })}\n </time>\n )}\n </Show>\n );\n };\n\nconst FormatDate = temporalComponent((date, context) => dates.formatDate(date, context));\nconst FormatTime = temporalComponent((date, context) => dates.formatTime(date, context));\nconst FormatDateTime = temporalComponent((date, context) => dates.formatDateTime(date, context));\n\nconst FormatRelativeTime = (props: FormatRelativeTimeProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"base\", \"timeZone\", \"fallback\"]);\n const locale = useLocale();\n return (\n <Show when={toDate(own.value)} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(date) => (\n <time {...rest} datetime={date().toISOString()}>\n {dates.formatTimeSpan(date(), { locale: own.locale ?? locale(), base: own.base, timeZone: own.timeZone ?? \"UTC\" })}\n </time>\n )}\n </Show>\n );\n};\n\n// Encode calendar dates as UTC day ordinals, not elapsed local-midnight time:\n// a calendar day remains one day across 23-hour and 25-hour DST transitions.\nconst calendarDay = (value: string | null | undefined): number | null => {\n if (!value || !/^\\d{4}-\\d{2}-\\d{2}$/.test(value) || value.startsWith(\"0000\")) return null;\n const instant = new Date(`${value}T00:00:00Z`);\n if (!Number.isFinite(instant.getTime()) || instant.toISOString().slice(0, 10) !== value) return null;\n return instant.getTime() / 86_400_000;\n};\n\nconst FormatRelativeDate = (props: FormatRelativeDateProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"base\", \"timeZone\", \"fallback\"]);\n const locale = useLocale();\n const relative = () => {\n const targetDay = calendarDay(own.value);\n const zone = own.timeZone ?? \"UTC\";\n if (targetDay === null || !dates.isValidTimeZone(zone)) return null;\n const base = own.base ?? new Date();\n let baseDay: number | null;\n if (typeof base === \"string\" && /^\\d{4}-\\d{2}-\\d{2}$/.test(base)) {\n baseDay = calendarDay(base);\n } else {\n // Offsetless timestamps depend on the host timezone and cannot hydrate reliably.\n if (typeof base === \"string\" && !/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})$/.test(base)) return null;\n if (typeof base === \"string\" && calendarDay(base.slice(0, 10)) === null) return null;\n const instant = toDate(base);\n if (!instant) return null;\n const parts = new Intl.DateTimeFormat(\"en-US\", {\n calendar: \"gregory\",\n numberingSystem: \"latn\",\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n era: \"short\",\n }).formatToParts(instant);\n const part = (type: Intl.DateTimeFormatPartTypes) => parts.find((item) => item.type === type)?.value;\n if (part(\"era\") !== \"AD\") return null;\n baseDay = calendarDay(`${part(\"year\")?.padStart(4, \"0\")}-${part(\"month\")}-${part(\"day\")}`);\n }\n if (baseDay === null) return null;\n return { label: new Intl.RelativeTimeFormat(own.locale ?? locale(), { numeric: \"auto\" }).format(targetDay - baseDay, \"day\") };\n };\n return (\n <Show when={relative()} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(value) => (\n <time {...rest} datetime={own.value ?? undefined}>\n {value().label}\n </time>\n )}\n </Show>\n );\n};\n\nconst FormatDuration = (props: FormatDurationProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"from\", \"to\", \"locale\", \"fallback\"]);\n const locale = useLocale();\n const range = () => {\n const from = toDate(own.from);\n const to = toDate(own.to);\n return from && to ? { from, to } : null;\n };\n return (\n <Show when={range()} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(value) => (\n <time {...rest} datetime={isoDuration(Math.abs(value().to.getTime() - value().from.getTime()))}>\n {dates.formatDuration(value().from, value().to, { locale: own.locale ?? locale() })}\n </time>\n )}\n </Show>\n );\n};\n\nconst FormatDurationMs = (props: FormatDurationMsProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"fallback\"]);\n const locale = useLocale();\n // Wrapped in an object because a valid duration of 0ms is falsy.\n const valid = (): { ms: number } | null => {\n const value = own.value;\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? { ms: value } : null;\n };\n return (\n <Show when={valid()} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(duration) => (\n <time {...rest} datetime={isoDuration(duration().ms)}>\n {text.pprintDurationMs(duration().ms, { locale: own.locale ?? locale() })}\n </time>\n )}\n </Show>\n );\n};\n\n/**\n * Unstyled semantic formatter components backed by `@k2b/stdlib`.\n *\n * Numeric components render a plain `<span>`; date/time components render\n * `<time>` with a canonical `datetime` attribute. All components inherit the\n * render locale (see `LocaleProvider` / `useLocale`) and accept an explicit\n * `locale` override. Date, Time, and DateTime format in UTC unless an\n * explicit `timeZone` is given, so server and browser output never diverge\n * with the runtime timezone.\n */\nexport const Format = {\n Number: FormatNumber,\n Percent: FormatPercent,\n Currency: FormatCurrency,\n Bytes: FormatBytes,\n Date: FormatDate,\n Time: FormatTime,\n DateTime: FormatDateTime,\n RelativeTime: FormatRelativeTime,\n RelativeDate: FormatRelativeDate,\n Duration: FormatDuration,\n DurationMs: FormatDurationMs,\n} as const;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["intl/index.ts"],"sourcesContent":["export type {\n FormatBytesProps,\n FormatCurrencyProps,\n FormatDateProps,\n FormatDateTimeProps,\n FormatDurationMsProps,\n FormatDurationProps,\n FormatNumberProps,\n FormatPercentProps,\n FormatRelativeDateProps,\n FormatRelativeTimeProps,\n FormatTimeProps,\n} from \"./Format\";\nexport { Format } from \"./Format\";\nexport type { LocaleProviderProps } from \"./locale\";\nexport { LocaleProvider, useLocale } from \"./locale\";\n"],"mappings":"AAaA,SAAS,MAAM,QAAQ,UAAU;AAEjC,SAAS,cAAc,EAAE,SAAS,QAAQ,UAAU","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["intl/locale.tsx"],"sourcesContent":["import type { DateContext } from \"@k2b/stdlib\";\nimport { createContext, type JSX, useContext } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\n\n/**\n * Deterministic fallback locale used when neither a `LocaleProvider` nor a\n * browser `<html lang>` value is available.\n */\nexport const DEFAULT_LOCALE = \"en\";\n\nconst LocaleContext = createContext<() => string>();\n\nexport type LocaleProviderProps = {\n /** BCP 47 locale tag, e.g. `\"en\"`, `\"de\"`, or `\"de-AT\"`. */\n locale: string;\n children?: JSX.Element;\n};\n\n/**\n * Provides the render locale to all descendant `@k2b/ui` components.\n *\n * On the server this is the only locale source, so SSR consumers wrap their\n * page in a provider and emit a matching `<html lang>` attribute. A browser\n * island is an independent Solid root: an outer server-side provider does not\n * survive the island's browser re-render, which instead falls back to\n * `document.documentElement.lang`. Keeping `<html lang>` equal to the server\n * provider locale therefore keeps both passes coherent.\n */\nexport const LocaleProvider = (props: LocaleProviderProps): JSX.Element => (\n <LocaleContext.Provider value={() => props.locale}>{props.children}</LocaleContext.Provider>\n);\n\n/**\n * Resolves the effective render locale as a reactive accessor.\n *\n * Precedence: nearest `LocaleProvider`, then the browser's\n * `document.documentElement.lang`, then `\"en\"`. Components with an explicit\n * `locale` prop apply it before consulting this hook.\n */\nexport const useLocale = (): (() => string) => {\n const provided = useContext(LocaleContext);\n if (provided) return provided;\n if (isServer) return () => DEFAULT_LOCALE;\n return () => document.documentElement.lang || DEFAULT_LOCALE;\n};\n\n/**\n * Effective date config for date surfaces: an explicit `dateConfig.locale`\n * wins, otherwise the inherited render locale fills the gap. Timezone and\n * week-start configuration pass through untouched.\n */\nexport const useDateConfigLocale = (config: () => DateContext | undefined): (() => DateContext) => {\n const locale = useLocale();\n return () => {\n const current = config();\n return current?.locale ? current : { ...current, locale: locale() };\n };\n};\n\n/**\n * The decimal separator `Intl.NumberFormat` uses for a locale, e.g. `\".\"`\n * for English and `\",\"` for German.\n */\nexport const decimalSeparator = (locale: string): string =>\n new Intl.NumberFormat(locale).formatToParts(1.1).find((part) => part.type === \"decimal\")?.value ?? \".\";\n"],"mappings":";AACA,SAAS,aAAa,EAAY,UAAU,QAAQ,UAAU;AAC9D,SAAS,QAAQ,QAAQ,cAAc;;AAEvC;AACA;AACA;AACA;AACA,OAAO,MAAM,cAAc,GAAG,IAAI;AAElC,MAAM,aAAa,GAAG,aAAa,CAAe,CAAC;AAQnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,cAAc,GAAI,KAA0B,sBACtD,aAAa,CAAC,QAAQ;EAAC,KAAK,EAAE,MAAM,KAAK,CAAC,MAAM;EAAA;IAAA,OAAG,KAAK,CAAC,QAAQ;EAAA;AAAA,EACnE;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,SAAS,GAAG,MAAsB;EAC7C,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC;EAC1C,IAAI,QAAQ,EAAE,OAAO,QAAQ;EAC7B,IAAI,QAAQ,EAAE,OAAO,MAAM,cAAc;EACzC,OAAO,MAAM,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,cAAc;AAC9D,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,mBAAmB,GAAI,MAAqC,IAA0B;EACjG,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM;IACX,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC;IACxB,OAAO,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG;MAAE,GAAG,OAAO;MAAE,MAAM,EAAE,MAAM,CAAC;IAAE,CAAC;EACrE,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAM,gBAAgB,GAAI,MAAc,IAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAE,IAAI,IAAK,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,GAAG","ignoreList":[]}
|