@k2b/ui 0.31.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 (116) hide show
  1. package/dist/base.css +2 -0
  2. package/dist/browser/actions/ViewTabs.js +8 -0
  3. package/dist/browser/actions/ViewTabs.js.map +1 -1
  4. package/dist/browser/content/Chart.js +104 -55
  5. package/dist/browser/content/Chart.js.map +1 -1
  6. package/dist/browser/content/ChartExplorer.js +5 -3
  7. package/dist/browser/content/ChartExplorer.js.map +1 -1
  8. package/dist/browser/content/MapView.js +4 -4
  9. package/dist/browser/content/MapView.js.map +1 -1
  10. package/dist/browser/content/chart-inspection-core.js +4 -1
  11. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  12. package/dist/browser/content/code-highlight.js +66 -0
  13. package/dist/browser/content/code-highlight.js.map +1 -1
  14. package/dist/browser/content/index.js +1 -0
  15. package/dist/browser/content/index.js.map +1 -1
  16. package/dist/browser/content/map-view-live.js +47 -10
  17. package/dist/browser/content/map-view-live.js.map +1 -1
  18. package/dist/browser/content/map-view-types.js.map +1 -1
  19. package/dist/browser/inputs/AutocompleteEditor.js +167 -104
  20. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  21. package/dist/browser/inputs/RichSelect.js +1474 -0
  22. package/dist/browser/inputs/RichSelect.js.map +1 -0
  23. package/dist/browser/inputs/TextInput.js +95 -60
  24. package/dist/browser/inputs/TextInput.js.map +1 -1
  25. package/dist/browser/inputs/choice.js +19 -8
  26. package/dist/browser/inputs/choice.js.map +1 -1
  27. package/dist/browser/inputs/index.js +1 -0
  28. package/dist/browser/inputs/index.js.map +1 -1
  29. package/dist/browser/inputs/rich-select-messages.js +46 -0
  30. package/dist/browser/inputs/rich-select-messages.js.map +1 -0
  31. package/dist/browser/layout/AppWorkspace.js +177 -135
  32. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  33. package/dist/browser/layout/DetailPanel.js +10 -1
  34. package/dist/browser/layout/DetailPanel.js.map +1 -1
  35. package/dist/browser/layout/Navigation.js +14 -5
  36. package/dist/browser/layout/Navigation.js.map +1 -1
  37. package/dist/browser/layout/PageTitle.js +9 -3
  38. package/dist/browser/layout/PageTitle.js.map +1 -1
  39. package/dist/browser/layout/ResizeSeparator.js +8 -2
  40. package/dist/browser/layout/ResizeSeparator.js.map +1 -1
  41. package/dist/browser/layout/app-workspace-controller.js +192 -31
  42. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  43. package/dist/browser/layout/navigation-model.js.map +1 -1
  44. package/dist/browser/layout/resize-separator.js +25 -1
  45. package/dist/browser/layout/resize-separator.js.map +1 -1
  46. package/dist/browser/surfaces/Skeleton.js +14 -0
  47. package/dist/browser/surfaces/Skeleton.js.map +1 -0
  48. package/dist/browser/surfaces/index.js +1 -0
  49. package/dist/browser/surfaces/index.js.map +1 -1
  50. package/dist/ssr/actions/ViewTabs.js +8 -0
  51. package/dist/ssr/actions/ViewTabs.js.map +1 -1
  52. package/dist/ssr/content/Chart.js +27 -7
  53. package/dist/ssr/content/Chart.js.map +1 -1
  54. package/dist/ssr/content/ChartExplorer.js +5 -3
  55. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  56. package/dist/ssr/content/MapView.js +4 -4
  57. package/dist/ssr/content/MapView.js.map +1 -1
  58. package/dist/ssr/content/chart-inspection-core.js +4 -1
  59. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  60. package/dist/ssr/content/code-highlight.js +66 -0
  61. package/dist/ssr/content/code-highlight.js.map +1 -1
  62. package/dist/ssr/content/index.js +1 -0
  63. package/dist/ssr/content/index.js.map +1 -1
  64. package/dist/ssr/content/map-view-types.js.map +1 -1
  65. package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
  66. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  67. package/dist/ssr/inputs/RichSelect.js +950 -0
  68. package/dist/ssr/inputs/RichSelect.js.map +1 -0
  69. package/dist/ssr/inputs/TextInput.js +40 -16
  70. package/dist/ssr/inputs/TextInput.js.map +1 -1
  71. package/dist/ssr/inputs/choice.js +19 -8
  72. package/dist/ssr/inputs/choice.js.map +1 -1
  73. package/dist/ssr/inputs/index.js +1 -0
  74. package/dist/ssr/inputs/index.js.map +1 -1
  75. package/dist/ssr/inputs/rich-select-messages.js +46 -0
  76. package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
  77. package/dist/ssr/layout/AppWorkspace.js +36 -7
  78. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  79. package/dist/ssr/layout/DetailPanel.js +1 -1
  80. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  81. package/dist/ssr/layout/Navigation.js +1 -1
  82. package/dist/ssr/layout/Navigation.js.map +1 -1
  83. package/dist/ssr/layout/PageTitle.js +9 -3
  84. package/dist/ssr/layout/PageTitle.js.map +1 -1
  85. package/dist/ssr/layout/ResizeSeparator.js +4 -1
  86. package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
  87. package/dist/ssr/layout/app-workspace-controller.js +192 -31
  88. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  89. package/dist/ssr/layout/navigation-model.js.map +1 -1
  90. package/dist/ssr/layout/resize-separator.js +25 -1
  91. package/dist/ssr/layout/resize-separator.js.map +1 -1
  92. package/dist/ssr/surfaces/Skeleton.js +8 -0
  93. package/dist/ssr/surfaces/Skeleton.js.map +1 -0
  94. package/dist/ssr/surfaces/index.js +1 -0
  95. package/dist/ssr/surfaces/index.js.map +1 -1
  96. package/dist/styles.css +1 -1
  97. package/dist/types/content/Chart.d.ts +4 -2
  98. package/dist/types/content/ChartExplorer.d.ts +0 -1
  99. package/dist/types/content/code-highlight.d.ts +3 -1
  100. package/dist/types/content/index.d.ts +1 -0
  101. package/dist/types/content/map-view-live.d.ts +1 -1
  102. package/dist/types/content/map-view-types.d.ts +2 -0
  103. package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
  104. package/dist/types/inputs/RichSelect.d.ts +93 -0
  105. package/dist/types/inputs/TextInput.d.ts +5 -2
  106. package/dist/types/inputs/choice.d.ts +24 -4
  107. package/dist/types/inputs/index.d.ts +2 -0
  108. package/dist/types/inputs/rich-select-messages.d.ts +21 -0
  109. package/dist/types/layout/AppWorkspace.d.ts +7 -0
  110. package/dist/types/layout/DetailPanel.d.ts +2 -0
  111. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  112. package/dist/types/layout/navigation-model.d.ts +2 -0
  113. package/dist/types/layout/resize-separator.d.ts +1 -0
  114. package/dist/types/surfaces/Skeleton.d.ts +6 -0
  115. package/dist/types/surfaces/index.d.ts +1 -0
  116. package/package.json +4 -4
@@ -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,7 +87,7 @@ 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
92
  import { appWorkspaceInverseWidthCss, appWorkspaceWidthCss, appWorkspaceWidthToken, isAppWorkspaceWidthShare } from "./app-workspace-width";
93
93
  import BottomSheet, { bottomSheetAdaptiveOptions } from "./BottomSheet";
@@ -657,15 +657,20 @@ function AppWorkspaceDetail(props) {
657
657
  let aside;
658
658
  onMount(() => {
659
659
  const close = () => props.onClose?.();
660
+ const open = () => {
661
+ if (props.available !== false) props.onOpen?.();
662
+ };
660
663
  const isStep = detail => typeof detail === "object" && detail !== null && "direction" in detail && (detail.direction === 1 || detail.direction === -1);
661
664
  const step = event => {
662
665
  if (!(event instanceof CustomEvent) || !isStep(event.detail)) return;
663
666
  const item = props.onStep?.(event.detail.direction);
664
667
  if (item instanceof HTMLElement) event.detail.item = item;
665
668
  };
669
+ aside?.addEventListener(APP_WORKSPACE_DETAIL_OPEN_EVENT, open);
666
670
  aside?.addEventListener(APP_WORKSPACE_DETAIL_CLOSE_EVENT, close);
667
671
  aside?.addEventListener(APP_WORKSPACE_DETAIL_STEP_EVENT, step);
668
672
  onCleanup(() => {
673
+ aside?.removeEventListener(APP_WORKSPACE_DETAIL_OPEN_EVENT, open);
669
674
  aside?.removeEventListener(APP_WORKSPACE_DETAIL_CLOSE_EVENT, close);
670
675
  aside?.removeEventListener(APP_WORKSPACE_DETAIL_STEP_EVENT, step);
671
676
  });
@@ -682,6 +687,12 @@ function AppWorkspaceDetail(props) {
682
687
  },
683
688
  "aria-expanded": "false",
684
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
+ },
685
696
  "class": "k2b-app-workspace__detail-toggle",
686
697
  get children() {
687
698
  return [_$getNextElement(_tmpl$1), _$memo(() => workspaceMessages().details)];
@@ -709,6 +720,7 @@ function AppWorkspaceDetail(props) {
709
720
  get maxSize() {
710
721
  return maxWidth();
711
722
  },
723
+ shadow: true,
712
724
  get style() {
713
725
  return sizeStyle();
714
726
  }
@@ -730,14 +742,15 @@ function AppWorkspaceDetail(props) {
730
742
  _v$34 = props.openOnChoice === false ? "request" : undefined,
731
743
  _v$35 = panelId(),
732
744
  _v$36 = resizable() ? "true" : "false",
733
- _v$37 = props.onClose ? "true" : undefined,
734
- _v$38 = props.onStep ? "true" : undefined,
735
- _v$39 = !props.open,
736
- _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 = {
737
750
  ...sizeStyle(),
738
751
  "view-transition-name": props.viewTransitionName
739
752
  },
740
- _v$41 = workspaceMessages().detailFullHeight;
753
+ _v$42 = workspaceMessages().detailFullHeight;
741
754
  _v$30 !== _p$.e && _$setAttribute(_el$20, "id", _p$.e = _v$30);
742
755
  _v$31 !== _p$.t && _$className(_el$20, _p$.t = _v$31);
743
756
  _v$32 !== _p$.a && _$setAttribute(_el$20, "data-width", _p$.a = _v$32);
@@ -745,11 +758,12 @@ function AppWorkspaceDetail(props) {
745
758
  _v$34 !== _p$.i && _$setAttribute(_el$20, "data-workspace-detail-choice", _p$.i = _v$34);
746
759
  _v$35 !== _p$.n && _$setAttribute(_el$20, "data-workspace-panel-id", _p$.n = _v$35);
747
760
  _v$36 !== _p$.s && _$setAttribute(_el$20, "data-workspace-resizable", _p$.s = _v$36);
748
- _v$37 !== _p$.h && _$setAttribute(_el$20, "data-workspace-detail-closable", _p$.h = _v$37);
749
- _v$38 !== _p$.r && _$setAttribute(_el$20, "data-workspace-detail-steppable", _p$.r = _v$38);
750
- _v$39 !== _p$.d && _$setProperty(_el$20, "hidden", _p$.d = _v$39);
751
- _p$.l = _$style(_el$20, _v$40, _p$.l);
752
- _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);
753
767
  return _p$;
754
768
  }, {
755
769
  e: undefined,
@@ -763,7 +777,8 @@ function AppWorkspaceDetail(props) {
763
777
  r: undefined,
764
778
  d: undefined,
765
779
  l: undefined,
766
- u: undefined
780
+ u: undefined,
781
+ c: undefined
767
782
  });
768
783
  return _el$20;
769
784
  })()];
@@ -818,22 +833,22 @@ function AppWorkspaceBottomDrawer(props) {
818
833
  var _el$24 = _$getNextElement(_tmpl$11);
819
834
  _$insert(_el$24, () => props.children);
820
835
  _$effect(_p$ => {
821
- var _v$42 = domId(),
822
- _v$43 = `k2b-app-workspace__drawer ${props.class ?? ""}`,
823
- _v$44 = props.height ?? "md",
824
- _v$45 = panelId(),
825
- _v$46 = resizable() ? "true" : "false",
826
- _v$47 = !props.open,
827
- _v$48 = `var(${variable()}, ${defaultHeight()}px)`,
828
- _v$49 = props.viewTransitionName;
829
- _v$42 !== _p$.e && _$setAttribute(_el$24, "id", _p$.e = _v$42);
830
- _v$43 !== _p$.t && _$className(_el$24, _p$.t = _v$43);
831
- _v$44 !== _p$.a && _$setAttribute(_el$24, "data-height", _p$.a = _v$44);
832
- _v$45 !== _p$.o && _$setAttribute(_el$24, "data-workspace-panel-id", _p$.o = _v$45);
833
- _v$46 !== _p$.i && _$setAttribute(_el$24, "data-workspace-resizable", _p$.i = _v$46);
834
- _v$47 !== _p$.n && _$setProperty(_el$24, "hidden", _p$.n = _v$47);
835
- _v$48 !== _p$.s && _$setStyleProperty(_el$24, "--k2b-workspace-panel-size", _p$.s = _v$48);
836
- _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);
837
852
  return _p$;
838
853
  }, {
839
854
  e: undefined,
@@ -936,10 +951,10 @@ function AppWorkspaceSidebar(props) {
936
951
  _$addEventListener(_el$25, "click", event => choose(event, () => close()));
937
952
  _$insert(_el$25, resolved);
938
953
  _$effect(_p$ => {
939
- var _v$50 = props.label,
940
- _v$51 = accent;
941
- _v$50 !== _p$.e && _$setAttribute(_el$25, "aria-label", _p$.e = _v$50);
942
- _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);
943
958
  return _p$;
944
959
  }, {
945
960
  e: undefined,
@@ -1023,10 +1038,10 @@ function AppWorkspaceSidebar(props) {
1023
1038
  typeof _ref$4 === "function" ? _$use(_ref$4, _el$26) : row = _el$26;
1024
1039
  _$insert(_el$26, () => desktop()?.children);
1025
1040
  _$effect(_p$ => {
1026
- var _v$52 = stacked() ? "both" : undefined,
1027
- _v$53 = stacked() ? "horizontal" : undefined;
1028
- _v$52 !== _p$.e && _$setAttribute(_el$26, "data-scroll-fade-mode", _p$.e = _v$52);
1029
- _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);
1030
1045
  return _p$;
1031
1046
  }, {
1032
1047
  e: undefined,
@@ -1044,12 +1059,12 @@ function AppWorkspaceSidebar(props) {
1044
1059
  _el$27.$$click = event => openAll(event.currentTarget);
1045
1060
  _$insert(_el$28, () => workspaceMessages().sidebarAll);
1046
1061
  _$effect(_p$ => {
1047
- var _v$54 = sheetOpen(),
1048
- _v$55 = props.label ? workspaceMessages().sidebarAllLabel({
1062
+ var _v$55 = sheetOpen(),
1063
+ _v$56 = props.label ? workspaceMessages().sidebarAllLabel({
1049
1064
  label: props.label
1050
1065
  }) : undefined;
1051
- _v$54 !== _p$.e && _$setAttribute(_el$27, "aria-expanded", _p$.e = _v$54);
1052
- _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);
1053
1068
  return _p$;
1054
1069
  }, {
1055
1070
  e: undefined,
@@ -1242,10 +1257,10 @@ const AppWorkspaceSidebarSection = props => {
1242
1257
  _$setAttribute(_el$38, "aria-controls", id);
1243
1258
  _$insert(_el$38, title, _el$41, _co$5);
1244
1259
  _$effect(_p$ => {
1245
- var _v$56 = open(),
1246
- _v$57 = open() ? "ti ti-chevron-down" : "ti ti-chevron-right";
1247
- _v$56 !== _p$.e && _$setAttribute(_el$38, "aria-expanded", _p$.e = _v$56);
1248
- _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);
1249
1264
  return _p$;
1250
1265
  }, {
1251
1266
  e: undefined,
@@ -1367,10 +1382,10 @@ const AppWorkspaceSidebarItemStatus = props => {
1367
1382
  }
1368
1383
  }));
1369
1384
  _$effect(_p$ => {
1370
- var _v$58 = waiting() !== null ? undefined : count() ? "count" : dot() ? "dot" : undefined,
1371
- _v$59 = waiting() === null ? undefined : waiting() ? "count" : "zero";
1372
- _v$58 !== _p$.e && _$setAttribute(_el$52, "data-unread", _p$.e = _v$58);
1373
- _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);
1374
1389
  return _p$;
1375
1390
  }, {
1376
1391
  e: undefined,
@@ -1595,10 +1610,10 @@ function AppWorkspaceSidebarItem(props) {
1595
1610
  }
1596
1611
  }), _el$82, _co$12);
1597
1612
  _$effect(_p$ => {
1598
- var _v$60 = oneLine() ? "1" : undefined,
1599
- _v$61 = !oneLine() && typeof label() === "string" ? label() : undefined;
1600
- _v$60 !== _p$.e && _$setAttribute(_el$76, "data-lines", _p$.e = _v$60);
1601
- _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);
1602
1617
  return _p$;
1603
1618
  }, {
1604
1619
  e: undefined,
@@ -1613,10 +1628,10 @@ function AppWorkspaceSidebarItem(props) {
1613
1628
  var _el$83 = _$getNextElement(_tmpl$40);
1614
1629
  _$insert(_el$83, meta);
1615
1630
  _$effect(_p$ => {
1616
- var _v$62 = props.preview?.trigger === "row" ? metaId : undefined,
1617
- _v$63 = metaVisibility() === "hover" ? "hover" : undefined;
1618
- _v$62 !== _p$.e && _$setAttribute(_el$83, "id", _p$.e = _v$62);
1619
- _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);
1620
1635
  return _p$;
1621
1636
  }, {
1622
1637
  e: undefined,
@@ -1657,12 +1672,12 @@ function AppWorkspaceSidebarItem(props) {
1657
1672
  _el$87.$$click = select;
1658
1673
  _$insert(_el$87, content);
1659
1674
  _$effect(_p$ => {
1660
- var _v$67 = actionSlot()?.disabled,
1661
- _v$68 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1662
- _v$69 = label();
1663
- _v$67 !== _p$.e && _$setProperty(_el$87, "disabled", _p$.e = _v$67);
1664
- _v$68 !== _p$.t && _$setAttribute(_el$87, "data-visibility", _p$.t = _v$68);
1665
- _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);
1666
1681
  return _p$;
1667
1682
  }, {
1668
1683
  e: undefined,
@@ -1678,12 +1693,12 @@ function AppWorkspaceSidebarItem(props) {
1678
1693
  _el$86.$$click = select;
1679
1694
  _$insert(_el$86, content);
1680
1695
  _$effect(_p$ => {
1681
- var _v$64 = actionSlot()?.href,
1682
- _v$65 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1683
- _v$66 = label();
1684
- _v$64 !== _p$.e && _$setAttribute(_el$86, "href", _p$.e = _v$64);
1685
- _v$65 !== _p$.t && _$setAttribute(_el$86, "data-visibility", _p$.t = _v$65);
1686
- _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);
1687
1702
  return _p$;
1688
1703
  }, {
1689
1704
  e: undefined,
@@ -2034,10 +2049,10 @@ const AppWorkspaceNavTree = props => {
2034
2049
  var _el$94 = _$getNextElement(_tmpl$46);
2035
2050
  _$insert(_el$94, () => item.meta);
2036
2051
  _$effect(_p$ => {
2037
- var _v$70 = `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`,
2038
- _v$71 = item.metaVisibility === "hover" ? "hover" : undefined;
2039
- _v$70 !== _p$.e && _$className(_el$94, _p$.e = _v$70);
2040
- _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);
2041
2056
  return _p$;
2042
2057
  }, {
2043
2058
  e: undefined,
@@ -2189,28 +2204,28 @@ const AppWorkspaceNavTree = props => {
2189
2204
  }
2190
2205
  }), _el$104, _co$14);
2191
2206
  _$effect(_p$ => {
2192
- var _v$72 = siblings().length,
2193
- _v$73 = place() + 1,
2194
- _v$74 = selected(),
2195
- _v$75 = hasChildren() ? isExpanded(item.id) : undefined,
2196
- _v$76 = item.disabled ? "true" : undefined,
2197
- _v$77 = item.disabled ? -1 : tabStopId() === item.id ? 0 : -1,
2198
- _v$78 = movable() ? true : undefined,
2199
- _v$79 = item.id,
2200
- _v$80 = dragged()?.id === item.id ? "" : undefined,
2201
- _v$81 = dropTarget()?.id === item.id ? dropTarget().side : undefined,
2202
- _v$82 = String(props.indented === false ? 0 : depth);
2203
- _v$72 !== _p$.e && _$setAttribute(_el$99, "aria-setsize", _p$.e = _v$72);
2204
- _v$73 !== _p$.t && _$setAttribute(_el$99, "aria-posinset", _p$.t = _v$73);
2205
- _v$74 !== _p$.a && _$setAttribute(_el$99, "aria-selected", _p$.a = _v$74);
2206
- _v$75 !== _p$.o && _$setAttribute(_el$99, "aria-expanded", _p$.o = _v$75);
2207
- _v$76 !== _p$.i && _$setAttribute(_el$99, "aria-disabled", _p$.i = _v$76);
2208
- _v$77 !== _p$.n && _$setAttribute(_el$99, "tabindex", _p$.n = _v$77);
2209
- _v$78 !== _p$.s && _$setAttribute(_el$99, "draggable", _p$.s = _v$78);
2210
- _v$79 !== _p$.h && _$setAttribute(_el$99, "data-k2b-nav-tree-id", _p$.h = _v$79);
2211
- _v$80 !== _p$.r && _$setAttribute(_el$99, "data-k2b-nav-tree-dragging", _p$.r = _v$80);
2212
- _v$81 !== _p$.d && _$setAttribute(_el$99, "data-k2b-nav-tree-drop", _p$.d = _v$81);
2213
- _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);
2214
2229
  return _p$;
2215
2230
  }, {
2216
2231
  e: undefined,
@@ -2264,10 +2279,10 @@ const AppWorkspaceNavTree = props => {
2264
2279
  typeof _ref$7 === "function" ? _$use(_ref$7, _el$105) : root = _el$105;
2265
2280
  _$insert(_el$105, () => renderItems(roots, 0));
2266
2281
  _$effect(_p$ => {
2267
- var _v$83 = `k2b-app-workspace__nav-tree ${props.class ?? ""}`,
2268
- _v$84 = props.ariaLabel;
2269
- _v$83 !== _p$.e && _$className(_el$105, _p$.e = _v$83);
2270
- _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);
2271
2286
  return _p$;
2272
2287
  }, {
2273
2288
  e: undefined,
@@ -2392,6 +2407,15 @@ function AppWorkspaceHead(props) {
2392
2407
  const resolvedCount = children(() => props.head?.count);
2393
2408
  // A nested workspace is part of a page that already shows its title.
2394
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
+ };
2395
2419
  const resetContent = () => filters().reset;
2396
2420
  const primaryContent = () => [(() => {
2397
2421
  var _el$114 = _$getNextElement(_tmpl$53);
@@ -2404,7 +2428,9 @@ function AppWorkspaceHead(props) {
2404
2428
  })()];
2405
2429
  return (() => {
2406
2430
  var _el$116 = _$getNextElement(_tmpl$60),
2407
- _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,
2408
2434
  _el$127 = _el$117.firstChild,
2409
2435
  [_el$128, _co$18] = _$getNextMarker(_el$127.nextSibling),
2410
2436
  _el$129 = _el$128.nextSibling,
@@ -2415,8 +2441,18 @@ function AppWorkspaceHead(props) {
2415
2441
  [_el$134, _co$21] = _$getNextMarker(_el$133.nextSibling),
2416
2442
  _el$135 = _el$134.nextSibling,
2417
2443
  [_el$136, _co$22] = _$getNextMarker(_el$135.nextSibling),
2418
- _el$142 = _el$117.nextSibling,
2419
- [_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);
2420
2456
  _$insert(_el$117, _$createComponent(IconButton, {
2421
2457
  "class": "k2b-app-workspace__head-toggle",
2422
2458
  get label() {
@@ -2442,10 +2478,10 @@ function AppWorkspaceHead(props) {
2442
2478
  as: "p",
2443
2479
  fallback: true
2444
2480
  }), (() => {
2445
- var _el$144 = _$getNextElement(_tmpl$61);
2446
- _$setAttribute(_el$144, "data-k2b-server", isServer ? "" : undefined);
2447
- _$insert(_el$144, () => current().title);
2448
- 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;
2449
2485
  })()]
2450
2486
  }), _el$130, _co$19);
2451
2487
  _$insert(_el$117, _$createComponent(Show, {
@@ -2577,16 +2613,19 @@ function AppWorkspaceHead(props) {
2577
2613
  }), _el$141, _co$24);
2578
2614
  return _el$137;
2579
2615
  }
2580
- }), _el$143, _co$25);
2616
+ }), _el$145, _co$26);
2581
2617
  _$effect(_p$ => {
2582
- var _v$85 = trail()?.ancestors.length ? "up" : trail() ? "title" : undefined,
2583
- _v$86 = props.head ? "" : undefined;
2584
- _v$85 !== _p$.e && _$setAttribute(_el$116, "data-trail", _p$.e = _v$85);
2585
- _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);
2586
2624
  return _p$;
2587
2625
  }, {
2588
2626
  e: undefined,
2589
- t: undefined
2627
+ t: undefined,
2628
+ a: undefined
2590
2629
  });
2591
2630
  return _el$116;
2592
2631
  })();
@@ -2621,14 +2660,17 @@ const AppWorkspace = props => {
2621
2660
  const slots = createMemo(() => flatten(resolved()));
2622
2661
  // Same props object, same memo value: a sibling change must not rebuild the head's slots.
2623
2662
  const head = createMemo(() => slots().find(headSlot)?.props);
2624
- const content = () => slots().filter(value => !headSlot(value));
2625
- 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, {
2626
2667
  sidebarId: sidebarId,
2627
2668
  nested: nested,
2628
2669
  get head() {
2629
2670
  return head();
2630
2671
  }
2631
- }), _$memo(content)];
2672
+ });
2673
+ return _$memo(() => head() ? slots().map(value => headSlot(value) ? value.props === head() ? renderedHead : null : value) : [renderedHead, ...slots()]);
2632
2674
  };
2633
2675
  return _$createComponent(ResizeContext.Provider, {
2634
2676
  get value() {
@@ -2638,23 +2680,23 @@ const AppWorkspace = props => {
2638
2680
  return _$createComponent(WorkspaceContext.Provider, {
2639
2681
  value: workspace,
2640
2682
  get children() {
2641
- var _el$145 = _$getNextElement(_tmpl$62);
2683
+ var _el$148 = _$getNextElement(_tmpl$62);
2642
2684
  var _ref$8 = root;
2643
- typeof _ref$8 === "function" ? _$use(_ref$8, _el$145) : root = _el$145;
2644
- _$insert(_el$145, contents);
2685
+ typeof _ref$8 === "function" ? _$use(_ref$8, _el$148) : root = _el$148;
2686
+ _$insert(_el$148, contents);
2645
2687
  _$effect(_p$ => {
2646
- var _v$87 = `k2b-app-workspace ${props.class ?? ""}`,
2647
- _v$88 = props.mobileSurface,
2648
- _v$89 = props.flat ? "true" : undefined,
2649
- _v$90 = initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed),
2650
- _v$91 = props.resizable === false ? "false" : "true",
2651
- _v$92 = appWorkspaceLayoutStyle(initialLayoutState());
2652
- _v$87 !== _p$.e && _$className(_el$145, _p$.e = _v$87);
2653
- _v$88 !== _p$.t && _$setAttribute(_el$145, "data-mobile-surface", _p$.t = _v$88);
2654
- _v$89 !== _p$.a && _$setAttribute(_el$145, "data-flat", _p$.a = _v$89);
2655
- _v$90 !== _p$.o && _$setAttribute(_el$145, "data-sidebar-collapsed", _p$.o = _v$90);
2656
- _v$91 !== _p$.i && _$setAttribute(_el$145, "data-workspace-resizable", _p$.i = _v$91);
2657
- _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);
2658
2700
  return _p$;
2659
2701
  }, {
2660
2702
  e: undefined,
@@ -2664,7 +2706,7 @@ const AppWorkspace = props => {
2664
2706
  i: undefined,
2665
2707
  n: undefined
2666
2708
  });
2667
- return _el$145;
2709
+ return _el$148;
2668
2710
  }
2669
2711
  });
2670
2712
  }
@@ -2680,10 +2722,10 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
2680
2722
  });
2681
2723
  AppWorkspace.Head = AppWorkspaceHeadSlot;
2682
2724
  AppWorkspace.Content = props => (() => {
2683
- var _el$146 = _$getNextElement(_tmpl$5);
2684
- _$insert(_el$146, () => props.children);
2685
- _$effect(() => _$className(_el$146, `k2b-app-workspace__content ${props.class ?? ""}`));
2686
- 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;
2687
2729
  })();
2688
2730
  AppWorkspace.Main = AppWorkspaceMain;
2689
2731
  AppWorkspace.MainPane = AppWorkspaceMainPane;