@k2b/ui 0.32.0 → 0.34.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 (292) hide show
  1. package/dist/base.css +14 -1
  2. package/dist/browser/actions/ContextMenu.js +13 -0
  3. package/dist/browser/actions/ContextMenu.js.map +1 -1
  4. package/dist/browser/actions/Dropdown.js +173 -102
  5. package/dist/browser/actions/Dropdown.js.map +1 -1
  6. package/dist/browser/actions/FilterChip.js +113 -56
  7. package/dist/browser/actions/FilterChip.js.map +1 -1
  8. package/dist/browser/actions/SelectionToolbar.js +129 -0
  9. package/dist/browser/actions/SelectionToolbar.js.map +1 -0
  10. package/dist/browser/actions/filter-messages.js +26 -2
  11. package/dist/browser/actions/filter-messages.js.map +1 -1
  12. package/dist/browser/actions/index.js +1 -0
  13. package/dist/browser/actions/index.js.map +1 -1
  14. package/dist/browser/actions/menu-rows.js +23 -3
  15. package/dist/browser/actions/menu-rows.js.map +1 -1
  16. package/dist/browser/actions/menu-sheet.js +2 -7
  17. package/dist/browser/actions/menu-sheet.js.map +1 -1
  18. package/dist/browser/charts.js +6 -0
  19. package/dist/browser/charts.js.map +1 -0
  20. package/dist/browser/chat/ChatComposer.js +616 -421
  21. package/dist/browser/chat/ChatComposer.js.map +1 -1
  22. package/dist/browser/chat/chat-messages.js +18 -0
  23. package/dist/browser/chat/chat-messages.js.map +1 -1
  24. package/dist/browser/chat/composer-document.js +19 -0
  25. package/dist/browser/chat/composer-document.js.map +1 -1
  26. package/dist/browser/chat/index.js.map +1 -1
  27. package/dist/browser/content/Calendar.js +39 -29
  28. package/dist/browser/content/Calendar.js.map +1 -1
  29. package/dist/browser/content/CalendarDayView.js +159 -165
  30. package/dist/browser/content/CalendarDayView.js.map +1 -1
  31. package/dist/browser/content/Chart.js +8 -0
  32. package/dist/browser/content/Chart.js.map +1 -1
  33. package/dist/browser/content/FileGrid.js +231 -9
  34. package/dist/browser/content/FileGrid.js.map +1 -1
  35. package/dist/browser/content/FileTypeIcon.js +15 -0
  36. package/dist/browser/content/FileTypeIcon.js.map +1 -1
  37. package/dist/browser/content/FileView.js +11 -4
  38. package/dist/browser/content/FileView.js.map +1 -1
  39. package/dist/browser/content/MessageRow.js +627 -343
  40. package/dist/browser/content/MessageRow.js.map +1 -1
  41. package/dist/browser/content/ReactionBar.js +20 -1
  42. package/dist/browser/content/ReactionBar.js.map +1 -1
  43. package/dist/browser/content/calendar-day-scroll.js +4 -3
  44. package/dist/browser/content/calendar-day-scroll.js.map +1 -1
  45. package/dist/browser/content/chart-bar.js +476 -0
  46. package/dist/browser/content/chart-bar.js.map +1 -0
  47. package/dist/browser/content/file-list-messages.js +52 -0
  48. package/dist/browser/content/file-list-messages.js.map +1 -0
  49. package/dist/browser/content/index.js +2 -2
  50. package/dist/browser/content/index.js.map +1 -1
  51. package/dist/browser/feedback/Tooltip.js +31 -14
  52. package/dist/browser/feedback/Tooltip.js.map +1 -1
  53. package/dist/browser/feedback/dialog-core.js +6 -0
  54. package/dist/browser/feedback/dialog-core.js.map +1 -1
  55. package/dist/browser/inputs/ChoiceList.js +178 -0
  56. package/dist/browser/inputs/ChoiceList.js.map +1 -0
  57. package/dist/browser/inputs/ChoiceSlider.js +314 -0
  58. package/dist/browser/inputs/ChoiceSlider.js.map +1 -0
  59. package/dist/browser/inputs/ChoiceTiles.js +135 -0
  60. package/dist/browser/inputs/ChoiceTiles.js.map +1 -0
  61. package/dist/browser/inputs/ColorChoices.js +120 -0
  62. package/dist/browser/inputs/ColorChoices.js.map +1 -0
  63. package/dist/browser/inputs/QrScanner.js +95 -13
  64. package/dist/browser/inputs/QrScanner.js.map +1 -1
  65. package/dist/browser/inputs/TextInput.js +19 -14
  66. package/dist/browser/inputs/TextInput.js.map +1 -1
  67. package/dist/browser/inputs/index.js +4 -0
  68. package/dist/browser/inputs/index.js.map +1 -1
  69. package/dist/browser/inputs/qr-messages.js +2 -0
  70. package/dist/browser/inputs/qr-messages.js.map +1 -1
  71. package/dist/browser/internal/radio-keys.js +13 -0
  72. package/dist/browser/internal/radio-keys.js.map +1 -0
  73. package/dist/browser/intl/shortcut-messages.js +4 -0
  74. package/dist/browser/intl/shortcut-messages.js.map +1 -1
  75. package/dist/browser/intl/shortcut.js +4 -0
  76. package/dist/browser/intl/shortcut.js.map +1 -1
  77. package/dist/browser/layout/AnchoredPopover.js +180 -0
  78. package/dist/browser/layout/AnchoredPopover.js.map +1 -0
  79. package/dist/browser/layout/AppWorkspace.js +684 -532
  80. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  81. package/dist/browser/layout/DetailPanel.js +443 -333
  82. package/dist/browser/layout/DetailPanel.js.map +1 -1
  83. package/dist/browser/layout/MobileShell.js +231 -42
  84. package/dist/browser/layout/MobileShell.js.map +1 -1
  85. package/dist/browser/layout/Settings.js +283 -175
  86. package/dist/browser/layout/Settings.js.map +1 -1
  87. package/dist/browser/layout/SidebarRailHint.js +79 -0
  88. package/dist/browser/layout/SidebarRailHint.js.map +1 -0
  89. package/dist/browser/layout/SidebarSwitcher.js +79 -66
  90. package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
  91. package/dist/browser/layout/TabBar.js +18 -4
  92. package/dist/browser/layout/TabBar.js.map +1 -1
  93. package/dist/browser/layout/app-workspace-controller.js +11 -4
  94. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  95. package/dist/browser/layout/detail-panel-messages.js +4 -2
  96. package/dist/browser/layout/detail-panel-messages.js.map +1 -1
  97. package/dist/browser/layout/index.js +3 -1
  98. package/dist/browser/layout/index.js.map +1 -1
  99. package/dist/browser/layout/scroll-fade.js +32 -5
  100. package/dist/browser/layout/scroll-fade.js.map +1 -1
  101. package/dist/browser/layout/settings-messages.js +26 -2
  102. package/dist/browser/layout/settings-messages.js.map +1 -1
  103. package/dist/browser/surfaces/Avatar.js +2 -14
  104. package/dist/browser/surfaces/Avatar.js.map +1 -1
  105. package/dist/browser/surfaces/DotStrip.js +70 -0
  106. package/dist/browser/surfaces/DotStrip.js.map +1 -0
  107. package/dist/browser/surfaces/NoticeCard.js +46 -30
  108. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  109. package/dist/browser/surfaces/ProgressRing.js +3 -0
  110. package/dist/browser/surfaces/ProgressRing.js.map +1 -1
  111. package/dist/browser/surfaces/ResourceCard.js +125 -68
  112. package/dist/browser/surfaces/ResourceCard.js.map +1 -1
  113. package/dist/browser/surfaces/index.js +2 -0
  114. package/dist/browser/surfaces/index.js.map +1 -1
  115. package/dist/browser/surfaces/person-color.js +18 -0
  116. package/dist/browser/surfaces/person-color.js.map +1 -0
  117. package/dist/browser/surfaces/resource-messages.js +8 -4
  118. package/dist/browser/surfaces/resource-messages.js.map +1 -1
  119. package/dist/browser/widgets/Widget.js +3 -2
  120. package/dist/browser/widgets/Widget.js.map +1 -1
  121. package/dist/ssr/actions/ContextMenu.js +9 -0
  122. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  123. package/dist/ssr/actions/Dropdown.js +65 -31
  124. package/dist/ssr/actions/Dropdown.js.map +1 -1
  125. package/dist/ssr/actions/FilterChip.js +67 -16
  126. package/dist/ssr/actions/FilterChip.js.map +1 -1
  127. package/dist/ssr/actions/SelectionToolbar.js +104 -0
  128. package/dist/ssr/actions/SelectionToolbar.js.map +1 -0
  129. package/dist/ssr/actions/filter-messages.js +26 -2
  130. package/dist/ssr/actions/filter-messages.js.map +1 -1
  131. package/dist/ssr/actions/index.js +1 -0
  132. package/dist/ssr/actions/index.js.map +1 -1
  133. package/dist/ssr/actions/menu-rows.js +23 -3
  134. package/dist/ssr/actions/menu-rows.js.map +1 -1
  135. package/dist/ssr/actions/menu-sheet.js +2 -7
  136. package/dist/ssr/actions/menu-sheet.js.map +1 -1
  137. package/dist/ssr/charts.js +6 -0
  138. package/dist/ssr/charts.js.map +1 -0
  139. package/dist/ssr/chat/ChatComposer.js +184 -76
  140. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  141. package/dist/ssr/chat/chat-messages.js +18 -0
  142. package/dist/ssr/chat/chat-messages.js.map +1 -1
  143. package/dist/ssr/chat/composer-document.js +19 -0
  144. package/dist/ssr/chat/composer-document.js.map +1 -1
  145. package/dist/ssr/chat/index.js.map +1 -1
  146. package/dist/ssr/content/Calendar.js +40 -31
  147. package/dist/ssr/content/Calendar.js.map +1 -1
  148. package/dist/ssr/content/CalendarDayView.js +40 -48
  149. package/dist/ssr/content/CalendarDayView.js.map +1 -1
  150. package/dist/ssr/content/Chart.js +8 -0
  151. package/dist/ssr/content/Chart.js.map +1 -1
  152. package/dist/ssr/content/FileGrid.js +132 -5
  153. package/dist/ssr/content/FileGrid.js.map +1 -1
  154. package/dist/ssr/content/FileTypeIcon.js +15 -0
  155. package/dist/ssr/content/FileTypeIcon.js.map +1 -1
  156. package/dist/ssr/content/FileView.js +11 -4
  157. package/dist/ssr/content/FileView.js.map +1 -1
  158. package/dist/ssr/content/MessageRow.js +274 -91
  159. package/dist/ssr/content/MessageRow.js.map +1 -1
  160. package/dist/ssr/content/ReactionBar.js +20 -1
  161. package/dist/ssr/content/ReactionBar.js.map +1 -1
  162. package/dist/ssr/content/calendar-day-scroll.js +4 -3
  163. package/dist/ssr/content/calendar-day-scroll.js.map +1 -1
  164. package/dist/ssr/content/chart-bar.js +476 -0
  165. package/dist/ssr/content/chart-bar.js.map +1 -0
  166. package/dist/ssr/content/file-list-messages.js +52 -0
  167. package/dist/ssr/content/file-list-messages.js.map +1 -0
  168. package/dist/ssr/content/index.js +2 -2
  169. package/dist/ssr/content/index.js.map +1 -1
  170. package/dist/ssr/feedback/Tooltip.js +31 -14
  171. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  172. package/dist/ssr/feedback/dialog-core.js +6 -0
  173. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  174. package/dist/ssr/inputs/ChoiceList.js +95 -0
  175. package/dist/ssr/inputs/ChoiceList.js.map +1 -0
  176. package/dist/ssr/inputs/ChoiceSlider.js +191 -0
  177. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -0
  178. package/dist/ssr/inputs/ChoiceTiles.js +61 -0
  179. package/dist/ssr/inputs/ChoiceTiles.js.map +1 -0
  180. package/dist/ssr/inputs/ColorChoices.js +60 -0
  181. package/dist/ssr/inputs/ColorChoices.js.map +1 -0
  182. package/dist/ssr/inputs/QrScanner.js +89 -10
  183. package/dist/ssr/inputs/QrScanner.js.map +1 -1
  184. package/dist/ssr/inputs/TextInput.js +17 -2
  185. package/dist/ssr/inputs/TextInput.js.map +1 -1
  186. package/dist/ssr/inputs/index.js +4 -0
  187. package/dist/ssr/inputs/index.js.map +1 -1
  188. package/dist/ssr/inputs/qr-messages.js +2 -0
  189. package/dist/ssr/inputs/qr-messages.js.map +1 -1
  190. package/dist/ssr/internal/radio-keys.js +13 -0
  191. package/dist/ssr/internal/radio-keys.js.map +1 -0
  192. package/dist/ssr/intl/shortcut-messages.js +4 -0
  193. package/dist/ssr/intl/shortcut-messages.js.map +1 -1
  194. package/dist/ssr/intl/shortcut.js +4 -0
  195. package/dist/ssr/intl/shortcut.js.map +1 -1
  196. package/dist/ssr/layout/AnchoredPopover.js +142 -0
  197. package/dist/ssr/layout/AnchoredPopover.js.map +1 -0
  198. package/dist/ssr/layout/AppWorkspace.js +287 -141
  199. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  200. package/dist/ssr/layout/DetailPanel.js +181 -108
  201. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  202. package/dist/ssr/layout/MobileShell.js +118 -24
  203. package/dist/ssr/layout/MobileShell.js.map +1 -1
  204. package/dist/ssr/layout/Settings.js +122 -45
  205. package/dist/ssr/layout/Settings.js.map +1 -1
  206. package/dist/ssr/layout/SidebarRailHint.js +79 -0
  207. package/dist/ssr/layout/SidebarRailHint.js.map +1 -0
  208. package/dist/ssr/layout/SidebarSwitcher.js +13 -3
  209. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
  210. package/dist/ssr/layout/TabBar.js +11 -3
  211. package/dist/ssr/layout/TabBar.js.map +1 -1
  212. package/dist/ssr/layout/app-workspace-controller.js +11 -4
  213. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  214. package/dist/ssr/layout/detail-panel-messages.js +4 -2
  215. package/dist/ssr/layout/detail-panel-messages.js.map +1 -1
  216. package/dist/ssr/layout/index.js +3 -1
  217. package/dist/ssr/layout/index.js.map +1 -1
  218. package/dist/ssr/layout/scroll-fade.js +32 -5
  219. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  220. package/dist/ssr/layout/settings-messages.js +26 -2
  221. package/dist/ssr/layout/settings-messages.js.map +1 -1
  222. package/dist/ssr/surfaces/Avatar.js +2 -14
  223. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  224. package/dist/ssr/surfaces/DotStrip.js +31 -0
  225. package/dist/ssr/surfaces/DotStrip.js.map +1 -0
  226. package/dist/ssr/surfaces/NoticeCard.js +21 -12
  227. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  228. package/dist/ssr/surfaces/ProgressRing.js +3 -0
  229. package/dist/ssr/surfaces/ProgressRing.js.map +1 -1
  230. package/dist/ssr/surfaces/ResourceCard.js +40 -15
  231. package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
  232. package/dist/ssr/surfaces/index.js +2 -0
  233. package/dist/ssr/surfaces/index.js.map +1 -1
  234. package/dist/ssr/surfaces/person-color.js +18 -0
  235. package/dist/ssr/surfaces/person-color.js.map +1 -0
  236. package/dist/ssr/surfaces/resource-messages.js +8 -4
  237. package/dist/ssr/surfaces/resource-messages.js.map +1 -1
  238. package/dist/ssr/widgets/Widget.js +3 -2
  239. package/dist/ssr/widgets/Widget.js.map +1 -1
  240. package/dist/styles.css +1 -1
  241. package/dist/types/actions/ContextMenu.d.ts +5 -0
  242. package/dist/types/actions/Dropdown.d.ts +19 -0
  243. package/dist/types/actions/FilterChip.d.ts +11 -0
  244. package/dist/types/actions/SelectionToolbar.d.ts +38 -0
  245. package/dist/types/actions/filter-messages.d.ts +12 -0
  246. package/dist/types/actions/index.d.ts +2 -0
  247. package/dist/types/actions/menu-rows.d.ts +7 -2
  248. package/dist/types/charts.d.ts +5 -0
  249. package/dist/types/chat/ChatComposer.d.ts +28 -0
  250. package/dist/types/chat/chat-messages.d.ts +9 -0
  251. package/dist/types/chat/composer-document.d.ts +5 -0
  252. package/dist/types/chat/index.d.ts +1 -1
  253. package/dist/types/content/Calendar.d.ts +7 -0
  254. package/dist/types/content/Chart.d.ts +2 -1
  255. package/dist/types/content/FileGrid.d.ts +43 -3
  256. package/dist/types/content/FileTypeIcon.d.ts +10 -0
  257. package/dist/types/content/FileView.d.ts +5 -1
  258. package/dist/types/content/MessageRow.d.ts +66 -2
  259. package/dist/types/content/calendar-day-scroll.d.ts +2 -1
  260. package/dist/types/content/chart-bar.d.ts +60 -0
  261. package/dist/types/content/file-list-messages.d.ts +24 -0
  262. package/dist/types/content/index.d.ts +4 -4
  263. package/dist/types/feedback/Tooltip.d.ts +8 -2
  264. package/dist/types/feedback/dialog-core.d.ts +3 -0
  265. package/dist/types/inputs/ChoiceList.d.ts +28 -0
  266. package/dist/types/inputs/ChoiceSlider.d.ts +36 -0
  267. package/dist/types/inputs/ChoiceTiles.d.ts +25 -0
  268. package/dist/types/inputs/ColorChoices.d.ts +19 -0
  269. package/dist/types/inputs/index.d.ts +8 -0
  270. package/dist/types/inputs/qr-messages.d.ts +1 -0
  271. package/dist/types/internal/radio-keys.d.ts +5 -0
  272. package/dist/types/intl/shortcut-messages.d.ts +2 -0
  273. package/dist/types/layout/AnchoredPopover.d.ts +31 -0
  274. package/dist/types/layout/AppWorkspace.d.ts +12 -0
  275. package/dist/types/layout/DetailPanel.d.ts +17 -0
  276. package/dist/types/layout/MobileShell.d.ts +55 -5
  277. package/dist/types/layout/Settings.d.ts +22 -0
  278. package/dist/types/layout/SidebarRailHint.d.ts +26 -0
  279. package/dist/types/layout/TabBar.d.ts +5 -0
  280. package/dist/types/layout/detail-panel-messages.d.ts +1 -0
  281. package/dist/types/layout/index.d.ts +5 -3
  282. package/dist/types/layout/scroll-fade.d.ts +5 -0
  283. package/dist/types/layout/settings-messages.d.ts +12 -0
  284. package/dist/types/surfaces/DotStrip.d.ts +22 -0
  285. package/dist/types/surfaces/NoticeCard.d.ts +3 -0
  286. package/dist/types/surfaces/ProgressRing.d.ts +2 -1
  287. package/dist/types/surfaces/ResourceCard.d.ts +9 -0
  288. package/dist/types/surfaces/index.d.ts +4 -1
  289. package/dist/types/surfaces/person-color.d.ts +10 -0
  290. package/dist/types/surfaces/resource-messages.d.ts +2 -0
  291. package/dist/types/widgets/Widget.d.ts +3 -2
  292. package/package.json +7 -2
@@ -17,75 +17,77 @@ 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 class=k2b-truncate-fade>`),
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><span class=k2b-truncate-fade></span></h2><!$><!/></div><!$><!/>`),
23
- _tmpl$5 = /*#__PURE__*/_$template(`<div>`),
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
- _tmpl$1 = /*#__PURE__*/_$template(`<i class="ti ti-layout-sidebar-right"aria-hidden=true>`),
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
- _tmpl$11 = /*#__PURE__*/_$template(`<aside>`),
32
- _tmpl$12 = /*#__PURE__*/_$template(`<nav class=k2b-app-workspace__sidebar-sheet>`),
33
- _tmpl$13 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-desktop>`),
34
- _tmpl$14 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-all aria-haspopup=dialog><span></span><i class="ti ti-chevron-down"aria-hidden=true>`),
35
- _tmpl$15 = /*#__PURE__*/_$template(`<script>`),
36
- _tmpl$16 = /*#__PURE__*/_$template(`<footer>`),
37
- _tmpl$17 = /*#__PURE__*/_$template(`<span aria-hidden=true><i>`),
38
- _tmpl$18 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-section-count>`),
39
- _tmpl$19 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-section-toggle><!$><!/><i aria-hidden=true>`),
40
- _tmpl$20 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-section-actions>`),
41
- _tmpl$21 = /*#__PURE__*/_$template(`<header class=k2b-app-workspace__sidebar-section-header><!$><!/><!$><!/>`),
42
- _tmpl$22 = /*#__PURE__*/_$template(`<section><!$><!/><div class=k2b-app-workspace__sidebar-section-content>`),
43
- _tmpl$23 = /*#__PURE__*/_$template(`<h2>`),
44
- _tmpl$24 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-item-actions>`),
45
- _tmpl$25 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-mention aria-hidden=true>@`),
46
- _tmpl$26 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-muted aria-hidden=true><i class="ti ti-bell-off">`),
47
- _tmpl$27 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-count>`),
48
- _tmpl$28 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-unread aria-hidden=true>`),
49
- _tmpl$29 = /*#__PURE__*/_$template(`<span class=k2b-sr-only>, <!$><!/>`),
50
- _tmpl$30 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status>`),
51
- _tmpl$31 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-dot>`),
52
- _tmpl$32 = /*#__PURE__*/_$template(`<button type=button>`),
53
- _tmpl$33 = /*#__PURE__*/_$template(`<a>`),
54
- _tmpl$34 = /*#__PURE__*/_$template(`<div><!$><!/><!$><!/>`),
55
- _tmpl$35 = /*#__PURE__*/_$template(`<span aria-hidden=true>`),
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 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
- _tmpl$40 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-meta>`),
61
- _tmpl$41 = /*#__PURE__*/_$template(`<i>`),
62
- _tmpl$42 = /*#__PURE__*/_$template(`<a class=k2b-app-workspace__sidebar-item-action>`),
63
- _tmpl$43 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-item-action>`),
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 k2b-truncate-fade-lines"></span></span><span class="k2b-app-workspace__sidebar-item-description k2b-truncate-fade">`),
66
- _tmpl$46 = /*#__PURE__*/_$template(`<span>`),
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 k2b-truncate-fade-lines">`),
69
- _tmpl$49 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-group role=group>`),
70
- _tmpl$50 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-node role=treeitem><!$><!/><!$><!/>`),
71
- _tmpl$51 = /*#__PURE__*/_$template(`<div role=tree>`),
72
- _tmpl$52 = /*#__PURE__*/_$template(`<section><!$><!/><div class=k2b-app-workspace__sidebar-icon-grid>`),
73
- _tmpl$53 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
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>`);
20
+ _tmpl$2 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__level-lead>`),
21
+ _tmpl$3 = /*#__PURE__*/_$template(`<p class=k2b-truncate-fade>`),
22
+ _tmpl$4 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__level-actions>`),
23
+ _tmpl$5 = /*#__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><!$><!/>`),
24
+ _tmpl$6 = /*#__PURE__*/_$template(`<div>`),
25
+ _tmpl$7 = /*#__PURE__*/_$template(`<style>`),
26
+ _tmpl$8 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__main-primary data-workspace-main-region=main>`),
27
+ _tmpl$9 = /*#__PURE__*/_$template(`<section>`),
28
+ _tmpl$0 = /*#__PURE__*/_$template(`<i class="ti ti-chevron-left"aria-hidden=true>`),
29
+ _tmpl$1 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__level-body>`),
30
+ _tmpl$10 = /*#__PURE__*/_$template(`<i class="ti ti-layout-sidebar-right"aria-hidden=true>`),
31
+ _tmpl$11 = /*#__PURE__*/_$template(`<aside><button type=button class=k2b-app-workspace__detail-grabber aria-pressed=false><span aria-hidden=true></span></button><!$><!/>`),
32
+ _tmpl$12 = /*#__PURE__*/_$template(`<aside>`),
33
+ _tmpl$13 = /*#__PURE__*/_$template(`<nav class=k2b-app-workspace__sidebar-sheet>`),
34
+ _tmpl$14 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-desktop>`),
35
+ _tmpl$15 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-all aria-haspopup=dialog><span></span><i class="ti ti-chevron-down"aria-hidden=true>`),
36
+ _tmpl$16 = /*#__PURE__*/_$template(`<script>`),
37
+ _tmpl$17 = /*#__PURE__*/_$template(`<footer>`),
38
+ _tmpl$18 = /*#__PURE__*/_$template(`<span aria-hidden=true><i>`),
39
+ _tmpl$19 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-section-count>`),
40
+ _tmpl$20 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-section-toggle><!$><!/><i aria-hidden=true>`),
41
+ _tmpl$21 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-section-actions>`),
42
+ _tmpl$22 = /*#__PURE__*/_$template(`<header class=k2b-app-workspace__sidebar-section-header><!$><!/><!$><!/>`),
43
+ _tmpl$23 = /*#__PURE__*/_$template(`<section><!$><!/><div class=k2b-app-workspace__sidebar-section-content>`),
44
+ _tmpl$24 = /*#__PURE__*/_$template(`<h2>`),
45
+ _tmpl$25 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-item-actions>`),
46
+ _tmpl$26 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-mention aria-hidden=true>@`),
47
+ _tmpl$27 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-muted aria-hidden=true><i class="ti ti-bell-off">`),
48
+ _tmpl$28 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-count>`),
49
+ _tmpl$29 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-unread aria-hidden=true>`),
50
+ _tmpl$30 = /*#__PURE__*/_$template(`<span class=k2b-sr-only>, <!$><!/>`),
51
+ _tmpl$31 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status>`),
52
+ _tmpl$32 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-dot>`),
53
+ _tmpl$33 = /*#__PURE__*/_$template(`<button type=button>`),
54
+ _tmpl$34 = /*#__PURE__*/_$template(`<a>`),
55
+ _tmpl$35 = /*#__PURE__*/_$template(`<div><!$><!/><!$><!/>`),
56
+ _tmpl$36 = /*#__PURE__*/_$template(`<span aria-hidden=true>`),
57
+ _tmpl$37 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-context-meta>`),
58
+ _tmpl$38 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-context><span class="k2b-app-workspace__sidebar-item-context-label k2b-truncate-fade"></span><!$><!/>`),
59
+ _tmpl$39 = /*#__PURE__*/_$template(`<span class="k2b-app-workspace__sidebar-item-description k2b-truncate-fade">`),
60
+ _tmpl$40 = /*#__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><!$><!/>`),
61
+ _tmpl$41 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-meta>`),
62
+ _tmpl$42 = /*#__PURE__*/_$template(`<i>`),
63
+ _tmpl$43 = /*#__PURE__*/_$template(`<a class=k2b-app-workspace__sidebar-item-action>`),
64
+ _tmpl$44 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-item-action>`),
65
+ _tmpl$45 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-icon><i>`),
66
+ _tmpl$46 = /*#__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">`),
67
+ _tmpl$47 = /*#__PURE__*/_$template(`<span>`),
68
+ _tmpl$48 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__nav-tree-toggle data-k2b-nav-tree-toggle aria-hidden=true><i>`),
69
+ _tmpl$49 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-label><span class="k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines">`),
70
+ _tmpl$50 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-group role=group>`),
71
+ _tmpl$51 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-node role=treeitem><!$><!/><!$><!/>`),
72
+ _tmpl$52 = /*#__PURE__*/_$template(`<div role=tree>`),
73
+ _tmpl$53 = /*#__PURE__*/_$template(`<section><!$><!/><div class=k2b-app-workspace__sidebar-icon-grid>`),
74
+ _tmpl$54 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
75
+ _tmpl$55 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__head-primary-label>`),
76
+ _tmpl$56 = /*#__PURE__*/_$template(`<i class="ti ti-layout-sidebar"aria-hidden=true>`),
77
+ _tmpl$57 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head-views>`),
78
+ _tmpl$58 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head-filters role=group><!$><!/><!$><!/>`),
79
+ _tmpl$59 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__head-count><span>`),
80
+ _tmpl$60 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head-actions><!$><!/><!$><!/>`),
81
+ _tmpl$61 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__head><!$><!/><div class=k2b-app-workspace__head-lead><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/></div><!$><!/>`),
82
+ _tmpl$62 = /*#__PURE__*/_$template(`<h1 class=k2b-app-workspace__head-heading data-k2b-page-trail-title>`),
83
+ _tmpl$63 = /*#__PURE__*/_$template(`<div data-k2b-app-workspace>`);
83
84
  import { Link } from "@k2b/ssr/nav";
84
85
  import { children, createContext, createEffect, createMemo, createRoot, createSignal, createUniqueId, For, getOwner, mergeProps, on, onCleanup, onMount, Show, useContext } from "solid-js";
85
86
  import { Dynamic, isServer } from "solid-js/web";
86
87
  import { Button, ButtonLink, IconButton, IconButtonLink } from "../actions/Button";
87
88
  import { useFilterMessages } from "../actions/filter-messages";
88
89
  import { dialogCore } from "../feedback/dialog-core";
90
+ import { Tooltip } from "../feedback/Tooltip";
89
91
  import { RenderErrorBoundary } from "../internal/render-error";
90
92
  import { APP_WORKSPACE_DETAIL_CLOSE_EVENT, APP_WORKSPACE_DETAIL_OPEN_EVENT, APP_WORKSPACE_DETAIL_STEP_EVENT, APP_WORKSPACE_SIDEBAR_HIDE_EVENT, installAppWorkspaceController } from "./app-workspace-controller";
91
93
  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";
@@ -93,11 +95,23 @@ import { appWorkspaceInverseWidthCss, appWorkspaceWidthCss, appWorkspaceWidthTok
93
95
  import BottomSheet, { bottomSheetAdaptiveOptions } from "./BottomSheet";
94
96
  import { PageTitle, usePageTrail } from "./PageTitle";
95
97
  import { SidebarItemPreview } from "./SidebarItemPreview";
98
+ import { inSidebarRail, SidebarRailHint } from "./SidebarRailHint";
96
99
  import { AppWorkspaceSidebarSwitcher } from "./SidebarSwitcher";
97
100
  import { createScrollFade, scrollFadeEdges } from "./scroll-fade";
98
101
  import { rememberSidebarScroll } from "./sidebar-scroll-memory";
99
102
  import { assertStableUiId, assertUniqueStableUiIds } from "./stable-id";
100
103
  import { useWorkspaceMessages } from "./workspace-messages";
104
+ /** The narrowest container of each levels width class, as the stylesheet's breakpoints define them (48rem, 80rem). */
105
+ const LEVEL_CLASS_WIDTH = {
106
+ 1: 0,
107
+ 2: 768,
108
+ 3: 1280
109
+ };
110
+ /** The last shown level's minimum width when the level does not declare one; the stylesheet uses the same value. */
111
+ const LEVEL_LAST_MIN = 320;
112
+ /** The width the last shown level keeps at least: its declared minimum, never below the default. */
113
+ const levelLastMin = minSize => Math.max(minSize ?? 0, LEVEL_LAST_MIN);
114
+ const nonEmptyStyle = style => Object.keys(style).length ? style : undefined;
101
115
  const ResizeContext = createContext(true);
102
116
  /** The enclosing workspace: its head names the sidebar, and a nested workspace leaves the page title to it. */
103
117
  const WorkspaceContext = createContext();
@@ -234,39 +248,52 @@ function LevelHead(props) {
234
248
  // server and the client would then disagree on hydration keys.
235
249
  const description = children(() => props.description);
236
250
  const actions = children(() => props.actions);
251
+ const lead = children(() => props.lead);
237
252
  return (() => {
238
- var _el$2 = _$getNextElement(_tmpl$4),
239
- _el$0 = _el$2.firstChild,
240
- [_el$1, _co$2] = _$getNextMarker(_el$0.nextSibling),
241
- _el$3 = _el$1.nextSibling,
253
+ var _el$2 = _$getNextElement(_tmpl$5),
254
+ _el$11 = _el$2.firstChild,
255
+ [_el$12, _co$3] = _$getNextMarker(_el$11.nextSibling),
256
+ _el$3 = _el$12.nextSibling,
242
257
  _el$4 = _el$3.firstChild,
243
- _el$5 = _el$4.firstChild,
244
- _el$7 = _el$4.nextSibling,
258
+ _el$7 = _el$4.firstChild,
245
259
  [_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);
260
+ _el$6 = _el$8.nextSibling,
261
+ _el$0 = _el$4.nextSibling,
262
+ [_el$1, _co$2] = _$getNextMarker(_el$0.nextSibling),
263
+ _el$13 = _el$3.nextSibling,
264
+ [_el$14, _co$4] = _$getNextMarker(_el$13.nextSibling);
265
+ _$insert(_el$2, () => props.children, _el$12, _co$3);
266
+ _$insert(_el$4, _$createComponent(Show, {
267
+ get when() {
268
+ return lead();
269
+ },
270
+ get children() {
271
+ var _el$5 = _$getNextElement(_tmpl$2);
272
+ _$insert(_el$5, lead);
273
+ return _el$5;
274
+ }
275
+ }), _el$8, _co$);
276
+ _$insert(_el$6, () => props.label);
250
277
  _$insert(_el$3, _$createComponent(Show, {
251
278
  get when() {
252
279
  return description();
253
280
  },
254
281
  get children() {
255
- var _el$6 = _$getNextElement(_tmpl$2);
256
- _$insert(_el$6, description);
257
- return _el$6;
282
+ var _el$9 = _$getNextElement(_tmpl$3);
283
+ _$insert(_el$9, description);
284
+ return _el$9;
258
285
  }
259
- }), _el$8, _co$);
286
+ }), _el$1, _co$2);
260
287
  _$insert(_el$2, _$createComponent(Show, {
261
288
  get when() {
262
289
  return actions();
263
290
  },
264
291
  get children() {
265
- var _el$9 = _$getNextElement(_tmpl$3);
266
- _$insert(_el$9, actions);
267
- return _el$9;
292
+ var _el$10 = _$getNextElement(_tmpl$4);
293
+ _$insert(_el$10, actions);
294
+ return _el$10;
268
295
  }
269
- }), _el$11, _co$3);
296
+ }), _el$14, _co$4);
270
297
  return _el$2;
271
298
  })();
272
299
  }
@@ -321,8 +348,20 @@ function AppWorkspaceMain(props) {
321
348
  return open;
322
349
  });
323
350
  const depth = () => Math.max(1, levels().findIndex(pane => pane.props.id === props.level) + 1);
351
+ /** How many of the deepest levels a width class shows: up to its count, as long as their minimum widths fit. */
352
+ const levelCount = widthClass => {
353
+ const all = levels();
354
+ let count = Math.min(widthClass, all.length);
355
+ while (count > 1) {
356
+ const end = Math.max(depth(), count);
357
+ const needed = all.slice(end - count, end).reduce((sum, pane, offset) => sum + (end - count + offset + 1 === end ? levelLastMin(pane.props.minSize) : pane.props.minSize ?? APP_WORKSPACE_PANE_MIN), 0);
358
+ if (needed <= LEVEL_CLASS_WIDTH[widthClass]) break;
359
+ count--;
360
+ }
361
+ return count;
362
+ };
324
363
  const levelClasses = (index, kind) => [1, 2, 3].filter(widthClass => {
325
- const count = Math.min(widthClass, levels().length);
364
+ const count = levelCount(widthClass);
326
365
  const end = Math.max(depth(), count);
327
366
  const start = end - count + 1;
328
367
  return kind === "first" ? index === start && index > 1 : kind === "last" ? index === end : kind === "handle" ? index >= start && index + 1 <= end : index >= start && index <= end;
@@ -374,15 +413,15 @@ function AppWorkspaceMain(props) {
374
413
  return minWidth();
375
414
  },
376
415
  children: value => (() => {
377
- var _el$13 = _$getNextElement(_tmpl$6);
378
- _$effect(() => _$setProperty(_el$13, "innerHTML", minWidthRule(value())));
379
- return _el$13;
416
+ var _el$16 = _$getNextElement(_tmpl$7);
417
+ _$effect(() => _$setProperty(_el$16, "innerHTML", minWidthRule(value())));
418
+ return _el$16;
380
419
  })()
381
420
  }), (() => {
382
- var _el$12 = _$getNextElement(_tmpl$5);
421
+ var _el$15 = _$getNextElement(_tmpl$6);
383
422
  var _ref$ = mainElement;
384
- typeof _ref$ === "function" ? _$use(_ref$, _el$12) : mainElement = _el$12;
385
- _$spread(_el$12, _$mergeProps({
423
+ typeof _ref$ === "function" ? _$use(_ref$, _el$15) : mainElement = _el$15;
424
+ _$spread(_el$15, _$mergeProps({
386
425
  get ["class"]() {
387
426
  return `k2b-app-workspace__main ${hasPanes() ? "has-panes" : ""} ${props.class ?? ""}`;
388
427
  },
@@ -411,7 +450,7 @@ function AppWorkspaceMain(props) {
411
450
  return props["aria-busy"];
412
451
  }
413
452
  }, () => scrollAttrs(props.scrollPreserveKey)), false, true);
414
- _$insert(_el$12, _$createComponent(Show, {
453
+ _$insert(_el$15, _$createComponent(Show, {
415
454
  get when() {
416
455
  return hasPanes();
417
456
  },
@@ -430,10 +469,10 @@ function AppWorkspaceMain(props) {
430
469
  };
431
470
  if (region.type === "primary") {
432
471
  return (() => {
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;
472
+ var _el$17 = _$getNextElement(_tmpl$8);
473
+ _$insert(_el$17, () => region.children);
474
+ _$effect(() => _$setAttribute(_el$17, "data-workspace-mobile-active", activeMobilePane() === "main" ? "true" : "false"));
475
+ return _el$17;
437
476
  })();
438
477
  }
439
478
  const pane = region.slot;
@@ -491,9 +530,9 @@ function AppWorkspaceMain(props) {
491
530
  return handle();
492
531
  }
493
532
  }), (() => {
494
- var _el$15 = _$getNextElement(_tmpl$8);
495
- _$setAttribute(_el$15, "data-workspace-panel-id", panelId);
496
- _$insert(_el$15, (() => {
533
+ var _el$18 = _$getNextElement(_tmpl$9);
534
+ _$setAttribute(_el$18, "data-workspace-panel-id", panelId);
535
+ _$insert(_el$18, (() => {
497
536
  var _c$ = _$memo(() => !!levelsMode());
498
537
  return () => _c$() ? [_$createComponent(LevelHead, {
499
538
  get label() {
@@ -505,6 +544,9 @@ function AppWorkspaceMain(props) {
505
544
  get actions() {
506
545
  return pane.props.actions;
507
546
  },
547
+ get lead() {
548
+ return pane.props.lead;
549
+ },
508
550
  get children() {
509
551
  return _$createComponent(Show, {
510
552
  get when() {
@@ -528,26 +570,26 @@ function AppWorkspaceMain(props) {
528
570
  return props.onLevelNavigate ? navigateBack : undefined;
529
571
  },
530
572
  get children() {
531
- return _$getNextElement(_tmpl$9);
573
+ return _$getNextElement(_tmpl$0);
532
574
  }
533
575
  });
534
576
  }
535
577
  });
536
578
  }
537
579
  }), (() => {
538
- var _el$17 = _$getNextElement(_tmpl$0);
539
- _$insert(_el$17, () => pane.props.children);
580
+ var _el$20 = _$getNextElement(_tmpl$1);
581
+ _$insert(_el$20, () => pane.props.children);
540
582
  _$effect(_p$ => {
541
583
  var _v$28 = pane.props.scroll === false ? "false" : undefined,
542
584
  _v$29 = pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : undefined;
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);
585
+ _v$28 !== _p$.e && _$setAttribute(_el$20, "data-scroll", _p$.e = _v$28);
586
+ _v$29 !== _p$.t && _$setAttribute(_el$20, "data-scroll-fade-mode", _p$.t = _v$29);
545
587
  return _p$;
546
588
  }, {
547
589
  e: undefined,
548
590
  t: undefined
549
591
  });
550
- return _el$17;
592
+ return _el$20;
551
593
  })()] : pane.props.children;
552
594
  })());
553
595
  _$effect(_p$ => {
@@ -564,25 +606,32 @@ function AppWorkspaceMain(props) {
564
606
  _v$24 = pane.props.surface === "navigation" ? "navigation" : undefined,
565
607
  _v$25 = !levelsMode() && pane.props.scroll === false ? "false" : undefined,
566
608
  _v$26 = !levelsMode() && pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : undefined,
567
- _v$27 = isAnchor() ? undefined : {
568
- // A stored width keeps to this pane's limits before the controller attaches.
569
- "--k2b-workspace-panel-size": `clamp(${minSize()}px, var(${variable}, ${appWorkspaceWidthCss(defaultSize(), "var(--k2b-workspace-width)")}), ${maxSize()}px)`,
570
- "--k2b-workspace-panel-min": `${minSize()}px`
571
- };
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);
609
+ _v$27 = nonEmptyStyle({
610
+ ...(isAnchor() ? {} : {
611
+ // A stored width keeps to this pane's limits before the controller attaches.
612
+ "--k2b-workspace-panel-size": `clamp(${minSize()}px, var(${variable}, ${appWorkspaceWidthCss(defaultSize(), "var(--k2b-workspace-width)")}), ${maxSize()}px)`,
613
+ "--k2b-workspace-panel-min": `${minSize()}px`
614
+ }),
615
+ // The last shown level fills the rest, but never below its minimum; set on every level, so a workspace
616
+ // nested in a wide level does not inherit that minimum.
617
+ ...(levelsMode() ? {
618
+ "--k2b-workspace-level-min": `${levelLastMin(pane.props.minSize)}px`
619
+ } : {})
620
+ });
621
+ _v$14 !== _p$.e && _$setAttribute(_el$18, "id", _p$.e = _v$14);
622
+ _v$15 !== _p$.t && _$className(_el$18, _p$.t = _v$15);
623
+ _v$16 !== _p$.a && _$setAttribute(_el$18, "aria-label", _p$.a = _v$16);
624
+ _v$17 !== _p$.o && _$setAttribute(_el$18, "data-workspace-level", _p$.o = _v$17);
625
+ _v$18 !== _p$.i && _$setAttribute(_el$18, "data-workspace-level-shown", _p$.i = _v$18);
626
+ _v$19 !== _p$.n && _$setAttribute(_el$18, "data-workspace-level-first", _p$.n = _v$19);
627
+ _v$20 !== _p$.s && _$setAttribute(_el$18, "data-workspace-level-last", _p$.s = _v$20);
628
+ _v$21 !== _p$.h && _$setAttribute(_el$18, "data-workspace-main-region", _p$.h = _v$21);
629
+ _v$22 !== _p$.r && _$setAttribute(_el$18, "data-workspace-mobile-active", _p$.r = _v$22);
630
+ _v$23 !== _p$.d && _$setAttribute(_el$18, "data-workspace-resizable", _p$.d = _v$23);
631
+ _v$24 !== _p$.l && _$setAttribute(_el$18, "data-surface", _p$.l = _v$24);
632
+ _v$25 !== _p$.u && _$setAttribute(_el$18, "data-scroll", _p$.u = _v$25);
633
+ _v$26 !== _p$.c && _$setAttribute(_el$18, "data-scroll-fade-mode", _p$.c = _v$26);
634
+ _p$.w = _$style(_el$18, _v$27, _p$.w);
586
635
  return _p$;
587
636
  }, {
588
637
  e: undefined,
@@ -600,7 +649,7 @@ function AppWorkspaceMain(props) {
600
649
  c: undefined,
601
650
  w: undefined
602
651
  });
603
- return _el$15;
652
+ return _el$18;
604
653
  })(), _$createComponent(Show, {
605
654
  get when() {
606
655
  return _$memo(() => !!resizable())() && before();
@@ -616,7 +665,7 @@ function AppWorkspaceMain(props) {
616
665
  }
617
666
  }));
618
667
  _$runHydrationEvents();
619
- return _el$12;
668
+ return _el$15;
620
669
  })()];
621
670
  }
622
671
 
@@ -676,9 +725,9 @@ function AppWorkspaceDetail(props) {
676
725
  });
677
726
  });
678
727
  return [(() => {
679
- var _el$18 = _$getNextElement(_tmpl$6);
680
- _$effect(() => _$setProperty(_el$18, "innerHTML", workspaceRule()));
681
- return _el$18;
728
+ var _el$21 = _$getNextElement(_tmpl$7);
729
+ _$effect(() => _$setProperty(_el$21, "innerHTML", workspaceRule()));
730
+ return _el$21;
682
731
  })(), _$createComponent(Button, {
683
732
  type: "button",
684
733
  variant: "ghost",
@@ -695,7 +744,7 @@ function AppWorkspaceDetail(props) {
695
744
  },
696
745
  "class": "k2b-app-workspace__detail-toggle",
697
746
  get children() {
698
- return [_$getNextElement(_tmpl$1), _$memo(() => workspaceMessages().details)];
747
+ return [_$getNextElement(_tmpl$10), _$memo(() => workspaceMessages().details)];
699
748
  }
700
749
  }), _$createComponent(Show, {
701
750
  get when() {
@@ -727,13 +776,13 @@ function AppWorkspaceDetail(props) {
727
776
  });
728
777
  }
729
778
  }), (() => {
730
- var _el$20 = _$getNextElement(_tmpl$10),
731
- _el$21 = _el$20.firstChild,
732
- _el$22 = _el$21.nextSibling,
733
- [_el$23, _co$4] = _$getNextMarker(_el$22.nextSibling);
779
+ var _el$23 = _$getNextElement(_tmpl$11),
780
+ _el$24 = _el$23.firstChild,
781
+ _el$25 = _el$24.nextSibling,
782
+ [_el$26, _co$5] = _$getNextMarker(_el$25.nextSibling);
734
783
  var _ref$2 = aside;
735
- typeof _ref$2 === "function" ? _$use(_ref$2, _el$20) : aside = _el$20;
736
- _$insert(_el$20, () => props.children, _el$23, _co$4);
784
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$23) : aside = _el$23;
785
+ _$insert(_el$23, () => props.children, _el$26, _co$5);
737
786
  _$effect(_p$ => {
738
787
  var _v$30 = domId(),
739
788
  _v$31 = `k2b-app-workspace__detail ${props.class ?? ""}`,
@@ -751,19 +800,19 @@ function AppWorkspaceDetail(props) {
751
800
  "view-transition-name": props.viewTransitionName
752
801
  },
753
802
  _v$42 = workspaceMessages().detailFullHeight;
754
- _v$30 !== _p$.e && _$setAttribute(_el$20, "id", _p$.e = _v$30);
755
- _v$31 !== _p$.t && _$className(_el$20, _p$.t = _v$31);
756
- _v$32 !== _p$.a && _$setAttribute(_el$20, "data-width", _p$.a = _v$32);
757
- _v$33 !== _p$.o && _$setAttribute(_el$20, "data-workspace-detail-phone", _p$.o = _v$33);
758
- _v$34 !== _p$.i && _$setAttribute(_el$20, "data-workspace-detail-choice", _p$.i = _v$34);
759
- _v$35 !== _p$.n && _$setAttribute(_el$20, "data-workspace-panel-id", _p$.n = _v$35);
760
- _v$36 !== _p$.s && _$setAttribute(_el$20, "data-workspace-resizable", _p$.s = _v$36);
761
- _v$37 !== _p$.h && _$setAttribute(_el$20, "data-workspace-detail-reopen", _p$.h = _v$37);
762
- _v$38 !== _p$.r && _$setAttribute(_el$20, "data-workspace-detail-closable", _p$.r = _v$38);
763
- _v$39 !== _p$.d && _$setAttribute(_el$20, "data-workspace-detail-steppable", _p$.d = _v$39);
764
- _v$40 !== _p$.l && _$setProperty(_el$20, "hidden", _p$.l = _v$40);
765
- _p$.u = _$style(_el$20, _v$41, _p$.u);
766
- _v$42 !== _p$.c && _$setAttribute(_el$21, "aria-label", _p$.c = _v$42);
803
+ _v$30 !== _p$.e && _$setAttribute(_el$23, "id", _p$.e = _v$30);
804
+ _v$31 !== _p$.t && _$className(_el$23, _p$.t = _v$31);
805
+ _v$32 !== _p$.a && _$setAttribute(_el$23, "data-width", _p$.a = _v$32);
806
+ _v$33 !== _p$.o && _$setAttribute(_el$23, "data-workspace-detail-phone", _p$.o = _v$33);
807
+ _v$34 !== _p$.i && _$setAttribute(_el$23, "data-workspace-detail-choice", _p$.i = _v$34);
808
+ _v$35 !== _p$.n && _$setAttribute(_el$23, "data-workspace-panel-id", _p$.n = _v$35);
809
+ _v$36 !== _p$.s && _$setAttribute(_el$23, "data-workspace-resizable", _p$.s = _v$36);
810
+ _v$37 !== _p$.h && _$setAttribute(_el$23, "data-workspace-detail-reopen", _p$.h = _v$37);
811
+ _v$38 !== _p$.r && _$setAttribute(_el$23, "data-workspace-detail-closable", _p$.r = _v$38);
812
+ _v$39 !== _p$.d && _$setAttribute(_el$23, "data-workspace-detail-steppable", _p$.d = _v$39);
813
+ _v$40 !== _p$.l && _$setProperty(_el$23, "hidden", _p$.l = _v$40);
814
+ _p$.u = _$style(_el$23, _v$41, _p$.u);
815
+ _v$42 !== _p$.c && _$setAttribute(_el$24, "aria-label", _p$.c = _v$42);
767
816
  return _p$;
768
817
  }, {
769
818
  e: undefined,
@@ -780,7 +829,7 @@ function AppWorkspaceDetail(props) {
780
829
  u: undefined,
781
830
  c: undefined
782
831
  });
783
- return _el$20;
832
+ return _el$23;
784
833
  })()];
785
834
  }
786
835
  function AppWorkspaceBottomDrawer(props) {
@@ -830,8 +879,8 @@ function AppWorkspaceBottomDrawer(props) {
830
879
  });
831
880
  }
832
881
  }), (() => {
833
- var _el$24 = _$getNextElement(_tmpl$11);
834
- _$insert(_el$24, () => props.children);
882
+ var _el$27 = _$getNextElement(_tmpl$12);
883
+ _$insert(_el$27, () => props.children);
835
884
  _$effect(_p$ => {
836
885
  var _v$43 = domId(),
837
886
  _v$44 = `k2b-app-workspace__drawer ${props.class ?? ""}`,
@@ -841,14 +890,14 @@ function AppWorkspaceBottomDrawer(props) {
841
890
  _v$48 = !props.open,
842
891
  _v$49 = `var(${variable()}, ${defaultHeight()}px)`,
843
892
  _v$50 = props.viewTransitionName;
844
- _v$43 !== _p$.e && _$setAttribute(_el$24, "id", _p$.e = _v$43);
845
- _v$44 !== _p$.t && _$className(_el$24, _p$.t = _v$44);
846
- _v$45 !== _p$.a && _$setAttribute(_el$24, "data-height", _p$.a = _v$45);
847
- _v$46 !== _p$.o && _$setAttribute(_el$24, "data-workspace-panel-id", _p$.o = _v$46);
848
- _v$47 !== _p$.i && _$setAttribute(_el$24, "data-workspace-resizable", _p$.i = _v$47);
849
- _v$48 !== _p$.n && _$setProperty(_el$24, "hidden", _p$.n = _v$48);
850
- _v$49 !== _p$.s && _$setStyleProperty(_el$24, "--k2b-workspace-panel-size", _p$.s = _v$49);
851
- _v$50 !== _p$.h && _$setStyleProperty(_el$24, "view-transition-name", _p$.h = _v$50);
893
+ _v$43 !== _p$.e && _$setAttribute(_el$27, "id", _p$.e = _v$43);
894
+ _v$44 !== _p$.t && _$className(_el$27, _p$.t = _v$44);
895
+ _v$45 !== _p$.a && _$setAttribute(_el$27, "data-height", _p$.a = _v$45);
896
+ _v$46 !== _p$.o && _$setAttribute(_el$27, "data-workspace-panel-id", _p$.o = _v$46);
897
+ _v$47 !== _p$.i && _$setAttribute(_el$27, "data-workspace-resizable", _p$.i = _v$47);
898
+ _v$48 !== _p$.n && _$setProperty(_el$27, "hidden", _p$.n = _v$48);
899
+ _v$49 !== _p$.s && _$setStyleProperty(_el$27, "--k2b-workspace-panel-size", _p$.s = _v$49);
900
+ _v$50 !== _p$.h && _$setStyleProperty(_el$27, "view-transition-name", _p$.h = _v$50);
852
901
  return _p$;
853
902
  }, {
854
903
  e: undefined,
@@ -860,7 +909,7 @@ function AppWorkspaceBottomDrawer(props) {
860
909
  s: undefined,
861
910
  h: undefined
862
911
  });
863
- return _el$24;
912
+ return _el$27;
864
913
  })()];
865
914
  }
866
915
  function AppWorkspaceSidebar(props) {
@@ -947,20 +996,20 @@ function AppWorkspaceSidebar(props) {
947
996
  return null;
948
997
  }
949
998
  return (() => {
950
- var _el$25 = _$getNextElement(_tmpl$12);
951
- _$addEventListener(_el$25, "click", event => choose(event, () => close()));
952
- _$insert(_el$25, resolved);
999
+ var _el$28 = _$getNextElement(_tmpl$13);
1000
+ _$addEventListener(_el$28, "click", event => choose(event, () => close()));
1001
+ _$insert(_el$28, resolved);
953
1002
  _$effect(_p$ => {
954
1003
  var _v$51 = props.label,
955
1004
  _v$52 = accent;
956
- _v$51 !== _p$.e && _$setAttribute(_el$25, "aria-label", _p$.e = _v$51);
957
- _p$.t = _$style(_el$25, _v$52, _p$.t);
1005
+ _v$51 !== _p$.e && _$setAttribute(_el$28, "aria-label", _p$.e = _v$51);
1006
+ _p$.t = _$style(_el$28, _v$52, _p$.t);
958
1007
  return _p$;
959
1008
  }, {
960
1009
  e: undefined,
961
1010
  t: undefined
962
1011
  });
963
- return _el$25;
1012
+ return _el$28;
964
1013
  })();
965
1014
  }
966
1015
  });
@@ -1033,49 +1082,49 @@ function AppWorkspaceSidebar(props) {
1033
1082
  },
1034
1083
  get children() {
1035
1084
  return [(() => {
1036
- var _el$26 = _$getNextElement(_tmpl$13);
1085
+ var _el$29 = _$getNextElement(_tmpl$14);
1037
1086
  var _ref$4 = row;
1038
- typeof _ref$4 === "function" ? _$use(_ref$4, _el$26) : row = _el$26;
1039
- _$insert(_el$26, () => desktop()?.children);
1087
+ typeof _ref$4 === "function" ? _$use(_ref$4, _el$29) : row = _el$29;
1088
+ _$insert(_el$29, () => desktop()?.children);
1040
1089
  _$effect(_p$ => {
1041
1090
  var _v$53 = stacked() ? "both" : undefined,
1042
1091
  _v$54 = stacked() ? "horizontal" : undefined;
1043
- _v$53 !== _p$.e && _$setAttribute(_el$26, "data-scroll-fade-mode", _p$.e = _v$53);
1044
- _v$54 !== _p$.t && _$setAttribute(_el$26, "data-scroll-fade-axis", _p$.t = _v$54);
1092
+ _v$53 !== _p$.e && _$setAttribute(_el$29, "data-scroll-fade-mode", _p$.e = _v$53);
1093
+ _v$54 !== _p$.t && _$setAttribute(_el$29, "data-scroll-fade-axis", _p$.t = _v$54);
1045
1094
  return _p$;
1046
1095
  }, {
1047
1096
  e: undefined,
1048
1097
  t: undefined
1049
1098
  });
1050
- return _el$26;
1099
+ return _el$29;
1051
1100
  })(), _$createComponent(Show, {
1052
1101
  get when() {
1053
1102
  return stacked();
1054
1103
  },
1055
1104
  get children() {
1056
1105
  return [(() => {
1057
- var _el$27 = _$getNextElement(_tmpl$14),
1058
- _el$28 = _el$27.firstChild;
1059
- _el$27.$$click = event => openAll(event.currentTarget);
1060
- _$insert(_el$28, () => workspaceMessages().sidebarAll);
1106
+ var _el$30 = _$getNextElement(_tmpl$15),
1107
+ _el$31 = _el$30.firstChild;
1108
+ _el$30.$$click = event => openAll(event.currentTarget);
1109
+ _$insert(_el$31, () => workspaceMessages().sidebarAll);
1061
1110
  _$effect(_p$ => {
1062
1111
  var _v$55 = sheetOpen(),
1063
1112
  _v$56 = props.label ? workspaceMessages().sidebarAllLabel({
1064
1113
  label: props.label
1065
1114
  }) : undefined;
1066
- _v$55 !== _p$.e && _$setAttribute(_el$27, "aria-expanded", _p$.e = _v$55);
1067
- _v$56 !== _p$.t && _$setAttribute(_el$27, "aria-label", _p$.t = _v$56);
1115
+ _v$55 !== _p$.e && _$setAttribute(_el$30, "aria-expanded", _p$.e = _v$55);
1116
+ _v$56 !== _p$.t && _$setAttribute(_el$30, "aria-label", _p$.t = _v$56);
1068
1117
  return _p$;
1069
1118
  }, {
1070
1119
  e: undefined,
1071
1120
  t: undefined
1072
1121
  });
1073
1122
  _$runHydrationEvents();
1074
- return _el$27;
1123
+ return _el$30;
1075
1124
  })(), (() => {
1076
- var _el$29 = _$getNextElement(_tmpl$15);
1077
- _$setProperty(_el$29, "innerHTML", CHIP_ROW_SCRIPT);
1078
- return _el$29;
1125
+ var _el$32 = _$getNextElement(_tmpl$16);
1126
+ _$setProperty(_el$32, "innerHTML", CHIP_ROW_SCRIPT);
1127
+ return _el$32;
1079
1128
  })()];
1080
1129
  }
1081
1130
  })];
@@ -1150,10 +1199,10 @@ const AppWorkspaceSidebarBody = props => {
1150
1199
  onMount(() => onCleanup(rememberSidebarScroll(body, scrollFadeEdges)));
1151
1200
  createScrollFade(() => body, () => props.scrollFade !== false);
1152
1201
  return [(() => {
1153
- var _el$30 = _$getNextElement(_tmpl$5);
1202
+ var _el$33 = _$getNextElement(_tmpl$6);
1154
1203
  var _ref$5 = body;
1155
- typeof _ref$5 === "function" ? _$use(_ref$5, _el$30) : body = _el$30;
1156
- _$spread(_el$30, _$mergeProps({
1204
+ typeof _ref$5 === "function" ? _$use(_ref$5, _el$33) : body = _el$33;
1205
+ _$spread(_el$33, _$mergeProps({
1157
1206
  get ["class"]() {
1158
1207
  return `k2b-app-workspace__sidebar-body ${props.class ?? ""}`;
1159
1208
  },
@@ -1161,25 +1210,25 @@ const AppWorkspaceSidebarBody = props => {
1161
1210
  return props.scrollFade !== false ? "both" : undefined;
1162
1211
  }
1163
1212
  }, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), false, true);
1164
- _$insert(_el$30, () => props.children);
1213
+ _$insert(_el$33, () => props.children);
1165
1214
  _$runHydrationEvents();
1166
- return _el$30;
1215
+ return _el$33;
1167
1216
  })(), (() => {
1168
- var _el$31 = _$getNextElement(_tmpl$15);
1169
- _$setProperty(_el$31, "innerHTML", SIDEBAR_SCROLL_MEMORY_SCRIPT);
1170
- return _el$31;
1217
+ var _el$34 = _$getNextElement(_tmpl$16);
1218
+ _$setProperty(_el$34, "innerHTML", SIDEBAR_SCROLL_MEMORY_SCRIPT);
1219
+ return _el$34;
1171
1220
  })()];
1172
1221
  };
1173
1222
  const AppWorkspaceSidebarFooter = props => (() => {
1174
- var _el$32 = _$getNextElement(_tmpl$16);
1175
- _$spread(_el$32, _$mergeProps({
1223
+ var _el$35 = _$getNextElement(_tmpl$17);
1224
+ _$spread(_el$35, _$mergeProps({
1176
1225
  get ["class"]() {
1177
1226
  return `k2b-app-workspace__sidebar-footer ${props.class ?? ""}`;
1178
1227
  }
1179
1228
  }, () => modeAttrs(props.sidebarMode)), false, true);
1180
- _$insert(_el$32, () => props.children);
1229
+ _$insert(_el$35, () => props.children);
1181
1230
  _$runHydrationEvents();
1182
- return _el$32;
1231
+ return _el$35;
1183
1232
  })();
1184
1233
  const AppWorkspaceSidebarSection = props => {
1185
1234
  const [expanded, setExpanded] = createSignal(props.defaultOpen ?? true);
@@ -1190,27 +1239,27 @@ const AppWorkspaceSidebarSection = props => {
1190
1239
  return props.icon;
1191
1240
  },
1192
1241
  get children() {
1193
- var _el$33 = _$getNextElement(_tmpl$17),
1194
- _el$34 = _el$33.firstChild;
1195
- _$effect(() => _$className(_el$34, iconClass(props.icon)));
1196
- return _el$33;
1242
+ var _el$36 = _$getNextElement(_tmpl$18),
1243
+ _el$37 = _el$36.firstChild;
1244
+ _$effect(() => _$className(_el$37, iconClass(props.icon)));
1245
+ return _el$36;
1197
1246
  }
1198
1247
  }), _$memo(() => props.title), _$createComponent(Show, {
1199
1248
  get when() {
1200
1249
  return props.count !== undefined;
1201
1250
  },
1202
1251
  get children() {
1203
- var _el$35 = _$getNextElement(_tmpl$18);
1204
- _$insert(_el$35, () => props.count);
1205
- return _el$35;
1252
+ var _el$38 = _$getNextElement(_tmpl$19);
1253
+ _$insert(_el$38, () => props.count);
1254
+ return _el$38;
1206
1255
  }
1207
1256
  })];
1208
1257
  return (() => {
1209
- var _el$36 = _$getNextElement(_tmpl$22),
1210
- _el$48 = _el$36.firstChild,
1211
- [_el$49, _co$8] = _$getNextMarker(_el$48.nextSibling),
1212
- _el$47 = _el$49.nextSibling;
1213
- _$spread(_el$36, _$mergeProps({
1258
+ var _el$39 = _$getNextElement(_tmpl$23),
1259
+ _el$51 = _el$39.firstChild,
1260
+ [_el$52, _co$9] = _$getNextMarker(_el$51.nextSibling),
1261
+ _el$50 = _el$52.nextSibling;
1262
+ _$spread(_el$39, _$mergeProps({
1214
1263
  get ["class"]() {
1215
1264
  return `k2b-app-workspace__sidebar-section ${props.class ?? ""}`;
1216
1265
  },
@@ -1218,17 +1267,17 @@ const AppWorkspaceSidebarSection = props => {
1218
1267
  return props.collapsible ? "true" : undefined;
1219
1268
  }
1220
1269
  }, () => modeAttrs(props.sidebarMode)), false, true);
1221
- _$insert(_el$36, _$createComponent(Show, {
1270
+ _$insert(_el$39, _$createComponent(Show, {
1222
1271
  get when() {
1223
1272
  return props.title || props.actions;
1224
1273
  },
1225
1274
  get children() {
1226
- var _el$37 = _$getNextElement(_tmpl$21),
1227
- _el$43 = _el$37.firstChild,
1228
- [_el$44, _co$6] = _$getNextMarker(_el$43.nextSibling),
1229
- _el$45 = _el$44.nextSibling,
1230
- [_el$46, _co$7] = _$getNextMarker(_el$45.nextSibling);
1231
- _$insert(_el$37, _$createComponent(Show, {
1275
+ var _el$40 = _$getNextElement(_tmpl$22),
1276
+ _el$46 = _el$40.firstChild,
1277
+ [_el$47, _co$7] = _$getNextMarker(_el$46.nextSibling),
1278
+ _el$48 = _el$47.nextSibling,
1279
+ [_el$49, _co$8] = _$getNextMarker(_el$48.nextSibling);
1280
+ _$insert(_el$40, _$createComponent(Show, {
1232
1281
  get when() {
1233
1282
  return props.collapsible;
1234
1283
  },
@@ -1238,56 +1287,56 @@ const AppWorkspaceSidebarSection = props => {
1238
1287
  return props.title;
1239
1288
  },
1240
1289
  get children() {
1241
- var _el$50 = _$getNextElement(_tmpl$23);
1242
- _$insert(_el$50, title);
1243
- return _el$50;
1290
+ var _el$53 = _$getNextElement(_tmpl$24);
1291
+ _$insert(_el$53, title);
1292
+ return _el$53;
1244
1293
  }
1245
1294
  });
1246
1295
  },
1247
1296
  get children() {
1248
- var _el$38 = _$getNextElement(_tmpl$19),
1249
- _el$40 = _el$38.firstChild,
1250
- [_el$41, _co$5] = _$getNextMarker(_el$40.nextSibling),
1251
- _el$39 = _el$41.nextSibling;
1252
- _el$38.$$click = () => {
1297
+ var _el$41 = _$getNextElement(_tmpl$20),
1298
+ _el$43 = _el$41.firstChild,
1299
+ [_el$44, _co$6] = _$getNextMarker(_el$43.nextSibling),
1300
+ _el$42 = _el$44.nextSibling;
1301
+ _el$41.$$click = () => {
1253
1302
  const next = !open();
1254
1303
  setExpanded(next);
1255
1304
  props.onOpenChange?.(next);
1256
1305
  };
1257
- _$setAttribute(_el$38, "aria-controls", id);
1258
- _$insert(_el$38, title, _el$41, _co$5);
1306
+ _$setAttribute(_el$41, "aria-controls", id);
1307
+ _$insert(_el$41, title, _el$44, _co$6);
1259
1308
  _$effect(_p$ => {
1260
1309
  var _v$57 = open(),
1261
1310
  _v$58 = open() ? "ti ti-chevron-down" : "ti ti-chevron-right";
1262
- _v$57 !== _p$.e && _$setAttribute(_el$38, "aria-expanded", _p$.e = _v$57);
1263
- _v$58 !== _p$.t && _$className(_el$39, _p$.t = _v$58);
1311
+ _v$57 !== _p$.e && _$setAttribute(_el$41, "aria-expanded", _p$.e = _v$57);
1312
+ _v$58 !== _p$.t && _$className(_el$42, _p$.t = _v$58);
1264
1313
  return _p$;
1265
1314
  }, {
1266
1315
  e: undefined,
1267
1316
  t: undefined
1268
1317
  });
1269
1318
  _$runHydrationEvents();
1270
- return _el$38;
1319
+ return _el$41;
1271
1320
  }
1272
- }), _el$44, _co$6);
1273
- _$insert(_el$37, _$createComponent(Show, {
1321
+ }), _el$47, _co$7);
1322
+ _$insert(_el$40, _$createComponent(Show, {
1274
1323
  get when() {
1275
1324
  return props.actions;
1276
1325
  },
1277
1326
  get children() {
1278
- var _el$42 = _$getNextElement(_tmpl$20);
1279
- _$insert(_el$42, () => props.actions);
1280
- return _el$42;
1327
+ var _el$45 = _$getNextElement(_tmpl$21);
1328
+ _$insert(_el$45, () => props.actions);
1329
+ return _el$45;
1281
1330
  }
1282
- }), _el$46, _co$7);
1283
- return _el$37;
1331
+ }), _el$49, _co$8);
1332
+ return _el$40;
1284
1333
  }
1285
- }), _el$49, _co$8);
1286
- _$setAttribute(_el$47, "id", id);
1287
- _$insert(_el$47, () => props.children);
1288
- _$effect(() => _$setProperty(_el$47, "hidden", !open()));
1334
+ }), _el$52, _co$9);
1335
+ _$setAttribute(_el$50, "id", id);
1336
+ _$insert(_el$50, () => props.children);
1337
+ _$effect(() => _$setProperty(_el$50, "hidden", !open()));
1289
1338
  _$runHydrationEvents();
1290
- return _el$36;
1339
+ return _el$39;
1291
1340
  })();
1292
1341
  };
1293
1342
  const AppWorkspaceSidebarItemIcon = props => mergeProps({
@@ -1303,10 +1352,10 @@ const AppWorkspaceSidebarItemAction = props => mergeProps({
1303
1352
  kind: SIDEBAR_ITEM_ACTION
1304
1353
  }, props);
1305
1354
  const AppWorkspaceSidebarItemActions = props => (() => {
1306
- var _el$51 = _$getNextElement(_tmpl$24);
1307
- _$insert(_el$51, () => props.children);
1308
- _$effect(() => _$setAttribute(_el$51, "data-visibility", props.visibility === "hover" ? "hover" : undefined));
1309
- return _el$51;
1355
+ var _el$54 = _$getNextElement(_tmpl$25);
1356
+ _$insert(_el$54, () => props.children);
1357
+ _$effect(() => _$setAttribute(_el$54, "data-visibility", props.visibility === "hover" ? "hover" : undefined));
1358
+ return _el$54;
1310
1359
  })();
1311
1360
  const AppWorkspaceSidebarItemStatus = props => {
1312
1361
  const workspaceMessages = useWorkspaceMessages();
@@ -1324,8 +1373,8 @@ const AppWorkspaceSidebarItemStatus = props => {
1324
1373
  // space, and it still keeps the row's label on one line, so the first count
1325
1374
  // never re-wraps the label and moves the rows below.
1326
1375
  return (() => {
1327
- var _el$52 = _$getNextElement(_tmpl$30);
1328
- _$insert(_el$52, _$createComponent(Show, {
1376
+ var _el$55 = _$getNextElement(_tmpl$31);
1377
+ _$insert(_el$55, _$createComponent(Show, {
1329
1378
  get when() {
1330
1379
  return description();
1331
1380
  },
@@ -1335,18 +1384,18 @@ const AppWorkspaceSidebarItemStatus = props => {
1335
1384
  return props.mention;
1336
1385
  },
1337
1386
  get children() {
1338
- return _$getNextElement(_tmpl$25);
1387
+ return _$getNextElement(_tmpl$26);
1339
1388
  }
1340
1389
  }), _$createComponent(Show, {
1341
1390
  get when() {
1342
1391
  return props.muted;
1343
1392
  },
1344
1393
  get children() {
1345
- return _$getNextElement(_tmpl$26);
1394
+ return _$getNextElement(_tmpl$27);
1346
1395
  }
1347
1396
  }), (() => {
1348
- var _el$55 = _$getNextElement(_tmpl$28);
1349
- _$insert(_el$55, _$createComponent(Show, {
1397
+ var _el$58 = _$getNextElement(_tmpl$29);
1398
+ _$insert(_el$58, _$createComponent(Show, {
1350
1399
  get when() {
1351
1400
  return count() || waiting() === 0;
1352
1401
  },
@@ -1356,51 +1405,111 @@ const AppWorkspaceSidebarItemStatus = props => {
1356
1405
  return dot();
1357
1406
  },
1358
1407
  get children() {
1359
- return _$getNextElement(_tmpl$31);
1408
+ return _$getNextElement(_tmpl$32);
1360
1409
  }
1361
1410
  });
1362
1411
  },
1363
1412
  get children() {
1364
- var _el$56 = _$getNextElement(_tmpl$27);
1365
- _$insert(_el$56, (() => {
1413
+ var _el$59 = _$getNextElement(_tmpl$28);
1414
+ _$insert(_el$59, (() => {
1366
1415
  var _c$2 = _$memo(() => count() > 99);
1367
1416
  return () => _c$2() ? "99+" : count();
1368
1417
  })());
1369
- _$effect(() => _$setAttribute(_el$56, "data-mention", props.mention ? "true" : undefined));
1370
- return _el$56;
1418
+ _$effect(() => _$setAttribute(_el$59, "data-mention", props.mention ? "true" : undefined));
1419
+ return _el$59;
1371
1420
  }
1372
1421
  }));
1373
- return _el$55;
1422
+ return _el$58;
1374
1423
  })(), (() => {
1375
- var _el$57 = _$getNextElement(_tmpl$29),
1376
- _el$58 = _el$57.firstChild,
1377
- _el$59 = _el$58.nextSibling,
1378
- [_el$60, _co$9] = _$getNextMarker(_el$59.nextSibling);
1379
- _$insert(_el$57, description, _el$60, _co$9);
1380
- return _el$57;
1424
+ var _el$60 = _$getNextElement(_tmpl$30),
1425
+ _el$61 = _el$60.firstChild,
1426
+ _el$62 = _el$61.nextSibling,
1427
+ [_el$63, _co$0] = _$getNextMarker(_el$62.nextSibling);
1428
+ _$insert(_el$60, description, _el$63, _co$0);
1429
+ return _el$60;
1381
1430
  })()];
1382
1431
  }
1383
1432
  }));
1384
1433
  _$effect(_p$ => {
1385
1434
  var _v$59 = waiting() !== null ? undefined : count() ? "count" : dot() ? "dot" : undefined,
1386
1435
  _v$60 = waiting() === null ? undefined : waiting() ? "count" : "zero";
1387
- _v$59 !== _p$.e && _$setAttribute(_el$52, "data-unread", _p$.e = _v$59);
1388
- _v$60 !== _p$.t && _$setAttribute(_el$52, "data-waiting", _p$.t = _v$60);
1436
+ _v$59 !== _p$.e && _$setAttribute(_el$55, "data-unread", _p$.e = _v$59);
1437
+ _v$60 !== _p$.t && _$setAttribute(_el$55, "data-waiting", _p$.t = _v$60);
1389
1438
  return _p$;
1390
1439
  }, {
1391
1440
  e: undefined,
1392
1441
  t: undefined
1393
1442
  });
1394
- return _el$52;
1443
+ return _el$55;
1395
1444
  })();
1396
1445
  };
1446
+ /**
1447
+ * Hover actions overlay a row's end, so the label and count under them fade
1448
+ * out while they show. The row measures how far the overlay reaches into its
1449
+ * count (`--k2b-sidebar-item-cover`) and how much of that the count and gap
1450
+ * after the label already take (`--k2b-sidebar-item-label-trail`), so the
1451
+ * label keeps all the width the overlay leaves it. The stylesheet applies
1452
+ * both only while the overlay shows, and assumes its usual size until then.
1453
+ */
1454
+ function observeSidebarRowCover(row) {
1455
+ if (isServer || typeof ResizeObserver === "undefined") return;
1456
+ // A hidden count, such as an empty status, or hidden actions have no box to measure from.
1457
+ const laidOut = element => Boolean(element?.getClientRects().length);
1458
+ const measure = () => {
1459
+ const main = row.querySelector(":scope > .k2b-app-workspace__sidebar-item-main");
1460
+ const label = main?.querySelector(":scope > :is(.k2b-app-workspace__sidebar-item-copy, .k2b-app-workspace__sidebar-item-label)");
1461
+ const overlays = Array.from(row.querySelectorAll(':scope > .k2b-app-workspace__sidebar-item-actions[data-visibility="hover"]:last-child, :scope > .k2b-app-workspace__sidebar-item-action[data-visibility="hover"]')).filter(element => laidOut(element) && getComputedStyle(element).position === "absolute");
1462
+ if (!main || !laidOut(label) || !overlays.length) {
1463
+ row.style.removeProperty("--k2b-sidebar-item-cover");
1464
+ row.style.removeProperty("--k2b-sidebar-item-label-trail");
1465
+ return;
1466
+ }
1467
+ // Lengths along the inline axis, measured toward the row's end.
1468
+ const rtl = getComputedStyle(row).direction === "rtl";
1469
+ const end = element => {
1470
+ const box = element.getBoundingClientRect();
1471
+ return rtl ? -box.left : box.right;
1472
+ };
1473
+ const start = Math.min(...overlays.map(element => {
1474
+ const box = element.getBoundingClientRect();
1475
+ return rtl ? -box.right : box.left;
1476
+ }));
1477
+ const meta = main.querySelector(":scope > .k2b-app-workspace__sidebar-item-meta");
1478
+ const content = end(laidOut(meta) ? meta : label);
1479
+ row.style.setProperty("--k2b-sidebar-item-cover", `${Math.max(0, content - start)}px`);
1480
+ row.style.setProperty("--k2b-sidebar-item-label-trail", `${Math.max(0, content - end(label))}px`);
1481
+ };
1482
+ const resized = new ResizeObserver(measure);
1483
+ // The label, the count, and the actions can be replaced while the row stays.
1484
+ const replaced = new MutationObserver(() => observe());
1485
+ const observe = () => {
1486
+ const main = row.querySelector(":scope > .k2b-app-workspace__sidebar-item-main");
1487
+ if (main) replaced.observe(main, {
1488
+ childList: true
1489
+ });
1490
+ resized.disconnect();
1491
+ resized.observe(row);
1492
+ for (const element of row.querySelectorAll(":scope > .k2b-app-workspace__sidebar-item-main > :is(.k2b-app-workspace__sidebar-item-copy, .k2b-app-workspace__sidebar-item-label, .k2b-app-workspace__sidebar-item-meta), :scope > :is(.k2b-app-workspace__sidebar-item-actions, .k2b-app-workspace__sidebar-item-action)")) resized.observe(element);
1493
+ };
1494
+ replaced.observe(row, {
1495
+ childList: true
1496
+ });
1497
+ observe();
1498
+ onCleanup(() => {
1499
+ replaced.disconnect();
1500
+ resized.disconnect();
1501
+ });
1502
+ }
1503
+
1397
1504
  /** Shared visual and semantic row frame for flat sidebar items and tree items. */
1398
1505
  function AppWorkspaceSidebarRow(props) {
1506
+ const [link, setLink] = createSignal();
1507
+ const [hinted, setHinted] = createSignal(false);
1399
1508
  const className = () => `k2b-app-workspace__sidebar-item ${props.hasActions ? "has-action" : ""} ${props.active ? props.activeClass ?? "is-active" : ""} ${props.class ?? ""}`;
1400
1509
  const data = () => Object.fromEntries(Object.entries(props.data ?? {}).filter(([, value]) => value !== undefined && value !== null).map(([key, value]) => [`data-${key}`, String(value)]));
1401
1510
  const common = () => ({
1402
1511
  class: className(),
1403
- title: props.title,
1512
+ title: hinted() ? undefined : props.title,
1404
1513
  "data-tone": props.tone,
1405
1514
  style: {
1406
1515
  "view-transition-name": props.viewTransitionName,
@@ -1410,17 +1519,20 @@ function AppWorkspaceSidebarRow(props) {
1410
1519
  });
1411
1520
  const current = () => props.active === "ancestor" ? "true" : props.active ? "page" : undefined;
1412
1521
  const Control = control => {
1413
- const attrs = () => control.grouped ? {
1414
- class: "k2b-app-workspace__sidebar-item-main"
1415
- } : common();
1522
+ const attrs = () => ({
1523
+ ...(control.grouped ? {
1524
+ class: "k2b-app-workspace__sidebar-item-main"
1525
+ } : common()),
1526
+ ref: setLink
1527
+ });
1416
1528
  return _$createComponent(Show, {
1417
1529
  get when() {
1418
1530
  return Boolean(props.href && !props.disabled);
1419
1531
  },
1420
1532
  get fallback() {
1421
1533
  return (() => {
1422
- var _el$62 = _$getNextElement(_tmpl$32);
1423
- _$spread(_el$62, _$mergeProps(attrs, {
1534
+ var _el$65 = _$getNextElement(_tmpl$33);
1535
+ _$spread(_el$65, _$mergeProps(attrs, {
1424
1536
  get tabIndex() {
1425
1537
  return props.tabIndex;
1426
1538
  },
@@ -1431,9 +1543,9 @@ function AppWorkspaceSidebarRow(props) {
1431
1543
  return props.onClick;
1432
1544
  }
1433
1545
  }), false, true);
1434
- _$insert(_el$62, () => props.children);
1546
+ _$insert(_el$65, () => props.children);
1435
1547
  _$runHydrationEvents();
1436
- return _el$62;
1548
+ return _el$65;
1437
1549
  })();
1438
1550
  },
1439
1551
  get children() {
@@ -1443,8 +1555,8 @@ function AppWorkspaceSidebarRow(props) {
1443
1555
  },
1444
1556
  get fallback() {
1445
1557
  return (() => {
1446
- var _el$63 = _$getNextElement(_tmpl$33);
1447
- _$spread(_el$63, _$mergeProps({
1558
+ var _el$66 = _$getNextElement(_tmpl$34);
1559
+ _$spread(_el$66, _$mergeProps({
1448
1560
  get href() {
1449
1561
  return props.href;
1450
1562
  }
@@ -1459,9 +1571,9 @@ function AppWorkspaceSidebarRow(props) {
1459
1571
  return props.onClick;
1460
1572
  }
1461
1573
  }), false, true);
1462
- _$insert(_el$63, () => props.children);
1574
+ _$insert(_el$66, () => props.children);
1463
1575
  _$runHydrationEvents();
1464
- return _el$63;
1576
+ return _el$66;
1465
1577
  })();
1466
1578
  },
1467
1579
  get children() {
@@ -1497,7 +1609,7 @@ function AppWorkspaceSidebarRow(props) {
1497
1609
  }
1498
1610
  });
1499
1611
  };
1500
- return _$createComponent(Show, {
1612
+ return [_$createComponent(Show, {
1501
1613
  get when() {
1502
1614
  return props.hasActions;
1503
1615
  },
@@ -1507,24 +1619,44 @@ function AppWorkspaceSidebarRow(props) {
1507
1619
  });
1508
1620
  },
1509
1621
  get children() {
1510
- var _el$64 = _$getNextElement(_tmpl$34),
1511
- _el$65 = _el$64.firstChild,
1512
- [_el$66, _co$0] = _$getNextMarker(_el$65.nextSibling),
1513
- _el$67 = _el$66.nextSibling,
1514
- [_el$68, _co$1] = _$getNextMarker(_el$67.nextSibling);
1515
- _$spread(_el$64, _$mergeProps(common, {
1622
+ var _el$67 = _$getNextElement(_tmpl$35),
1623
+ _el$68 = _el$67.firstChild,
1624
+ [_el$69, _co$1] = _$getNextMarker(_el$68.nextSibling),
1625
+ _el$70 = _el$69.nextSibling,
1626
+ [_el$71, _co$10] = _$getNextMarker(_el$70.nextSibling);
1627
+ _$use(row => onMount(() => observeSidebarRowCover(row)), _el$67);
1628
+ _$spread(_el$67, _$mergeProps(common, {
1516
1629
  get ["data-disabled"]() {
1517
1630
  return props.disabled ? "true" : undefined;
1518
1631
  }
1519
1632
  }), false, true);
1520
- _$insert(_el$64, _$createComponent(Control, {
1633
+ _$insert(_el$67, _$createComponent(Control, {
1521
1634
  grouped: true
1522
- }), _el$66, _co$0);
1523
- _$insert(_el$64, () => props.actions, _el$68, _co$1);
1635
+ }), _el$69, _co$1);
1636
+ _$insert(_el$67, () => props.actions, _el$71, _co$10);
1524
1637
  _$runHydrationEvents();
1525
- return _el$64;
1638
+ return _el$67;
1526
1639
  }
1527
- });
1640
+ }), _$createComponent(Show, {
1641
+ get when() {
1642
+ return link();
1643
+ },
1644
+ keyed: true,
1645
+ children: element => _$createComponent(SidebarRailHint, {
1646
+ target: () => element,
1647
+ get label() {
1648
+ return props.title ?? props.hint;
1649
+ },
1650
+ get focusTarget() {
1651
+ return props.focusTarget ?? (() => element);
1652
+ },
1653
+ labelSelector: ".k2b-app-workspace__sidebar-item-label-text",
1654
+ get titled() {
1655
+ return props.title !== undefined;
1656
+ },
1657
+ onArm: () => setHinted(true)
1658
+ })
1659
+ })];
1528
1660
  }
1529
1661
  function AppWorkspaceSidebarItem(props) {
1530
1662
  const workspaceMessages = useWorkspaceMessages();
@@ -1555,89 +1687,89 @@ function AppWorkspaceSidebarItem(props) {
1555
1687
  return iconContent() || icon();
1556
1688
  },
1557
1689
  get children() {
1558
- var _el$69 = _$getNextElement(_tmpl$35);
1559
- _$insert(_el$69, () => iconContent() ?? (() => {
1560
- var _el$84 = _$getNextElement(_tmpl$41);
1561
- _$effect(() => _$className(_el$84, iconClass(icon())));
1562
- return _el$84;
1690
+ var _el$72 = _$getNextElement(_tmpl$36);
1691
+ _$insert(_el$72, () => iconContent() ?? (() => {
1692
+ var _el$87 = _$getNextElement(_tmpl$42);
1693
+ _$effect(() => _$className(_el$87, iconClass(icon())));
1694
+ return _el$87;
1563
1695
  })());
1564
- _$effect(() => _$className(_el$69,
1696
+ _$effect(() => _$className(_el$72,
1565
1697
  // An object row's own glyph sits in a soft chip of the app colour; custom content such as an avatar keeps
1566
1698
  // its own look.
1567
1699
  props.variant === "object" && !iconContent() ? "k2b-app-workspace__sidebar-item-icon k2b-icon-tile" : "k2b-app-workspace__sidebar-item-icon"));
1568
- return _el$69;
1700
+ return _el$72;
1569
1701
  }
1570
1702
  }), (() => {
1571
- var _el$70 = _$getNextElement(_tmpl$39),
1572
- _el$79 = _el$70.firstChild,
1573
- [_el$80, _co$11] = _$getNextMarker(_el$79.nextSibling),
1574
- _el$76 = _el$80.nextSibling,
1575
- _el$77 = _el$76.firstChild,
1576
- _el$81 = _el$76.nextSibling,
1577
- [_el$82, _co$12] = _$getNextMarker(_el$81.nextSibling);
1578
- _$insert(_el$70, _$createComponent(Show, {
1703
+ var _el$73 = _$getNextElement(_tmpl$40),
1704
+ _el$82 = _el$73.firstChild,
1705
+ [_el$83, _co$12] = _$getNextMarker(_el$82.nextSibling),
1706
+ _el$79 = _el$83.nextSibling,
1707
+ _el$80 = _el$79.firstChild,
1708
+ _el$84 = _el$79.nextSibling,
1709
+ [_el$85, _co$13] = _$getNextMarker(_el$84.nextSibling);
1710
+ _$insert(_el$73, _$createComponent(Show, {
1579
1711
  get when() {
1580
1712
  return props.context || props.contextMeta;
1581
1713
  },
1582
1714
  get children() {
1583
- var _el$71 = _$getNextElement(_tmpl$37),
1584
- _el$72 = _el$71.firstChild,
1585
- _el$74 = _el$72.nextSibling,
1586
- [_el$75, _co$10] = _$getNextMarker(_el$74.nextSibling);
1587
- _$insert(_el$72, () => props.context);
1588
- _$insert(_el$71, _$createComponent(Show, {
1715
+ var _el$74 = _$getNextElement(_tmpl$38),
1716
+ _el$75 = _el$74.firstChild,
1717
+ _el$77 = _el$75.nextSibling,
1718
+ [_el$78, _co$11] = _$getNextMarker(_el$77.nextSibling);
1719
+ _$insert(_el$75, () => props.context);
1720
+ _$insert(_el$74, _$createComponent(Show, {
1589
1721
  get when() {
1590
1722
  return props.contextMeta;
1591
1723
  },
1592
1724
  get children() {
1593
- var _el$73 = _$getNextElement(_tmpl$36);
1594
- _$insert(_el$73, () => props.contextMeta);
1595
- return _el$73;
1725
+ var _el$76 = _$getNextElement(_tmpl$37);
1726
+ _$insert(_el$76, () => props.contextMeta);
1727
+ return _el$76;
1596
1728
  }
1597
- }), _el$75, _co$10);
1598
- return _el$71;
1729
+ }), _el$78, _co$11);
1730
+ return _el$74;
1599
1731
  }
1600
- }), _el$80, _co$11);
1601
- _$insert(_el$77, () => label());
1602
- _$insert(_el$70, _$createComponent(Show, {
1732
+ }), _el$83, _co$12);
1733
+ _$insert(_el$80, () => label());
1734
+ _$insert(_el$73, _$createComponent(Show, {
1603
1735
  get when() {
1604
1736
  return props.description;
1605
1737
  },
1606
1738
  get children() {
1607
- var _el$78 = _$getNextElement(_tmpl$38);
1608
- _$insert(_el$78, () => props.description);
1609
- return _el$78;
1739
+ var _el$81 = _$getNextElement(_tmpl$39);
1740
+ _$insert(_el$81, () => props.description);
1741
+ return _el$81;
1610
1742
  }
1611
- }), _el$82, _co$12);
1743
+ }), _el$85, _co$13);
1612
1744
  _$effect(_p$ => {
1613
1745
  var _v$61 = oneLine() ? "1" : undefined,
1614
1746
  _v$62 = !oneLine() && typeof label() === "string" ? label() : undefined;
1615
- _v$61 !== _p$.e && _$setAttribute(_el$76, "data-lines", _p$.e = _v$61);
1616
- _v$62 !== _p$.t && _$setAttribute(_el$76, "data-label", _p$.t = _v$62);
1747
+ _v$61 !== _p$.e && _$setAttribute(_el$79, "data-lines", _p$.e = _v$61);
1748
+ _v$62 !== _p$.t && _$setAttribute(_el$79, "data-label", _p$.t = _v$62);
1617
1749
  return _p$;
1618
1750
  }, {
1619
1751
  e: undefined,
1620
1752
  t: undefined
1621
1753
  });
1622
- return _el$70;
1754
+ return _el$73;
1623
1755
  })(), _$createComponent(Show, {
1624
1756
  get when() {
1625
1757
  return hasMeta();
1626
1758
  },
1627
1759
  get children() {
1628
- var _el$83 = _$getNextElement(_tmpl$40);
1629
- _$insert(_el$83, meta);
1760
+ var _el$86 = _$getNextElement(_tmpl$41);
1761
+ _$insert(_el$86, meta);
1630
1762
  _$effect(_p$ => {
1631
1763
  var _v$63 = props.preview?.trigger === "row" ? metaId : undefined,
1632
1764
  _v$64 = metaVisibility() === "hover" ? "hover" : undefined;
1633
- _v$63 !== _p$.e && _$setAttribute(_el$83, "id", _p$.e = _v$63);
1634
- _v$64 !== _p$.t && _$setAttribute(_el$83, "data-visibility", _p$.t = _v$64);
1765
+ _v$63 !== _p$.e && _$setAttribute(_el$86, "id", _p$.e = _v$63);
1766
+ _v$64 !== _p$.t && _$setAttribute(_el$86, "data-visibility", _p$.t = _v$64);
1635
1767
  return _p$;
1636
1768
  }, {
1637
1769
  e: undefined,
1638
1770
  t: undefined
1639
1771
  });
1640
- return _el$83;
1772
+ return _el$86;
1641
1773
  }
1642
1774
  })];
1643
1775
  const singleAction = () => {
@@ -1653,9 +1785,9 @@ function AppWorkspaceSidebarItem(props) {
1653
1785
  props.onActionClick?.(event);
1654
1786
  };
1655
1787
  const content = () => actionSlot()?.children ?? (() => {
1656
- var _el$85 = _$getNextElement(_tmpl$41);
1657
- _$effect(() => _$className(_el$85, iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots")));
1658
- return _el$85;
1788
+ var _el$88 = _$getNextElement(_tmpl$42);
1789
+ _$effect(() => _$className(_el$88, iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots")));
1790
+ return _el$88;
1659
1791
  })();
1660
1792
  return _$createComponent(Show, {
1661
1793
  get when() {
@@ -1668,16 +1800,16 @@ function AppWorkspaceSidebarItem(props) {
1668
1800
  },
1669
1801
  get fallback() {
1670
1802
  return (() => {
1671
- var _el$87 = _$getNextElement(_tmpl$43);
1672
- _el$87.$$click = select;
1673
- _$insert(_el$87, content);
1803
+ var _el$90 = _$getNextElement(_tmpl$44);
1804
+ _el$90.$$click = select;
1805
+ _$insert(_el$90, content);
1674
1806
  _$effect(_p$ => {
1675
1807
  var _v$68 = actionSlot()?.disabled,
1676
1808
  _v$69 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1677
1809
  _v$70 = label();
1678
- _v$68 !== _p$.e && _$setProperty(_el$87, "disabled", _p$.e = _v$68);
1679
- _v$69 !== _p$.t && _$setAttribute(_el$87, "data-visibility", _p$.t = _v$69);
1680
- _v$70 !== _p$.a && _$setAttribute(_el$87, "aria-label", _p$.a = _v$70);
1810
+ _v$68 !== _p$.e && _$setProperty(_el$90, "disabled", _p$.e = _v$68);
1811
+ _v$69 !== _p$.t && _$setAttribute(_el$90, "data-visibility", _p$.t = _v$69);
1812
+ _v$70 !== _p$.a && _$setAttribute(_el$90, "aria-label", _p$.a = _v$70);
1681
1813
  return _p$;
1682
1814
  }, {
1683
1815
  e: undefined,
@@ -1685,20 +1817,20 @@ function AppWorkspaceSidebarItem(props) {
1685
1817
  a: undefined
1686
1818
  });
1687
1819
  _$runHydrationEvents();
1688
- return _el$87;
1820
+ return _el$90;
1689
1821
  })();
1690
1822
  },
1691
1823
  get children() {
1692
- var _el$86 = _$getNextElement(_tmpl$42);
1693
- _el$86.$$click = select;
1694
- _$insert(_el$86, content);
1824
+ var _el$89 = _$getNextElement(_tmpl$43);
1825
+ _el$89.$$click = select;
1826
+ _$insert(_el$89, content);
1695
1827
  _$effect(_p$ => {
1696
1828
  var _v$65 = actionSlot()?.href,
1697
1829
  _v$66 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1698
1830
  _v$67 = label();
1699
- _v$65 !== _p$.e && _$setAttribute(_el$86, "href", _p$.e = _v$65);
1700
- _v$66 !== _p$.t && _$setAttribute(_el$86, "data-visibility", _p$.t = _v$66);
1701
- _v$67 !== _p$.a && _$setAttribute(_el$86, "aria-label", _p$.a = _v$67);
1831
+ _v$65 !== _p$.e && _$setAttribute(_el$89, "href", _p$.e = _v$65);
1832
+ _v$66 !== _p$.t && _$setAttribute(_el$89, "data-visibility", _p$.t = _v$66);
1833
+ _v$67 !== _p$.a && _$setAttribute(_el$89, "aria-label", _p$.a = _v$67);
1702
1834
  return _p$;
1703
1835
  }, {
1704
1836
  e: undefined,
@@ -1706,7 +1838,7 @@ function AppWorkspaceSidebarItem(props) {
1706
1838
  a: undefined
1707
1839
  });
1708
1840
  _$runHydrationEvents();
1709
- return _el$86;
1841
+ return _el$89;
1710
1842
  }
1711
1843
  });
1712
1844
  }
@@ -1777,6 +1909,9 @@ function AppWorkspaceSidebarItem(props) {
1777
1909
  get title() {
1778
1910
  return props.title;
1779
1911
  },
1912
+ get hint() {
1913
+ return _$memo(() => typeof label() === "string")() ? label() : undefined;
1914
+ },
1780
1915
  get viewTransitionName() {
1781
1916
  return props.viewTransitionName;
1782
1917
  },
@@ -1894,7 +2029,7 @@ const AppWorkspaceNavTree = props => {
1894
2029
  },
1895
2030
  children: (item, place) => {
1896
2031
  const nested = createMemo(() => navTreeItems(item.children));
1897
- const hasChildren = () => nested().length > 0;
2032
+ const hasChildren = () => item.hasChildren ?? nested().length > 0;
1898
2033
  const selected = () => props.selectedId === item.id;
1899
2034
  const siblingIndex = id => siblings().findIndex(sibling => sibling.id === id);
1900
2035
  const movable = () => Boolean(props.onMove && item.movable && !item.disabled);
@@ -2007,16 +2142,16 @@ const AppWorkspaceNavTree = props => {
2007
2142
  return rowIcon();
2008
2143
  },
2009
2144
  get children() {
2010
- var _el$88 = _$getNextElement(_tmpl$44),
2011
- _el$89 = _el$88.firstChild;
2012
- _$spread(_el$88, _$mergeProps({
2145
+ var _el$91 = _$getNextElement(_tmpl$45),
2146
+ _el$92 = _el$91.firstChild;
2147
+ _$spread(_el$91, _$mergeProps({
2013
2148
  get ["data-k2b-nav-tree-toggle"]() {
2014
2149
  return usesIconDisclosure() ? "" : undefined;
2015
2150
  }
2016
2151
  }, () => iconAccessibility(item.iconLabel)), false, true);
2017
- _$effect(() => _$className(_el$89, iconClass(rowIcon())));
2152
+ _$effect(() => _$className(_el$92, iconClass(rowIcon())));
2018
2153
  _$runHydrationEvents();
2019
- return _el$88;
2154
+ return _el$91;
2020
2155
  }
2021
2156
  }), _$createComponent(Show, {
2022
2157
  get when() {
@@ -2024,51 +2159,51 @@ const AppWorkspaceNavTree = props => {
2024
2159
  },
2025
2160
  get fallback() {
2026
2161
  return (() => {
2027
- var _el$97 = _$getNextElement(_tmpl$48),
2028
- _el$98 = _el$97.firstChild;
2029
- _$insert(_el$98, () => item.label);
2030
- _$effect(() => _$setAttribute(_el$97, "data-label", typeof item.label === "string" ? item.label : undefined));
2031
- return _el$97;
2162
+ var _el$100 = _$getNextElement(_tmpl$49),
2163
+ _el$101 = _el$100.firstChild;
2164
+ _$insert(_el$101, () => item.label);
2165
+ _$effect(() => _$setAttribute(_el$100, "data-label", typeof item.label === "string" ? item.label : undefined));
2166
+ return _el$100;
2032
2167
  })();
2033
2168
  },
2034
2169
  get children() {
2035
- var _el$90 = _$getNextElement(_tmpl$45),
2036
- _el$91 = _el$90.firstChild,
2037
- _el$92 = _el$91.firstChild,
2038
- _el$93 = _el$91.nextSibling;
2039
- _$insert(_el$92, () => item.label);
2040
- _$insert(_el$93, () => item.description);
2041
- _$effect(() => _$setAttribute(_el$91, "data-label", typeof item.label === "string" ? item.label : undefined));
2042
- return _el$90;
2170
+ var _el$93 = _$getNextElement(_tmpl$46),
2171
+ _el$94 = _el$93.firstChild,
2172
+ _el$95 = _el$94.firstChild,
2173
+ _el$96 = _el$94.nextSibling;
2174
+ _$insert(_el$95, () => item.label);
2175
+ _$insert(_el$96, () => item.description);
2176
+ _$effect(() => _$setAttribute(_el$94, "data-label", typeof item.label === "string" ? item.label : undefined));
2177
+ return _el$93;
2043
2178
  }
2044
2179
  }), _$createComponent(Show, {
2045
2180
  get when() {
2046
2181
  return item.meta !== undefined;
2047
2182
  },
2048
2183
  get children() {
2049
- var _el$94 = _$getNextElement(_tmpl$46);
2050
- _$insert(_el$94, () => item.meta);
2184
+ var _el$97 = _$getNextElement(_tmpl$47);
2185
+ _$insert(_el$97, () => item.meta);
2051
2186
  _$effect(_p$ => {
2052
2187
  var _v$71 = `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`,
2053
2188
  _v$72 = item.metaVisibility === "hover" ? "hover" : undefined;
2054
- _v$71 !== _p$.e && _$className(_el$94, _p$.e = _v$71);
2055
- _v$72 !== _p$.t && _$setAttribute(_el$94, "data-visibility", _p$.t = _v$72);
2189
+ _v$71 !== _p$.e && _$className(_el$97, _p$.e = _v$71);
2190
+ _v$72 !== _p$.t && _$setAttribute(_el$97, "data-visibility", _p$.t = _v$72);
2056
2191
  return _p$;
2057
2192
  }, {
2058
2193
  e: undefined,
2059
2194
  t: undefined
2060
2195
  });
2061
- return _el$94;
2196
+ return _el$97;
2062
2197
  }
2063
2198
  }), _$createComponent(Show, {
2064
2199
  get when() {
2065
2200
  return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
2066
2201
  },
2067
2202
  get children() {
2068
- var _el$95 = _$getNextElement(_tmpl$47),
2069
- _el$96 = _el$95.firstChild;
2070
- _$effect(() => _$className(_el$96, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`));
2071
- return _el$95;
2203
+ var _el$98 = _$getNextElement(_tmpl$48),
2204
+ _el$99 = _el$98.firstChild;
2205
+ _$effect(() => _$className(_el$99, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`));
2206
+ return _el$98;
2072
2207
  }
2073
2208
  })];
2074
2209
  const row = () => _$createComponent(AppWorkspaceSidebarRow, {
@@ -2103,6 +2238,10 @@ const AppWorkspaceNavTree = props => {
2103
2238
  get title() {
2104
2239
  return item.title;
2105
2240
  },
2241
+ get hint() {
2242
+ return _$memo(() => typeof item.label === "string")() ? item.label : undefined;
2243
+ },
2244
+ focusTarget: () => treeItem,
2106
2245
  get viewTransitionName() {
2107
2246
  return item.viewTransitionName;
2108
2247
  },
@@ -2176,33 +2315,33 @@ const AppWorkspaceNavTree = props => {
2176
2315
  requestMove(target.move, false);
2177
2316
  };
2178
2317
  return (() => {
2179
- var _el$99 = _$getNextElement(_tmpl$50),
2180
- _el$101 = _el$99.firstChild,
2181
- [_el$102, _co$13] = _$getNextMarker(_el$101.nextSibling),
2182
- _el$103 = _el$102.nextSibling,
2183
- [_el$104, _co$14] = _$getNextMarker(_el$103.nextSibling);
2184
- _el$99.addEventListener("drop", onDrop);
2185
- _$addEventListener(_el$99, "dragleave", item.onDragLeave);
2186
- _el$99.addEventListener("dragover", onDragOver);
2187
- _$addEventListener(_el$99, "dragenter", item.onDragEnter);
2188
- _el$99.addEventListener("dragstart", onDragStart);
2189
- _el$99.$$keydown = onKeyDown;
2190
- _el$99.addEventListener("focus", () => setFocusedId(item.id));
2318
+ var _el$102 = _$getNextElement(_tmpl$51),
2319
+ _el$104 = _el$102.firstChild,
2320
+ [_el$105, _co$14] = _$getNextMarker(_el$104.nextSibling),
2321
+ _el$106 = _el$105.nextSibling,
2322
+ [_el$107, _co$15] = _$getNextMarker(_el$106.nextSibling);
2323
+ _el$102.addEventListener("drop", onDrop);
2324
+ _$addEventListener(_el$102, "dragleave", item.onDragLeave);
2325
+ _el$102.addEventListener("dragover", onDragOver);
2326
+ _$addEventListener(_el$102, "dragenter", item.onDragEnter);
2327
+ _el$102.addEventListener("dragstart", onDragStart);
2328
+ _el$102.$$keydown = onKeyDown;
2329
+ _el$102.addEventListener("focus", () => setFocusedId(item.id));
2191
2330
  var _ref$6 = treeItem;
2192
- typeof _ref$6 === "function" ? _$use(_ref$6, _el$99) : treeItem = _el$99;
2193
- _$setAttribute(_el$99, "aria-level", depth + 1);
2194
- _$setAttribute(_el$99, "data-k2b-nav-tree-parent-id", parentId);
2195
- _$insert(_el$99, row, _el$102, _co$13);
2196
- _$insert(_el$99, _$createComponent(Show, {
2331
+ typeof _ref$6 === "function" ? _$use(_ref$6, _el$102) : treeItem = _el$102;
2332
+ _$setAttribute(_el$102, "aria-level", depth + 1);
2333
+ _$setAttribute(_el$102, "data-k2b-nav-tree-parent-id", parentId);
2334
+ _$insert(_el$102, row, _el$105, _co$14);
2335
+ _$insert(_el$102, _$createComponent(Show, {
2197
2336
  get when() {
2198
2337
  return _$memo(() => !!hasChildren())() && isExpanded(item.id);
2199
2338
  },
2200
2339
  get children() {
2201
- var _el$100 = _$getNextElement(_tmpl$49);
2202
- _$insert(_el$100, () => renderItems(nested, depth + 1, item.id));
2203
- return _el$100;
2340
+ var _el$103 = _$getNextElement(_tmpl$50);
2341
+ _$insert(_el$103, () => renderItems(nested, depth + 1, item.id));
2342
+ return _el$103;
2204
2343
  }
2205
- }), _el$104, _co$14);
2344
+ }), _el$107, _co$15);
2206
2345
  _$effect(_p$ => {
2207
2346
  var _v$73 = siblings().length,
2208
2347
  _v$74 = place() + 1,
@@ -2215,17 +2354,17 @@ const AppWorkspaceNavTree = props => {
2215
2354
  _v$81 = dragged()?.id === item.id ? "" : undefined,
2216
2355
  _v$82 = dropTarget()?.id === item.id ? dropTarget().side : undefined,
2217
2356
  _v$83 = String(props.indented === false ? 0 : depth);
2218
- _v$73 !== _p$.e && _$setAttribute(_el$99, "aria-setsize", _p$.e = _v$73);
2219
- _v$74 !== _p$.t && _$setAttribute(_el$99, "aria-posinset", _p$.t = _v$74);
2220
- _v$75 !== _p$.a && _$setAttribute(_el$99, "aria-selected", _p$.a = _v$75);
2221
- _v$76 !== _p$.o && _$setAttribute(_el$99, "aria-expanded", _p$.o = _v$76);
2222
- _v$77 !== _p$.i && _$setAttribute(_el$99, "aria-disabled", _p$.i = _v$77);
2223
- _v$78 !== _p$.n && _$setAttribute(_el$99, "tabindex", _p$.n = _v$78);
2224
- _v$79 !== _p$.s && _$setAttribute(_el$99, "draggable", _p$.s = _v$79);
2225
- _v$80 !== _p$.h && _$setAttribute(_el$99, "data-k2b-nav-tree-id", _p$.h = _v$80);
2226
- _v$81 !== _p$.r && _$setAttribute(_el$99, "data-k2b-nav-tree-dragging", _p$.r = _v$81);
2227
- _v$82 !== _p$.d && _$setAttribute(_el$99, "data-k2b-nav-tree-drop", _p$.d = _v$82);
2228
- _v$83 !== _p$.l && _$setStyleProperty(_el$99, "--k2b-nav-tree-depth", _p$.l = _v$83);
2357
+ _v$73 !== _p$.e && _$setAttribute(_el$102, "aria-setsize", _p$.e = _v$73);
2358
+ _v$74 !== _p$.t && _$setAttribute(_el$102, "aria-posinset", _p$.t = _v$74);
2359
+ _v$75 !== _p$.a && _$setAttribute(_el$102, "aria-selected", _p$.a = _v$75);
2360
+ _v$76 !== _p$.o && _$setAttribute(_el$102, "aria-expanded", _p$.o = _v$76);
2361
+ _v$77 !== _p$.i && _$setAttribute(_el$102, "aria-disabled", _p$.i = _v$77);
2362
+ _v$78 !== _p$.n && _$setAttribute(_el$102, "tabindex", _p$.n = _v$78);
2363
+ _v$79 !== _p$.s && _$setAttribute(_el$102, "draggable", _p$.s = _v$79);
2364
+ _v$80 !== _p$.h && _$setAttribute(_el$102, "data-k2b-nav-tree-id", _p$.h = _v$80);
2365
+ _v$81 !== _p$.r && _$setAttribute(_el$102, "data-k2b-nav-tree-dragging", _p$.r = _v$81);
2366
+ _v$82 !== _p$.d && _$setAttribute(_el$102, "data-k2b-nav-tree-drop", _p$.d = _v$82);
2367
+ _v$83 !== _p$.l && _$setStyleProperty(_el$102, "--k2b-nav-tree-depth", _p$.l = _v$83);
2229
2368
  return _p$;
2230
2369
  }, {
2231
2370
  e: undefined,
@@ -2241,7 +2380,7 @@ const AppWorkspaceNavTree = props => {
2241
2380
  l: undefined
2242
2381
  });
2243
2382
  _$runHydrationEvents();
2244
- return _el$99;
2383
+ return _el$102;
2245
2384
  })();
2246
2385
  }
2247
2386
  });
@@ -2266,66 +2405,67 @@ const AppWorkspaceNavTree = props => {
2266
2405
  });
2267
2406
  });
2268
2407
  return (() => {
2269
- var _el$105 = _$getNextElement(_tmpl$51);
2270
- _el$105.addEventListener("dragend", endDrag);
2271
- _el$105.addEventListener("dragleave", event => {
2408
+ var _el$108 = _$getNextElement(_tmpl$52);
2409
+ _el$108.addEventListener("dragend", endDrag);
2410
+ _el$108.addEventListener("dragleave", event => {
2272
2411
  if (!root?.contains(event.relatedTarget)) setDropTarget(null);
2273
2412
  });
2274
- _el$105.addEventListener("dragover", event => {
2413
+ _el$108.addEventListener("dragover", event => {
2275
2414
  // Runs after the rows: a position no row claimed shows no gap.
2276
2415
  if (claimedDragOver !== event) setDropTarget(null);
2277
2416
  });
2278
2417
  var _ref$7 = root;
2279
- typeof _ref$7 === "function" ? _$use(_ref$7, _el$105) : root = _el$105;
2280
- _$insert(_el$105, () => renderItems(roots, 0));
2418
+ typeof _ref$7 === "function" ? _$use(_ref$7, _el$108) : root = _el$108;
2419
+ _$insert(_el$108, () => renderItems(roots, 0));
2281
2420
  _$effect(_p$ => {
2282
2421
  var _v$84 = `k2b-app-workspace__nav-tree ${props.class ?? ""}`,
2283
2422
  _v$85 = props.ariaLabel;
2284
- _v$84 !== _p$.e && _$className(_el$105, _p$.e = _v$84);
2285
- _v$85 !== _p$.t && _$setAttribute(_el$105, "aria-label", _p$.t = _v$85);
2423
+ _v$84 !== _p$.e && _$className(_el$108, _p$.e = _v$84);
2424
+ _v$85 !== _p$.t && _$setAttribute(_el$108, "aria-label", _p$.t = _v$85);
2286
2425
  return _p$;
2287
2426
  }, {
2288
2427
  e: undefined,
2289
2428
  t: undefined
2290
2429
  });
2291
- return _el$105;
2430
+ return _el$108;
2292
2431
  })();
2293
2432
  };
2294
2433
  AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
2295
2434
  const AppWorkspaceSidebarIconGrid = props => (() => {
2296
- var _el$106 = _$getNextElement(_tmpl$52),
2297
- _el$108 = _el$106.firstChild,
2298
- [_el$109, _co$15] = _$getNextMarker(_el$108.nextSibling),
2299
- _el$107 = _el$109.nextSibling;
2300
- _$spread(_el$106, _$mergeProps({
2435
+ var _el$109 = _$getNextElement(_tmpl$53),
2436
+ _el$111 = _el$109.firstChild,
2437
+ [_el$112, _co$16] = _$getNextMarker(_el$111.nextSibling),
2438
+ _el$110 = _el$112.nextSibling;
2439
+ _$spread(_el$109, _$mergeProps({
2301
2440
  get ["class"]() {
2302
2441
  return `k2b-app-workspace__sidebar-icon-grid-wrap ${props.class ?? ""}`;
2303
2442
  }
2304
2443
  }, () => modeAttrs(props.sidebarMode)), false, true);
2305
- _$insert(_el$106, _$createComponent(Show, {
2444
+ _$insert(_el$109, _$createComponent(Show, {
2306
2445
  get when() {
2307
2446
  return props.title;
2308
2447
  },
2309
2448
  children: title => (() => {
2310
- var _el$110 = _$getNextElement(_tmpl$23);
2311
- _$insert(_el$110, title);
2312
- return _el$110;
2449
+ var _el$113 = _$getNextElement(_tmpl$24);
2450
+ _$insert(_el$113, title);
2451
+ return _el$113;
2313
2452
  })()
2314
- }), _el$109, _co$15);
2315
- _$insert(_el$107, () => props.children);
2316
- _$effect(() => _$setAttribute(_el$107, "data-columns", props.columns ?? 2));
2453
+ }), _el$112, _co$16);
2454
+ _$insert(_el$110, () => props.children);
2455
+ _$effect(() => _$setAttribute(_el$110, "data-columns", props.columns ?? 2));
2317
2456
  _$runHydrationEvents();
2318
- return _el$106;
2457
+ return _el$109;
2319
2458
  })();
2320
2459
  const AppWorkspaceSidebarIconAction = props => {
2460
+ let target;
2321
2461
  const content = (() => {
2322
- var _el$111 = _$getNextElement(_tmpl$53);
2323
- _$effect(() => _$className(_el$111, iconClass(props.icon)));
2324
- return _el$111;
2462
+ var _el$114 = _$getNextElement(_tmpl$54);
2463
+ _$effect(() => _$className(_el$114, iconClass(props.icon)));
2464
+ return _el$114;
2325
2465
  })();
2326
2466
  const attrs = () => ({
2467
+ ref: element => target = element,
2327
2468
  class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
2328
- title: props.label,
2329
2469
  "aria-label": props.label,
2330
2470
  "data-tone": props.tone,
2331
2471
  style: {
@@ -2333,9 +2473,21 @@ const AppWorkspaceSidebarIconAction = props => {
2333
2473
  },
2334
2474
  ...modeAttrs(props.sidebarMode)
2335
2475
  });
2336
- if (!props.href || props.disabled) return (() => {
2337
- var _el$112 = _$getNextElement(_tmpl$32);
2338
- _$spread(_el$112, _$mergeProps(attrs, {
2476
+ // The icon never shows its label, so the hint names it in every state; in the collapsed rail it sits beside the
2477
+ // icon like the rail's other entries.
2478
+ const hint = _$createComponent(Tooltip, {
2479
+ target: () => target,
2480
+ get content() {
2481
+ return props.label;
2482
+ },
2483
+ get placement() {
2484
+ return inSidebarRail(target) ? "right" : undefined;
2485
+ },
2486
+ delay: 0
2487
+ });
2488
+ if (!props.href || props.disabled) return [(() => {
2489
+ var _el$115 = _$getNextElement(_tmpl$33);
2490
+ _$spread(_el$115, _$mergeProps(attrs, {
2339
2491
  get disabled() {
2340
2492
  return props.disabled;
2341
2493
  },
@@ -2343,13 +2495,13 @@ const AppWorkspaceSidebarIconAction = props => {
2343
2495
  return props.onClick;
2344
2496
  }
2345
2497
  }), false, true);
2346
- _$insert(_el$112, content);
2498
+ _$insert(_el$115, content);
2347
2499
  _$runHydrationEvents();
2348
- return _el$112;
2349
- })();
2350
- if (props.navigation !== "enhanced" || !props.onNavigate) return (() => {
2351
- var _el$113 = _$getNextElement(_tmpl$33);
2352
- _$spread(_el$113, _$mergeProps({
2500
+ return _el$115;
2501
+ })(), hint];
2502
+ if (props.navigation !== "enhanced" || !props.onNavigate) return [(() => {
2503
+ var _el$116 = _$getNextElement(_tmpl$34);
2504
+ _$spread(_el$116, _$mergeProps({
2353
2505
  get href() {
2354
2506
  return props.href;
2355
2507
  }
@@ -2358,11 +2510,11 @@ const AppWorkspaceSidebarIconAction = props => {
2358
2510
  return props.onClick;
2359
2511
  }
2360
2512
  }), false, true);
2361
- _$insert(_el$113, content);
2513
+ _$insert(_el$116, content);
2362
2514
  _$runHydrationEvents();
2363
- return _el$113;
2364
- })();
2365
- return _$createComponent(Link, _$mergeProps({
2515
+ return _el$116;
2516
+ })(), hint];
2517
+ return [_$createComponent(Link, _$mergeProps({
2366
2518
  get href() {
2367
2519
  return props.href;
2368
2520
  }
@@ -2380,7 +2532,7 @@ const AppWorkspaceSidebarIconAction = props => {
2380
2532
  return props.onClick;
2381
2533
  },
2382
2534
  children: content
2383
- }));
2535
+ })), hint];
2384
2536
  };
2385
2537
  /**
2386
2538
  * The row above the work area. From 48 to 64 rem it holds the button that
@@ -2418,42 +2570,42 @@ function AppWorkspaceHead(props) {
2418
2570
  };
2419
2571
  const resetContent = () => filters().reset;
2420
2572
  const primaryContent = () => [(() => {
2421
- var _el$114 = _$getNextElement(_tmpl$53);
2422
- _$effect(() => _$className(_el$114, props.head?.primary?.icon));
2423
- return _el$114;
2573
+ var _el$117 = _$getNextElement(_tmpl$54);
2574
+ _$effect(() => _$className(_el$117, props.head?.primary?.icon));
2575
+ return _el$117;
2424
2576
  })(), (() => {
2425
- var _el$115 = _$getNextElement(_tmpl$54);
2426
- _$insert(_el$115, () => props.head?.primary?.label);
2427
- return _el$115;
2577
+ var _el$118 = _$getNextElement(_tmpl$55);
2578
+ _$insert(_el$118, () => props.head?.primary?.label);
2579
+ return _el$118;
2428
2580
  })()];
2429
2581
  return (() => {
2430
- var _el$116 = _$getNextElement(_tmpl$60),
2431
- _el$142 = _el$116.firstChild,
2432
- [_el$143, _co$25] = _$getNextMarker(_el$142.nextSibling),
2433
- _el$117 = _el$143.nextSibling,
2434
- _el$127 = _el$117.firstChild,
2435
- [_el$128, _co$18] = _$getNextMarker(_el$127.nextSibling),
2436
- _el$129 = _el$128.nextSibling,
2437
- [_el$130, _co$19] = _$getNextMarker(_el$129.nextSibling),
2438
- _el$131 = _el$130.nextSibling,
2439
- [_el$132, _co$20] = _$getNextMarker(_el$131.nextSibling),
2440
- _el$133 = _el$132.nextSibling,
2441
- [_el$134, _co$21] = _$getNextMarker(_el$133.nextSibling),
2442
- _el$135 = _el$134.nextSibling,
2443
- [_el$136, _co$22] = _$getNextMarker(_el$135.nextSibling),
2444
- _el$144 = _el$117.nextSibling,
2445
- [_el$145, _co$26] = _$getNextMarker(_el$144.nextSibling);
2446
- _$insert(_el$116, _$createComponent(Show, {
2582
+ var _el$119 = _$getNextElement(_tmpl$61),
2583
+ _el$145 = _el$119.firstChild,
2584
+ [_el$146, _co$26] = _$getNextMarker(_el$145.nextSibling),
2585
+ _el$120 = _el$146.nextSibling,
2586
+ _el$130 = _el$120.firstChild,
2587
+ [_el$131, _co$19] = _$getNextMarker(_el$130.nextSibling),
2588
+ _el$132 = _el$131.nextSibling,
2589
+ [_el$133, _co$20] = _$getNextMarker(_el$132.nextSibling),
2590
+ _el$134 = _el$133.nextSibling,
2591
+ [_el$135, _co$21] = _$getNextMarker(_el$134.nextSibling),
2592
+ _el$136 = _el$135.nextSibling,
2593
+ [_el$137, _co$22] = _$getNextMarker(_el$136.nextSibling),
2594
+ _el$138 = _el$137.nextSibling,
2595
+ [_el$139, _co$23] = _$getNextMarker(_el$138.nextSibling),
2596
+ _el$147 = _el$120.nextSibling,
2597
+ [_el$148, _co$27] = _$getNextMarker(_el$147.nextSibling);
2598
+ _$insert(_el$119, _$createComponent(Show, {
2447
2599
  get when() {
2448
2600
  return mobilePane();
2449
2601
  },
2450
2602
  children: pane => (() => {
2451
- var _el$146 = _$getNextElement(_tmpl$6);
2452
- _$effect(() => _$setProperty(_el$146, "innerHTML", mobilePaneRule(pane())));
2453
- return _el$146;
2603
+ var _el$149 = _$getNextElement(_tmpl$7);
2604
+ _$effect(() => _$setProperty(_el$149, "innerHTML", mobilePaneRule(pane())));
2605
+ return _el$149;
2454
2606
  })()
2455
- }), _el$143, _co$25);
2456
- _$insert(_el$117, _$createComponent(IconButton, {
2607
+ }), _el$146, _co$26);
2608
+ _$insert(_el$120, _$createComponent(IconButton, {
2457
2609
  "class": "k2b-app-workspace__head-toggle",
2458
2610
  get label() {
2459
2611
  return messages().showNavigation;
@@ -2464,10 +2616,10 @@ function AppWorkspaceHead(props) {
2464
2616
  "aria-expanded": "false",
2465
2617
  "data-app-workspace-sidebar-toggle": "",
2466
2618
  get children() {
2467
- return _$getNextElement(_tmpl$55);
2619
+ return _$getNextElement(_tmpl$56);
2468
2620
  }
2469
- }), _el$128, _co$18);
2470
- _$insert(_el$117, _$createComponent(Show, {
2621
+ }), _el$131, _co$19);
2622
+ _$insert(_el$120, _$createComponent(Show, {
2471
2623
  get when() {
2472
2624
  return trail();
2473
2625
  },
@@ -2478,34 +2630,34 @@ function AppWorkspaceHead(props) {
2478
2630
  as: "p",
2479
2631
  fallback: true
2480
2632
  }), (() => {
2481
- var _el$147 = _$getNextElement(_tmpl$61);
2482
- _$setAttribute(_el$147, "data-k2b-server", isServer ? "" : undefined);
2483
- _$insert(_el$147, () => current().title);
2484
- return _el$147;
2633
+ var _el$150 = _$getNextElement(_tmpl$62);
2634
+ _$setAttribute(_el$150, "data-k2b-server", isServer ? "" : undefined);
2635
+ _$insert(_el$150, () => current().title);
2636
+ return _el$150;
2485
2637
  })()]
2486
- }), _el$130, _co$19);
2487
- _$insert(_el$117, _$createComponent(Show, {
2638
+ }), _el$133, _co$20);
2639
+ _$insert(_el$120, _$createComponent(Show, {
2488
2640
  get when() {
2489
2641
  return resolvedViews.toArray().some(Boolean);
2490
2642
  },
2491
2643
  get children() {
2492
- var _el$119 = _$getNextElement(_tmpl$56);
2493
- _$insert(_el$119, resolvedViews);
2494
- return _el$119;
2644
+ var _el$122 = _$getNextElement(_tmpl$57);
2645
+ _$insert(_el$122, resolvedViews);
2646
+ return _el$122;
2495
2647
  }
2496
- }), _el$132, _co$20);
2497
- _$insert(_el$117, _$createComponent(Show, {
2648
+ }), _el$135, _co$21);
2649
+ _$insert(_el$120, _$createComponent(Show, {
2498
2650
  get when() {
2499
2651
  return resolvedFilters.toArray().some(Boolean) || props.head?.filtered;
2500
2652
  },
2501
2653
  get children() {
2502
- var _el$120 = _$getNextElement(_tmpl$57),
2503
- _el$121 = _el$120.firstChild,
2504
- [_el$122, _co$16] = _$getNextMarker(_el$121.nextSibling),
2505
- _el$123 = _el$122.nextSibling,
2506
- [_el$124, _co$17] = _$getNextMarker(_el$123.nextSibling);
2507
- _$insert(_el$120, resolvedFilters, _el$122, _co$16);
2508
- _$insert(_el$120, _$createComponent(Show, {
2654
+ var _el$123 = _$getNextElement(_tmpl$58),
2655
+ _el$124 = _el$123.firstChild,
2656
+ [_el$125, _co$17] = _$getNextMarker(_el$124.nextSibling),
2657
+ _el$126 = _el$125.nextSibling,
2658
+ [_el$127, _co$18] = _$getNextMarker(_el$126.nextSibling);
2659
+ _$insert(_el$123, resolvedFilters, _el$125, _co$17);
2660
+ _$insert(_el$123, _$createComponent(Show, {
2509
2661
  get when() {
2510
2662
  return props.head?.filtered;
2511
2663
  },
@@ -2545,34 +2697,34 @@ function AppWorkspaceHead(props) {
2545
2697
  })
2546
2698
  });
2547
2699
  }
2548
- }), _el$124, _co$17);
2549
- _$effect(() => _$setAttribute(_el$120, "aria-label", filters().filters));
2550
- return _el$120;
2700
+ }), _el$127, _co$18);
2701
+ _$effect(() => _$setAttribute(_el$123, "aria-label", filters().filters));
2702
+ return _el$123;
2551
2703
  }
2552
- }), _el$134, _co$21);
2553
- _$insert(_el$117, _$createComponent(Show, {
2704
+ }), _el$137, _co$22);
2705
+ _$insert(_el$120, _$createComponent(Show, {
2554
2706
  get when() {
2555
2707
  return _$memo(() => !!props.head?.filtered)() && resolvedCount.toArray().some(value => value !== undefined && value !== null && value !== false);
2556
2708
  },
2557
2709
  get children() {
2558
- var _el$125 = _$getNextElement(_tmpl$58),
2559
- _el$126 = _el$125.firstChild;
2560
- _$insert(_el$126, resolvedCount);
2561
- return _el$125;
2710
+ var _el$128 = _$getNextElement(_tmpl$59),
2711
+ _el$129 = _el$128.firstChild;
2712
+ _$insert(_el$129, resolvedCount);
2713
+ return _el$128;
2562
2714
  }
2563
- }), _el$136, _co$22);
2564
- _$insert(_el$116, _$createComponent(Show, {
2715
+ }), _el$139, _co$23);
2716
+ _$insert(_el$119, _$createComponent(Show, {
2565
2717
  get when() {
2566
2718
  return resolvedActions.toArray().some(Boolean) || props.head?.primary;
2567
2719
  },
2568
2720
  get children() {
2569
- var _el$137 = _$getNextElement(_tmpl$59),
2570
- _el$138 = _el$137.firstChild,
2571
- [_el$139, _co$23] = _$getNextMarker(_el$138.nextSibling),
2572
- _el$140 = _el$139.nextSibling,
2573
- [_el$141, _co$24] = _$getNextMarker(_el$140.nextSibling);
2574
- _$insert(_el$137, resolvedActions, _el$139, _co$23);
2575
- _$insert(_el$137, _$createComponent(Show, {
2721
+ var _el$140 = _$getNextElement(_tmpl$60),
2722
+ _el$141 = _el$140.firstChild,
2723
+ [_el$142, _co$24] = _$getNextMarker(_el$141.nextSibling),
2724
+ _el$143 = _el$142.nextSibling,
2725
+ [_el$144, _co$25] = _$getNextMarker(_el$143.nextSibling);
2726
+ _$insert(_el$140, resolvedActions, _el$142, _co$24);
2727
+ _$insert(_el$140, _$createComponent(Show, {
2576
2728
  get when() {
2577
2729
  return props.head?.primary;
2578
2730
  },
@@ -2610,24 +2762,24 @@ function AppWorkspaceHead(props) {
2610
2762
  }
2611
2763
  })
2612
2764
  })
2613
- }), _el$141, _co$24);
2614
- return _el$137;
2765
+ }), _el$144, _co$25);
2766
+ return _el$140;
2615
2767
  }
2616
- }), _el$145, _co$26);
2768
+ }), _el$148, _co$27);
2617
2769
  _$effect(_p$ => {
2618
2770
  var _v$86 = trail()?.ancestors.length ? "up" : trail() ? "title" : undefined,
2619
2771
  _v$87 = props.head ? "" : undefined,
2620
2772
  _v$88 = mobilePane();
2621
- _v$86 !== _p$.e && _$setAttribute(_el$116, "data-trail", _p$.e = _v$86);
2622
- _v$87 !== _p$.t && _$setAttribute(_el$116, "data-row", _p$.t = _v$87);
2623
- _v$88 !== _p$.a && _$setAttribute(_el$116, "data-workspace-head-pane", _p$.a = _v$88);
2773
+ _v$86 !== _p$.e && _$setAttribute(_el$119, "data-trail", _p$.e = _v$86);
2774
+ _v$87 !== _p$.t && _$setAttribute(_el$119, "data-row", _p$.t = _v$87);
2775
+ _v$88 !== _p$.a && _$setAttribute(_el$119, "data-workspace-head-pane", _p$.a = _v$88);
2624
2776
  return _p$;
2625
2777
  }, {
2626
2778
  e: undefined,
2627
2779
  t: undefined,
2628
2780
  a: undefined
2629
2781
  });
2630
- return _el$116;
2782
+ return _el$119;
2631
2783
  })();
2632
2784
  }
2633
2785
  const AppWorkspace = props => {
@@ -2680,10 +2832,10 @@ const AppWorkspace = props => {
2680
2832
  return _$createComponent(WorkspaceContext.Provider, {
2681
2833
  value: workspace,
2682
2834
  get children() {
2683
- var _el$148 = _$getNextElement(_tmpl$62);
2835
+ var _el$151 = _$getNextElement(_tmpl$63);
2684
2836
  var _ref$8 = root;
2685
- typeof _ref$8 === "function" ? _$use(_ref$8, _el$148) : root = _el$148;
2686
- _$insert(_el$148, contents);
2837
+ typeof _ref$8 === "function" ? _$use(_ref$8, _el$151) : root = _el$151;
2838
+ _$insert(_el$151, contents);
2687
2839
  _$effect(_p$ => {
2688
2840
  var _v$89 = `k2b-app-workspace ${props.class ?? ""}`,
2689
2841
  _v$90 = props.mobileSurface,
@@ -2691,12 +2843,12 @@ const AppWorkspace = props => {
2691
2843
  _v$92 = initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed),
2692
2844
  _v$93 = props.resizable === false ? "false" : "true",
2693
2845
  _v$94 = appWorkspaceLayoutStyle(initialLayoutState());
2694
- _v$89 !== _p$.e && _$className(_el$148, _p$.e = _v$89);
2695
- _v$90 !== _p$.t && _$setAttribute(_el$148, "data-mobile-surface", _p$.t = _v$90);
2696
- _v$91 !== _p$.a && _$setAttribute(_el$148, "data-flat", _p$.a = _v$91);
2697
- _v$92 !== _p$.o && _$setAttribute(_el$148, "data-sidebar-collapsed", _p$.o = _v$92);
2698
- _v$93 !== _p$.i && _$setAttribute(_el$148, "data-workspace-resizable", _p$.i = _v$93);
2699
- _p$.n = _$style(_el$148, _v$94, _p$.n);
2846
+ _v$89 !== _p$.e && _$className(_el$151, _p$.e = _v$89);
2847
+ _v$90 !== _p$.t && _$setAttribute(_el$151, "data-mobile-surface", _p$.t = _v$90);
2848
+ _v$91 !== _p$.a && _$setAttribute(_el$151, "data-flat", _p$.a = _v$91);
2849
+ _v$92 !== _p$.o && _$setAttribute(_el$151, "data-sidebar-collapsed", _p$.o = _v$92);
2850
+ _v$93 !== _p$.i && _$setAttribute(_el$151, "data-workspace-resizable", _p$.i = _v$93);
2851
+ _p$.n = _$style(_el$151, _v$94, _p$.n);
2700
2852
  return _p$;
2701
2853
  }, {
2702
2854
  e: undefined,
@@ -2706,7 +2858,7 @@ const AppWorkspace = props => {
2706
2858
  i: undefined,
2707
2859
  n: undefined
2708
2860
  });
2709
- return _el$148;
2861
+ return _el$151;
2710
2862
  }
2711
2863
  });
2712
2864
  }
@@ -2722,10 +2874,10 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
2722
2874
  });
2723
2875
  AppWorkspace.Head = AppWorkspaceHeadSlot;
2724
2876
  AppWorkspace.Content = props => (() => {
2725
- var _el$149 = _$getNextElement(_tmpl$5);
2726
- _$insert(_el$149, () => props.children);
2727
- _$effect(() => _$className(_el$149, `k2b-app-workspace__content ${props.class ?? ""}`));
2728
- return _el$149;
2877
+ var _el$152 = _$getNextElement(_tmpl$6);
2878
+ _$insert(_el$152, () => props.children);
2879
+ _$effect(() => _$className(_el$152, `k2b-app-workspace__content ${props.class ?? ""}`));
2880
+ return _el$152;
2729
2881
  })();
2730
2882
  AppWorkspace.Main = AppWorkspaceMain;
2731
2883
  AppWorkspace.MainPane = AppWorkspaceMainPane;