@k2b/ui 0.29.0 → 0.31.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 (243) hide show
  1. package/README.md +2 -2
  2. package/dist/base.css +2 -2
  3. package/dist/browser/actions/Dropdown.js +6 -3
  4. package/dist/browser/actions/Dropdown.js.map +1 -1
  5. package/dist/browser/actions/FilterChip.js +137 -7
  6. package/dist/browser/actions/FilterChip.js.map +1 -1
  7. package/dist/browser/actions/SegmentedControl.js +5 -9
  8. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  9. package/dist/browser/actions/SpotlightSearch.js +6 -3
  10. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  11. package/dist/browser/actions/Tabs.js +5 -2
  12. package/dist/browser/actions/Tabs.js.map +1 -1
  13. package/dist/browser/actions/Toolbar.js +2 -0
  14. package/dist/browser/actions/Toolbar.js.map +1 -1
  15. package/dist/browser/actions/ViewTabs.js +294 -0
  16. package/dist/browser/actions/ViewTabs.js.map +1 -0
  17. package/dist/browser/actions/filter-messages.js +6 -2
  18. package/dist/browser/actions/filter-messages.js.map +1 -1
  19. package/dist/browser/actions/index.js +2 -1
  20. package/dist/browser/actions/index.js.map +1 -1
  21. package/dist/browser/chat/ChatComposer.js +1108 -604
  22. package/dist/browser/chat/ChatComposer.js.map +1 -1
  23. package/dist/browser/chat/ChatDecision.js +146 -84
  24. package/dist/browser/chat/ChatDecision.js.map +1 -1
  25. package/dist/browser/chat/ChatPrimitives.js +292 -159
  26. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  27. package/dist/browser/chat/chat-messages.js +8 -0
  28. package/dist/browser/chat/chat-messages.js.map +1 -1
  29. package/dist/browser/chat/command-search.js +26 -15
  30. package/dist/browser/chat/command-search.js.map +1 -1
  31. package/dist/browser/chat/index.js +4 -2
  32. package/dist/browser/chat/index.js.map +1 -1
  33. package/dist/browser/content/Calendar.js +143 -116
  34. package/dist/browser/content/Calendar.js.map +1 -1
  35. package/dist/browser/content/CalendarWeekView.js +291 -266
  36. package/dist/browser/content/CalendarWeekView.js.map +1 -1
  37. package/dist/browser/content/DataTable.js +224 -155
  38. package/dist/browser/content/DataTable.js.map +1 -1
  39. package/dist/browser/content/MapAttribution.js +27 -0
  40. package/dist/browser/content/MapAttribution.js.map +1 -0
  41. package/dist/browser/content/MapView.js +553 -0
  42. package/dist/browser/content/MapView.js.map +1 -0
  43. package/dist/browser/content/MapViewFrame.js +395 -0
  44. package/dist/browser/content/MapViewFrame.js.map +1 -0
  45. package/dist/browser/content/data-table-messages.js +4 -2
  46. package/dist/browser/content/data-table-messages.js.map +1 -1
  47. package/dist/browser/content/index.js +5 -0
  48. package/dist/browser/content/index.js.map +1 -1
  49. package/dist/browser/content/map-palette.js +39 -0
  50. package/dist/browser/content/map-palette.js.map +1 -0
  51. package/dist/browser/content/map-style.js +276 -0
  52. package/dist/browser/content/map-style.js.map +1 -0
  53. package/dist/browser/content/map-view-geometry.js +269 -0
  54. package/dist/browser/content/map-view-geometry.js.map +1 -0
  55. package/dist/browser/content/map-view-live.js +28 -0
  56. package/dist/browser/content/map-view-live.js.map +1 -0
  57. package/dist/browser/content/map-view-messages.js +53 -0
  58. package/dist/browser/content/map-view-messages.js.map +1 -0
  59. package/dist/browser/content/map-view-types.js +2 -0
  60. package/dist/browser/content/map-view-types.js.map +1 -0
  61. package/dist/browser/content/map-view-worker.js +10 -0
  62. package/dist/browser/feedback/MovedHint.js +197 -0
  63. package/dist/browser/feedback/MovedHint.js.map +1 -0
  64. package/dist/browser/feedback/dialog-core.js +85 -9
  65. package/dist/browser/feedback/dialog-core.js.map +1 -1
  66. package/dist/browser/feedback/index.js +1 -0
  67. package/dist/browser/feedback/index.js.map +1 -1
  68. package/dist/browser/feedback/prompts.js +6 -1
  69. package/dist/browser/feedback/prompts.js.map +1 -1
  70. package/dist/browser/inputs/DatePicker.js +337 -212
  71. package/dist/browser/inputs/DatePicker.js.map +1 -1
  72. package/dist/browser/inputs/date-picker.js +59 -5
  73. package/dist/browser/inputs/date-picker.js.map +1 -1
  74. package/dist/browser/intl/messages.js +12 -0
  75. package/dist/browser/intl/messages.js.map +1 -1
  76. package/dist/browser/intl/weekend.js +39 -0
  77. package/dist/browser/intl/weekend.js.map +1 -0
  78. package/dist/browser/layout/AppOverview.js +0 -1
  79. package/dist/browser/layout/AppOverview.js.map +1 -1
  80. package/dist/browser/layout/AppWorkspace.js +701 -476
  81. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  82. package/dist/browser/layout/PageTitle.js +3 -2
  83. package/dist/browser/layout/PageTitle.js.map +1 -1
  84. package/dist/browser/layout/SettingsModal.js +2 -2
  85. package/dist/browser/layout/SettingsModal.js.map +1 -1
  86. package/dist/browser/layout/SidebarSwitcher.js +13 -12
  87. package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
  88. package/dist/browser/layout/TabBar.js +1 -1
  89. package/dist/browser/layout/TabBar.js.map +1 -1
  90. package/dist/browser/layout/app-host-width.js +44 -0
  91. package/dist/browser/layout/app-host-width.js.map +1 -0
  92. package/dist/browser/layout/app-workspace-controller.js +331 -45
  93. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  94. package/dist/browser/layout/app-workspace-width.js +26 -0
  95. package/dist/browser/layout/app-workspace-width.js.map +1 -0
  96. package/dist/browser/layout/index.js +2 -1
  97. package/dist/browser/layout/index.js.map +1 -1
  98. package/dist/browser/surfaces/Placeholder.js +36 -13
  99. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  100. package/dist/licenses/maplibre-gl.txt +116 -0
  101. package/dist/ssr/actions/Dropdown.js +5 -2
  102. package/dist/ssr/actions/Dropdown.js.map +1 -1
  103. package/dist/ssr/actions/FilterChip.js +59 -7
  104. package/dist/ssr/actions/FilterChip.js.map +1 -1
  105. package/dist/ssr/actions/SegmentedControl.js +1 -2
  106. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  107. package/dist/ssr/actions/SpotlightSearch.js +2 -2
  108. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  109. package/dist/ssr/actions/Tabs.js +2 -2
  110. package/dist/ssr/actions/Tabs.js.map +1 -1
  111. package/dist/ssr/actions/Toolbar.js +2 -0
  112. package/dist/ssr/actions/Toolbar.js.map +1 -1
  113. package/dist/ssr/actions/ViewTabs.js +211 -0
  114. package/dist/ssr/actions/ViewTabs.js.map +1 -0
  115. package/dist/ssr/actions/filter-messages.js +6 -2
  116. package/dist/ssr/actions/filter-messages.js.map +1 -1
  117. package/dist/ssr/actions/index.js +2 -1
  118. package/dist/ssr/actions/index.js.map +1 -1
  119. package/dist/ssr/chat/ChatComposer.js +546 -131
  120. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  121. package/dist/ssr/chat/ChatDecision.js +44 -19
  122. package/dist/ssr/chat/ChatDecision.js.map +1 -1
  123. package/dist/ssr/chat/ChatPrimitives.js +95 -24
  124. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  125. package/dist/ssr/chat/chat-messages.js +8 -0
  126. package/dist/ssr/chat/chat-messages.js.map +1 -1
  127. package/dist/ssr/chat/command-search.js +26 -15
  128. package/dist/ssr/chat/command-search.js.map +1 -1
  129. package/dist/ssr/chat/index.js +4 -2
  130. package/dist/ssr/chat/index.js.map +1 -1
  131. package/dist/ssr/content/Calendar.js +109 -100
  132. package/dist/ssr/content/Calendar.js.map +1 -1
  133. package/dist/ssr/content/CalendarWeekView.js +42 -28
  134. package/dist/ssr/content/CalendarWeekView.js.map +1 -1
  135. package/dist/ssr/content/DataTable.js +78 -31
  136. package/dist/ssr/content/DataTable.js.map +1 -1
  137. package/dist/ssr/content/MapAttribution.js +19 -0
  138. package/dist/ssr/content/MapAttribution.js.map +1 -0
  139. package/dist/ssr/content/MapView.js +474 -0
  140. package/dist/ssr/content/MapView.js.map +1 -0
  141. package/dist/ssr/content/MapViewFrame.js +193 -0
  142. package/dist/ssr/content/MapViewFrame.js.map +1 -0
  143. package/dist/ssr/content/data-table-messages.js +4 -2
  144. package/dist/ssr/content/data-table-messages.js.map +1 -1
  145. package/dist/ssr/content/index.js +5 -0
  146. package/dist/ssr/content/index.js.map +1 -1
  147. package/dist/ssr/content/map-palette.js +39 -0
  148. package/dist/ssr/content/map-palette.js.map +1 -0
  149. package/dist/ssr/content/map-style.js +276 -0
  150. package/dist/ssr/content/map-style.js.map +1 -0
  151. package/dist/ssr/content/map-view-geometry.js +269 -0
  152. package/dist/ssr/content/map-view-geometry.js.map +1 -0
  153. package/dist/ssr/content/map-view-live.js +1 -0
  154. package/dist/ssr/content/map-view-messages.js +53 -0
  155. package/dist/ssr/content/map-view-messages.js.map +1 -0
  156. package/dist/ssr/content/map-view-types.js +2 -0
  157. package/dist/ssr/content/map-view-types.js.map +1 -0
  158. package/dist/ssr/feedback/MovedHint.js +166 -0
  159. package/dist/ssr/feedback/MovedHint.js.map +1 -0
  160. package/dist/ssr/feedback/dialog-core.js +85 -9
  161. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  162. package/dist/ssr/feedback/index.js +1 -0
  163. package/dist/ssr/feedback/index.js.map +1 -1
  164. package/dist/ssr/feedback/prompts.js +6 -1
  165. package/dist/ssr/feedback/prompts.js.map +1 -1
  166. package/dist/ssr/inputs/DatePicker.js +138 -69
  167. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  168. package/dist/ssr/inputs/date-picker.js +59 -5
  169. package/dist/ssr/inputs/date-picker.js.map +1 -1
  170. package/dist/ssr/intl/messages.js +12 -0
  171. package/dist/ssr/intl/messages.js.map +1 -1
  172. package/dist/ssr/intl/weekend.js +39 -0
  173. package/dist/ssr/intl/weekend.js.map +1 -0
  174. package/dist/ssr/layout/AppOverview.js +0 -1
  175. package/dist/ssr/layout/AppOverview.js.map +1 -1
  176. package/dist/ssr/layout/AppWorkspace.js +216 -44
  177. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  178. package/dist/ssr/layout/PageTitle.js +3 -2
  179. package/dist/ssr/layout/PageTitle.js.map +1 -1
  180. package/dist/ssr/layout/SettingsModal.js +2 -2
  181. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  182. package/dist/ssr/layout/SidebarSwitcher.js +13 -12
  183. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
  184. package/dist/ssr/layout/TabBar.js +1 -1
  185. package/dist/ssr/layout/TabBar.js.map +1 -1
  186. package/dist/ssr/layout/app-host-width.js +44 -0
  187. package/dist/ssr/layout/app-host-width.js.map +1 -0
  188. package/dist/ssr/layout/app-workspace-controller.js +331 -45
  189. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  190. package/dist/ssr/layout/app-workspace-width.js +26 -0
  191. package/dist/ssr/layout/app-workspace-width.js.map +1 -0
  192. package/dist/ssr/layout/index.js +2 -1
  193. package/dist/ssr/layout/index.js.map +1 -1
  194. package/dist/ssr/surfaces/Placeholder.js +24 -7
  195. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  196. package/dist/styles.css +1 -1
  197. package/dist/types/actions/Dropdown.d.ts +4 -0
  198. package/dist/types/actions/FilterChip.d.ts +22 -0
  199. package/dist/types/actions/ViewTabs.d.ts +30 -0
  200. package/dist/types/actions/filter-messages.d.ts +2 -0
  201. package/dist/types/actions/index.d.ts +4 -2
  202. package/dist/types/chat/ChatComposer.d.ts +52 -0
  203. package/dist/types/chat/ChatDecision.d.ts +18 -2
  204. package/dist/types/chat/ChatPrimitives.d.ts +10 -0
  205. package/dist/types/chat/chat-messages.d.ts +4 -0
  206. package/dist/types/chat/command-search.d.ts +2 -0
  207. package/dist/types/chat/index.d.ts +9 -8
  208. package/dist/types/content/DataTable.d.ts +3 -0
  209. package/dist/types/content/MapAttribution.d.ts +6 -0
  210. package/dist/types/content/MapView.d.ts +5 -0
  211. package/dist/types/content/MapViewFrame.d.ts +31 -0
  212. package/dist/types/content/data-table-messages.d.ts +1 -0
  213. package/dist/types/content/index.d.ts +6 -0
  214. package/dist/types/content/map-palette.d.ts +58 -0
  215. package/dist/types/content/map-style.d.ts +29 -0
  216. package/dist/types/content/map-view-geometry.d.ts +55 -0
  217. package/dist/types/content/map-view-live.d.ts +2 -0
  218. package/dist/types/content/map-view-messages.d.ts +21 -0
  219. package/dist/types/content/map-view-types.d.ts +61 -0
  220. package/dist/types/feedback/MovedHint.d.ts +25 -0
  221. package/dist/types/feedback/dialog-core.d.ts +6 -2
  222. package/dist/types/feedback/index.d.ts +2 -0
  223. package/dist/types/feedback/prompts.d.ts +2 -0
  224. package/dist/types/inputs/DatePicker.d.ts +7 -0
  225. package/dist/types/inputs/date-picker.d.ts +25 -1
  226. package/dist/types/intl/messages.d.ts +6 -0
  227. package/dist/types/intl/weekend.d.ts +12 -0
  228. package/dist/types/layout/AppWorkspace.d.ts +48 -8
  229. package/dist/types/layout/app-host-width.d.ts +6 -0
  230. package/dist/types/layout/app-workspace-width.d.ts +13 -0
  231. package/dist/types/layout/index.d.ts +3 -2
  232. package/dist/types/surfaces/Placeholder.d.ts +2 -1
  233. package/map-glyphs/IBM Plex Sans Medium/0-255.pbf +0 -0
  234. package/map-glyphs/IBM Plex Sans Medium/1024-1279.pbf +0 -0
  235. package/map-glyphs/IBM Plex Sans Medium/256-511.pbf +0 -0
  236. package/map-glyphs/IBM Plex Sans Medium/512-767.pbf +0 -0
  237. package/map-glyphs/IBM Plex Sans Medium/768-1023.pbf +0 -0
  238. package/map-glyphs/IBM Plex Sans Medium/7680-7935.pbf +0 -0
  239. package/map-glyphs/IBM Plex Sans Medium/8192-8447.pbf +0 -0
  240. package/map-glyphs/IBM Plex Sans Medium/8448-8703.pbf +0 -0
  241. package/map-glyphs/IBM Plex Sans Medium/8704-8959.pbf +0 -0
  242. package/map-glyphs/OFL.txt +93 -0
  243. package/package.json +11 -6
@@ -2,8 +2,8 @@ import { template as _$template } from "solid-js/web";
2
2
  import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
3
  import { addEventListener as _$addEventListener } from "solid-js/web";
4
4
  import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
5
- import { setProperty as _$setProperty } from "solid-js/web";
6
5
  import { className as _$className } from "solid-js/web";
6
+ import { setProperty as _$setProperty } from "solid-js/web";
7
7
  import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
8
8
  import { use as _$use } from "solid-js/web";
9
9
  import { spread as _$spread } from "solid-js/web";
@@ -17,15 +17,15 @@ import { setAttribute as _$setAttribute } from "solid-js/web";
17
17
  import { effect as _$effect } from "solid-js/web";
18
18
  import { getNextElement as _$getNextElement } from "solid-js/web";
19
19
  var _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__resize role=separator><span aria-hidden=true>`),
20
- _tmpl$2 = /*#__PURE__*/_$template(`<p>`),
20
+ _tmpl$2 = /*#__PURE__*/_$template(`<p class=k2b-truncate-fade>`),
21
21
  _tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__level-actions>`),
22
- _tmpl$4 = /*#__PURE__*/_$template(`<header class=k2b-app-workspace__level-head><!$><!/><div class=k2b-app-workspace__level-title><h2 tabindex=-1></h2><!$><!/></div><!$><!/>`),
22
+ _tmpl$4 = /*#__PURE__*/_$template(`<header class=k2b-app-workspace__level-head><!$><!/><div class=k2b-app-workspace__level-title><h2 tabindex=-1><span class=k2b-truncate-fade></span></h2><!$><!/></div><!$><!/>`),
23
23
  _tmpl$5 = /*#__PURE__*/_$template(`<div>`),
24
- _tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__main-primary data-workspace-main-region=main>`),
25
- _tmpl$7 = /*#__PURE__*/_$template(`<section>`),
26
- _tmpl$8 = /*#__PURE__*/_$template(`<i class="ti ti-chevron-left"aria-hidden=true>`),
27
- _tmpl$9 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__level-body>`),
28
- _tmpl$0 = /*#__PURE__*/_$template(`<style>`),
24
+ _tmpl$6 = /*#__PURE__*/_$template(`<style>`),
25
+ _tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__main-primary data-workspace-main-region=main>`),
26
+ _tmpl$8 = /*#__PURE__*/_$template(`<section>`),
27
+ _tmpl$9 = /*#__PURE__*/_$template(`<i class="ti ti-chevron-left"aria-hidden=true>`),
28
+ _tmpl$0 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__level-body>`),
29
29
  _tmpl$1 = /*#__PURE__*/_$template(`<i class="ti ti-layout-sidebar-right"aria-hidden=true>`),
30
30
  _tmpl$10 = /*#__PURE__*/_$template(`<aside><button type=button class=k2b-app-workspace__detail-grabber aria-pressed=false><span aria-hidden=true></span></button><!$><!/>`),
31
31
  _tmpl$11 = /*#__PURE__*/_$template(`<aside>`),
@@ -54,35 +54,42 @@ var _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspac
54
54
  _tmpl$34 = /*#__PURE__*/_$template(`<div><!$><!/><!$><!/>`),
55
55
  _tmpl$35 = /*#__PURE__*/_$template(`<span aria-hidden=true>`),
56
56
  _tmpl$36 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-context-meta>`),
57
- _tmpl$37 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-context><span class=k2b-app-workspace__sidebar-item-context-label></span><!$><!/>`),
58
- _tmpl$38 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-description>`),
59
- _tmpl$39 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-copy><!$><!/><span class=k2b-app-workspace__sidebar-item-label><span class=k2b-app-workspace__sidebar-item-label-text></span></span><!$><!/>`),
57
+ _tmpl$37 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-context><span class="k2b-app-workspace__sidebar-item-context-label k2b-truncate-fade"></span><!$><!/>`),
58
+ _tmpl$38 = /*#__PURE__*/_$template(`<span class="k2b-app-workspace__sidebar-item-description k2b-truncate-fade">`),
59
+ _tmpl$39 = /*#__PURE__*/_$template(`<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><!$><!/>`),
60
60
  _tmpl$40 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-meta>`),
61
61
  _tmpl$41 = /*#__PURE__*/_$template(`<i>`),
62
62
  _tmpl$42 = /*#__PURE__*/_$template(`<a class=k2b-app-workspace__sidebar-item-action>`),
63
63
  _tmpl$43 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-item-action>`),
64
64
  _tmpl$44 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-icon><i>`),
65
- _tmpl$45 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-copy><span class=k2b-app-workspace__sidebar-item-label><span class=k2b-app-workspace__sidebar-item-label-text></span></span><span class=k2b-app-workspace__sidebar-item-description>`),
65
+ _tmpl$45 = /*#__PURE__*/_$template(`<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">`),
66
66
  _tmpl$46 = /*#__PURE__*/_$template(`<span>`),
67
67
  _tmpl$47 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__nav-tree-toggle data-k2b-nav-tree-toggle aria-hidden=true><i>`),
68
- _tmpl$48 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-label><span class=k2b-app-workspace__sidebar-item-label-text>`),
68
+ _tmpl$48 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-label><span class="k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines">`),
69
69
  _tmpl$49 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-group role=group>`),
70
70
  _tmpl$50 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-node role=treeitem><!$><!/><!$><!/>`),
71
71
  _tmpl$51 = /*#__PURE__*/_$template(`<div role=tree>`),
72
72
  _tmpl$52 = /*#__PURE__*/_$template(`<section><!$><!/><div class=k2b-app-workspace__sidebar-icon-grid>`),
73
73
  _tmpl$53 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
74
- _tmpl$54 = /*#__PURE__*/_$template(`<i class="ti ti-layout-sidebar"aria-hidden=true>`),
75
- _tmpl$55 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head><!$><!/><!$><!/>`),
76
- _tmpl$56 = /*#__PURE__*/_$template(`<h1 class=k2b-app-workspace__head-heading data-k2b-page-trail-title>`),
77
- _tmpl$57 = /*#__PURE__*/_$template(`<div data-k2b-app-workspace><!$><!/><!$><!/>`);
74
+ _tmpl$54 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__head-primary-label>`),
75
+ _tmpl$55 = /*#__PURE__*/_$template(`<i class="ti ti-layout-sidebar"aria-hidden=true>`),
76
+ _tmpl$56 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head-views>`),
77
+ _tmpl$57 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head-filters role=group><!$><!/><!$><!/>`),
78
+ _tmpl$58 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__head-count><span>`),
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><!$><!/>`),
81
+ _tmpl$61 = /*#__PURE__*/_$template(`<h1 class=k2b-app-workspace__head-heading data-k2b-page-trail-title>`),
82
+ _tmpl$62 = /*#__PURE__*/_$template(`<div data-k2b-app-workspace>`);
78
83
  import { Link } from "@k2b/ssr/nav";
79
84
  import { children, createContext, createEffect, createMemo, createRoot, createSignal, createUniqueId, For, getOwner, mergeProps, on, onCleanup, onMount, Show, useContext } from "solid-js";
80
85
  import { Dynamic, isServer } from "solid-js/web";
81
- import { Button, IconButton, IconButtonLink } from "../actions/Button";
86
+ import { Button, ButtonLink, IconButton, IconButtonLink } from "../actions/Button";
87
+ import { useFilterMessages } from "../actions/filter-messages";
82
88
  import { dialogCore } from "../feedback/dialog-core";
83
89
  import { RenderErrorBoundary } from "../internal/render-error";
84
90
  import { APP_WORKSPACE_DETAIL_CLOSE_EVENT, APP_WORKSPACE_DETAIL_STEP_EVENT, APP_WORKSPACE_SIDEBAR_HIDE_EVENT, installAppWorkspaceController } from "./app-workspace-controller";
85
- import { APP_WORKSPACE_DETAIL_DEFAULT, APP_WORKSPACE_DETAIL_MAX, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DRAWER_DEFAULT, APP_WORKSPACE_DRAWER_MAX, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_PANE_DEFAULT, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_DEFAULT, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspaceLayoutStyle, appWorkspacePanelVariable } from "./app-workspace-state";
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";
86
93
  import BottomSheet, { bottomSheetAdaptiveOptions } from "./BottomSheet";
87
94
  import { PageTitle, usePageTrail } from "./PageTitle";
88
95
  import { SidebarItemPreview } from "./SidebarItemPreview";
@@ -95,6 +102,8 @@ const ResizeContext = createContext(true);
95
102
  /** The enclosing workspace: its head names the sidebar, and a nested workspace leaves the page title to it. */
96
103
  const WorkspaceContext = createContext();
97
104
  const LayoutStateContext = createContext(null);
105
+ const HEAD = Symbol("AppWorkspace.Head");
106
+ const headSlot = value => !!value && typeof value === "object" && "kind" in value && value.kind === HEAD;
98
107
  const MAIN_PANE = Symbol("AppWorkspace.MainPane");
99
108
  const SIDEBAR_DESKTOP = Symbol("AppWorkspace.SidebarDesktop");
100
109
  const SIDEBAR_ITEM_ICON = Symbol("AppWorkspace.SidebarItemIcon");
@@ -114,6 +123,13 @@ const mainPaneSlot = value => Boolean(value && typeof value === "object" && "kin
114
123
  const sidebarChildSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === SIDEBAR_DESKTOP);
115
124
  const sidebarItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && [SIDEBAR_ITEM_ICON, SIDEBAR_ITEM_LABEL, SIDEBAR_ITEM_META, SIDEBAR_ITEM_ACTION].includes(value.kind));
116
125
  const navTreeItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === NAV_TREE_ITEM);
126
+ /** Head row slot. Must be a direct child of AppWorkspace; its parts may be islands. */
127
+ function AppWorkspaceHeadSlot(props) {
128
+ return {
129
+ kind: HEAD,
130
+ props
131
+ };
132
+ }
117
133
  function ResizeHandle(props) {
118
134
  const workspaceMessages = useWorkspaceMessages();
119
135
  const workspace = useContext(WorkspaceContext);
@@ -122,7 +138,7 @@ function ResizeHandle(props) {
122
138
  const state = workspace?.initialLayoutState() ?? providerState;
123
139
  const id = props.panelId ?? "primary";
124
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];
125
- 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)));
126
142
  };
127
143
  return (() => {
128
144
  var _el$ = _$getNextElement(_tmpl$);
@@ -138,7 +154,7 @@ function ResizeHandle(props) {
138
154
  _v$9 = props.panelId,
139
155
  _v$0 = props.edge,
140
156
  _v$1 = props.shadow ? "true" : undefined,
141
- _v$10 = props.defaultSize,
157
+ _v$10 = appWorkspaceWidthToken(props.defaultSize),
142
158
  _v$11 = props.minSize,
143
159
  _v$12 = props.maxSize,
144
160
  _v$13 = props.style;
@@ -220,36 +236,37 @@ function LevelHead(props) {
220
236
  const actions = children(() => props.actions);
221
237
  return (() => {
222
238
  var _el$2 = _$getNextElement(_tmpl$4),
223
- _el$9 = _el$2.firstChild,
224
- [_el$0, _co$2] = _$getNextMarker(_el$9.nextSibling),
225
- _el$3 = _el$0.nextSibling,
239
+ _el$0 = _el$2.firstChild,
240
+ [_el$1, _co$2] = _$getNextMarker(_el$0.nextSibling),
241
+ _el$3 = _el$1.nextSibling,
226
242
  _el$4 = _el$3.firstChild,
227
- _el$6 = _el$4.nextSibling,
228
- [_el$7, _co$] = _$getNextMarker(_el$6.nextSibling),
229
- _el$1 = _el$3.nextSibling,
230
- [_el$10, _co$3] = _$getNextMarker(_el$1.nextSibling);
231
- _$insert(_el$2, () => props.children, _el$0, _co$2);
232
- _$insert(_el$4, () => props.label);
243
+ _el$5 = _el$4.firstChild,
244
+ _el$7 = _el$4.nextSibling,
245
+ [_el$8, _co$] = _$getNextMarker(_el$7.nextSibling),
246
+ _el$10 = _el$3.nextSibling,
247
+ [_el$11, _co$3] = _$getNextMarker(_el$10.nextSibling);
248
+ _$insert(_el$2, () => props.children, _el$1, _co$2);
249
+ _$insert(_el$5, () => props.label);
233
250
  _$insert(_el$3, _$createComponent(Show, {
234
251
  get when() {
235
252
  return description();
236
253
  },
237
254
  get children() {
238
- var _el$5 = _$getNextElement(_tmpl$2);
239
- _$insert(_el$5, description);
240
- return _el$5;
255
+ var _el$6 = _$getNextElement(_tmpl$2);
256
+ _$insert(_el$6, description);
257
+ return _el$6;
241
258
  }
242
- }), _el$7, _co$);
259
+ }), _el$8, _co$);
243
260
  _$insert(_el$2, _$createComponent(Show, {
244
261
  get when() {
245
262
  return actions();
246
263
  },
247
264
  get children() {
248
- var _el$8 = _$getNextElement(_tmpl$3);
249
- _$insert(_el$8, actions);
250
- return _el$8;
265
+ var _el$9 = _$getNextElement(_tmpl$3);
266
+ _$insert(_el$9, actions);
267
+ return _el$9;
251
268
  }
252
- }), _el$10, _co$3);
269
+ }), _el$11, _co$3);
253
270
  return _el$2;
254
271
  })();
255
272
  }
@@ -340,14 +357,38 @@ function AppWorkspaceMain(props) {
340
357
  // layout. Deriving it from `regions()` made a workspace whose panes are all
341
358
  // closed fall back to `resolved()`, which renders the raw slot objects.
342
359
  const hasPanes = createMemo(() => paneIds().length > 0);
343
- return (() => {
344
- var _el$11 = _$getNextElement(_tmpl$5);
360
+ // The workspace's tracks and queries read Main's minimum on the workspace
361
+ // itself, which cannot read Main's own variables, so this rule hands it up,
362
+ // as `AppWorkspace.Detail` does with its width.
363
+ const minWidth = () => {
364
+ const value = props.minWidth;
365
+ return isAppWorkspaceWidthShare(value) ? value : typeof value === "number" && Number.isFinite(value) && value > APP_WORKSPACE_MAIN_MIN ? Math.round(value) : undefined;
366
+ };
367
+ const minWidthRule = value => {
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}}`;
371
+ };
372
+ return [_$createComponent(Show, {
373
+ get when() {
374
+ return minWidth();
375
+ },
376
+ children: value => (() => {
377
+ var _el$13 = _$getNextElement(_tmpl$6);
378
+ _$effect(() => _$setProperty(_el$13, "innerHTML", minWidthRule(value())));
379
+ return _el$13;
380
+ })()
381
+ }), (() => {
382
+ var _el$12 = _$getNextElement(_tmpl$5);
345
383
  var _ref$ = mainElement;
346
- typeof _ref$ === "function" ? _$use(_ref$, _el$11) : mainElement = _el$11;
347
- _$spread(_el$11, _$mergeProps({
384
+ typeof _ref$ === "function" ? _$use(_ref$, _el$12) : mainElement = _el$12;
385
+ _$spread(_el$12, _$mergeProps({
348
386
  get ["class"]() {
349
387
  return `k2b-app-workspace__main ${hasPanes() ? "has-panes" : ""} ${props.class ?? ""}`;
350
388
  },
389
+ get ["data-workspace-main-min"]() {
390
+ return _$memo(() => minWidth() === undefined)() ? undefined : appWorkspaceWidthToken(minWidth());
391
+ },
351
392
  get ["data-workspace-levels"]() {
352
393
  return levelsMode() ? "" : undefined;
353
394
  },
@@ -370,7 +411,7 @@ function AppWorkspaceMain(props) {
370
411
  return props["aria-busy"];
371
412
  }
372
413
  }, () => scrollAttrs(props.scrollPreserveKey)), false, true);
373
- _$insert(_el$11, _$createComponent(Show, {
414
+ _$insert(_el$12, _$createComponent(Show, {
374
415
  get when() {
375
416
  return hasPanes();
376
417
  },
@@ -389,10 +430,10 @@ function AppWorkspaceMain(props) {
389
430
  };
390
431
  if (region.type === "primary") {
391
432
  return (() => {
392
- var _el$12 = _$getNextElement(_tmpl$6);
393
- _$insert(_el$12, () => region.children);
394
- _$effect(() => _$setAttribute(_el$12, "data-workspace-mobile-active", activeMobilePane() === "main" ? "true" : "false"));
395
- return _el$12;
433
+ var _el$14 = _$getNextElement(_tmpl$7);
434
+ _$insert(_el$14, () => region.children);
435
+ _$effect(() => _$setAttribute(_el$14, "data-workspace-mobile-active", activeMobilePane() === "main" ? "true" : "false"));
436
+ return _el$14;
396
437
  })();
397
438
  }
398
439
  const pane = region.slot;
@@ -402,7 +443,10 @@ function AppWorkspaceMain(props) {
402
443
  const variable = appWorkspacePanelVariable("pane", panelId);
403
444
  const isAnchor = () => region === anchorRegion();
404
445
  const resizable = () => !isAnchor() && (pane.props.resizable ?? rootResizable);
405
- 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
+ };
406
450
  const minSize = () => pane.props.minSize ?? APP_WORKSPACE_PANE_MIN;
407
451
  const maxSize = () => Math.max(minSize(), pane.props.maxSize ?? APP_WORKSPACE_PANE_MAX);
408
452
  const before = () => levelsMode() || region.index < (anchorRegion()?.index ?? 0);
@@ -447,9 +491,9 @@ function AppWorkspaceMain(props) {
447
491
  return handle();
448
492
  }
449
493
  }), (() => {
450
- var _el$13 = _$getNextElement(_tmpl$7);
451
- _$setAttribute(_el$13, "data-workspace-panel-id", panelId);
452
- _$insert(_el$13, (() => {
494
+ var _el$15 = _$getNextElement(_tmpl$8);
495
+ _$setAttribute(_el$15, "data-workspace-panel-id", panelId);
496
+ _$insert(_el$15, (() => {
453
497
  var _c$ = _$memo(() => !!levelsMode());
454
498
  return () => _c$() ? [_$createComponent(LevelHead, {
455
499
  get label() {
@@ -484,26 +528,26 @@ function AppWorkspaceMain(props) {
484
528
  return props.onLevelNavigate ? navigateBack : undefined;
485
529
  },
486
530
  get children() {
487
- return _$getNextElement(_tmpl$8);
531
+ return _$getNextElement(_tmpl$9);
488
532
  }
489
533
  });
490
534
  }
491
535
  });
492
536
  }
493
537
  }), (() => {
494
- var _el$15 = _$getNextElement(_tmpl$9);
495
- _$insert(_el$15, () => pane.props.children);
538
+ var _el$17 = _$getNextElement(_tmpl$0);
539
+ _$insert(_el$17, () => pane.props.children);
496
540
  _$effect(_p$ => {
497
541
  var _v$28 = pane.props.scroll === false ? "false" : undefined,
498
542
  _v$29 = pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : undefined;
499
- _v$28 !== _p$.e && _$setAttribute(_el$15, "data-scroll", _p$.e = _v$28);
500
- _v$29 !== _p$.t && _$setAttribute(_el$15, "data-scroll-fade-mode", _p$.t = _v$29);
543
+ _v$28 !== _p$.e && _$setAttribute(_el$17, "data-scroll", _p$.e = _v$28);
544
+ _v$29 !== _p$.t && _$setAttribute(_el$17, "data-scroll-fade-mode", _p$.t = _v$29);
501
545
  return _p$;
502
546
  }, {
503
547
  e: undefined,
504
548
  t: undefined
505
549
  });
506
- return _el$15;
550
+ return _el$17;
507
551
  })()] : pane.props.children;
508
552
  })());
509
553
  _$effect(_p$ => {
@@ -522,23 +566,23 @@ function AppWorkspaceMain(props) {
522
566
  _v$26 = !levelsMode() && pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : undefined,
523
567
  _v$27 = isAnchor() ? undefined : {
524
568
  // A stored width keeps to this pane's limits before the controller attaches.
525
- "--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)`,
526
570
  "--k2b-workspace-panel-min": `${minSize()}px`
527
571
  };
528
- _v$14 !== _p$.e && _$setAttribute(_el$13, "id", _p$.e = _v$14);
529
- _v$15 !== _p$.t && _$className(_el$13, _p$.t = _v$15);
530
- _v$16 !== _p$.a && _$setAttribute(_el$13, "aria-label", _p$.a = _v$16);
531
- _v$17 !== _p$.o && _$setAttribute(_el$13, "data-workspace-level", _p$.o = _v$17);
532
- _v$18 !== _p$.i && _$setAttribute(_el$13, "data-workspace-level-shown", _p$.i = _v$18);
533
- _v$19 !== _p$.n && _$setAttribute(_el$13, "data-workspace-level-first", _p$.n = _v$19);
534
- _v$20 !== _p$.s && _$setAttribute(_el$13, "data-workspace-level-last", _p$.s = _v$20);
535
- _v$21 !== _p$.h && _$setAttribute(_el$13, "data-workspace-main-region", _p$.h = _v$21);
536
- _v$22 !== _p$.r && _$setAttribute(_el$13, "data-workspace-mobile-active", _p$.r = _v$22);
537
- _v$23 !== _p$.d && _$setAttribute(_el$13, "data-workspace-resizable", _p$.d = _v$23);
538
- _v$24 !== _p$.l && _$setAttribute(_el$13, "data-surface", _p$.l = _v$24);
539
- _v$25 !== _p$.u && _$setAttribute(_el$13, "data-scroll", _p$.u = _v$25);
540
- _v$26 !== _p$.c && _$setAttribute(_el$13, "data-scroll-fade-mode", _p$.c = _v$26);
541
- _p$.w = _$style(_el$13, _v$27, _p$.w);
572
+ _v$14 !== _p$.e && _$setAttribute(_el$15, "id", _p$.e = _v$14);
573
+ _v$15 !== _p$.t && _$className(_el$15, _p$.t = _v$15);
574
+ _v$16 !== _p$.a && _$setAttribute(_el$15, "aria-label", _p$.a = _v$16);
575
+ _v$17 !== _p$.o && _$setAttribute(_el$15, "data-workspace-level", _p$.o = _v$17);
576
+ _v$18 !== _p$.i && _$setAttribute(_el$15, "data-workspace-level-shown", _p$.i = _v$18);
577
+ _v$19 !== _p$.n && _$setAttribute(_el$15, "data-workspace-level-first", _p$.n = _v$19);
578
+ _v$20 !== _p$.s && _$setAttribute(_el$15, "data-workspace-level-last", _p$.s = _v$20);
579
+ _v$21 !== _p$.h && _$setAttribute(_el$15, "data-workspace-main-region", _p$.h = _v$21);
580
+ _v$22 !== _p$.r && _$setAttribute(_el$15, "data-workspace-mobile-active", _p$.r = _v$22);
581
+ _v$23 !== _p$.d && _$setAttribute(_el$15, "data-workspace-resizable", _p$.d = _v$23);
582
+ _v$24 !== _p$.l && _$setAttribute(_el$15, "data-surface", _p$.l = _v$24);
583
+ _v$25 !== _p$.u && _$setAttribute(_el$15, "data-scroll", _p$.u = _v$25);
584
+ _v$26 !== _p$.c && _$setAttribute(_el$15, "data-scroll-fade-mode", _p$.c = _v$26);
585
+ _p$.w = _$style(_el$15, _v$27, _p$.w);
542
586
  return _p$;
543
587
  }, {
544
588
  e: undefined,
@@ -556,7 +600,7 @@ function AppWorkspaceMain(props) {
556
600
  c: undefined,
557
601
  w: undefined
558
602
  });
559
- return _el$13;
603
+ return _el$15;
560
604
  })(), _$createComponent(Show, {
561
605
  get when() {
562
606
  return _$memo(() => !!resizable())() && before();
@@ -572,14 +616,17 @@ function AppWorkspaceMain(props) {
572
616
  }
573
617
  }));
574
618
  _$runHydrationEvents();
575
- return _el$11;
576
- })();
619
+ return _el$12;
620
+ })()];
577
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")}`;
578
625
  function AppWorkspaceDetail(props) {
579
626
  const workspaceMessages = useWorkspaceMessages();
580
627
  const rootResizable = useContext(ResizeContext);
581
628
  const panelId = () => assertStableUiId(props.id, "AppWorkspace.Detail id");
582
- const domId = () => `k2b-workspace-detail-${panelId()}`;
629
+ const domId = () => appWorkspaceDetailElementId(props.id);
583
630
  const variable = () => appWorkspacePanelVariable("detail", panelId());
584
631
  // Start widths of 20, 26, 30, and 34 rem. They feed `aria-valuenow` and the
585
632
  // `var(…, Npx)` first-paint fallback, so they are behaviour, not taste.
@@ -624,9 +671,9 @@ function AppWorkspaceDetail(props) {
624
671
  });
625
672
  });
626
673
  return [(() => {
627
- var _el$16 = _$getNextElement(_tmpl$0);
628
- _$effect(() => _$setProperty(_el$16, "innerHTML", workspaceRule()));
629
- return _el$16;
674
+ var _el$18 = _$getNextElement(_tmpl$6);
675
+ _$effect(() => _$setProperty(_el$18, "innerHTML", workspaceRule()));
676
+ return _el$18;
630
677
  })(), _$createComponent(Button, {
631
678
  type: "button",
632
679
  variant: "ghost",
@@ -668,39 +715,41 @@ function AppWorkspaceDetail(props) {
668
715
  });
669
716
  }
670
717
  }), (() => {
671
- var _el$18 = _$getNextElement(_tmpl$10),
672
- _el$19 = _el$18.firstChild,
673
- _el$20 = _el$19.nextSibling,
674
- [_el$21, _co$4] = _$getNextMarker(_el$20.nextSibling);
718
+ var _el$20 = _$getNextElement(_tmpl$10),
719
+ _el$21 = _el$20.firstChild,
720
+ _el$22 = _el$21.nextSibling,
721
+ [_el$23, _co$4] = _$getNextMarker(_el$22.nextSibling);
675
722
  var _ref$2 = aside;
676
- typeof _ref$2 === "function" ? _$use(_ref$2, _el$18) : aside = _el$18;
677
- _$insert(_el$18, () => props.children, _el$21, _co$4);
723
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$20) : aside = _el$20;
724
+ _$insert(_el$20, () => props.children, _el$23, _co$4);
678
725
  _$effect(_p$ => {
679
726
  var _v$30 = domId(),
680
727
  _v$31 = `k2b-app-workspace__detail ${props.class ?? ""}`,
681
728
  _v$32 = props.width ?? "md",
682
729
  _v$33 = props.phone === "page" ? "page" : undefined,
683
- _v$34 = panelId(),
684
- _v$35 = resizable() ? "true" : "false",
685
- _v$36 = props.onClose ? "true" : undefined,
686
- _v$37 = props.onStep ? "true" : undefined,
687
- _v$38 = !props.open,
688
- _v$39 = {
730
+ _v$34 = props.openOnChoice === false ? "request" : undefined,
731
+ _v$35 = panelId(),
732
+ _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 = {
689
737
  ...sizeStyle(),
690
738
  "view-transition-name": props.viewTransitionName
691
739
  },
692
- _v$40 = workspaceMessages().detailFullHeight;
693
- _v$30 !== _p$.e && _$setAttribute(_el$18, "id", _p$.e = _v$30);
694
- _v$31 !== _p$.t && _$className(_el$18, _p$.t = _v$31);
695
- _v$32 !== _p$.a && _$setAttribute(_el$18, "data-width", _p$.a = _v$32);
696
- _v$33 !== _p$.o && _$setAttribute(_el$18, "data-workspace-detail-phone", _p$.o = _v$33);
697
- _v$34 !== _p$.i && _$setAttribute(_el$18, "data-workspace-panel-id", _p$.i = _v$34);
698
- _v$35 !== _p$.n && _$setAttribute(_el$18, "data-workspace-resizable", _p$.n = _v$35);
699
- _v$36 !== _p$.s && _$setAttribute(_el$18, "data-workspace-detail-closable", _p$.s = _v$36);
700
- _v$37 !== _p$.h && _$setAttribute(_el$18, "data-workspace-detail-steppable", _p$.h = _v$37);
701
- _v$38 !== _p$.r && _$setProperty(_el$18, "hidden", _p$.r = _v$38);
702
- _p$.d = _$style(_el$18, _v$39, _p$.d);
703
- _v$40 !== _p$.l && _$setAttribute(_el$19, "aria-label", _p$.l = _v$40);
740
+ _v$41 = workspaceMessages().detailFullHeight;
741
+ _v$30 !== _p$.e && _$setAttribute(_el$20, "id", _p$.e = _v$30);
742
+ _v$31 !== _p$.t && _$className(_el$20, _p$.t = _v$31);
743
+ _v$32 !== _p$.a && _$setAttribute(_el$20, "data-width", _p$.a = _v$32);
744
+ _v$33 !== _p$.o && _$setAttribute(_el$20, "data-workspace-detail-phone", _p$.o = _v$33);
745
+ _v$34 !== _p$.i && _$setAttribute(_el$20, "data-workspace-detail-choice", _p$.i = _v$34);
746
+ _v$35 !== _p$.n && _$setAttribute(_el$20, "data-workspace-panel-id", _p$.n = _v$35);
747
+ _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);
704
753
  return _p$;
705
754
  }, {
706
755
  e: undefined,
@@ -713,9 +762,10 @@ function AppWorkspaceDetail(props) {
713
762
  h: undefined,
714
763
  r: undefined,
715
764
  d: undefined,
716
- l: undefined
765
+ l: undefined,
766
+ u: undefined
717
767
  });
718
- return _el$18;
768
+ return _el$20;
719
769
  })()];
720
770
  }
721
771
  function AppWorkspaceBottomDrawer(props) {
@@ -765,25 +815,25 @@ function AppWorkspaceBottomDrawer(props) {
765
815
  });
766
816
  }
767
817
  }), (() => {
768
- var _el$22 = _$getNextElement(_tmpl$11);
769
- _$insert(_el$22, () => props.children);
818
+ var _el$24 = _$getNextElement(_tmpl$11);
819
+ _$insert(_el$24, () => props.children);
770
820
  _$effect(_p$ => {
771
- var _v$41 = domId(),
772
- _v$42 = `k2b-app-workspace__drawer ${props.class ?? ""}`,
773
- _v$43 = props.height ?? "md",
774
- _v$44 = panelId(),
775
- _v$45 = resizable() ? "true" : "false",
776
- _v$46 = !props.open,
777
- _v$47 = `var(${variable()}, ${defaultHeight()}px)`,
778
- _v$48 = props.viewTransitionName;
779
- _v$41 !== _p$.e && _$setAttribute(_el$22, "id", _p$.e = _v$41);
780
- _v$42 !== _p$.t && _$className(_el$22, _p$.t = _v$42);
781
- _v$43 !== _p$.a && _$setAttribute(_el$22, "data-height", _p$.a = _v$43);
782
- _v$44 !== _p$.o && _$setAttribute(_el$22, "data-workspace-panel-id", _p$.o = _v$44);
783
- _v$45 !== _p$.i && _$setAttribute(_el$22, "data-workspace-resizable", _p$.i = _v$45);
784
- _v$46 !== _p$.n && _$setProperty(_el$22, "hidden", _p$.n = _v$46);
785
- _v$47 !== _p$.s && _$setStyleProperty(_el$22, "--k2b-workspace-panel-size", _p$.s = _v$47);
786
- _v$48 !== _p$.h && _$setStyleProperty(_el$22, "view-transition-name", _p$.h = _v$48);
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);
787
837
  return _p$;
788
838
  }, {
789
839
  e: undefined,
@@ -795,7 +845,7 @@ function AppWorkspaceBottomDrawer(props) {
795
845
  s: undefined,
796
846
  h: undefined
797
847
  });
798
- return _el$22;
848
+ return _el$24;
799
849
  })()];
800
850
  }
801
851
  function AppWorkspaceSidebar(props) {
@@ -882,20 +932,20 @@ function AppWorkspaceSidebar(props) {
882
932
  return null;
883
933
  }
884
934
  return (() => {
885
- var _el$23 = _$getNextElement(_tmpl$12);
886
- _$addEventListener(_el$23, "click", event => choose(event, () => close()));
887
- _$insert(_el$23, resolved);
935
+ var _el$25 = _$getNextElement(_tmpl$12);
936
+ _$addEventListener(_el$25, "click", event => choose(event, () => close()));
937
+ _$insert(_el$25, resolved);
888
938
  _$effect(_p$ => {
889
- var _v$49 = props.label,
890
- _v$50 = accent;
891
- _v$49 !== _p$.e && _$setAttribute(_el$23, "aria-label", _p$.e = _v$49);
892
- _p$.t = _$style(_el$23, _v$50, _p$.t);
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);
893
943
  return _p$;
894
944
  }, {
895
945
  e: undefined,
896
946
  t: undefined
897
947
  });
898
- return _el$23;
948
+ return _el$25;
899
949
  })();
900
950
  }
901
951
  });
@@ -968,49 +1018,49 @@ function AppWorkspaceSidebar(props) {
968
1018
  },
969
1019
  get children() {
970
1020
  return [(() => {
971
- var _el$24 = _$getNextElement(_tmpl$13);
1021
+ var _el$26 = _$getNextElement(_tmpl$13);
972
1022
  var _ref$4 = row;
973
- typeof _ref$4 === "function" ? _$use(_ref$4, _el$24) : row = _el$24;
974
- _$insert(_el$24, () => desktop()?.children);
1023
+ typeof _ref$4 === "function" ? _$use(_ref$4, _el$26) : row = _el$26;
1024
+ _$insert(_el$26, () => desktop()?.children);
975
1025
  _$effect(_p$ => {
976
- var _v$51 = stacked() ? "both" : undefined,
977
- _v$52 = stacked() ? "horizontal" : undefined;
978
- _v$51 !== _p$.e && _$setAttribute(_el$24, "data-scroll-fade-mode", _p$.e = _v$51);
979
- _v$52 !== _p$.t && _$setAttribute(_el$24, "data-scroll-fade-axis", _p$.t = _v$52);
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);
980
1030
  return _p$;
981
1031
  }, {
982
1032
  e: undefined,
983
1033
  t: undefined
984
1034
  });
985
- return _el$24;
1035
+ return _el$26;
986
1036
  })(), _$createComponent(Show, {
987
1037
  get when() {
988
1038
  return stacked();
989
1039
  },
990
1040
  get children() {
991
1041
  return [(() => {
992
- var _el$25 = _$getNextElement(_tmpl$14),
993
- _el$26 = _el$25.firstChild;
994
- _el$25.$$click = event => openAll(event.currentTarget);
995
- _$insert(_el$26, () => workspaceMessages().sidebarAll);
1042
+ var _el$27 = _$getNextElement(_tmpl$14),
1043
+ _el$28 = _el$27.firstChild;
1044
+ _el$27.$$click = event => openAll(event.currentTarget);
1045
+ _$insert(_el$28, () => workspaceMessages().sidebarAll);
996
1046
  _$effect(_p$ => {
997
- var _v$53 = sheetOpen(),
998
- _v$54 = props.label ? workspaceMessages().sidebarAllLabel({
1047
+ var _v$54 = sheetOpen(),
1048
+ _v$55 = props.label ? workspaceMessages().sidebarAllLabel({
999
1049
  label: props.label
1000
1050
  }) : undefined;
1001
- _v$53 !== _p$.e && _$setAttribute(_el$25, "aria-expanded", _p$.e = _v$53);
1002
- _v$54 !== _p$.t && _$setAttribute(_el$25, "aria-label", _p$.t = _v$54);
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);
1003
1053
  return _p$;
1004
1054
  }, {
1005
1055
  e: undefined,
1006
1056
  t: undefined
1007
1057
  });
1008
1058
  _$runHydrationEvents();
1009
- return _el$25;
1010
- })(), (() => {
1011
- var _el$27 = _$getNextElement(_tmpl$15);
1012
- _$setProperty(_el$27, "innerHTML", CHIP_ROW_SCRIPT);
1013
1059
  return _el$27;
1060
+ })(), (() => {
1061
+ var _el$29 = _$getNextElement(_tmpl$15);
1062
+ _$setProperty(_el$29, "innerHTML", CHIP_ROW_SCRIPT);
1063
+ return _el$29;
1014
1064
  })()];
1015
1065
  }
1016
1066
  })];
@@ -1085,10 +1135,10 @@ const AppWorkspaceSidebarBody = props => {
1085
1135
  onMount(() => onCleanup(rememberSidebarScroll(body, scrollFadeEdges)));
1086
1136
  createScrollFade(() => body, () => props.scrollFade !== false);
1087
1137
  return [(() => {
1088
- var _el$28 = _$getNextElement(_tmpl$5);
1138
+ var _el$30 = _$getNextElement(_tmpl$5);
1089
1139
  var _ref$5 = body;
1090
- typeof _ref$5 === "function" ? _$use(_ref$5, _el$28) : body = _el$28;
1091
- _$spread(_el$28, _$mergeProps({
1140
+ typeof _ref$5 === "function" ? _$use(_ref$5, _el$30) : body = _el$30;
1141
+ _$spread(_el$30, _$mergeProps({
1092
1142
  get ["class"]() {
1093
1143
  return `k2b-app-workspace__sidebar-body ${props.class ?? ""}`;
1094
1144
  },
@@ -1096,25 +1146,25 @@ const AppWorkspaceSidebarBody = props => {
1096
1146
  return props.scrollFade !== false ? "both" : undefined;
1097
1147
  }
1098
1148
  }, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), false, true);
1099
- _$insert(_el$28, () => props.children);
1149
+ _$insert(_el$30, () => props.children);
1100
1150
  _$runHydrationEvents();
1101
- return _el$28;
1151
+ return _el$30;
1102
1152
  })(), (() => {
1103
- var _el$29 = _$getNextElement(_tmpl$15);
1104
- _$setProperty(_el$29, "innerHTML", SIDEBAR_SCROLL_MEMORY_SCRIPT);
1105
- return _el$29;
1153
+ var _el$31 = _$getNextElement(_tmpl$15);
1154
+ _$setProperty(_el$31, "innerHTML", SIDEBAR_SCROLL_MEMORY_SCRIPT);
1155
+ return _el$31;
1106
1156
  })()];
1107
1157
  };
1108
1158
  const AppWorkspaceSidebarFooter = props => (() => {
1109
- var _el$30 = _$getNextElement(_tmpl$16);
1110
- _$spread(_el$30, _$mergeProps({
1159
+ var _el$32 = _$getNextElement(_tmpl$16);
1160
+ _$spread(_el$32, _$mergeProps({
1111
1161
  get ["class"]() {
1112
1162
  return `k2b-app-workspace__sidebar-footer ${props.class ?? ""}`;
1113
1163
  }
1114
1164
  }, () => modeAttrs(props.sidebarMode)), false, true);
1115
- _$insert(_el$30, () => props.children);
1165
+ _$insert(_el$32, () => props.children);
1116
1166
  _$runHydrationEvents();
1117
- return _el$30;
1167
+ return _el$32;
1118
1168
  })();
1119
1169
  const AppWorkspaceSidebarSection = props => {
1120
1170
  const [expanded, setExpanded] = createSignal(props.defaultOpen ?? true);
@@ -1125,27 +1175,27 @@ const AppWorkspaceSidebarSection = props => {
1125
1175
  return props.icon;
1126
1176
  },
1127
1177
  get children() {
1128
- var _el$31 = _$getNextElement(_tmpl$17),
1129
- _el$32 = _el$31.firstChild;
1130
- _$effect(() => _$className(_el$32, iconClass(props.icon)));
1131
- return _el$31;
1178
+ var _el$33 = _$getNextElement(_tmpl$17),
1179
+ _el$34 = _el$33.firstChild;
1180
+ _$effect(() => _$className(_el$34, iconClass(props.icon)));
1181
+ return _el$33;
1132
1182
  }
1133
1183
  }), _$memo(() => props.title), _$createComponent(Show, {
1134
1184
  get when() {
1135
1185
  return props.count !== undefined;
1136
1186
  },
1137
1187
  get children() {
1138
- var _el$33 = _$getNextElement(_tmpl$18);
1139
- _$insert(_el$33, () => props.count);
1140
- return _el$33;
1188
+ var _el$35 = _$getNextElement(_tmpl$18);
1189
+ _$insert(_el$35, () => props.count);
1190
+ return _el$35;
1141
1191
  }
1142
1192
  })];
1143
1193
  return (() => {
1144
- var _el$34 = _$getNextElement(_tmpl$22),
1145
- _el$46 = _el$34.firstChild,
1146
- [_el$47, _co$8] = _$getNextMarker(_el$46.nextSibling),
1147
- _el$45 = _el$47.nextSibling;
1148
- _$spread(_el$34, _$mergeProps({
1194
+ var _el$36 = _$getNextElement(_tmpl$22),
1195
+ _el$48 = _el$36.firstChild,
1196
+ [_el$49, _co$8] = _$getNextMarker(_el$48.nextSibling),
1197
+ _el$47 = _el$49.nextSibling;
1198
+ _$spread(_el$36, _$mergeProps({
1149
1199
  get ["class"]() {
1150
1200
  return `k2b-app-workspace__sidebar-section ${props.class ?? ""}`;
1151
1201
  },
@@ -1153,17 +1203,17 @@ const AppWorkspaceSidebarSection = props => {
1153
1203
  return props.collapsible ? "true" : undefined;
1154
1204
  }
1155
1205
  }, () => modeAttrs(props.sidebarMode)), false, true);
1156
- _$insert(_el$34, _$createComponent(Show, {
1206
+ _$insert(_el$36, _$createComponent(Show, {
1157
1207
  get when() {
1158
1208
  return props.title || props.actions;
1159
1209
  },
1160
1210
  get children() {
1161
- var _el$35 = _$getNextElement(_tmpl$21),
1162
- _el$41 = _el$35.firstChild,
1163
- [_el$42, _co$6] = _$getNextMarker(_el$41.nextSibling),
1164
- _el$43 = _el$42.nextSibling,
1165
- [_el$44, _co$7] = _$getNextMarker(_el$43.nextSibling);
1166
- _$insert(_el$35, _$createComponent(Show, {
1211
+ var _el$37 = _$getNextElement(_tmpl$21),
1212
+ _el$43 = _el$37.firstChild,
1213
+ [_el$44, _co$6] = _$getNextMarker(_el$43.nextSibling),
1214
+ _el$45 = _el$44.nextSibling,
1215
+ [_el$46, _co$7] = _$getNextMarker(_el$45.nextSibling);
1216
+ _$insert(_el$37, _$createComponent(Show, {
1167
1217
  get when() {
1168
1218
  return props.collapsible;
1169
1219
  },
@@ -1173,56 +1223,56 @@ const AppWorkspaceSidebarSection = props => {
1173
1223
  return props.title;
1174
1224
  },
1175
1225
  get children() {
1176
- var _el$48 = _$getNextElement(_tmpl$23);
1177
- _$insert(_el$48, title);
1178
- return _el$48;
1226
+ var _el$50 = _$getNextElement(_tmpl$23);
1227
+ _$insert(_el$50, title);
1228
+ return _el$50;
1179
1229
  }
1180
1230
  });
1181
1231
  },
1182
1232
  get children() {
1183
- var _el$36 = _$getNextElement(_tmpl$19),
1184
- _el$38 = _el$36.firstChild,
1185
- [_el$39, _co$5] = _$getNextMarker(_el$38.nextSibling),
1186
- _el$37 = _el$39.nextSibling;
1187
- _el$36.$$click = () => {
1233
+ var _el$38 = _$getNextElement(_tmpl$19),
1234
+ _el$40 = _el$38.firstChild,
1235
+ [_el$41, _co$5] = _$getNextMarker(_el$40.nextSibling),
1236
+ _el$39 = _el$41.nextSibling;
1237
+ _el$38.$$click = () => {
1188
1238
  const next = !open();
1189
1239
  setExpanded(next);
1190
1240
  props.onOpenChange?.(next);
1191
1241
  };
1192
- _$setAttribute(_el$36, "aria-controls", id);
1193
- _$insert(_el$36, title, _el$39, _co$5);
1242
+ _$setAttribute(_el$38, "aria-controls", id);
1243
+ _$insert(_el$38, title, _el$41, _co$5);
1194
1244
  _$effect(_p$ => {
1195
- var _v$55 = open(),
1196
- _v$56 = open() ? "ti ti-chevron-down" : "ti ti-chevron-right";
1197
- _v$55 !== _p$.e && _$setAttribute(_el$36, "aria-expanded", _p$.e = _v$55);
1198
- _v$56 !== _p$.t && _$className(_el$37, _p$.t = _v$56);
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);
1199
1249
  return _p$;
1200
1250
  }, {
1201
1251
  e: undefined,
1202
1252
  t: undefined
1203
1253
  });
1204
1254
  _$runHydrationEvents();
1205
- return _el$36;
1255
+ return _el$38;
1206
1256
  }
1207
- }), _el$42, _co$6);
1208
- _$insert(_el$35, _$createComponent(Show, {
1257
+ }), _el$44, _co$6);
1258
+ _$insert(_el$37, _$createComponent(Show, {
1209
1259
  get when() {
1210
1260
  return props.actions;
1211
1261
  },
1212
1262
  get children() {
1213
- var _el$40 = _$getNextElement(_tmpl$20);
1214
- _$insert(_el$40, () => props.actions);
1215
- return _el$40;
1263
+ var _el$42 = _$getNextElement(_tmpl$20);
1264
+ _$insert(_el$42, () => props.actions);
1265
+ return _el$42;
1216
1266
  }
1217
- }), _el$44, _co$7);
1218
- return _el$35;
1267
+ }), _el$46, _co$7);
1268
+ return _el$37;
1219
1269
  }
1220
- }), _el$47, _co$8);
1221
- _$setAttribute(_el$45, "id", id);
1222
- _$insert(_el$45, () => props.children);
1223
- _$effect(() => _$setProperty(_el$45, "hidden", !open()));
1270
+ }), _el$49, _co$8);
1271
+ _$setAttribute(_el$47, "id", id);
1272
+ _$insert(_el$47, () => props.children);
1273
+ _$effect(() => _$setProperty(_el$47, "hidden", !open()));
1224
1274
  _$runHydrationEvents();
1225
- return _el$34;
1275
+ return _el$36;
1226
1276
  })();
1227
1277
  };
1228
1278
  const AppWorkspaceSidebarItemIcon = props => mergeProps({
@@ -1238,10 +1288,10 @@ const AppWorkspaceSidebarItemAction = props => mergeProps({
1238
1288
  kind: SIDEBAR_ITEM_ACTION
1239
1289
  }, props);
1240
1290
  const AppWorkspaceSidebarItemActions = props => (() => {
1241
- var _el$49 = _$getNextElement(_tmpl$24);
1242
- _$insert(_el$49, () => props.children);
1243
- _$effect(() => _$setAttribute(_el$49, "data-visibility", props.visibility === "hover" ? "hover" : undefined));
1244
- return _el$49;
1291
+ var _el$51 = _$getNextElement(_tmpl$24);
1292
+ _$insert(_el$51, () => props.children);
1293
+ _$effect(() => _$setAttribute(_el$51, "data-visibility", props.visibility === "hover" ? "hover" : undefined));
1294
+ return _el$51;
1245
1295
  })();
1246
1296
  const AppWorkspaceSidebarItemStatus = props => {
1247
1297
  const workspaceMessages = useWorkspaceMessages();
@@ -1259,8 +1309,8 @@ const AppWorkspaceSidebarItemStatus = props => {
1259
1309
  // space, and it still keeps the row's label on one line, so the first count
1260
1310
  // never re-wraps the label and moves the rows below.
1261
1311
  return (() => {
1262
- var _el$50 = _$getNextElement(_tmpl$30);
1263
- _$insert(_el$50, _$createComponent(Show, {
1312
+ var _el$52 = _$getNextElement(_tmpl$30);
1313
+ _$insert(_el$52, _$createComponent(Show, {
1264
1314
  get when() {
1265
1315
  return description();
1266
1316
  },
@@ -1280,8 +1330,8 @@ const AppWorkspaceSidebarItemStatus = props => {
1280
1330
  return _$getNextElement(_tmpl$26);
1281
1331
  }
1282
1332
  }), (() => {
1283
- var _el$53 = _$getNextElement(_tmpl$28);
1284
- _$insert(_el$53, _$createComponent(Show, {
1333
+ var _el$55 = _$getNextElement(_tmpl$28);
1334
+ _$insert(_el$55, _$createComponent(Show, {
1285
1335
  get when() {
1286
1336
  return count() || waiting() === 0;
1287
1337
  },
@@ -1296,37 +1346,37 @@ const AppWorkspaceSidebarItemStatus = props => {
1296
1346
  });
1297
1347
  },
1298
1348
  get children() {
1299
- var _el$54 = _$getNextElement(_tmpl$27);
1300
- _$insert(_el$54, (() => {
1349
+ var _el$56 = _$getNextElement(_tmpl$27);
1350
+ _$insert(_el$56, (() => {
1301
1351
  var _c$2 = _$memo(() => count() > 99);
1302
1352
  return () => _c$2() ? "99+" : count();
1303
1353
  })());
1304
- _$effect(() => _$setAttribute(_el$54, "data-mention", props.mention ? "true" : undefined));
1305
- return _el$54;
1354
+ _$effect(() => _$setAttribute(_el$56, "data-mention", props.mention ? "true" : undefined));
1355
+ return _el$56;
1306
1356
  }
1307
1357
  }));
1308
- return _el$53;
1309
- })(), (() => {
1310
- var _el$55 = _$getNextElement(_tmpl$29),
1311
- _el$56 = _el$55.firstChild,
1312
- _el$57 = _el$56.nextSibling,
1313
- [_el$58, _co$9] = _$getNextMarker(_el$57.nextSibling);
1314
- _$insert(_el$55, description, _el$58, _co$9);
1315
1358
  return _el$55;
1359
+ })(), (() => {
1360
+ var _el$57 = _$getNextElement(_tmpl$29),
1361
+ _el$58 = _el$57.firstChild,
1362
+ _el$59 = _el$58.nextSibling,
1363
+ [_el$60, _co$9] = _$getNextMarker(_el$59.nextSibling);
1364
+ _$insert(_el$57, description, _el$60, _co$9);
1365
+ return _el$57;
1316
1366
  })()];
1317
1367
  }
1318
1368
  }));
1319
1369
  _$effect(_p$ => {
1320
- var _v$57 = waiting() !== null ? undefined : count() ? "count" : dot() ? "dot" : undefined,
1321
- _v$58 = waiting() === null ? undefined : waiting() ? "count" : "zero";
1322
- _v$57 !== _p$.e && _$setAttribute(_el$50, "data-unread", _p$.e = _v$57);
1323
- _v$58 !== _p$.t && _$setAttribute(_el$50, "data-waiting", _p$.t = _v$58);
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);
1324
1374
  return _p$;
1325
1375
  }, {
1326
1376
  e: undefined,
1327
1377
  t: undefined
1328
1378
  });
1329
- return _el$50;
1379
+ return _el$52;
1330
1380
  })();
1331
1381
  };
1332
1382
  /** Shared visual and semantic row frame for flat sidebar items and tree items. */
@@ -1354,8 +1404,8 @@ function AppWorkspaceSidebarRow(props) {
1354
1404
  },
1355
1405
  get fallback() {
1356
1406
  return (() => {
1357
- var _el$60 = _$getNextElement(_tmpl$32);
1358
- _$spread(_el$60, _$mergeProps(attrs, {
1407
+ var _el$62 = _$getNextElement(_tmpl$32);
1408
+ _$spread(_el$62, _$mergeProps(attrs, {
1359
1409
  get tabIndex() {
1360
1410
  return props.tabIndex;
1361
1411
  },
@@ -1366,9 +1416,9 @@ function AppWorkspaceSidebarRow(props) {
1366
1416
  return props.onClick;
1367
1417
  }
1368
1418
  }), false, true);
1369
- _$insert(_el$60, () => props.children);
1419
+ _$insert(_el$62, () => props.children);
1370
1420
  _$runHydrationEvents();
1371
- return _el$60;
1421
+ return _el$62;
1372
1422
  })();
1373
1423
  },
1374
1424
  get children() {
@@ -1378,8 +1428,8 @@ function AppWorkspaceSidebarRow(props) {
1378
1428
  },
1379
1429
  get fallback() {
1380
1430
  return (() => {
1381
- var _el$61 = _$getNextElement(_tmpl$33);
1382
- _$spread(_el$61, _$mergeProps({
1431
+ var _el$63 = _$getNextElement(_tmpl$33);
1432
+ _$spread(_el$63, _$mergeProps({
1383
1433
  get href() {
1384
1434
  return props.href;
1385
1435
  }
@@ -1394,9 +1444,9 @@ function AppWorkspaceSidebarRow(props) {
1394
1444
  return props.onClick;
1395
1445
  }
1396
1446
  }), false, true);
1397
- _$insert(_el$61, () => props.children);
1447
+ _$insert(_el$63, () => props.children);
1398
1448
  _$runHydrationEvents();
1399
- return _el$61;
1449
+ return _el$63;
1400
1450
  })();
1401
1451
  },
1402
1452
  get children() {
@@ -1442,22 +1492,22 @@ function AppWorkspaceSidebarRow(props) {
1442
1492
  });
1443
1493
  },
1444
1494
  get children() {
1445
- var _el$62 = _$getNextElement(_tmpl$34),
1446
- _el$63 = _el$62.firstChild,
1447
- [_el$64, _co$0] = _$getNextMarker(_el$63.nextSibling),
1448
- _el$65 = _el$64.nextSibling,
1449
- [_el$66, _co$1] = _$getNextMarker(_el$65.nextSibling);
1450
- _$spread(_el$62, _$mergeProps(common, {
1495
+ var _el$64 = _$getNextElement(_tmpl$34),
1496
+ _el$65 = _el$64.firstChild,
1497
+ [_el$66, _co$0] = _$getNextMarker(_el$65.nextSibling),
1498
+ _el$67 = _el$66.nextSibling,
1499
+ [_el$68, _co$1] = _$getNextMarker(_el$67.nextSibling);
1500
+ _$spread(_el$64, _$mergeProps(common, {
1451
1501
  get ["data-disabled"]() {
1452
1502
  return props.disabled ? "true" : undefined;
1453
1503
  }
1454
1504
  }), false, true);
1455
- _$insert(_el$62, _$createComponent(Control, {
1505
+ _$insert(_el$64, _$createComponent(Control, {
1456
1506
  grouped: true
1457
- }), _el$64, _co$0);
1458
- _$insert(_el$62, () => props.actions, _el$66, _co$1);
1507
+ }), _el$66, _co$0);
1508
+ _$insert(_el$64, () => props.actions, _el$68, _co$1);
1459
1509
  _$runHydrationEvents();
1460
- return _el$62;
1510
+ return _el$64;
1461
1511
  }
1462
1512
  });
1463
1513
  }
@@ -1490,89 +1540,89 @@ function AppWorkspaceSidebarItem(props) {
1490
1540
  return iconContent() || icon();
1491
1541
  },
1492
1542
  get children() {
1493
- var _el$67 = _$getNextElement(_tmpl$35);
1494
- _$insert(_el$67, () => iconContent() ?? (() => {
1495
- var _el$82 = _$getNextElement(_tmpl$41);
1496
- _$effect(() => _$className(_el$82, iconClass(icon())));
1497
- return _el$82;
1543
+ var _el$69 = _$getNextElement(_tmpl$35);
1544
+ _$insert(_el$69, () => iconContent() ?? (() => {
1545
+ var _el$84 = _$getNextElement(_tmpl$41);
1546
+ _$effect(() => _$className(_el$84, iconClass(icon())));
1547
+ return _el$84;
1498
1548
  })());
1499
- _$effect(() => _$className(_el$67,
1549
+ _$effect(() => _$className(_el$69,
1500
1550
  // An object row's own glyph sits in a soft chip of the app colour; custom content such as an avatar keeps
1501
1551
  // its own look.
1502
1552
  props.variant === "object" && !iconContent() ? "k2b-app-workspace__sidebar-item-icon k2b-icon-tile" : "k2b-app-workspace__sidebar-item-icon"));
1503
- return _el$67;
1553
+ return _el$69;
1504
1554
  }
1505
1555
  }), (() => {
1506
- var _el$68 = _$getNextElement(_tmpl$39),
1507
- _el$77 = _el$68.firstChild,
1508
- [_el$78, _co$11] = _$getNextMarker(_el$77.nextSibling),
1509
- _el$74 = _el$78.nextSibling,
1510
- _el$75 = _el$74.firstChild,
1511
- _el$79 = _el$74.nextSibling,
1512
- [_el$80, _co$12] = _$getNextMarker(_el$79.nextSibling);
1513
- _$insert(_el$68, _$createComponent(Show, {
1556
+ var _el$70 = _$getNextElement(_tmpl$39),
1557
+ _el$79 = _el$70.firstChild,
1558
+ [_el$80, _co$11] = _$getNextMarker(_el$79.nextSibling),
1559
+ _el$76 = _el$80.nextSibling,
1560
+ _el$77 = _el$76.firstChild,
1561
+ _el$81 = _el$76.nextSibling,
1562
+ [_el$82, _co$12] = _$getNextMarker(_el$81.nextSibling);
1563
+ _$insert(_el$70, _$createComponent(Show, {
1514
1564
  get when() {
1515
1565
  return props.context || props.contextMeta;
1516
1566
  },
1517
1567
  get children() {
1518
- var _el$69 = _$getNextElement(_tmpl$37),
1519
- _el$70 = _el$69.firstChild,
1520
- _el$72 = _el$70.nextSibling,
1521
- [_el$73, _co$10] = _$getNextMarker(_el$72.nextSibling);
1522
- _$insert(_el$70, () => props.context);
1523
- _$insert(_el$69, _$createComponent(Show, {
1568
+ var _el$71 = _$getNextElement(_tmpl$37),
1569
+ _el$72 = _el$71.firstChild,
1570
+ _el$74 = _el$72.nextSibling,
1571
+ [_el$75, _co$10] = _$getNextMarker(_el$74.nextSibling);
1572
+ _$insert(_el$72, () => props.context);
1573
+ _$insert(_el$71, _$createComponent(Show, {
1524
1574
  get when() {
1525
1575
  return props.contextMeta;
1526
1576
  },
1527
1577
  get children() {
1528
- var _el$71 = _$getNextElement(_tmpl$36);
1529
- _$insert(_el$71, () => props.contextMeta);
1530
- return _el$71;
1578
+ var _el$73 = _$getNextElement(_tmpl$36);
1579
+ _$insert(_el$73, () => props.contextMeta);
1580
+ return _el$73;
1531
1581
  }
1532
- }), _el$73, _co$10);
1533
- return _el$69;
1582
+ }), _el$75, _co$10);
1583
+ return _el$71;
1534
1584
  }
1535
- }), _el$78, _co$11);
1536
- _$insert(_el$75, () => label());
1537
- _$insert(_el$68, _$createComponent(Show, {
1585
+ }), _el$80, _co$11);
1586
+ _$insert(_el$77, () => label());
1587
+ _$insert(_el$70, _$createComponent(Show, {
1538
1588
  get when() {
1539
1589
  return props.description;
1540
1590
  },
1541
1591
  get children() {
1542
- var _el$76 = _$getNextElement(_tmpl$38);
1543
- _$insert(_el$76, () => props.description);
1544
- return _el$76;
1592
+ var _el$78 = _$getNextElement(_tmpl$38);
1593
+ _$insert(_el$78, () => props.description);
1594
+ return _el$78;
1545
1595
  }
1546
- }), _el$80, _co$12);
1596
+ }), _el$82, _co$12);
1547
1597
  _$effect(_p$ => {
1548
- var _v$59 = oneLine() ? "1" : undefined,
1549
- _v$60 = !oneLine() && typeof label() === "string" ? label() : undefined;
1550
- _v$59 !== _p$.e && _$setAttribute(_el$74, "data-lines", _p$.e = _v$59);
1551
- _v$60 !== _p$.t && _$setAttribute(_el$74, "data-label", _p$.t = _v$60);
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);
1552
1602
  return _p$;
1553
1603
  }, {
1554
1604
  e: undefined,
1555
1605
  t: undefined
1556
1606
  });
1557
- return _el$68;
1607
+ return _el$70;
1558
1608
  })(), _$createComponent(Show, {
1559
1609
  get when() {
1560
1610
  return hasMeta();
1561
1611
  },
1562
1612
  get children() {
1563
- var _el$81 = _$getNextElement(_tmpl$40);
1564
- _$insert(_el$81, meta);
1613
+ var _el$83 = _$getNextElement(_tmpl$40);
1614
+ _$insert(_el$83, meta);
1565
1615
  _$effect(_p$ => {
1566
- var _v$61 = props.preview?.trigger === "row" ? metaId : undefined,
1567
- _v$62 = metaVisibility() === "hover" ? "hover" : undefined;
1568
- _v$61 !== _p$.e && _$setAttribute(_el$81, "id", _p$.e = _v$61);
1569
- _v$62 !== _p$.t && _$setAttribute(_el$81, "data-visibility", _p$.t = _v$62);
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);
1570
1620
  return _p$;
1571
1621
  }, {
1572
1622
  e: undefined,
1573
1623
  t: undefined
1574
1624
  });
1575
- return _el$81;
1625
+ return _el$83;
1576
1626
  }
1577
1627
  })];
1578
1628
  const singleAction = () => {
@@ -1588,9 +1638,9 @@ function AppWorkspaceSidebarItem(props) {
1588
1638
  props.onActionClick?.(event);
1589
1639
  };
1590
1640
  const content = () => actionSlot()?.children ?? (() => {
1591
- var _el$83 = _$getNextElement(_tmpl$41);
1592
- _$effect(() => _$className(_el$83, iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots")));
1593
- return _el$83;
1641
+ var _el$85 = _$getNextElement(_tmpl$41);
1642
+ _$effect(() => _$className(_el$85, iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots")));
1643
+ return _el$85;
1594
1644
  })();
1595
1645
  return _$createComponent(Show, {
1596
1646
  get when() {
@@ -1603,16 +1653,16 @@ function AppWorkspaceSidebarItem(props) {
1603
1653
  },
1604
1654
  get fallback() {
1605
1655
  return (() => {
1606
- var _el$85 = _$getNextElement(_tmpl$43);
1607
- _el$85.$$click = select;
1608
- _$insert(_el$85, content);
1656
+ var _el$87 = _$getNextElement(_tmpl$43);
1657
+ _el$87.$$click = select;
1658
+ _$insert(_el$87, content);
1609
1659
  _$effect(_p$ => {
1610
- var _v$66 = actionSlot()?.disabled,
1611
- _v$67 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1612
- _v$68 = label();
1613
- _v$66 !== _p$.e && _$setProperty(_el$85, "disabled", _p$.e = _v$66);
1614
- _v$67 !== _p$.t && _$setAttribute(_el$85, "data-visibility", _p$.t = _v$67);
1615
- _v$68 !== _p$.a && _$setAttribute(_el$85, "aria-label", _p$.a = _v$68);
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);
1616
1666
  return _p$;
1617
1667
  }, {
1618
1668
  e: undefined,
@@ -1620,20 +1670,20 @@ function AppWorkspaceSidebarItem(props) {
1620
1670
  a: undefined
1621
1671
  });
1622
1672
  _$runHydrationEvents();
1623
- return _el$85;
1673
+ return _el$87;
1624
1674
  })();
1625
1675
  },
1626
1676
  get children() {
1627
- var _el$84 = _$getNextElement(_tmpl$42);
1628
- _el$84.$$click = select;
1629
- _$insert(_el$84, content);
1677
+ var _el$86 = _$getNextElement(_tmpl$42);
1678
+ _el$86.$$click = select;
1679
+ _$insert(_el$86, content);
1630
1680
  _$effect(_p$ => {
1631
- var _v$63 = actionSlot()?.href,
1632
- _v$64 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1633
- _v$65 = label();
1634
- _v$63 !== _p$.e && _$setAttribute(_el$84, "href", _p$.e = _v$63);
1635
- _v$64 !== _p$.t && _$setAttribute(_el$84, "data-visibility", _p$.t = _v$64);
1636
- _v$65 !== _p$.a && _$setAttribute(_el$84, "aria-label", _p$.a = _v$65);
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);
1637
1687
  return _p$;
1638
1688
  }, {
1639
1689
  e: undefined,
@@ -1641,7 +1691,7 @@ function AppWorkspaceSidebarItem(props) {
1641
1691
  a: undefined
1642
1692
  });
1643
1693
  _$runHydrationEvents();
1644
- return _el$84;
1694
+ return _el$86;
1645
1695
  }
1646
1696
  });
1647
1697
  }
@@ -1942,16 +1992,16 @@ const AppWorkspaceNavTree = props => {
1942
1992
  return rowIcon();
1943
1993
  },
1944
1994
  get children() {
1945
- var _el$86 = _$getNextElement(_tmpl$44),
1946
- _el$87 = _el$86.firstChild;
1947
- _$spread(_el$86, _$mergeProps({
1995
+ var _el$88 = _$getNextElement(_tmpl$44),
1996
+ _el$89 = _el$88.firstChild;
1997
+ _$spread(_el$88, _$mergeProps({
1948
1998
  get ["data-k2b-nav-tree-toggle"]() {
1949
1999
  return usesIconDisclosure() ? "" : undefined;
1950
2000
  }
1951
2001
  }, () => iconAccessibility(item.iconLabel)), false, true);
1952
- _$effect(() => _$className(_el$87, iconClass(rowIcon())));
2002
+ _$effect(() => _$className(_el$89, iconClass(rowIcon())));
1953
2003
  _$runHydrationEvents();
1954
- return _el$86;
2004
+ return _el$88;
1955
2005
  }
1956
2006
  }), _$createComponent(Show, {
1957
2007
  get when() {
@@ -1959,51 +2009,51 @@ const AppWorkspaceNavTree = props => {
1959
2009
  },
1960
2010
  get fallback() {
1961
2011
  return (() => {
1962
- var _el$95 = _$getNextElement(_tmpl$48),
1963
- _el$96 = _el$95.firstChild;
1964
- _$insert(_el$96, () => item.label);
1965
- _$effect(() => _$setAttribute(_el$95, "data-label", typeof item.label === "string" ? item.label : undefined));
1966
- return _el$95;
2012
+ var _el$97 = _$getNextElement(_tmpl$48),
2013
+ _el$98 = _el$97.firstChild;
2014
+ _$insert(_el$98, () => item.label);
2015
+ _$effect(() => _$setAttribute(_el$97, "data-label", typeof item.label === "string" ? item.label : undefined));
2016
+ return _el$97;
1967
2017
  })();
1968
2018
  },
1969
2019
  get children() {
1970
- var _el$88 = _$getNextElement(_tmpl$45),
1971
- _el$89 = _el$88.firstChild,
1972
- _el$90 = _el$89.firstChild,
1973
- _el$91 = _el$89.nextSibling;
1974
- _$insert(_el$90, () => item.label);
1975
- _$insert(_el$91, () => item.description);
1976
- _$effect(() => _$setAttribute(_el$89, "data-label", typeof item.label === "string" ? item.label : undefined));
1977
- return _el$88;
2020
+ var _el$90 = _$getNextElement(_tmpl$45),
2021
+ _el$91 = _el$90.firstChild,
2022
+ _el$92 = _el$91.firstChild,
2023
+ _el$93 = _el$91.nextSibling;
2024
+ _$insert(_el$92, () => item.label);
2025
+ _$insert(_el$93, () => item.description);
2026
+ _$effect(() => _$setAttribute(_el$91, "data-label", typeof item.label === "string" ? item.label : undefined));
2027
+ return _el$90;
1978
2028
  }
1979
2029
  }), _$createComponent(Show, {
1980
2030
  get when() {
1981
2031
  return item.meta !== undefined;
1982
2032
  },
1983
2033
  get children() {
1984
- var _el$92 = _$getNextElement(_tmpl$46);
1985
- _$insert(_el$92, () => item.meta);
2034
+ var _el$94 = _$getNextElement(_tmpl$46);
2035
+ _$insert(_el$94, () => item.meta);
1986
2036
  _$effect(_p$ => {
1987
- var _v$69 = `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`,
1988
- _v$70 = item.metaVisibility === "hover" ? "hover" : undefined;
1989
- _v$69 !== _p$.e && _$className(_el$92, _p$.e = _v$69);
1990
- _v$70 !== _p$.t && _$setAttribute(_el$92, "data-visibility", _p$.t = _v$70);
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);
1991
2041
  return _p$;
1992
2042
  }, {
1993
2043
  e: undefined,
1994
2044
  t: undefined
1995
2045
  });
1996
- return _el$92;
2046
+ return _el$94;
1997
2047
  }
1998
2048
  }), _$createComponent(Show, {
1999
2049
  get when() {
2000
2050
  return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
2001
2051
  },
2002
2052
  get children() {
2003
- var _el$93 = _$getNextElement(_tmpl$47),
2004
- _el$94 = _el$93.firstChild;
2005
- _$effect(() => _$className(_el$94, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`));
2006
- return _el$93;
2053
+ var _el$95 = _$getNextElement(_tmpl$47),
2054
+ _el$96 = _el$95.firstChild;
2055
+ _$effect(() => _$className(_el$96, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`));
2056
+ return _el$95;
2007
2057
  }
2008
2058
  })];
2009
2059
  const row = () => _$createComponent(AppWorkspaceSidebarRow, {
@@ -2111,56 +2161,56 @@ const AppWorkspaceNavTree = props => {
2111
2161
  requestMove(target.move, false);
2112
2162
  };
2113
2163
  return (() => {
2114
- var _el$97 = _$getNextElement(_tmpl$50),
2115
- _el$99 = _el$97.firstChild,
2116
- [_el$100, _co$13] = _$getNextMarker(_el$99.nextSibling),
2117
- _el$101 = _el$100.nextSibling,
2118
- [_el$102, _co$14] = _$getNextMarker(_el$101.nextSibling);
2119
- _el$97.addEventListener("drop", onDrop);
2120
- _$addEventListener(_el$97, "dragleave", item.onDragLeave);
2121
- _el$97.addEventListener("dragover", onDragOver);
2122
- _$addEventListener(_el$97, "dragenter", item.onDragEnter);
2123
- _el$97.addEventListener("dragstart", onDragStart);
2124
- _el$97.$$keydown = onKeyDown;
2125
- _el$97.addEventListener("focus", () => setFocusedId(item.id));
2164
+ var _el$99 = _$getNextElement(_tmpl$50),
2165
+ _el$101 = _el$99.firstChild,
2166
+ [_el$102, _co$13] = _$getNextMarker(_el$101.nextSibling),
2167
+ _el$103 = _el$102.nextSibling,
2168
+ [_el$104, _co$14] = _$getNextMarker(_el$103.nextSibling);
2169
+ _el$99.addEventListener("drop", onDrop);
2170
+ _$addEventListener(_el$99, "dragleave", item.onDragLeave);
2171
+ _el$99.addEventListener("dragover", onDragOver);
2172
+ _$addEventListener(_el$99, "dragenter", item.onDragEnter);
2173
+ _el$99.addEventListener("dragstart", onDragStart);
2174
+ _el$99.$$keydown = onKeyDown;
2175
+ _el$99.addEventListener("focus", () => setFocusedId(item.id));
2126
2176
  var _ref$6 = treeItem;
2127
- typeof _ref$6 === "function" ? _$use(_ref$6, _el$97) : treeItem = _el$97;
2128
- _$setAttribute(_el$97, "aria-level", depth + 1);
2129
- _$setAttribute(_el$97, "data-k2b-nav-tree-parent-id", parentId);
2130
- _$insert(_el$97, row, _el$100, _co$13);
2131
- _$insert(_el$97, _$createComponent(Show, {
2177
+ typeof _ref$6 === "function" ? _$use(_ref$6, _el$99) : treeItem = _el$99;
2178
+ _$setAttribute(_el$99, "aria-level", depth + 1);
2179
+ _$setAttribute(_el$99, "data-k2b-nav-tree-parent-id", parentId);
2180
+ _$insert(_el$99, row, _el$102, _co$13);
2181
+ _$insert(_el$99, _$createComponent(Show, {
2132
2182
  get when() {
2133
2183
  return _$memo(() => !!hasChildren())() && isExpanded(item.id);
2134
2184
  },
2135
2185
  get children() {
2136
- var _el$98 = _$getNextElement(_tmpl$49);
2137
- _$insert(_el$98, () => renderItems(nested, depth + 1, item.id));
2138
- return _el$98;
2186
+ var _el$100 = _$getNextElement(_tmpl$49);
2187
+ _$insert(_el$100, () => renderItems(nested, depth + 1, item.id));
2188
+ return _el$100;
2139
2189
  }
2140
- }), _el$102, _co$14);
2190
+ }), _el$104, _co$14);
2141
2191
  _$effect(_p$ => {
2142
- var _v$71 = siblings().length,
2143
- _v$72 = place() + 1,
2144
- _v$73 = selected(),
2145
- _v$74 = hasChildren() ? isExpanded(item.id) : undefined,
2146
- _v$75 = item.disabled ? "true" : undefined,
2147
- _v$76 = item.disabled ? -1 : tabStopId() === item.id ? 0 : -1,
2148
- _v$77 = movable() ? true : undefined,
2149
- _v$78 = item.id,
2150
- _v$79 = dragged()?.id === item.id ? "" : undefined,
2151
- _v$80 = dropTarget()?.id === item.id ? dropTarget().side : undefined,
2152
- _v$81 = String(props.indented === false ? 0 : depth);
2153
- _v$71 !== _p$.e && _$setAttribute(_el$97, "aria-setsize", _p$.e = _v$71);
2154
- _v$72 !== _p$.t && _$setAttribute(_el$97, "aria-posinset", _p$.t = _v$72);
2155
- _v$73 !== _p$.a && _$setAttribute(_el$97, "aria-selected", _p$.a = _v$73);
2156
- _v$74 !== _p$.o && _$setAttribute(_el$97, "aria-expanded", _p$.o = _v$74);
2157
- _v$75 !== _p$.i && _$setAttribute(_el$97, "aria-disabled", _p$.i = _v$75);
2158
- _v$76 !== _p$.n && _$setAttribute(_el$97, "tabindex", _p$.n = _v$76);
2159
- _v$77 !== _p$.s && _$setAttribute(_el$97, "draggable", _p$.s = _v$77);
2160
- _v$78 !== _p$.h && _$setAttribute(_el$97, "data-k2b-nav-tree-id", _p$.h = _v$78);
2161
- _v$79 !== _p$.r && _$setAttribute(_el$97, "data-k2b-nav-tree-dragging", _p$.r = _v$79);
2162
- _v$80 !== _p$.d && _$setAttribute(_el$97, "data-k2b-nav-tree-drop", _p$.d = _v$80);
2163
- _v$81 !== _p$.l && _$setStyleProperty(_el$97, "--k2b-nav-tree-depth", _p$.l = _v$81);
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);
2164
2214
  return _p$;
2165
2215
  }, {
2166
2216
  e: undefined,
@@ -2176,7 +2226,7 @@ const AppWorkspaceNavTree = props => {
2176
2226
  l: undefined
2177
2227
  });
2178
2228
  _$runHydrationEvents();
2179
- return _el$97;
2229
+ return _el$99;
2180
2230
  })();
2181
2231
  }
2182
2232
  });
@@ -2201,62 +2251,62 @@ const AppWorkspaceNavTree = props => {
2201
2251
  });
2202
2252
  });
2203
2253
  return (() => {
2204
- var _el$103 = _$getNextElement(_tmpl$51);
2205
- _el$103.addEventListener("dragend", endDrag);
2206
- _el$103.addEventListener("dragleave", event => {
2254
+ var _el$105 = _$getNextElement(_tmpl$51);
2255
+ _el$105.addEventListener("dragend", endDrag);
2256
+ _el$105.addEventListener("dragleave", event => {
2207
2257
  if (!root?.contains(event.relatedTarget)) setDropTarget(null);
2208
2258
  });
2209
- _el$103.addEventListener("dragover", event => {
2259
+ _el$105.addEventListener("dragover", event => {
2210
2260
  // Runs after the rows: a position no row claimed shows no gap.
2211
2261
  if (claimedDragOver !== event) setDropTarget(null);
2212
2262
  });
2213
2263
  var _ref$7 = root;
2214
- typeof _ref$7 === "function" ? _$use(_ref$7, _el$103) : root = _el$103;
2215
- _$insert(_el$103, () => renderItems(roots, 0));
2264
+ typeof _ref$7 === "function" ? _$use(_ref$7, _el$105) : root = _el$105;
2265
+ _$insert(_el$105, () => renderItems(roots, 0));
2216
2266
  _$effect(_p$ => {
2217
- var _v$82 = `k2b-app-workspace__nav-tree ${props.class ?? ""}`,
2218
- _v$83 = props.ariaLabel;
2219
- _v$82 !== _p$.e && _$className(_el$103, _p$.e = _v$82);
2220
- _v$83 !== _p$.t && _$setAttribute(_el$103, "aria-label", _p$.t = _v$83);
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);
2221
2271
  return _p$;
2222
2272
  }, {
2223
2273
  e: undefined,
2224
2274
  t: undefined
2225
2275
  });
2226
- return _el$103;
2276
+ return _el$105;
2227
2277
  })();
2228
2278
  };
2229
2279
  AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
2230
2280
  const AppWorkspaceSidebarIconGrid = props => (() => {
2231
- var _el$104 = _$getNextElement(_tmpl$52),
2232
- _el$106 = _el$104.firstChild,
2233
- [_el$107, _co$15] = _$getNextMarker(_el$106.nextSibling),
2234
- _el$105 = _el$107.nextSibling;
2235
- _$spread(_el$104, _$mergeProps({
2281
+ var _el$106 = _$getNextElement(_tmpl$52),
2282
+ _el$108 = _el$106.firstChild,
2283
+ [_el$109, _co$15] = _$getNextMarker(_el$108.nextSibling),
2284
+ _el$107 = _el$109.nextSibling;
2285
+ _$spread(_el$106, _$mergeProps({
2236
2286
  get ["class"]() {
2237
2287
  return `k2b-app-workspace__sidebar-icon-grid-wrap ${props.class ?? ""}`;
2238
2288
  }
2239
2289
  }, () => modeAttrs(props.sidebarMode)), false, true);
2240
- _$insert(_el$104, _$createComponent(Show, {
2290
+ _$insert(_el$106, _$createComponent(Show, {
2241
2291
  get when() {
2242
2292
  return props.title;
2243
2293
  },
2244
2294
  children: title => (() => {
2245
- var _el$108 = _$getNextElement(_tmpl$23);
2246
- _$insert(_el$108, title);
2247
- return _el$108;
2295
+ var _el$110 = _$getNextElement(_tmpl$23);
2296
+ _$insert(_el$110, title);
2297
+ return _el$110;
2248
2298
  })()
2249
- }), _el$107, _co$15);
2250
- _$insert(_el$105, () => props.children);
2251
- _$effect(() => _$setAttribute(_el$105, "data-columns", props.columns ?? 2));
2299
+ }), _el$109, _co$15);
2300
+ _$insert(_el$107, () => props.children);
2301
+ _$effect(() => _$setAttribute(_el$107, "data-columns", props.columns ?? 2));
2252
2302
  _$runHydrationEvents();
2253
- return _el$104;
2303
+ return _el$106;
2254
2304
  })();
2255
2305
  const AppWorkspaceSidebarIconAction = props => {
2256
2306
  const content = (() => {
2257
- var _el$109 = _$getNextElement(_tmpl$53);
2258
- _$effect(() => _$className(_el$109, iconClass(props.icon)));
2259
- return _el$109;
2307
+ var _el$111 = _$getNextElement(_tmpl$53);
2308
+ _$effect(() => _$className(_el$111, iconClass(props.icon)));
2309
+ return _el$111;
2260
2310
  })();
2261
2311
  const attrs = () => ({
2262
2312
  class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
@@ -2269,8 +2319,8 @@ const AppWorkspaceSidebarIconAction = props => {
2269
2319
  ...modeAttrs(props.sidebarMode)
2270
2320
  });
2271
2321
  if (!props.href || props.disabled) return (() => {
2272
- var _el$110 = _$getNextElement(_tmpl$32);
2273
- _$spread(_el$110, _$mergeProps(attrs, {
2322
+ var _el$112 = _$getNextElement(_tmpl$32);
2323
+ _$spread(_el$112, _$mergeProps(attrs, {
2274
2324
  get disabled() {
2275
2325
  return props.disabled;
2276
2326
  },
@@ -2278,13 +2328,13 @@ const AppWorkspaceSidebarIconAction = props => {
2278
2328
  return props.onClick;
2279
2329
  }
2280
2330
  }), false, true);
2281
- _$insert(_el$110, content);
2331
+ _$insert(_el$112, content);
2282
2332
  _$runHydrationEvents();
2283
- return _el$110;
2333
+ return _el$112;
2284
2334
  })();
2285
2335
  if (props.navigation !== "enhanced" || !props.onNavigate) return (() => {
2286
- var _el$111 = _$getNextElement(_tmpl$33);
2287
- _$spread(_el$111, _$mergeProps({
2336
+ var _el$113 = _$getNextElement(_tmpl$33);
2337
+ _$spread(_el$113, _$mergeProps({
2288
2338
  get href() {
2289
2339
  return props.href;
2290
2340
  }
@@ -2293,9 +2343,9 @@ const AppWorkspaceSidebarIconAction = props => {
2293
2343
  return props.onClick;
2294
2344
  }
2295
2345
  }), false, true);
2296
- _$insert(_el$111, content);
2346
+ _$insert(_el$113, content);
2297
2347
  _$runHydrationEvents();
2298
- return _el$111;
2348
+ return _el$113;
2299
2349
  })();
2300
2350
  return _$createComponent(Link, _$mergeProps({
2301
2351
  get href() {
@@ -2323,22 +2373,51 @@ const AppWorkspaceSidebarIconAction = props => {
2323
2373
  * host's page title with the way up (see `PageTitle`); the page's own
2324
2374
  * `PageTitle` takes its place. The visible title is no heading, because many
2325
2375
  * pages render their own `h1`. From 64 rem a sidebar that marks the current
2326
- * page names it already: the row hides, and only on a page without its own
2327
- * `h1` its heading stays for assistive technology. It is one fixed height
2328
- * and draws no line; CSS decides when it shows, so the server-rendered page
2329
- * already has its final geometry.
2376
+ * page names it already: the title and the way up hide, and only on a page
2377
+ * without its own `h1` its heading stays for assistive technology. With an
2378
+ * `AppWorkspace.Head` slot the row is always there and also carries the
2379
+ * views, the filters, the result count, and the actions; only its title
2380
+ * follows the rules above. It draws no line; CSS decides what shows and when
2381
+ * the filters wrap, so the server-rendered page already has its final
2382
+ * geometry.
2330
2383
  */
2331
2384
  function AppWorkspaceHead(props) {
2332
2385
  const messages = useWorkspaceMessages();
2386
+ const filters = useFilterMessages();
2387
+ // JSX prop getters construct their elements on every read. Share each
2388
+ // resolved slot between its presence check and its rendered content.
2389
+ const resolvedViews = children(() => props.head?.views);
2390
+ const resolvedFilters = children(() => props.head?.filters);
2391
+ const resolvedActions = children(() => props.head?.actions);
2392
+ const resolvedCount = children(() => props.head?.count);
2333
2393
  // A nested workspace is part of a page that already shows its title.
2334
2394
  const trail = props.nested ? () => undefined : usePageTrail();
2395
+ const resetContent = () => filters().reset;
2396
+ const primaryContent = () => [(() => {
2397
+ var _el$114 = _$getNextElement(_tmpl$53);
2398
+ _$effect(() => _$className(_el$114, props.head?.primary?.icon));
2399
+ return _el$114;
2400
+ })(), (() => {
2401
+ var _el$115 = _$getNextElement(_tmpl$54);
2402
+ _$insert(_el$115, () => props.head?.primary?.label);
2403
+ return _el$115;
2404
+ })()];
2335
2405
  return (() => {
2336
- var _el$112 = _$getNextElement(_tmpl$55),
2337
- _el$114 = _el$112.firstChild,
2338
- [_el$115, _co$16] = _$getNextMarker(_el$114.nextSibling),
2339
- _el$116 = _el$115.nextSibling,
2340
- [_el$117, _co$17] = _$getNextMarker(_el$116.nextSibling);
2341
- _$insert(_el$112, _$createComponent(IconButton, {
2406
+ var _el$116 = _$getNextElement(_tmpl$60),
2407
+ _el$117 = _el$116.firstChild,
2408
+ _el$127 = _el$117.firstChild,
2409
+ [_el$128, _co$18] = _$getNextMarker(_el$127.nextSibling),
2410
+ _el$129 = _el$128.nextSibling,
2411
+ [_el$130, _co$19] = _$getNextMarker(_el$129.nextSibling),
2412
+ _el$131 = _el$130.nextSibling,
2413
+ [_el$132, _co$20] = _$getNextMarker(_el$131.nextSibling),
2414
+ _el$133 = _el$132.nextSibling,
2415
+ [_el$134, _co$21] = _$getNextMarker(_el$133.nextSibling),
2416
+ _el$135 = _el$134.nextSibling,
2417
+ [_el$136, _co$22] = _$getNextMarker(_el$135.nextSibling),
2418
+ _el$142 = _el$117.nextSibling,
2419
+ [_el$143, _co$25] = _$getNextMarker(_el$142.nextSibling);
2420
+ _$insert(_el$117, _$createComponent(IconButton, {
2342
2421
  "class": "k2b-app-workspace__head-toggle",
2343
2422
  get label() {
2344
2423
  return messages().showNavigation;
@@ -2349,10 +2428,10 @@ function AppWorkspaceHead(props) {
2349
2428
  "aria-expanded": "false",
2350
2429
  "data-app-workspace-sidebar-toggle": "",
2351
2430
  get children() {
2352
- return _$getNextElement(_tmpl$54);
2431
+ return _$getNextElement(_tmpl$55);
2353
2432
  }
2354
- }), _el$115, _co$16);
2355
- _$insert(_el$112, _$createComponent(Show, {
2433
+ }), _el$128, _co$18);
2434
+ _$insert(_el$117, _$createComponent(Show, {
2356
2435
  get when() {
2357
2436
  return trail();
2358
2437
  },
@@ -2363,14 +2442,153 @@ function AppWorkspaceHead(props) {
2363
2442
  as: "p",
2364
2443
  fallback: true
2365
2444
  }), (() => {
2366
- var _el$118 = _$getNextElement(_tmpl$56);
2367
- _$setAttribute(_el$118, "data-k2b-server", isServer ? "" : undefined);
2368
- _$insert(_el$118, () => current().title);
2369
- return _el$118;
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;
2370
2449
  })()]
2371
- }), _el$117, _co$17);
2372
- _$effect(() => _$setAttribute(_el$112, "data-trail", trail()?.ancestors.length ? "up" : trail() ? "title" : undefined));
2373
- return _el$112;
2450
+ }), _el$130, _co$19);
2451
+ _$insert(_el$117, _$createComponent(Show, {
2452
+ get when() {
2453
+ return resolvedViews.toArray().some(Boolean);
2454
+ },
2455
+ get children() {
2456
+ var _el$119 = _$getNextElement(_tmpl$56);
2457
+ _$insert(_el$119, resolvedViews);
2458
+ return _el$119;
2459
+ }
2460
+ }), _el$132, _co$20);
2461
+ _$insert(_el$117, _$createComponent(Show, {
2462
+ get when() {
2463
+ return resolvedFilters.toArray().some(Boolean) || props.head?.filtered;
2464
+ },
2465
+ get children() {
2466
+ var _el$120 = _$getNextElement(_tmpl$57),
2467
+ _el$121 = _el$120.firstChild,
2468
+ [_el$122, _co$16] = _$getNextMarker(_el$121.nextSibling),
2469
+ _el$123 = _el$122.nextSibling,
2470
+ [_el$124, _co$17] = _$getNextMarker(_el$123.nextSibling);
2471
+ _$insert(_el$120, resolvedFilters, _el$122, _co$16);
2472
+ _$insert(_el$120, _$createComponent(Show, {
2473
+ get when() {
2474
+ return props.head?.filtered;
2475
+ },
2476
+ get children() {
2477
+ return _$createComponent(Show, {
2478
+ get when() {
2479
+ return props.head?.resetHref;
2480
+ },
2481
+ get fallback() {
2482
+ return _$createComponent(Button, {
2483
+ variant: "ghost",
2484
+ size: "sm",
2485
+ "class": "k2b-app-workspace__head-reset",
2486
+ onClick: () => props.head?.onReset?.(),
2487
+ get children() {
2488
+ return resetContent();
2489
+ }
2490
+ });
2491
+ },
2492
+ children: href => _$createComponent(ButtonLink, {
2493
+ variant: "ghost",
2494
+ size: "sm",
2495
+ "class": "k2b-app-workspace__head-reset",
2496
+ get href() {
2497
+ return href();
2498
+ },
2499
+ get onClick() {
2500
+ return props.head?.onReset ? event => {
2501
+ if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
2502
+ event.preventDefault();
2503
+ props.head?.onReset?.();
2504
+ } : undefined;
2505
+ },
2506
+ get children() {
2507
+ return resetContent();
2508
+ }
2509
+ })
2510
+ });
2511
+ }
2512
+ }), _el$124, _co$17);
2513
+ _$effect(() => _$setAttribute(_el$120, "aria-label", filters().filters));
2514
+ return _el$120;
2515
+ }
2516
+ }), _el$134, _co$21);
2517
+ _$insert(_el$117, _$createComponent(Show, {
2518
+ get when() {
2519
+ return _$memo(() => !!props.head?.filtered)() && resolvedCount.toArray().some(value => value !== undefined && value !== null && value !== false);
2520
+ },
2521
+ get children() {
2522
+ var _el$125 = _$getNextElement(_tmpl$58),
2523
+ _el$126 = _el$125.firstChild;
2524
+ _$insert(_el$126, resolvedCount);
2525
+ return _el$125;
2526
+ }
2527
+ }), _el$136, _co$22);
2528
+ _$insert(_el$116, _$createComponent(Show, {
2529
+ get when() {
2530
+ return resolvedActions.toArray().some(Boolean) || props.head?.primary;
2531
+ },
2532
+ get children() {
2533
+ var _el$137 = _$getNextElement(_tmpl$59),
2534
+ _el$138 = _el$137.firstChild,
2535
+ [_el$139, _co$23] = _$getNextMarker(_el$138.nextSibling),
2536
+ _el$140 = _el$139.nextSibling,
2537
+ [_el$141, _co$24] = _$getNextMarker(_el$140.nextSibling);
2538
+ _$insert(_el$137, resolvedActions, _el$139, _co$23);
2539
+ _$insert(_el$137, _$createComponent(Show, {
2540
+ get when() {
2541
+ return props.head?.primary;
2542
+ },
2543
+ children: primary => _$createComponent(Show, {
2544
+ get when() {
2545
+ return primary().href;
2546
+ },
2547
+ get fallback() {
2548
+ return _$createComponent(Button, {
2549
+ variant: "primary",
2550
+ size: "sm",
2551
+ "class": "k2b-app-workspace__head-primary",
2552
+ "data-workspace-primary": "",
2553
+ get onClick() {
2554
+ return primary().onClick;
2555
+ },
2556
+ get children() {
2557
+ return primaryContent();
2558
+ }
2559
+ });
2560
+ },
2561
+ children: href => _$createComponent(ButtonLink, {
2562
+ variant: "primary",
2563
+ size: "sm",
2564
+ "class": "k2b-app-workspace__head-primary",
2565
+ "data-workspace-primary": "",
2566
+ get href() {
2567
+ return href();
2568
+ },
2569
+ get onClick() {
2570
+ return primary().onClick;
2571
+ },
2572
+ get children() {
2573
+ return primaryContent();
2574
+ }
2575
+ })
2576
+ })
2577
+ }), _el$141, _co$24);
2578
+ return _el$137;
2579
+ }
2580
+ }), _el$143, _co$25);
2581
+ _$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);
2586
+ return _p$;
2587
+ }, {
2588
+ e: undefined,
2589
+ t: undefined
2590
+ });
2591
+ return _el$116;
2374
2592
  })();
2375
2593
  }
2376
2594
  const AppWorkspace = props => {
@@ -2398,6 +2616,20 @@ const AppWorkspace = props => {
2398
2616
  writeState: state => props.onLayoutChange?.(state)
2399
2617
  }));
2400
2618
  });
2619
+ const contents = () => {
2620
+ const resolved = children(() => props.children);
2621
+ const slots = createMemo(() => flatten(resolved()));
2622
+ // Same props object, same memo value: a sibling change must not rebuild the head's slots.
2623
+ const head = createMemo(() => slots().find(headSlot)?.props);
2624
+ const content = () => slots().filter(value => !headSlot(value));
2625
+ return [_$createComponent(AppWorkspaceHead, {
2626
+ sidebarId: sidebarId,
2627
+ nested: nested,
2628
+ get head() {
2629
+ return head();
2630
+ }
2631
+ }), _$memo(content)];
2632
+ };
2401
2633
  return _$createComponent(ResizeContext.Provider, {
2402
2634
  get value() {
2403
2635
  return props.resizable !== false;
@@ -2406,31 +2638,23 @@ const AppWorkspace = props => {
2406
2638
  return _$createComponent(WorkspaceContext.Provider, {
2407
2639
  value: workspace,
2408
2640
  get children() {
2409
- var _el$119 = _$getNextElement(_tmpl$57),
2410
- _el$120 = _el$119.firstChild,
2411
- [_el$121, _co$18] = _$getNextMarker(_el$120.nextSibling),
2412
- _el$122 = _el$121.nextSibling,
2413
- [_el$123, _co$19] = _$getNextMarker(_el$122.nextSibling);
2641
+ var _el$145 = _$getNextElement(_tmpl$62);
2414
2642
  var _ref$8 = root;
2415
- typeof _ref$8 === "function" ? _$use(_ref$8, _el$119) : root = _el$119;
2416
- _$insert(_el$119, _$createComponent(AppWorkspaceHead, {
2417
- sidebarId: sidebarId,
2418
- nested: nested
2419
- }), _el$121, _co$18);
2420
- _$insert(_el$119, () => props.children, _el$123, _co$19);
2643
+ typeof _ref$8 === "function" ? _$use(_ref$8, _el$145) : root = _el$145;
2644
+ _$insert(_el$145, contents);
2421
2645
  _$effect(_p$ => {
2422
- var _v$84 = `k2b-app-workspace ${props.class ?? ""}`,
2423
- _v$85 = props.mobileSurface,
2424
- _v$86 = props.flat ? "true" : undefined,
2425
- _v$87 = initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed),
2426
- _v$88 = props.resizable === false ? "false" : "true",
2427
- _v$89 = appWorkspaceLayoutStyle(initialLayoutState());
2428
- _v$84 !== _p$.e && _$className(_el$119, _p$.e = _v$84);
2429
- _v$85 !== _p$.t && _$setAttribute(_el$119, "data-mobile-surface", _p$.t = _v$85);
2430
- _v$86 !== _p$.a && _$setAttribute(_el$119, "data-flat", _p$.a = _v$86);
2431
- _v$87 !== _p$.o && _$setAttribute(_el$119, "data-sidebar-collapsed", _p$.o = _v$87);
2432
- _v$88 !== _p$.i && _$setAttribute(_el$119, "data-workspace-resizable", _p$.i = _v$88);
2433
- _p$.n = _$style(_el$119, _v$89, _p$.n);
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);
2434
2658
  return _p$;
2435
2659
  }, {
2436
2660
  e: undefined,
@@ -2440,7 +2664,7 @@ const AppWorkspace = props => {
2440
2664
  i: undefined,
2441
2665
  n: undefined
2442
2666
  });
2443
- return _el$119;
2667
+ return _el$145;
2444
2668
  }
2445
2669
  });
2446
2670
  }
@@ -2454,11 +2678,12 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
2454
2678
  return props.children;
2455
2679
  }
2456
2680
  });
2681
+ AppWorkspace.Head = AppWorkspaceHeadSlot;
2457
2682
  AppWorkspace.Content = props => (() => {
2458
- var _el$124 = _$getNextElement(_tmpl$5);
2459
- _$insert(_el$124, () => props.children);
2460
- _$effect(() => _$className(_el$124, `k2b-app-workspace__content ${props.class ?? ""}`));
2461
- return _el$124;
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;
2462
2687
  })();
2463
2688
  AppWorkspace.Main = AppWorkspaceMain;
2464
2689
  AppWorkspace.MainPane = AppWorkspaceMainPane;