@k2b/ui 0.17.0 → 0.19.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/README.md +3 -2
- package/dist/browser/actions/ContextMenu.js +3 -1
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +91 -46
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +4 -1
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +1311 -565
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +9 -6
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/chat-behavior.js +9 -0
- package/dist/browser/chat/chat-behavior.js.map +1 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/chat/types.js.map +1 -1
- package/dist/browser/content/Calendar.js +579 -533
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/FileView.js +62 -36
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js +76 -40
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/MarkdownView.js +9 -3
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +146 -79
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/Timeline.js +1038 -0
- package/dist/browser/content/Timeline.js.map +1 -0
- package/dist/browser/content/VideoPlayer.js +299 -0
- package/dist/browser/content/VideoPlayer.js.map +1 -0
- package/dist/browser/content/chart-inspection.js +7 -2
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/file-view-preview.js +2 -2
- package/dist/browser/content/file-view-preview.js.map +1 -1
- package/dist/browser/content/index.js +3 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/markdown-links.js +178 -0
- package/dist/browser/content/markdown-links.js.map +1 -0
- package/dist/browser/content/timeline-model.js +579 -0
- package/dist/browser/content/timeline-model.js.map +1 -0
- package/dist/browser/feedback/dialog-core.js +26 -14
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/inputs/ChoiceChips.js +66 -0
- package/dist/browser/inputs/ChoiceChips.js.map +1 -0
- package/dist/browser/inputs/ChoiceGroups.js +53 -12
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
- package/dist/browser/inputs/FileDropTarget.js +129 -0
- package/dist/browser/inputs/FileDropTarget.js.map +1 -0
- package/dist/browser/inputs/FileInputs.js +84 -43
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/SignatureInput.js +558 -0
- package/dist/browser/inputs/SignatureInput.js.map +1 -0
- package/dist/browser/inputs/emoji/EmojiPicker.js +841 -0
- package/dist/browser/inputs/emoji/EmojiPicker.js.map +1 -0
- package/dist/browser/inputs/emoji/emoji-data.js +1903 -0
- package/dist/browser/inputs/emoji/emoji-data.js.map +1 -0
- package/dist/browser/inputs/emoji/emoji-index.js +209 -0
- package/dist/browser/inputs/emoji/emoji-index.js.map +1 -0
- package/dist/browser/inputs/emoji/emoji-messages.js +64 -0
- package/dist/browser/inputs/emoji/emoji-messages.js.map +1 -0
- package/dist/browser/inputs/file-drop.js +338 -0
- package/dist/browser/inputs/file-drop.js.map +1 -0
- package/dist/browser/inputs/index.js +6 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js +72 -78
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/actions.js +48 -2
- package/dist/browser/inputs/markdown/actions.js.map +1 -1
- package/dist/browser/inputs/markdown/code-zone.js +38 -2
- package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
- package/dist/browser/inputs/signature-messages.js +39 -0
- package/dist/browser/inputs/signature-messages.js.map +1 -0
- package/dist/browser/inputs/signature.js +208 -0
- package/dist/browser/inputs/signature.js.map +1 -0
- package/dist/browser/internal/render-error.js +49 -0
- package/dist/browser/internal/render-error.js.map +1 -0
- package/dist/browser/intl/messages.js +205 -4
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +483 -218
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/FloatingWindow.js +4 -1
- package/dist/browser/layout/FloatingWindow.js.map +1 -1
- package/dist/browser/layout/Navigation.js +274 -197
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/SidebarItemPreview.js +5 -1
- package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js +2 -0
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/surfaces/NoticeCard.js +47 -44
- package/dist/browser/surfaces/NoticeCard.js.map +1 -1
- package/dist/browser/surfaces/ResourceCard.js +212 -0
- package/dist/browser/surfaces/ResourceCard.js.map +1 -0
- package/dist/browser/surfaces/index.js +1 -0
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/licenses/emojibase-data.txt +21 -0
- package/dist/ssr/actions/ContextMenu.js +3 -1
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +49 -12
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +4 -1
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +823 -221
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +9 -6
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/chat-behavior.js +9 -0
- package/dist/ssr/chat/chat-behavior.js.map +1 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/chat/types.js.map +1 -1
- package/dist/ssr/content/Calendar.js +183 -142
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/FileView.js +30 -6
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +19 -5
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/MarkdownView.js +9 -3
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +77 -36
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/Timeline.js +804 -0
- package/dist/ssr/content/Timeline.js.map +1 -0
- package/dist/ssr/content/VideoPlayer.js +228 -0
- package/dist/ssr/content/VideoPlayer.js.map +1 -0
- package/dist/ssr/content/chart-inspection.js +7 -2
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/file-view-preview.js +2 -2
- package/dist/ssr/content/file-view-preview.js.map +1 -1
- package/dist/ssr/content/index.js +3 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/markdown-links.js +178 -0
- package/dist/ssr/content/markdown-links.js.map +1 -0
- package/dist/ssr/content/timeline-model.js +579 -0
- package/dist/ssr/content/timeline-model.js.map +1 -0
- package/dist/ssr/feedback/dialog-core.js +26 -14
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/inputs/ChoiceChips.js +66 -0
- package/dist/ssr/inputs/ChoiceChips.js.map +1 -0
- package/dist/ssr/inputs/ChoiceGroups.js +12 -4
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
- package/dist/ssr/inputs/FileDropTarget.js +103 -0
- package/dist/ssr/inputs/FileDropTarget.js.map +1 -0
- package/dist/ssr/inputs/FileInputs.js +49 -12
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/SignatureInput.js +404 -0
- package/dist/ssr/inputs/SignatureInput.js.map +1 -0
- package/dist/ssr/inputs/emoji/EmojiPicker.js +551 -0
- package/dist/ssr/inputs/emoji/EmojiPicker.js.map +1 -0
- package/dist/ssr/inputs/emoji/emoji-data.js +1903 -0
- package/dist/ssr/inputs/emoji/emoji-data.js.map +1 -0
- package/dist/ssr/inputs/emoji/emoji-index.js +209 -0
- package/dist/ssr/inputs/emoji/emoji-index.js.map +1 -0
- package/dist/ssr/inputs/emoji/emoji-messages.js +64 -0
- package/dist/ssr/inputs/emoji/emoji-messages.js.map +1 -0
- package/dist/ssr/inputs/file-drop.js +338 -0
- package/dist/ssr/inputs/file-drop.js.map +1 -0
- package/dist/ssr/inputs/index.js +6 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +14 -2
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/actions.js +48 -2
- package/dist/ssr/inputs/markdown/actions.js.map +1 -1
- package/dist/ssr/inputs/markdown/code-zone.js +38 -2
- package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
- package/dist/ssr/inputs/signature-messages.js +39 -0
- package/dist/ssr/inputs/signature-messages.js.map +1 -0
- package/dist/ssr/inputs/signature.js +208 -0
- package/dist/ssr/inputs/signature.js.map +1 -0
- package/dist/ssr/internal/render-error.js +49 -0
- package/dist/ssr/internal/render-error.js.map +1 -0
- package/dist/ssr/intl/messages.js +205 -4
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +264 -47
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/FloatingWindow.js +4 -1
- package/dist/ssr/layout/FloatingWindow.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +169 -122
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/SidebarItemPreview.js +5 -1
- package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js +2 -0
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/surfaces/NoticeCard.js +17 -12
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
- package/dist/ssr/surfaces/ResourceCard.js +115 -0
- package/dist/ssr/surfaces/ResourceCard.js.map +1 -0
- package/dist/ssr/surfaces/index.js +1 -0
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +13 -1
- package/dist/types/actions/FilterChip.d.ts +5 -0
- package/dist/types/chat/ChatComposer.d.ts +24 -1
- package/dist/types/chat/ChatPrimitives.d.ts +1 -1
- package/dist/types/chat/chat-behavior.d.ts +15 -0
- package/dist/types/chat/index.d.ts +1 -1
- package/dist/types/chat/types.d.ts +34 -0
- package/dist/types/content/Calendar.d.ts +28 -8
- package/dist/types/content/Lightbox.d.ts +8 -0
- package/dist/types/content/Timeline.d.ts +49 -0
- package/dist/types/content/VideoPlayer.d.ts +41 -0
- package/dist/types/content/index.d.ts +6 -2
- package/dist/types/content/markdown-links.d.ts +66 -0
- package/dist/types/content/timeline-model.d.ts +148 -0
- package/dist/types/feedback/dialog-core.d.ts +1 -1
- package/dist/types/inputs/ChoiceChips.d.ts +20 -0
- package/dist/types/inputs/ChoiceGroups.d.ts +11 -2
- package/dist/types/inputs/FileDropTarget.d.ts +23 -0
- package/dist/types/inputs/FileInputs.d.ts +8 -0
- package/dist/types/inputs/SignatureInput.d.ts +22 -0
- package/dist/types/inputs/emoji/EmojiPicker.d.ts +42 -0
- package/dist/types/inputs/emoji/emoji-data.d.ts +2 -0
- package/dist/types/inputs/emoji/emoji-index.d.ts +109 -0
- package/dist/types/inputs/emoji/emoji-messages.d.ts +30 -0
- package/dist/types/inputs/file-drop.d.ts +80 -0
- package/dist/types/inputs/index.d.ts +12 -0
- package/dist/types/inputs/markdown/actions.d.ts +4 -0
- package/dist/types/inputs/markdown/code-zone.d.ts +7 -0
- package/dist/types/inputs/signature-messages.d.ts +11 -0
- package/dist/types/inputs/signature.d.ts +72 -0
- package/dist/types/internal/render-error.d.ts +13 -0
- package/dist/types/intl/messages.d.ts +101 -0
- package/dist/types/layout/AppWorkspace.d.ts +38 -0
- package/dist/types/layout/SidebarItemPreview.d.ts +2 -0
- package/dist/types/layout/index.d.ts +2 -2
- package/dist/types/layout/navigation-model.d.ts +18 -0
- package/dist/types/surfaces/ResourceCard.d.ts +31 -0
- package/dist/types/surfaces/index.d.ts +2 -0
- package/package.json +5 -4
|
@@ -22,28 +22,32 @@ var _tmpl$ = ["<button type=\"button\" class=\"k2b-app-workspace__resize\" role=
|
|
|
22
22
|
_tmpl$11 = ["<div", "", " class=\"k2b-app-workspace__sidebar-section-content\">", "</div>"],
|
|
23
23
|
_tmpl$12 = ["<h2>", "</h2>"],
|
|
24
24
|
_tmpl$13 = ["<div class=\"k2b-app-workspace__sidebar-item-actions\"", ">", "</div>"],
|
|
25
|
-
_tmpl$14 =
|
|
26
|
-
_tmpl$15 =
|
|
27
|
-
_tmpl$16 = ["<span class=\"k2b-app-workspace__sidebar-
|
|
28
|
-
_tmpl$17 = ["<span class=\"k2b-app-workspace__sidebar-
|
|
29
|
-
_tmpl$18 =
|
|
30
|
-
_tmpl$19 = ["<
|
|
31
|
-
_tmpl$20 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"
|
|
32
|
-
_tmpl$21 = ["<
|
|
33
|
-
_tmpl$22 = ["<
|
|
34
|
-
_tmpl$23 = ["<span class=\"k2b-app-workspace__sidebar-item-
|
|
35
|
-
_tmpl$24 = ["<span class=\"k2b-app-workspace__sidebar-item-
|
|
36
|
-
_tmpl$25 = ["<
|
|
37
|
-
_tmpl$26 = ["<
|
|
38
|
-
_tmpl$27 = ["<
|
|
39
|
-
_tmpl$28 = ["<
|
|
40
|
-
_tmpl$29 = ["<
|
|
41
|
-
_tmpl$30 = ["<
|
|
42
|
-
_tmpl$31 = ["<
|
|
43
|
-
_tmpl$32 = ["<div class=\""
|
|
44
|
-
_tmpl$33 = ["<div class=\"", "\">", "</div>"]
|
|
25
|
+
_tmpl$14 = "<span class=\"k2b-app-workspace__sidebar-status-mention\" aria-hidden=\"true\">@</span>",
|
|
26
|
+
_tmpl$15 = "<span class=\"k2b-app-workspace__sidebar-status-muted\" aria-hidden=\"true\"><i class=\"ti ti-bell-off\"></i></span>",
|
|
27
|
+
_tmpl$16 = ["<span class=\"k2b-app-workspace__sidebar-status-count\"", ">", "</span>"],
|
|
28
|
+
_tmpl$17 = ["<span class=\"k2b-app-workspace__sidebar-status\"", ">", "", "<span class=\"k2b-app-workspace__sidebar-status-unread\" aria-hidden=\"true\">", "</span><span class=\"k2b-sr-only\">, ", "</span></span>"],
|
|
29
|
+
_tmpl$18 = "<span class=\"k2b-app-workspace__sidebar-status-dot\"></span>",
|
|
30
|
+
_tmpl$19 = ["<span class=\"k2b-app-workspace__sidebar-item-icon\" aria-hidden=\"true\">", "</span>"],
|
|
31
|
+
_tmpl$20 = ["<span class=\"k2b-app-workspace__sidebar-item-context-meta\">", "</span>"],
|
|
32
|
+
_tmpl$21 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label\">", "</span>", "</span>"],
|
|
33
|
+
_tmpl$22 = ["<span class=\"k2b-app-workspace__sidebar-item-description\">", "</span>"],
|
|
34
|
+
_tmpl$23 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\">", "<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>", "</span>"],
|
|
35
|
+
_tmpl$24 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
|
|
36
|
+
_tmpl$25 = ["<i", "></i>"],
|
|
37
|
+
_tmpl$26 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
|
|
38
|
+
_tmpl$27 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
|
|
39
|
+
_tmpl$28 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>"],
|
|
40
|
+
_tmpl$29 = ["<span class=\"", "\"", ">", "</span>"],
|
|
41
|
+
_tmpl$30 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
|
|
42
|
+
_tmpl$31 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
|
|
43
|
+
_tmpl$32 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", " style=\"", "\">", "", "</div>"],
|
|
44
|
+
_tmpl$33 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
|
|
45
|
+
_tmpl$34 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
|
|
46
|
+
_tmpl$35 = ["<i", " aria-hidden=\"true\"></i>"],
|
|
47
|
+
_tmpl$36 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "</div>"],
|
|
48
|
+
_tmpl$37 = ["<div class=\"", "\">", "</div>"];
|
|
45
49
|
import { Link } from "@k2b/ssr/nav";
|
|
46
|
-
import { children, createContext, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, useContext } from "solid-js";
|
|
50
|
+
import { children, createContext, createEffect, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, useContext } from "solid-js";
|
|
47
51
|
import { useUiMessages } from "../intl/messages";
|
|
48
52
|
import { APP_WORKSPACE_SIDEBAR_HIDE_EVENT, installAppWorkspaceController } from "./app-workspace-controller";
|
|
49
53
|
import { APP_WORKSPACE_DETAIL_DEFAULT, APP_WORKSPACE_DETAIL_MAX, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DRAWER_DEFAULT, APP_WORKSPACE_DRAWER_MAX, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_PANE_DEFAULT, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_DEFAULT, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspaceLayoutStyle, appWorkspacePanelVariable } from "./app-workspace-state";
|
|
@@ -72,8 +76,17 @@ const sidebarChildSlot = value => Boolean(value && typeof value === "object" &&
|
|
|
72
76
|
const sidebarItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && [SIDEBAR_ITEM_ICON, SIDEBAR_ITEM_LABEL, SIDEBAR_ITEM_META, SIDEBAR_ITEM_ACTION].includes(value.kind));
|
|
73
77
|
const navTreeItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === NAV_TREE_ITEM);
|
|
74
78
|
function ResizeHandle(props) {
|
|
75
|
-
|
|
79
|
+
const messages = useUiMessages();
|
|
80
|
+
return _$ssr(_tmpl$, _$ssrAttribute("aria-label", _$escape(props.label ?? (props.kind === "sidebar" ? messages().resizeNavigation : props.kind === "pane" ? messages().resizeWorkspacePane : props.kind === "detail" ? messages().resizeDetailPanel : messages().resizeBottomDrawer), true), false) + _$ssrAttribute("aria-controls", _$escape(props.controls, true), false) + _$ssrAttribute("aria-orientation", props.kind === "drawer" ? "horizontal" : "vertical", false) + _$ssrAttribute("aria-valuemin", _$escape(props.minSize, true), false) + _$ssrAttribute("aria-valuemax", _$escape(props.maxSize, true), false) + _$ssrAttribute("aria-valuenow", _$escape(props.defaultSize, true), false) + _$ssrAttribute("data-app-workspace-resize", _$escape(props.kind, true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(props.panelId, true), false) + _$ssrAttribute("data-workspace-resize-edge", _$escape(props.edge, true), false) + _$ssrAttribute("data-workspace-resize-shadow", props.shadow ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-default-size", _$escape(props.defaultSize, true), false) + _$ssrAttribute("data-workspace-min-size", _$escape(props.minSize, true), false) + _$ssrAttribute("data-workspace-max-size", _$escape(props.maxSize, true), false), _$ssrStyle(props.style));
|
|
76
81
|
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Unread state for the trailing `meta` slot. Every mark keeps a fixed width,
|
|
85
|
+
* so the row keeps its height and the label its start in every state.
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
/** One requested place for an item among its unchanged siblings. */
|
|
89
|
+
|
|
77
90
|
const modeAttrs = mode => mode && mode !== "always" ? {
|
|
78
91
|
"data-sidebar-mode": mode
|
|
79
92
|
} : {};
|
|
@@ -85,6 +98,13 @@ const scrollAttrs = key => key ? {
|
|
|
85
98
|
"data-scroll-preserve": key
|
|
86
99
|
} : {};
|
|
87
100
|
const iconClass = (icon, fallback = "ti-circle") => icon?.startsWith("ti ") ? icon : `ti ${icon || fallback}`;
|
|
101
|
+
/** A named icon is an image screen readers announce; any other icon is decoration. */
|
|
102
|
+
const iconAccessibility = label => label ? {
|
|
103
|
+
role: "img",
|
|
104
|
+
"aria-label": label
|
|
105
|
+
} : {
|
|
106
|
+
"aria-hidden": true
|
|
107
|
+
};
|
|
88
108
|
function AppWorkspaceMainPane(props) {
|
|
89
109
|
return {
|
|
90
110
|
kind: MAIN_PANE,
|
|
@@ -487,6 +507,57 @@ const AppWorkspaceSidebarItemAction = props => mergeProps({
|
|
|
487
507
|
kind: SIDEBAR_ITEM_ACTION
|
|
488
508
|
}, props);
|
|
489
509
|
const AppWorkspaceSidebarItemActions = props => _$ssr(_tmpl$13, _$ssrAttribute("data-visibility", props.visibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(props.children));
|
|
510
|
+
const AppWorkspaceSidebarItemStatus = props => {
|
|
511
|
+
const messages = useUiMessages();
|
|
512
|
+
const count = () => typeof props.unread === "number" && props.unread >= 1 ? Math.floor(props.unread) : 0;
|
|
513
|
+
const dot = () => props.unread === true;
|
|
514
|
+
// The marks are decorative; the row's accessible name gets one phrase instead,
|
|
515
|
+
// which says no more than the "99+" a capped count shows.
|
|
516
|
+
const description = () => [count() > 99 ? messages().sidebarUnreadMany : count() ? messages().sidebarUnread({
|
|
517
|
+
count: count()
|
|
518
|
+
}) : dot() ? messages().sidebarNewActivity : "", props.mention ? messages().sidebarMentioned : "", props.muted ? messages().sidebarMuted : ""].filter(Boolean).join(", ");
|
|
519
|
+
// The unread slot stays reserved at the end, and the marks that change most
|
|
520
|
+
// often sit outermost, so new activity or a mention never moves another mark.
|
|
521
|
+
return _$createComponent(Show, {
|
|
522
|
+
get when() {
|
|
523
|
+
return description();
|
|
524
|
+
},
|
|
525
|
+
get children() {
|
|
526
|
+
return _$ssr(_tmpl$17, _$ssrAttribute("data-unread", count() ? "count" : dot() ? "dot" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
|
|
527
|
+
get when() {
|
|
528
|
+
return props.mention;
|
|
529
|
+
},
|
|
530
|
+
get children() {
|
|
531
|
+
return _$ssr(_tmpl$14);
|
|
532
|
+
}
|
|
533
|
+
})), _$escape(_$createComponent(Show, {
|
|
534
|
+
get when() {
|
|
535
|
+
return props.muted;
|
|
536
|
+
},
|
|
537
|
+
get children() {
|
|
538
|
+
return _$ssr(_tmpl$15);
|
|
539
|
+
}
|
|
540
|
+
})), _$escape(_$createComponent(Show, {
|
|
541
|
+
get when() {
|
|
542
|
+
return count();
|
|
543
|
+
},
|
|
544
|
+
get fallback() {
|
|
545
|
+
return _$createComponent(Show, {
|
|
546
|
+
get when() {
|
|
547
|
+
return dot();
|
|
548
|
+
},
|
|
549
|
+
get children() {
|
|
550
|
+
return _$ssr(_tmpl$18);
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
},
|
|
554
|
+
get children() {
|
|
555
|
+
return _$ssr(_tmpl$16, _$ssrAttribute("data-mention", props.mention ? "true" : _$escape(undefined, true), false), count() > 99 ? "99+" : _$escape(count()));
|
|
556
|
+
}
|
|
557
|
+
})), _$escape(description()));
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
};
|
|
490
561
|
/** Shared visual and semantic row frame for flat sidebar items and tree items. */
|
|
491
562
|
function AppWorkspaceSidebarRow(props) {
|
|
492
563
|
const className = () => `k2b-app-workspace__sidebar-item ${props.hasActions ? "has-action" : ""} ${props.active ? props.activeClass ?? "is-active" : ""} ${props.class ?? ""}`;
|
|
@@ -608,7 +679,11 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
608
679
|
const label = () => labelSlot()?.children ?? (legacy().length === 1 ? legacy()[0] : legacy());
|
|
609
680
|
const icon = () => iconSlot()?.icon ?? props.icon;
|
|
610
681
|
const iconContent = () => iconSlot()?.children;
|
|
611
|
-
|
|
682
|
+
// Resolved first, so a component that renders nothing, such as a status with
|
|
683
|
+
// nothing to show, leaves no empty slot in the browser either.
|
|
684
|
+
const meta = children(() => metaSlot()?.children ?? props.meta);
|
|
685
|
+
const hasMeta = () => meta.toArray().some(Boolean);
|
|
686
|
+
const metaId = createUniqueId();
|
|
612
687
|
const metaVisibility = () => metaSlot()?.visibility ?? props.metaVisibility;
|
|
613
688
|
const customActions = () => resolvedActions();
|
|
614
689
|
const hasCustomActions = () => Boolean(customActions());
|
|
@@ -618,19 +693,19 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
618
693
|
return iconContent() || icon();
|
|
619
694
|
},
|
|
620
695
|
get children() {
|
|
621
|
-
return _$ssr(_tmpl$
|
|
696
|
+
return _$ssr(_tmpl$19, _$escape(iconContent() ?? _$ssr(_tmpl$25, _$ssrAttribute("class", _$escape(iconClass(icon()), true), false))));
|
|
622
697
|
}
|
|
623
|
-
}), _$ssr(_tmpl$
|
|
698
|
+
}), _$ssr(_tmpl$23, _$escape(_$createComponent(Show, {
|
|
624
699
|
get when() {
|
|
625
700
|
return props.context || props.contextMeta;
|
|
626
701
|
},
|
|
627
702
|
get children() {
|
|
628
|
-
return _$ssr(_tmpl$
|
|
703
|
+
return _$ssr(_tmpl$21, _$escape(props.context), _$escape(_$createComponent(Show, {
|
|
629
704
|
get when() {
|
|
630
705
|
return props.contextMeta;
|
|
631
706
|
},
|
|
632
707
|
get children() {
|
|
633
|
-
return _$ssr(_tmpl$
|
|
708
|
+
return _$ssr(_tmpl$20, _$escape(props.contextMeta));
|
|
634
709
|
}
|
|
635
710
|
})));
|
|
636
711
|
}
|
|
@@ -639,13 +714,15 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
639
714
|
return props.description;
|
|
640
715
|
},
|
|
641
716
|
get children() {
|
|
642
|
-
return _$ssr(_tmpl$
|
|
717
|
+
return _$ssr(_tmpl$22, _$escape(props.description));
|
|
643
718
|
}
|
|
644
719
|
}))), _$createComponent(Show, {
|
|
645
720
|
get when() {
|
|
646
|
-
return
|
|
721
|
+
return hasMeta();
|
|
647
722
|
},
|
|
648
|
-
children
|
|
723
|
+
get children() {
|
|
724
|
+
return _$ssr(_tmpl$24, _$ssrAttribute("id", props.preview?.trigger === "row" ? _$escape(metaId, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-visibility", metaVisibility() === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(meta()));
|
|
725
|
+
}
|
|
649
726
|
})];
|
|
650
727
|
const singleAction = () => {
|
|
651
728
|
const label = () => actionSlot()?.label ?? props.actionLabel ?? messages().rowAction;
|
|
@@ -659,7 +736,7 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
659
736
|
actionSlot()?.onSelect?.(event);
|
|
660
737
|
props.onActionClick?.(event);
|
|
661
738
|
};
|
|
662
|
-
const content = () => actionSlot()?.children ?? _$ssr(_tmpl$
|
|
739
|
+
const content = () => actionSlot()?.children ?? _$ssr(_tmpl$25, _$ssrAttribute("class", _$escape(iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots"), true), false));
|
|
663
740
|
return _$createComponent(Show, {
|
|
664
741
|
get when() {
|
|
665
742
|
return Boolean(actionSlot() || props.actionIcon);
|
|
@@ -670,10 +747,10 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
670
747
|
return _$memo(() => !!actionSlot()?.href)() && !actionSlot()?.disabled;
|
|
671
748
|
},
|
|
672
749
|
get fallback() {
|
|
673
|
-
return _$ssr(_tmpl$
|
|
750
|
+
return _$ssr(_tmpl$27, _$ssrAttribute("disabled", actionSlot()?.disabled, true) + _$ssrAttribute("data-visibility", actionSlot()?.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label(), true), false), _$escape(content()));
|
|
674
751
|
},
|
|
675
752
|
get children() {
|
|
676
|
-
return _$ssr(_tmpl$
|
|
753
|
+
return _$ssr(_tmpl$26, _$ssrAttribute("href", _$escape(actionSlot()?.href, true), false), _$ssrAttribute("data-visibility", actionSlot()?.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label(), true), false), _$escape(content()));
|
|
677
754
|
}
|
|
678
755
|
});
|
|
679
756
|
}
|
|
@@ -696,6 +773,9 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
696
773
|
get viewportSize() {
|
|
697
774
|
return preview().viewportSize;
|
|
698
775
|
},
|
|
776
|
+
get describedBy() {
|
|
777
|
+
return hasMeta() ? metaId : undefined;
|
|
778
|
+
},
|
|
699
779
|
get onOpenChange() {
|
|
700
780
|
return preview().onOpenChange;
|
|
701
781
|
},
|
|
@@ -770,6 +850,27 @@ const AppWorkspaceNavTreeItem = props => ({
|
|
|
770
850
|
kind: NAV_TREE_ITEM,
|
|
771
851
|
...props
|
|
772
852
|
});
|
|
853
|
+
const NAV_TREE_DRAG_TYPE = "application/x-k2b-nav-tree-item";
|
|
854
|
+
const callDragHandler = (handler, event) => {
|
|
855
|
+
if (typeof handler === "function") handler(event);else handler?.[0](handler[1], event);
|
|
856
|
+
};
|
|
857
|
+
|
|
858
|
+
/**
|
|
859
|
+
* The move that puts the sibling at `from` into the gap before `slot`
|
|
860
|
+
* (`siblings.length` is the gap after the last one), or `null` when its place
|
|
861
|
+
* would not change or it would pass an item that is not movable.
|
|
862
|
+
*/
|
|
863
|
+
const navTreeMove = (siblings, from, slot, parentId) => {
|
|
864
|
+
if (from < 0 || slot < 0 || slot > siblings.length || slot === from || slot === from + 1) return null;
|
|
865
|
+
const passed = slot < from ? siblings.slice(slot, from) : siblings.slice(from + 1, slot);
|
|
866
|
+
if (passed.some(sibling => !sibling.movable)) return null;
|
|
867
|
+
return {
|
|
868
|
+
id: siblings[from].id,
|
|
869
|
+
parentId,
|
|
870
|
+
beforeId: siblings[slot]?.id ?? null,
|
|
871
|
+
afterId: siblings[slot - 1]?.id ?? null
|
|
872
|
+
};
|
|
873
|
+
};
|
|
773
874
|
const AppWorkspaceNavTree = props => {
|
|
774
875
|
let root;
|
|
775
876
|
const resolved = children(() => props.children);
|
|
@@ -814,16 +915,48 @@ const AppWorkspaceNavTree = props => {
|
|
|
814
915
|
});
|
|
815
916
|
};
|
|
816
917
|
|
|
918
|
+
// Reordering: the dragged item and the gap the pointer marks. The application renders the new
|
|
919
|
+
// order; the item moved by keyboard takes focus back when its row mounts or changes place.
|
|
920
|
+
const [dragged, setDragged] = createSignal(null);
|
|
921
|
+
const [dropTarget, setDropTarget] = createSignal(null);
|
|
922
|
+
let claimedDragOver = null;
|
|
923
|
+
let refocusId = null;
|
|
924
|
+
const endDrag = () => {
|
|
925
|
+
setDragged(null);
|
|
926
|
+
setDropTarget(null);
|
|
927
|
+
};
|
|
928
|
+
const requestMove = (move, keepFocus) => {
|
|
929
|
+
if (!move || !props.onMove) return;
|
|
930
|
+
refocusId = keepFocus ? move.id : null;
|
|
931
|
+
props.onMove(move);
|
|
932
|
+
};
|
|
933
|
+
|
|
817
934
|
// Items arrive through an accessor so a changed nested list reconciles rows by identity instead of rebuilding the list.
|
|
818
|
-
const renderItems = (
|
|
935
|
+
const renderItems = (siblings, depth, parentId) => _$createComponent(For, {
|
|
819
936
|
get each() {
|
|
820
|
-
return
|
|
937
|
+
return siblings();
|
|
821
938
|
},
|
|
822
|
-
children: item => {
|
|
939
|
+
children: (item, place) => {
|
|
823
940
|
const nested = createMemo(() => navTreeItems(item.children));
|
|
824
941
|
const hasChildren = () => nested().length > 0;
|
|
825
942
|
const selected = () => props.selectedId === item.id;
|
|
943
|
+
const siblingIndex = id => siblings().findIndex(sibling => sibling.id === id);
|
|
944
|
+
const movable = () => Boolean(props.onMove && item.movable && !item.disabled);
|
|
826
945
|
let treeItem;
|
|
946
|
+
const ownRow = () => treeItem?.firstElementChild;
|
|
947
|
+
|
|
948
|
+
// A new row for the moved item, or the same row at its new place: moving a focused row drops its focus.
|
|
949
|
+
createEffect(() => {
|
|
950
|
+
place();
|
|
951
|
+
if (refocusId !== item.id) return;
|
|
952
|
+
queueMicrotask(() => {
|
|
953
|
+
if (refocusId !== item.id || !treeItem?.isConnected) return;
|
|
954
|
+
const active = treeItem.ownerDocument.activeElement;
|
|
955
|
+
if (!active || active === treeItem.ownerDocument.body) treeItem.focus({
|
|
956
|
+
preventScroll: true
|
|
957
|
+
});
|
|
958
|
+
});
|
|
959
|
+
});
|
|
827
960
|
const activate = event => {
|
|
828
961
|
if (item.disabled) return;
|
|
829
962
|
treeItem?.focus({
|
|
@@ -856,6 +989,13 @@ const AppWorkspaceNavTree = props => {
|
|
|
856
989
|
};
|
|
857
990
|
const onKeyDown = event => {
|
|
858
991
|
if (event.target !== event.currentTarget) return;
|
|
992
|
+
if (event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey && (event.key === "ArrowUp" || event.key === "ArrowDown")) {
|
|
993
|
+
if (!movable()) return;
|
|
994
|
+
event.preventDefault();
|
|
995
|
+
const from = siblingIndex(item.id);
|
|
996
|
+
requestMove(navTreeMove(siblings(), from, event.key === "ArrowUp" ? from - 1 : from + 2, parentId ?? null), true);
|
|
997
|
+
return;
|
|
998
|
+
}
|
|
859
999
|
if (event.altKey || event.ctrlKey || event.metaKey) return;
|
|
860
1000
|
const items = treeItemElements();
|
|
861
1001
|
const index = items.indexOf(event.currentTarget);
|
|
@@ -909,21 +1049,26 @@ const AppWorkspaceNavTree = props => {
|
|
|
909
1049
|
return rowIcon();
|
|
910
1050
|
},
|
|
911
1051
|
get children() {
|
|
912
|
-
return _$
|
|
1052
|
+
return _$ssrElement("span", _$mergeProps({
|
|
1053
|
+
"class": "k2b-app-workspace__sidebar-item-icon",
|
|
1054
|
+
get ["data-k2b-nav-tree-toggle"]() {
|
|
1055
|
+
return usesIconDisclosure() ? "" : undefined;
|
|
1056
|
+
}
|
|
1057
|
+
}, () => iconAccessibility(item.iconLabel)), _$ssr(_tmpl$25, _$ssrAttribute("class", _$escape(iconClass(rowIcon()), true), false)), false);
|
|
913
1058
|
}
|
|
914
|
-
}), _$ssr(_tmpl$
|
|
1059
|
+
}), _$ssr(_tmpl$28, _$escape(item.label)), _$createComponent(Show, {
|
|
915
1060
|
get when() {
|
|
916
1061
|
return item.meta !== undefined;
|
|
917
1062
|
},
|
|
918
1063
|
get children() {
|
|
919
|
-
return _$ssr(_tmpl$
|
|
1064
|
+
return _$ssr(_tmpl$29, `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`, _$ssrAttribute("data-visibility", item.metaVisibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(item.meta));
|
|
920
1065
|
}
|
|
921
1066
|
}), _$createComponent(Show, {
|
|
922
1067
|
get when() {
|
|
923
1068
|
return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
|
|
924
1069
|
},
|
|
925
1070
|
get children() {
|
|
926
|
-
return _$ssr(_tmpl$
|
|
1071
|
+
return _$ssr(_tmpl$30, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`);
|
|
927
1072
|
}
|
|
928
1073
|
})];
|
|
929
1074
|
const row = () => _$createComponent(AppWorkspaceSidebarRow, {
|
|
@@ -978,17 +1123,88 @@ const AppWorkspaceNavTree = props => {
|
|
|
978
1123
|
},
|
|
979
1124
|
children: rowContent
|
|
980
1125
|
});
|
|
981
|
-
|
|
1126
|
+
|
|
1127
|
+
// A gap is offered only next to a sibling's own row, never over its sub-items.
|
|
1128
|
+
const dropMove = event => {
|
|
1129
|
+
const drag = dragged();
|
|
1130
|
+
const row = ownRow();
|
|
1131
|
+
if (!drag || !event.dataTransfer?.types.includes(NAV_TREE_DRAG_TYPE)) return null;
|
|
1132
|
+
if (drag.parentId !== (parentId ?? null) || drag.id === item.id || !row?.contains(event.target)) return null;
|
|
1133
|
+
const rect = row.getBoundingClientRect();
|
|
1134
|
+
const side = event.clientY < rect.top + rect.height / 2 ? "before" : "after";
|
|
1135
|
+
const slot = siblingIndex(item.id) + (side === "after" ? 1 : 0);
|
|
1136
|
+
const move = navTreeMove(siblings(), siblingIndex(drag.id), slot, parentId ?? null);
|
|
1137
|
+
return move ? {
|
|
1138
|
+
side,
|
|
1139
|
+
move
|
|
1140
|
+
} : null;
|
|
1141
|
+
};
|
|
1142
|
+
const onDragStart = event => {
|
|
1143
|
+
const row = ownRow();
|
|
1144
|
+
if (!movable() || !row?.contains(event.target)) return;
|
|
1145
|
+
event.stopPropagation();
|
|
1146
|
+
setDragged({
|
|
1147
|
+
id: item.id,
|
|
1148
|
+
parentId: parentId ?? null
|
|
1149
|
+
});
|
|
1150
|
+
if (!event.dataTransfer) return;
|
|
1151
|
+
event.dataTransfer.effectAllowed = "move";
|
|
1152
|
+
event.dataTransfer.setData(NAV_TREE_DRAG_TYPE, item.id);
|
|
1153
|
+
const rect = row.getBoundingClientRect();
|
|
1154
|
+
event.dataTransfer.setDragImage(row, event.clientX - rect.left, event.clientY - rect.top);
|
|
1155
|
+
};
|
|
1156
|
+
const onDragOver = event => {
|
|
1157
|
+
callDragHandler(item.onDragOver, event);
|
|
1158
|
+
const target = dropMove(event);
|
|
1159
|
+
if (!target) return;
|
|
1160
|
+
event.preventDefault();
|
|
1161
|
+
if (event.dataTransfer) event.dataTransfer.dropEffect = "move";
|
|
1162
|
+
claimedDragOver = event;
|
|
1163
|
+
setDropTarget({
|
|
1164
|
+
id: item.id,
|
|
1165
|
+
side: target.side
|
|
1166
|
+
});
|
|
1167
|
+
};
|
|
1168
|
+
const onDrop = event => {
|
|
1169
|
+
callDragHandler(item.onDrop, event);
|
|
1170
|
+
const target = dropMove(event);
|
|
1171
|
+
if (!target) return;
|
|
1172
|
+
event.preventDefault();
|
|
1173
|
+
event.stopPropagation();
|
|
1174
|
+
endDrag();
|
|
1175
|
+
requestMove(target.move, false);
|
|
1176
|
+
};
|
|
1177
|
+
return _$ssr(_tmpl$32, _$ssrAttribute("aria-level", _$escape(depth, true) + 1, false) + _$ssrAttribute("aria-setsize", _$escape(siblings().length, true), false) + _$ssrAttribute("aria-posinset", _$escape(place(), true) + 1, false) + _$ssrAttribute("aria-selected", _$escape(selected(), true), false) + _$ssrAttribute("aria-expanded", hasChildren() ? _$escape(isExpanded(item.id), true) : _$escape(undefined, true), false) + _$ssrAttribute("aria-disabled", item.disabled ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("tabindex", item.disabled ? -1 : tabStopId() === item.id ? 0 : -1, false) + _$ssrAttribute("draggable", movable() ? _$escape(true, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-k2b-nav-tree-id", _$escape(item.id, true), false) + _$ssrAttribute("data-k2b-nav-tree-parent-id", _$escape(parentId, true), false) + _$ssrAttribute("data-k2b-nav-tree-dragging", dragged()?.id === item.id ? "" : _$escape(undefined, true), false) + _$ssrAttribute("data-k2b-nav-tree-drop", dropTarget()?.id === item.id ? _$escape(dropTarget().side, true) : _$escape(undefined, true), false), _$ssrStyleProperty("--k2b-nav-tree-depth:", _$escape(String(props.indented === false ? 0 : depth), true)), _$escape(row()), _$escape(_$createComponent(Show, {
|
|
982
1178
|
get when() {
|
|
983
1179
|
return _$memo(() => !!hasChildren())() && isExpanded(item.id);
|
|
984
1180
|
},
|
|
985
1181
|
get children() {
|
|
986
|
-
return _$ssr(_tmpl$
|
|
1182
|
+
return _$ssr(_tmpl$31, _$escape(renderItems(nested, depth + 1, item.id)));
|
|
987
1183
|
}
|
|
988
1184
|
})));
|
|
989
1185
|
}
|
|
990
1186
|
});
|
|
991
|
-
|
|
1187
|
+
|
|
1188
|
+
// Any other click or focus is the person's choice; only the moved item itself keeps its claim.
|
|
1189
|
+
const forgetRefocus = event => {
|
|
1190
|
+
if (event.type === "pointerdown" || event.target?.dataset?.k2bNavTreeId !== refocusId) refocusId = null;
|
|
1191
|
+
};
|
|
1192
|
+
// A row replaced during a drag never receives its dragend; the next pointer movement means the drag is over.
|
|
1193
|
+
const forgetDrag = () => {
|
|
1194
|
+
if (dragged()) endDrag();
|
|
1195
|
+
};
|
|
1196
|
+
onMount(() => {
|
|
1197
|
+
const doc = root?.ownerDocument;
|
|
1198
|
+
doc?.addEventListener("pointerdown", forgetRefocus, true);
|
|
1199
|
+
doc?.addEventListener("focusin", forgetRefocus, true);
|
|
1200
|
+
doc?.addEventListener("pointermove", forgetDrag, true);
|
|
1201
|
+
onCleanup(() => {
|
|
1202
|
+
doc?.removeEventListener("pointerdown", forgetRefocus, true);
|
|
1203
|
+
doc?.removeEventListener("focusin", forgetRefocus, true);
|
|
1204
|
+
doc?.removeEventListener("pointermove", forgetDrag, true);
|
|
1205
|
+
});
|
|
1206
|
+
});
|
|
1207
|
+
return _$ssr(_tmpl$33, `k2b-app-workspace__nav-tree ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.ariaLabel, true), false), _$escape(renderItems(roots, 0)));
|
|
992
1208
|
};
|
|
993
1209
|
AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
|
|
994
1210
|
const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProps({
|
|
@@ -1000,9 +1216,9 @@ const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProp
|
|
|
1000
1216
|
return props.title;
|
|
1001
1217
|
},
|
|
1002
1218
|
children: title => _$ssr(_tmpl$12, _$escape(title()))
|
|
1003
|
-
})), _$ssr(_tmpl$
|
|
1219
|
+
})), _$ssr(_tmpl$34, _$ssrAttribute("data-columns", _$escape(props.columns ?? 2, true), false), _$escape(props.children))], false);
|
|
1004
1220
|
const AppWorkspaceSidebarIconAction = props => {
|
|
1005
|
-
const content = _$ssr(_tmpl$
|
|
1221
|
+
const content = _$ssr(_tmpl$35, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
|
|
1006
1222
|
const attrs = () => ({
|
|
1007
1223
|
class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
|
|
1008
1224
|
title: props.label,
|
|
@@ -1068,7 +1284,7 @@ const AppWorkspace = props => {
|
|
|
1068
1284
|
return props.resizable !== false;
|
|
1069
1285
|
},
|
|
1070
1286
|
get children() {
|
|
1071
|
-
return _$ssr(_tmpl$
|
|
1287
|
+
return _$ssr(_tmpl$36, `k2b-app-workspace ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-mobile-surface", _$escape(props.mobileSurface, true), false) + _$ssrAttribute("data-sidebar-collapsed", initialLayoutState()?.sidebarCollapsed === undefined ? _$escape(undefined, true) : _$escape(String(initialLayoutState()?.sidebarCollapsed), true), false) + _$ssrAttribute("data-workspace-resizable", props.resizable === false ? "false" : "true", false), _$ssrStyle(appWorkspaceLayoutStyle(initialLayoutState())), _$escape(props.children));
|
|
1072
1288
|
}
|
|
1073
1289
|
});
|
|
1074
1290
|
};
|
|
@@ -1080,7 +1296,7 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
|
|
|
1080
1296
|
return props.children;
|
|
1081
1297
|
}
|
|
1082
1298
|
});
|
|
1083
|
-
AppWorkspace.Content = props => _$ssr(_tmpl$
|
|
1299
|
+
AppWorkspace.Content = props => _$ssr(_tmpl$37, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
|
|
1084
1300
|
AppWorkspace.Main = AppWorkspaceMain;
|
|
1085
1301
|
AppWorkspace.MainPane = AppWorkspaceMainPane;
|
|
1086
1302
|
AppWorkspace.Detail = AppWorkspaceDetail;
|
|
@@ -1096,6 +1312,7 @@ AppWorkspace.SidebarItemLabel = AppWorkspaceSidebarItemLabel;
|
|
|
1096
1312
|
AppWorkspace.SidebarItemMeta = AppWorkspaceSidebarItemMeta;
|
|
1097
1313
|
AppWorkspace.SidebarItemAction = AppWorkspaceSidebarItemAction;
|
|
1098
1314
|
AppWorkspace.SidebarItemActions = AppWorkspaceSidebarItemActions;
|
|
1315
|
+
AppWorkspace.SidebarItemStatus = AppWorkspaceSidebarItemStatus;
|
|
1099
1316
|
AppWorkspace.NavTree = AppWorkspaceNavTree;
|
|
1100
1317
|
AppWorkspace.SidebarIconGrid = AppWorkspaceSidebarIconGrid;
|
|
1101
1318
|
AppWorkspace.SidebarIconAction = AppWorkspaceSidebarIconAction;
|