@k2b/ui 0.21.0 → 0.23.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/dist/browser/actions/ContextMenu.js +3 -1
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +3 -1
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js +3 -1
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/filter-messages.js +20 -0
- package/dist/browser/actions/filter-messages.js.map +1 -0
- package/dist/browser/actions/spotlight-messages.js +16 -0
- package/dist/browser/actions/spotlight-messages.js.map +1 -0
- package/dist/browser/chat/ChatComposer.js +47 -41
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +25 -23
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatRoot.js +3 -3
- package/dist/browser/chat/ChatRoot.js.map +1 -1
- package/dist/browser/chat/ChatTimeline.js +12 -12
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +236 -0
- package/dist/browser/chat/chat-messages.js.map +1 -0
- package/dist/browser/content/Calendar.js +1096 -1060
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarDayView.js +1187 -0
- package/dist/browser/content/CalendarDayView.js.map +1 -0
- package/dist/browser/content/CalendarWeekView.js +1571 -0
- package/dist/browser/content/CalendarWeekView.js.map +1 -0
- package/dist/browser/content/Chart.js +15 -8
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +185 -85
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartExplorerControls.js +9 -7
- package/dist/browser/content/ChartExplorerControls.js.map +1 -1
- package/dist/browser/content/ChartFilterControls.js +93 -34
- package/dist/browser/content/ChartFilterControls.js.map +1 -1
- package/dist/browser/content/ChartSnapshotView.js +3 -3
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/DataTable.js +238 -201
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/Docs.js +3 -1
- package/dist/browser/content/Docs.js.map +1 -1
- package/dist/browser/content/FileBrowser.js +30 -26
- package/dist/browser/content/FileBrowser.js.map +1 -1
- package/dist/browser/content/FileTree.js +9 -7
- package/dist/browser/content/FileTree.js.map +1 -1
- package/dist/browser/content/FileView.js +37 -28
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js +9 -7
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/LogEntriesTable.js +3 -3
- package/dist/browser/content/LogEntriesTable.js.map +1 -1
- package/dist/browser/content/MessageRow.js +24 -22
- package/dist/browser/content/MessageRow.js.map +1 -1
- package/dist/browser/content/Pagination.js +7 -7
- package/dist/browser/content/Pagination.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +15 -13
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/RangePicker.js +3 -1
- package/dist/browser/content/RangePicker.js.map +1 -1
- package/dist/browser/content/StructuredDataPreview.js +3 -1
- package/dist/browser/content/StructuredDataPreview.js.map +1 -1
- package/dist/browser/content/Timeline.js +13 -11
- package/dist/browser/content/Timeline.js.map +1 -1
- package/dist/browser/content/VideoPlayer.js +5 -5
- package/dist/browser/content/VideoPlayer.js.map +1 -1
- package/dist/browser/content/VirtualFeed.js +6 -4
- package/dist/browser/content/VirtualFeed.js.map +1 -1
- package/dist/browser/content/ZoomPanViewport.js +10 -7
- package/dist/browser/content/ZoomPanViewport.js.map +1 -1
- package/dist/browser/content/calendar-day-scroll.js +98 -0
- package/dist/browser/content/calendar-day-scroll.js.map +1 -0
- package/dist/browser/content/calendar-days.js +408 -0
- package/dist/browser/content/calendar-days.js.map +1 -0
- package/dist/browser/content/calendar-dialogs.js +236 -0
- package/dist/browser/content/calendar-dialogs.js.map +1 -0
- package/dist/browser/content/calendar-messages.js +249 -3
- package/dist/browser/content/calendar-messages.js.map +1 -1
- package/dist/browser/content/calendar-pointer.js +19 -6
- package/dist/browser/content/calendar-pointer.js.map +1 -1
- package/dist/browser/content/calendar-shared.js +328 -0
- package/dist/browser/content/calendar-shared.js.map +1 -0
- package/dist/browser/content/calendar-time-view.js +1649 -0
- package/dist/browser/content/calendar-time-view.js.map +1 -0
- package/dist/browser/content/chart-messages.js +146 -0
- package/dist/browser/content/chart-messages.js.map +1 -0
- package/dist/browser/content/collection-selection.js +2 -0
- package/dist/browser/content/collection-selection.js.map +1 -1
- package/dist/browser/content/data-table-messages.js +24 -0
- package/dist/browser/content/data-table-messages.js.map +1 -0
- package/dist/browser/content/docs-messages.js +24 -0
- package/dist/browser/content/docs-messages.js.map +1 -0
- package/dist/browser/content/feed-messages.js +34 -0
- package/dist/browser/content/feed-messages.js.map +1 -0
- package/dist/browser/content/file-browser-messages.js +69 -0
- package/dist/browser/content/file-browser-messages.js.map +1 -0
- package/dist/browser/content/file-view-messages.js +64 -0
- package/dist/browser/content/file-view-messages.js.map +1 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/lightbox-messages.js +36 -0
- package/dist/browser/content/lightbox-messages.js.map +1 -0
- package/dist/browser/content/log-entries-messages.js +20 -0
- package/dist/browser/content/log-entries-messages.js.map +1 -0
- package/dist/browser/content/markdown-info-block-messages.js +24 -0
- package/dist/browser/content/markdown-info-block-messages.js.map +1 -0
- package/dist/browser/content/markdown-info-blocks.js +3 -3
- package/dist/browser/content/markdown-info-blocks.js.map +1 -1
- package/dist/browser/content/markdown-links.js +2 -2
- package/dist/browser/content/markdown-links.js.map +1 -1
- package/dist/browser/content/markdown-reference-messages.js +30 -0
- package/dist/browser/content/markdown-reference-messages.js.map +1 -0
- package/dist/browser/content/pagination-messages.js +38 -0
- package/dist/browser/content/pagination-messages.js.map +1 -0
- package/dist/browser/content/pdf-messages.js +43 -0
- package/dist/browser/content/pdf-messages.js.map +1 -0
- package/dist/browser/content/range-picker-messages.js +20 -0
- package/dist/browser/content/range-picker-messages.js.map +1 -0
- package/dist/browser/content/structured-data-messages.js +22 -0
- package/dist/browser/content/structured-data-messages.js.map +1 -0
- package/dist/browser/content/timeline-messages.js +62 -0
- package/dist/browser/content/timeline-messages.js.map +1 -0
- package/dist/browser/content/video-messages.js +24 -0
- package/dist/browser/content/video-messages.js.map +1 -0
- package/dist/browser/content/viewport-messages.js +28 -0
- package/dist/browser/content/viewport-messages.js.map +1 -0
- package/dist/browser/feedback/HoverPreview.js +34 -6
- package/dist/browser/feedback/HoverPreview.js.map +1 -1
- package/dist/browser/feedback/InstallGuide.js +18 -18
- package/dist/browser/feedback/InstallGuide.js.map +1 -1
- package/dist/browser/feedback/install-messages.js +104 -0
- package/dist/browser/feedback/install-messages.js.map +1 -0
- package/dist/browser/feedback/prompt-messages.js +65 -0
- package/dist/browser/feedback/prompt-messages.js.map +1 -0
- package/dist/browser/feedback/prompts.js +14 -11
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/feedback/toast-messages.js +18 -0
- package/dist/browser/feedback/toast-messages.js.map +1 -0
- package/dist/browser/feedback/toast.js +4 -3
- package/dist/browser/feedback/toast.js.map +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/inputs/AutocompleteEditor.js +6 -4
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/browser/inputs/AutocompleteSelect.js +10 -8
- package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/browser/inputs/ChoiceGroups.js +4 -0
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
- package/dist/browser/inputs/ChoiceInputs.js +5 -5
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/inputs/Combobox.js +3 -2
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/inputs/FileDropTarget.js +6 -6
- package/dist/browser/inputs/FileDropTarget.js.map +1 -1
- package/dist/browser/inputs/FileInputs.js +30 -21
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/MultiSelectInput.js +7 -5
- package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
- package/dist/browser/inputs/NumberInput.js +4 -2
- package/dist/browser/inputs/NumberInput.js.map +1 -1
- package/dist/browser/inputs/QrScanner.js +5 -5
- package/dist/browser/inputs/QrScanner.js.map +1 -1
- package/dist/browser/inputs/Select.js +7 -5
- package/dist/browser/inputs/Select.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js +3 -3
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/SignatureInput.js +9 -3
- package/dist/browser/inputs/SignatureInput.js.map +1 -1
- package/dist/browser/inputs/SpecialInputs.js +4 -2
- package/dist/browser/inputs/SpecialInputs.js.map +1 -1
- package/dist/browser/inputs/TagEditor.js +8 -6
- package/dist/browser/inputs/TagEditor.js.map +1 -1
- package/dist/browser/inputs/TagsInput.js +5 -5
- package/dist/browser/inputs/TagsInput.js.map +1 -1
- package/dist/browser/inputs/TemplateEditor.js +5 -5
- package/dist/browser/inputs/TemplateEditor.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +3 -1
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/completion-messages.js +24 -0
- package/dist/browser/inputs/completion-messages.js.map +1 -0
- package/dist/browser/inputs/file-drop-messages.js +63 -0
- package/dist/browser/inputs/file-drop-messages.js.map +1 -0
- package/dist/browser/inputs/file-drop.js.map +1 -1
- package/dist/browser/inputs/file-input-messages.js +60 -0
- package/dist/browser/inputs/file-input-messages.js.map +1 -0
- package/dist/browser/inputs/icon-messages.js +22 -0
- package/dist/browser/inputs/icon-messages.js.map +1 -0
- package/dist/browser/inputs/input-messages.js +38 -0
- package/dist/browser/inputs/input-messages.js.map +1 -0
- package/dist/browser/inputs/markdown/MarkdownEditor.js +10 -6
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/Toolbar.js +13 -13
- package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/browser/inputs/markdown/editor-messages.js +43 -0
- package/dist/browser/inputs/markdown/editor-messages.js.map +1 -0
- package/dist/browser/inputs/markdown/toolbar-messages.js +40 -0
- package/dist/browser/inputs/markdown/toolbar-messages.js.map +1 -0
- package/dist/browser/inputs/qr-messages.js +26 -0
- package/dist/browser/inputs/qr-messages.js.map +1 -0
- package/dist/browser/inputs/select-messages.js +63 -0
- package/dist/browser/inputs/select-messages.js.map +1 -0
- package/dist/browser/inputs/tag-messages.js +44 -0
- package/dist/browser/inputs/tag-messages.js.map +1 -0
- package/dist/browser/inputs/template-messages.js +22 -0
- package/dist/browser/inputs/template-messages.js.map +1 -0
- package/dist/browser/internal/render-error-messages.js +20 -0
- package/dist/browser/internal/render-error-messages.js.map +1 -0
- package/dist/browser/internal/render-error.js +3 -1
- package/dist/browser/internal/render-error.js.map +1 -1
- package/dist/browser/internal/text-selection.js +101 -0
- package/dist/browser/internal/text-selection.js.map +1 -0
- package/dist/browser/intl/messages.js +6 -1155
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +594 -425
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js +6 -1
- package/dist/browser/layout/BottomSheet.js.map +1 -1
- package/dist/browser/layout/Discussion.js +8 -5
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/FloatingWindow.js +8 -5
- package/dist/browser/layout/FloatingWindow.js.map +1 -1
- package/dist/browser/layout/Navigation.js +7 -6
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +373 -0
- package/dist/browser/layout/PageTitle.js.map +1 -0
- package/dist/browser/layout/PanelDialog.js +8 -6
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/Panes.js +23 -15
- package/dist/browser/layout/Panes.js.map +1 -1
- package/dist/browser/layout/PullToRefresh.js +13 -4
- package/dist/browser/layout/PullToRefresh.js.map +1 -1
- package/dist/browser/layout/Settings.js +14 -12
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SettingsCollection.js +6 -5
- package/dist/browser/layout/SettingsCollection.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js +3 -1
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +821 -12
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/app-workspace-state.js +3 -2
- package/dist/browser/layout/app-workspace-state.js.map +1 -1
- package/dist/browser/layout/floating-window-messages.js +28 -0
- package/dist/browser/layout/floating-window-messages.js.map +1 -0
- package/dist/browser/layout/index.js +2 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/layout/page-title-controller.js +169 -0
- package/dist/browser/layout/page-title-controller.js.map +1 -0
- package/dist/browser/layout/panel-dialog-messages.js +20 -0
- package/dist/browser/layout/panel-dialog-messages.js.map +1 -0
- package/dist/browser/layout/panes-messages.js +48 -0
- package/dist/browser/layout/panes-messages.js.map +1 -0
- package/dist/browser/layout/refresh-messages.js +20 -0
- package/dist/browser/layout/refresh-messages.js.map +1 -0
- package/dist/browser/layout/settings-messages.js +54 -0
- package/dist/browser/layout/settings-messages.js.map +1 -0
- package/dist/browser/layout/workspace-messages.js +56 -0
- package/dist/browser/layout/workspace-messages.js.map +1 -0
- package/dist/browser/surfaces/Avatar.js +5 -5
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/ResourceCard.js +4 -2
- package/dist/browser/surfaces/ResourceCard.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js +18 -6
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/Tag.js +3 -3
- package/dist/browser/surfaces/Tag.js.map +1 -1
- package/dist/browser/surfaces/avatar-messages.js +26 -0
- package/dist/browser/surfaces/avatar-messages.js.map +1 -0
- package/dist/browser/surfaces/resource-messages.js +26 -0
- package/dist/browser/surfaces/resource-messages.js.map +1 -0
- package/dist/browser/widgets/Widget.js +6 -0
- package/dist/browser/widgets/Widget.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +3 -1
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js +3 -1
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/filter-messages.js +20 -0
- package/dist/ssr/actions/filter-messages.js.map +1 -0
- package/dist/ssr/actions/spotlight-messages.js +16 -0
- package/dist/ssr/actions/spotlight-messages.js.map +1 -0
- package/dist/ssr/chat/ChatComposer.js +47 -41
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +23 -21
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatRoot.js +3 -3
- package/dist/ssr/chat/ChatRoot.js.map +1 -1
- package/dist/ssr/chat/ChatTimeline.js +11 -11
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +236 -0
- package/dist/ssr/chat/chat-messages.js.map +1 -0
- package/dist/ssr/content/Calendar.js +534 -346
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarDayView.js +800 -0
- package/dist/ssr/content/CalendarDayView.js.map +1 -0
- package/dist/ssr/content/CalendarWeekView.js +1069 -0
- package/dist/ssr/content/CalendarWeekView.js.map +1 -0
- package/dist/ssr/content/Chart.js +12 -5
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +98 -37
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartExplorerControls.js +9 -7
- package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
- package/dist/ssr/content/ChartFilterControls.js +52 -8
- package/dist/ssr/content/ChartFilterControls.js.map +1 -1
- package/dist/ssr/content/ChartSnapshotView.js +3 -3
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/DataTable.js +77 -53
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/Docs.js +3 -1
- package/dist/ssr/content/Docs.js.map +1 -1
- package/dist/ssr/content/FileBrowser.js +30 -26
- package/dist/ssr/content/FileBrowser.js.map +1 -1
- package/dist/ssr/content/FileTree.js +9 -7
- package/dist/ssr/content/FileTree.js.map +1 -1
- package/dist/ssr/content/FileView.js +37 -28
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +8 -6
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/LogEntriesTable.js +3 -3
- package/dist/ssr/content/LogEntriesTable.js.map +1 -1
- package/dist/ssr/content/MessageRow.js +24 -22
- package/dist/ssr/content/MessageRow.js.map +1 -1
- package/dist/ssr/content/Pagination.js +6 -6
- package/dist/ssr/content/Pagination.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +15 -13
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/RangePicker.js +3 -1
- package/dist/ssr/content/RangePicker.js.map +1 -1
- package/dist/ssr/content/StructuredDataPreview.js +3 -1
- package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
- package/dist/ssr/content/Timeline.js +13 -11
- package/dist/ssr/content/Timeline.js.map +1 -1
- package/dist/ssr/content/VideoPlayer.js +5 -5
- package/dist/ssr/content/VideoPlayer.js.map +1 -1
- package/dist/ssr/content/VirtualFeed.js +6 -4
- package/dist/ssr/content/VirtualFeed.js.map +1 -1
- package/dist/ssr/content/ZoomPanViewport.js +7 -4
- package/dist/ssr/content/ZoomPanViewport.js.map +1 -1
- package/dist/ssr/content/calendar-day-scroll.js +98 -0
- package/dist/ssr/content/calendar-day-scroll.js.map +1 -0
- package/dist/ssr/content/calendar-days.js +408 -0
- package/dist/ssr/content/calendar-days.js.map +1 -0
- package/dist/ssr/content/calendar-dialogs.js +159 -0
- package/dist/ssr/content/calendar-dialogs.js.map +1 -0
- package/dist/ssr/content/calendar-messages.js +249 -3
- package/dist/ssr/content/calendar-messages.js.map +1 -1
- package/dist/ssr/content/calendar-pointer.js +19 -6
- package/dist/ssr/content/calendar-pointer.js.map +1 -1
- package/dist/ssr/content/calendar-shared.js +261 -0
- package/dist/ssr/content/calendar-shared.js.map +1 -0
- package/dist/ssr/content/calendar-time-view.js +1306 -0
- package/dist/ssr/content/calendar-time-view.js.map +1 -0
- package/dist/ssr/content/chart-messages.js +146 -0
- package/dist/ssr/content/chart-messages.js.map +1 -0
- package/dist/ssr/content/collection-selection.js +2 -0
- package/dist/ssr/content/collection-selection.js.map +1 -1
- package/dist/ssr/content/data-table-messages.js +24 -0
- package/dist/ssr/content/data-table-messages.js.map +1 -0
- package/dist/ssr/content/docs-messages.js +24 -0
- package/dist/ssr/content/docs-messages.js.map +1 -0
- package/dist/ssr/content/feed-messages.js +34 -0
- package/dist/ssr/content/feed-messages.js.map +1 -0
- package/dist/ssr/content/file-browser-messages.js +69 -0
- package/dist/ssr/content/file-browser-messages.js.map +1 -0
- package/dist/ssr/content/file-view-messages.js +64 -0
- package/dist/ssr/content/file-view-messages.js.map +1 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/lightbox-messages.js +36 -0
- package/dist/ssr/content/lightbox-messages.js.map +1 -0
- package/dist/ssr/content/log-entries-messages.js +20 -0
- package/dist/ssr/content/log-entries-messages.js.map +1 -0
- package/dist/ssr/content/markdown-info-block-messages.js +24 -0
- package/dist/ssr/content/markdown-info-block-messages.js.map +1 -0
- package/dist/ssr/content/markdown-info-blocks.js +3 -3
- package/dist/ssr/content/markdown-info-blocks.js.map +1 -1
- package/dist/ssr/content/markdown-links.js +2 -2
- package/dist/ssr/content/markdown-links.js.map +1 -1
- package/dist/ssr/content/markdown-reference-messages.js +30 -0
- package/dist/ssr/content/markdown-reference-messages.js.map +1 -0
- package/dist/ssr/content/pagination-messages.js +38 -0
- package/dist/ssr/content/pagination-messages.js.map +1 -0
- package/dist/ssr/content/pdf-messages.js +43 -0
- package/dist/ssr/content/pdf-messages.js.map +1 -0
- package/dist/ssr/content/range-picker-messages.js +20 -0
- package/dist/ssr/content/range-picker-messages.js.map +1 -0
- package/dist/ssr/content/structured-data-messages.js +22 -0
- package/dist/ssr/content/structured-data-messages.js.map +1 -0
- package/dist/ssr/content/timeline-messages.js +62 -0
- package/dist/ssr/content/timeline-messages.js.map +1 -0
- package/dist/ssr/content/video-messages.js +24 -0
- package/dist/ssr/content/video-messages.js.map +1 -0
- package/dist/ssr/content/viewport-messages.js +28 -0
- package/dist/ssr/content/viewport-messages.js.map +1 -0
- package/dist/ssr/feedback/HoverPreview.js +34 -6
- package/dist/ssr/feedback/HoverPreview.js.map +1 -1
- package/dist/ssr/feedback/InstallGuide.js +18 -18
- package/dist/ssr/feedback/InstallGuide.js.map +1 -1
- package/dist/ssr/feedback/install-messages.js +104 -0
- package/dist/ssr/feedback/install-messages.js.map +1 -0
- package/dist/ssr/feedback/prompt-messages.js +65 -0
- package/dist/ssr/feedback/prompt-messages.js.map +1 -0
- package/dist/ssr/feedback/prompts.js +14 -11
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/feedback/toast-messages.js +18 -0
- package/dist/ssr/feedback/toast-messages.js.map +1 -0
- package/dist/ssr/feedback/toast.js +4 -3
- package/dist/ssr/feedback/toast.js.map +1 -1
- package/dist/ssr/index.js +1 -1
- package/dist/ssr/index.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteEditor.js +5 -3
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteSelect.js +10 -8
- package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/ssr/inputs/ChoiceGroups.js +4 -0
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
- package/dist/ssr/inputs/ChoiceInputs.js +5 -5
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/inputs/Combobox.js +3 -1
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/inputs/FileDropTarget.js +6 -6
- package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
- package/dist/ssr/inputs/FileInputs.js +29 -20
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/MultiSelectInput.js +7 -5
- package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
- package/dist/ssr/inputs/NumberInput.js +4 -2
- package/dist/ssr/inputs/NumberInput.js.map +1 -1
- package/dist/ssr/inputs/QrScanner.js +4 -4
- package/dist/ssr/inputs/QrScanner.js.map +1 -1
- package/dist/ssr/inputs/Select.js +7 -5
- package/dist/ssr/inputs/Select.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +3 -3
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/SignatureInput.js +9 -3
- package/dist/ssr/inputs/SignatureInput.js.map +1 -1
- package/dist/ssr/inputs/SpecialInputs.js +4 -2
- package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
- package/dist/ssr/inputs/TagEditor.js +8 -6
- package/dist/ssr/inputs/TagEditor.js.map +1 -1
- package/dist/ssr/inputs/TagsInput.js +5 -5
- package/dist/ssr/inputs/TagsInput.js.map +1 -1
- package/dist/ssr/inputs/TemplateEditor.js +5 -5
- package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +3 -1
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/completion-messages.js +24 -0
- package/dist/ssr/inputs/completion-messages.js.map +1 -0
- package/dist/ssr/inputs/file-drop-messages.js +63 -0
- package/dist/ssr/inputs/file-drop-messages.js.map +1 -0
- package/dist/ssr/inputs/file-drop.js.map +1 -1
- package/dist/ssr/inputs/file-input-messages.js +60 -0
- package/dist/ssr/inputs/file-input-messages.js.map +1 -0
- package/dist/ssr/inputs/icon-messages.js +22 -0
- package/dist/ssr/inputs/icon-messages.js.map +1 -0
- package/dist/ssr/inputs/input-messages.js +38 -0
- package/dist/ssr/inputs/input-messages.js.map +1 -0
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +9 -5
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/Toolbar.js +13 -13
- package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/ssr/inputs/markdown/editor-messages.js +43 -0
- package/dist/ssr/inputs/markdown/editor-messages.js.map +1 -0
- package/dist/ssr/inputs/markdown/toolbar-messages.js +40 -0
- package/dist/ssr/inputs/markdown/toolbar-messages.js.map +1 -0
- package/dist/ssr/inputs/qr-messages.js +26 -0
- package/dist/ssr/inputs/qr-messages.js.map +1 -0
- package/dist/ssr/inputs/select-messages.js +63 -0
- package/dist/ssr/inputs/select-messages.js.map +1 -0
- package/dist/ssr/inputs/tag-messages.js +44 -0
- package/dist/ssr/inputs/tag-messages.js.map +1 -0
- package/dist/ssr/inputs/template-messages.js +22 -0
- package/dist/ssr/inputs/template-messages.js.map +1 -0
- package/dist/ssr/internal/render-error-messages.js +20 -0
- package/dist/ssr/internal/render-error-messages.js.map +1 -0
- package/dist/ssr/internal/render-error.js +3 -1
- package/dist/ssr/internal/render-error.js.map +1 -1
- package/dist/ssr/internal/text-selection.js +101 -0
- package/dist/ssr/internal/text-selection.js.map +1 -0
- package/dist/ssr/intl/messages.js +6 -1155
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +219 -103
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js +1 -0
- package/dist/ssr/layout/BottomSheet.js.map +1 -1
- package/dist/ssr/layout/Discussion.js +8 -5
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/FloatingWindow.js +8 -5
- package/dist/ssr/layout/FloatingWindow.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +6 -5
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +256 -0
- package/dist/ssr/layout/PageTitle.js.map +1 -0
- package/dist/ssr/layout/PanelDialog.js +8 -6
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/Panes.js +22 -14
- package/dist/ssr/layout/Panes.js.map +1 -1
- package/dist/ssr/layout/PullToRefresh.js +13 -4
- package/dist/ssr/layout/PullToRefresh.js.map +1 -1
- package/dist/ssr/layout/Settings.js +14 -12
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SettingsCollection.js +6 -5
- package/dist/ssr/layout/SettingsCollection.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js +3 -1
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +821 -12
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/app-workspace-state.js +3 -2
- package/dist/ssr/layout/app-workspace-state.js.map +1 -1
- package/dist/ssr/layout/floating-window-messages.js +28 -0
- package/dist/ssr/layout/floating-window-messages.js.map +1 -0
- package/dist/ssr/layout/index.js +2 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/layout/page-title-controller.js +169 -0
- package/dist/ssr/layout/page-title-controller.js.map +1 -0
- package/dist/ssr/layout/panel-dialog-messages.js +20 -0
- package/dist/ssr/layout/panel-dialog-messages.js.map +1 -0
- package/dist/ssr/layout/panes-messages.js +48 -0
- package/dist/ssr/layout/panes-messages.js.map +1 -0
- package/dist/ssr/layout/refresh-messages.js +20 -0
- package/dist/ssr/layout/refresh-messages.js.map +1 -0
- package/dist/ssr/layout/settings-messages.js +54 -0
- package/dist/ssr/layout/settings-messages.js.map +1 -0
- package/dist/ssr/layout/workspace-messages.js +56 -0
- package/dist/ssr/layout/workspace-messages.js.map +1 -0
- package/dist/ssr/surfaces/Avatar.js +5 -5
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/ResourceCard.js +4 -2
- package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +2 -2
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/Tag.js +3 -3
- package/dist/ssr/surfaces/Tag.js.map +1 -1
- package/dist/ssr/surfaces/avatar-messages.js +26 -0
- package/dist/ssr/surfaces/avatar-messages.js.map +1 -0
- package/dist/ssr/surfaces/resource-messages.js +26 -0
- package/dist/ssr/surfaces/resource-messages.js.map +1 -0
- package/dist/ssr/widgets/Widget.js +6 -0
- package/dist/ssr/widgets/Widget.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/filter-messages.d.ts +8 -0
- package/dist/types/actions/spotlight-messages.d.ts +8 -0
- package/dist/types/chat/chat-messages.d.ts +116 -0
- package/dist/types/content/Calendar.d.ts +91 -0
- package/dist/types/content/CalendarDayView.d.ts +7 -0
- package/dist/types/content/CalendarWeekView.d.ts +7 -0
- package/dist/types/content/ChartExplorer.d.ts +36 -1
- package/dist/types/content/ChartFilterControls.d.ts +6 -1
- package/dist/types/content/DataTable.d.ts +7 -0
- package/dist/types/content/FileView.d.ts +0 -10
- package/dist/types/content/calendar-day-scroll.d.ts +42 -0
- package/dist/types/content/calendar-days.d.ts +192 -0
- package/dist/types/content/calendar-dialogs.d.ts +22 -0
- package/dist/types/content/calendar-messages.d.ts +119 -1
- package/dist/types/content/calendar-pointer.d.ts +9 -0
- package/dist/types/content/calendar-shared.d.ts +69 -0
- package/dist/types/content/calendar-time-view.d.ts +252 -0
- package/dist/types/content/chart-messages.d.ts +37 -0
- package/dist/types/content/data-table-messages.d.ts +10 -0
- package/dist/types/content/docs-messages.d.ts +10 -0
- package/dist/types/content/feed-messages.d.ts +15 -0
- package/dist/types/content/file-browser-messages.d.ts +33 -0
- package/dist/types/content/file-view-messages.d.ts +30 -0
- package/dist/types/content/index.d.ts +2 -2
- package/dist/types/content/lightbox-messages.d.ts +16 -0
- package/dist/types/content/log-entries-messages.d.ts +8 -0
- package/dist/types/content/markdown-info-block-messages.d.ts +12 -0
- package/dist/types/content/markdown-reference-messages.d.ts +15 -0
- package/dist/types/content/pagination-messages.d.ts +17 -0
- package/dist/types/content/pdf-messages.d.ts +20 -0
- package/dist/types/content/range-picker-messages.d.ts +8 -0
- package/dist/types/content/structured-data-messages.d.ts +9 -0
- package/dist/types/content/timeline-messages.d.ts +29 -0
- package/dist/types/content/video-messages.d.ts +10 -0
- package/dist/types/content/viewport-messages.d.ts +12 -0
- package/dist/types/feedback/install-messages.d.ts +50 -0
- package/dist/types/feedback/prompt-messages.d.ts +31 -0
- package/dist/types/feedback/toast-messages.d.ts +9 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/inputs/completion-messages.d.ts +10 -0
- package/dist/types/inputs/file-drop-messages.d.ts +30 -0
- package/dist/types/inputs/file-drop.d.ts +3 -3
- package/dist/types/inputs/file-input-messages.d.ts +28 -0
- package/dist/types/inputs/icon-messages.d.ts +9 -0
- package/dist/types/inputs/input-messages.d.ts +17 -0
- package/dist/types/inputs/markdown/editor-messages.d.ts +20 -0
- package/dist/types/inputs/markdown/toolbar-messages.d.ts +18 -0
- package/dist/types/inputs/qr-messages.d.ts +11 -0
- package/dist/types/inputs/select-messages.d.ts +30 -0
- package/dist/types/inputs/tag-messages.d.ts +20 -0
- package/dist/types/inputs/template-messages.d.ts +9 -0
- package/dist/types/internal/render-error-messages.d.ts +8 -0
- package/dist/types/internal/text-selection.d.ts +18 -0
- package/dist/types/intl/messages.d.ts +3 -544
- package/dist/types/layout/AppWorkspace.d.ts +42 -5
- package/dist/types/layout/PageTitle.d.ts +65 -0
- package/dist/types/layout/app-workspace-controller.d.ts +12 -0
- package/dist/types/layout/app-workspace-state.d.ts +3 -2
- package/dist/types/layout/floating-window-messages.d.ts +12 -0
- package/dist/types/layout/index.d.ts +3 -0
- package/dist/types/layout/navigation-model.d.ts +7 -0
- package/dist/types/layout/page-title-controller.d.ts +13 -0
- package/dist/types/layout/panel-dialog-messages.d.ts +8 -0
- package/dist/types/layout/panes-messages.d.ts +22 -0
- package/dist/types/layout/refresh-messages.d.ts +8 -0
- package/dist/types/layout/settings-messages.d.ts +25 -0
- package/dist/types/layout/workspace-messages.d.ts +26 -0
- package/dist/types/surfaces/StatCell.d.ts +5 -0
- package/dist/types/surfaces/avatar-messages.d.ts +11 -0
- package/dist/types/surfaces/resource-messages.d.ts +11 -0
- package/dist/types/widgets/Widget.d.ts +5 -1
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
|
9
9
|
import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
|
|
10
10
|
var _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=k2b-bottom-sheet__handle><span aria-hidden=true>`);
|
|
11
11
|
import { Show } from "solid-js";
|
|
12
|
+
import { suppressTextSelection } from "../internal/text-selection";
|
|
12
13
|
import { useUiMessages } from "../intl/messages";
|
|
13
14
|
import PanelDialog from "./PanelDialog";
|
|
14
15
|
|
|
@@ -51,17 +52,20 @@ function BottomSheetRoot(props) {
|
|
|
51
52
|
};
|
|
52
53
|
_el$.addEventListener("lostpointercapture", () => {
|
|
53
54
|
if (pointer) {
|
|
55
|
+
pointer.releaseTextSelection();
|
|
54
56
|
pointer = undefined;
|
|
55
57
|
suppressClick = true;
|
|
56
58
|
}
|
|
57
59
|
});
|
|
58
60
|
_el$.addEventListener("pointercancel", () => {
|
|
61
|
+
pointer?.releaseTextSelection();
|
|
59
62
|
pointer = undefined;
|
|
60
63
|
suppressClick = true;
|
|
61
64
|
});
|
|
62
65
|
_el$.$$pointerup = event => {
|
|
63
66
|
if (pointer?.id !== event.pointerId) return;
|
|
64
67
|
const distance = event.clientY - pointer.y;
|
|
68
|
+
pointer.releaseTextSelection();
|
|
65
69
|
pointer = undefined;
|
|
66
70
|
// A drag must not turn into a second dismiss request through click.
|
|
67
71
|
suppressClick = Math.abs(distance) > 8;
|
|
@@ -72,7 +76,8 @@ function BottomSheetRoot(props) {
|
|
|
72
76
|
suppressClick = false;
|
|
73
77
|
pointer = {
|
|
74
78
|
id: event.pointerId,
|
|
75
|
-
y: event.clientY
|
|
79
|
+
y: event.clientY,
|
|
80
|
+
releaseTextSelection: suppressTextSelection(event.pointerId)
|
|
76
81
|
};
|
|
77
82
|
event.currentTarget.setPointerCapture(event.pointerId);
|
|
78
83
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/BottomSheet.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { OpenDialogOptions } from \"../feedback/dialog-core\";\nimport { useUiMessages } from \"../intl/messages\";\nimport PanelDialog from \"./PanelDialog\";\n\n/** Initial focus goes to the first input of the top sheet, otherwise to the\n * dialog element itself. Native `showModal()` focuses the first focusable\n * descendant, which is the drag handle; iOS shows a ring for that programmatic\n * focus, so the sheet moves it to the ring-less dialog before the next paint. */\nconst sheetInitialFocus = (dialog: HTMLDialogElement): HTMLElement => {\n const input = dialog.lastElementChild?.querySelector<HTMLElement>(\n \"input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), [role='combobox']:not([disabled]):not([aria-disabled='true'])\",\n );\n if (input) return input;\n dialog.tabIndex = -1;\n return dialog;\n};\n\nexport const bottomSheetOptions = {\n panelClassName: \"k2b-dialog k2b-bottom-sheet-frame\",\n contentClassName: \"k2b-panel-dialog-viewport k2b-bottom-sheet-viewport\",\n initialFocus: sheetInitialFocus,\n} satisfies OpenDialogOptions;\n\nexport type BottomSheetProps = {\n children: JSX.Element;\n /** Pass dialogCore's render context requestDismiss, never the completion callback. */\n onDismiss: () => void | Promise<void>;\n dismissDisabled?: boolean;\n dismissLabel?: string;\n handle?: boolean;\n};\n\nfunction BottomSheetRoot(props: BottomSheetProps) {\n const messages = useUiMessages();\n let pointer: { id: number; y: number } | undefined;\n let suppressClick = false;\n const dismiss = () => {\n if (!props.dismissDisabled) void props.onDismiss();\n };\n return (\n <PanelDialog>\n <Show when={props.handle !== false}>\n <button\n type=\"button\"\n class=\"k2b-bottom-sheet__handle\"\n aria-label={props.dismissLabel ?? messages().close}\n disabled={props.dismissDisabled}\n onPointerDown={(event) => {\n if (!event.isPrimary || event.button !== 0 || props.dismissDisabled) return;\n suppressClick = false;\n pointer = { id: event.pointerId, y: event.clientY };\n event.currentTarget.setPointerCapture(event.pointerId);\n }}\n onPointerUp={(event) => {\n if (pointer?.id !== event.pointerId) return;\n const distance = event.clientY - pointer.y;\n pointer = undefined;\n // A drag must not turn into a second dismiss request through click.\n suppressClick = Math.abs(distance) > 8;\n if (distance > 60) dismiss();\n }}\n onPointerCancel={() => {\n pointer = undefined;\n suppressClick = true;\n }}\n onLostPointerCapture={() => {\n if (pointer) {\n pointer = undefined;\n suppressClick = true;\n }\n }}\n onClick={(event) => {\n if (event.detail !== 0 && suppressClick) {\n suppressClick = false;\n return;\n }\n dismiss();\n }}\n >\n <span aria-hidden=\"true\" />\n </button>\n </Show>\n {props.children}\n </PanelDialog>\n );\n}\n\n/** Bottom-edge presentation; dialogCore continues to own all modal state. */\nconst BottomSheet = Object.assign(BottomSheetRoot, {\n Header: PanelDialog.Header,\n Body: PanelDialog.Body,\n Footer: PanelDialog.Footer,\n Section: PanelDialog.Section,\n Tabs: PanelDialog.Tabs,\n});\nexport default BottomSheet;\n"],"mappings":";;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAEzC,SAAS,aAAa,QAAQ,kBAAkB;AAChD,OAAO,WAAW,MAAM,eAAe;;AAEvC;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAI,MAAyB,IAAkB;EACpE,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAClD,6JACF,CAAC;EACD,IAAI,KAAK,EAAE,OAAO,KAAK;EACvB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;EACpB,OAAO,MAAM;AACf,CAAC;AAED,OAAO,MAAM,kBAAkB,GAAG;EAChC,cAAc,EAAE,mCAAmC;EACnD,gBAAgB,EAAE,qDAAqD;EACvE,YAAY,EAAE;AAChB,CAA6B;AAW7B,SAAS,eAAe,CAAC,KAAuB,EAAE;EAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,IAAI,
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/BottomSheet.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { OpenDialogOptions } from \"../feedback/dialog-core\";\nimport { suppressTextSelection } from \"../internal/text-selection\";\nimport { useUiMessages } from \"../intl/messages\";\nimport PanelDialog from \"./PanelDialog\";\n\n/** Initial focus goes to the first input of the top sheet, otherwise to the\n * dialog element itself. Native `showModal()` focuses the first focusable\n * descendant, which is the drag handle; iOS shows a ring for that programmatic\n * focus, so the sheet moves it to the ring-less dialog before the next paint. */\nconst sheetInitialFocus = (dialog: HTMLDialogElement): HTMLElement => {\n const input = dialog.lastElementChild?.querySelector<HTMLElement>(\n \"input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), [role='combobox']:not([disabled]):not([aria-disabled='true'])\",\n );\n if (input) return input;\n dialog.tabIndex = -1;\n return dialog;\n};\n\nexport const bottomSheetOptions = {\n panelClassName: \"k2b-dialog k2b-bottom-sheet-frame\",\n contentClassName: \"k2b-panel-dialog-viewport k2b-bottom-sheet-viewport\",\n initialFocus: sheetInitialFocus,\n} satisfies OpenDialogOptions;\n\nexport type BottomSheetProps = {\n children: JSX.Element;\n /** Pass dialogCore's render context requestDismiss, never the completion callback. */\n onDismiss: () => void | Promise<void>;\n dismissDisabled?: boolean;\n dismissLabel?: string;\n handle?: boolean;\n};\n\nfunction BottomSheetRoot(props: BottomSheetProps) {\n const messages = useUiMessages();\n let pointer: { id: number; y: number; releaseTextSelection: () => void } | undefined;\n let suppressClick = false;\n const dismiss = () => {\n if (!props.dismissDisabled) void props.onDismiss();\n };\n return (\n <PanelDialog>\n <Show when={props.handle !== false}>\n <button\n type=\"button\"\n class=\"k2b-bottom-sheet__handle\"\n aria-label={props.dismissLabel ?? messages().close}\n disabled={props.dismissDisabled}\n onPointerDown={(event) => {\n if (!event.isPrimary || event.button !== 0 || props.dismissDisabled) return;\n suppressClick = false;\n pointer = { id: event.pointerId, y: event.clientY, releaseTextSelection: suppressTextSelection(event.pointerId) };\n event.currentTarget.setPointerCapture(event.pointerId);\n }}\n onPointerUp={(event) => {\n if (pointer?.id !== event.pointerId) return;\n const distance = event.clientY - pointer.y;\n pointer.releaseTextSelection();\n pointer = undefined;\n // A drag must not turn into a second dismiss request through click.\n suppressClick = Math.abs(distance) > 8;\n if (distance > 60) dismiss();\n }}\n onPointerCancel={() => {\n pointer?.releaseTextSelection();\n pointer = undefined;\n suppressClick = true;\n }}\n onLostPointerCapture={() => {\n if (pointer) {\n pointer.releaseTextSelection();\n pointer = undefined;\n suppressClick = true;\n }\n }}\n onClick={(event) => {\n if (event.detail !== 0 && suppressClick) {\n suppressClick = false;\n return;\n }\n dismiss();\n }}\n >\n <span aria-hidden=\"true\" />\n </button>\n </Show>\n {props.children}\n </PanelDialog>\n );\n}\n\n/** Bottom-edge presentation; dialogCore continues to own all modal state. */\nconst BottomSheet = Object.assign(BottomSheetRoot, {\n Header: PanelDialog.Header,\n Body: PanelDialog.Body,\n Footer: PanelDialog.Footer,\n Section: PanelDialog.Section,\n Tabs: PanelDialog.Tabs,\n});\nexport default BottomSheet;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -38,6 +38,7 @@ var _tmpl$ = /*#__PURE__*/_$template(`<h2>`),
|
|
|
38
38
|
_tmpl$20 = /*#__PURE__*/_$template(`<li><!$><!/><div class=k2b-discussion__entry><header><strong></strong><!$><!/><!$><!/><!$><!/></header><!$><!/><div class=k2b-discussion__content>`);
|
|
39
39
|
import { createEffect, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps } from "solid-js";
|
|
40
40
|
import { Button, IconButton } from "../actions/Button";
|
|
41
|
+
import { useChatMessages } from "../chat/chat-messages";
|
|
41
42
|
import { MarkdownEditor } from "../inputs/markdown/MarkdownEditor";
|
|
42
43
|
import { useUiMessages } from "../intl/messages";
|
|
43
44
|
const classNames = (base, extra) => extra ? `${base} ${extra}` : base;
|
|
@@ -122,6 +123,7 @@ const DiscussionRoot = props => {
|
|
|
122
123
|
};
|
|
123
124
|
const DiscussionComposer = props => {
|
|
124
125
|
const messages = useUiMessages();
|
|
126
|
+
const chatMessages = useChatMessages();
|
|
125
127
|
const [local, formProps] = splitProps(props, ["label", "onSubmit", "initialValue", "placeholder", "submitLabel", "cancelLabel", "onCancel", "lines", "class"]);
|
|
126
128
|
const [message, setMessage] = createSignal(local.initialValue ?? "");
|
|
127
129
|
const [submitting, setSubmitting] = createSignal(false);
|
|
@@ -135,7 +137,7 @@ const DiscussionComposer = props => {
|
|
|
135
137
|
const accepted = await local.onSubmit(normalized);
|
|
136
138
|
if (accepted !== false) setMessage("");
|
|
137
139
|
} catch (error) {
|
|
138
|
-
setSubmitError(error instanceof Error ? error.message :
|
|
140
|
+
setSubmitError(error instanceof Error ? error.message : chatMessages().couldNotPostMessage);
|
|
139
141
|
} finally {
|
|
140
142
|
setSubmitting(false);
|
|
141
143
|
}
|
|
@@ -188,7 +190,7 @@ const DiscussionComposer = props => {
|
|
|
188
190
|
_$insert(_el$18, _$createComponent(IconButton, {
|
|
189
191
|
type: "submit",
|
|
190
192
|
get label() {
|
|
191
|
-
return local.submitLabel ??
|
|
193
|
+
return local.submitLabel ?? chatMessages().postMessage;
|
|
192
194
|
},
|
|
193
195
|
size: "sm",
|
|
194
196
|
variant: "primary",
|
|
@@ -250,6 +252,7 @@ const scrollOwner = element => {
|
|
|
250
252
|
};
|
|
251
253
|
const DiscussionList = props => {
|
|
252
254
|
const messages = useUiMessages();
|
|
255
|
+
const chatMessages = useChatMessages();
|
|
253
256
|
const [loadingMoreInternally, setLoadingMoreInternally] = createSignal(false);
|
|
254
257
|
const [loadMoreError, setLoadMoreError] = createSignal(null);
|
|
255
258
|
const [sentinelVisible, setSentinelVisible] = createSignal(false);
|
|
@@ -271,7 +274,7 @@ const DiscussionList = props => {
|
|
|
271
274
|
try {
|
|
272
275
|
loaded = (await props.onLoadMore()) !== false;
|
|
273
276
|
} catch (error) {
|
|
274
|
-
if (active) setLoadMoreError(error instanceof Error ? error.message :
|
|
277
|
+
if (active) setLoadMoreError(error instanceof Error ? error.message : chatMessages().couldNotLoadEarlierMessages);
|
|
275
278
|
} finally {
|
|
276
279
|
if (active) setLoadingMoreInternally(false);
|
|
277
280
|
}
|
|
@@ -332,7 +335,7 @@ const DiscussionList = props => {
|
|
|
332
335
|
_el$32 = _el$31.nextSibling,
|
|
333
336
|
_el$33 = _el$32.nextSibling,
|
|
334
337
|
[_el$34, _co$8] = _$getNextMarker(_el$33.nextSibling);
|
|
335
|
-
_$insert(_el$30, () => props.loadingLabel ??
|
|
338
|
+
_$insert(_el$30, () => props.loadingLabel ?? chatMessages().loadingMessages, _el$34, _co$8);
|
|
336
339
|
return _el$30;
|
|
337
340
|
}
|
|
338
341
|
}), _el$41, _co$0);
|
|
@@ -388,7 +391,7 @@ const DiscussionList = props => {
|
|
|
388
391
|
_el$35.$$click = () => void loadMore();
|
|
389
392
|
_$insert(_el$35, (() => {
|
|
390
393
|
var _c$ = _$memo(() => !!loadingMore());
|
|
391
|
-
return () => _c$() ? props.loadingLabel ??
|
|
394
|
+
return () => _c$() ? props.loadingLabel ?? chatMessages().loadingMessages : props.loadMoreLabel ?? chatMessages().loadEarlier;
|
|
392
395
|
})(), _el$38, _co$9);
|
|
393
396
|
_$effect(_p$ => {
|
|
394
397
|
var _v$ = loadingMore(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/Discussion.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, type JSX, onCleanup, onMount, Show, splitProps } from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport { MarkdownEditor } from \"../inputs/markdown/MarkdownEditor\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type DiscussionProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\"> & {\n label: JSX.Element;\n children: JSX.Element;\n icon?: string | false;\n count?: number;\n actions?: JSX.Element;\n as?: \"h2\" | \"h3\";\n surface?: \"default\" | \"bare\";\n class?: string;\n};\n\nexport type DiscussionComposerProps = Omit<JSX.FormHTMLAttributes<HTMLFormElement>, \"children\" | \"class\" | \"onSubmit\"> & {\n label: string;\n onSubmit: (message: string) => boolean | void | Promise<boolean | void>;\n initialValue?: string;\n placeholder?: string;\n submitLabel?: string;\n cancelLabel?: string;\n onCancel?: () => void;\n lines?: number;\n class?: string;\n};\n\nexport type DiscussionListProps = {\n children?: JSX.Element;\n loading?: boolean;\n loadingLabel?: string;\n error?: string | null;\n onRetry?: () => void | Promise<void>;\n hasMore?: boolean;\n loadingMore?: boolean;\n loadMoreLabel?: string;\n onLoadMore?: () => boolean | void | Promise<boolean | void>;\n class?: string;\n};\n\nexport type DiscussionItemProps = Omit<JSX.LiHTMLAttributes<HTMLLIElement>, \"children\" | \"class\"> & {\n author: JSX.Element;\n children: JSX.Element;\n avatar?: JSX.Element;\n timestamp?: JSX.Element;\n meta?: JSX.Element;\n replyContext?: JSX.Element;\n actions?: JSX.Element;\n actionVisibility?: \"always\" | \"progressive\";\n class?: string;\n};\n\ntype DiscussionComponent = ((props: DiscussionProps) => JSX.Element) & {\n Composer: (props: DiscussionComposerProps) => JSX.Element;\n List: (props: DiscussionListProps) => JSX.Element;\n Item: (props: DiscussionItemProps) => JSX.Element;\n};\n\nconst classNames = (base: string, extra?: string): string => (extra ? `${base} ${extra}` : base);\n\nconst DiscussionRoot = (props: DiscussionProps): JSX.Element => {\n const headingId = `k2b-discussion-${createUniqueId()}`;\n const [local, sectionProps] = splitProps(props, [\"label\", \"children\", \"icon\", \"count\", \"actions\", \"as\", \"surface\", \"class\"]);\n\n return (\n <section\n {...sectionProps}\n class={classNames(\"k2b-discussion\", local.class)}\n data-surface={local.surface ?? \"default\"}\n aria-labelledby={headingId}\n >\n <header class=\"k2b-discussion__header\">\n <Show when={local.icon !== false && local.icon}>\n {(icon) => (\n <span class=\"k2b-discussion__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n </span>\n )}\n </Show>\n <Show when={local.as === \"h2\"} fallback={<h3 id={headingId}>{local.label}</h3>}>\n <h2 id={headingId}>{local.label}</h2>\n </Show>\n <Show when={local.count !== undefined}>\n <span class=\"k2b-discussion__count\">{local.count}</span>\n </Show>\n <Show when={local.actions !== undefined}>\n <div class=\"k2b-discussion__actions\">{local.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-discussion__body\">{local.children}</div>\n </section>\n );\n};\n\nconst DiscussionComposer = (props: DiscussionComposerProps): JSX.Element => {\n const messages = useUiMessages();\n const [local, formProps] = splitProps(props, [\n \"label\",\n \"onSubmit\",\n \"initialValue\",\n \"placeholder\",\n \"submitLabel\",\n \"cancelLabel\",\n \"onCancel\",\n \"lines\",\n \"class\",\n ]);\n const [message, setMessage] = createSignal(local.initialValue ?? \"\");\n const [submitting, setSubmitting] = createSignal(false);\n const [submitError, setSubmitError] = createSignal<string | null>(null);\n\n const submit = async () => {\n const normalized = message().trim();\n if (!normalized || submitting()) return;\n setSubmitting(true);\n setSubmitError(null);\n try {\n const accepted = await local.onSubmit(normalized);\n if (accepted !== false) setMessage(\"\");\n } catch (error) {\n setSubmitError(error instanceof Error ? error.message : messages().couldNotPostMessage);\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <form\n {...formProps}\n class={classNames(\"k2b-discussion__composer\", local.class)}\n onSubmit={(event) => {\n event.preventDefault();\n void submit();\n }}\n >\n <div class=\"k2b-discussion__composer-field\" data-has-inset-action=\"true\">\n <MarkdownEditor\n aria-label={local.label}\n value={message}\n onValueChange={(value) => {\n // The error belongs to the submitted text; any edit, including clearing it, makes it stale.\n if (value !== message()) setSubmitError(null);\n setMessage(value);\n }}\n placeholder={local.placeholder}\n lines={local.lines ?? 4}\n noToolbar\n showStats={false}\n disabled={submitting()}\n error={submitError() !== null}\n onSubmit={() => void submit()}\n />\n <div class=\"k2b-discussion__composer-inset-action\">\n <IconButton\n type=\"submit\"\n label={local.submitLabel ?? messages().postMessage}\n size=\"sm\"\n variant=\"primary\"\n loading={submitting()}\n disabled={submitting() || !message().trim()}\n >\n <i class=\"ti ti-send\" aria-hidden=\"true\" />\n </IconButton>\n </div>\n </div>\n <Show when={submitError()}>\n {(error) => (\n <p class=\"k2b-discussion__status\" role=\"alert\">\n {error()}\n </p>\n )}\n </Show>\n <Show when={local.onCancel}>\n {(onCancel) => (\n <footer>\n <Button type=\"button\" variant=\"ghost\" size=\"xs\" disabled={submitting()} onClick={onCancel()}>\n {local.cancelLabel ?? messages().cancel}\n </Button>\n </footer>\n )}\n </Show>\n </form>\n );\n};\n\nconst scrollOwner = (element: HTMLElement): HTMLElement | null => {\n let parent = element.parentElement;\n while (parent) {\n const style = getComputedStyle(parent);\n if (style.overflowY === \"auto\" || style.overflowY === \"scroll\" || style.overflow === \"auto\" || style.overflow === \"scroll\")\n return parent;\n parent = parent.parentElement;\n }\n return document.scrollingElement instanceof HTMLElement ? document.scrollingElement : null;\n};\n\nconst DiscussionList = (props: DiscussionListProps): JSX.Element => {\n const messages = useUiMessages();\n const [loadingMoreInternally, setLoadingMoreInternally] = createSignal(false);\n const [loadMoreError, setLoadMoreError] = createSignal<string | null>(null);\n const [sentinelVisible, setSentinelVisible] = createSignal(false);\n const [automaticLoadAttempted, setAutomaticLoadAttempted] = createSignal(false);\n let listRef: HTMLOListElement | undefined;\n let sentinelRef: HTMLDivElement | undefined;\n let observer: IntersectionObserver | undefined;\n let adjustmentFrame: number | undefined;\n let active = true;\n\n const loadingMore = () => Boolean(props.loadingMore || loadingMoreInternally());\n const canLoadMore = () =>\n Boolean(!props.loading && !props.error && !loadMoreError() && props.hasMore && props.onLoadMore && !loadingMore());\n\n const loadMore = async (retry = false): Promise<boolean> => {\n if (props.loading || props.error || (!retry && loadMoreError()) || !props.onLoadMore || !props.hasMore || loadingMore()) return false;\n const owner = listRef ? scrollOwner(listRef) : null;\n const previousScrollHeight = owner?.scrollHeight ?? 0;\n setLoadMoreError(null);\n setLoadingMoreInternally(true);\n let loaded = false;\n try {\n loaded = (await props.onLoadMore()) !== false;\n } catch (error) {\n if (active) setLoadMoreError(error instanceof Error ? error.message : messages().couldNotLoadEarlierMessages);\n } finally {\n if (active) setLoadingMoreInternally(false);\n }\n if (!active || !loaded || !owner) return false;\n queueMicrotask(() => {\n if (!active) return;\n adjustmentFrame = requestAnimationFrame(() => {\n if (!active) return;\n owner.scrollTop += owner.scrollHeight - previousScrollHeight;\n });\n });\n return true;\n };\n\n createEffect(() => {\n if (!sentinelVisible()) {\n setAutomaticLoadAttempted(false);\n return;\n }\n if (automaticLoadAttempted() || !canLoadMore()) return;\n setAutomaticLoadAttempted(true);\n void loadMore();\n });\n\n onMount(() => {\n if (typeof IntersectionObserver === \"undefined\" || !sentinelRef) return;\n observer = new IntersectionObserver(\n (entries) => {\n setSentinelVisible(entries.some((entry) => entry.isIntersecting));\n },\n { rootMargin: \"160px 0px 0px\" },\n );\n observer.observe(sentinelRef);\n });\n\n onCleanup(() => {\n active = false;\n observer?.disconnect();\n if (adjustmentFrame !== undefined) cancelAnimationFrame(adjustmentFrame);\n });\n\n return (\n <div class={classNames(\"k2b-discussion__list-region\", props.class)} aria-busy={props.loading || loadingMore() ? \"true\" : undefined}>\n <div ref={sentinelRef} class=\"k2b-discussion__sentinel\" aria-hidden=\"true\" />\n <Show when={props.loading}>\n <p class=\"k2b-discussion__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" /> {props.loadingLabel ?? messages().loadingMessages}\n </p>\n </Show>\n <Show when={props.error}>\n {(error) => (\n <div class=\"k2b-discussion__status\" role=\"alert\">\n <span>{error()}</span>\n <Show when={props.onRetry}>\n <button type=\"button\" onClick={props.onRetry}>\n {messages().retry}\n </button>\n </Show>\n </div>\n )}\n </Show>\n <Show when={loadMoreError()}>\n {(error) => (\n <div class=\"k2b-discussion__status\" role=\"alert\">\n <span>{error()}</span>\n <button type=\"button\" onClick={() => void loadMore(true)}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <Show when={!props.loading && !props.error && !loadMoreError() && (canLoadMore() || loadingMore())}>\n <button type=\"button\" class=\"k2b-discussion__load-more\" disabled={loadingMore()} onClick={() => void loadMore()}>\n <i class={`ti ${loadingMore() ? \"ti-loader-2 k2b-spin\" : \"ti-history\"}`} aria-hidden=\"true\" />\n {loadingMore() ? (props.loadingLabel ?? messages().loadingMessages) : (props.loadMoreLabel ?? messages().loadEarlier)}\n </button>\n </Show>\n <ol ref={listRef} class=\"k2b-discussion__list\">\n {props.children}\n </ol>\n </div>\n );\n};\n\nconst DiscussionItem = (props: DiscussionItemProps): JSX.Element => {\n const [local, itemProps] = splitProps(props, [\n \"author\",\n \"children\",\n \"avatar\",\n \"timestamp\",\n \"meta\",\n \"replyContext\",\n \"actions\",\n \"actionVisibility\",\n \"class\",\n ]);\n return (\n <li\n {...itemProps}\n class={classNames(\"k2b-discussion__item\", local.class)}\n data-has-avatar={local.avatar !== undefined ? \"true\" : undefined}\n >\n <Show when={local.avatar !== undefined}>\n <div class=\"k2b-discussion__avatar\">{local.avatar}</div>\n </Show>\n <div class=\"k2b-discussion__entry\">\n <header>\n <strong>{local.author}</strong>\n <Show when={local.timestamp !== undefined}>\n <span class=\"k2b-discussion__timestamp\">{local.timestamp}</span>\n </Show>\n <Show when={local.meta !== undefined}>\n <span class=\"k2b-discussion__meta\">{local.meta}</span>\n </Show>\n <Show when={local.actions !== undefined}>\n <div class=\"k2b-discussion__item-actions\" data-visibility={local.actionVisibility ?? \"progressive\"}>\n {local.actions}\n </div>\n </Show>\n </header>\n <Show when={local.replyContext !== undefined}>\n <div class=\"k2b-discussion__reply-context\">{local.replyContext}</div>\n </Show>\n <div class=\"k2b-discussion__content\">{local.children}</div>\n </div>\n </li>\n );\n};\n\nconst Discussion = DiscussionRoot as DiscussionComponent;\nDiscussion.Composer = DiscussionComposer;\nDiscussion.List = DiscussionList;\nDiscussion.Item = DiscussionItem;\n\nexport default Discussion;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/Discussion.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, type JSX, onCleanup, onMount, Show, splitProps } from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport { useChatMessages } from \"../chat/chat-messages\";\nimport { MarkdownEditor } from \"../inputs/markdown/MarkdownEditor\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type DiscussionProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\"> & {\n label: JSX.Element;\n children: JSX.Element;\n icon?: string | false;\n count?: number;\n actions?: JSX.Element;\n as?: \"h2\" | \"h3\";\n surface?: \"default\" | \"bare\";\n class?: string;\n};\n\nexport type DiscussionComposerProps = Omit<JSX.FormHTMLAttributes<HTMLFormElement>, \"children\" | \"class\" | \"onSubmit\"> & {\n label: string;\n onSubmit: (message: string) => boolean | void | Promise<boolean | void>;\n initialValue?: string;\n placeholder?: string;\n submitLabel?: string;\n cancelLabel?: string;\n onCancel?: () => void;\n lines?: number;\n class?: string;\n};\n\nexport type DiscussionListProps = {\n children?: JSX.Element;\n loading?: boolean;\n loadingLabel?: string;\n error?: string | null;\n onRetry?: () => void | Promise<void>;\n hasMore?: boolean;\n loadingMore?: boolean;\n loadMoreLabel?: string;\n onLoadMore?: () => boolean | void | Promise<boolean | void>;\n class?: string;\n};\n\nexport type DiscussionItemProps = Omit<JSX.LiHTMLAttributes<HTMLLIElement>, \"children\" | \"class\"> & {\n author: JSX.Element;\n children: JSX.Element;\n avatar?: JSX.Element;\n timestamp?: JSX.Element;\n meta?: JSX.Element;\n replyContext?: JSX.Element;\n actions?: JSX.Element;\n actionVisibility?: \"always\" | \"progressive\";\n class?: string;\n};\n\ntype DiscussionComponent = ((props: DiscussionProps) => JSX.Element) & {\n Composer: (props: DiscussionComposerProps) => JSX.Element;\n List: (props: DiscussionListProps) => JSX.Element;\n Item: (props: DiscussionItemProps) => JSX.Element;\n};\n\nconst classNames = (base: string, extra?: string): string => (extra ? `${base} ${extra}` : base);\n\nconst DiscussionRoot = (props: DiscussionProps): JSX.Element => {\n const headingId = `k2b-discussion-${createUniqueId()}`;\n const [local, sectionProps] = splitProps(props, [\"label\", \"children\", \"icon\", \"count\", \"actions\", \"as\", \"surface\", \"class\"]);\n\n return (\n <section\n {...sectionProps}\n class={classNames(\"k2b-discussion\", local.class)}\n data-surface={local.surface ?? \"default\"}\n aria-labelledby={headingId}\n >\n <header class=\"k2b-discussion__header\">\n <Show when={local.icon !== false && local.icon}>\n {(icon) => (\n <span class=\"k2b-discussion__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n </span>\n )}\n </Show>\n <Show when={local.as === \"h2\"} fallback={<h3 id={headingId}>{local.label}</h3>}>\n <h2 id={headingId}>{local.label}</h2>\n </Show>\n <Show when={local.count !== undefined}>\n <span class=\"k2b-discussion__count\">{local.count}</span>\n </Show>\n <Show when={local.actions !== undefined}>\n <div class=\"k2b-discussion__actions\">{local.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-discussion__body\">{local.children}</div>\n </section>\n );\n};\n\nconst DiscussionComposer = (props: DiscussionComposerProps): JSX.Element => {\n const messages = useUiMessages();\n const chatMessages = useChatMessages();\n const [local, formProps] = splitProps(props, [\n \"label\",\n \"onSubmit\",\n \"initialValue\",\n \"placeholder\",\n \"submitLabel\",\n \"cancelLabel\",\n \"onCancel\",\n \"lines\",\n \"class\",\n ]);\n const [message, setMessage] = createSignal(local.initialValue ?? \"\");\n const [submitting, setSubmitting] = createSignal(false);\n const [submitError, setSubmitError] = createSignal<string | null>(null);\n\n const submit = async () => {\n const normalized = message().trim();\n if (!normalized || submitting()) return;\n setSubmitting(true);\n setSubmitError(null);\n try {\n const accepted = await local.onSubmit(normalized);\n if (accepted !== false) setMessage(\"\");\n } catch (error) {\n setSubmitError(error instanceof Error ? error.message : chatMessages().couldNotPostMessage);\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <form\n {...formProps}\n class={classNames(\"k2b-discussion__composer\", local.class)}\n onSubmit={(event) => {\n event.preventDefault();\n void submit();\n }}\n >\n <div class=\"k2b-discussion__composer-field\" data-has-inset-action=\"true\">\n <MarkdownEditor\n aria-label={local.label}\n value={message}\n onValueChange={(value) => {\n // The error belongs to the submitted text; any edit, including clearing it, makes it stale.\n if (value !== message()) setSubmitError(null);\n setMessage(value);\n }}\n placeholder={local.placeholder}\n lines={local.lines ?? 4}\n noToolbar\n showStats={false}\n disabled={submitting()}\n error={submitError() !== null}\n onSubmit={() => void submit()}\n />\n <div class=\"k2b-discussion__composer-inset-action\">\n <IconButton\n type=\"submit\"\n label={local.submitLabel ?? chatMessages().postMessage}\n size=\"sm\"\n variant=\"primary\"\n loading={submitting()}\n disabled={submitting() || !message().trim()}\n >\n <i class=\"ti ti-send\" aria-hidden=\"true\" />\n </IconButton>\n </div>\n </div>\n <Show when={submitError()}>\n {(error) => (\n <p class=\"k2b-discussion__status\" role=\"alert\">\n {error()}\n </p>\n )}\n </Show>\n <Show when={local.onCancel}>\n {(onCancel) => (\n <footer>\n <Button type=\"button\" variant=\"ghost\" size=\"xs\" disabled={submitting()} onClick={onCancel()}>\n {local.cancelLabel ?? messages().cancel}\n </Button>\n </footer>\n )}\n </Show>\n </form>\n );\n};\n\nconst scrollOwner = (element: HTMLElement): HTMLElement | null => {\n let parent = element.parentElement;\n while (parent) {\n const style = getComputedStyle(parent);\n if (style.overflowY === \"auto\" || style.overflowY === \"scroll\" || style.overflow === \"auto\" || style.overflow === \"scroll\")\n return parent;\n parent = parent.parentElement;\n }\n return document.scrollingElement instanceof HTMLElement ? document.scrollingElement : null;\n};\n\nconst DiscussionList = (props: DiscussionListProps): JSX.Element => {\n const messages = useUiMessages();\n const chatMessages = useChatMessages();\n const [loadingMoreInternally, setLoadingMoreInternally] = createSignal(false);\n const [loadMoreError, setLoadMoreError] = createSignal<string | null>(null);\n const [sentinelVisible, setSentinelVisible] = createSignal(false);\n const [automaticLoadAttempted, setAutomaticLoadAttempted] = createSignal(false);\n let listRef: HTMLOListElement | undefined;\n let sentinelRef: HTMLDivElement | undefined;\n let observer: IntersectionObserver | undefined;\n let adjustmentFrame: number | undefined;\n let active = true;\n\n const loadingMore = () => Boolean(props.loadingMore || loadingMoreInternally());\n const canLoadMore = () =>\n Boolean(!props.loading && !props.error && !loadMoreError() && props.hasMore && props.onLoadMore && !loadingMore());\n\n const loadMore = async (retry = false): Promise<boolean> => {\n if (props.loading || props.error || (!retry && loadMoreError()) || !props.onLoadMore || !props.hasMore || loadingMore()) return false;\n const owner = listRef ? scrollOwner(listRef) : null;\n const previousScrollHeight = owner?.scrollHeight ?? 0;\n setLoadMoreError(null);\n setLoadingMoreInternally(true);\n let loaded = false;\n try {\n loaded = (await props.onLoadMore()) !== false;\n } catch (error) {\n if (active) setLoadMoreError(error instanceof Error ? error.message : chatMessages().couldNotLoadEarlierMessages);\n } finally {\n if (active) setLoadingMoreInternally(false);\n }\n if (!active || !loaded || !owner) return false;\n queueMicrotask(() => {\n if (!active) return;\n adjustmentFrame = requestAnimationFrame(() => {\n if (!active) return;\n owner.scrollTop += owner.scrollHeight - previousScrollHeight;\n });\n });\n return true;\n };\n\n createEffect(() => {\n if (!sentinelVisible()) {\n setAutomaticLoadAttempted(false);\n return;\n }\n if (automaticLoadAttempted() || !canLoadMore()) return;\n setAutomaticLoadAttempted(true);\n void loadMore();\n });\n\n onMount(() => {\n if (typeof IntersectionObserver === \"undefined\" || !sentinelRef) return;\n observer = new IntersectionObserver(\n (entries) => {\n setSentinelVisible(entries.some((entry) => entry.isIntersecting));\n },\n { rootMargin: \"160px 0px 0px\" },\n );\n observer.observe(sentinelRef);\n });\n\n onCleanup(() => {\n active = false;\n observer?.disconnect();\n if (adjustmentFrame !== undefined) cancelAnimationFrame(adjustmentFrame);\n });\n\n return (\n <div class={classNames(\"k2b-discussion__list-region\", props.class)} aria-busy={props.loading || loadingMore() ? \"true\" : undefined}>\n <div ref={sentinelRef} class=\"k2b-discussion__sentinel\" aria-hidden=\"true\" />\n <Show when={props.loading}>\n <p class=\"k2b-discussion__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" /> {props.loadingLabel ?? chatMessages().loadingMessages}\n </p>\n </Show>\n <Show when={props.error}>\n {(error) => (\n <div class=\"k2b-discussion__status\" role=\"alert\">\n <span>{error()}</span>\n <Show when={props.onRetry}>\n <button type=\"button\" onClick={props.onRetry}>\n {messages().retry}\n </button>\n </Show>\n </div>\n )}\n </Show>\n <Show when={loadMoreError()}>\n {(error) => (\n <div class=\"k2b-discussion__status\" role=\"alert\">\n <span>{error()}</span>\n <button type=\"button\" onClick={() => void loadMore(true)}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <Show when={!props.loading && !props.error && !loadMoreError() && (canLoadMore() || loadingMore())}>\n <button type=\"button\" class=\"k2b-discussion__load-more\" disabled={loadingMore()} onClick={() => void loadMore()}>\n <i class={`ti ${loadingMore() ? \"ti-loader-2 k2b-spin\" : \"ti-history\"}`} aria-hidden=\"true\" />\n {loadingMore() ? (props.loadingLabel ?? chatMessages().loadingMessages) : (props.loadMoreLabel ?? chatMessages().loadEarlier)}\n </button>\n </Show>\n <ol ref={listRef} class=\"k2b-discussion__list\">\n {props.children}\n </ol>\n </div>\n );\n};\n\nconst DiscussionItem = (props: DiscussionItemProps): JSX.Element => {\n const [local, itemProps] = splitProps(props, [\n \"author\",\n \"children\",\n \"avatar\",\n \"timestamp\",\n \"meta\",\n \"replyContext\",\n \"actions\",\n \"actionVisibility\",\n \"class\",\n ]);\n return (\n <li\n {...itemProps}\n class={classNames(\"k2b-discussion__item\", local.class)}\n data-has-avatar={local.avatar !== undefined ? \"true\" : undefined}\n >\n <Show when={local.avatar !== undefined}>\n <div class=\"k2b-discussion__avatar\">{local.avatar}</div>\n </Show>\n <div class=\"k2b-discussion__entry\">\n <header>\n <strong>{local.author}</strong>\n <Show when={local.timestamp !== undefined}>\n <span class=\"k2b-discussion__timestamp\">{local.timestamp}</span>\n </Show>\n <Show when={local.meta !== undefined}>\n <span class=\"k2b-discussion__meta\">{local.meta}</span>\n </Show>\n <Show when={local.actions !== undefined}>\n <div class=\"k2b-discussion__item-actions\" data-visibility={local.actionVisibility ?? \"progressive\"}>\n {local.actions}\n </div>\n </Show>\n </header>\n <Show when={local.replyContext !== undefined}>\n <div class=\"k2b-discussion__reply-context\">{local.replyContext}</div>\n </Show>\n <div class=\"k2b-discussion__content\">{local.children}</div>\n </div>\n </li>\n );\n};\n\nconst Discussion = DiscussionRoot as DiscussionComponent;\nDiscussion.Composer = DiscussionComposer;\nDiscussion.List = DiscussionList;\nDiscussion.Item = DiscussionItem;\n\nexport default Discussion;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,8 +22,9 @@ import { Portal, render } from "solid-js/web";
|
|
|
22
22
|
import { returnFocus, ringOnReturn } from "../internal/focus-return";
|
|
23
23
|
import { getK2bPortalRoot } from "../internal/portal";
|
|
24
24
|
import { RenderErrorBoundary } from "../internal/render-error";
|
|
25
|
-
import {
|
|
25
|
+
import { suppressTextSelection } from "../internal/text-selection";
|
|
26
26
|
import { FLOATING_WINDOW_VIEWPORT_GAP, fitFloatingWindowRect } from "./floating-window-geometry";
|
|
27
|
+
import { useFloatingWindowMessages } from "./floating-window-messages";
|
|
27
28
|
export { fitFloatingWindowRect } from "./floating-window-geometry";
|
|
28
29
|
const MOBILE_BREAKPOINT = 640;
|
|
29
30
|
const FLOATING_WINDOW_LAYER_BASE = 80;
|
|
@@ -51,7 +52,7 @@ const bringLayerToFront = owner => {
|
|
|
51
52
|
const isTopLayer = owner => activeLayers.at(-1) === owner;
|
|
52
53
|
const clamp = (value, min, max) => Math.min(Math.max(value, min), Math.max(min, max));
|
|
53
54
|
export default function FloatingWindow(props) {
|
|
54
|
-
const
|
|
55
|
+
const floatingWindowMessages = useFloatingWindowMessages();
|
|
55
56
|
const minWidth = () => props.minWidth ?? 360;
|
|
56
57
|
const minHeight = () => props.minHeight ?? 320;
|
|
57
58
|
const [mobile, setMobile] = createSignal(false);
|
|
@@ -83,7 +84,9 @@ export default function FloatingWindow(props) {
|
|
|
83
84
|
const pointerId = start.pointerId;
|
|
84
85
|
const captureTarget = start.currentTarget;
|
|
85
86
|
captureTarget.setPointerCapture?.(pointerId);
|
|
87
|
+
const releaseTextSelection = suppressTextSelection(pointerId);
|
|
86
88
|
const stop = () => {
|
|
89
|
+
releaseTextSelection();
|
|
87
90
|
window.removeEventListener("pointermove", onMove);
|
|
88
91
|
window.removeEventListener("pointerup", onEnd);
|
|
89
92
|
window.removeEventListener("pointercancel", onEnd);
|
|
@@ -245,7 +248,7 @@ export default function FloatingWindow(props) {
|
|
|
245
248
|
_el$10.$$pointerdown = event => beginResize(edge, event);
|
|
246
249
|
_$setAttribute(_el$10, "data-edge", edge);
|
|
247
250
|
_$setStyleProperty(_el$10, "cursor", cursor);
|
|
248
|
-
_$effect(() => _$setAttribute(_el$10, "aria-label",
|
|
251
|
+
_$effect(() => _$setAttribute(_el$10, "aria-label", floatingWindowMessages().resizeWindow));
|
|
249
252
|
_$runHydrationEvents();
|
|
250
253
|
return _el$10;
|
|
251
254
|
})() : // Cloud exposes a single keyboard-resizable corner; the remaining
|
|
@@ -277,10 +280,10 @@ export default function FloatingWindow(props) {
|
|
|
277
280
|
height: `${rect().height}px`,
|
|
278
281
|
"z-index": layer()
|
|
279
282
|
},
|
|
280
|
-
_v$4 =
|
|
283
|
+
_v$4 = floatingWindowMessages().moveWindow({
|
|
281
284
|
title: props.title
|
|
282
285
|
}),
|
|
283
|
-
_v$5 =
|
|
286
|
+
_v$5 = floatingWindowMessages().closeWindow;
|
|
284
287
|
_v$ !== _p$.e && _$className(_el$, _p$.e = _v$);
|
|
285
288
|
_v$2 !== _p$.t && _$setAttribute(_el$, "data-mobile", _p$.t = _v$2);
|
|
286
289
|
_p$.a = _$style(_el$, _v$3, _p$.a);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/FloatingWindow.tsx"],"sourcesContent":["import { createSignal, createUniqueId, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { Portal, render } from \"solid-js/web\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\nimport { getK2bPortalRoot } from \"../internal/portal\";\nimport { RenderErrorBoundary } from \"../internal/render-error\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { FLOATING_WINDOW_VIEWPORT_GAP, type FloatingWindowRect, fitFloatingWindowRect } from \"./floating-window-geometry\";\n\nexport { type FloatingWindowRect, fitFloatingWindowRect } from \"./floating-window-geometry\";\n\ntype ResizeEdge = \"left\" | \"right\" | \"top\" | \"bottom\" | \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\";\n\nexport type FloatingWindowProps = {\n title: string;\n icon?: string;\n children: JSX.Element;\n onClose: () => void;\n initialWidth?: number;\n initialHeight?: number;\n minWidth?: number;\n minHeight?: number;\n accent?: string;\n class?: string;\n resolveScope?: () => HTMLElement | null | undefined;\n};\nexport type OpenFloatingWindowOptions = Omit<FloatingWindowProps, \"children\" | \"onClose\">;\nexport type FloatingWindowClose = () => void;\n\nconst MOBILE_BREAKPOINT = 640;\nconst FLOATING_WINDOW_LAYER_BASE = 80;\ntype LayerOwner = { setLayer: (layer: number) => void };\nconst activeLayers: LayerOwner[] = [];\nconst syncLayers = () => {\n activeLayers.forEach((owner, index) => owner.setLayer(FLOATING_WINDOW_LAYER_BASE + index));\n};\nconst registerLayer = (owner: LayerOwner) => {\n activeLayers.push(owner);\n syncLayers();\n};\nconst releaseLayer = (owner: LayerOwner) => {\n const index = activeLayers.indexOf(owner);\n if (index < 0) return;\n activeLayers.splice(index, 1);\n syncLayers();\n};\nconst bringLayerToFront = (owner: LayerOwner) => {\n const index = activeLayers.indexOf(owner);\n if (index < 0 || index === activeLayers.length - 1) return;\n activeLayers.splice(index, 1);\n activeLayers.push(owner);\n syncLayers();\n};\nconst isTopLayer = (owner: LayerOwner) => activeLayers.at(-1) === owner;\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), Math.max(min, max));\n\nexport default function FloatingWindow(props: FloatingWindowProps): JSX.Element {\n const messages = useUiMessages();\n const minWidth = () => props.minWidth ?? 360;\n const minHeight = () => props.minHeight ?? 320;\n const [mobile, setMobile] = createSignal(false);\n const [layer, setLayer] = createSignal(FLOATING_WINDOW_LAYER_BASE);\n const layerOwner: LayerOwner = { setLayer };\n const [rect, setRect] = createSignal<FloatingWindowRect>({\n x: FLOATING_WINDOW_VIEWPORT_GAP,\n y: FLOATING_WINDOW_VIEWPORT_GAP,\n width: props.initialWidth ?? 720,\n height: props.initialHeight ?? 640,\n });\n const titleId = `k2b-floating-window-${createUniqueId()}`;\n let frame: HTMLElement | undefined;\n let stopPointerInteraction: (() => void) | undefined;\n const fit = (value: FloatingWindowRect) =>\n fitFloatingWindowRect(value, minWidth(), minHeight(), { width: window.innerWidth, height: window.innerHeight });\n const front = () => bringLayerToFront(layerOwner);\n const stopActivePointerInteraction = () => stopPointerInteraction?.();\n const close = () => {\n stopActivePointerInteraction();\n props.onClose();\n };\n const trackPointerInteraction = (start: PointerEvent, move: (event: PointerEvent) => void) => {\n stopActivePointerInteraction();\n const pointerId = start.pointerId;\n const captureTarget = start.currentTarget as HTMLElement;\n captureTarget.setPointerCapture?.(pointerId);\n const stop = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onEnd);\n window.removeEventListener(\"pointercancel\", onEnd);\n if (captureTarget.hasPointerCapture?.(pointerId)) captureTarget.releasePointerCapture(pointerId);\n if (stopPointerInteraction === stop) stopPointerInteraction = undefined;\n };\n const onMove = (event: PointerEvent) => {\n if (event.pointerId === pointerId) move(event);\n };\n const onEnd = (event: PointerEvent) => {\n if (event.pointerId === pointerId) stop();\n };\n stopPointerInteraction = stop;\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onEnd);\n window.addEventListener(\"pointercancel\", onEnd);\n };\n\n onMount(() => {\n registerLayer(layerOwner);\n const viewport = () => {\n const compact = window.innerWidth < MOBILE_BREAKPOINT;\n setMobile(compact);\n if (!compact) setRect((current) => fit(current));\n };\n setRect((current) => fit({ ...current, x: (window.innerWidth - current.width) / 2, y: (window.innerHeight - current.height) / 2 }));\n viewport();\n const escape = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.key !== \"Escape\" || !isTopLayer(layerOwner)) return;\n event.preventDefault();\n close();\n };\n window.addEventListener(\"resize\", viewport);\n window.addEventListener(\"keydown\", escape);\n const focus = requestAnimationFrame(() => frame?.focus());\n onCleanup(() => {\n stopActivePointerInteraction();\n releaseLayer(layerOwner);\n cancelAnimationFrame(focus);\n window.removeEventListener(\"resize\", viewport);\n window.removeEventListener(\"keydown\", escape);\n });\n });\n\n const moveBy = (deltaX: number, deltaY: number) =>\n setRect((current) => fit({ ...current, x: current.x + deltaX, y: current.y + deltaY }));\n const beginMove = (event: PointerEvent) => {\n if (mobile() || event.button !== 0 || (event.target as Element).closest(\"button:not([data-window-move])\")) return;\n const origin = rect();\n const start = { x: event.clientX, y: event.clientY };\n front();\n const move = (next: PointerEvent) =>\n setRect(fit({ ...origin, x: origin.x + next.clientX - start.x, y: origin.y + next.clientY - start.y }));\n trackPointerInteraction(event, move);\n event.preventDefault();\n };\n const resizeBy = (edge: ResizeEdge, deltaX: number, deltaY: number) => {\n const current = rect();\n let { x, y, width, height } = current;\n if (edge.includes(\"left\")) {\n const next = clamp(width - deltaX, minWidth(), window.innerWidth - FLOATING_WINDOW_VIEWPORT_GAP - x);\n x += width - next;\n width = next;\n }\n if (edge.includes(\"right\")) width += deltaX;\n if (edge.includes(\"top\")) {\n const next = clamp(height - deltaY, minHeight(), window.innerHeight - FLOATING_WINDOW_VIEWPORT_GAP - y);\n y += height - next;\n height = next;\n }\n if (edge.includes(\"bottom\")) height += deltaY;\n setRect(fit({ x, y, width, height }));\n };\n const beginResize = (edge: ResizeEdge, event: PointerEvent) => {\n if (mobile() || event.button !== 0) return;\n let previous = { x: event.clientX, y: event.clientY };\n front();\n const move = (next: PointerEvent) => {\n resizeBy(edge, next.clientX - previous.x, next.clientY - previous.y);\n previous = { x: next.clientX, y: next.clientY };\n };\n trackPointerInteraction(event, move);\n event.preventDefault();\n };\n const arrows = (event: KeyboardEvent, action: (x: number, y: number) => void) => {\n const step = event.shiftKey ? 24 : 8;\n const delta =\n event.key === \"ArrowLeft\"\n ? [-step, 0]\n : event.key === \"ArrowRight\"\n ? [step, 0]\n : event.key === \"ArrowUp\"\n ? [0, -step]\n : event.key === \"ArrowDown\"\n ? [0, step]\n : undefined;\n if (!delta) return;\n action(delta[0]!, delta[1]!);\n event.preventDefault();\n };\n const handles: readonly [ResizeEdge, string][] = [\n [\"left\", \"ew-resize\"],\n [\"right\", \"ew-resize\"],\n [\"top\", \"ns-resize\"],\n [\"bottom\", \"ns-resize\"],\n [\"top-left\", \"nwse-resize\"],\n [\"top-right\", \"nesw-resize\"],\n [\"bottom-left\", \"nesw-resize\"],\n [\"bottom-right\", \"nwse-resize\"],\n ];\n\n const view = (\n <section\n ref={frame}\n class={`k2b-floating-window ${props.class ?? \"\"}`}\n data-mobile={mobile() ? \"true\" : undefined}\n style={\n mobile()\n ? {\n \"--k2b-window-accent\": props.accent,\n inset: \"0.5rem\",\n width: \"auto\",\n height: \"auto\",\n \"z-index\": layer(),\n }\n : {\n \"--k2b-window-accent\": props.accent,\n left: `${rect().x}px`,\n top: `${rect().y}px`,\n width: `${rect().width}px`,\n height: `${rect().height}px`,\n \"z-index\": layer(),\n }\n }\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={titleId}\n tabIndex={-1}\n onPointerDown={front}\n >\n <header onPointerDown={beginMove}>\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <button\n type=\"button\"\n data-window-move\n class=\"k2b-floating-window__title\"\n aria-label={messages().moveWindow({ title: props.title })}\n onKeyDown={(event) => arrows(event, moveBy)}\n >\n <span id={titleId}>{props.title}</span>\n </button>\n <button type=\"button\" class=\"k2b-icon-button\" aria-label={messages().closeWindow} onClick={close}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </header>\n <div class=\"k2b-floating-window__body\">{props.children}</div>\n <Show when={!mobile()}>\n {handles.map(([edge, cursor]) =>\n edge === \"bottom-right\" ? (\n <button\n type=\"button\"\n class=\"k2b-floating-window__resize\"\n data-edge={edge}\n style={{ cursor }}\n aria-label={messages().resizeWindow}\n onPointerDown={(event) => beginResize(edge, event)}\n onKeyDown={(event) => arrows(event, (x, y) => resizeBy(edge, x, y))}\n />\n ) : (\n // Cloud exposes a single keyboard-resizable corner; the remaining\n // edges stay pointer-only so the window adds one tab stop, not eight.\n <div\n class=\"k2b-floating-window__resize\"\n data-edge={edge}\n style={{ cursor }}\n aria-hidden=\"true\"\n onPointerDown={(event) => beginResize(edge, event)}\n />\n ),\n )}\n </Show>\n </section>\n );\n return <Portal mount={typeof document === \"undefined\" ? undefined : getK2bPortalRoot(props.resolveScope?.())}>{view}</Portal>;\n}\n\nexport const openFloatingWindow = (\n view: (close: FloatingWindowClose) => JSX.Element,\n options: OpenFloatingWindowOptions,\n): FloatingWindowClose => {\n if (typeof document === \"undefined\") throw new Error(\"Floating windows are browser-only\");\n const previousFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n const previousRing = ringOnReturn(previousFocus);\n const owner = document.createElement(\"div\");\n owner.className = \"k2b-ui\";\n document.body.appendChild(owner);\n let dispose: (() => void) | undefined;\n let closed = false;\n const close = () => {\n if (closed) return;\n closed = true;\n dispose?.();\n owner.remove();\n returnFocus(previousFocus, previousRing);\n };\n dispose = render(\n () => (\n <FloatingWindow {...options} resolveScope={options.resolveScope ?? (() => owner)} onClose={close}>\n <RenderErrorBoundary content={() => view(close)} />\n </FloatingWindow>\n ),\n owner,\n );\n return close;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/FloatingWindow.tsx"],"sourcesContent":["import { createSignal, createUniqueId, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { Portal, render } from \"solid-js/web\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\nimport { getK2bPortalRoot } from \"../internal/portal\";\nimport { RenderErrorBoundary } from \"../internal/render-error\";\nimport { suppressTextSelection } from \"../internal/text-selection\";\nimport { FLOATING_WINDOW_VIEWPORT_GAP, type FloatingWindowRect, fitFloatingWindowRect } from \"./floating-window-geometry\";\nimport { useFloatingWindowMessages } from \"./floating-window-messages\";\n\nexport { type FloatingWindowRect, fitFloatingWindowRect } from \"./floating-window-geometry\";\n\ntype ResizeEdge = \"left\" | \"right\" | \"top\" | \"bottom\" | \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\";\n\nexport type FloatingWindowProps = {\n title: string;\n icon?: string;\n children: JSX.Element;\n onClose: () => void;\n initialWidth?: number;\n initialHeight?: number;\n minWidth?: number;\n minHeight?: number;\n accent?: string;\n class?: string;\n resolveScope?: () => HTMLElement | null | undefined;\n};\nexport type OpenFloatingWindowOptions = Omit<FloatingWindowProps, \"children\" | \"onClose\">;\nexport type FloatingWindowClose = () => void;\n\nconst MOBILE_BREAKPOINT = 640;\nconst FLOATING_WINDOW_LAYER_BASE = 80;\ntype LayerOwner = { setLayer: (layer: number) => void };\nconst activeLayers: LayerOwner[] = [];\nconst syncLayers = () => {\n activeLayers.forEach((owner, index) => owner.setLayer(FLOATING_WINDOW_LAYER_BASE + index));\n};\nconst registerLayer = (owner: LayerOwner) => {\n activeLayers.push(owner);\n syncLayers();\n};\nconst releaseLayer = (owner: LayerOwner) => {\n const index = activeLayers.indexOf(owner);\n if (index < 0) return;\n activeLayers.splice(index, 1);\n syncLayers();\n};\nconst bringLayerToFront = (owner: LayerOwner) => {\n const index = activeLayers.indexOf(owner);\n if (index < 0 || index === activeLayers.length - 1) return;\n activeLayers.splice(index, 1);\n activeLayers.push(owner);\n syncLayers();\n};\nconst isTopLayer = (owner: LayerOwner) => activeLayers.at(-1) === owner;\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), Math.max(min, max));\n\nexport default function FloatingWindow(props: FloatingWindowProps): JSX.Element {\n const floatingWindowMessages = useFloatingWindowMessages();\n const minWidth = () => props.minWidth ?? 360;\n const minHeight = () => props.minHeight ?? 320;\n const [mobile, setMobile] = createSignal(false);\n const [layer, setLayer] = createSignal(FLOATING_WINDOW_LAYER_BASE);\n const layerOwner: LayerOwner = { setLayer };\n const [rect, setRect] = createSignal<FloatingWindowRect>({\n x: FLOATING_WINDOW_VIEWPORT_GAP,\n y: FLOATING_WINDOW_VIEWPORT_GAP,\n width: props.initialWidth ?? 720,\n height: props.initialHeight ?? 640,\n });\n const titleId = `k2b-floating-window-${createUniqueId()}`;\n let frame: HTMLElement | undefined;\n let stopPointerInteraction: (() => void) | undefined;\n const fit = (value: FloatingWindowRect) =>\n fitFloatingWindowRect(value, minWidth(), minHeight(), { width: window.innerWidth, height: window.innerHeight });\n const front = () => bringLayerToFront(layerOwner);\n const stopActivePointerInteraction = () => stopPointerInteraction?.();\n const close = () => {\n stopActivePointerInteraction();\n props.onClose();\n };\n const trackPointerInteraction = (start: PointerEvent, move: (event: PointerEvent) => void) => {\n stopActivePointerInteraction();\n const pointerId = start.pointerId;\n const captureTarget = start.currentTarget as HTMLElement;\n captureTarget.setPointerCapture?.(pointerId);\n const releaseTextSelection = suppressTextSelection(pointerId);\n const stop = () => {\n releaseTextSelection();\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onEnd);\n window.removeEventListener(\"pointercancel\", onEnd);\n if (captureTarget.hasPointerCapture?.(pointerId)) captureTarget.releasePointerCapture(pointerId);\n if (stopPointerInteraction === stop) stopPointerInteraction = undefined;\n };\n const onMove = (event: PointerEvent) => {\n if (event.pointerId === pointerId) move(event);\n };\n const onEnd = (event: PointerEvent) => {\n if (event.pointerId === pointerId) stop();\n };\n stopPointerInteraction = stop;\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onEnd);\n window.addEventListener(\"pointercancel\", onEnd);\n };\n\n onMount(() => {\n registerLayer(layerOwner);\n const viewport = () => {\n const compact = window.innerWidth < MOBILE_BREAKPOINT;\n setMobile(compact);\n if (!compact) setRect((current) => fit(current));\n };\n setRect((current) => fit({ ...current, x: (window.innerWidth - current.width) / 2, y: (window.innerHeight - current.height) / 2 }));\n viewport();\n const escape = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.key !== \"Escape\" || !isTopLayer(layerOwner)) return;\n event.preventDefault();\n close();\n };\n window.addEventListener(\"resize\", viewport);\n window.addEventListener(\"keydown\", escape);\n const focus = requestAnimationFrame(() => frame?.focus());\n onCleanup(() => {\n stopActivePointerInteraction();\n releaseLayer(layerOwner);\n cancelAnimationFrame(focus);\n window.removeEventListener(\"resize\", viewport);\n window.removeEventListener(\"keydown\", escape);\n });\n });\n\n const moveBy = (deltaX: number, deltaY: number) =>\n setRect((current) => fit({ ...current, x: current.x + deltaX, y: current.y + deltaY }));\n const beginMove = (event: PointerEvent) => {\n if (mobile() || event.button !== 0 || (event.target as Element).closest(\"button:not([data-window-move])\")) return;\n const origin = rect();\n const start = { x: event.clientX, y: event.clientY };\n front();\n const move = (next: PointerEvent) =>\n setRect(fit({ ...origin, x: origin.x + next.clientX - start.x, y: origin.y + next.clientY - start.y }));\n trackPointerInteraction(event, move);\n event.preventDefault();\n };\n const resizeBy = (edge: ResizeEdge, deltaX: number, deltaY: number) => {\n const current = rect();\n let { x, y, width, height } = current;\n if (edge.includes(\"left\")) {\n const next = clamp(width - deltaX, minWidth(), window.innerWidth - FLOATING_WINDOW_VIEWPORT_GAP - x);\n x += width - next;\n width = next;\n }\n if (edge.includes(\"right\")) width += deltaX;\n if (edge.includes(\"top\")) {\n const next = clamp(height - deltaY, minHeight(), window.innerHeight - FLOATING_WINDOW_VIEWPORT_GAP - y);\n y += height - next;\n height = next;\n }\n if (edge.includes(\"bottom\")) height += deltaY;\n setRect(fit({ x, y, width, height }));\n };\n const beginResize = (edge: ResizeEdge, event: PointerEvent) => {\n if (mobile() || event.button !== 0) return;\n let previous = { x: event.clientX, y: event.clientY };\n front();\n const move = (next: PointerEvent) => {\n resizeBy(edge, next.clientX - previous.x, next.clientY - previous.y);\n previous = { x: next.clientX, y: next.clientY };\n };\n trackPointerInteraction(event, move);\n event.preventDefault();\n };\n const arrows = (event: KeyboardEvent, action: (x: number, y: number) => void) => {\n const step = event.shiftKey ? 24 : 8;\n const delta =\n event.key === \"ArrowLeft\"\n ? [-step, 0]\n : event.key === \"ArrowRight\"\n ? [step, 0]\n : event.key === \"ArrowUp\"\n ? [0, -step]\n : event.key === \"ArrowDown\"\n ? [0, step]\n : undefined;\n if (!delta) return;\n action(delta[0]!, delta[1]!);\n event.preventDefault();\n };\n const handles: readonly [ResizeEdge, string][] = [\n [\"left\", \"ew-resize\"],\n [\"right\", \"ew-resize\"],\n [\"top\", \"ns-resize\"],\n [\"bottom\", \"ns-resize\"],\n [\"top-left\", \"nwse-resize\"],\n [\"top-right\", \"nesw-resize\"],\n [\"bottom-left\", \"nesw-resize\"],\n [\"bottom-right\", \"nwse-resize\"],\n ];\n\n const view = (\n <section\n ref={frame}\n class={`k2b-floating-window ${props.class ?? \"\"}`}\n data-mobile={mobile() ? \"true\" : undefined}\n style={\n mobile()\n ? {\n \"--k2b-window-accent\": props.accent,\n inset: \"0.5rem\",\n width: \"auto\",\n height: \"auto\",\n \"z-index\": layer(),\n }\n : {\n \"--k2b-window-accent\": props.accent,\n left: `${rect().x}px`,\n top: `${rect().y}px`,\n width: `${rect().width}px`,\n height: `${rect().height}px`,\n \"z-index\": layer(),\n }\n }\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={titleId}\n tabIndex={-1}\n onPointerDown={front}\n >\n <header onPointerDown={beginMove}>\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <button\n type=\"button\"\n data-window-move\n class=\"k2b-floating-window__title\"\n aria-label={floatingWindowMessages().moveWindow({ title: props.title })}\n onKeyDown={(event) => arrows(event, moveBy)}\n >\n <span id={titleId}>{props.title}</span>\n </button>\n <button type=\"button\" class=\"k2b-icon-button\" aria-label={floatingWindowMessages().closeWindow} onClick={close}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </header>\n <div class=\"k2b-floating-window__body\">{props.children}</div>\n <Show when={!mobile()}>\n {handles.map(([edge, cursor]) =>\n edge === \"bottom-right\" ? (\n <button\n type=\"button\"\n class=\"k2b-floating-window__resize\"\n data-edge={edge}\n style={{ cursor }}\n aria-label={floatingWindowMessages().resizeWindow}\n onPointerDown={(event) => beginResize(edge, event)}\n onKeyDown={(event) => arrows(event, (x, y) => resizeBy(edge, x, y))}\n />\n ) : (\n // Cloud exposes a single keyboard-resizable corner; the remaining\n // edges stay pointer-only so the window adds one tab stop, not eight.\n <div\n class=\"k2b-floating-window__resize\"\n data-edge={edge}\n style={{ cursor }}\n aria-hidden=\"true\"\n onPointerDown={(event) => beginResize(edge, event)}\n />\n ),\n )}\n </Show>\n </section>\n );\n return <Portal mount={typeof document === \"undefined\" ? undefined : getK2bPortalRoot(props.resolveScope?.())}>{view}</Portal>;\n}\n\nexport const openFloatingWindow = (\n view: (close: FloatingWindowClose) => JSX.Element,\n options: OpenFloatingWindowOptions,\n): FloatingWindowClose => {\n if (typeof document === \"undefined\") throw new Error(\"Floating windows are browser-only\");\n const previousFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n const previousRing = ringOnReturn(previousFocus);\n const owner = document.createElement(\"div\");\n owner.className = \"k2b-ui\";\n document.body.appendChild(owner);\n let dispose: (() => void) | undefined;\n let closed = false;\n const close = () => {\n if (closed) return;\n closed = true;\n dispose?.();\n owner.remove();\n returnFocus(previousFocus, previousRing);\n };\n dispose = render(\n () => (\n <FloatingWindow {...options} resolveScope={options.resolveScope ?? (() => owner)} onClose={close}>\n <RenderErrorBoundary content={() => view(close)} />\n </FloatingWindow>\n ),\n owner,\n );\n return close;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -33,7 +33,7 @@ import { documentNavigate, Link } from "@k2b/ssr/nav";
|
|
|
33
33
|
import { createSignal, createUniqueId, For, Show } from "solid-js";
|
|
34
34
|
import { IconButton } from "../actions/Button";
|
|
35
35
|
import { Dropdown } from "../actions/Dropdown";
|
|
36
|
-
import {
|
|
36
|
+
import { useWorkspaceMessages } from "./workspace-messages";
|
|
37
37
|
/** A named icon is an image screen readers announce; any other icon is decoration. */
|
|
38
38
|
const iconAccessibility = label => label ? {
|
|
39
39
|
role: "img",
|
|
@@ -42,11 +42,12 @@ const iconAccessibility = label => label ? {
|
|
|
42
42
|
"aria-hidden": true
|
|
43
43
|
};
|
|
44
44
|
export default function Navigation(props) {
|
|
45
|
-
const
|
|
45
|
+
const workspaceMessages = useWorkspaceMessages();
|
|
46
46
|
const [expanded, setExpanded] = createSignal({});
|
|
47
47
|
const ready = async () => (await props.beforeSelect?.()) !== false;
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
/** `keepOpen` changes only what the menu shows, so the host does not dismiss it first. */
|
|
49
|
+
const activate = async (id, keepOpen = false) => {
|
|
50
|
+
if (keepOpen || (await ready())) await props.navigation.activate(id);
|
|
50
51
|
};
|
|
51
52
|
const Rows = rows => (() => {
|
|
52
53
|
var _el$ = _$getNextElement(_tmpl$);
|
|
@@ -177,7 +178,7 @@ export default function Navigation(props) {
|
|
|
177
178
|
[_el$34, _co$8] = _$getNextMarker(_el$33.nextSibling),
|
|
178
179
|
_el$35 = _el$34.nextSibling,
|
|
179
180
|
[_el$36, _co$9] = _$getNextMarker(_el$35.nextSibling);
|
|
180
|
-
_el$31.$$click = () => item().action ? void activate(id) : toggle();
|
|
181
|
+
_el$31.$$click = () => item().action ? void activate(id, item().keepOpen) : toggle();
|
|
181
182
|
_$insert(_el$31, content, _el$34, _co$8);
|
|
182
183
|
_$insert(_el$31, _$createComponent(Show, {
|
|
183
184
|
get when() {
|
|
@@ -318,7 +319,7 @@ export default function Navigation(props) {
|
|
|
318
319
|
return _$createComponent(Dropdown.Trigger, {
|
|
319
320
|
iconOnly: true,
|
|
320
321
|
get label() {
|
|
321
|
-
return `${item().label}: ${
|
|
322
|
+
return `${item().label}: ${workspaceMessages().rowAction}`;
|
|
322
323
|
},
|
|
323
324
|
variant: "ghost",
|
|
324
325
|
get children() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/Navigation.tsx"],"sourcesContent":["import { documentNavigate, Link } from \"@k2b/ssr/nav\";\nimport { createSignal, createUniqueId, For, Show } from \"solid-js\";\nimport { IconButton } from \"../actions/Button\";\nimport { Dropdown } from \"../actions/Dropdown\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { NavigationController, NavigationItem } from \"./navigation-model\";\n\nexport type NavigationProps = {\n navigation: NavigationController;\n label: string;\n /** A host can finish dismissing its menu before the selected operation runs. */\n beforeSelect?: () => boolean | void | Promise<boolean | void>;\n};\n\n/** A named icon is an image screen readers announce; any other icon is decoration. */\nconst iconAccessibility = (label: string | undefined) => (label ? { role: \"img\" as const, \"aria-label\": label } : { \"aria-hidden\": true });\n\nexport default function Navigation(props: NavigationProps) {\n const messages = useUiMessages();\n const [expanded, setExpanded] = createSignal<Record<string, boolean>>({});\n const ready = async () => (await props.beforeSelect?.()) !== false;\n const activate = async (id: string) => {\n if (await ready()) await props.navigation.activate(id);\n };\n const Rows = (rows: { items: readonly NavigationItem[]; disabled?: boolean; labelledBy?: string }) => (\n <ul class=\"k2b-navigation__list\" aria-labelledby={rows.labelledBy}>\n <For each={rows.items.map((item) => item.id)}>\n {(id) => {\n const item = () => rows.items.find((entry) => entry.id === id)!;\n const disabled = () => rows.disabled || item().disabled;\n const headingId = `k2b-navigation-section-${createUniqueId()}`;\n // `expanded` hands disclosure to the item's owner; every other toggle stays local to this renderer.\n const open = () => item().expanded ?? expanded()[id] ?? item().defaultExpanded ?? true;\n const toggle = () => {\n if (item().expanded !== undefined) props.navigation.onExpandedChange?.(id, !open());\n else setExpanded((current) => ({ ...current, [id]: !open() }));\n };\n const content = () => (\n <>\n <Show when={item().icon}>\n <i class={item().icon} {...iconAccessibility(item().iconLabel)} />\n </Show>\n <span class=\"k2b-navigation__copy\">\n <span>{item().label}</span>\n <Show when={item().description}>\n <small>{item().description}</small>\n </Show>\n </span>\n <Show when={item().color}>\n <span class=\"k2b-navigation__color\" style={{ \"background-color\": item().color }} />\n </Show>\n <Show when={item().badge !== undefined}>\n <span class=\"k2b-navigation__badge\">{item().badge}</span>\n </Show>\n {/* `null` keeps the empty slot, so a status that appears later takes no width from the label. */}\n <Show when={item().status !== undefined}>\n <span class=\"k2b-navigation__status\" data-tone={item().status?.tone} title={item().status?.label}>\n <Show when={item().status}>\n {(status) => (\n <>\n <i class={status().icon} aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{status().label}</span>\n </>\n )}\n </Show>\n </span>\n </Show>\n </>\n );\n return (\n <Show\n when={item().section}\n fallback={\n <li>\n <div class=\"k2b-navigation__row\" data-active={item().active || undefined}>\n <Show\n when={item().href}\n fallback={\n <button\n type=\"button\"\n class=\"k2b-navigation__control\"\n disabled={disabled()}\n aria-expanded={!item().action ? open() : undefined}\n onClick={() => (item().action ? void activate(id) : toggle())}\n >\n {content()}\n <Show when={!item().action && item().children?.length}>\n <i class={open() ? \"ti ti-chevron-down\" : \"ti ti-chevron-right\"} aria-hidden=\"true\" />\n </Show>\n </button>\n }\n >\n {(href) => (\n <Link\n class=\"k2b-navigation__control\"\n href={href()}\n aria-current={item().active ? \"page\" : undefined}\n aria-disabled={disabled() || undefined}\n tabIndex={disabled() ? -1 : undefined}\n scroll={item().scroll}\n onNavigate={async (event) => {\n if (!(await ready())) return;\n if (item().navigation === \"enhanced\" && props.navigation.onNavigate) await props.navigation.onNavigate(event);\n else event.fallback();\n }}\n onClick={(event) => {\n if (disabled()) {\n event.preventDefault();\n return;\n }\n if (!item().action || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)\n return;\n // Local opening can fetch before committing navigation, outside a view transition.\n event.preventDefault();\n void activate(id);\n }}\n >\n {content()}\n </Link>\n )}\n </Show>\n <Show when={(item().href || item().action) && item().children?.length}>\n <button\n type=\"button\"\n class=\"k2b-navigation__disclosure\"\n aria-label={item().label}\n aria-expanded={open()}\n disabled={disabled()}\n onClick={toggle}\n >\n <i class={open() ? \"ti ti-chevron-down\" : \"ti ti-chevron-right\"} aria-hidden=\"true\" />\n </button>\n </Show>\n {/* Keyed by id like the rows, so a button keeps its identity and focus when the model updates. */}\n <For each={(item().inlineActions ?? []).map((action) => action.id)}>\n {(actionId) => {\n const action = () => item().inlineActions?.find((entry) => entry.id === actionId);\n return (\n <Show when={action()}>\n {(current) => (\n <IconButton\n class=\"k2b-navigation__inline-action\"\n label={current().label}\n disabled={disabled() || current().disabled}\n onClick={() => void activate(actionId)}\n >\n <i class={current().icon} aria-hidden=\"true\" />\n </IconButton>\n )}\n </Show>\n );\n }}\n </For>\n <Show when={item().actions?.length}>\n <Dropdown.Root\n items={(item().actions ?? []).map((action) => ({\n label: action.label,\n icon: action.icon,\n description: action.description,\n disabled: disabled() || action.disabled,\n action: () => {\n if (action.href)\n void ready().then((allowed) => {\n if (allowed) documentNavigate(action.href!);\n });\n else void activate(action.id);\n },\n }))}\n >\n <Dropdown.Trigger iconOnly label={`${item().label}: ${messages().rowAction}`} variant=\"ghost\">\n <i class=\"ti ti-dots\" aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n </div>\n <Show when={item().children?.length}>\n <div hidden={!open()}>\n <Rows items={item().children ?? []} disabled={disabled()} />\n </div>\n </Show>\n </li>\n }\n >\n <li class=\"k2b-navigation__section\">\n <div class=\"k2b-navigation__heading\" id={headingId}>\n {item().label}\n </div>\n <Rows items={item().children ?? []} disabled={disabled()} labelledBy={headingId} />\n </li>\n </Show>\n );\n }}\n </For>\n </ul>\n );\n return (\n <nav class=\"k2b-navigation\" aria-label={props.label}>\n <Rows items={props.navigation.items()} />\n </nav>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/Navigation.tsx"],"sourcesContent":["import { documentNavigate, Link } from \"@k2b/ssr/nav\";\nimport { createSignal, createUniqueId, For, Show } from \"solid-js\";\nimport { IconButton } from \"../actions/Button\";\nimport { Dropdown } from \"../actions/Dropdown\";\nimport type { NavigationController, NavigationItem } from \"./navigation-model\";\nimport { useWorkspaceMessages } from \"./workspace-messages\";\n\nexport type NavigationProps = {\n navigation: NavigationController;\n label: string;\n /** A host can finish dismissing its menu before the selected operation runs. */\n beforeSelect?: () => boolean | void | Promise<boolean | void>;\n};\n\n/** A named icon is an image screen readers announce; any other icon is decoration. */\nconst iconAccessibility = (label: string | undefined) => (label ? { role: \"img\" as const, \"aria-label\": label } : { \"aria-hidden\": true });\n\nexport default function Navigation(props: NavigationProps) {\n const workspaceMessages = useWorkspaceMessages();\n const [expanded, setExpanded] = createSignal<Record<string, boolean>>({});\n const ready = async () => (await props.beforeSelect?.()) !== false;\n /** `keepOpen` changes only what the menu shows, so the host does not dismiss it first. */\n const activate = async (id: string, keepOpen = false) => {\n if (keepOpen || (await ready())) await props.navigation.activate(id);\n };\n const Rows = (rows: { items: readonly NavigationItem[]; disabled?: boolean; labelledBy?: string }) => (\n <ul class=\"k2b-navigation__list\" aria-labelledby={rows.labelledBy}>\n <For each={rows.items.map((item) => item.id)}>\n {(id) => {\n const item = () => rows.items.find((entry) => entry.id === id)!;\n const disabled = () => rows.disabled || item().disabled;\n const headingId = `k2b-navigation-section-${createUniqueId()}`;\n // `expanded` hands disclosure to the item's owner; every other toggle stays local to this renderer.\n const open = () => item().expanded ?? expanded()[id] ?? item().defaultExpanded ?? true;\n const toggle = () => {\n if (item().expanded !== undefined) props.navigation.onExpandedChange?.(id, !open());\n else setExpanded((current) => ({ ...current, [id]: !open() }));\n };\n const content = () => (\n <>\n <Show when={item().icon}>\n <i class={item().icon} {...iconAccessibility(item().iconLabel)} />\n </Show>\n <span class=\"k2b-navigation__copy\">\n <span>{item().label}</span>\n <Show when={item().description}>\n <small>{item().description}</small>\n </Show>\n </span>\n <Show when={item().color}>\n <span class=\"k2b-navigation__color\" style={{ \"background-color\": item().color }} />\n </Show>\n <Show when={item().badge !== undefined}>\n <span class=\"k2b-navigation__badge\">{item().badge}</span>\n </Show>\n {/* `null` keeps the empty slot, so a status that appears later takes no width from the label. */}\n <Show when={item().status !== undefined}>\n <span class=\"k2b-navigation__status\" data-tone={item().status?.tone} title={item().status?.label}>\n <Show when={item().status}>\n {(status) => (\n <>\n <i class={status().icon} aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{status().label}</span>\n </>\n )}\n </Show>\n </span>\n </Show>\n </>\n );\n return (\n <Show\n when={item().section}\n fallback={\n <li>\n <div class=\"k2b-navigation__row\" data-active={item().active || undefined}>\n <Show\n when={item().href}\n fallback={\n <button\n type=\"button\"\n class=\"k2b-navigation__control\"\n disabled={disabled()}\n aria-expanded={!item().action ? open() : undefined}\n onClick={() => (item().action ? void activate(id, item().keepOpen) : toggle())}\n >\n {content()}\n <Show when={!item().action && item().children?.length}>\n <i class={open() ? \"ti ti-chevron-down\" : \"ti ti-chevron-right\"} aria-hidden=\"true\" />\n </Show>\n </button>\n }\n >\n {(href) => (\n <Link\n class=\"k2b-navigation__control\"\n href={href()}\n aria-current={item().active ? \"page\" : undefined}\n aria-disabled={disabled() || undefined}\n tabIndex={disabled() ? -1 : undefined}\n scroll={item().scroll}\n onNavigate={async (event) => {\n if (!(await ready())) return;\n if (item().navigation === \"enhanced\" && props.navigation.onNavigate) await props.navigation.onNavigate(event);\n else event.fallback();\n }}\n onClick={(event) => {\n if (disabled()) {\n event.preventDefault();\n return;\n }\n if (!item().action || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)\n return;\n // Local opening can fetch before committing navigation, outside a view transition.\n event.preventDefault();\n void activate(id);\n }}\n >\n {content()}\n </Link>\n )}\n </Show>\n <Show when={(item().href || item().action) && item().children?.length}>\n <button\n type=\"button\"\n class=\"k2b-navigation__disclosure\"\n aria-label={item().label}\n aria-expanded={open()}\n disabled={disabled()}\n onClick={toggle}\n >\n <i class={open() ? \"ti ti-chevron-down\" : \"ti ti-chevron-right\"} aria-hidden=\"true\" />\n </button>\n </Show>\n {/* Keyed by id like the rows, so a button keeps its identity and focus when the model updates. */}\n <For each={(item().inlineActions ?? []).map((action) => action.id)}>\n {(actionId) => {\n const action = () => item().inlineActions?.find((entry) => entry.id === actionId);\n return (\n <Show when={action()}>\n {(current) => (\n <IconButton\n class=\"k2b-navigation__inline-action\"\n label={current().label}\n disabled={disabled() || current().disabled}\n onClick={() => void activate(actionId)}\n >\n <i class={current().icon} aria-hidden=\"true\" />\n </IconButton>\n )}\n </Show>\n );\n }}\n </For>\n <Show when={item().actions?.length}>\n <Dropdown.Root\n items={(item().actions ?? []).map((action) => ({\n label: action.label,\n icon: action.icon,\n description: action.description,\n disabled: disabled() || action.disabled,\n action: () => {\n if (action.href)\n void ready().then((allowed) => {\n if (allowed) documentNavigate(action.href!);\n });\n else void activate(action.id);\n },\n }))}\n >\n <Dropdown.Trigger iconOnly label={`${item().label}: ${workspaceMessages().rowAction}`} variant=\"ghost\">\n <i class=\"ti ti-dots\" aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n </div>\n <Show when={item().children?.length}>\n <div hidden={!open()}>\n <Rows items={item().children ?? []} disabled={disabled()} />\n </div>\n </Show>\n </li>\n }\n >\n <li class=\"k2b-navigation__section\">\n <div class=\"k2b-navigation__heading\" id={headingId}>\n {item().label}\n </div>\n <Rows items={item().children ?? []} disabled={disabled()} labelledBy={headingId} />\n </li>\n </Show>\n );\n }}\n </For>\n </ul>\n );\n return (\n <nav class=\"k2b-navigation\" aria-label={props.label}>\n <Rows items={props.navigation.items()} />\n </nav>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|