@k2b/ui 0.46.0 → 0.47.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.
Files changed (54) hide show
  1. package/dist/browser/chat/ChatDecision.js +10 -6
  2. package/dist/browser/chat/ChatDecision.js.map +1 -1
  3. package/dist/browser/content/VirtualFeed.js +26 -21
  4. package/dist/browser/content/VirtualFeed.js.map +1 -1
  5. package/dist/browser/inputs/Combobox.js +14 -6
  6. package/dist/browser/inputs/Combobox.js.map +1 -1
  7. package/dist/browser/layout/AnchoredPopover.js +2 -1
  8. package/dist/browser/layout/AnchoredPopover.js.map +1 -1
  9. package/dist/browser/layout/AppWorkspace.js +340 -440
  10. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  11. package/dist/browser/layout/AppWorkspaceSidebarItemStatus.js +113 -0
  12. package/dist/browser/layout/AppWorkspaceSidebarItemStatus.js.map +1 -0
  13. package/dist/browser/layout/DetailPanel.js +1 -1
  14. package/dist/browser/layout/DetailPanel.js.map +1 -1
  15. package/dist/browser/layout/DetailSections.js +236 -132
  16. package/dist/browser/layout/DetailSections.js.map +1 -1
  17. package/dist/browser/layout/MobileShell.js +30 -13
  18. package/dist/browser/layout/MobileShell.js.map +1 -1
  19. package/dist/browser/layout/detail-sections-messages.js +4 -0
  20. package/dist/browser/layout/detail-sections-messages.js.map +1 -1
  21. package/dist/browser/layout/index.js +1 -0
  22. package/dist/browser/layout/index.js.map +1 -1
  23. package/dist/ssr/chat/ChatDecision.js +10 -6
  24. package/dist/ssr/chat/ChatDecision.js.map +1 -1
  25. package/dist/ssr/content/VirtualFeed.js +26 -21
  26. package/dist/ssr/content/VirtualFeed.js.map +1 -1
  27. package/dist/ssr/inputs/Combobox.js +6 -3
  28. package/dist/ssr/inputs/Combobox.js.map +1 -1
  29. package/dist/ssr/layout/AnchoredPopover.js +2 -1
  30. package/dist/ssr/layout/AnchoredPopover.js.map +1 -1
  31. package/dist/ssr/layout/AppWorkspace.js +61 -127
  32. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  33. package/dist/ssr/layout/AppWorkspaceSidebarItemStatus.js +76 -0
  34. package/dist/ssr/layout/AppWorkspaceSidebarItemStatus.js.map +1 -0
  35. package/dist/ssr/layout/DetailPanel.js +1 -1
  36. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  37. package/dist/ssr/layout/DetailSections.js +126 -50
  38. package/dist/ssr/layout/DetailSections.js.map +1 -1
  39. package/dist/ssr/layout/MobileShell.js +16 -2
  40. package/dist/ssr/layout/MobileShell.js.map +1 -1
  41. package/dist/ssr/layout/detail-sections-messages.js +4 -0
  42. package/dist/ssr/layout/detail-sections-messages.js.map +1 -1
  43. package/dist/ssr/layout/index.js +1 -0
  44. package/dist/ssr/layout/index.js.map +1 -1
  45. package/dist/styles.css +1 -1
  46. package/dist/types/chat/ChatDecision.d.ts +5 -0
  47. package/dist/types/inputs/Combobox.d.ts +2 -0
  48. package/dist/types/layout/AppWorkspace.d.ts +2 -28
  49. package/dist/types/layout/AppWorkspaceSidebarItemStatus.d.ts +30 -0
  50. package/dist/types/layout/DetailSections.d.ts +32 -2
  51. package/dist/types/layout/MobileShell.d.ts +12 -0
  52. package/dist/types/layout/detail-sections-messages.d.ts +2 -0
  53. package/dist/types/layout/index.d.ts +1 -0
  54. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["layout/AnchoredPopover.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\n\nexport type AnchoredPopoverProps = {\n /** The control the panel belongs to. The panel is open while this is set. */\n anchor: HTMLElement | null | undefined;\n /** Called on Escape, a click outside, another press of the anchor, and when the anchor leaves the page. */\n onClose: () => void;\n /** The panel's accessible name; it is a non-modal dialog. */\n label: string;\n children: JSX.Element;\n /** Which edge lines up with the anchor. Defaults to `end`, like a menu at the end of a toolbar. */\n align?: \"start\" | \"end\";\n /** The side tried first; the panel flips only when the other side has more room. Defaults to `below`. */\n side?: \"below\" | \"above\";\n /**\n * The tallest the panel gets while open, in px, such as a list it can switch to. The side is chosen for this height\n * and kept, so a panel that grows never flips. Defaults to its height when it opens.\n */\n plannedHeight?: number;\n /** Width of the panel on wide screens, such as `21rem`. On a phone it is a bottom sheet across the screen. */\n width?: string;\n /**\n * `false` keeps a small notice beside its control on a phone too, inside the screen with a margin, instead of a\n * bottom sheet that would cover the control. Defaults to `true`.\n */\n sheet?: boolean;\n /** Moves the focus into the panel when it opens; defaults to the panel itself. */\n initialFocus?: () => HTMLElement | null | undefined;\n class?: string;\n};\n\nconst GAP = 6;\nconst MARGIN = 8;\nconst sheetQuery = \"(max-width: 47.999rem)\";\n\n/**\n * A panel anchored to a control, for content that is more than a menu, such as a card with a slider. It opens on the\n * side with room and keeps that side while open, so a panel that changes its content never jumps to the other side.\n * Escape, a click outside and another press of the anchor close it; the focus returns to where it was. On a phone it\n * is a bottom sheet.\n */\nexport function AnchoredPopover(props: AnchoredPopoverProps): JSX.Element {\n let surface: HTMLDivElement | undefined;\n let previous: HTMLElement | null = null;\n let ring = false;\n let pressedAnchor: HTMLElement | undefined;\n /** The side chosen when the panel opened; kept until it closes. */\n let openedAbove: boolean | undefined;\n const [shown, setShown] = createSignal<HTMLElement>();\n const [sheet, setSheet] = createSignal(false);\n\n const place = () => {\n const anchor = shown();\n if (!surface || !anchor) return;\n if (!anchor.isConnected) {\n hide();\n props.onClose();\n return;\n }\n if (sheet()) {\n surface.style.left = \"\";\n surface.style.top = \"\";\n return;\n }\n const viewport = window.visualViewport;\n const view = {\n top: (viewport?.offsetTop ?? 0) + MARGIN,\n bottom: (viewport ? viewport.offsetTop + viewport.height : window.innerHeight) - MARGIN,\n left: (viewport?.offsetLeft ?? 0) + MARGIN,\n right: (viewport ? viewport.offsetLeft + viewport.width : window.innerWidth) - MARGIN,\n };\n const box = anchor.getBoundingClientRect();\n const size = surface.getBoundingClientRect();\n const roomAbove = box.top - GAP - view.top;\n const roomBelow = view.bottom - box.bottom - GAP;\n if (openedAbove === undefined) {\n const planned = Math.max(size.height, props.plannedHeight ?? 0);\n openedAbove =\n (props.side ?? \"below\") === \"above\" ? planned <= roomAbove || roomAbove > roomBelow : planned > roomBelow && roomAbove > roomBelow;\n }\n surface.style.setProperty(\"--k2b-anchored-popover-room\", `${Math.round(Math.max(120, openedAbove ? roomAbove : roomBelow))}px`);\n const top = openedAbove ? box.top - GAP - size.height : box.bottom + GAP;\n const left = (props.align ?? \"end\") === \"end\" ? box.right - size.width : box.left;\n surface.style.left = `${Math.round(Math.max(view.left, Math.min(left, view.right - size.width)))}px`;\n surface.style.top = `${Math.round(Math.max(view.top, Math.min(top, view.bottom - size.height)))}px`;\n };\n\n const restoreFocus = () => {\n const focused = document.activeElement;\n if (focused && focused !== document.body && !surface?.contains(focused)) return;\n if (previous?.isConnected) returnFocus(previous, ring);\n };\n\n const hide = () => {\n restoreFocus();\n if (surface?.matches(\":popover-open\")) surface.hidePopover();\n openedAbove = undefined;\n setShown(undefined);\n };\n\n const pressed = (event: PointerEvent) => {\n const anchor = shown();\n pressedAnchor = anchor && event.target instanceof Node && anchor.contains(event.target) ? anchor : undefined;\n };\n const clicked = (event: MouseEvent) => {\n const anchor = shown();\n if (!anchor || !(event.target instanceof Node) || !anchor.contains(event.target)) return;\n pressedAnchor = anchor;\n hide();\n props.onClose();\n };\n\n createEffect(() => {\n const anchor = props.anchor ?? undefined;\n untrack(() => {\n if (!anchor) {\n if (shown()) hide();\n return;\n }\n if (anchor === pressedAnchor) {\n pressedAnchor = undefined;\n props.onClose();\n return;\n }\n if (shown() === anchor || !surface) return;\n if (!shown()) {\n previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n ring = ringOnReturn(previous ?? anchor);\n }\n setSheet(props.sheet !== false && typeof matchMedia === \"function\" && matchMedia(sheetQuery).matches);\n setShown(anchor);\n if (!surface.matches(\":popover-open\")) surface.showPopover();\n place();\n queueMicrotask(() => (props.initialFocus?.() ?? surface)?.focus({ preventScroll: true }));\n });\n });\n\n const scrolled = (event: Event) => {\n if (!(event.target instanceof Node && surface?.contains(event.target))) place();\n };\n\n onMount(() => {\n window.addEventListener(\"resize\", place);\n window.addEventListener(\"scroll\", scrolled, true);\n window.visualViewport?.addEventListener(\"resize\", place);\n document.addEventListener(\"pointerdown\", pressed, true);\n document.addEventListener(\"click\", clicked, true);\n const observer = typeof ResizeObserver === \"function\" && surface ? new ResizeObserver(place) : undefined;\n if (surface) observer?.observe(surface);\n onCleanup(() => {\n observer?.disconnect();\n window.removeEventListener(\"resize\", place);\n window.removeEventListener(\"scroll\", scrolled, true);\n window.visualViewport?.removeEventListener(\"resize\", place);\n document.removeEventListener(\"pointerdown\", pressed, true);\n document.removeEventListener(\"click\", clicked, true);\n if (surface?.matches(\":popover-open\")) hide();\n });\n });\n\n return (\n <div\n ref={surface}\n popover=\"auto\"\n role=\"dialog\"\n aria-label={props.label}\n tabIndex={-1}\n class={[\"k2b-anchored-popover\", props.class].filter(Boolean).join(\" \")}\n data-sheet={sheet() ? \"\" : undefined}\n style={props.width ? { \"--k2b-anchored-popover-width\": props.width } : undefined}\n onToggle={(event) => {\n if ((event as ToggleEvent).newState === \"open\") return;\n if (shown()) {\n openedAbove = undefined;\n setShown(undefined);\n restoreFocus();\n props.onClose();\n }\n setTimeout(() => {\n pressedAnchor = undefined;\n });\n }}\n >\n <Show when={shown()}>{props.children}</Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/AnchoredPopover.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\n\nexport type AnchoredPopoverProps = {\n /** The control the panel belongs to. The panel is open while this is set. */\n anchor: HTMLElement | null | undefined;\n /** Called on Escape, a click outside, another press of the anchor, and when the anchor leaves the page. */\n onClose: () => void;\n /** The panel's accessible name; it is a non-modal dialog. */\n label: string;\n children: JSX.Element;\n /** Which edge lines up with the anchor. Defaults to `end`, like a menu at the end of a toolbar. */\n align?: \"start\" | \"end\";\n /** The side tried first; the panel flips only when the other side has more room. Defaults to `below`. */\n side?: \"below\" | \"above\";\n /**\n * The tallest the panel gets while open, in px, such as a list it can switch to. The side is chosen for this height\n * and kept, so a panel that grows never flips. Defaults to its height when it opens.\n */\n plannedHeight?: number;\n /** Width of the panel on wide screens, such as `21rem`. On a phone it is a bottom sheet across the screen. */\n width?: string;\n /**\n * `false` keeps a small notice beside its control on a phone too, inside the screen with a margin, instead of a\n * bottom sheet that would cover the control. Defaults to `true`.\n */\n sheet?: boolean;\n /** Moves the focus into the panel when it opens; defaults to the panel itself. */\n initialFocus?: () => HTMLElement | null | undefined;\n class?: string;\n};\n\nconst GAP = 6;\nconst MARGIN = 8;\nconst sheetQuery = \"(max-width: 47.999rem)\";\n\n/**\n * A panel anchored to a control, for content that is more than a menu, such as a card with a slider. It opens on the\n * side with room and keeps that side while open, so a panel that changes its content never jumps to the other side.\n * Escape, a click outside and another press of the anchor close it; the focus returns to where it was. On a phone it\n * is a bottom sheet.\n */\nexport function AnchoredPopover(props: AnchoredPopoverProps): JSX.Element {\n let surface: HTMLDivElement | undefined;\n let previous: HTMLElement | null = null;\n let ring = false;\n let pressedAnchor: HTMLElement | undefined;\n /** The side chosen when the panel opened; kept until it closes. */\n let openedAbove: boolean | undefined;\n const [shown, setShown] = createSignal<HTMLElement>();\n const [sheet, setSheet] = createSignal(false);\n\n const place = () => {\n const anchor = shown();\n if (!surface || !anchor) return;\n if (!anchor.isConnected) {\n hide();\n props.onClose();\n return;\n }\n if (sheet()) {\n surface.style.left = \"\";\n surface.style.top = \"\";\n return;\n }\n const viewport = window.visualViewport;\n const view = {\n top: (viewport?.offsetTop ?? 0) + MARGIN,\n bottom: (viewport ? viewport.offsetTop + viewport.height : window.innerHeight) - MARGIN,\n left: (viewport?.offsetLeft ?? 0) + MARGIN,\n right: (viewport ? viewport.offsetLeft + viewport.width : window.innerWidth) - MARGIN,\n };\n const box = anchor.getBoundingClientRect();\n const size = surface.getBoundingClientRect();\n const roomAbove = box.top - GAP - view.top;\n const roomBelow = view.bottom - box.bottom - GAP;\n if (openedAbove === undefined) {\n const planned = Math.max(size.height, props.plannedHeight ?? 0);\n openedAbove =\n (props.side ?? \"below\") === \"above\" ? planned <= roomAbove || roomAbove > roomBelow : planned > roomBelow && roomAbove > roomBelow;\n }\n surface.style.setProperty(\"--k2b-anchored-popover-room\", `${Math.round(Math.max(120, openedAbove ? roomAbove : roomBelow))}px`);\n const top = openedAbove ? box.top - GAP - size.height : box.bottom + GAP;\n const left = (props.align ?? \"end\") === \"end\" ? box.right - size.width : box.left;\n surface.style.left = `${Math.round(Math.max(view.left, Math.min(left, view.right - size.width)))}px`;\n surface.style.top = `${Math.round(Math.max(view.top, Math.min(top, view.bottom - size.height)))}px`;\n };\n\n const restoreFocus = () => {\n const focused = document.activeElement;\n if (focused && focused !== document.body && !surface?.contains(focused)) return;\n if (previous?.isConnected) returnFocus(previous, ring);\n };\n\n const hide = () => {\n restoreFocus();\n if (surface?.matches(\":popover-open\")) surface.hidePopover();\n openedAbove = undefined;\n setShown(undefined);\n };\n\n const pressed = (event: PointerEvent) => {\n const anchor = shown();\n pressedAnchor = anchor && event.target instanceof Node && anchor.contains(event.target) ? anchor : undefined;\n };\n const clicked = (event: MouseEvent) => {\n const anchor = shown();\n if (!anchor || !(event.target instanceof Node) || !anchor.contains(event.target)) return;\n pressedAnchor = anchor;\n hide();\n props.onClose();\n };\n\n createEffect(() => {\n const anchor = props.anchor ?? undefined;\n untrack(() => {\n if (!anchor) {\n if (shown()) hide();\n return;\n }\n if (anchor === pressedAnchor) {\n pressedAnchor = undefined;\n props.onClose();\n return;\n }\n if (shown() === anchor || !surface) return;\n if (!shown()) {\n previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n ring = ringOnReturn(previous ?? anchor);\n }\n setSheet(props.sheet !== false && typeof matchMedia === \"function\" && matchMedia(sheetQuery).matches);\n setShown(anchor);\n // Without the popover API, as in test DOMs, the panel stays in the flow instead of the top layer.\n if (!surface.matches(\":popover-open\") && typeof surface.showPopover === \"function\") surface.showPopover();\n place();\n queueMicrotask(() => (props.initialFocus?.() ?? surface)?.focus({ preventScroll: true }));\n });\n });\n\n const scrolled = (event: Event) => {\n if (!(event.target instanceof Node && surface?.contains(event.target))) place();\n };\n\n onMount(() => {\n window.addEventListener(\"resize\", place);\n window.addEventListener(\"scroll\", scrolled, true);\n window.visualViewport?.addEventListener(\"resize\", place);\n document.addEventListener(\"pointerdown\", pressed, true);\n document.addEventListener(\"click\", clicked, true);\n const observer = typeof ResizeObserver === \"function\" && surface ? new ResizeObserver(place) : undefined;\n if (surface) observer?.observe(surface);\n onCleanup(() => {\n observer?.disconnect();\n window.removeEventListener(\"resize\", place);\n window.removeEventListener(\"scroll\", scrolled, true);\n window.visualViewport?.removeEventListener(\"resize\", place);\n document.removeEventListener(\"pointerdown\", pressed, true);\n document.removeEventListener(\"click\", clicked, true);\n if (surface?.matches(\":popover-open\")) hide();\n });\n });\n\n return (\n <div\n ref={surface}\n popover=\"auto\"\n role=\"dialog\"\n aria-label={props.label}\n tabIndex={-1}\n class={[\"k2b-anchored-popover\", props.class].filter(Boolean).join(\" \")}\n data-sheet={sheet() ? \"\" : undefined}\n style={props.width ? { \"--k2b-anchored-popover-width\": props.width } : undefined}\n onToggle={(event) => {\n if ((event as ToggleEvent).newState === \"open\") return;\n if (shown()) {\n openedAbove = undefined;\n setShown(undefined);\n restoreFocus();\n props.onClose();\n }\n setTimeout(() => {\n pressedAnchor = undefined;\n });\n }}\n >\n <Show when={shown()}>{props.children}</Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -32,42 +32,36 @@ var _tmpl$ = ["<button type=\"button\" class=\"k2b-app-workspace__resize\" role=
32
32
  _tmpl$21 = ["<div", "", " class=\"k2b-app-workspace__sidebar-section-content\">", "</div>"],
33
33
  _tmpl$22 = ["<h2>", "</h2>"],
34
34
  _tmpl$23 = ["<div class=\"k2b-app-workspace__sidebar-item-actions\"", ">", "</div>"],
35
- _tmpl$24 = "<span class=\"k2b-app-workspace__sidebar-status-mention\" aria-hidden=\"true\">@</span>",
36
- _tmpl$25 = "<span class=\"k2b-app-workspace__sidebar-status-muted\" aria-hidden=\"true\"><i class=\"ti ti-bell-off\"></i></span>",
37
- _tmpl$26 = ["<span class=\"k2b-app-workspace__sidebar-status-count\"", ">", "</span>"],
38
- _tmpl$27 = ["<span class=\"k2b-app-workspace__sidebar-status-unread\" aria-hidden=\"true\">", "</span>"],
39
- _tmpl$28 = ["<span class=\"k2b-sr-only\">, ", "</span>"],
40
- _tmpl$29 = ["<span class=\"k2b-app-workspace__sidebar-status\"", ">", "</span>"],
41
- _tmpl$30 = "<span class=\"k2b-app-workspace__sidebar-status-dot\"></span>",
42
- _tmpl$31 = ["<span", " aria-hidden=\"true\">", "</span>"],
43
- _tmpl$32 = ["<span class=\"k2b-app-workspace__sidebar-item-context-meta\">", "</span>"],
44
- _tmpl$33 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label k2b-truncate-fade\">", "</span>", "</span>"],
45
- _tmpl$34 = ["<span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span>"],
46
- _tmpl$35 = ["<span class=\"k2b-app-workspace__sidebar-item-note k2b-truncate-fade\"", ">", "</span>"],
47
- _tmpl$36 = ["<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 k2b-truncate-fade-lines\">", "</span></span>", "", "</span>"],
48
- _tmpl$37 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
49
- _tmpl$38 = ["<i", "></i>"],
50
- _tmpl$39 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
51
- _tmpl$40 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
52
- _tmpl$41 = ["<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 k2b-truncate-fade-lines\">", "</span></span><span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span></span>"],
53
- _tmpl$42 = ["<span class=\"", "\"", ">", "</span>"],
54
- _tmpl$43 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
55
- _tmpl$44 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span>"],
56
- _tmpl$45 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
57
- _tmpl$46 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", " style=\"", "\">", "", "</div>"],
58
- _tmpl$47 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
59
- _tmpl$48 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
60
- _tmpl$49 = "<i class=\"ti ti-chevron-down k2b-app-workspace__head-primary-chevron\" aria-hidden=\"true\"></i>",
61
- _tmpl$50 = ["<span class=\"k2b-app-workspace__head-primary-label\">", "", "</span>"],
62
- _tmpl$51 = "<i class=\"ti ti-layout-sidebar\" aria-hidden=\"true\"></i>",
63
- _tmpl$52 = ["<div class=\"k2b-app-workspace__head-views\">", "</div>"],
64
- _tmpl$53 = ["<div class=\"k2b-app-workspace__head-filters\" role=\"group\"", ">", "", "</div>"],
65
- _tmpl$54 = ["<span class=\"k2b-app-workspace__head-count\"><span>", "</span></span>"],
66
- _tmpl$55 = ["<div class=\"k2b-app-workspace__head-actions\">", "", "</div>"],
67
- _tmpl$56 = ["<div class=\"k2b-app-workspace__head\"", ">", "<div class=\"k2b-app-workspace__head-lead\">", "", "", "", "", "</div>", "</div>"],
68
- _tmpl$57 = ["<h1 class=\"k2b-app-workspace__head-heading\" data-k2b-page-trail-title", ">", "</h1>"],
69
- _tmpl$58 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "</div>"],
70
- _tmpl$59 = ["<div class=\"", "\">", "</div>"];
35
+ _tmpl$24 = ["<span", " aria-hidden=\"true\">", "</span>"],
36
+ _tmpl$25 = ["<span class=\"k2b-app-workspace__sidebar-item-context-meta\">", "</span>"],
37
+ _tmpl$26 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label k2b-truncate-fade\">", "</span>", "</span>"],
38
+ _tmpl$27 = ["<span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span>"],
39
+ _tmpl$28 = ["<span class=\"k2b-app-workspace__sidebar-item-note k2b-truncate-fade\"", ">", "</span>"],
40
+ _tmpl$29 = ["<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 k2b-truncate-fade-lines\">", "</span></span>", "", "</span>"],
41
+ _tmpl$30 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
42
+ _tmpl$31 = ["<i", "></i>"],
43
+ _tmpl$32 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
44
+ _tmpl$33 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
45
+ _tmpl$34 = ["<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 k2b-truncate-fade-lines\">", "</span></span><span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span></span>"],
46
+ _tmpl$35 = ["<span class=\"", "\"", ">", "</span>"],
47
+ _tmpl$36 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
48
+ _tmpl$37 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span>"],
49
+ _tmpl$38 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
50
+ _tmpl$39 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", " style=\"", "\">", "", "</div>"],
51
+ _tmpl$40 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
52
+ _tmpl$41 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
53
+ _tmpl$42 = "<i class=\"ti ti-chevron-down k2b-app-workspace__head-primary-chevron\" aria-hidden=\"true\"></i>",
54
+ _tmpl$43 = ["<span class=\"k2b-app-workspace__head-primary-label\">", "", "</span>"],
55
+ _tmpl$44 = "<i class=\"ti ti-layout-sidebar\" aria-hidden=\"true\"></i>",
56
+ _tmpl$45 = ["<div class=\"k2b-app-workspace__head-views\">", "</div>"],
57
+ _tmpl$46 = ["<div class=\"k2b-app-workspace__head-filters\" role=\"group\"", ">", "", "</div>"],
58
+ _tmpl$47 = ["<span class=\"k2b-app-workspace__head-count\"><span>", "</span></span>"],
59
+ _tmpl$48 = ["<div class=\"k2b-app-workspace__head-actions\">", "", "</div>"],
60
+ _tmpl$49 = ["<div class=\"k2b-app-workspace__head\"", ">", "<div class=\"k2b-app-workspace__head-lead\">", "", "", "", "", "</div>", "</div>"],
61
+ _tmpl$50 = ["<h1 class=\"k2b-app-workspace__head-heading\" data-k2b-page-trail-title", ">", "</h1>"],
62
+ _tmpl$51 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "</div>"],
63
+ _tmpl$52 = ["<div class=\"", "\">", "</div>"];
64
+ import { AppWorkspaceSidebarItemStatus } from "./AppWorkspaceSidebarItemStatus";
71
65
  import { Link } from "@k2b/ssr/nav";
72
66
  import { children, createContext, createEffect, createMemo, createRoot, createSignal, createUniqueId, For, getOwner, mergeProps, on, onCleanup, onMount, Show, useContext } from "solid-js";
73
67
  import { Dynamic, isServer } from "solid-js/web";
@@ -145,11 +139,6 @@ function ResizeHandle(props) {
145
139
  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(appWorkspaceWidthToken(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));
146
140
  }
147
141
 
148
- /**
149
- * Unread state for the trailing `meta` slot. Every mark keeps a fixed width,
150
- * so the row keeps its height and the label its start in every state.
151
- */
152
-
153
142
  /** One requested place for an item among its unchanged siblings. */
154
143
 
155
144
  const modeAttrs = mode => mode && mode !== "always" ? {
@@ -999,61 +988,6 @@ const AppWorkspaceSidebarItemAction = props => mergeProps({
999
988
  kind: SIDEBAR_ITEM_ACTION
1000
989
  }, props);
1001
990
  const AppWorkspaceSidebarItemActions = props => _$ssr(_tmpl$23, _$ssrAttribute("data-visibility", props.visibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(props.children));
1002
- const AppWorkspaceSidebarItemStatus = props => {
1003
- const workspaceMessages = useWorkspaceMessages();
1004
- const waiting = () => props.waiting && Number.isFinite(props.waiting.count) ? Math.max(0, Math.floor(props.waiting.count)) : null;
1005
- const count = () => waiting() ?? (typeof props.unread === "number" && props.unread >= 1 ? Math.floor(props.unread) : 0);
1006
- const dot = () => waiting() === null && props.unread === true;
1007
- // The marks are decorative; the row's accessible name gets one phrase instead,
1008
- // which says no more than the "99+" a capped count shows.
1009
- const description = () => [waiting() !== null ? props.waiting?.label ?? "" : count() > 99 ? workspaceMessages().sidebarUnreadMany : count() ? workspaceMessages().sidebarUnread({
1010
- count: count()
1011
- }) : dot() ? workspaceMessages().sidebarNewActivity : "", props.mention ? workspaceMessages().sidebarMentioned : "", props.muted ? workspaceMessages().sidebarMuted : ""].filter(Boolean).join(", ");
1012
- // The unread slot stays reserved at the end, and the marks that change most
1013
- // often sit outermost, so new activity or a mention never moves another mark.
1014
- // The element itself stays when there is nothing to show: empty, it takes no
1015
- // space, and it still keeps the row's label on one line, so the first count
1016
- // never re-wraps the label and moves the rows below.
1017
- return _$ssr(_tmpl$29, _$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) + _$ssrAttribute("data-muted", props.muted ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
1018
- get when() {
1019
- return description();
1020
- },
1021
- get children() {
1022
- return [_$createComponent(Show, {
1023
- get when() {
1024
- return props.mention;
1025
- },
1026
- get children() {
1027
- return _$ssr(_tmpl$24);
1028
- }
1029
- }), _$createComponent(Show, {
1030
- get when() {
1031
- return props.muted;
1032
- },
1033
- get children() {
1034
- return _$ssr(_tmpl$25);
1035
- }
1036
- }), _$ssr(_tmpl$27, _$escape(_$createComponent(Show, {
1037
- get when() {
1038
- return count() || waiting() === 0;
1039
- },
1040
- get fallback() {
1041
- return _$createComponent(Show, {
1042
- get when() {
1043
- return dot();
1044
- },
1045
- get children() {
1046
- return _$ssr(_tmpl$30);
1047
- }
1048
- });
1049
- },
1050
- get children() {
1051
- return _$ssr(_tmpl$26, _$ssrAttribute("data-mention", props.mention ? "true" : _$escape(undefined, true), false), count() > 99 ? "99+" : _$escape(count()));
1052
- }
1053
- }))), _$ssr(_tmpl$28, _$escape(description()))];
1054
- }
1055
- })));
1056
- };
1057
991
  /**
1058
992
  * Hover actions overlay a row's end, so the label and count under them fade
1059
993
  * out while they show. The row measures how far the overlay reaches into its
@@ -1272,22 +1206,22 @@ function AppWorkspaceSidebarItem(props) {
1272
1206
  return iconContent() || icon();
1273
1207
  },
1274
1208
  get children() {
1275
- return _$ssr(_tmpl$31, _$ssrAttribute("class",
1209
+ return _$ssr(_tmpl$24, _$ssrAttribute("class",
1276
1210
  // An object row's own glyph sits in a soft chip of the app colour; custom content such as an avatar keeps
1277
1211
  // its own look.
1278
- props.variant === "object" && !iconContent() ? "k2b-app-workspace__sidebar-item-icon k2b-icon-tile" : "k2b-app-workspace__sidebar-item-icon", false), _$escape(iconContent() ?? _$ssr(_tmpl$38, _$ssrAttribute("class", _$escape(iconClass(icon()), true), false))));
1212
+ props.variant === "object" && !iconContent() ? "k2b-app-workspace__sidebar-item-icon k2b-icon-tile" : "k2b-app-workspace__sidebar-item-icon", false), _$escape(iconContent() ?? _$ssr(_tmpl$31, _$ssrAttribute("class", _$escape(iconClass(icon()), true), false))));
1279
1213
  }
1280
- }), _$ssr(_tmpl$36, _$escape(_$createComponent(Show, {
1214
+ }), _$ssr(_tmpl$29, _$escape(_$createComponent(Show, {
1281
1215
  get when() {
1282
1216
  return props.context || props.contextMeta;
1283
1217
  },
1284
1218
  get children() {
1285
- return _$ssr(_tmpl$33, _$escape(props.context), _$escape(_$createComponent(Show, {
1219
+ return _$ssr(_tmpl$26, _$escape(props.context), _$escape(_$createComponent(Show, {
1286
1220
  get when() {
1287
1221
  return props.contextMeta;
1288
1222
  },
1289
1223
  get children() {
1290
- return _$ssr(_tmpl$32, _$escape(props.contextMeta));
1224
+ return _$ssr(_tmpl$25, _$escape(props.contextMeta));
1291
1225
  }
1292
1226
  })));
1293
1227
  }
@@ -1296,21 +1230,21 @@ function AppWorkspaceSidebarItem(props) {
1296
1230
  return props.description;
1297
1231
  },
1298
1232
  get children() {
1299
- return _$ssr(_tmpl$34, _$escape(props.description));
1233
+ return _$ssr(_tmpl$27, _$escape(props.description));
1300
1234
  }
1301
1235
  })), _$escape(_$createComponent(Show, {
1302
1236
  get when() {
1303
1237
  return props.note;
1304
1238
  },
1305
1239
  get children() {
1306
- return _$ssr(_tmpl$35, _$ssrAttribute("data-tone", _$escape(props.noteTone ?? "neutral", true), false), _$escape(props.note));
1240
+ return _$ssr(_tmpl$28, _$ssrAttribute("data-tone", _$escape(props.noteTone ?? "neutral", true), false), _$escape(props.note));
1307
1241
  }
1308
1242
  }))), _$createComponent(Show, {
1309
1243
  get when() {
1310
1244
  return hasMeta();
1311
1245
  },
1312
1246
  get children() {
1313
- return _$ssr(_tmpl$37, _$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()));
1247
+ return _$ssr(_tmpl$30, _$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()));
1314
1248
  }
1315
1249
  })];
1316
1250
  const singleAction = () => {
@@ -1325,7 +1259,7 @@ function AppWorkspaceSidebarItem(props) {
1325
1259
  actionSlot()?.onSelect?.(event);
1326
1260
  props.onActionClick?.(event);
1327
1261
  };
1328
- const content = () => actionSlot()?.children ?? _$ssr(_tmpl$38, _$ssrAttribute("class", _$escape(iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots"), true), false));
1262
+ const content = () => actionSlot()?.children ?? _$ssr(_tmpl$31, _$ssrAttribute("class", _$escape(iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots"), true), false));
1329
1263
  return _$createComponent(Show, {
1330
1264
  get when() {
1331
1265
  return Boolean(actionSlot() || props.actionIcon);
@@ -1336,10 +1270,10 @@ function AppWorkspaceSidebarItem(props) {
1336
1270
  return _$memo(() => !!actionSlot()?.href)() && !actionSlot()?.disabled;
1337
1271
  },
1338
1272
  get fallback() {
1339
- return _$ssr(_tmpl$40, _$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()));
1273
+ return _$ssr(_tmpl$33, _$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()));
1340
1274
  },
1341
1275
  get children() {
1342
- return _$ssr(_tmpl$39, _$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()));
1276
+ return _$ssr(_tmpl$32, _$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()));
1343
1277
  }
1344
1278
  });
1345
1279
  }
@@ -1648,31 +1582,31 @@ const AppWorkspaceNavTree = props => {
1648
1582
  get ["data-k2b-nav-tree-toggle"]() {
1649
1583
  return usesIconDisclosure() ? "" : undefined;
1650
1584
  }
1651
- }, () => iconAccessibility(item.iconLabel)), _$ssr(_tmpl$38, _$ssrAttribute("class", _$escape(iconClass(rowIcon()), true), false)), false);
1585
+ }, () => iconAccessibility(item.iconLabel)), _$ssr(_tmpl$31, _$ssrAttribute("class", _$escape(iconClass(rowIcon()), true), false)), false);
1652
1586
  }
1653
1587
  }), _$createComponent(Show, {
1654
1588
  get when() {
1655
1589
  return item.description !== undefined;
1656
1590
  },
1657
1591
  get fallback() {
1658
- return _$ssr(_tmpl$44, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label));
1592
+ return _$ssr(_tmpl$37, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label));
1659
1593
  },
1660
1594
  get children() {
1661
- return _$ssr(_tmpl$41, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label), _$escape(item.description));
1595
+ return _$ssr(_tmpl$34, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label), _$escape(item.description));
1662
1596
  }
1663
1597
  }), _$createComponent(Show, {
1664
1598
  get when() {
1665
1599
  return item.meta !== undefined;
1666
1600
  },
1667
1601
  get children() {
1668
- return _$ssr(_tmpl$42, `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));
1602
+ return _$ssr(_tmpl$35, `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));
1669
1603
  }
1670
1604
  }), _$createComponent(Show, {
1671
1605
  get when() {
1672
1606
  return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
1673
1607
  },
1674
1608
  get children() {
1675
- return _$ssr(_tmpl$43, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`);
1609
+ return _$ssr(_tmpl$36, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`);
1676
1610
  }
1677
1611
  })];
1678
1612
  const row = () => _$createComponent(AppWorkspaceSidebarRow, {
@@ -1783,12 +1717,12 @@ const AppWorkspaceNavTree = props => {
1783
1717
  endDrag();
1784
1718
  requestMove(target.move, false);
1785
1719
  };
1786
- return _$ssr(_tmpl$46, _$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, {
1720
+ return _$ssr(_tmpl$39, _$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, {
1787
1721
  get when() {
1788
1722
  return _$memo(() => !!hasChildren())() && isExpanded(item.id);
1789
1723
  },
1790
1724
  get children() {
1791
- return _$ssr(_tmpl$45, _$escape(renderItems(nested, depth + 1, item.id)));
1725
+ return _$ssr(_tmpl$38, _$escape(renderItems(nested, depth + 1, item.id)));
1792
1726
  }
1793
1727
  })));
1794
1728
  }
@@ -1813,7 +1747,7 @@ const AppWorkspaceNavTree = props => {
1813
1747
  doc?.removeEventListener("pointermove", forgetDrag, true);
1814
1748
  });
1815
1749
  });
1816
- return _$ssr(_tmpl$47, `k2b-app-workspace__nav-tree ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.ariaLabel, true), false), _$escape(renderItems(roots, 0)));
1750
+ return _$ssr(_tmpl$40, `k2b-app-workspace__nav-tree ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.ariaLabel, true), false), _$escape(renderItems(roots, 0)));
1817
1751
  };
1818
1752
  AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
1819
1753
  const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProps({
@@ -1825,7 +1759,7 @@ const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProp
1825
1759
  return props.title;
1826
1760
  },
1827
1761
  children: title => _$ssr(_tmpl$22, _$escape(title()))
1828
- })), _$ssr(_tmpl$48, _$ssrAttribute("data-columns", _$escape(props.columns ?? 2, true), false), _$escape(props.children))], false);
1762
+ })), _$ssr(_tmpl$41, _$ssrAttribute("data-columns", _$escape(props.columns ?? 2, true), false), _$escape(props.children))], false);
1829
1763
  const AppWorkspaceSidebarIconAction = props => {
1830
1764
  let target;
1831
1765
  const content = _$ssr(_tmpl$1, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
@@ -1918,15 +1852,15 @@ function AppWorkspaceHead(props) {
1918
1852
  return `@media not all and (min-width:48rem){${host} > .k2b-app-workspace__head,${host} > .k2b-app-workspace__content > .k2b-app-workspace__detail-toggle,${host} > .k2b-app-workspace__content > :is(solid-island, solid-client) > .k2b-app-workspace__detail-toggle{display:none}}`;
1919
1853
  };
1920
1854
  const resetContent = () => filters().reset;
1921
- const primaryContent = () => [_$ssr(_tmpl$1, _$ssrAttribute("class", _$escape(props.head?.primary?.icon, true), false)), _$ssr(_tmpl$50, _$escape(props.head?.primary?.label), _$escape(_$createComponent(Show, {
1855
+ const primaryContent = () => [_$ssr(_tmpl$1, _$ssrAttribute("class", _$escape(props.head?.primary?.icon, true), false)), _$ssr(_tmpl$43, _$escape(props.head?.primary?.label), _$escape(_$createComponent(Show, {
1922
1856
  get when() {
1923
1857
  return props.head?.primary?.popup;
1924
1858
  },
1925
1859
  get children() {
1926
- return _$ssr(_tmpl$49);
1860
+ return _$ssr(_tmpl$42);
1927
1861
  }
1928
1862
  })))];
1929
- return _$ssr(_tmpl$56, _$ssrAttribute("data-trail", trail()?.ancestors.length ? "up" : trail() ? "title" : _$escape(undefined, true), false) + _$ssrAttribute("data-row", props.head ? "" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-head-pane", _$escape(mobilePane(), true), false), _$escape(_$createComponent(Show, {
1863
+ return _$ssr(_tmpl$49, _$ssrAttribute("data-trail", trail()?.ancestors.length ? "up" : trail() ? "title" : _$escape(undefined, true), false) + _$ssrAttribute("data-row", props.head ? "" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-head-pane", _$escape(mobilePane(), true), false), _$escape(_$createComponent(Show, {
1930
1864
  get when() {
1931
1865
  return mobilePane();
1932
1866
  },
@@ -1942,7 +1876,7 @@ function AppWorkspaceHead(props) {
1942
1876
  "aria-expanded": "false",
1943
1877
  "data-app-workspace-sidebar-toggle": "",
1944
1878
  get children() {
1945
- return _$ssr(_tmpl$51);
1879
+ return _$ssr(_tmpl$44);
1946
1880
  }
1947
1881
  })), _$escape(_$createComponent(Show, {
1948
1882
  get when() {
@@ -1954,20 +1888,20 @@ function AppWorkspaceHead(props) {
1954
1888
  },
1955
1889
  as: "p",
1956
1890
  fallback: true
1957
- }), _$ssr(_tmpl$57, _$ssrAttribute("data-k2b-server", isServer ? "" : _$escape(undefined, true), false), _$escape(current().title))]
1891
+ }), _$ssr(_tmpl$50, _$ssrAttribute("data-k2b-server", isServer ? "" : _$escape(undefined, true), false), _$escape(current().title))]
1958
1892
  })), _$escape(_$createComponent(Show, {
1959
1893
  get when() {
1960
1894
  return resolvedViews.toArray().some(Boolean);
1961
1895
  },
1962
1896
  get children() {
1963
- return _$ssr(_tmpl$52, _$escape(resolvedViews()));
1897
+ return _$ssr(_tmpl$45, _$escape(resolvedViews()));
1964
1898
  }
1965
1899
  })), _$escape(_$createComponent(Show, {
1966
1900
  get when() {
1967
1901
  return resolvedFilters.toArray().some(Boolean) || props.head?.filtered;
1968
1902
  },
1969
1903
  get children() {
1970
- return _$ssr(_tmpl$53, _$ssrAttribute("aria-label", _$escape(filters().filters, true), false), _$escape(resolvedFilters()), _$escape(_$createComponent(Show, {
1904
+ return _$ssr(_tmpl$46, _$ssrAttribute("aria-label", _$escape(filters().filters, true), false), _$escape(resolvedFilters()), _$escape(_$createComponent(Show, {
1971
1905
  get when() {
1972
1906
  return props.head?.filtered;
1973
1907
  },
@@ -2014,14 +1948,14 @@ function AppWorkspaceHead(props) {
2014
1948
  return _$memo(() => !!props.head?.filtered)() && resolvedCount.toArray().some(value => value !== undefined && value !== null && value !== false);
2015
1949
  },
2016
1950
  get children() {
2017
- return _$ssr(_tmpl$54, _$escape(resolvedCount()));
1951
+ return _$ssr(_tmpl$47, _$escape(resolvedCount()));
2018
1952
  }
2019
1953
  })), _$escape(_$createComponent(Show, {
2020
1954
  get when() {
2021
1955
  return resolvedActions.toArray().some(Boolean) || props.head?.primary;
2022
1956
  },
2023
1957
  get children() {
2024
- return _$ssr(_tmpl$55, _$escape(resolvedActions()), _$escape(_$createComponent(Show, {
1958
+ return _$ssr(_tmpl$48, _$escape(resolvedActions()), _$escape(_$createComponent(Show, {
2025
1959
  get when() {
2026
1960
  return props.head?.primary;
2027
1961
  },
@@ -2127,7 +2061,7 @@ const AppWorkspace = props => {
2127
2061
  return _$createComponent(WorkspaceContext.Provider, {
2128
2062
  value: workspace,
2129
2063
  get children() {
2130
- return _$ssr(_tmpl$58, `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(contents()));
2064
+ return _$ssr(_tmpl$51, `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(contents()));
2131
2065
  }
2132
2066
  });
2133
2067
  }
@@ -2142,7 +2076,7 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
2142
2076
  }
2143
2077
  });
2144
2078
  AppWorkspace.Head = AppWorkspaceHeadSlot;
2145
- AppWorkspace.Content = props => _$ssr(_tmpl$59, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
2079
+ AppWorkspace.Content = props => _$ssr(_tmpl$52, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
2146
2080
  AppWorkspace.Main = AppWorkspaceMain;
2147
2081
  AppWorkspace.MainPane = AppWorkspaceMainPane;
2148
2082
  AppWorkspace.Detail = AppWorkspaceDetail;