@k2b/ui 0.25.0 → 0.27.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/GestureMenu.js +2 -2
- package/dist/browser/actions/GestureMenu.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +811 -406
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/chat-behavior.js +4 -0
- package/dist/browser/chat/chat-behavior.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +14 -0
- package/dist/browser/chat/chat-messages.js.map +1 -1
- package/dist/browser/chat/command-search.js +170 -0
- package/dist/browser/chat/command-search.js.map +1 -0
- package/dist/browser/chat/composer-document.js +1 -1
- package/dist/browser/chat/composer-document.js.map +1 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Calendar.js +8 -7
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarDayView.js +32 -6
- package/dist/browser/content/CalendarDayView.js.map +1 -1
- package/dist/browser/content/CalendarWeekView.js +4 -3
- package/dist/browser/content/CalendarWeekView.js.map +1 -1
- package/dist/browser/content/Timeline.js +3 -3
- package/dist/browser/content/Timeline.js.map +1 -1
- package/dist/browser/content/calendar-time-view.js +0 -1
- package/dist/browser/content/calendar-time-view.js.map +1 -1
- package/dist/browser/index.js +1 -0
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/inputs/Combobox.js +26 -5
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/inputs/QrScanner.js +2 -1
- package/dist/browser/inputs/QrScanner.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js +43 -12
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +720 -528
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js +8 -0
- package/dist/browser/layout/BottomSheet.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +159 -27
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/app-workspace-state.js +5 -1
- package/dist/browser/layout/app-workspace-state.js.map +1 -1
- package/dist/browser/layout/index.js +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/scroll-fade.js +14 -9
- package/dist/browser/layout/scroll-fade.js.map +1 -1
- package/dist/browser/layout/sidebar-scroll-memory.js +38 -0
- package/dist/browser/layout/sidebar-scroll-memory.js.map +1 -0
- package/dist/browser/motion.js +7 -0
- package/dist/browser/motion.js.map +1 -0
- package/dist/ssr/actions/GestureMenu.js +2 -2
- package/dist/ssr/actions/GestureMenu.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +410 -93
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/chat-behavior.js +4 -0
- package/dist/ssr/chat/chat-behavior.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +14 -0
- package/dist/ssr/chat/chat-messages.js.map +1 -1
- package/dist/ssr/chat/command-search.js +170 -0
- package/dist/ssr/chat/command-search.js.map +1 -0
- package/dist/ssr/chat/composer-document.js +1 -1
- package/dist/ssr/chat/composer-document.js.map +1 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Calendar.js +8 -7
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarDayView.js +32 -6
- package/dist/ssr/content/CalendarDayView.js.map +1 -1
- package/dist/ssr/content/CalendarWeekView.js +4 -3
- package/dist/ssr/content/CalendarWeekView.js.map +1 -1
- package/dist/ssr/content/Timeline.js +3 -3
- package/dist/ssr/content/Timeline.js.map +1 -1
- package/dist/ssr/content/calendar-time-view.js +0 -1
- package/dist/ssr/content/calendar-time-view.js.map +1 -1
- package/dist/ssr/index.js +1 -0
- package/dist/ssr/index.js.map +1 -1
- package/dist/ssr/inputs/Combobox.js +22 -5
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/inputs/QrScanner.js +2 -1
- package/dist/ssr/inputs/QrScanner.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +35 -11
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +254 -118
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js +8 -0
- package/dist/ssr/layout/BottomSheet.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +159 -27
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/app-workspace-state.js +5 -1
- package/dist/ssr/layout/app-workspace-state.js.map +1 -1
- package/dist/ssr/layout/index.js +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/scroll-fade.js +14 -9
- package/dist/ssr/layout/scroll-fade.js.map +1 -1
- package/dist/ssr/layout/sidebar-scroll-memory.js +38 -0
- package/dist/ssr/layout/sidebar-scroll-memory.js.map +1 -0
- package/dist/ssr/motion.js +7 -0
- package/dist/ssr/motion.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/types/chat/ChatComposer.d.ts +44 -2
- package/dist/types/chat/chat-behavior.d.ts +4 -0
- package/dist/types/chat/chat-messages.d.ts +7 -0
- package/dist/types/chat/command-search.d.ts +39 -0
- package/dist/types/chat/index.d.ts +1 -1
- package/dist/types/content/calendar-time-view.d.ts +0 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/inputs/Combobox.d.ts +1 -0
- package/dist/types/inputs/SelectChip.d.ts +4 -0
- package/dist/types/layout/AppWorkspace.d.ts +13 -1
- package/dist/types/layout/BottomSheet.d.ts +8 -0
- package/dist/types/layout/index.d.ts +1 -1
- package/dist/types/layout/scroll-fade.d.ts +2 -0
- package/dist/types/layout/sidebar-scroll-memory.d.ts +6 -0
- package/dist/types/motion.d.ts +6 -0
- package/package.json +4 -4
|
@@ -8,62 +8,68 @@ import { ssrStyle as _$ssrStyle } from "solid-js/web";
|
|
|
8
8
|
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
9
9
|
import { escape as _$escape } from "solid-js/web";
|
|
10
10
|
var _tmpl$ = ["<button type=\"button\" class=\"k2b-app-workspace__resize\" role=\"separator\"", " style=\"", "\"><span aria-hidden=\"true\"></span></button>"],
|
|
11
|
-
_tmpl$2 = ["<
|
|
12
|
-
_tmpl$3 = ["<
|
|
13
|
-
_tmpl$4 = ["<
|
|
14
|
-
_tmpl$5 = ["<
|
|
15
|
-
_tmpl$6 = ["<
|
|
16
|
-
_tmpl$7 =
|
|
17
|
-
_tmpl$8 = ["<
|
|
18
|
-
_tmpl$9 = ["<
|
|
19
|
-
_tmpl$0 = ["<span aria-hidden=\"true\"
|
|
20
|
-
_tmpl$1 = ["<
|
|
21
|
-
_tmpl$10 = ["<
|
|
22
|
-
_tmpl$11 = ["<
|
|
23
|
-
_tmpl$12 = ["<
|
|
24
|
-
_tmpl$13 = ["<
|
|
25
|
-
_tmpl$14 = ["<
|
|
26
|
-
_tmpl$15 = ["<
|
|
27
|
-
_tmpl$16 = "<
|
|
28
|
-
_tmpl$17 = "<
|
|
29
|
-
_tmpl$18 = ["<
|
|
30
|
-
_tmpl$19 = ["<
|
|
31
|
-
_tmpl$20 = ["<
|
|
32
|
-
_tmpl$21 =
|
|
33
|
-
_tmpl$22 = "<span class=\"k2b-app-workspace__sidebar-status-
|
|
34
|
-
_tmpl$23 = ["<span class=\"k2b-app-workspace__sidebar-
|
|
35
|
-
_tmpl$24 = ["<span class=\"k2b-app-workspace__sidebar-
|
|
36
|
-
_tmpl$25 = ["<span class=\"k2b-
|
|
37
|
-
_tmpl$26 = ["<span class=\"k2b-app-workspace__sidebar-
|
|
38
|
-
_tmpl$27 =
|
|
39
|
-
_tmpl$28 = ["<span class=\"k2b-app-workspace__sidebar-item-
|
|
40
|
-
_tmpl$29 = ["<
|
|
41
|
-
_tmpl$30 = ["<
|
|
42
|
-
_tmpl$31 = ["<
|
|
43
|
-
_tmpl$32 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\"
|
|
44
|
-
_tmpl$33 = ["<span class=\"
|
|
45
|
-
_tmpl$34 = ["<
|
|
46
|
-
_tmpl$35 = ["<
|
|
47
|
-
_tmpl$36 = ["<
|
|
48
|
-
_tmpl$37 = ["<
|
|
49
|
-
_tmpl$38 = ["<
|
|
50
|
-
_tmpl$39 = ["<
|
|
51
|
-
_tmpl$40 = ["<
|
|
52
|
-
_tmpl$41 = "<
|
|
53
|
-
_tmpl$42 = ["<div class=\"k2b-app-
|
|
54
|
-
_tmpl$43 = ["<
|
|
55
|
-
_tmpl$44 = ["<div class=\"
|
|
56
|
-
_tmpl$45 = ["<
|
|
11
|
+
_tmpl$2 = ["<p>", "</p>"],
|
|
12
|
+
_tmpl$3 = ["<div class=\"k2b-app-workspace__level-actions\">", "</div>"],
|
|
13
|
+
_tmpl$4 = ["<header class=\"k2b-app-workspace__level-head\">", "<div class=\"k2b-app-workspace__level-title\"><h2 tabindex=\"-1\">", "</h2>", "</div>", "</header>"],
|
|
14
|
+
_tmpl$5 = ["<div class=\"k2b-app-workspace__main-primary\" data-workspace-main-region=\"main\"", ">", "</div>"],
|
|
15
|
+
_tmpl$6 = ["<section", " class=\"", "\"", " style=\"", "\">", "</section>"],
|
|
16
|
+
_tmpl$7 = "<i class=\"ti ti-chevron-left\" aria-hidden=\"true\"></i>",
|
|
17
|
+
_tmpl$8 = ["<div class=\"k2b-app-workspace__level-body\"", ">", "</div>"],
|
|
18
|
+
_tmpl$9 = ["<style>", "</style>"],
|
|
19
|
+
_tmpl$0 = ["<aside", " class=\"", "\"", "", " style=\"", "\"><button type=\"button\" class=\"k2b-app-workspace__detail-grabber\"", " aria-pressed=\"false\"><span aria-hidden=\"true\"></span></button>", "</aside>"],
|
|
20
|
+
_tmpl$1 = ["<aside", " class=\"", "\"", "", " style=\"", "\">", "</aside>"],
|
|
21
|
+
_tmpl$10 = ["<div class=\"k2b-app-workspace__sidebar-desktop\">", "</div>"],
|
|
22
|
+
_tmpl$11 = ["<aside", " class=\"", "\"", "", ">", "</aside>"],
|
|
23
|
+
_tmpl$12 = ["<script>", "</script>"],
|
|
24
|
+
_tmpl$13 = ["<span aria-hidden=\"true\"><i", "></i></span>"],
|
|
25
|
+
_tmpl$14 = ["<span class=\"k2b-app-workspace__sidebar-section-count\">", "</span>"],
|
|
26
|
+
_tmpl$15 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-section-toggle\"", ">", "<i", " aria-hidden=\"true\"></i></button>"],
|
|
27
|
+
_tmpl$16 = ["<div class=\"k2b-app-workspace__sidebar-section-actions\">", "</div>"],
|
|
28
|
+
_tmpl$17 = ["<header class=\"k2b-app-workspace__sidebar-section-header\">", "", "</header>"],
|
|
29
|
+
_tmpl$18 = ["<div", "", " class=\"k2b-app-workspace__sidebar-section-content\">", "</div>"],
|
|
30
|
+
_tmpl$19 = ["<h2>", "</h2>"],
|
|
31
|
+
_tmpl$20 = ["<div class=\"k2b-app-workspace__sidebar-item-actions\"", ">", "</div>"],
|
|
32
|
+
_tmpl$21 = "<span class=\"k2b-app-workspace__sidebar-status-mention\" aria-hidden=\"true\">@</span>",
|
|
33
|
+
_tmpl$22 = "<span class=\"k2b-app-workspace__sidebar-status-muted\" aria-hidden=\"true\"><i class=\"ti ti-bell-off\"></i></span>",
|
|
34
|
+
_tmpl$23 = ["<span class=\"k2b-app-workspace__sidebar-status-count\"", ">", "</span>"],
|
|
35
|
+
_tmpl$24 = ["<span class=\"k2b-app-workspace__sidebar-status-unread\" aria-hidden=\"true\">", "</span>"],
|
|
36
|
+
_tmpl$25 = ["<span class=\"k2b-sr-only\">, ", "</span>"],
|
|
37
|
+
_tmpl$26 = ["<span class=\"k2b-app-workspace__sidebar-status\"", ">", "</span>"],
|
|
38
|
+
_tmpl$27 = "<span class=\"k2b-app-workspace__sidebar-status-dot\"></span>",
|
|
39
|
+
_tmpl$28 = ["<span class=\"k2b-app-workspace__sidebar-item-icon\" aria-hidden=\"true\">", "</span>"],
|
|
40
|
+
_tmpl$29 = ["<span class=\"k2b-app-workspace__sidebar-item-context-meta\">", "</span>"],
|
|
41
|
+
_tmpl$30 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label\">", "</span>", "</span>"],
|
|
42
|
+
_tmpl$31 = ["<span class=\"k2b-app-workspace__sidebar-item-description\">", "</span>"],
|
|
43
|
+
_tmpl$32 = ["<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>"],
|
|
44
|
+
_tmpl$33 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
|
|
45
|
+
_tmpl$34 = ["<i", "></i>"],
|
|
46
|
+
_tmpl$35 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
|
|
47
|
+
_tmpl$36 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
|
|
48
|
+
_tmpl$37 = ["<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 class=\"k2b-app-workspace__sidebar-item-description\">", "</span></span>"],
|
|
49
|
+
_tmpl$38 = ["<span class=\"", "\"", ">", "</span>"],
|
|
50
|
+
_tmpl$39 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
|
|
51
|
+
_tmpl$40 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>"],
|
|
52
|
+
_tmpl$41 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
|
|
53
|
+
_tmpl$42 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", " style=\"", "\">", "", "</div>"],
|
|
54
|
+
_tmpl$43 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
|
|
55
|
+
_tmpl$44 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
|
|
56
|
+
_tmpl$45 = ["<i", " aria-hidden=\"true\"></i>"],
|
|
57
|
+
_tmpl$46 = "<i class=\"ti ti-layout-sidebar\" aria-hidden=\"true\"></i>",
|
|
58
|
+
_tmpl$47 = ["<div class=\"k2b-app-workspace__head\"", ">", "", "</div>"],
|
|
59
|
+
_tmpl$48 = ["<h1 class=\"k2b-app-workspace__head-heading\" data-k2b-page-trail-title", ">", "</h1>"],
|
|
60
|
+
_tmpl$49 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "", "</div>"],
|
|
61
|
+
_tmpl$50 = ["<div class=\"", "\">", "</div>"];
|
|
57
62
|
import { Link } from "@k2b/ssr/nav";
|
|
58
|
-
import { children, createContext, createEffect, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, useContext } from "solid-js";
|
|
63
|
+
import { children, createContext, createEffect, createMemo, createSignal, createUniqueId, For, mergeProps, on, onCleanup, onMount, Show, useContext } from "solid-js";
|
|
59
64
|
import { isServer } from "solid-js/web";
|
|
60
|
-
import { IconButton } from "../actions/Button";
|
|
65
|
+
import { IconButton, IconButtonLink } from "../actions/Button";
|
|
61
66
|
import { APP_WORKSPACE_DETAIL_CLOSE_EVENT, APP_WORKSPACE_DETAIL_STEP_EVENT, APP_WORKSPACE_SIDEBAR_HIDE_EVENT, installAppWorkspaceController } from "./app-workspace-controller";
|
|
62
67
|
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";
|
|
63
68
|
import { PageTitle, usePageTrail } from "./PageTitle";
|
|
64
69
|
import { SidebarItemPreview } from "./SidebarItemPreview";
|
|
65
70
|
import { AppWorkspaceSidebarSwitcher } from "./SidebarSwitcher";
|
|
66
|
-
import { createScrollFade } from "./scroll-fade";
|
|
71
|
+
import { createScrollFade, scrollFadeEdges } from "./scroll-fade";
|
|
72
|
+
import { rememberSidebarScroll } from "./sidebar-scroll-memory";
|
|
67
73
|
import { assertStableUiId, assertUniqueStableUiIds } from "./stable-id";
|
|
68
74
|
import { useWorkspaceMessages } from "./workspace-messages";
|
|
69
75
|
const ResizeContext = createContext(true);
|
|
@@ -91,7 +97,15 @@ const sidebarItemSlot = value => Boolean(value && typeof value === "object" && "
|
|
|
91
97
|
const navTreeItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === NAV_TREE_ITEM);
|
|
92
98
|
function ResizeHandle(props) {
|
|
93
99
|
const workspaceMessages = useWorkspaceMessages();
|
|
94
|
-
|
|
100
|
+
const workspace = useContext(WorkspaceContext);
|
|
101
|
+
const providerState = useContext(LayoutStateContext);
|
|
102
|
+
const initialSize = () => {
|
|
103
|
+
const state = workspace?.initialLayoutState() ?? providerState;
|
|
104
|
+
const id = props.panelId ?? "primary";
|
|
105
|
+
const size = props.kind === "sidebar" ? state?.sidebarCollapsed ? APP_WORKSPACE_SIDEBAR_COLLAPSED : state?.sidebarWidth : props.kind === "pane" ? state?.paneWidths?.[id] : props.kind === "detail" ? state?.detailWidths?.[id] : state?.drawerHeights?.[id];
|
|
106
|
+
return Math.min(props.maxSize, Math.max(props.minSize, size ?? props.defaultSize));
|
|
107
|
+
};
|
|
108
|
+
return _$ssr(_tmpl$, _$ssrAttribute("aria-label", _$escape(props.label ?? (props.kind === "sidebar" ? workspaceMessages().resizeNavigation : props.kind === "pane" ? workspaceMessages().resizeWorkspacePane : props.kind === "detail" ? workspaceMessages().resizeDetailPanel : workspaceMessages().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(initialSize(), true), false) + _$ssrAttribute("data-workspace-level-shown", _$escape(props.levelShown, 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));
|
|
95
109
|
}
|
|
96
110
|
|
|
97
111
|
/**
|
|
@@ -126,10 +140,41 @@ function AppWorkspaceMainPane(props) {
|
|
|
126
140
|
domId: `k2b-workspace-pane-${createUniqueId()}`
|
|
127
141
|
};
|
|
128
142
|
}
|
|
143
|
+
|
|
144
|
+
/** A level's head; `children` is its back step. It mounts and cleans up with its open pane. */
|
|
145
|
+
function LevelHead(props) {
|
|
146
|
+
// Read each slot once: every read of a JSX prop builds it again, and the
|
|
147
|
+
// server and the client would then disagree on hydration keys.
|
|
148
|
+
const description = children(() => props.description);
|
|
149
|
+
const actions = children(() => props.actions);
|
|
150
|
+
return _$ssr(_tmpl$4, _$escape(props.children), _$escape(props.label), _$escape(_$createComponent(Show, {
|
|
151
|
+
get when() {
|
|
152
|
+
return description();
|
|
153
|
+
},
|
|
154
|
+
get children() {
|
|
155
|
+
return _$ssr(_tmpl$2, _$escape(description()));
|
|
156
|
+
}
|
|
157
|
+
})), _$escape(_$createComponent(Show, {
|
|
158
|
+
get when() {
|
|
159
|
+
return actions();
|
|
160
|
+
},
|
|
161
|
+
get children() {
|
|
162
|
+
return _$ssr(_tmpl$3, _$escape(actions()));
|
|
163
|
+
}
|
|
164
|
+
})));
|
|
165
|
+
}
|
|
129
166
|
function AppWorkspaceMain(props) {
|
|
130
167
|
const rootResizable = useContext(ResizeContext);
|
|
168
|
+
const workspaceMessages = useWorkspaceMessages();
|
|
169
|
+
const levelsMode = createMemo(() => props.level !== undefined);
|
|
131
170
|
const resolved = children(() => props.children);
|
|
132
|
-
const values = createMemo(() =>
|
|
171
|
+
const values = createMemo(() => {
|
|
172
|
+
const all = flatten(resolved());
|
|
173
|
+
if (levelsMode() && all.some(value => !mainPaneSlot(value))) {
|
|
174
|
+
throw new Error("AppWorkspace.Main level requires only AppWorkspace.MainPane children.");
|
|
175
|
+
}
|
|
176
|
+
return all;
|
|
177
|
+
});
|
|
133
178
|
const paneIds = createMemo(() => {
|
|
134
179
|
const ids = values().filter(mainPaneSlot).map(slot => slot.props.id);
|
|
135
180
|
assertUniqueStableUiIds(ids, "AppWorkspace.MainPane id");
|
|
@@ -159,7 +204,48 @@ function AppWorkspaceMain(props) {
|
|
|
159
204
|
});
|
|
160
205
|
return result;
|
|
161
206
|
});
|
|
162
|
-
const
|
|
207
|
+
const levels = createMemo(() => {
|
|
208
|
+
const open = values().filter(mainPaneSlot).filter(slot => slot.props.open !== false);
|
|
209
|
+
if (levelsMode()) {
|
|
210
|
+
for (const pane of open.slice(0, -1)) {
|
|
211
|
+
if (!pane.props.href) throw new Error(`AppWorkspace.MainPane "${pane.props.id}" requires href before the last level.`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return open;
|
|
215
|
+
});
|
|
216
|
+
const depth = () => Math.max(1, levels().findIndex(pane => pane.props.id === props.level) + 1);
|
|
217
|
+
const levelClasses = (index, kind) => [1, 2, 3].filter(widthClass => {
|
|
218
|
+
const count = Math.min(widthClass, levels().length);
|
|
219
|
+
const end = Math.max(depth(), count);
|
|
220
|
+
const start = end - count + 1;
|
|
221
|
+
return kind === "first" ? index === start && index > 1 : kind === "last" ? index === end : kind === "handle" ? index >= start && index + 1 <= end : index >= start && index <= end;
|
|
222
|
+
}).join(" ");
|
|
223
|
+
const anchorRegion = createMemo(() => (levelsMode() ? regions().find(candidate => candidate.type === "pane" && candidate.slot === levels().at(-1)) : undefined) ?? regions().find(candidate => candidate.type === "primary") ?? regions().find(candidate => candidate.type === "pane" && candidate.slot.props.open !== false));
|
|
224
|
+
// A level change can hide the control that made it: the back step, or a row
|
|
225
|
+
// of a list that a phone no longer shows. Focus then moves to the title of
|
|
226
|
+
// the selected level, so keyboard and screen reader users keep their place.
|
|
227
|
+
// The back step to the first level unmounts, and focus has left with it by
|
|
228
|
+
// the time the level changes, so pressing it is remembered.
|
|
229
|
+
let mainElement;
|
|
230
|
+
let backStepFocused = false;
|
|
231
|
+
const navigateBack = event => {
|
|
232
|
+
backStepFocused = Boolean(mainElement?.contains(document.activeElement));
|
|
233
|
+
return props.onLevelNavigate?.(event);
|
|
234
|
+
};
|
|
235
|
+
createEffect(on(() => levelsMode() ? depth() : 0, current => {
|
|
236
|
+
const pressedBack = backStepFocused;
|
|
237
|
+
backStepFocused = false;
|
|
238
|
+
const focused = document.activeElement;
|
|
239
|
+
if (!current || !mainElement) return;
|
|
240
|
+
const lost = pressedBack && (!focused || focused === document.body);
|
|
241
|
+
const hidden = focused instanceof HTMLElement && mainElement.contains(focused) && focused.getClientRects().length === 0;
|
|
242
|
+
if (!lost && !hidden) return;
|
|
243
|
+
mainElement.querySelector(`:scope > [data-workspace-level="${current}"] > .k2b-app-workspace__level-head h2`)?.focus({
|
|
244
|
+
preventScroll: true
|
|
245
|
+
});
|
|
246
|
+
}, {
|
|
247
|
+
defer: true
|
|
248
|
+
}));
|
|
163
249
|
// Presence of a MainPane slot — not of an *open* one — decides the split
|
|
164
250
|
// layout. Deriving it from `regions()` made a workspace whose panes are all
|
|
165
251
|
// closed fall back to `resolved()`, which renders the raw slot objects.
|
|
@@ -168,8 +254,14 @@ function AppWorkspaceMain(props) {
|
|
|
168
254
|
get ["class"]() {
|
|
169
255
|
return `k2b-app-workspace__main ${hasPanes() ? "has-panes" : ""} ${props.class ?? ""}`;
|
|
170
256
|
},
|
|
257
|
+
get ["data-workspace-levels"]() {
|
|
258
|
+
return levelsMode() ? "" : undefined;
|
|
259
|
+
},
|
|
260
|
+
get ["data-workspace-level-count"]() {
|
|
261
|
+
return levelsMode() ? levels().length : undefined;
|
|
262
|
+
},
|
|
171
263
|
get ["data-mobile-pane"]() {
|
|
172
|
-
return props.mobilePane;
|
|
264
|
+
return levelsMode() ? undefined : props.mobilePane;
|
|
173
265
|
},
|
|
174
266
|
get ["data-width"]() {
|
|
175
267
|
return props.width === "content" ? "content" : undefined;
|
|
@@ -201,9 +293,11 @@ function AppWorkspaceMain(props) {
|
|
|
201
293
|
return props.mobilePane ?? (anchor?.type === "pane" ? anchor.slot.props.id : "main");
|
|
202
294
|
};
|
|
203
295
|
if (region.type === "primary") {
|
|
204
|
-
return _$ssr(_tmpl$
|
|
296
|
+
return _$ssr(_tmpl$5, _$ssrAttribute("data-workspace-mobile-active", activeMobilePane() === "main" ? "true" : "false", false), _$escape(region.children));
|
|
205
297
|
}
|
|
206
298
|
const pane = region.slot;
|
|
299
|
+
const levelIndex = () => levels().indexOf(pane) + 1;
|
|
300
|
+
const levelAttr = kind => levelsMode() ? levelClasses(levelIndex(), kind) : undefined;
|
|
207
301
|
const panelId = assertStableUiId(pane.props.id, "AppWorkspace.MainPane id");
|
|
208
302
|
const variable = appWorkspacePanelVariable("pane", panelId);
|
|
209
303
|
const isAnchor = () => region === anchorRegion();
|
|
@@ -211,9 +305,12 @@ function AppWorkspaceMain(props) {
|
|
|
211
305
|
const defaultSize = () => pane.props.defaultSize ?? APP_WORKSPACE_PANE_DEFAULT;
|
|
212
306
|
const minSize = () => pane.props.minSize ?? APP_WORKSPACE_PANE_MIN;
|
|
213
307
|
const maxSize = () => Math.max(minSize(), pane.props.maxSize ?? APP_WORKSPACE_PANE_MAX);
|
|
214
|
-
const before = () => region.index < (anchorRegion()?.index ?? 0);
|
|
308
|
+
const before = () => levelsMode() || region.index < (anchorRegion()?.index ?? 0);
|
|
215
309
|
const handle = () => _$createComponent(ResizeHandle, {
|
|
216
310
|
kind: "pane",
|
|
311
|
+
get levelShown() {
|
|
312
|
+
return levelAttr("handle");
|
|
313
|
+
},
|
|
217
314
|
get edge() {
|
|
218
315
|
return before() ? "end" : "start";
|
|
219
316
|
},
|
|
@@ -249,10 +346,50 @@ function AppWorkspaceMain(props) {
|
|
|
249
346
|
get children() {
|
|
250
347
|
return handle();
|
|
251
348
|
}
|
|
252
|
-
}), _$ssr(_tmpl$
|
|
253
|
-
|
|
349
|
+
}), _$ssr(_tmpl$6, _$ssrAttribute("id", _$escape(pane.domId, true), false), `k2b-app-workspace__main-pane ${isAnchor() ? "is-primary" : ""} ${_$escape(pane.props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(pane.props.label, true), false) + _$ssrAttribute("data-workspace-level", levelsMode() ? _$escape(levelIndex(), true) : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-level-shown", _$escape(levelAttr("shown"), true), false) + _$ssrAttribute("data-workspace-level-first", _$escape(levelAttr("first"), true), false) + _$ssrAttribute("data-workspace-level-last", _$escape(levelAttr("last"), true), false) + _$ssrAttribute("data-workspace-main-region", _$escape(pane.props.id, true), false) + _$ssrAttribute("data-workspace-mobile-active", (levelsMode() ? levelClasses(levelIndex(), "shown").split(" ").includes("1") : activeMobilePane() === pane.props.id) ? "true" : "false", false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId, true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-surface", pane.props.surface === "navigation" ? "navigation" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll", !levelsMode() && pane.props.scroll === false ? "false" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-mode", !levelsMode() && pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : _$escape(undefined, true), false), _$ssrStyle(isAnchor() ? undefined : {
|
|
350
|
+
// A stored width keeps to this pane's limits before the controller attaches.
|
|
351
|
+
"--k2b-workspace-panel-size": `clamp(${minSize()}px, var(${variable}, ${defaultSize()}px), ${maxSize()}px)`,
|
|
254
352
|
"--k2b-workspace-panel-min": `${minSize()}px`
|
|
255
|
-
}), _$escape(
|
|
353
|
+
}), levelsMode() ? _$escape([_$createComponent(LevelHead, {
|
|
354
|
+
get label() {
|
|
355
|
+
return pane.props.label;
|
|
356
|
+
},
|
|
357
|
+
get description() {
|
|
358
|
+
return pane.props.description;
|
|
359
|
+
},
|
|
360
|
+
get actions() {
|
|
361
|
+
return pane.props.actions;
|
|
362
|
+
},
|
|
363
|
+
get children() {
|
|
364
|
+
return _$createComponent(Show, {
|
|
365
|
+
get when() {
|
|
366
|
+
return _$memo(() => levelIndex() > 1)() && depth() > 1;
|
|
367
|
+
},
|
|
368
|
+
get children() {
|
|
369
|
+
return _$createComponent(IconButtonLink, {
|
|
370
|
+
"class": "k2b-app-workspace__level-back",
|
|
371
|
+
get href() {
|
|
372
|
+
return levels()[depth() - 2]?.props.href;
|
|
373
|
+
},
|
|
374
|
+
get label() {
|
|
375
|
+
return workspaceMessages().backTo({
|
|
376
|
+
page: levels()[levelIndex() - 2]?.props.label ?? ""
|
|
377
|
+
});
|
|
378
|
+
},
|
|
379
|
+
get navigation() {
|
|
380
|
+
return props.onLevelNavigate ? "enhanced" : "document";
|
|
381
|
+
},
|
|
382
|
+
get onNavigate() {
|
|
383
|
+
return props.onLevelNavigate ? navigateBack : undefined;
|
|
384
|
+
},
|
|
385
|
+
get children() {
|
|
386
|
+
return _$ssr(_tmpl$7);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
}), _$ssr(_tmpl$8, _$ssrAttribute("data-scroll", pane.props.scroll === false ? "false" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-mode", pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : _$escape(undefined, true), false), _$escape(pane.props.children))]) : _$escape(pane.props.children)), _$createComponent(Show, {
|
|
256
393
|
get when() {
|
|
257
394
|
return _$memo(() => !!resizable())() && before();
|
|
258
395
|
},
|
|
@@ -315,7 +452,7 @@ function AppWorkspaceDetail(props) {
|
|
|
315
452
|
aside?.removeEventListener(APP_WORKSPACE_DETAIL_STEP_EVENT, step);
|
|
316
453
|
});
|
|
317
454
|
});
|
|
318
|
-
return [_$ssr(_tmpl$
|
|
455
|
+
return [_$ssr(_tmpl$9, workspaceRule()), _$createComponent(Show, {
|
|
319
456
|
get when() {
|
|
320
457
|
return resizable();
|
|
321
458
|
},
|
|
@@ -343,7 +480,7 @@ function AppWorkspaceDetail(props) {
|
|
|
343
480
|
}
|
|
344
481
|
});
|
|
345
482
|
}
|
|
346
|
-
}), _$ssr(_tmpl$
|
|
483
|
+
}), _$ssr(_tmpl$0, _$ssrAttribute("id", _$escape(domId(), true), false), `k2b-app-workspace__detail ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-width", _$escape(props.width ?? "md", true), false) + _$ssrAttribute("data-workspace-detail-phone", props.phone === "page" ? "page" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId(), true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-workspace-detail-closable", props.onClose ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-steppable", props.onStep ? "true" : _$escape(undefined, true), false), _$ssrAttribute("hidden", !props.open, true), _$ssrStyle({
|
|
347
484
|
...sizeStyle(),
|
|
348
485
|
"view-transition-name": props.viewTransitionName
|
|
349
486
|
}), _$ssrAttribute("aria-label", _$escape(workspaceMessages().detailFullHeight, true), false), _$escape(props.children))];
|
|
@@ -394,7 +531,7 @@ function AppWorkspaceBottomDrawer(props) {
|
|
|
394
531
|
}
|
|
395
532
|
});
|
|
396
533
|
}
|
|
397
|
-
}), _$ssr(_tmpl$
|
|
534
|
+
}), _$ssr(_tmpl$1, _$ssrAttribute("id", _$escape(domId(), true), false), `k2b-app-workspace__drawer ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-height", _$escape(props.height ?? "md", true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId(), true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false), _$ssrAttribute("hidden", !props.open, true), _$ssrStyleProperty("--k2b-workspace-panel-size:", `var(${_$escape(variable(), true)}, ${_$escape(defaultHeight(), true)}px)`) + _$ssrStyleProperty(";view-transition-name:", _$escape(props.viewTransitionName, true)), _$escape(props.children))];
|
|
398
535
|
}
|
|
399
536
|
function AppWorkspaceSidebar(props) {
|
|
400
537
|
const rootResizable = useContext(ResizeContext);
|
|
@@ -418,12 +555,12 @@ function AppWorkspaceSidebar(props) {
|
|
|
418
555
|
aside?.addEventListener(APP_WORKSPACE_SIDEBAR_HIDE_EVENT, requestHide);
|
|
419
556
|
onCleanup(() => aside?.removeEventListener(APP_WORKSPACE_SIDEBAR_HIDE_EVENT, requestHide));
|
|
420
557
|
});
|
|
421
|
-
return [_$ssr(_tmpl$
|
|
558
|
+
return [_$ssr(_tmpl$11, _$ssrAttribute("id", _$escape(domId(), true), false), `k2b-app-workspace__sidebar ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.label, true), false), _$ssrAttribute("hidden", props.hidden || undefined, true) + _$ssrAttribute("data-mobile", props.mobile === "stacked" ? "stacked" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-workspace-collapsible", props.collapsible ? "true" : "false", false) + _$ssrAttribute("data-workspace-hideable", props.onHiddenChange ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
|
|
422
559
|
get when() {
|
|
423
560
|
return !props.hidden;
|
|
424
561
|
},
|
|
425
562
|
get children() {
|
|
426
|
-
return _$ssr(_tmpl$
|
|
563
|
+
return _$ssr(_tmpl$10, _$escape(desktop()?.children));
|
|
427
564
|
}
|
|
428
565
|
}))), _$createComponent(Show, {
|
|
429
566
|
get when() {
|
|
@@ -456,20 +593,18 @@ const AppWorkspaceSidebarDesktop = props => ({
|
|
|
456
593
|
kind: SIDEBAR_DESKTOP,
|
|
457
594
|
children: props.children
|
|
458
595
|
});
|
|
459
|
-
//
|
|
460
|
-
//
|
|
461
|
-
//
|
|
462
|
-
//
|
|
463
|
-
//
|
|
464
|
-
//
|
|
465
|
-
//
|
|
466
|
-
//
|
|
467
|
-
|
|
468
|
-
// repeats the restore once the whole document is parsed, because content that
|
|
469
|
-
// follows the sidebar can still change its height before the first paint.
|
|
470
|
-
const SIDEBAR_SCROLL_MEMORY_SCRIPT = ["(function(){", "var body=document.currentScript&&document.currentScript.previousElementSibling;if(!body)return;", "var storage;try{storage=window.sessionStorage}catch(_){return}", 'var key="k2b-sidebar-scroll:"+location.pathname.split("/")[1]+":"+document.querySelectorAll(".k2b-app-workspace__sidebar-body").length;', "var restore=function(){", "var stored=storage.getItem(key);if(stored!==null)body.scrollTop=Number(stored);", 'var current=body.querySelector(\'[aria-current="page"]\')||body.querySelector(\'[aria-current="true"]\');if(current)current.scrollIntoView({block:"nearest"});', "};", "restore();requestAnimationFrame(restore);", "var frame=0;", 'body.addEventListener("scroll",function(){if(frame)return;frame=requestAnimationFrame(function(){frame=0;try{storage.setItem(key,String(body.scrollTop))}catch(_){}})},{passive:true});', "})();"].join("");
|
|
596
|
+
// The inline script restores server markup while parsing; onMount restores a
|
|
597
|
+
// client-rendered sidebar when an island replaces it. Both paths keep the
|
|
598
|
+
// current item in view and set the fade before paint, repeating the restore
|
|
599
|
+
// in the first frame when the whole document has its final layout. Only
|
|
600
|
+
// pagehide stores the offset: restores before final layout can be clamped,
|
|
601
|
+
// and remembering those programmatic scrolls would shrink the stored offset.
|
|
602
|
+
// Memory is per scroll-preserve key (or page path) and sidebar position and
|
|
603
|
+
// ends with the tab.
|
|
604
|
+
const SIDEBAR_SCROLL_MEMORY_SCRIPT = `(${rememberSidebarScroll})(document.currentScript&&document.currentScript.previousElementSibling,${scrollFadeEdges})`;
|
|
471
605
|
const AppWorkspaceSidebarBody = props => {
|
|
472
606
|
let body;
|
|
607
|
+
onMount(() => onCleanup(rememberSidebarScroll(body, scrollFadeEdges)));
|
|
473
608
|
createScrollFade(() => body, () => props.scrollFade !== false);
|
|
474
609
|
return [_$ssrElement("div", _$mergeProps({
|
|
475
610
|
get ["class"]() {
|
|
@@ -478,7 +613,7 @@ const AppWorkspaceSidebarBody = props => {
|
|
|
478
613
|
get ["data-scroll-fade-mode"]() {
|
|
479
614
|
return props.scrollFade !== false ? "both" : undefined;
|
|
480
615
|
}
|
|
481
|
-
}, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), _$escape(props.children), false), _$ssr(_tmpl$
|
|
616
|
+
}, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), _$escape(props.children), false), _$ssr(_tmpl$12, SIDEBAR_SCROLL_MEMORY_SCRIPT)];
|
|
482
617
|
};
|
|
483
618
|
const AppWorkspaceSidebarFooter = props => _$ssrElement("footer", _$mergeProps({
|
|
484
619
|
get ["class"]() {
|
|
@@ -494,14 +629,14 @@ const AppWorkspaceSidebarSection = props => {
|
|
|
494
629
|
return props.icon;
|
|
495
630
|
},
|
|
496
631
|
get children() {
|
|
497
|
-
return _$ssr(_tmpl$
|
|
632
|
+
return _$ssr(_tmpl$13, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
|
|
498
633
|
}
|
|
499
634
|
}), props.title, _$createComponent(Show, {
|
|
500
635
|
get when() {
|
|
501
636
|
return props.count !== undefined;
|
|
502
637
|
},
|
|
503
638
|
get children() {
|
|
504
|
-
return _$ssr(_tmpl$
|
|
639
|
+
return _$ssr(_tmpl$14, _$escape(props.count));
|
|
505
640
|
}
|
|
506
641
|
})];
|
|
507
642
|
return _$ssrElement("section", _$mergeProps({
|
|
@@ -516,7 +651,7 @@ const AppWorkspaceSidebarSection = props => {
|
|
|
516
651
|
return props.title || props.actions;
|
|
517
652
|
},
|
|
518
653
|
get children() {
|
|
519
|
-
return _$ssr(_tmpl$
|
|
654
|
+
return _$ssr(_tmpl$17, _$escape(_$createComponent(Show, {
|
|
520
655
|
get when() {
|
|
521
656
|
return props.collapsible;
|
|
522
657
|
},
|
|
@@ -526,23 +661,23 @@ const AppWorkspaceSidebarSection = props => {
|
|
|
526
661
|
return props.title;
|
|
527
662
|
},
|
|
528
663
|
get children() {
|
|
529
|
-
return _$ssr(_tmpl$
|
|
664
|
+
return _$ssr(_tmpl$19, _$escape(title()));
|
|
530
665
|
}
|
|
531
666
|
});
|
|
532
667
|
},
|
|
533
668
|
get children() {
|
|
534
|
-
return _$ssr(_tmpl$
|
|
669
|
+
return _$ssr(_tmpl$15, _$ssrAttribute("aria-expanded", _$escape(open(), true), false) + _$ssrAttribute("aria-controls", _$escape(id, true), false), _$escape(title()), _$ssrAttribute("class", open() ? "ti ti-chevron-down" : "ti ti-chevron-right", false));
|
|
535
670
|
}
|
|
536
671
|
})), _$escape(_$createComponent(Show, {
|
|
537
672
|
get when() {
|
|
538
673
|
return props.actions;
|
|
539
674
|
},
|
|
540
675
|
get children() {
|
|
541
|
-
return _$ssr(_tmpl$
|
|
676
|
+
return _$ssr(_tmpl$16, _$escape(props.actions));
|
|
542
677
|
}
|
|
543
678
|
})));
|
|
544
679
|
}
|
|
545
|
-
})), _$ssr(_tmpl$
|
|
680
|
+
})), _$ssr(_tmpl$18, _$ssrAttribute("id", _$escape(id, true), false), _$ssrAttribute("hidden", !open(), true), _$escape(props.children))], false);
|
|
546
681
|
};
|
|
547
682
|
const AppWorkspaceSidebarItemIcon = props => mergeProps({
|
|
548
683
|
kind: SIDEBAR_ITEM_ICON
|
|
@@ -556,7 +691,7 @@ const AppWorkspaceSidebarItemMeta = props => mergeProps({
|
|
|
556
691
|
const AppWorkspaceSidebarItemAction = props => mergeProps({
|
|
557
692
|
kind: SIDEBAR_ITEM_ACTION
|
|
558
693
|
}, props);
|
|
559
|
-
const AppWorkspaceSidebarItemActions = props => _$ssr(_tmpl$
|
|
694
|
+
const AppWorkspaceSidebarItemActions = props => _$ssr(_tmpl$20, _$ssrAttribute("data-visibility", props.visibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(props.children));
|
|
560
695
|
const AppWorkspaceSidebarItemStatus = props => {
|
|
561
696
|
const workspaceMessages = useWorkspaceMessages();
|
|
562
697
|
const waiting = () => props.waiting && Number.isFinite(props.waiting.count) ? Math.max(0, Math.floor(props.waiting.count)) : null;
|
|
@@ -572,7 +707,7 @@ const AppWorkspaceSidebarItemStatus = props => {
|
|
|
572
707
|
// The element itself stays when there is nothing to show: empty, it takes no
|
|
573
708
|
// space, and it still keeps the row's label on one line, so the first count
|
|
574
709
|
// never re-wraps the label and moves the rows below.
|
|
575
|
-
return _$ssr(_tmpl$
|
|
710
|
+
return _$ssr(_tmpl$26, _$ssrAttribute("data-unread", waiting() !== null ? _$escape(undefined, true) : count() ? "count" : dot() ? "dot" : _$escape(undefined, true), false) + _$ssrAttribute("data-waiting", waiting() === null ? _$escape(undefined, true) : waiting() ? "count" : "zero", false), _$escape(_$createComponent(Show, {
|
|
576
711
|
get when() {
|
|
577
712
|
return description();
|
|
578
713
|
},
|
|
@@ -582,16 +717,16 @@ const AppWorkspaceSidebarItemStatus = props => {
|
|
|
582
717
|
return props.mention;
|
|
583
718
|
},
|
|
584
719
|
get children() {
|
|
585
|
-
return _$ssr(_tmpl$
|
|
720
|
+
return _$ssr(_tmpl$21);
|
|
586
721
|
}
|
|
587
722
|
}), _$createComponent(Show, {
|
|
588
723
|
get when() {
|
|
589
724
|
return props.muted;
|
|
590
725
|
},
|
|
591
726
|
get children() {
|
|
592
|
-
return _$ssr(_tmpl$
|
|
727
|
+
return _$ssr(_tmpl$22);
|
|
593
728
|
}
|
|
594
|
-
}), _$ssr(_tmpl$
|
|
729
|
+
}), _$ssr(_tmpl$24, _$escape(_$createComponent(Show, {
|
|
595
730
|
get when() {
|
|
596
731
|
return count() || waiting() === 0;
|
|
597
732
|
},
|
|
@@ -601,14 +736,14 @@ const AppWorkspaceSidebarItemStatus = props => {
|
|
|
601
736
|
return dot();
|
|
602
737
|
},
|
|
603
738
|
get children() {
|
|
604
|
-
return _$ssr(_tmpl$
|
|
739
|
+
return _$ssr(_tmpl$27);
|
|
605
740
|
}
|
|
606
741
|
});
|
|
607
742
|
},
|
|
608
743
|
get children() {
|
|
609
|
-
return _$ssr(_tmpl$
|
|
744
|
+
return _$ssr(_tmpl$23, _$ssrAttribute("data-mention", props.mention ? "true" : _$escape(undefined, true), false), count() > 99 ? "99+" : _$escape(count()));
|
|
610
745
|
}
|
|
611
|
-
}))), _$ssr(_tmpl$
|
|
746
|
+
}))), _$ssr(_tmpl$25, _$escape(description()))];
|
|
612
747
|
}
|
|
613
748
|
})));
|
|
614
749
|
};
|
|
@@ -748,19 +883,19 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
748
883
|
return iconContent() || icon();
|
|
749
884
|
},
|
|
750
885
|
get children() {
|
|
751
|
-
return _$ssr(_tmpl$
|
|
886
|
+
return _$ssr(_tmpl$28, _$escape(iconContent() ?? _$ssr(_tmpl$34, _$ssrAttribute("class", _$escape(iconClass(icon()), true), false))));
|
|
752
887
|
}
|
|
753
|
-
}), _$ssr(_tmpl$
|
|
888
|
+
}), _$ssr(_tmpl$32, _$escape(_$createComponent(Show, {
|
|
754
889
|
get when() {
|
|
755
890
|
return props.context || props.contextMeta;
|
|
756
891
|
},
|
|
757
892
|
get children() {
|
|
758
|
-
return _$ssr(_tmpl$
|
|
893
|
+
return _$ssr(_tmpl$30, _$escape(props.context), _$escape(_$createComponent(Show, {
|
|
759
894
|
get when() {
|
|
760
895
|
return props.contextMeta;
|
|
761
896
|
},
|
|
762
897
|
get children() {
|
|
763
|
-
return _$ssr(_tmpl$
|
|
898
|
+
return _$ssr(_tmpl$29, _$escape(props.contextMeta));
|
|
764
899
|
}
|
|
765
900
|
})));
|
|
766
901
|
}
|
|
@@ -769,14 +904,14 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
769
904
|
return props.description;
|
|
770
905
|
},
|
|
771
906
|
get children() {
|
|
772
|
-
return _$ssr(_tmpl$
|
|
907
|
+
return _$ssr(_tmpl$31, _$escape(props.description));
|
|
773
908
|
}
|
|
774
909
|
}))), _$createComponent(Show, {
|
|
775
910
|
get when() {
|
|
776
911
|
return hasMeta();
|
|
777
912
|
},
|
|
778
913
|
get children() {
|
|
779
|
-
return _$ssr(_tmpl$
|
|
914
|
+
return _$ssr(_tmpl$33, _$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()));
|
|
780
915
|
}
|
|
781
916
|
})];
|
|
782
917
|
const singleAction = () => {
|
|
@@ -791,7 +926,7 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
791
926
|
actionSlot()?.onSelect?.(event);
|
|
792
927
|
props.onActionClick?.(event);
|
|
793
928
|
};
|
|
794
|
-
const content = () => actionSlot()?.children ?? _$ssr(_tmpl$
|
|
929
|
+
const content = () => actionSlot()?.children ?? _$ssr(_tmpl$34, _$ssrAttribute("class", _$escape(iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots"), true), false));
|
|
795
930
|
return _$createComponent(Show, {
|
|
796
931
|
get when() {
|
|
797
932
|
return Boolean(actionSlot() || props.actionIcon);
|
|
@@ -802,10 +937,10 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
802
937
|
return _$memo(() => !!actionSlot()?.href)() && !actionSlot()?.disabled;
|
|
803
938
|
},
|
|
804
939
|
get fallback() {
|
|
805
|
-
return _$ssr(_tmpl$
|
|
940
|
+
return _$ssr(_tmpl$36, _$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()));
|
|
806
941
|
},
|
|
807
942
|
get children() {
|
|
808
|
-
return _$ssr(_tmpl$
|
|
943
|
+
return _$ssr(_tmpl$35, _$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()));
|
|
809
944
|
}
|
|
810
945
|
});
|
|
811
946
|
}
|
|
@@ -1111,31 +1246,31 @@ const AppWorkspaceNavTree = props => {
|
|
|
1111
1246
|
get ["data-k2b-nav-tree-toggle"]() {
|
|
1112
1247
|
return usesIconDisclosure() ? "" : undefined;
|
|
1113
1248
|
}
|
|
1114
|
-
}, () => iconAccessibility(item.iconLabel)), _$ssr(_tmpl$
|
|
1249
|
+
}, () => iconAccessibility(item.iconLabel)), _$ssr(_tmpl$34, _$ssrAttribute("class", _$escape(iconClass(rowIcon()), true), false)), false);
|
|
1115
1250
|
}
|
|
1116
1251
|
}), _$createComponent(Show, {
|
|
1117
1252
|
get when() {
|
|
1118
1253
|
return item.description !== undefined;
|
|
1119
1254
|
},
|
|
1120
1255
|
get fallback() {
|
|
1121
|
-
return _$ssr(_tmpl$
|
|
1256
|
+
return _$ssr(_tmpl$40, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label));
|
|
1122
1257
|
},
|
|
1123
1258
|
get children() {
|
|
1124
|
-
return _$ssr(_tmpl$
|
|
1259
|
+
return _$ssr(_tmpl$37, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label), _$escape(item.description));
|
|
1125
1260
|
}
|
|
1126
1261
|
}), _$createComponent(Show, {
|
|
1127
1262
|
get when() {
|
|
1128
1263
|
return item.meta !== undefined;
|
|
1129
1264
|
},
|
|
1130
1265
|
get children() {
|
|
1131
|
-
return _$ssr(_tmpl$
|
|
1266
|
+
return _$ssr(_tmpl$38, `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));
|
|
1132
1267
|
}
|
|
1133
1268
|
}), _$createComponent(Show, {
|
|
1134
1269
|
get when() {
|
|
1135
1270
|
return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
|
|
1136
1271
|
},
|
|
1137
1272
|
get children() {
|
|
1138
|
-
return _$ssr(_tmpl$
|
|
1273
|
+
return _$ssr(_tmpl$39, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`);
|
|
1139
1274
|
}
|
|
1140
1275
|
})];
|
|
1141
1276
|
const row = () => _$createComponent(AppWorkspaceSidebarRow, {
|
|
@@ -1242,12 +1377,12 @@ const AppWorkspaceNavTree = props => {
|
|
|
1242
1377
|
endDrag();
|
|
1243
1378
|
requestMove(target.move, false);
|
|
1244
1379
|
};
|
|
1245
|
-
return _$ssr(_tmpl$
|
|
1380
|
+
return _$ssr(_tmpl$42, _$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, {
|
|
1246
1381
|
get when() {
|
|
1247
1382
|
return _$memo(() => !!hasChildren())() && isExpanded(item.id);
|
|
1248
1383
|
},
|
|
1249
1384
|
get children() {
|
|
1250
|
-
return _$ssr(_tmpl$
|
|
1385
|
+
return _$ssr(_tmpl$41, _$escape(renderItems(nested, depth + 1, item.id)));
|
|
1251
1386
|
}
|
|
1252
1387
|
})));
|
|
1253
1388
|
}
|
|
@@ -1272,7 +1407,7 @@ const AppWorkspaceNavTree = props => {
|
|
|
1272
1407
|
doc?.removeEventListener("pointermove", forgetDrag, true);
|
|
1273
1408
|
});
|
|
1274
1409
|
});
|
|
1275
|
-
return _$ssr(_tmpl$
|
|
1410
|
+
return _$ssr(_tmpl$43, `k2b-app-workspace__nav-tree ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.ariaLabel, true), false), _$escape(renderItems(roots, 0)));
|
|
1276
1411
|
};
|
|
1277
1412
|
AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
|
|
1278
1413
|
const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProps({
|
|
@@ -1283,10 +1418,10 @@ const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProp
|
|
|
1283
1418
|
get when() {
|
|
1284
1419
|
return props.title;
|
|
1285
1420
|
},
|
|
1286
|
-
children: title => _$ssr(_tmpl$
|
|
1287
|
-
})), _$ssr(_tmpl$
|
|
1421
|
+
children: title => _$ssr(_tmpl$19, _$escape(title()))
|
|
1422
|
+
})), _$ssr(_tmpl$44, _$ssrAttribute("data-columns", _$escape(props.columns ?? 2, true), false), _$escape(props.children))], false);
|
|
1288
1423
|
const AppWorkspaceSidebarIconAction = props => {
|
|
1289
|
-
const content = _$ssr(_tmpl$
|
|
1424
|
+
const content = _$ssr(_tmpl$45, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
|
|
1290
1425
|
const attrs = () => ({
|
|
1291
1426
|
class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
|
|
1292
1427
|
title: props.label,
|
|
@@ -1344,7 +1479,7 @@ function AppWorkspaceHead(props) {
|
|
|
1344
1479
|
const messages = useWorkspaceMessages();
|
|
1345
1480
|
// A nested workspace is part of a page that already shows its title.
|
|
1346
1481
|
const trail = props.nested ? () => undefined : usePageTrail();
|
|
1347
|
-
return _$ssr(_tmpl$
|
|
1482
|
+
return _$ssr(_tmpl$47, _$ssrAttribute("data-trail", trail()?.ancestors.length ? "up" : trail() ? "title" : _$escape(undefined, true), false), _$escape(_$createComponent(IconButton, {
|
|
1348
1483
|
"class": "k2b-app-workspace__head-toggle",
|
|
1349
1484
|
get label() {
|
|
1350
1485
|
return messages().showNavigation;
|
|
@@ -1355,7 +1490,7 @@ function AppWorkspaceHead(props) {
|
|
|
1355
1490
|
"aria-expanded": "false",
|
|
1356
1491
|
"data-app-workspace-sidebar-toggle": "",
|
|
1357
1492
|
get children() {
|
|
1358
|
-
return _$ssr(_tmpl$
|
|
1493
|
+
return _$ssr(_tmpl$46);
|
|
1359
1494
|
}
|
|
1360
1495
|
})), _$escape(_$createComponent(Show, {
|
|
1361
1496
|
get when() {
|
|
@@ -1367,7 +1502,7 @@ function AppWorkspaceHead(props) {
|
|
|
1367
1502
|
},
|
|
1368
1503
|
as: "p",
|
|
1369
1504
|
fallback: true
|
|
1370
|
-
}), _$ssr(_tmpl$
|
|
1505
|
+
}), _$ssr(_tmpl$48, _$ssrAttribute("data-k2b-server", isServer ? "" : _$escape(undefined, true), false), _$escape(current().title))]
|
|
1371
1506
|
})));
|
|
1372
1507
|
}
|
|
1373
1508
|
const AppWorkspace = props => {
|
|
@@ -1375,11 +1510,12 @@ const AppWorkspace = props => {
|
|
|
1375
1510
|
const serverLayoutState = useContext(LayoutStateContext);
|
|
1376
1511
|
const nested = Boolean(useContext(WorkspaceContext));
|
|
1377
1512
|
const [sidebarId, setSidebarId] = createSignal(`k2b-workspace-sidebar-${createUniqueId()}`);
|
|
1513
|
+
const initialLayoutState = () => props.layoutState?.() ?? serverLayoutState;
|
|
1378
1514
|
const workspace = {
|
|
1379
1515
|
sidebarId: sidebarId(),
|
|
1380
|
-
setSidebarId
|
|
1516
|
+
setSidebarId,
|
|
1517
|
+
initialLayoutState
|
|
1381
1518
|
};
|
|
1382
|
-
const initialLayoutState = () => props.layoutState?.() ?? serverLayoutState;
|
|
1383
1519
|
|
|
1384
1520
|
// The resize handles are inert markup until the controller is attached, so
|
|
1385
1521
|
// the workspace attaches it itself and scopes it to this root. `onMount`
|
|
@@ -1402,7 +1538,7 @@ const AppWorkspace = props => {
|
|
|
1402
1538
|
return _$createComponent(WorkspaceContext.Provider, {
|
|
1403
1539
|
value: workspace,
|
|
1404
1540
|
get children() {
|
|
1405
|
-
return _$ssr(_tmpl$
|
|
1541
|
+
return _$ssr(_tmpl$49, `k2b-app-workspace ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-mobile-surface", _$escape(props.mobileSurface, true), false) + _$ssrAttribute("data-flat", props.flat ? "true" : _$escape(undefined, 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(_$createComponent(AppWorkspaceHead, {
|
|
1406
1542
|
sidebarId: sidebarId,
|
|
1407
1543
|
nested: nested
|
|
1408
1544
|
})), _$escape(props.children));
|
|
@@ -1419,7 +1555,7 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
|
|
|
1419
1555
|
return props.children;
|
|
1420
1556
|
}
|
|
1421
1557
|
});
|
|
1422
|
-
AppWorkspace.Content = props => _$ssr(_tmpl$
|
|
1558
|
+
AppWorkspace.Content = props => _$ssr(_tmpl$50, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
|
|
1423
1559
|
AppWorkspace.Main = AppWorkspaceMain;
|
|
1424
1560
|
AppWorkspace.MainPane = AppWorkspaceMainPane;
|
|
1425
1561
|
AppWorkspace.Detail = AppWorkspaceDetail;
|