@k2b/ui 0.30.0 → 0.32.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 (186) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +2 -0
  3. package/dist/browser/actions/Toolbar.js +2 -0
  4. package/dist/browser/actions/Toolbar.js.map +1 -1
  5. package/dist/browser/actions/ViewTabs.js +8 -0
  6. package/dist/browser/actions/ViewTabs.js.map +1 -1
  7. package/dist/browser/chat/ChatDecision.js +28 -2
  8. package/dist/browser/chat/ChatDecision.js.map +1 -1
  9. package/dist/browser/content/Chart.js +104 -55
  10. package/dist/browser/content/Chart.js.map +1 -1
  11. package/dist/browser/content/ChartExplorer.js +5 -3
  12. package/dist/browser/content/ChartExplorer.js.map +1 -1
  13. package/dist/browser/content/MapAttribution.js +27 -0
  14. package/dist/browser/content/MapAttribution.js.map +1 -0
  15. package/dist/browser/content/MapView.js +553 -0
  16. package/dist/browser/content/MapView.js.map +1 -0
  17. package/dist/browser/content/MapViewFrame.js +395 -0
  18. package/dist/browser/content/MapViewFrame.js.map +1 -0
  19. package/dist/browser/content/chart-inspection-core.js +4 -1
  20. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  21. package/dist/browser/content/code-highlight.js +66 -0
  22. package/dist/browser/content/code-highlight.js.map +1 -1
  23. package/dist/browser/content/index.js +6 -0
  24. package/dist/browser/content/index.js.map +1 -1
  25. package/dist/browser/content/map-palette.js +39 -0
  26. package/dist/browser/content/map-palette.js.map +1 -0
  27. package/dist/browser/content/map-style.js +276 -0
  28. package/dist/browser/content/map-style.js.map +1 -0
  29. package/dist/browser/content/map-view-geometry.js +269 -0
  30. package/dist/browser/content/map-view-geometry.js.map +1 -0
  31. package/dist/browser/content/map-view-live.js +65 -0
  32. package/dist/browser/content/map-view-live.js.map +1 -0
  33. package/dist/browser/content/map-view-messages.js +53 -0
  34. package/dist/browser/content/map-view-messages.js.map +1 -0
  35. package/dist/browser/content/map-view-types.js +2 -0
  36. package/dist/browser/content/map-view-types.js.map +1 -0
  37. package/dist/browser/content/map-view-worker.js +10 -0
  38. package/dist/browser/feedback/dialog-core.js +19 -0
  39. package/dist/browser/feedback/dialog-core.js.map +1 -1
  40. package/dist/browser/inputs/AutocompleteEditor.js +167 -104
  41. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  42. package/dist/browser/inputs/RichSelect.js +1474 -0
  43. package/dist/browser/inputs/RichSelect.js.map +1 -0
  44. package/dist/browser/inputs/TextInput.js +95 -60
  45. package/dist/browser/inputs/TextInput.js.map +1 -1
  46. package/dist/browser/inputs/choice.js +19 -8
  47. package/dist/browser/inputs/choice.js.map +1 -1
  48. package/dist/browser/inputs/index.js +1 -0
  49. package/dist/browser/inputs/index.js.map +1 -1
  50. package/dist/browser/inputs/rich-select-messages.js +46 -0
  51. package/dist/browser/inputs/rich-select-messages.js.map +1 -0
  52. package/dist/browser/layout/AppWorkspace.js +194 -144
  53. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  54. package/dist/browser/layout/DetailPanel.js +10 -1
  55. package/dist/browser/layout/DetailPanel.js.map +1 -1
  56. package/dist/browser/layout/Navigation.js +14 -5
  57. package/dist/browser/layout/Navigation.js.map +1 -1
  58. package/dist/browser/layout/PageTitle.js +9 -3
  59. package/dist/browser/layout/PageTitle.js.map +1 -1
  60. package/dist/browser/layout/ResizeSeparator.js +8 -2
  61. package/dist/browser/layout/ResizeSeparator.js.map +1 -1
  62. package/dist/browser/layout/app-workspace-controller.js +301 -34
  63. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  64. package/dist/browser/layout/app-workspace-width.js +26 -0
  65. package/dist/browser/layout/app-workspace-width.js.map +1 -0
  66. package/dist/browser/layout/index.js +1 -1
  67. package/dist/browser/layout/index.js.map +1 -1
  68. package/dist/browser/layout/navigation-model.js.map +1 -1
  69. package/dist/browser/layout/resize-separator.js +25 -1
  70. package/dist/browser/layout/resize-separator.js.map +1 -1
  71. package/dist/browser/surfaces/Skeleton.js +14 -0
  72. package/dist/browser/surfaces/Skeleton.js.map +1 -0
  73. package/dist/browser/surfaces/index.js +1 -0
  74. package/dist/browser/surfaces/index.js.map +1 -1
  75. package/dist/licenses/maplibre-gl.txt +116 -0
  76. package/dist/ssr/actions/Toolbar.js +2 -0
  77. package/dist/ssr/actions/Toolbar.js.map +1 -1
  78. package/dist/ssr/actions/ViewTabs.js +8 -0
  79. package/dist/ssr/actions/ViewTabs.js.map +1 -1
  80. package/dist/ssr/chat/ChatDecision.js +11 -0
  81. package/dist/ssr/chat/ChatDecision.js.map +1 -1
  82. package/dist/ssr/content/Chart.js +27 -7
  83. package/dist/ssr/content/Chart.js.map +1 -1
  84. package/dist/ssr/content/ChartExplorer.js +5 -3
  85. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  86. package/dist/ssr/content/MapAttribution.js +19 -0
  87. package/dist/ssr/content/MapAttribution.js.map +1 -0
  88. package/dist/ssr/content/MapView.js +474 -0
  89. package/dist/ssr/content/MapView.js.map +1 -0
  90. package/dist/ssr/content/MapViewFrame.js +193 -0
  91. package/dist/ssr/content/MapViewFrame.js.map +1 -0
  92. package/dist/ssr/content/chart-inspection-core.js +4 -1
  93. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  94. package/dist/ssr/content/code-highlight.js +66 -0
  95. package/dist/ssr/content/code-highlight.js.map +1 -1
  96. package/dist/ssr/content/index.js +6 -0
  97. package/dist/ssr/content/index.js.map +1 -1
  98. package/dist/ssr/content/map-palette.js +39 -0
  99. package/dist/ssr/content/map-palette.js.map +1 -0
  100. package/dist/ssr/content/map-style.js +276 -0
  101. package/dist/ssr/content/map-style.js.map +1 -0
  102. package/dist/ssr/content/map-view-geometry.js +269 -0
  103. package/dist/ssr/content/map-view-geometry.js.map +1 -0
  104. package/dist/ssr/content/map-view-live.js +1 -0
  105. package/dist/ssr/content/map-view-messages.js +53 -0
  106. package/dist/ssr/content/map-view-messages.js.map +1 -0
  107. package/dist/ssr/content/map-view-types.js +2 -0
  108. package/dist/ssr/content/map-view-types.js.map +1 -0
  109. package/dist/ssr/feedback/dialog-core.js +19 -0
  110. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  111. package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
  112. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  113. package/dist/ssr/inputs/RichSelect.js +950 -0
  114. package/dist/ssr/inputs/RichSelect.js.map +1 -0
  115. package/dist/ssr/inputs/TextInput.js +40 -16
  116. package/dist/ssr/inputs/TextInput.js.map +1 -1
  117. package/dist/ssr/inputs/choice.js +19 -8
  118. package/dist/ssr/inputs/choice.js.map +1 -1
  119. package/dist/ssr/inputs/index.js +1 -0
  120. package/dist/ssr/inputs/index.js.map +1 -1
  121. package/dist/ssr/inputs/rich-select-messages.js +46 -0
  122. package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
  123. package/dist/ssr/layout/AppWorkspace.js +53 -16
  124. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  125. package/dist/ssr/layout/DetailPanel.js +1 -1
  126. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  127. package/dist/ssr/layout/Navigation.js +1 -1
  128. package/dist/ssr/layout/Navigation.js.map +1 -1
  129. package/dist/ssr/layout/PageTitle.js +9 -3
  130. package/dist/ssr/layout/PageTitle.js.map +1 -1
  131. package/dist/ssr/layout/ResizeSeparator.js +4 -1
  132. package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
  133. package/dist/ssr/layout/app-workspace-controller.js +301 -34
  134. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  135. package/dist/ssr/layout/app-workspace-width.js +26 -0
  136. package/dist/ssr/layout/app-workspace-width.js.map +1 -0
  137. package/dist/ssr/layout/index.js +1 -1
  138. package/dist/ssr/layout/index.js.map +1 -1
  139. package/dist/ssr/layout/navigation-model.js.map +1 -1
  140. package/dist/ssr/layout/resize-separator.js +25 -1
  141. package/dist/ssr/layout/resize-separator.js.map +1 -1
  142. package/dist/ssr/surfaces/Skeleton.js +8 -0
  143. package/dist/ssr/surfaces/Skeleton.js.map +1 -0
  144. package/dist/ssr/surfaces/index.js +1 -0
  145. package/dist/ssr/surfaces/index.js.map +1 -1
  146. package/dist/styles.css +1 -1
  147. package/dist/types/content/Chart.d.ts +4 -2
  148. package/dist/types/content/ChartExplorer.d.ts +0 -1
  149. package/dist/types/content/MapAttribution.d.ts +6 -0
  150. package/dist/types/content/MapView.d.ts +5 -0
  151. package/dist/types/content/MapViewFrame.d.ts +31 -0
  152. package/dist/types/content/code-highlight.d.ts +3 -1
  153. package/dist/types/content/index.d.ts +7 -0
  154. package/dist/types/content/map-palette.d.ts +58 -0
  155. package/dist/types/content/map-style.d.ts +29 -0
  156. package/dist/types/content/map-view-geometry.d.ts +55 -0
  157. package/dist/types/content/map-view-live.d.ts +2 -0
  158. package/dist/types/content/map-view-messages.d.ts +21 -0
  159. package/dist/types/content/map-view-types.d.ts +63 -0
  160. package/dist/types/feedback/dialog-core.d.ts +1 -0
  161. package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
  162. package/dist/types/inputs/RichSelect.d.ts +93 -0
  163. package/dist/types/inputs/TextInput.d.ts +5 -2
  164. package/dist/types/inputs/choice.d.ts +24 -4
  165. package/dist/types/inputs/index.d.ts +2 -0
  166. package/dist/types/inputs/rich-select-messages.d.ts +21 -0
  167. package/dist/types/layout/AppWorkspace.d.ts +14 -3
  168. package/dist/types/layout/DetailPanel.d.ts +2 -0
  169. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  170. package/dist/types/layout/app-workspace-width.d.ts +13 -0
  171. package/dist/types/layout/index.d.ts +2 -2
  172. package/dist/types/layout/navigation-model.d.ts +2 -0
  173. package/dist/types/layout/resize-separator.d.ts +1 -0
  174. package/dist/types/surfaces/Skeleton.d.ts +6 -0
  175. package/dist/types/surfaces/index.d.ts +1 -0
  176. package/map-glyphs/IBM Plex Sans Medium/0-255.pbf +0 -0
  177. package/map-glyphs/IBM Plex Sans Medium/1024-1279.pbf +0 -0
  178. package/map-glyphs/IBM Plex Sans Medium/256-511.pbf +0 -0
  179. package/map-glyphs/IBM Plex Sans Medium/512-767.pbf +0 -0
  180. package/map-glyphs/IBM Plex Sans Medium/768-1023.pbf +0 -0
  181. package/map-glyphs/IBM Plex Sans Medium/7680-7935.pbf +0 -0
  182. package/map-glyphs/IBM Plex Sans Medium/8192-8447.pbf +0 -0
  183. package/map-glyphs/IBM Plex Sans Medium/8448-8703.pbf +0 -0
  184. package/map-glyphs/IBM Plex Sans Medium/8704-8959.pbf +0 -0
  185. package/map-glyphs/OFL.txt +93 -0
  186. package/package.json +11 -6
@@ -77,7 +77,7 @@ var _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspac
77
77
  _tmpl$57 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head-filters role=group><!$><!/><!$><!/>`),
78
78
  _tmpl$58 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__head-count><span>`),
79
79
  _tmpl$59 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head-actions><!$><!/><!$><!/>`),
80
- _tmpl$60 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head><div class=k2b-app-workspace__head-lead><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/></div><!$><!/>`),
80
+ _tmpl$60 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head><!$><!/><div class=k2b-app-workspace__head-lead><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/></div><!$><!/>`),
81
81
  _tmpl$61 = /*#__PURE__*/_$template(`<h1 class=k2b-app-workspace__head-heading data-k2b-page-trail-title>`),
82
82
  _tmpl$62 = /*#__PURE__*/_$template(`<div data-k2b-app-workspace>`);
83
83
  import { Link } from "@k2b/ssr/nav";
@@ -87,8 +87,9 @@ import { Button, ButtonLink, IconButton, IconButtonLink } from "../actions/Butto
87
87
  import { useFilterMessages } from "../actions/filter-messages";
88
88
  import { dialogCore } from "../feedback/dialog-core";
89
89
  import { RenderErrorBoundary } from "../internal/render-error";
90
- import { APP_WORKSPACE_DETAIL_CLOSE_EVENT, APP_WORKSPACE_DETAIL_STEP_EVENT, APP_WORKSPACE_SIDEBAR_HIDE_EVENT, installAppWorkspaceController } from "./app-workspace-controller";
90
+ import { APP_WORKSPACE_DETAIL_CLOSE_EVENT, APP_WORKSPACE_DETAIL_OPEN_EVENT, APP_WORKSPACE_DETAIL_STEP_EVENT, APP_WORKSPACE_SIDEBAR_HIDE_EVENT, installAppWorkspaceController } from "./app-workspace-controller";
91
91
  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_MAIN_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";
92
+ import { appWorkspaceInverseWidthCss, appWorkspaceWidthCss, appWorkspaceWidthToken, isAppWorkspaceWidthShare } from "./app-workspace-width";
92
93
  import BottomSheet, { bottomSheetAdaptiveOptions } from "./BottomSheet";
93
94
  import { PageTitle, usePageTrail } from "./PageTitle";
94
95
  import { SidebarItemPreview } from "./SidebarItemPreview";
@@ -137,7 +138,7 @@ function ResizeHandle(props) {
137
138
  const state = workspace?.initialLayoutState() ?? providerState;
138
139
  const id = props.panelId ?? "primary";
139
140
  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];
140
- return Math.min(props.maxSize, Math.max(props.minSize, size ?? props.defaultSize));
141
+ return Math.min(props.maxSize, Math.max(props.minSize, size ?? (typeof props.defaultSize === "number" ? props.defaultSize : props.defaultSize.min)));
141
142
  };
142
143
  return (() => {
143
144
  var _el$ = _$getNextElement(_tmpl$);
@@ -153,7 +154,7 @@ function ResizeHandle(props) {
153
154
  _v$9 = props.panelId,
154
155
  _v$0 = props.edge,
155
156
  _v$1 = props.shadow ? "true" : undefined,
156
- _v$10 = props.defaultSize,
157
+ _v$10 = appWorkspaceWidthToken(props.defaultSize),
157
158
  _v$11 = props.minSize,
158
159
  _v$12 = props.maxSize,
159
160
  _v$13 = props.style;
@@ -361,11 +362,12 @@ function AppWorkspaceMain(props) {
361
362
  // as `AppWorkspace.Detail` does with its width.
362
363
  const minWidth = () => {
363
364
  const value = props.minWidth;
364
- return value !== undefined && Number.isFinite(value) && value > APP_WORKSPACE_MAIN_MIN ? Math.round(value) : undefined;
365
+ return isAppWorkspaceWidthShare(value) ? value : typeof value === "number" && Number.isFinite(value) && value > APP_WORKSPACE_MAIN_MIN ? Math.round(value) : undefined;
365
366
  };
366
367
  const minWidthRule = value => {
367
- const main = `.k2b-app-workspace__main[data-workspace-main-min="${value}"]`;
368
- return `.k2b-app-workspace:has(> .k2b-app-workspace__content > ${main}, > .k2b-app-workspace__content > :is(solid-island, solid-client) > ${main}){--k2b-workspace-main-min:${value}px}`;
368
+ const main = `.k2b-app-workspace__main[data-workspace-main-min="${appWorkspaceWidthToken(value)}"]`;
369
+ const inverse = typeof value === "number" ? "" : `;--k2b-workspace-main-min-grid:${appWorkspaceInverseWidthCss(value, "100%")};--k2b-workspace-main-min-cq:${appWorkspaceInverseWidthCss(value, "100cqi")}`;
370
+ return `.k2b-app-workspace:has(> .k2b-app-workspace__content > ${main}, > .k2b-app-workspace__content > :is(solid-island, solid-client) > ${main}){--k2b-workspace-main-min:${appWorkspaceWidthCss(value, "100%")}${inverse}}`;
369
371
  };
370
372
  return [_$createComponent(Show, {
371
373
  get when() {
@@ -385,7 +387,7 @@ function AppWorkspaceMain(props) {
385
387
  return `k2b-app-workspace__main ${hasPanes() ? "has-panes" : ""} ${props.class ?? ""}`;
386
388
  },
387
389
  get ["data-workspace-main-min"]() {
388
- return minWidth();
390
+ return _$memo(() => minWidth() === undefined)() ? undefined : appWorkspaceWidthToken(minWidth());
389
391
  },
390
392
  get ["data-workspace-levels"]() {
391
393
  return levelsMode() ? "" : undefined;
@@ -441,7 +443,10 @@ function AppWorkspaceMain(props) {
441
443
  const variable = appWorkspacePanelVariable("pane", panelId);
442
444
  const isAnchor = () => region === anchorRegion();
443
445
  const resizable = () => !isAnchor() && (pane.props.resizable ?? rootResizable);
444
- const defaultSize = () => pane.props.defaultSize ?? APP_WORKSPACE_PANE_DEFAULT;
446
+ const defaultSize = () => {
447
+ const value = pane.props.defaultSize;
448
+ return typeof value === "number" || isAppWorkspaceWidthShare(value) ? value : APP_WORKSPACE_PANE_DEFAULT;
449
+ };
445
450
  const minSize = () => pane.props.minSize ?? APP_WORKSPACE_PANE_MIN;
446
451
  const maxSize = () => Math.max(minSize(), pane.props.maxSize ?? APP_WORKSPACE_PANE_MAX);
447
452
  const before = () => levelsMode() || region.index < (anchorRegion()?.index ?? 0);
@@ -561,7 +566,7 @@ function AppWorkspaceMain(props) {
561
566
  _v$26 = !levelsMode() && pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : undefined,
562
567
  _v$27 = isAnchor() ? undefined : {
563
568
  // A stored width keeps to this pane's limits before the controller attaches.
564
- "--k2b-workspace-panel-size": `clamp(${minSize()}px, var(${variable}, ${defaultSize()}px), ${maxSize()}px)`,
569
+ "--k2b-workspace-panel-size": `clamp(${minSize()}px, var(${variable}, ${appWorkspaceWidthCss(defaultSize(), "var(--k2b-workspace-width)")}), ${maxSize()}px)`,
565
570
  "--k2b-workspace-panel-min": `${minSize()}px`
566
571
  };
567
572
  _v$14 !== _p$.e && _$setAttribute(_el$15, "id", _p$.e = _v$14);
@@ -614,11 +619,14 @@ function AppWorkspaceMain(props) {
614
619
  return _el$12;
615
620
  })()];
616
621
  }
622
+
623
+ /** The Detail region's DOM id, for application controls that target it with aria-controls. */
624
+ export const appWorkspaceDetailElementId = id => `k2b-workspace-detail-${assertStableUiId(id, "AppWorkspace.Detail id")}`;
617
625
  function AppWorkspaceDetail(props) {
618
626
  const workspaceMessages = useWorkspaceMessages();
619
627
  const rootResizable = useContext(ResizeContext);
620
628
  const panelId = () => assertStableUiId(props.id, "AppWorkspace.Detail id");
621
- const domId = () => `k2b-workspace-detail-${panelId()}`;
629
+ const domId = () => appWorkspaceDetailElementId(props.id);
622
630
  const variable = () => appWorkspacePanelVariable("detail", panelId());
623
631
  // Start widths of 20, 26, 30, and 34 rem. They feed `aria-valuenow` and the
624
632
  // `var(…, Npx)` first-paint fallback, so they are behaviour, not taste.
@@ -649,15 +657,20 @@ function AppWorkspaceDetail(props) {
649
657
  let aside;
650
658
  onMount(() => {
651
659
  const close = () => props.onClose?.();
660
+ const open = () => {
661
+ if (props.available !== false) props.onOpen?.();
662
+ };
652
663
  const isStep = detail => typeof detail === "object" && detail !== null && "direction" in detail && (detail.direction === 1 || detail.direction === -1);
653
664
  const step = event => {
654
665
  if (!(event instanceof CustomEvent) || !isStep(event.detail)) return;
655
666
  const item = props.onStep?.(event.detail.direction);
656
667
  if (item instanceof HTMLElement) event.detail.item = item;
657
668
  };
669
+ aside?.addEventListener(APP_WORKSPACE_DETAIL_OPEN_EVENT, open);
658
670
  aside?.addEventListener(APP_WORKSPACE_DETAIL_CLOSE_EVENT, close);
659
671
  aside?.addEventListener(APP_WORKSPACE_DETAIL_STEP_EVENT, step);
660
672
  onCleanup(() => {
673
+ aside?.removeEventListener(APP_WORKSPACE_DETAIL_OPEN_EVENT, open);
661
674
  aside?.removeEventListener(APP_WORKSPACE_DETAIL_CLOSE_EVENT, close);
662
675
  aside?.removeEventListener(APP_WORKSPACE_DETAIL_STEP_EVENT, step);
663
676
  });
@@ -674,6 +687,12 @@ function AppWorkspaceDetail(props) {
674
687
  },
675
688
  "aria-expanded": "false",
676
689
  "data-app-workspace-detail-toggle": "",
690
+ get ["data-workspace-detail-reopen"]() {
691
+ return props.onOpen ? "true" : undefined;
692
+ },
693
+ get disabled() {
694
+ return props.available === false;
695
+ },
677
696
  "class": "k2b-app-workspace__detail-toggle",
678
697
  get children() {
679
698
  return [_$getNextElement(_tmpl$1), _$memo(() => workspaceMessages().details)];
@@ -701,6 +720,7 @@ function AppWorkspaceDetail(props) {
701
720
  get maxSize() {
702
721
  return maxWidth();
703
722
  },
723
+ shadow: true,
704
724
  get style() {
705
725
  return sizeStyle();
706
726
  }
@@ -722,14 +742,15 @@ function AppWorkspaceDetail(props) {
722
742
  _v$34 = props.openOnChoice === false ? "request" : undefined,
723
743
  _v$35 = panelId(),
724
744
  _v$36 = resizable() ? "true" : "false",
725
- _v$37 = props.onClose ? "true" : undefined,
726
- _v$38 = props.onStep ? "true" : undefined,
727
- _v$39 = !props.open,
728
- _v$40 = {
745
+ _v$37 = props.onOpen ? "true" : undefined,
746
+ _v$38 = props.onClose ? "true" : undefined,
747
+ _v$39 = props.onStep ? "true" : undefined,
748
+ _v$40 = !props.open || props.available === false,
749
+ _v$41 = {
729
750
  ...sizeStyle(),
730
751
  "view-transition-name": props.viewTransitionName
731
752
  },
732
- _v$41 = workspaceMessages().detailFullHeight;
753
+ _v$42 = workspaceMessages().detailFullHeight;
733
754
  _v$30 !== _p$.e && _$setAttribute(_el$20, "id", _p$.e = _v$30);
734
755
  _v$31 !== _p$.t && _$className(_el$20, _p$.t = _v$31);
735
756
  _v$32 !== _p$.a && _$setAttribute(_el$20, "data-width", _p$.a = _v$32);
@@ -737,11 +758,12 @@ function AppWorkspaceDetail(props) {
737
758
  _v$34 !== _p$.i && _$setAttribute(_el$20, "data-workspace-detail-choice", _p$.i = _v$34);
738
759
  _v$35 !== _p$.n && _$setAttribute(_el$20, "data-workspace-panel-id", _p$.n = _v$35);
739
760
  _v$36 !== _p$.s && _$setAttribute(_el$20, "data-workspace-resizable", _p$.s = _v$36);
740
- _v$37 !== _p$.h && _$setAttribute(_el$20, "data-workspace-detail-closable", _p$.h = _v$37);
741
- _v$38 !== _p$.r && _$setAttribute(_el$20, "data-workspace-detail-steppable", _p$.r = _v$38);
742
- _v$39 !== _p$.d && _$setProperty(_el$20, "hidden", _p$.d = _v$39);
743
- _p$.l = _$style(_el$20, _v$40, _p$.l);
744
- _v$41 !== _p$.u && _$setAttribute(_el$21, "aria-label", _p$.u = _v$41);
761
+ _v$37 !== _p$.h && _$setAttribute(_el$20, "data-workspace-detail-reopen", _p$.h = _v$37);
762
+ _v$38 !== _p$.r && _$setAttribute(_el$20, "data-workspace-detail-closable", _p$.r = _v$38);
763
+ _v$39 !== _p$.d && _$setAttribute(_el$20, "data-workspace-detail-steppable", _p$.d = _v$39);
764
+ _v$40 !== _p$.l && _$setProperty(_el$20, "hidden", _p$.l = _v$40);
765
+ _p$.u = _$style(_el$20, _v$41, _p$.u);
766
+ _v$42 !== _p$.c && _$setAttribute(_el$21, "aria-label", _p$.c = _v$42);
745
767
  return _p$;
746
768
  }, {
747
769
  e: undefined,
@@ -755,7 +777,8 @@ function AppWorkspaceDetail(props) {
755
777
  r: undefined,
756
778
  d: undefined,
757
779
  l: undefined,
758
- u: undefined
780
+ u: undefined,
781
+ c: undefined
759
782
  });
760
783
  return _el$20;
761
784
  })()];
@@ -810,22 +833,22 @@ function AppWorkspaceBottomDrawer(props) {
810
833
  var _el$24 = _$getNextElement(_tmpl$11);
811
834
  _$insert(_el$24, () => props.children);
812
835
  _$effect(_p$ => {
813
- var _v$42 = domId(),
814
- _v$43 = `k2b-app-workspace__drawer ${props.class ?? ""}`,
815
- _v$44 = props.height ?? "md",
816
- _v$45 = panelId(),
817
- _v$46 = resizable() ? "true" : "false",
818
- _v$47 = !props.open,
819
- _v$48 = `var(${variable()}, ${defaultHeight()}px)`,
820
- _v$49 = props.viewTransitionName;
821
- _v$42 !== _p$.e && _$setAttribute(_el$24, "id", _p$.e = _v$42);
822
- _v$43 !== _p$.t && _$className(_el$24, _p$.t = _v$43);
823
- _v$44 !== _p$.a && _$setAttribute(_el$24, "data-height", _p$.a = _v$44);
824
- _v$45 !== _p$.o && _$setAttribute(_el$24, "data-workspace-panel-id", _p$.o = _v$45);
825
- _v$46 !== _p$.i && _$setAttribute(_el$24, "data-workspace-resizable", _p$.i = _v$46);
826
- _v$47 !== _p$.n && _$setProperty(_el$24, "hidden", _p$.n = _v$47);
827
- _v$48 !== _p$.s && _$setStyleProperty(_el$24, "--k2b-workspace-panel-size", _p$.s = _v$48);
828
- _v$49 !== _p$.h && _$setStyleProperty(_el$24, "view-transition-name", _p$.h = _v$49);
836
+ var _v$43 = domId(),
837
+ _v$44 = `k2b-app-workspace__drawer ${props.class ?? ""}`,
838
+ _v$45 = props.height ?? "md",
839
+ _v$46 = panelId(),
840
+ _v$47 = resizable() ? "true" : "false",
841
+ _v$48 = !props.open,
842
+ _v$49 = `var(${variable()}, ${defaultHeight()}px)`,
843
+ _v$50 = props.viewTransitionName;
844
+ _v$43 !== _p$.e && _$setAttribute(_el$24, "id", _p$.e = _v$43);
845
+ _v$44 !== _p$.t && _$className(_el$24, _p$.t = _v$44);
846
+ _v$45 !== _p$.a && _$setAttribute(_el$24, "data-height", _p$.a = _v$45);
847
+ _v$46 !== _p$.o && _$setAttribute(_el$24, "data-workspace-panel-id", _p$.o = _v$46);
848
+ _v$47 !== _p$.i && _$setAttribute(_el$24, "data-workspace-resizable", _p$.i = _v$47);
849
+ _v$48 !== _p$.n && _$setProperty(_el$24, "hidden", _p$.n = _v$48);
850
+ _v$49 !== _p$.s && _$setStyleProperty(_el$24, "--k2b-workspace-panel-size", _p$.s = _v$49);
851
+ _v$50 !== _p$.h && _$setStyleProperty(_el$24, "view-transition-name", _p$.h = _v$50);
829
852
  return _p$;
830
853
  }, {
831
854
  e: undefined,
@@ -928,10 +951,10 @@ function AppWorkspaceSidebar(props) {
928
951
  _$addEventListener(_el$25, "click", event => choose(event, () => close()));
929
952
  _$insert(_el$25, resolved);
930
953
  _$effect(_p$ => {
931
- var _v$50 = props.label,
932
- _v$51 = accent;
933
- _v$50 !== _p$.e && _$setAttribute(_el$25, "aria-label", _p$.e = _v$50);
934
- _p$.t = _$style(_el$25, _v$51, _p$.t);
954
+ var _v$51 = props.label,
955
+ _v$52 = accent;
956
+ _v$51 !== _p$.e && _$setAttribute(_el$25, "aria-label", _p$.e = _v$51);
957
+ _p$.t = _$style(_el$25, _v$52, _p$.t);
935
958
  return _p$;
936
959
  }, {
937
960
  e: undefined,
@@ -1015,10 +1038,10 @@ function AppWorkspaceSidebar(props) {
1015
1038
  typeof _ref$4 === "function" ? _$use(_ref$4, _el$26) : row = _el$26;
1016
1039
  _$insert(_el$26, () => desktop()?.children);
1017
1040
  _$effect(_p$ => {
1018
- var _v$52 = stacked() ? "both" : undefined,
1019
- _v$53 = stacked() ? "horizontal" : undefined;
1020
- _v$52 !== _p$.e && _$setAttribute(_el$26, "data-scroll-fade-mode", _p$.e = _v$52);
1021
- _v$53 !== _p$.t && _$setAttribute(_el$26, "data-scroll-fade-axis", _p$.t = _v$53);
1041
+ var _v$53 = stacked() ? "both" : undefined,
1042
+ _v$54 = stacked() ? "horizontal" : undefined;
1043
+ _v$53 !== _p$.e && _$setAttribute(_el$26, "data-scroll-fade-mode", _p$.e = _v$53);
1044
+ _v$54 !== _p$.t && _$setAttribute(_el$26, "data-scroll-fade-axis", _p$.t = _v$54);
1022
1045
  return _p$;
1023
1046
  }, {
1024
1047
  e: undefined,
@@ -1036,12 +1059,12 @@ function AppWorkspaceSidebar(props) {
1036
1059
  _el$27.$$click = event => openAll(event.currentTarget);
1037
1060
  _$insert(_el$28, () => workspaceMessages().sidebarAll);
1038
1061
  _$effect(_p$ => {
1039
- var _v$54 = sheetOpen(),
1040
- _v$55 = props.label ? workspaceMessages().sidebarAllLabel({
1062
+ var _v$55 = sheetOpen(),
1063
+ _v$56 = props.label ? workspaceMessages().sidebarAllLabel({
1041
1064
  label: props.label
1042
1065
  }) : undefined;
1043
- _v$54 !== _p$.e && _$setAttribute(_el$27, "aria-expanded", _p$.e = _v$54);
1044
- _v$55 !== _p$.t && _$setAttribute(_el$27, "aria-label", _p$.t = _v$55);
1066
+ _v$55 !== _p$.e && _$setAttribute(_el$27, "aria-expanded", _p$.e = _v$55);
1067
+ _v$56 !== _p$.t && _$setAttribute(_el$27, "aria-label", _p$.t = _v$56);
1045
1068
  return _p$;
1046
1069
  }, {
1047
1070
  e: undefined,
@@ -1234,10 +1257,10 @@ const AppWorkspaceSidebarSection = props => {
1234
1257
  _$setAttribute(_el$38, "aria-controls", id);
1235
1258
  _$insert(_el$38, title, _el$41, _co$5);
1236
1259
  _$effect(_p$ => {
1237
- var _v$56 = open(),
1238
- _v$57 = open() ? "ti ti-chevron-down" : "ti ti-chevron-right";
1239
- _v$56 !== _p$.e && _$setAttribute(_el$38, "aria-expanded", _p$.e = _v$56);
1240
- _v$57 !== _p$.t && _$className(_el$39, _p$.t = _v$57);
1260
+ var _v$57 = open(),
1261
+ _v$58 = open() ? "ti ti-chevron-down" : "ti ti-chevron-right";
1262
+ _v$57 !== _p$.e && _$setAttribute(_el$38, "aria-expanded", _p$.e = _v$57);
1263
+ _v$58 !== _p$.t && _$className(_el$39, _p$.t = _v$58);
1241
1264
  return _p$;
1242
1265
  }, {
1243
1266
  e: undefined,
@@ -1359,10 +1382,10 @@ const AppWorkspaceSidebarItemStatus = props => {
1359
1382
  }
1360
1383
  }));
1361
1384
  _$effect(_p$ => {
1362
- var _v$58 = waiting() !== null ? undefined : count() ? "count" : dot() ? "dot" : undefined,
1363
- _v$59 = waiting() === null ? undefined : waiting() ? "count" : "zero";
1364
- _v$58 !== _p$.e && _$setAttribute(_el$52, "data-unread", _p$.e = _v$58);
1365
- _v$59 !== _p$.t && _$setAttribute(_el$52, "data-waiting", _p$.t = _v$59);
1385
+ var _v$59 = waiting() !== null ? undefined : count() ? "count" : dot() ? "dot" : undefined,
1386
+ _v$60 = waiting() === null ? undefined : waiting() ? "count" : "zero";
1387
+ _v$59 !== _p$.e && _$setAttribute(_el$52, "data-unread", _p$.e = _v$59);
1388
+ _v$60 !== _p$.t && _$setAttribute(_el$52, "data-waiting", _p$.t = _v$60);
1366
1389
  return _p$;
1367
1390
  }, {
1368
1391
  e: undefined,
@@ -1587,10 +1610,10 @@ function AppWorkspaceSidebarItem(props) {
1587
1610
  }
1588
1611
  }), _el$82, _co$12);
1589
1612
  _$effect(_p$ => {
1590
- var _v$60 = oneLine() ? "1" : undefined,
1591
- _v$61 = !oneLine() && typeof label() === "string" ? label() : undefined;
1592
- _v$60 !== _p$.e && _$setAttribute(_el$76, "data-lines", _p$.e = _v$60);
1593
- _v$61 !== _p$.t && _$setAttribute(_el$76, "data-label", _p$.t = _v$61);
1613
+ var _v$61 = oneLine() ? "1" : undefined,
1614
+ _v$62 = !oneLine() && typeof label() === "string" ? label() : undefined;
1615
+ _v$61 !== _p$.e && _$setAttribute(_el$76, "data-lines", _p$.e = _v$61);
1616
+ _v$62 !== _p$.t && _$setAttribute(_el$76, "data-label", _p$.t = _v$62);
1594
1617
  return _p$;
1595
1618
  }, {
1596
1619
  e: undefined,
@@ -1605,10 +1628,10 @@ function AppWorkspaceSidebarItem(props) {
1605
1628
  var _el$83 = _$getNextElement(_tmpl$40);
1606
1629
  _$insert(_el$83, meta);
1607
1630
  _$effect(_p$ => {
1608
- var _v$62 = props.preview?.trigger === "row" ? metaId : undefined,
1609
- _v$63 = metaVisibility() === "hover" ? "hover" : undefined;
1610
- _v$62 !== _p$.e && _$setAttribute(_el$83, "id", _p$.e = _v$62);
1611
- _v$63 !== _p$.t && _$setAttribute(_el$83, "data-visibility", _p$.t = _v$63);
1631
+ var _v$63 = props.preview?.trigger === "row" ? metaId : undefined,
1632
+ _v$64 = metaVisibility() === "hover" ? "hover" : undefined;
1633
+ _v$63 !== _p$.e && _$setAttribute(_el$83, "id", _p$.e = _v$63);
1634
+ _v$64 !== _p$.t && _$setAttribute(_el$83, "data-visibility", _p$.t = _v$64);
1612
1635
  return _p$;
1613
1636
  }, {
1614
1637
  e: undefined,
@@ -1649,12 +1672,12 @@ function AppWorkspaceSidebarItem(props) {
1649
1672
  _el$87.$$click = select;
1650
1673
  _$insert(_el$87, content);
1651
1674
  _$effect(_p$ => {
1652
- var _v$67 = actionSlot()?.disabled,
1653
- _v$68 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1654
- _v$69 = label();
1655
- _v$67 !== _p$.e && _$setProperty(_el$87, "disabled", _p$.e = _v$67);
1656
- _v$68 !== _p$.t && _$setAttribute(_el$87, "data-visibility", _p$.t = _v$68);
1657
- _v$69 !== _p$.a && _$setAttribute(_el$87, "aria-label", _p$.a = _v$69);
1675
+ var _v$68 = actionSlot()?.disabled,
1676
+ _v$69 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1677
+ _v$70 = label();
1678
+ _v$68 !== _p$.e && _$setProperty(_el$87, "disabled", _p$.e = _v$68);
1679
+ _v$69 !== _p$.t && _$setAttribute(_el$87, "data-visibility", _p$.t = _v$69);
1680
+ _v$70 !== _p$.a && _$setAttribute(_el$87, "aria-label", _p$.a = _v$70);
1658
1681
  return _p$;
1659
1682
  }, {
1660
1683
  e: undefined,
@@ -1670,12 +1693,12 @@ function AppWorkspaceSidebarItem(props) {
1670
1693
  _el$86.$$click = select;
1671
1694
  _$insert(_el$86, content);
1672
1695
  _$effect(_p$ => {
1673
- var _v$64 = actionSlot()?.href,
1674
- _v$65 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1675
- _v$66 = label();
1676
- _v$64 !== _p$.e && _$setAttribute(_el$86, "href", _p$.e = _v$64);
1677
- _v$65 !== _p$.t && _$setAttribute(_el$86, "data-visibility", _p$.t = _v$65);
1678
- _v$66 !== _p$.a && _$setAttribute(_el$86, "aria-label", _p$.a = _v$66);
1696
+ var _v$65 = actionSlot()?.href,
1697
+ _v$66 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1698
+ _v$67 = label();
1699
+ _v$65 !== _p$.e && _$setAttribute(_el$86, "href", _p$.e = _v$65);
1700
+ _v$66 !== _p$.t && _$setAttribute(_el$86, "data-visibility", _p$.t = _v$66);
1701
+ _v$67 !== _p$.a && _$setAttribute(_el$86, "aria-label", _p$.a = _v$67);
1679
1702
  return _p$;
1680
1703
  }, {
1681
1704
  e: undefined,
@@ -2026,10 +2049,10 @@ const AppWorkspaceNavTree = props => {
2026
2049
  var _el$94 = _$getNextElement(_tmpl$46);
2027
2050
  _$insert(_el$94, () => item.meta);
2028
2051
  _$effect(_p$ => {
2029
- var _v$70 = `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`,
2030
- _v$71 = item.metaVisibility === "hover" ? "hover" : undefined;
2031
- _v$70 !== _p$.e && _$className(_el$94, _p$.e = _v$70);
2032
- _v$71 !== _p$.t && _$setAttribute(_el$94, "data-visibility", _p$.t = _v$71);
2052
+ var _v$71 = `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`,
2053
+ _v$72 = item.metaVisibility === "hover" ? "hover" : undefined;
2054
+ _v$71 !== _p$.e && _$className(_el$94, _p$.e = _v$71);
2055
+ _v$72 !== _p$.t && _$setAttribute(_el$94, "data-visibility", _p$.t = _v$72);
2033
2056
  return _p$;
2034
2057
  }, {
2035
2058
  e: undefined,
@@ -2181,28 +2204,28 @@ const AppWorkspaceNavTree = props => {
2181
2204
  }
2182
2205
  }), _el$104, _co$14);
2183
2206
  _$effect(_p$ => {
2184
- var _v$72 = siblings().length,
2185
- _v$73 = place() + 1,
2186
- _v$74 = selected(),
2187
- _v$75 = hasChildren() ? isExpanded(item.id) : undefined,
2188
- _v$76 = item.disabled ? "true" : undefined,
2189
- _v$77 = item.disabled ? -1 : tabStopId() === item.id ? 0 : -1,
2190
- _v$78 = movable() ? true : undefined,
2191
- _v$79 = item.id,
2192
- _v$80 = dragged()?.id === item.id ? "" : undefined,
2193
- _v$81 = dropTarget()?.id === item.id ? dropTarget().side : undefined,
2194
- _v$82 = String(props.indented === false ? 0 : depth);
2195
- _v$72 !== _p$.e && _$setAttribute(_el$99, "aria-setsize", _p$.e = _v$72);
2196
- _v$73 !== _p$.t && _$setAttribute(_el$99, "aria-posinset", _p$.t = _v$73);
2197
- _v$74 !== _p$.a && _$setAttribute(_el$99, "aria-selected", _p$.a = _v$74);
2198
- _v$75 !== _p$.o && _$setAttribute(_el$99, "aria-expanded", _p$.o = _v$75);
2199
- _v$76 !== _p$.i && _$setAttribute(_el$99, "aria-disabled", _p$.i = _v$76);
2200
- _v$77 !== _p$.n && _$setAttribute(_el$99, "tabindex", _p$.n = _v$77);
2201
- _v$78 !== _p$.s && _$setAttribute(_el$99, "draggable", _p$.s = _v$78);
2202
- _v$79 !== _p$.h && _$setAttribute(_el$99, "data-k2b-nav-tree-id", _p$.h = _v$79);
2203
- _v$80 !== _p$.r && _$setAttribute(_el$99, "data-k2b-nav-tree-dragging", _p$.r = _v$80);
2204
- _v$81 !== _p$.d && _$setAttribute(_el$99, "data-k2b-nav-tree-drop", _p$.d = _v$81);
2205
- _v$82 !== _p$.l && _$setStyleProperty(_el$99, "--k2b-nav-tree-depth", _p$.l = _v$82);
2207
+ var _v$73 = siblings().length,
2208
+ _v$74 = place() + 1,
2209
+ _v$75 = selected(),
2210
+ _v$76 = hasChildren() ? isExpanded(item.id) : undefined,
2211
+ _v$77 = item.disabled ? "true" : undefined,
2212
+ _v$78 = item.disabled ? -1 : tabStopId() === item.id ? 0 : -1,
2213
+ _v$79 = movable() ? true : undefined,
2214
+ _v$80 = item.id,
2215
+ _v$81 = dragged()?.id === item.id ? "" : undefined,
2216
+ _v$82 = dropTarget()?.id === item.id ? dropTarget().side : undefined,
2217
+ _v$83 = String(props.indented === false ? 0 : depth);
2218
+ _v$73 !== _p$.e && _$setAttribute(_el$99, "aria-setsize", _p$.e = _v$73);
2219
+ _v$74 !== _p$.t && _$setAttribute(_el$99, "aria-posinset", _p$.t = _v$74);
2220
+ _v$75 !== _p$.a && _$setAttribute(_el$99, "aria-selected", _p$.a = _v$75);
2221
+ _v$76 !== _p$.o && _$setAttribute(_el$99, "aria-expanded", _p$.o = _v$76);
2222
+ _v$77 !== _p$.i && _$setAttribute(_el$99, "aria-disabled", _p$.i = _v$77);
2223
+ _v$78 !== _p$.n && _$setAttribute(_el$99, "tabindex", _p$.n = _v$78);
2224
+ _v$79 !== _p$.s && _$setAttribute(_el$99, "draggable", _p$.s = _v$79);
2225
+ _v$80 !== _p$.h && _$setAttribute(_el$99, "data-k2b-nav-tree-id", _p$.h = _v$80);
2226
+ _v$81 !== _p$.r && _$setAttribute(_el$99, "data-k2b-nav-tree-dragging", _p$.r = _v$81);
2227
+ _v$82 !== _p$.d && _$setAttribute(_el$99, "data-k2b-nav-tree-drop", _p$.d = _v$82);
2228
+ _v$83 !== _p$.l && _$setStyleProperty(_el$99, "--k2b-nav-tree-depth", _p$.l = _v$83);
2206
2229
  return _p$;
2207
2230
  }, {
2208
2231
  e: undefined,
@@ -2256,10 +2279,10 @@ const AppWorkspaceNavTree = props => {
2256
2279
  typeof _ref$7 === "function" ? _$use(_ref$7, _el$105) : root = _el$105;
2257
2280
  _$insert(_el$105, () => renderItems(roots, 0));
2258
2281
  _$effect(_p$ => {
2259
- var _v$83 = `k2b-app-workspace__nav-tree ${props.class ?? ""}`,
2260
- _v$84 = props.ariaLabel;
2261
- _v$83 !== _p$.e && _$className(_el$105, _p$.e = _v$83);
2262
- _v$84 !== _p$.t && _$setAttribute(_el$105, "aria-label", _p$.t = _v$84);
2282
+ var _v$84 = `k2b-app-workspace__nav-tree ${props.class ?? ""}`,
2283
+ _v$85 = props.ariaLabel;
2284
+ _v$84 !== _p$.e && _$className(_el$105, _p$.e = _v$84);
2285
+ _v$85 !== _p$.t && _$setAttribute(_el$105, "aria-label", _p$.t = _v$85);
2263
2286
  return _p$;
2264
2287
  }, {
2265
2288
  e: undefined,
@@ -2384,6 +2407,15 @@ function AppWorkspaceHead(props) {
2384
2407
  const resolvedCount = children(() => props.head?.count);
2385
2408
  // A nested workspace is part of a page that already shows its title.
2386
2409
  const trail = props.nested ? () => undefined : usePageTrail();
2410
+ // Main already publishes the active region in SSR and on each selection.
2411
+ // Scope both sides to this workspace, including transparent island hosts;
2412
+ // a nested Main must never decide whether its parent's head is visible.
2413
+ const mobilePane = () => props.head?.mobilePane === undefined ? undefined : assertStableUiId(props.head.mobilePane, "AppWorkspace.Head mobilePane");
2414
+ const mobilePaneRule = pane => {
2415
+ const main = `.k2b-app-workspace__main.has-panes:not([data-workspace-levels]) > [data-workspace-mobile-active="true"]:not([data-workspace-main-region="${pane}"])`;
2416
+ const host = `.k2b-ui .k2b-app-workspace:has(> .k2b-app-workspace__head[data-workspace-head-pane="${pane}"]):has(> .k2b-app-workspace__content > ${main}, > .k2b-app-workspace__content > :is(solid-island, solid-client) > ${main})`;
2417
+ 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}}`;
2418
+ };
2387
2419
  const resetContent = () => filters().reset;
2388
2420
  const primaryContent = () => [(() => {
2389
2421
  var _el$114 = _$getNextElement(_tmpl$53);
@@ -2396,7 +2428,9 @@ function AppWorkspaceHead(props) {
2396
2428
  })()];
2397
2429
  return (() => {
2398
2430
  var _el$116 = _$getNextElement(_tmpl$60),
2399
- _el$117 = _el$116.firstChild,
2431
+ _el$142 = _el$116.firstChild,
2432
+ [_el$143, _co$25] = _$getNextMarker(_el$142.nextSibling),
2433
+ _el$117 = _el$143.nextSibling,
2400
2434
  _el$127 = _el$117.firstChild,
2401
2435
  [_el$128, _co$18] = _$getNextMarker(_el$127.nextSibling),
2402
2436
  _el$129 = _el$128.nextSibling,
@@ -2407,8 +2441,18 @@ function AppWorkspaceHead(props) {
2407
2441
  [_el$134, _co$21] = _$getNextMarker(_el$133.nextSibling),
2408
2442
  _el$135 = _el$134.nextSibling,
2409
2443
  [_el$136, _co$22] = _$getNextMarker(_el$135.nextSibling),
2410
- _el$142 = _el$117.nextSibling,
2411
- [_el$143, _co$25] = _$getNextMarker(_el$142.nextSibling);
2444
+ _el$144 = _el$117.nextSibling,
2445
+ [_el$145, _co$26] = _$getNextMarker(_el$144.nextSibling);
2446
+ _$insert(_el$116, _$createComponent(Show, {
2447
+ get when() {
2448
+ return mobilePane();
2449
+ },
2450
+ children: pane => (() => {
2451
+ var _el$146 = _$getNextElement(_tmpl$6);
2452
+ _$effect(() => _$setProperty(_el$146, "innerHTML", mobilePaneRule(pane())));
2453
+ return _el$146;
2454
+ })()
2455
+ }), _el$143, _co$25);
2412
2456
  _$insert(_el$117, _$createComponent(IconButton, {
2413
2457
  "class": "k2b-app-workspace__head-toggle",
2414
2458
  get label() {
@@ -2434,10 +2478,10 @@ function AppWorkspaceHead(props) {
2434
2478
  as: "p",
2435
2479
  fallback: true
2436
2480
  }), (() => {
2437
- var _el$144 = _$getNextElement(_tmpl$61);
2438
- _$setAttribute(_el$144, "data-k2b-server", isServer ? "" : undefined);
2439
- _$insert(_el$144, () => current().title);
2440
- return _el$144;
2481
+ var _el$147 = _$getNextElement(_tmpl$61);
2482
+ _$setAttribute(_el$147, "data-k2b-server", isServer ? "" : undefined);
2483
+ _$insert(_el$147, () => current().title);
2484
+ return _el$147;
2441
2485
  })()]
2442
2486
  }), _el$130, _co$19);
2443
2487
  _$insert(_el$117, _$createComponent(Show, {
@@ -2569,16 +2613,19 @@ function AppWorkspaceHead(props) {
2569
2613
  }), _el$141, _co$24);
2570
2614
  return _el$137;
2571
2615
  }
2572
- }), _el$143, _co$25);
2616
+ }), _el$145, _co$26);
2573
2617
  _$effect(_p$ => {
2574
- var _v$85 = trail()?.ancestors.length ? "up" : trail() ? "title" : undefined,
2575
- _v$86 = props.head ? "" : undefined;
2576
- _v$85 !== _p$.e && _$setAttribute(_el$116, "data-trail", _p$.e = _v$85);
2577
- _v$86 !== _p$.t && _$setAttribute(_el$116, "data-row", _p$.t = _v$86);
2618
+ var _v$86 = trail()?.ancestors.length ? "up" : trail() ? "title" : undefined,
2619
+ _v$87 = props.head ? "" : undefined,
2620
+ _v$88 = mobilePane();
2621
+ _v$86 !== _p$.e && _$setAttribute(_el$116, "data-trail", _p$.e = _v$86);
2622
+ _v$87 !== _p$.t && _$setAttribute(_el$116, "data-row", _p$.t = _v$87);
2623
+ _v$88 !== _p$.a && _$setAttribute(_el$116, "data-workspace-head-pane", _p$.a = _v$88);
2578
2624
  return _p$;
2579
2625
  }, {
2580
2626
  e: undefined,
2581
- t: undefined
2627
+ t: undefined,
2628
+ a: undefined
2582
2629
  });
2583
2630
  return _el$116;
2584
2631
  })();
@@ -2613,14 +2660,17 @@ const AppWorkspace = props => {
2613
2660
  const slots = createMemo(() => flatten(resolved()));
2614
2661
  // Same props object, same memo value: a sibling change must not rebuild the head's slots.
2615
2662
  const head = createMemo(() => slots().find(headSlot)?.props);
2616
- const content = () => slots().filter(value => !headSlot(value));
2617
- return [_$createComponent(AppWorkspaceHead, {
2663
+ // Keep one head instance at the explicit slot's position. Object links
2664
+ // before it must also precede its view controls in SSR and keyboard order.
2665
+ // Callers without a slot retain the automatic leading head.
2666
+ const renderedHead = _$createComponent(AppWorkspaceHead, {
2618
2667
  sidebarId: sidebarId,
2619
2668
  nested: nested,
2620
2669
  get head() {
2621
2670
  return head();
2622
2671
  }
2623
- }), _$memo(content)];
2672
+ });
2673
+ return _$memo(() => head() ? slots().map(value => headSlot(value) ? value.props === head() ? renderedHead : null : value) : [renderedHead, ...slots()]);
2624
2674
  };
2625
2675
  return _$createComponent(ResizeContext.Provider, {
2626
2676
  get value() {
@@ -2630,23 +2680,23 @@ const AppWorkspace = props => {
2630
2680
  return _$createComponent(WorkspaceContext.Provider, {
2631
2681
  value: workspace,
2632
2682
  get children() {
2633
- var _el$145 = _$getNextElement(_tmpl$62);
2683
+ var _el$148 = _$getNextElement(_tmpl$62);
2634
2684
  var _ref$8 = root;
2635
- typeof _ref$8 === "function" ? _$use(_ref$8, _el$145) : root = _el$145;
2636
- _$insert(_el$145, contents);
2685
+ typeof _ref$8 === "function" ? _$use(_ref$8, _el$148) : root = _el$148;
2686
+ _$insert(_el$148, contents);
2637
2687
  _$effect(_p$ => {
2638
- var _v$87 = `k2b-app-workspace ${props.class ?? ""}`,
2639
- _v$88 = props.mobileSurface,
2640
- _v$89 = props.flat ? "true" : undefined,
2641
- _v$90 = initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed),
2642
- _v$91 = props.resizable === false ? "false" : "true",
2643
- _v$92 = appWorkspaceLayoutStyle(initialLayoutState());
2644
- _v$87 !== _p$.e && _$className(_el$145, _p$.e = _v$87);
2645
- _v$88 !== _p$.t && _$setAttribute(_el$145, "data-mobile-surface", _p$.t = _v$88);
2646
- _v$89 !== _p$.a && _$setAttribute(_el$145, "data-flat", _p$.a = _v$89);
2647
- _v$90 !== _p$.o && _$setAttribute(_el$145, "data-sidebar-collapsed", _p$.o = _v$90);
2648
- _v$91 !== _p$.i && _$setAttribute(_el$145, "data-workspace-resizable", _p$.i = _v$91);
2649
- _p$.n = _$style(_el$145, _v$92, _p$.n);
2688
+ var _v$89 = `k2b-app-workspace ${props.class ?? ""}`,
2689
+ _v$90 = props.mobileSurface,
2690
+ _v$91 = props.flat ? "true" : undefined,
2691
+ _v$92 = initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed),
2692
+ _v$93 = props.resizable === false ? "false" : "true",
2693
+ _v$94 = appWorkspaceLayoutStyle(initialLayoutState());
2694
+ _v$89 !== _p$.e && _$className(_el$148, _p$.e = _v$89);
2695
+ _v$90 !== _p$.t && _$setAttribute(_el$148, "data-mobile-surface", _p$.t = _v$90);
2696
+ _v$91 !== _p$.a && _$setAttribute(_el$148, "data-flat", _p$.a = _v$91);
2697
+ _v$92 !== _p$.o && _$setAttribute(_el$148, "data-sidebar-collapsed", _p$.o = _v$92);
2698
+ _v$93 !== _p$.i && _$setAttribute(_el$148, "data-workspace-resizable", _p$.i = _v$93);
2699
+ _p$.n = _$style(_el$148, _v$94, _p$.n);
2650
2700
  return _p$;
2651
2701
  }, {
2652
2702
  e: undefined,
@@ -2656,7 +2706,7 @@ const AppWorkspace = props => {
2656
2706
  i: undefined,
2657
2707
  n: undefined
2658
2708
  });
2659
- return _el$145;
2709
+ return _el$148;
2660
2710
  }
2661
2711
  });
2662
2712
  }
@@ -2672,10 +2722,10 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
2672
2722
  });
2673
2723
  AppWorkspace.Head = AppWorkspaceHeadSlot;
2674
2724
  AppWorkspace.Content = props => (() => {
2675
- var _el$146 = _$getNextElement(_tmpl$5);
2676
- _$insert(_el$146, () => props.children);
2677
- _$effect(() => _$className(_el$146, `k2b-app-workspace__content ${props.class ?? ""}`));
2678
- return _el$146;
2725
+ var _el$149 = _$getNextElement(_tmpl$5);
2726
+ _$insert(_el$149, () => props.children);
2727
+ _$effect(() => _$className(_el$149, `k2b-app-workspace__content ${props.class ?? ""}`));
2728
+ return _el$149;
2679
2729
  })();
2680
2730
  AppWorkspace.Main = AppWorkspaceMain;
2681
2731
  AppWorkspace.MainPane = AppWorkspaceMainPane;