@k2b/ui 0.1.0-rc.0
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/LICENSE +661 -0
- package/README.md +343 -0
- package/dist/.build-complete +0 -0
- package/dist/browser/actions/Button.js +236 -0
- package/dist/browser/actions/Button.js.map +1 -0
- package/dist/browser/actions/ContextMenu.js +199 -0
- package/dist/browser/actions/ContextMenu.js.map +1 -0
- package/dist/browser/actions/CopyButton.js +97 -0
- package/dist/browser/actions/CopyButton.js.map +1 -0
- package/dist/browser/actions/Disclosure.js +83 -0
- package/dist/browser/actions/Disclosure.js.map +1 -0
- package/dist/browser/actions/Dropdown.js +669 -0
- package/dist/browser/actions/Dropdown.js.map +1 -0
- package/dist/browser/actions/FilterChip.js +149 -0
- package/dist/browser/actions/FilterChip.js.map +1 -0
- package/dist/browser/actions/RemoveButton.js +47 -0
- package/dist/browser/actions/RemoveButton.js.map +1 -0
- package/dist/browser/actions/SegmentedControl.js +138 -0
- package/dist/browser/actions/SegmentedControl.js.map +1 -0
- package/dist/browser/actions/SplitButton.js +76 -0
- package/dist/browser/actions/SplitButton.js.map +1 -0
- package/dist/browser/actions/SpotlightSearch.js +87 -0
- package/dist/browser/actions/SpotlightSearch.js.map +1 -0
- package/dist/browser/actions/Tabs.js +185 -0
- package/dist/browser/actions/Tabs.js.map +1 -0
- package/dist/browser/actions/Toolbar.js +87 -0
- package/dist/browser/actions/Toolbar.js.map +1 -0
- package/dist/browser/actions/index.js +13 -0
- package/dist/browser/actions/index.js.map +1 -0
- package/dist/browser/chat/ChatComposer.js +760 -0
- package/dist/browser/chat/ChatComposer.js.map +1 -0
- package/dist/browser/chat/ChatPrimitives.js +688 -0
- package/dist/browser/chat/ChatPrimitives.js.map +1 -0
- package/dist/browser/chat/ChatRoot.js +27 -0
- package/dist/browser/chat/ChatRoot.js.map +1 -0
- package/dist/browser/chat/ChatTimeline.js +404 -0
- package/dist/browser/chat/ChatTimeline.js.map +1 -0
- package/dist/browser/chat/chat-behavior.js +53 -0
- package/dist/browser/chat/chat-behavior.js.map +1 -0
- package/dist/browser/chat/index.js +17 -0
- package/dist/browser/chat/index.js.map +1 -0
- package/dist/browser/chat/types.js +2 -0
- package/dist/browser/chat/types.js.map +1 -0
- package/dist/browser/content/Calendar.js +2168 -0
- package/dist/browser/content/Calendar.js.map +1 -0
- package/dist/browser/content/Chart.js +680 -0
- package/dist/browser/content/Chart.js.map +1 -0
- package/dist/browser/content/CodeDisplay.js +104 -0
- package/dist/browser/content/CodeDisplay.js.map +1 -0
- package/dist/browser/content/DataTable.js +724 -0
- package/dist/browser/content/DataTable.js.map +1 -0
- package/dist/browser/content/Docs.js +227 -0
- package/dist/browser/content/Docs.js.map +1 -0
- package/dist/browser/content/FileBrowser.js +462 -0
- package/dist/browser/content/FileBrowser.js.map +1 -0
- package/dist/browser/content/FileTree.js +453 -0
- package/dist/browser/content/FileTree.js.map +1 -0
- package/dist/browser/content/FileView.js +842 -0
- package/dist/browser/content/FileView.js.map +1 -0
- package/dist/browser/content/Lightbox.js +285 -0
- package/dist/browser/content/Lightbox.js.map +1 -0
- package/dist/browser/content/LogEntriesTable.js +139 -0
- package/dist/browser/content/LogEntriesTable.js.map +1 -0
- package/dist/browser/content/MarkdownView.js +138 -0
- package/dist/browser/content/MarkdownView.js.map +1 -0
- package/dist/browser/content/Pagination.js +182 -0
- package/dist/browser/content/Pagination.js.map +1 -0
- package/dist/browser/content/PdfPreview.js +204 -0
- package/dist/browser/content/PdfPreview.js.map +1 -0
- package/dist/browser/content/RangePicker.js +83 -0
- package/dist/browser/content/RangePicker.js.map +1 -0
- package/dist/browser/content/StructuredDataPreview.js +194 -0
- package/dist/browser/content/StructuredDataPreview.js.map +1 -0
- package/dist/browser/content/calendar-event-layout.js +92 -0
- package/dist/browser/content/calendar-event-layout.js.map +1 -0
- package/dist/browser/content/calendar-pointer.js +114 -0
- package/dist/browser/content/calendar-pointer.js.map +1 -0
- package/dist/browser/content/chart-map-viewport.js +33 -0
- package/dist/browser/content/chart-map-viewport.js.map +1 -0
- package/dist/browser/content/chart-state-timeline.js +124 -0
- package/dist/browser/content/chart-state-timeline.js.map +1 -0
- package/dist/browser/content/code-highlight.js +144 -0
- package/dist/browser/content/code-highlight.js.map +1 -0
- package/dist/browser/content/file-tree.js +93 -0
- package/dist/browser/content/file-tree.js.map +1 -0
- package/dist/browser/content/file-view-preview.js +112 -0
- package/dist/browser/content/file-view-preview.js.map +1 -0
- package/dist/browser/content/index.js +16 -0
- package/dist/browser/content/index.js.map +1 -0
- package/dist/browser/feedback/InlineGuidance.js +46 -0
- package/dist/browser/feedback/InlineGuidance.js.map +1 -0
- package/dist/browser/feedback/Tooltip.js +189 -0
- package/dist/browser/feedback/Tooltip.js.map +1 -0
- package/dist/browser/feedback/dialog-core.js +207 -0
- package/dist/browser/feedback/dialog-core.js.map +1 -0
- package/dist/browser/feedback/index.js +6 -0
- package/dist/browser/feedback/index.js.map +1 -0
- package/dist/browser/feedback/prompts.js +991 -0
- package/dist/browser/feedback/prompts.js.map +1 -0
- package/dist/browser/feedback/toast.js +271 -0
- package/dist/browser/feedback/toast.js.map +1 -0
- package/dist/browser/feedback/tooltip-position.js +25 -0
- package/dist/browser/feedback/tooltip-position.js.map +1 -0
- package/dist/browser/index.js +11 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/inputs/AutocompleteEditor.js +610 -0
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -0
- package/dist/browser/inputs/AutocompleteSelect.js +632 -0
- package/dist/browser/inputs/AutocompleteSelect.js.map +1 -0
- package/dist/browser/inputs/Checkbox.js +137 -0
- package/dist/browser/inputs/Checkbox.js.map +1 -0
- package/dist/browser/inputs/CheckboxCard.js +130 -0
- package/dist/browser/inputs/CheckboxCard.js.map +1 -0
- package/dist/browser/inputs/ChoiceGroups.js +174 -0
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -0
- package/dist/browser/inputs/ChoiceInputs.js +400 -0
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -0
- package/dist/browser/inputs/Combobox.js +274 -0
- package/dist/browser/inputs/Combobox.js.map +1 -0
- package/dist/browser/inputs/DatePicker.js +923 -0
- package/dist/browser/inputs/DatePicker.js.map +1 -0
- package/dist/browser/inputs/FileInputs.js +736 -0
- package/dist/browser/inputs/FileInputs.js.map +1 -0
- package/dist/browser/inputs/MultiSelectInput.js +565 -0
- package/dist/browser/inputs/MultiSelectInput.js.map +1 -0
- package/dist/browser/inputs/NumberInput.js +288 -0
- package/dist/browser/inputs/NumberInput.js.map +1 -0
- package/dist/browser/inputs/Select.js +507 -0
- package/dist/browser/inputs/Select.js.map +1 -0
- package/dist/browser/inputs/SelectChip.js +151 -0
- package/dist/browser/inputs/SelectChip.js.map +1 -0
- package/dist/browser/inputs/SpecialInputs.js +117 -0
- package/dist/browser/inputs/SpecialInputs.js.map +1 -0
- package/dist/browser/inputs/Switch.js +117 -0
- package/dist/browser/inputs/Switch.js.map +1 -0
- package/dist/browser/inputs/TagEditor.js +358 -0
- package/dist/browser/inputs/TagEditor.js.map +1 -0
- package/dist/browser/inputs/TagsInput.js +195 -0
- package/dist/browser/inputs/TagsInput.js.map +1 -0
- package/dist/browser/inputs/TemplateEditor.js +190 -0
- package/dist/browser/inputs/TemplateEditor.js.map +1 -0
- package/dist/browser/inputs/TextInput.js +318 -0
- package/dist/browser/inputs/TextInput.js.map +1 -0
- package/dist/browser/inputs/choice.js +188 -0
- package/dist/browser/inputs/choice.js.map +1 -0
- package/dist/browser/inputs/completion/behaviors.js +108 -0
- package/dist/browser/inputs/completion/behaviors.js.map +1 -0
- package/dist/browser/inputs/completion/engine.js +103 -0
- package/dist/browser/inputs/completion/engine.js.map +1 -0
- package/dist/browser/inputs/completion/index.js +4 -0
- package/dist/browser/inputs/completion/index.js.map +1 -0
- package/dist/browser/inputs/completion/overlay.js +25 -0
- package/dist/browser/inputs/completion/overlay.js.map +1 -0
- package/dist/browser/inputs/date-picker.js +123 -0
- package/dist/browser/inputs/date-picker.js.map +1 -0
- package/dist/browser/inputs/editor-dom.js +26 -0
- package/dist/browser/inputs/editor-dom.js.map +1 -0
- package/dist/browser/inputs/field-contract.js +9 -0
- package/dist/browser/inputs/field-contract.js.map +1 -0
- package/dist/browser/inputs/icon-options.js +46 -0
- package/dist/browser/inputs/icon-options.js.map +1 -0
- package/dist/browser/inputs/image-crop.js +145 -0
- package/dist/browser/inputs/image-crop.js.map +1 -0
- package/dist/browser/inputs/index.js +23 -0
- package/dist/browser/inputs/index.js.map +1 -0
- package/dist/browser/inputs/markdown/MarkdownEditor.js +725 -0
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -0
- package/dist/browser/inputs/markdown/Toolbar.js +172 -0
- package/dist/browser/inputs/markdown/Toolbar.js.map +1 -0
- package/dist/browser/inputs/markdown/actions.js +140 -0
- package/dist/browser/inputs/markdown/actions.js.map +1 -0
- package/dist/browser/inputs/markdown/active-formats.js +36 -0
- package/dist/browser/inputs/markdown/active-formats.js.map +1 -0
- package/dist/browser/inputs/markdown/behaviors.js +63 -0
- package/dist/browser/inputs/markdown/behaviors.js.map +1 -0
- package/dist/browser/inputs/markdown/code-zone.js +8 -0
- package/dist/browser/inputs/markdown/code-zone.js.map +1 -0
- package/dist/browser/internal/color.js +18 -0
- package/dist/browser/internal/color.js.map +1 -0
- package/dist/browser/internal/field.js +158 -0
- package/dist/browser/internal/field.js.map +1 -0
- package/dist/browser/internal/portal.js +17 -0
- package/dist/browser/internal/portal.js.map +1 -0
- package/dist/browser/intl/Format.js +273 -0
- package/dist/browser/intl/Format.js.map +1 -0
- package/dist/browser/intl/index.js +3 -0
- package/dist/browser/intl/index.js.map +1 -0
- package/dist/browser/intl/locale.js +63 -0
- package/dist/browser/intl/locale.js.map +1 -0
- package/dist/browser/intl/messages.js +753 -0
- package/dist/browser/intl/messages.js.map +1 -0
- package/dist/browser/layout/AppOverview.js +151 -0
- package/dist/browser/layout/AppOverview.js.map +1 -0
- package/dist/browser/layout/AppWorkspace.js +1502 -0
- package/dist/browser/layout/AppWorkspace.js.map +1 -0
- package/dist/browser/layout/DataPanel.js +122 -0
- package/dist/browser/layout/DataPanel.js.map +1 -0
- package/dist/browser/layout/DetailPanel.js +484 -0
- package/dist/browser/layout/DetailPanel.js.map +1 -0
- package/dist/browser/layout/Discussion.js +511 -0
- package/dist/browser/layout/Discussion.js.map +1 -0
- package/dist/browser/layout/FloatingWindow.js +332 -0
- package/dist/browser/layout/FloatingWindow.js.map +1 -0
- package/dist/browser/layout/PanelDialog.js +236 -0
- package/dist/browser/layout/PanelDialog.js.map +1 -0
- package/dist/browser/layout/PanelHeader.js +91 -0
- package/dist/browser/layout/PanelHeader.js.map +1 -0
- package/dist/browser/layout/Panes.js +978 -0
- package/dist/browser/layout/Panes.js.map +1 -0
- package/dist/browser/layout/ScrollArea.js +29 -0
- package/dist/browser/layout/ScrollArea.js.map +1 -0
- package/dist/browser/layout/Settings.js +381 -0
- package/dist/browser/layout/Settings.js.map +1 -0
- package/dist/browser/layout/SettingsCollection.js +212 -0
- package/dist/browser/layout/SettingsCollection.js.map +1 -0
- package/dist/browser/layout/SettingsModal.js +281 -0
- package/dist/browser/layout/SettingsModal.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +419 -0
- package/dist/browser/layout/app-workspace-controller.js.map +1 -0
- package/dist/browser/layout/app-workspace-state.js +125 -0
- package/dist/browser/layout/app-workspace-state.js.map +1 -0
- package/dist/browser/layout/floating-window-geometry.js +15 -0
- package/dist/browser/layout/floating-window-geometry.js.map +1 -0
- package/dist/browser/layout/index.js +17 -0
- package/dist/browser/layout/index.js.map +1 -0
- package/dist/browser/layout/panes-layout.js +436 -0
- package/dist/browser/layout/panes-layout.js.map +1 -0
- package/dist/browser/layout/stable-id.js +17 -0
- package/dist/browser/layout/stable-id.js.map +1 -0
- package/dist/browser/semantics.js +2 -0
- package/dist/browser/semantics.js.map +1 -0
- package/dist/browser/surfaces/Avatar.js +97 -0
- package/dist/browser/surfaces/Avatar.js.map +1 -0
- package/dist/browser/surfaces/DescriptionList.js +66 -0
- package/dist/browser/surfaces/DescriptionList.js.map +1 -0
- package/dist/browser/surfaces/LinkCard.js +40 -0
- package/dist/browser/surfaces/LinkCard.js.map +1 -0
- package/dist/browser/surfaces/NotFoundState.js +85 -0
- package/dist/browser/surfaces/NotFoundState.js.map +1 -0
- package/dist/browser/surfaces/NoticeCard.js +145 -0
- package/dist/browser/surfaces/NoticeCard.js.map +1 -0
- package/dist/browser/surfaces/Paper.js +33 -0
- package/dist/browser/surfaces/Paper.js.map +1 -0
- package/dist/browser/surfaces/Placeholder.js +90 -0
- package/dist/browser/surfaces/Placeholder.js.map +1 -0
- package/dist/browser/surfaces/ProgressBar.js +58 -0
- package/dist/browser/surfaces/ProgressBar.js.map +1 -0
- package/dist/browser/surfaces/StatCell.js +172 -0
- package/dist/browser/surfaces/StatCell.js.map +1 -0
- package/dist/browser/surfaces/StatGrid.js +80 -0
- package/dist/browser/surfaces/StatGrid.js.map +1 -0
- package/dist/browser/surfaces/StatusBadge.js +70 -0
- package/dist/browser/surfaces/StatusBadge.js.map +1 -0
- package/dist/browser/surfaces/Tag.js +94 -0
- package/dist/browser/surfaces/Tag.js.map +1 -0
- package/dist/browser/surfaces/index.js +13 -0
- package/dist/browser/surfaces/index.js.map +1 -0
- package/dist/browser/widgets/Widget.js +89 -0
- package/dist/browser/widgets/Widget.js.map +1 -0
- package/dist/browser/widgets/WidgetHero.js +47 -0
- package/dist/browser/widgets/WidgetHero.js.map +1 -0
- package/dist/browser/widgets/WidgetList.js +125 -0
- package/dist/browser/widgets/WidgetList.js.map +1 -0
- package/dist/browser/widgets/WidgetPills.js +78 -0
- package/dist/browser/widgets/WidgetPills.js.map +1 -0
- package/dist/browser/widgets/WidgetStat.js +114 -0
- package/dist/browser/widgets/WidgetStat.js.map +1 -0
- package/dist/browser/widgets/WidgetStatus.js +54 -0
- package/dist/browser/widgets/WidgetStatus.js.map +1 -0
- package/dist/browser/widgets/index.js +7 -0
- package/dist/browser/widgets/index.js.map +1 -0
- package/dist/global.css +3 -0
- package/dist/licenses/ibm-plex-mono.txt +93 -0
- package/dist/licenses/ibm-plex-sans.txt +93 -0
- package/dist/licenses/tabler-icons.txt +21 -0
- package/dist/plex.css +1 -0
- package/dist/ssr/actions/Button.js +203 -0
- package/dist/ssr/actions/Button.js.map +1 -0
- package/dist/ssr/actions/ContextMenu.js +128 -0
- package/dist/ssr/actions/ContextMenu.js.map +1 -0
- package/dist/ssr/actions/CopyButton.js +79 -0
- package/dist/ssr/actions/CopyButton.js.map +1 -0
- package/dist/ssr/actions/Disclosure.js +26 -0
- package/dist/ssr/actions/Disclosure.js.map +1 -0
- package/dist/ssr/actions/Dropdown.js +443 -0
- package/dist/ssr/actions/Dropdown.js.map +1 -0
- package/dist/ssr/actions/FilterChip.js +132 -0
- package/dist/ssr/actions/FilterChip.js.map +1 -0
- package/dist/ssr/actions/RemoveButton.js +45 -0
- package/dist/ssr/actions/RemoveButton.js.map +1 -0
- package/dist/ssr/actions/SegmentedControl.js +57 -0
- package/dist/ssr/actions/SegmentedControl.js.map +1 -0
- package/dist/ssr/actions/SplitButton.js +74 -0
- package/dist/ssr/actions/SplitButton.js.map +1 -0
- package/dist/ssr/actions/SpotlightSearch.js +38 -0
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -0
- package/dist/ssr/actions/Tabs.js +91 -0
- package/dist/ssr/actions/Tabs.js.map +1 -0
- package/dist/ssr/actions/Toolbar.js +33 -0
- package/dist/ssr/actions/Toolbar.js.map +1 -0
- package/dist/ssr/actions/index.js +13 -0
- package/dist/ssr/actions/index.js.map +1 -0
- package/dist/ssr/chat/ChatComposer.js +392 -0
- package/dist/ssr/chat/ChatComposer.js.map +1 -0
- package/dist/ssr/chat/ChatPrimitives.js +377 -0
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -0
- package/dist/ssr/chat/ChatRoot.js +10 -0
- package/dist/ssr/chat/ChatRoot.js.map +1 -0
- package/dist/ssr/chat/ChatTimeline.js +301 -0
- package/dist/ssr/chat/ChatTimeline.js.map +1 -0
- package/dist/ssr/chat/chat-behavior.js +53 -0
- package/dist/ssr/chat/chat-behavior.js.map +1 -0
- package/dist/ssr/chat/index.js +17 -0
- package/dist/ssr/chat/index.js.map +1 -0
- package/dist/ssr/chat/types.js +2 -0
- package/dist/ssr/chat/types.js.map +1 -0
- package/dist/ssr/content/Calendar.js +1542 -0
- package/dist/ssr/content/Calendar.js.map +1 -0
- package/dist/ssr/content/Chart.js +552 -0
- package/dist/ssr/content/Chart.js.map +1 -0
- package/dist/ssr/content/CodeDisplay.js +55 -0
- package/dist/ssr/content/CodeDisplay.js.map +1 -0
- package/dist/ssr/content/DataTable.js +470 -0
- package/dist/ssr/content/DataTable.js.map +1 -0
- package/dist/ssr/content/Docs.js +108 -0
- package/dist/ssr/content/Docs.js.map +1 -0
- package/dist/ssr/content/FileBrowser.js +422 -0
- package/dist/ssr/content/FileBrowser.js.map +1 -0
- package/dist/ssr/content/FileTree.js +299 -0
- package/dist/ssr/content/FileTree.js.map +1 -0
- package/dist/ssr/content/FileView.js +612 -0
- package/dist/ssr/content/FileView.js.map +1 -0
- package/dist/ssr/content/Lightbox.js +164 -0
- package/dist/ssr/content/Lightbox.js.map +1 -0
- package/dist/ssr/content/LogEntriesTable.js +106 -0
- package/dist/ssr/content/LogEntriesTable.js.map +1 -0
- package/dist/ssr/content/MarkdownView.js +119 -0
- package/dist/ssr/content/MarkdownView.js.map +1 -0
- package/dist/ssr/content/Pagination.js +141 -0
- package/dist/ssr/content/Pagination.js.map +1 -0
- package/dist/ssr/content/PdfPreview.js +126 -0
- package/dist/ssr/content/PdfPreview.js.map +1 -0
- package/dist/ssr/content/RangePicker.js +35 -0
- package/dist/ssr/content/RangePicker.js.map +1 -0
- package/dist/ssr/content/StructuredDataPreview.js +127 -0
- package/dist/ssr/content/StructuredDataPreview.js.map +1 -0
- package/dist/ssr/content/calendar-event-layout.js +92 -0
- package/dist/ssr/content/calendar-event-layout.js.map +1 -0
- package/dist/ssr/content/calendar-pointer.js +114 -0
- package/dist/ssr/content/calendar-pointer.js.map +1 -0
- package/dist/ssr/content/chart-map-viewport.js +33 -0
- package/dist/ssr/content/chart-map-viewport.js.map +1 -0
- package/dist/ssr/content/chart-state-timeline.js +124 -0
- package/dist/ssr/content/chart-state-timeline.js.map +1 -0
- package/dist/ssr/content/code-highlight.js +144 -0
- package/dist/ssr/content/code-highlight.js.map +1 -0
- package/dist/ssr/content/file-tree.js +93 -0
- package/dist/ssr/content/file-tree.js.map +1 -0
- package/dist/ssr/content/file-view-preview.js +112 -0
- package/dist/ssr/content/file-view-preview.js.map +1 -0
- package/dist/ssr/content/index.js +16 -0
- package/dist/ssr/content/index.js.map +1 -0
- package/dist/ssr/feedback/InlineGuidance.js +26 -0
- package/dist/ssr/feedback/InlineGuidance.js.map +1 -0
- package/dist/ssr/feedback/Tooltip.js +156 -0
- package/dist/ssr/feedback/Tooltip.js.map +1 -0
- package/dist/ssr/feedback/dialog-core.js +207 -0
- package/dist/ssr/feedback/dialog-core.js.map +1 -0
- package/dist/ssr/feedback/index.js +6 -0
- package/dist/ssr/feedback/index.js.map +1 -0
- package/dist/ssr/feedback/prompts.js +703 -0
- package/dist/ssr/feedback/prompts.js.map +1 -0
- package/dist/ssr/feedback/toast.js +271 -0
- package/dist/ssr/feedback/toast.js.map +1 -0
- package/dist/ssr/feedback/tooltip-position.js +25 -0
- package/dist/ssr/feedback/tooltip-position.js.map +1 -0
- package/dist/ssr/index.js +11 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/ssr/inputs/AutocompleteEditor.js +463 -0
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -0
- package/dist/ssr/inputs/AutocompleteSelect.js +420 -0
- package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -0
- package/dist/ssr/inputs/Checkbox.js +75 -0
- package/dist/ssr/inputs/Checkbox.js.map +1 -0
- package/dist/ssr/inputs/CheckboxCard.js +69 -0
- package/dist/ssr/inputs/CheckboxCard.js.map +1 -0
- package/dist/ssr/inputs/ChoiceGroups.js +101 -0
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -0
- package/dist/ssr/inputs/ChoiceInputs.js +250 -0
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -0
- package/dist/ssr/inputs/Combobox.js +177 -0
- package/dist/ssr/inputs/Combobox.js.map +1 -0
- package/dist/ssr/inputs/DatePicker.js +629 -0
- package/dist/ssr/inputs/DatePicker.js.map +1 -0
- package/dist/ssr/inputs/FileInputs.js +543 -0
- package/dist/ssr/inputs/FileInputs.js.map +1 -0
- package/dist/ssr/inputs/MultiSelectInput.js +347 -0
- package/dist/ssr/inputs/MultiSelectInput.js.map +1 -0
- package/dist/ssr/inputs/NumberInput.js +177 -0
- package/dist/ssr/inputs/NumberInput.js.map +1 -0
- package/dist/ssr/inputs/Select.js +308 -0
- package/dist/ssr/inputs/Select.js.map +1 -0
- package/dist/ssr/inputs/SelectChip.js +129 -0
- package/dist/ssr/inputs/SelectChip.js.map +1 -0
- package/dist/ssr/inputs/SpecialInputs.js +116 -0
- package/dist/ssr/inputs/SpecialInputs.js.map +1 -0
- package/dist/ssr/inputs/Switch.js +62 -0
- package/dist/ssr/inputs/Switch.js.map +1 -0
- package/dist/ssr/inputs/TagEditor.js +280 -0
- package/dist/ssr/inputs/TagEditor.js.map +1 -0
- package/dist/ssr/inputs/TagsInput.js +122 -0
- package/dist/ssr/inputs/TagsInput.js.map +1 -0
- package/dist/ssr/inputs/TemplateEditor.js +164 -0
- package/dist/ssr/inputs/TemplateEditor.js.map +1 -0
- package/dist/ssr/inputs/TextInput.js +211 -0
- package/dist/ssr/inputs/TextInput.js.map +1 -0
- package/dist/ssr/inputs/choice.js +188 -0
- package/dist/ssr/inputs/choice.js.map +1 -0
- package/dist/ssr/inputs/completion/behaviors.js +108 -0
- package/dist/ssr/inputs/completion/behaviors.js.map +1 -0
- package/dist/ssr/inputs/completion/engine.js +103 -0
- package/dist/ssr/inputs/completion/engine.js.map +1 -0
- package/dist/ssr/inputs/completion/index.js +4 -0
- package/dist/ssr/inputs/completion/index.js.map +1 -0
- package/dist/ssr/inputs/completion/overlay.js +25 -0
- package/dist/ssr/inputs/completion/overlay.js.map +1 -0
- package/dist/ssr/inputs/date-picker.js +123 -0
- package/dist/ssr/inputs/date-picker.js.map +1 -0
- package/dist/ssr/inputs/editor-dom.js +26 -0
- package/dist/ssr/inputs/editor-dom.js.map +1 -0
- package/dist/ssr/inputs/field-contract.js +9 -0
- package/dist/ssr/inputs/field-contract.js.map +1 -0
- package/dist/ssr/inputs/icon-options.js +46 -0
- package/dist/ssr/inputs/icon-options.js.map +1 -0
- package/dist/ssr/inputs/image-crop.js +145 -0
- package/dist/ssr/inputs/image-crop.js.map +1 -0
- package/dist/ssr/inputs/index.js +23 -0
- package/dist/ssr/inputs/index.js.map +1 -0
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +516 -0
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -0
- package/dist/ssr/inputs/markdown/Toolbar.js +115 -0
- package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -0
- package/dist/ssr/inputs/markdown/actions.js +140 -0
- package/dist/ssr/inputs/markdown/actions.js.map +1 -0
- package/dist/ssr/inputs/markdown/active-formats.js +36 -0
- package/dist/ssr/inputs/markdown/active-formats.js.map +1 -0
- package/dist/ssr/inputs/markdown/behaviors.js +63 -0
- package/dist/ssr/inputs/markdown/behaviors.js.map +1 -0
- package/dist/ssr/inputs/markdown/code-zone.js +8 -0
- package/dist/ssr/inputs/markdown/code-zone.js.map +1 -0
- package/dist/ssr/internal/color.js +18 -0
- package/dist/ssr/internal/color.js.map +1 -0
- package/dist/ssr/internal/field.js +90 -0
- package/dist/ssr/internal/field.js.map +1 -0
- package/dist/ssr/internal/portal.js +17 -0
- package/dist/ssr/internal/portal.js.map +1 -0
- package/dist/ssr/intl/Format.js +192 -0
- package/dist/ssr/intl/Format.js.map +1 -0
- package/dist/ssr/intl/index.js +3 -0
- package/dist/ssr/intl/index.js.map +1 -0
- package/dist/ssr/intl/locale.js +63 -0
- package/dist/ssr/intl/locale.js.map +1 -0
- package/dist/ssr/intl/messages.js +753 -0
- package/dist/ssr/intl/messages.js.map +1 -0
- package/dist/ssr/layout/AppOverview.js +85 -0
- package/dist/ssr/layout/AppOverview.js.map +1 -0
- package/dist/ssr/layout/AppWorkspace.js +976 -0
- package/dist/ssr/layout/AppWorkspace.js.map +1 -0
- package/dist/ssr/layout/DataPanel.js +101 -0
- package/dist/ssr/layout/DataPanel.js.map +1 -0
- package/dist/ssr/layout/DetailPanel.js +284 -0
- package/dist/ssr/layout/DetailPanel.js.map +1 -0
- package/dist/ssr/layout/Discussion.js +319 -0
- package/dist/ssr/layout/Discussion.js.map +1 -0
- package/dist/ssr/layout/FloatingWindow.js +259 -0
- package/dist/ssr/layout/FloatingWindow.js.map +1 -0
- package/dist/ssr/layout/PanelDialog.js +136 -0
- package/dist/ssr/layout/PanelDialog.js.map +1 -0
- package/dist/ssr/layout/PanelHeader.js +45 -0
- package/dist/ssr/layout/PanelHeader.js.map +1 -0
- package/dist/ssr/layout/Panes.js +678 -0
- package/dist/ssr/layout/Panes.js.map +1 -0
- package/dist/ssr/layout/ScrollArea.js +18 -0
- package/dist/ssr/layout/ScrollArea.js.map +1 -0
- package/dist/ssr/layout/Settings.js +219 -0
- package/dist/ssr/layout/Settings.js.map +1 -0
- package/dist/ssr/layout/SettingsCollection.js +150 -0
- package/dist/ssr/layout/SettingsCollection.js.map +1 -0
- package/dist/ssr/layout/SettingsModal.js +156 -0
- package/dist/ssr/layout/SettingsModal.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +419 -0
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -0
- package/dist/ssr/layout/app-workspace-state.js +125 -0
- package/dist/ssr/layout/app-workspace-state.js.map +1 -0
- package/dist/ssr/layout/floating-window-geometry.js +15 -0
- package/dist/ssr/layout/floating-window-geometry.js.map +1 -0
- package/dist/ssr/layout/index.js +17 -0
- package/dist/ssr/layout/index.js.map +1 -0
- package/dist/ssr/layout/panes-layout.js +436 -0
- package/dist/ssr/layout/panes-layout.js.map +1 -0
- package/dist/ssr/layout/stable-id.js +17 -0
- package/dist/ssr/layout/stable-id.js.map +1 -0
- package/dist/ssr/semantics.js +2 -0
- package/dist/ssr/semantics.js.map +1 -0
- package/dist/ssr/surfaces/Avatar.js +43 -0
- package/dist/ssr/surfaces/Avatar.js.map +1 -0
- package/dist/ssr/surfaces/DescriptionList.js +25 -0
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -0
- package/dist/ssr/surfaces/LinkCard.js +25 -0
- package/dist/ssr/surfaces/LinkCard.js.map +1 -0
- package/dist/ssr/surfaces/NotFoundState.js +38 -0
- package/dist/ssr/surfaces/NotFoundState.js.map +1 -0
- package/dist/ssr/surfaces/NoticeCard.js +83 -0
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -0
- package/dist/ssr/surfaces/Paper.js +32 -0
- package/dist/ssr/surfaces/Paper.js.map +1 -0
- package/dist/ssr/surfaces/Placeholder.js +76 -0
- package/dist/ssr/surfaces/Placeholder.js.map +1 -0
- package/dist/ssr/surfaces/ProgressBar.js +13 -0
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -0
- package/dist/ssr/surfaces/StatCell.js +80 -0
- package/dist/ssr/surfaces/StatCell.js.map +1 -0
- package/dist/ssr/surfaces/StatGrid.js +62 -0
- package/dist/ssr/surfaces/StatGrid.js.map +1 -0
- package/dist/ssr/surfaces/StatusBadge.js +38 -0
- package/dist/ssr/surfaces/StatusBadge.js.map +1 -0
- package/dist/ssr/surfaces/Tag.js +32 -0
- package/dist/ssr/surfaces/Tag.js.map +1 -0
- package/dist/ssr/surfaces/index.js +13 -0
- package/dist/ssr/surfaces/index.js.map +1 -0
- package/dist/ssr/widgets/Widget.js +54 -0
- package/dist/ssr/widgets/Widget.js.map +1 -0
- package/dist/ssr/widgets/WidgetHero.js +23 -0
- package/dist/ssr/widgets/WidgetHero.js.map +1 -0
- package/dist/ssr/widgets/WidgetList.js +73 -0
- package/dist/ssr/widgets/WidgetList.js.map +1 -0
- package/dist/ssr/widgets/WidgetPills.js +40 -0
- package/dist/ssr/widgets/WidgetPills.js.map +1 -0
- package/dist/ssr/widgets/WidgetStat.js +45 -0
- package/dist/ssr/widgets/WidgetStat.js.map +1 -0
- package/dist/ssr/widgets/WidgetStatus.js +23 -0
- package/dist/ssr/widgets/WidgetStatus.js.map +1 -0
- package/dist/ssr/widgets/index.js +7 -0
- package/dist/ssr/widgets/index.js.map +1 -0
- package/dist/styles.css +1 -0
- package/dist/tabler-icons-q30jt7jk.woff2 +0 -0
- package/dist/tabler.css +4 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mutation","createEffect","createMemo","createResource","createSignal","For","Match","onCleanup","Show","Switch","untrack","toast","MarkdownEditor","useUiMessages","Placeholder","CodeDisplay","fileViewExtension","getFileViewPreviewKind","parseDelimitedText","MarkdownView","StructuredDataPreview","canPreviewFile","codeLanguage","path","extension","isMarkdown","file","content","encoding","mediaType","stripFrontmatter","text","match","exec","trimStart","slice","length","OverlayAction","props","classes","_$createComponent","when","href","fallback","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_$addEventListener","onClick","_$effect","_p$","_v$","title","_v$2","_v$3","icon","e","_$setAttribute","t","a","_$className","undefined","_$runHydrationEvents","children","_el$3","_tmpl$2","_el$4","_el$5","nextSibling","_$insert","_v$4","_v$5","download","_v$6","_v$7","_v$8","o","i","OverlayPanel","_el$6","_tmpl$4","_el$7","_el$9","_el$0","_co$","_$getNextMarker","actions","_el$8","_tmpl$3","DownloadAction","messages","downloadHref","lastIndexOf","EditorToolButton","_el$1","_tmpl$5","_el$10","$$mousedown","preventDefault","_v$9","_v$0","_v$1","disabled","_v$10","_$setProperty","MarkdownRenderer","editing","setEditing","_$memo","editor","edit","_el$11","_tmpl$6","markdown","draft","headingScale","_","_el$12","_tmpl$7","aria-label","fill","value","onValueChange","setDraft","showStats","onSave","save","saveDisabled","dirty","saving","toolbarTrailing","preview","TextRenderer","code","language","_el$13","_tmpl$8","_el$14","_el$15","_el$16","_el$17","_el$18","_el$19","_co$2","_el$20","_el$21","_co$3","_el$22","_el$23","$$keydown","event","metaKey","ctrlKey","key","toLowerCase","_el$24","_tmpl$9","_v$11","_v$12","_v$13","_v$14","saveShortcut","$$input","currentTarget","textEditor","JsonRenderer","parsed","ok","JSON","parse","parsedValue","result","_el$25","data","maxRows","DelimitedTextRenderer","delimiter","headers","rows","emptyFile","description","delimitedFileEmpty","_el$26","_tmpl$1","_el$27","_el$28","_el$29","_el$30","_el$32","_el$33","_co$4","each","header","index","_el$34","_tmpl$10","_el$35","column","number","row","_el$36","_tmpl$11","_el$37","_tmpl$12","truncated","_el$31","_tmpl$0","previewLimited","mediaSource","previewHref","ImageRenderer","_el$38","_tmpl$13","_el$39","_v$15","_v$16","PdfRenderer","noInlinePreview","_el$40","_tmpl$14","_v$17","_v$18","AudioRenderer","_el$41","_tmpl$15","_el$42","audioUnsupported","_v$19","_v$20","VideoRenderer","_el$43","_tmpl$16","_el$44","videoUnsupported","_v$21","_v$22","BinaryRenderer","noPreview","binaryFile","action","_el$45","_tmpl$17","_el$46","_el$47","_el$48","_co$5","BUILTIN_RENDERERS","id","component","editable","_file","formatFileViewSize","bytes","toFixed","FileView","savedDraft","setSavedDraft","nativeRevision","setNativeRevision","instanceRenderers","renderers","saveMutation","create","input","onSuccess","saved","success","fileSaved","onError","error","message","nativePreviewHref","kind","separator","includes","browserPreviewContent","candidate","some","renderer","refetch","revision","abort","loaded","load","loadedDraft","registerRefresh","unregister","resolvedContent","find","onDirtyChange","loading","mutate","_el$49","_tmpl$18","failedLoadFile","String","active","Renderer","class","_$delegateEvents"],"sources":["content/FileView.tsx"],"sourcesContent":["/**\n * FileView — renders one file through a small renderer registry keyed by\n * media type / path. Editing is enabled purely by the presence of `save`;\n * without it every renderer is read-only. IDE-style chrome: editors reuse\n * the markdown editor's surface (toolbar with an in-toolbar save, Ctrl/Cmd+S),\n * previews are quiet paper panels with icon-only actions overlaid top-right.\n * Custom renderers are passed per instance, which keeps SSR requests and\n * independently mounted applications isolated.\n */\n\nimport { mutation } from \"@k2b/stdlib/solid\";\nimport {\n type Component,\n createEffect,\n createMemo,\n createResource,\n createSignal,\n For,\n type JSX,\n Match,\n onCleanup,\n Show,\n Switch,\n untrack,\n} from \"solid-js\";\nimport { toast } from \"../feedback/toast\";\nimport { MarkdownEditor } from \"../inputs/markdown/MarkdownEditor\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport CodeDisplay, { type CodeDisplayLanguage } from \"./CodeDisplay\";\nimport { type FileViewFile, fileViewExtension, getFileViewPreviewKind, parseDelimitedText } from \"./file-view-preview\";\nimport MarkdownView from \"./MarkdownView\";\nimport StructuredDataPreview, { type StructuredDataValue } from \"./StructuredDataPreview\";\n\nexport type { FileViewFile, FileViewPreviewKind } from \"./file-view-preview\";\nexport { canPreviewFile, getFileViewPreviewKind } from \"./file-view-preview\";\nexport type FileViewContent = { encoding: \"utf8\" | \"base64\"; content: string; mediaType: string };\n\nexport type FileViewProps = {\n file: FileViewFile;\n load: () => Promise<FileViewContent>;\n /** Refetch the current path when this host-owned revision changes. */\n revision?: unknown;\n /** Register an awaitable refresh for the currently visible preview. */\n registerRefresh?: (refresh: () => Promise<void>) => void | (() => void);\n /** Presence enables editing for text-based renderers. */\n save?: (content: string) => Promise<void>;\n /** Authenticated inline URL used by browser-native image, PDF, audio, and video previews. */\n previewHref?: string | null;\n downloadHref?: string | null;\n /** App-specific renderers matched before the built-ins for this instance. */\n renderers?: readonly FileViewRenderer[];\n /** Reports local edit state so a parent browser can guard navigation. */\n onDirtyChange?: (dirty: boolean) => void;\n class?: string;\n};\n\nexport type FileViewRendererProps = {\n file: FileViewFile;\n content: FileViewContent;\n previewHref: string | null;\n downloadHref: string | null;\n /** Null when the file is read-only. */\n editor: {\n draft: () => string;\n setDraft: (value: string) => void;\n dirty: () => boolean;\n saving: () => boolean;\n save: () => Promise<void>;\n } | null;\n};\n\nexport type FileViewRenderer = {\n id: string;\n match: (file: FileViewFile, content: FileViewContent) => boolean;\n component: Component<FileViewRendererProps>;\n /** Text renderers that support the edit affordance when `save` is present. */\n editable?: boolean;\n};\n\nconst codeLanguage = (path: string): CodeDisplayLanguage => {\n const extension = fileViewExtension(path);\n if (extension === \"ts\" || extension === \"mts\" || extension === \"cts\") return \"ts\";\n if (extension === \"tsx\") return \"tsx\";\n if (extension === \"js\" || extension === \"mjs\" || extension === \"cjs\") return \"js\";\n if (extension === \"jsx\") return \"jsx\";\n if (extension === \"md\" || extension === \"markdown\") return \"md\";\n return \"text\";\n};\n\nconst isMarkdown = (file: FileViewFile, content: FileViewContent) =>\n content.encoding === \"utf8\" && getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"markdown\";\n\n/** Rendered previews hide a leading YAML frontmatter block — it's metadata, not content. */\nconst stripFrontmatter = (text: string): string => {\n const match = /^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/.exec(text.trimStart());\n return match ? text.trimStart().slice(match[0].length) : text;\n};\n\n/** Icon-only action, IDE style — sits in the floating top-right cluster of previews. */\nfunction OverlayAction(props: { icon: string; title: string; onClick?: () => void; href?: string; download?: string }) {\n const classes = \"k2b-content-file-view__action\";\n return (\n <Show\n when={props.href}\n fallback={\n <button type=\"button\" class={classes} title={props.title} aria-label={props.title} onClick={props.onClick}>\n <i class={`ti ${props.icon}`} aria-hidden=\"true\" />\n </button>\n }\n >\n {(href) => (\n <a class={classes} href={href()} download={props.download ?? \"\"} title={props.title} aria-label={props.title}>\n <i class={`ti ${props.icon}`} aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{props.title}</span>\n </a>\n )}\n </Show>\n );\n}\n\n/** Scrollable preview panel with the floating action cluster overlaid top-right. */\nfunction OverlayPanel(props: { actions?: JSX.Element; children: JSX.Element }) {\n return (\n <div class=\"k2b-content-file-view__panel\">\n <div class=\"k2b-content-file-view__preview\">{props.children}</div>\n <Show when={props.actions}>\n <div class=\"k2b-content-file-view__overlay\">{props.actions}</div>\n </Show>\n </div>\n );\n}\n\nconst DownloadAction = (props: FileViewRendererProps): JSX.Element => {\n const messages = useUiMessages();\n return (\n <Show when={props.downloadHref}>\n {(href) => (\n <OverlayAction\n icon=\"ti-download\"\n title={messages().download}\n href={href()}\n download={props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}\n />\n )}\n </Show>\n );\n};\n\n/** Toolbar-styled icon button — reuses the package markdown-editor tool primitive. */\nfunction EditorToolButton(props: { icon: string; title: string; onClick: () => void; disabled?: boolean }) {\n return (\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={props.title}\n aria-label={props.title}\n tabIndex={-1}\n disabled={props.disabled}\n onMouseDown={(e) => e.preventDefault()}\n onClick={props.onClick}\n >\n <i class={props.icon} />\n </button>\n );\n}\n\n// ── Built-in renderers ──────────────────────────────────────────────────────\n\nfunction MarkdownRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n const [editing, setEditing] = createSignal(false);\n return (\n <Show\n when={props.editor && editing()}\n fallback={\n <OverlayPanel\n actions={\n <>\n <Show when={props.editor}>\n <OverlayAction icon=\"ti-pencil\" title={messages().edit} onClick={() => setEditing(true)} />\n </Show>\n <DownloadAction {...props} />\n </>\n }\n >\n <div class=\"k2b-content-file-view__document\">\n <MarkdownView markdown={stripFrontmatter(props.editor?.draft() ?? props.content.content)} headingScale=\"compact\" />\n </div>\n </OverlayPanel>\n }\n >\n {(_) => {\n const editor = props.editor!;\n return (\n <div class=\"k2b-content-file-view__editor\">\n <MarkdownEditor\n class=\"k2b-content-file-view__markdown-field\"\n aria-label={`Edit ${props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}`}\n fill\n value={editor.draft()}\n onValueChange={editor.setDraft}\n showStats={false}\n onSave={() => void editor.save()}\n saveDisabled={!editor.dirty()}\n saving={editor.saving()}\n toolbarTrailing={<EditorToolButton icon=\"ti ti-eye\" title={messages().preview} onClick={() => setEditing(false)} />}\n />\n </div>\n );\n }}\n </Show>\n );\n}\n\nfunction TextRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <Show\n when={props.editor}\n fallback={\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <CodeDisplay code={props.content.content} language={codeLanguage(props.file.path)} />\n </OverlayPanel>\n }\n >\n {(editor) => (\n // Same chrome as the markdown editor — literally the same classes, so\n // border, radius, focus ring, toolbar height and text metrics cannot drift.\n <div class=\"k2b-content-file-view__editor\">\n <div\n class=\"k2b-markdown-editor\"\n data-fill=\"true\"\n role=\"group\"\n aria-label={messages().textEditor}\n onKeyDown={(event) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"s\") {\n event.preventDefault();\n if (editor().dirty() && !editor().saving()) void editor().save();\n }\n }}\n >\n {/* No formatting tools here — the divider under an actions-only bar reads lost. */}\n <div class=\"k2b-markdown-editor__toolbar k2b-content-file-view__code-toolbar\">\n <span class=\"k2b-content-file-view__code-language\">{codeLanguage(props.file.path)}</span>\n <span class=\"k2b-markdown-editor__trailing\">\n <Show when={props.downloadHref}>\n {(href) => (\n <a\n class=\"k2b-markdown-editor__tool\"\n href={href()}\n download={props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}\n title={messages().download}\n aria-label={messages().download}\n >\n <i class=\"ti ti-download\" />\n </a>\n )}\n </Show>\n <EditorToolButton\n icon={editor().saving() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-device-floppy\"}\n title={messages().saveShortcut}\n disabled={!editor().dirty() || editor().saving()}\n onClick={() => void editor().save()}\n />\n </span>\n </div>\n <div class=\"k2b-markdown-editor__surface\">\n <textarea\n class=\"k2b-content-file-view__code-input\"\n value={editor().draft()}\n spellcheck={false}\n onInput={(event) => editor().setDraft(event.currentTarget.value)}\n />\n </div>\n </div>\n </div>\n )}\n </Show>\n );\n}\n\nfunction JsonRenderer(props: FileViewRendererProps) {\n const parsed = createMemo(() => {\n try {\n return { ok: true as const, value: JSON.parse(props.content.content) as StructuredDataValue };\n } catch {\n return { ok: false as const };\n }\n });\n const parsedValue = (): StructuredDataValue => {\n const result = parsed();\n return result.ok ? result.value : null;\n };\n\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__document\">\n <Show when={parsed().ok} fallback={<CodeDisplay code={props.content.content} language=\"text\" />}>\n <StructuredDataPreview data={parsedValue()} maxRows={200} />\n </Show>\n </div>\n </OverlayPanel>\n );\n}\n\nfunction DelimitedTextRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n const delimiter = () =>\n fileViewExtension(props.file.path) === \"tsv\" || props.content.mediaType === \"text/tab-separated-values\" ? \"\\t\" : \",\";\n const preview = createMemo(() => parseDelimitedText(props.content.content, delimiter()));\n const headers = createMemo(() => preview().rows[0] ?? []);\n const rows = createMemo(() => preview().rows.slice(1));\n\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <Show\n when={headers().length > 0}\n fallback={<Placeholder icon=\"ti ti-table\" title={messages().emptyFile} description={messages().delimitedFileEmpty} />}\n >\n <div class=\"k2b-content-file-view__sheet\">\n <table class=\"k2b-content-file-view__table\">\n <thead>\n <tr>\n <For each={headers()}>\n {(header, index) => (\n <th scope=\"col\">\n <span>{header || messages().column({ number: index() + 1 })}</span>\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody>\n <For each={rows()}>\n {(row) => (\n <tr>\n <For each={headers()}>{(_, index) => <td>{row[index()] ?? \"\"}</td>}</For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n <Show when={preview().truncated}>\n <p class=\"k2b-content-file-view__truncated\">{messages().previewLimited}</p>\n </Show>\n </div>\n </Show>\n </OverlayPanel>\n );\n}\n\nconst mediaSource = (props: FileViewRendererProps): string =>\n props.previewHref ?? `data:${props.content.mediaType};base64,${props.content.content}`;\n\nfunction ImageRenderer(props: FileViewRendererProps) {\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__media\">\n <img src={mediaSource(props)} alt={props.file.path} />\n </div>\n </OverlayPanel>\n );\n}\n\nfunction PdfRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n const href = () => props.previewHref ?? props.downloadHref;\n return (\n <Show when={href()} fallback={<Placeholder icon=\"ti ti-file-type-pdf\" title=\"PDF\" description={messages().noInlinePreview} />}>\n {(href) => <object data={href()} type=\"application/pdf\" class=\"k2b-content-file-view__pdf\" aria-label={props.file.path} />}\n </Show>\n );\n}\n\nfunction AudioRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__media\" data-kind=\"audio\">\n <audio controls preload=\"metadata\" src={mediaSource(props)} aria-label={props.file.path}>\n {messages().audioUnsupported}\n </audio>\n </div>\n </OverlayPanel>\n );\n}\n\nfunction VideoRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__media\" data-kind=\"video\">\n <video controls preload=\"metadata\" playsinline src={mediaSource(props)} aria-label={props.file.path}>\n {messages().videoUnsupported}\n </video>\n </div>\n </OverlayPanel>\n );\n}\n\nfunction BinaryRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <Placeholder\n icon=\"ti ti-file-unknown\"\n title={messages().noPreview}\n description={props.content.mediaType || messages().binaryFile}\n action={\n <Show when={props.downloadHref}>\n {(href) => (\n <a class=\"k2b-button\" data-variant=\"secondary\" data-size=\"sm\" href={href()} download=\"\">\n <i class=\"ti ti-download\" aria-hidden=\"true\" />\n {messages().download}\n </a>\n )}\n </Show>\n }\n />\n );\n}\n\nconst BUILTIN_RENDERERS: FileViewRenderer[] = [\n { id: \"markdown\", match: isMarkdown, component: MarkdownRenderer, editable: true },\n {\n id: \"image\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"image\",\n component: ImageRenderer,\n },\n {\n id: \"pdf\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"pdf\",\n component: PdfRenderer,\n },\n {\n id: \"json\",\n match: (file, content) =>\n content.encoding === \"utf8\" && getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"json\",\n component: JsonRenderer,\n },\n {\n id: \"delimited-text\",\n match: (file, content) =>\n content.encoding === \"utf8\" &&\n getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"delimited-text\",\n component: DelimitedTextRenderer,\n },\n {\n id: \"audio\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"audio\",\n component: AudioRenderer,\n },\n {\n id: \"video\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"video\",\n component: VideoRenderer,\n },\n { id: \"text\", match: (_file, content) => content.encoding === \"utf8\", component: TextRenderer, editable: true },\n { id: \"binary\", match: () => true, component: BinaryRenderer },\n];\n\n// ── Component ───────────────────────────────────────────────────────────────\n\nexport const formatFileViewSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n};\n\nexport default function FileView(props: FileViewProps) {\n const messages = useUiMessages();\n const [draft, setDraft] = createSignal(\"\");\n const [savedDraft, setSavedDraft] = createSignal(\"\");\n const [nativeRevision, setNativeRevision] = createSignal(0);\n const dirty = createMemo(() => draft() !== savedDraft());\n const instanceRenderers = () => props.renderers ?? [];\n const saveMutation = mutation.create<{ path: string; content: string }, { path: string; content: string }>({\n mutation: async (input) => {\n await props.save!(input.content);\n return input;\n },\n onSuccess: (saved) => {\n if (props.file.path === saved.path) setSavedDraft(saved.content);\n toast.success(messages().fileSaved);\n },\n onError: (error) => toast.error(error.message),\n });\n const nativePreviewHref = createMemo(() => {\n const kind = getFileViewPreviewKind(props.file);\n const href = props.previewHref ?? (kind === \"pdf\" ? props.downloadHref : null);\n if (!href) return null;\n const separator = href.includes(\"?\") ? \"&\" : \"?\";\n return `${href}${separator}preview-revision=${nativeRevision()}`;\n });\n const browserPreviewContent = createMemo<FileViewContent | null>(() => {\n const kind = getFileViewPreviewKind(props.file);\n if (kind !== \"image\" && kind !== \"pdf\" && kind !== \"audio\" && kind !== \"video\") return null;\n const href = nativePreviewHref();\n if (!href) return null;\n\n const candidate: FileViewContent = {\n encoding: \"base64\",\n content: \"\",\n mediaType: props.file.mediaType ?? \"application/octet-stream\",\n };\n return instanceRenderers().some((renderer) => renderer.match(props.file, candidate)) ? null : candidate;\n });\n const [content, { refetch }] = createResource(\n () => (browserPreviewContent() ? null : { path: props.file.path, revision: props.revision }),\n async () => {\n saveMutation.abort();\n // `load` is an imperative source adapter. Host signal reads inside it\n // must not turn this resource into a hidden reactive feedback loop.\n const loaded = await untrack(() => props.load());\n const loadedDraft = loaded.encoding === \"utf8\" ? loaded.content : \"\";\n setDraft(loadedDraft);\n setSavedDraft(loadedDraft);\n return loaded;\n },\n );\n createEffect(() => {\n if (!props.registerRefresh) return;\n const unregister = props.registerRefresh(async () => {\n if (browserPreviewContent()) setNativeRevision((value) => value + 1);\n else await refetch();\n });\n if (unregister) onCleanup(unregister);\n });\n const resolvedContent = createMemo(() => browserPreviewContent() ?? content());\n\n const renderer = createMemo(() => {\n const loaded = resolvedContent();\n if (!loaded) return null;\n return [...instanceRenderers(), ...BUILTIN_RENDERERS].find((candidate) => candidate.match(props.file, loaded)) ?? null;\n });\n\n createEffect(() => {\n props.onDirtyChange?.(dirty());\n });\n\n const save = async () => {\n if (!props.save || saveMutation.loading()) return;\n await saveMutation.mutate({ path: props.file.path, content: draft() });\n };\n\n const editor = () =>\n props.save && renderer()?.editable && resolvedContent()?.encoding === \"utf8\"\n ? {\n draft,\n setDraft,\n dirty,\n saving: saveMutation.loading,\n save,\n }\n : null;\n\n return (\n <div class={`k2b-content-file-view ${props.class ?? \"\"}`}>\n <Switch>\n <Match when={content.loading && content() === undefined}>\n <Placeholder icon=\"ti ti-loader-2\" title={messages().loading} />\n </Match>\n <Match when={content.error}>\n <Placeholder icon=\"ti ti-alert-circle\" title={messages().failedLoadFile} description={String(content.error?.message ?? \"\")} />\n </Match>\n <Match when={resolvedContent() && renderer()}>\n {(active) => {\n const Renderer = active().component;\n return (\n <Renderer\n file={props.file}\n content={resolvedContent()!}\n previewHref={nativePreviewHref()}\n downloadHref={props.downloadHref ?? null}\n editor={editor()}\n />\n );\n }}\n </Match>\n </Switch>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { delegateEvents as _$delegateEvents } from "solid-js/web";
|
|
3
|
+
import { memo as _$memo } from "solid-js/web";
|
|
4
|
+
import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
|
|
5
|
+
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
6
|
+
import { effect as _$effect } from "solid-js/web";
|
|
7
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
8
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
9
|
+
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
10
|
+
import { insert as _$insert } from "solid-js/web";
|
|
11
|
+
import { use as _$use } from "solid-js/web";
|
|
12
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-content-lightbox__counter aria-live=polite><!$><!/> / <!$><!/>`),
|
|
13
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<div class=k2b-content-lightbox__caption><div class=k2b-content-lightbox__caption-text>`),
|
|
14
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<a download class=k2b-content-lightbox__button><i class="ti ti-download"aria-hidden=true></i><span class=k2b-content-lightbox__button-label>`),
|
|
15
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<button type=button class=k2b-content-lightbox__nav data-direction=previous><i class="ti ti-chevron-left"aria-hidden=true>`),
|
|
16
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<button type=button class=k2b-content-lightbox__nav data-direction=next><i class="ti ti-chevron-right"aria-hidden=true>`),
|
|
17
|
+
_tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-content-lightbox__dots role=group>`),
|
|
18
|
+
_tmpl$7 = /*#__PURE__*/_$template(`<dialog class=k2b-content-lightbox><div class=k2b-content-lightbox__bar><div class=k2b-content-lightbox__meta><!$><!/><!$><!/></div><div class=k2b-content-lightbox__actions><!$><!/><button type=button class=k2b-content-lightbox__button><i class="ti ti-x"aria-hidden=true></i><span class=k2b-content-lightbox__button-label></span></button></div></div><div class=k2b-content-lightbox__stage></div><!$><!/><!$><!/>`),
|
|
19
|
+
_tmpl$8 = /*#__PURE__*/_$template(`<img class=k2b-content-lightbox__image>`),
|
|
20
|
+
_tmpl$9 = /*#__PURE__*/_$template(`<button type=button class=k2b-content-lightbox__dot>`);
|
|
21
|
+
import { createEffect, createSignal, For, onCleanup, onMount, Show } from "solid-js";
|
|
22
|
+
import { useUiMessages } from "../intl/messages";
|
|
23
|
+
/**
|
|
24
|
+
* Minimal, accessible lightbox using native <dialog>.
|
|
25
|
+
* Supports keyboard navigation, touch swipe gestures, and screen readers.
|
|
26
|
+
*/
|
|
27
|
+
export default function Lightbox(props) {
|
|
28
|
+
const messages = useUiMessages();
|
|
29
|
+
const clampIndex = (value, images = props.images) => images.length === 0 ? 0 : Math.max(0, Math.min(value, images.length - 1));
|
|
30
|
+
const [index, setIndex] = createSignal(clampIndex(props.initialIndex ?? 0));
|
|
31
|
+
let dialogRef;
|
|
32
|
+
createEffect(previous => {
|
|
33
|
+
const images = props.images;
|
|
34
|
+
const initialIndex = props.initialIndex;
|
|
35
|
+
setIndex(currentIndex => {
|
|
36
|
+
if (initialIndex !== previous.initialIndex) return clampIndex(initialIndex ?? 0, images);
|
|
37
|
+
const previousImage = previous.images[currentIndex];
|
|
38
|
+
const retained = previousImage ? images.findIndex(image => image === previousImage || image.src === previousImage.src) : -1;
|
|
39
|
+
return retained >= 0 ? retained : clampIndex(currentIndex, images);
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
images,
|
|
43
|
+
initialIndex
|
|
44
|
+
};
|
|
45
|
+
}, {
|
|
46
|
+
images: props.images,
|
|
47
|
+
initialIndex: props.initialIndex
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// Touch gesture tracking
|
|
51
|
+
let touchStartX = 0;
|
|
52
|
+
let touchStartY = 0;
|
|
53
|
+
const SWIPE_THRESHOLD = 50;
|
|
54
|
+
const current = () => props.images[index()];
|
|
55
|
+
const isMultiple = () => props.images.length > 1;
|
|
56
|
+
const prev = () => {
|
|
57
|
+
if (!isMultiple()) return;
|
|
58
|
+
setIndex(i => (i - 1 + props.images.length) % props.images.length);
|
|
59
|
+
};
|
|
60
|
+
const next = () => {
|
|
61
|
+
if (!isMultiple()) return;
|
|
62
|
+
setIndex(i => (i + 1) % props.images.length);
|
|
63
|
+
};
|
|
64
|
+
const close = () => {
|
|
65
|
+
dialogRef.close();
|
|
66
|
+
props.onClose();
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// Keyboard navigation
|
|
70
|
+
const handleKeyDown = e => {
|
|
71
|
+
switch (e.key) {
|
|
72
|
+
case "Escape":
|
|
73
|
+
close();
|
|
74
|
+
break;
|
|
75
|
+
case "ArrowLeft":
|
|
76
|
+
prev();
|
|
77
|
+
break;
|
|
78
|
+
case "ArrowRight":
|
|
79
|
+
next();
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// Touch handlers for swipe gestures
|
|
85
|
+
const handleTouchStart = e => {
|
|
86
|
+
const touch = e.touches[0];
|
|
87
|
+
if (touch) {
|
|
88
|
+
touchStartX = touch.clientX;
|
|
89
|
+
touchStartY = touch.clientY;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const handleTouchEnd = e => {
|
|
93
|
+
const touch = e.changedTouches[0];
|
|
94
|
+
if (!touch) return;
|
|
95
|
+
const deltaX = touch.clientX - touchStartX;
|
|
96
|
+
const deltaY = touch.clientY - touchStartY;
|
|
97
|
+
|
|
98
|
+
// Only trigger swipe if horizontal movement is dominant
|
|
99
|
+
if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > SWIPE_THRESHOLD) {
|
|
100
|
+
if (deltaX > 0) {
|
|
101
|
+
prev();
|
|
102
|
+
} else {
|
|
103
|
+
next();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// Click on backdrop closes lightbox
|
|
109
|
+
const handleBackdropClick = e => {
|
|
110
|
+
if (e.target === dialogRef) {
|
|
111
|
+
close();
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// Registration and teardown both live in onMount: onCleanup also runs when an
|
|
116
|
+
// SSR render is disposed, where `document` does not exist.
|
|
117
|
+
onMount(() => {
|
|
118
|
+
dialogRef.showModal();
|
|
119
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
120
|
+
onCleanup(() => document.removeEventListener("keydown", handleKeyDown));
|
|
121
|
+
});
|
|
122
|
+
return (() => {
|
|
123
|
+
var _el$ = _$getNextElement(_tmpl$7),
|
|
124
|
+
_el$2 = _el$.firstChild,
|
|
125
|
+
_el$3 = _el$2.firstChild,
|
|
126
|
+
_el$10 = _el$3.firstChild,
|
|
127
|
+
[_el$11, _co$3] = _$getNextMarker(_el$10.nextSibling),
|
|
128
|
+
_el$12 = _el$11.nextSibling,
|
|
129
|
+
[_el$13, _co$4] = _$getNextMarker(_el$12.nextSibling),
|
|
130
|
+
_el$14 = _el$3.nextSibling,
|
|
131
|
+
_el$21 = _el$14.firstChild,
|
|
132
|
+
[_el$22, _co$5] = _$getNextMarker(_el$21.nextSibling),
|
|
133
|
+
_el$18 = _el$22.nextSibling,
|
|
134
|
+
_el$19 = _el$18.firstChild,
|
|
135
|
+
_el$20 = _el$19.nextSibling,
|
|
136
|
+
_el$23 = _el$2.nextSibling,
|
|
137
|
+
_el$27 = _el$23.nextSibling,
|
|
138
|
+
[_el$28, _co$6] = _$getNextMarker(_el$27.nextSibling),
|
|
139
|
+
_el$29 = _el$28.nextSibling,
|
|
140
|
+
[_el$30, _co$7] = _$getNextMarker(_el$29.nextSibling);
|
|
141
|
+
_el$.$$touchend = handleTouchEnd;
|
|
142
|
+
_el$.$$touchstart = handleTouchStart;
|
|
143
|
+
_el$.$$mousedown = handleBackdropClick;
|
|
144
|
+
var _ref$ = dialogRef;
|
|
145
|
+
typeof _ref$ === "function" ? _$use(_ref$, _el$) : dialogRef = _el$;
|
|
146
|
+
_$insert(_el$3, _$createComponent(Show, {
|
|
147
|
+
get when() {
|
|
148
|
+
return isMultiple();
|
|
149
|
+
},
|
|
150
|
+
get children() {
|
|
151
|
+
var _el$4 = _$getNextElement(_tmpl$),
|
|
152
|
+
_el$6 = _el$4.firstChild,
|
|
153
|
+
[_el$7, _co$] = _$getNextMarker(_el$6.nextSibling),
|
|
154
|
+
_el$5 = _el$7.nextSibling,
|
|
155
|
+
_el$8 = _el$5.nextSibling,
|
|
156
|
+
[_el$9, _co$2] = _$getNextMarker(_el$8.nextSibling);
|
|
157
|
+
_$insert(_el$4, () => index() + 1, _el$7, _co$);
|
|
158
|
+
_$insert(_el$4, () => props.images.length, _el$9, _co$2);
|
|
159
|
+
return _el$4;
|
|
160
|
+
}
|
|
161
|
+
}), _el$11, _co$3);
|
|
162
|
+
_$insert(_el$3, _$createComponent(Show, {
|
|
163
|
+
get when() {
|
|
164
|
+
return current()?.alt;
|
|
165
|
+
},
|
|
166
|
+
get children() {
|
|
167
|
+
var _el$0 = _$getNextElement(_tmpl$2),
|
|
168
|
+
_el$1 = _el$0.firstChild;
|
|
169
|
+
_$insert(_el$1, () => current()?.alt);
|
|
170
|
+
return _el$0;
|
|
171
|
+
}
|
|
172
|
+
}), _el$13, _co$4);
|
|
173
|
+
_$insert(_el$14, _$createComponent(Show, {
|
|
174
|
+
get when() {
|
|
175
|
+
return current()?.downloadUrl;
|
|
176
|
+
},
|
|
177
|
+
get children() {
|
|
178
|
+
var _el$15 = _$getNextElement(_tmpl$3),
|
|
179
|
+
_el$16 = _el$15.firstChild,
|
|
180
|
+
_el$17 = _el$16.nextSibling;
|
|
181
|
+
_$insert(_el$17, () => messages().download);
|
|
182
|
+
_$effect(_p$ => {
|
|
183
|
+
var _v$ = current().downloadUrl,
|
|
184
|
+
_v$2 = messages().downloadImage;
|
|
185
|
+
_v$ !== _p$.e && _$setAttribute(_el$15, "href", _p$.e = _v$);
|
|
186
|
+
_v$2 !== _p$.t && _$setAttribute(_el$15, "aria-label", _p$.t = _v$2);
|
|
187
|
+
return _p$;
|
|
188
|
+
}, {
|
|
189
|
+
e: undefined,
|
|
190
|
+
t: undefined
|
|
191
|
+
});
|
|
192
|
+
return _el$15;
|
|
193
|
+
}
|
|
194
|
+
}), _el$22, _co$5);
|
|
195
|
+
_el$18.$$click = close;
|
|
196
|
+
_$insert(_el$20, () => messages().close);
|
|
197
|
+
_$insert(_el$23, _$createComponent(Show, {
|
|
198
|
+
get when() {
|
|
199
|
+
return current();
|
|
200
|
+
},
|
|
201
|
+
children: image => (() => {
|
|
202
|
+
var _el$31 = _$getNextElement(_tmpl$8);
|
|
203
|
+
_$setAttribute(_el$31, "draggable", false);
|
|
204
|
+
_$effect(_p$ => {
|
|
205
|
+
var _v$5 = image().src,
|
|
206
|
+
_v$6 = image().alt ?? "";
|
|
207
|
+
_v$5 !== _p$.e && _$setAttribute(_el$31, "src", _p$.e = _v$5);
|
|
208
|
+
_v$6 !== _p$.t && _$setAttribute(_el$31, "alt", _p$.t = _v$6);
|
|
209
|
+
return _p$;
|
|
210
|
+
}, {
|
|
211
|
+
e: undefined,
|
|
212
|
+
t: undefined
|
|
213
|
+
});
|
|
214
|
+
return _el$31;
|
|
215
|
+
})()
|
|
216
|
+
}));
|
|
217
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
218
|
+
get when() {
|
|
219
|
+
return isMultiple();
|
|
220
|
+
},
|
|
221
|
+
get children() {
|
|
222
|
+
return [(() => {
|
|
223
|
+
var _el$24 = _$getNextElement(_tmpl$4);
|
|
224
|
+
_el$24.$$click = prev;
|
|
225
|
+
_$effect(() => _$setAttribute(_el$24, "aria-label", messages().previousImage));
|
|
226
|
+
_$runHydrationEvents();
|
|
227
|
+
return _el$24;
|
|
228
|
+
})(), (() => {
|
|
229
|
+
var _el$25 = _$getNextElement(_tmpl$5);
|
|
230
|
+
_el$25.$$click = next;
|
|
231
|
+
_$effect(() => _$setAttribute(_el$25, "aria-label", messages().nextImage));
|
|
232
|
+
_$runHydrationEvents();
|
|
233
|
+
return _el$25;
|
|
234
|
+
})()];
|
|
235
|
+
}
|
|
236
|
+
}), _el$28, _co$6);
|
|
237
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
238
|
+
get when() {
|
|
239
|
+
return _$memo(() => !!isMultiple())() && props.images.length <= 10;
|
|
240
|
+
},
|
|
241
|
+
get children() {
|
|
242
|
+
var _el$26 = _$getNextElement(_tmpl$6);
|
|
243
|
+
_$insert(_el$26, _$createComponent(For, {
|
|
244
|
+
get each() {
|
|
245
|
+
return props.images;
|
|
246
|
+
},
|
|
247
|
+
children: (_, i) => (() => {
|
|
248
|
+
var _el$32 = _$getNextElement(_tmpl$9);
|
|
249
|
+
_el$32.$$click = () => setIndex(i());
|
|
250
|
+
_$effect(_p$ => {
|
|
251
|
+
var _v$7 = index() === i() ? "true" : undefined,
|
|
252
|
+
_v$8 = messages().goToImage({
|
|
253
|
+
index: i() + 1
|
|
254
|
+
});
|
|
255
|
+
_v$7 !== _p$.e && _$setAttribute(_el$32, "aria-current", _p$.e = _v$7);
|
|
256
|
+
_v$8 !== _p$.t && _$setAttribute(_el$32, "aria-label", _p$.t = _v$8);
|
|
257
|
+
return _p$;
|
|
258
|
+
}, {
|
|
259
|
+
e: undefined,
|
|
260
|
+
t: undefined
|
|
261
|
+
});
|
|
262
|
+
_$runHydrationEvents();
|
|
263
|
+
return _el$32;
|
|
264
|
+
})()
|
|
265
|
+
}));
|
|
266
|
+
_$effect(() => _$setAttribute(_el$26, "aria-label", messages().imageNavigation));
|
|
267
|
+
return _el$26;
|
|
268
|
+
}
|
|
269
|
+
}), _el$30, _co$7);
|
|
270
|
+
_$effect(_p$ => {
|
|
271
|
+
var _v$3 = messages().imageLightbox,
|
|
272
|
+
_v$4 = messages().closeLightbox;
|
|
273
|
+
_v$3 !== _p$.e && _$setAttribute(_el$, "aria-label", _p$.e = _v$3);
|
|
274
|
+
_v$4 !== _p$.t && _$setAttribute(_el$18, "aria-label", _p$.t = _v$4);
|
|
275
|
+
return _p$;
|
|
276
|
+
}, {
|
|
277
|
+
e: undefined,
|
|
278
|
+
t: undefined
|
|
279
|
+
});
|
|
280
|
+
_$runHydrationEvents();
|
|
281
|
+
return _el$;
|
|
282
|
+
})();
|
|
283
|
+
}
|
|
284
|
+
_$delegateEvents(["mousedown", "touchstart", "touchend", "click"]);
|
|
285
|
+
//# sourceMappingURL=Lightbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createEffect","createSignal","For","onCleanup","onMount","Show","useUiMessages","Lightbox","props","messages","clampIndex","value","images","length","Math","max","min","index","setIndex","initialIndex","dialogRef","previous","currentIndex","previousImage","retained","findIndex","image","src","touchStartX","touchStartY","SWIPE_THRESHOLD","current","isMultiple","prev","i","next","close","onClose","handleKeyDown","e","key","handleTouchStart","touch","touches","clientX","clientY","handleTouchEnd","changedTouches","deltaX","deltaY","abs","handleBackdropClick","target","showModal","document","addEventListener","removeEventListener","_el$","_$getNextElement","_tmpl$7","_el$2","firstChild","_el$3","_el$10","_el$11","_co$3","_$getNextMarker","nextSibling","_el$12","_el$13","_co$4","_el$14","_el$21","_el$22","_co$5","_el$18","_el$19","_el$20","_el$23","_el$27","_el$28","_co$6","_el$29","_el$30","_co$7","$$touchend","$$touchstart","$$mousedown","_ref$","_$use","_$insert","_$createComponent","when","children","_el$4","_tmpl$","_el$6","_el$7","_co$","_el$5","_el$8","_el$9","_co$2","alt","_el$0","_tmpl$2","_el$1","downloadUrl","_el$15","_tmpl$3","_el$16","_el$17","download","_$effect","_p$","_v$","_v$2","downloadImage","_$setAttribute","t","undefined","$$click","_el$31","_tmpl$8","_v$5","_v$6","_el$24","_tmpl$4","_$runHydrationEvents","_el$25","_tmpl$5","nextImage","_$memo","_el$26","_tmpl$6","each","_","_el$32","_tmpl$9","_v$7","_v$8","goToImage","imageNavigation","_v$3","imageLightbox","_v$4","closeLightbox","_$delegateEvents"],"sources":["content/Lightbox.tsx"],"sourcesContent":["import { createEffect, createSignal, For, onCleanup, onMount, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type LightboxImage = {\n src: string;\n alt?: string;\n downloadUrl?: string;\n};\n\ntype LightboxProps = {\n images: LightboxImage[];\n initialIndex?: number;\n onClose: () => void;\n};\n\n/**\n * Minimal, accessible lightbox using native <dialog>.\n * Supports keyboard navigation, touch swipe gestures, and screen readers.\n */\nexport default function Lightbox(props: LightboxProps) {\n const messages = useUiMessages();\n const clampIndex = (value: number, images = props.images): number =>\n images.length === 0 ? 0 : Math.max(0, Math.min(value, images.length - 1));\n const [index, setIndex] = createSignal(clampIndex(props.initialIndex ?? 0));\n let dialogRef!: HTMLDialogElement;\n\n createEffect(\n (previous: { images: LightboxImage[]; initialIndex: number | undefined }) => {\n const images = props.images;\n const initialIndex = props.initialIndex;\n setIndex((currentIndex) => {\n if (initialIndex !== previous.initialIndex) return clampIndex(initialIndex ?? 0, images);\n const previousImage = previous.images[currentIndex];\n const retained = previousImage ? images.findIndex((image) => image === previousImage || image.src === previousImage.src) : -1;\n return retained >= 0 ? retained : clampIndex(currentIndex, images);\n });\n return { images, initialIndex };\n },\n { images: props.images, initialIndex: props.initialIndex },\n );\n\n // Touch gesture tracking\n let touchStartX = 0;\n let touchStartY = 0;\n const SWIPE_THRESHOLD = 50;\n\n const current = () => props.images[index()];\n const isMultiple = () => props.images.length > 1;\n const prev = () => {\n if (!isMultiple()) return;\n setIndex((i) => (i - 1 + props.images.length) % props.images.length);\n };\n const next = () => {\n if (!isMultiple()) return;\n setIndex((i) => (i + 1) % props.images.length);\n };\n\n const close = () => {\n dialogRef.close();\n props.onClose();\n };\n\n // Keyboard navigation\n const handleKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"Escape\":\n close();\n break;\n case \"ArrowLeft\":\n prev();\n break;\n case \"ArrowRight\":\n next();\n break;\n }\n };\n\n // Touch handlers for swipe gestures\n const handleTouchStart = (e: TouchEvent) => {\n const touch = e.touches[0];\n if (touch) {\n touchStartX = touch.clientX;\n touchStartY = touch.clientY;\n }\n };\n\n const handleTouchEnd = (e: TouchEvent) => {\n const touch = e.changedTouches[0];\n if (!touch) return;\n\n const deltaX = touch.clientX - touchStartX;\n const deltaY = touch.clientY - touchStartY;\n\n // Only trigger swipe if horizontal movement is dominant\n if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > SWIPE_THRESHOLD) {\n if (deltaX > 0) {\n prev();\n } else {\n next();\n }\n }\n };\n\n // Click on backdrop closes lightbox\n const handleBackdropClick = (e: MouseEvent) => {\n if (e.target === dialogRef) {\n close();\n }\n };\n\n // Registration and teardown both live in onMount: onCleanup also runs when an\n // SSR render is disposed, where `document` does not exist.\n onMount(() => {\n dialogRef.showModal();\n document.addEventListener(\"keydown\", handleKeyDown);\n onCleanup(() => document.removeEventListener(\"keydown\", handleKeyDown));\n });\n\n return (\n <dialog\n ref={dialogRef}\n class=\"k2b-content-lightbox\"\n onMouseDown={handleBackdropClick}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n aria-label={messages().imageLightbox}\n >\n {/* Top bar */}\n <div class=\"k2b-content-lightbox__bar\">\n <div class=\"k2b-content-lightbox__meta\">\n <Show when={isMultiple()}>\n <span class=\"k2b-content-lightbox__counter\" aria-live=\"polite\">\n {index() + 1} / {props.images.length}\n </span>\n </Show>\n <Show when={current()?.alt}>\n <div class=\"k2b-content-lightbox__caption\">\n <div class=\"k2b-content-lightbox__caption-text\">{current()?.alt}</div>\n </div>\n </Show>\n </div>\n\n <div class=\"k2b-content-lightbox__actions\">\n <Show when={current()?.downloadUrl}>\n <a href={current()!.downloadUrl} download=\"\" class=\"k2b-content-lightbox__button\" aria-label={messages().downloadImage}>\n <i class=\"ti ti-download\" aria-hidden=\"true\" />\n <span class=\"k2b-content-lightbox__button-label\">{messages().download}</span>\n </a>\n </Show>\n <button type=\"button\" onClick={close} class=\"k2b-content-lightbox__button\" aria-label={messages().closeLightbox}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n <span class=\"k2b-content-lightbox__button-label\">{messages().close}</span>\n </button>\n </div>\n </div>\n\n <div class=\"k2b-content-lightbox__stage\">\n <Show when={current()}>\n {(image) => <img src={image().src} alt={image().alt ?? \"\"} class=\"k2b-content-lightbox__image\" draggable={false} />}\n </Show>\n </div>\n\n <Show when={isMultiple()}>\n <button\n type=\"button\"\n onClick={prev}\n class=\"k2b-content-lightbox__nav\"\n data-direction=\"previous\"\n aria-label={messages().previousImage}\n >\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n </button>\n <button type=\"button\" onClick={next} class=\"k2b-content-lightbox__nav\" data-direction=\"next\" aria-label={messages().nextImage}>\n <i class=\"ti ti-chevron-right\" aria-hidden=\"true\" />\n </button>\n </Show>\n\n <Show when={isMultiple() && props.images.length <= 10}>\n <div class=\"k2b-content-lightbox__dots\" role=\"group\" aria-label={messages().imageNavigation}>\n <For each={props.images}>\n {(_, i) => (\n <button\n type=\"button\"\n onClick={() => setIndex(i())}\n class=\"k2b-content-lightbox__dot\"\n aria-current={index() === i() ? \"true\" : undefined}\n aria-label={messages().goToImage({ index: i() + 1 })}\n />\n )}\n </For>\n </div>\n </Show>\n </dialog>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { className as _$className } from "solid-js/web";
|
|
3
|
+
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
4
|
+
import { effect as _$effect } from "solid-js/web";
|
|
5
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
6
|
+
import { insert as _$insert } from "solid-js/web";
|
|
7
|
+
import { memo as _$memo } from "solid-js/web";
|
|
8
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
9
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-log-level><i aria-hidden=true></i><span>`),
|
|
10
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<span class=k2b-log-table__source>`),
|
|
11
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<span>`),
|
|
12
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<span class=k2b-log-table__time>`);
|
|
13
|
+
import { dates } from "@k2b/stdlib";
|
|
14
|
+
import { Show } from "solid-js";
|
|
15
|
+
import { useUiMessages } from "../intl/messages";
|
|
16
|
+
import Placeholder from "../surfaces/Placeholder";
|
|
17
|
+
import DataTable from "./DataTable";
|
|
18
|
+
/**
|
|
19
|
+
* Cloud paints each level with a hardcoded Tailwind palette pair
|
|
20
|
+
* (`text-amber-500 dark:text-amber-400`, …). The package keeps the same
|
|
21
|
+
* per-level distinction but routes it through `data-level` so the semantic
|
|
22
|
+
* `--k2b-*` tokens stay the single theming contract in both schemes.
|
|
23
|
+
*/
|
|
24
|
+
const levelIcon = {
|
|
25
|
+
debug: {
|
|
26
|
+
icon: "ti ti-bug",
|
|
27
|
+
level: "debug",
|
|
28
|
+
label: "debug"
|
|
29
|
+
},
|
|
30
|
+
info: {
|
|
31
|
+
icon: "ti ti-info-circle",
|
|
32
|
+
level: "info",
|
|
33
|
+
label: "info"
|
|
34
|
+
},
|
|
35
|
+
warn: {
|
|
36
|
+
icon: "ti ti-alert-triangle",
|
|
37
|
+
level: "warn",
|
|
38
|
+
label: "warn"
|
|
39
|
+
},
|
|
40
|
+
error: {
|
|
41
|
+
icon: "ti ti-alert-circle",
|
|
42
|
+
level: "error",
|
|
43
|
+
label: "error"
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
export default function LogEntriesTable(props) {
|
|
47
|
+
const messages = useUiMessages();
|
|
48
|
+
const columns = () => [{
|
|
49
|
+
id: "level",
|
|
50
|
+
header: "Level",
|
|
51
|
+
value: entry => entry.level
|
|
52
|
+
}, {
|
|
53
|
+
id: "source",
|
|
54
|
+
header: `Source (${props.entries.length})`,
|
|
55
|
+
value: entry => entry.source
|
|
56
|
+
}, {
|
|
57
|
+
id: "message",
|
|
58
|
+
header: "Message",
|
|
59
|
+
value: entry => entry.message
|
|
60
|
+
}, {
|
|
61
|
+
id: "time",
|
|
62
|
+
header: "Time",
|
|
63
|
+
value: entry => entry.createdAt,
|
|
64
|
+
cellClass: "k2b-log-table__time-cell"
|
|
65
|
+
}];
|
|
66
|
+
return _$createComponent(Show, {
|
|
67
|
+
get when() {
|
|
68
|
+
return props.entries.length > 0;
|
|
69
|
+
},
|
|
70
|
+
get fallback() {
|
|
71
|
+
return _$createComponent(Placeholder, {
|
|
72
|
+
surface: "paper",
|
|
73
|
+
get description() {
|
|
74
|
+
return _$memo(() => props.emptyMessage ?? messages().noLogEntries);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
get children() {
|
|
79
|
+
return _$createComponent(DataTable, {
|
|
80
|
+
get rows() {
|
|
81
|
+
return props.entries;
|
|
82
|
+
},
|
|
83
|
+
get columns() {
|
|
84
|
+
return columns();
|
|
85
|
+
},
|
|
86
|
+
getRowId: entry => String(entry.id),
|
|
87
|
+
hoverRows: true,
|
|
88
|
+
"class": "k2b-log-table",
|
|
89
|
+
renderCell: ({
|
|
90
|
+
row,
|
|
91
|
+
col
|
|
92
|
+
}) => {
|
|
93
|
+
if (col.id === "level") {
|
|
94
|
+
const level = levelIcon[row.level] ?? {
|
|
95
|
+
icon: "ti ti-circle",
|
|
96
|
+
level: "neutral",
|
|
97
|
+
label: row.level || "unknown"
|
|
98
|
+
};
|
|
99
|
+
return (() => {
|
|
100
|
+
var _el$ = _$getNextElement(_tmpl$),
|
|
101
|
+
_el$2 = _el$.firstChild,
|
|
102
|
+
_el$3 = _el$2.nextSibling;
|
|
103
|
+
_$insert(_el$3, () => level.label);
|
|
104
|
+
_$effect(_p$ => {
|
|
105
|
+
var _v$ = level.level,
|
|
106
|
+
_v$2 = `k2b-log-level__icon ${level.icon}`;
|
|
107
|
+
_v$ !== _p$.e && _$setAttribute(_el$, "data-level", _p$.e = _v$);
|
|
108
|
+
_v$2 !== _p$.t && _$className(_el$2, _p$.t = _v$2);
|
|
109
|
+
return _p$;
|
|
110
|
+
}, {
|
|
111
|
+
e: undefined,
|
|
112
|
+
t: undefined
|
|
113
|
+
});
|
|
114
|
+
return _el$;
|
|
115
|
+
})();
|
|
116
|
+
}
|
|
117
|
+
if (col.id === "source") return (() => {
|
|
118
|
+
var _el$4 = _$getNextElement(_tmpl$2);
|
|
119
|
+
_$insert(_el$4, () => row.source);
|
|
120
|
+
return _el$4;
|
|
121
|
+
})();
|
|
122
|
+
if (col.id === "message") return (() => {
|
|
123
|
+
var _el$5 = _$getNextElement(_tmpl$3);
|
|
124
|
+
_$insert(_el$5, () => row.message);
|
|
125
|
+
_$effect(() => _$setAttribute(_el$5, "title", row.message));
|
|
126
|
+
return _el$5;
|
|
127
|
+
})();
|
|
128
|
+
if (col.id === "time") return (() => {
|
|
129
|
+
var _el$6 = _$getNextElement(_tmpl$4);
|
|
130
|
+
_$insert(_el$6, () => dates.formatDateTime(row.createdAt));
|
|
131
|
+
return _el$6;
|
|
132
|
+
})();
|
|
133
|
+
return "";
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=LogEntriesTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["dates","Show","useUiMessages","Placeholder","DataTable","levelIcon","debug","icon","level","label","info","warn","error","LogEntriesTable","props","messages","columns","id","header","value","entry","entries","length","source","message","createdAt","cellClass","_$createComponent","when","fallback","surface","description","_$memo","emptyMessage","noLogEntries","children","rows","getRowId","String","hoverRows","renderCell","row","col","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_$insert","_$effect","_p$","_v$","_v$2","e","_$setAttribute","t","_$className","undefined","_el$4","_tmpl$2","_el$5","_tmpl$3","_el$6","_tmpl$4","formatDateTime"],"sources":["content/LogEntriesTable.tsx"],"sourcesContent":["import { dates } from \"@k2b/stdlib\";\nimport { Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport DataTable, { type DataTableColumn } from \"./DataTable\";\n\nexport type LogTableEntry = {\n id: number | string;\n level: string;\n source: string;\n message: string;\n metadata: Record<string, unknown> | null;\n createdAt: string;\n};\n\ntype Props = {\n entries: readonly LogTableEntry[];\n emptyMessage?: string;\n};\n\n/**\n * Cloud paints each level with a hardcoded Tailwind palette pair\n * (`text-amber-500 dark:text-amber-400`, …). The package keeps the same\n * per-level distinction but routes it through `data-level` so the semantic\n * `--k2b-*` tokens stay the single theming contract in both schemes.\n */\nconst levelIcon: Record<string, { icon: string; level: string; label: string }> = {\n debug: { icon: \"ti ti-bug\", level: \"debug\", label: \"debug\" },\n info: { icon: \"ti ti-info-circle\", level: \"info\", label: \"info\" },\n warn: { icon: \"ti ti-alert-triangle\", level: \"warn\", label: \"warn\" },\n error: { icon: \"ti ti-alert-circle\", level: \"error\", label: \"error\" },\n};\n\nexport default function LogEntriesTable(props: Props) {\n const messages = useUiMessages();\n const columns = (): DataTableColumn<LogTableEntry>[] => [\n { id: \"level\", header: \"Level\", value: (entry) => entry.level },\n { id: \"source\", header: `Source (${props.entries.length})`, value: (entry) => entry.source },\n { id: \"message\", header: \"Message\", value: (entry) => entry.message },\n { id: \"time\", header: \"Time\", value: (entry) => entry.createdAt, cellClass: \"k2b-log-table__time-cell\" },\n ];\n\n return (\n <Show\n when={props.entries.length > 0}\n fallback={<Placeholder surface=\"paper\" description={<>{props.emptyMessage ?? messages().noLogEntries}</>} />}\n >\n <DataTable\n rows={props.entries}\n columns={columns()}\n getRowId={(entry) => String(entry.id)}\n hoverRows\n class=\"k2b-log-table\"\n renderCell={({ row, col }) => {\n if (col.id === \"level\") {\n const level = levelIcon[row.level] ?? { icon: \"ti ti-circle\", level: \"neutral\", label: row.level || \"unknown\" };\n return (\n <span class=\"k2b-log-level\" data-level={level.level}>\n <i class={`k2b-log-level__icon ${level.icon}`} aria-hidden=\"true\" />\n <span>{level.label}</span>\n </span>\n );\n }\n if (col.id === \"source\") return <span class=\"k2b-log-table__source\">{row.source}</span>;\n if (col.id === \"message\") return <span title={row.message}>{row.message}</span>;\n if (col.id === \"time\") return <span class=\"k2b-log-table__time\">{dates.formatDateTime(row.createdAt)}</span>;\n return \"\";\n }}\n />\n </Show>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|