@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
@@ -8,70 +8,72 @@ import { ssrStyle as _$ssrStyle } from "solid-js/web";
8
8
  import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
9
9
  import { escape as _$escape } from "solid-js/web";
10
10
  var _tmpl$ = ["<button type=\"button\" class=\"k2b-app-workspace__resize\" role=\"separator\"", " style=\"", "\"><span aria-hidden=\"true\"></span></button>"],
11
- _tmpl$2 = ["<p class=\"k2b-truncate-fade\">", "</p>"],
12
- _tmpl$3 = ["<div class=\"k2b-app-workspace__level-actions\">", "</div>"],
13
- _tmpl$4 = ["<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>", "</header>"],
14
- _tmpl$5 = ["<style>", "</style>"],
15
- _tmpl$6 = ["<div class=\"k2b-app-workspace__main-primary\" data-workspace-main-region=\"main\"", ">", "</div>"],
16
- _tmpl$7 = ["<section", " class=\"", "\"", " style=\"", "\">", "</section>"],
17
- _tmpl$8 = "<i class=\"ti ti-chevron-left\" aria-hidden=\"true\"></i>",
18
- _tmpl$9 = ["<div class=\"k2b-app-workspace__level-body\"", ">", "</div>"],
19
- _tmpl$0 = "<i class=\"ti ti-layout-sidebar-right\" aria-hidden=\"true\"></i>",
20
- _tmpl$1 = ["<aside", " class=\"", "\"", "", " style=\"", "\"><button type=\"button\" class=\"k2b-app-workspace__detail-grabber\"", " aria-pressed=\"false\"><span aria-hidden=\"true\"></span></button>", "</aside>"],
21
- _tmpl$10 = ["<aside", " class=\"", "\"", "", " style=\"", "\">", "</aside>"],
22
- _tmpl$11 = ["<nav class=\"k2b-app-workspace__sidebar-sheet\"", " style=\"", "\">", "</nav>"],
23
- _tmpl$12 = ["<div class=\"k2b-app-workspace__sidebar-desktop\"", ">", "</div>"],
24
- _tmpl$13 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-all\" aria-haspopup=\"dialog\"", "><span>", "</span><i class=\"ti ti-chevron-down\" aria-hidden=\"true\"></i></button>"],
25
- _tmpl$14 = ["<script>", "</script>"],
26
- _tmpl$15 = ["<span aria-hidden=\"true\"><i", "></i></span>"],
27
- _tmpl$16 = ["<span class=\"k2b-app-workspace__sidebar-section-count\">", "</span>"],
28
- _tmpl$17 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-section-toggle\"", ">", "<i", " aria-hidden=\"true\"></i></button>"],
29
- _tmpl$18 = ["<div class=\"k2b-app-workspace__sidebar-section-actions\">", "</div>"],
30
- _tmpl$19 = ["<header class=\"k2b-app-workspace__sidebar-section-header\">", "", "</header>"],
31
- _tmpl$20 = ["<div", "", " class=\"k2b-app-workspace__sidebar-section-content\">", "</div>"],
32
- _tmpl$21 = ["<h2>", "</h2>"],
33
- _tmpl$22 = ["<div class=\"k2b-app-workspace__sidebar-item-actions\"", ">", "</div>"],
34
- _tmpl$23 = "<span class=\"k2b-app-workspace__sidebar-status-mention\" aria-hidden=\"true\">@</span>",
35
- _tmpl$24 = "<span class=\"k2b-app-workspace__sidebar-status-muted\" aria-hidden=\"true\"><i class=\"ti ti-bell-off\"></i></span>",
36
- _tmpl$25 = ["<span class=\"k2b-app-workspace__sidebar-status-count\"", ">", "</span>"],
37
- _tmpl$26 = ["<span class=\"k2b-app-workspace__sidebar-status-unread\" aria-hidden=\"true\">", "</span>"],
38
- _tmpl$27 = ["<span class=\"k2b-sr-only\">, ", "</span>"],
39
- _tmpl$28 = ["<span class=\"k2b-app-workspace__sidebar-status\"", ">", "</span>"],
40
- _tmpl$29 = "<span class=\"k2b-app-workspace__sidebar-status-dot\"></span>",
41
- _tmpl$30 = ["<span", " aria-hidden=\"true\">", "</span>"],
42
- _tmpl$31 = ["<span class=\"k2b-app-workspace__sidebar-item-context-meta\">", "</span>"],
43
- _tmpl$32 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label k2b-truncate-fade\">", "</span>", "</span>"],
44
- _tmpl$33 = ["<span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span>"],
45
- _tmpl$34 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\">", "<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span>", "</span>"],
46
- _tmpl$35 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
47
- _tmpl$36 = ["<i", "></i>"],
48
- _tmpl$37 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
49
- _tmpl$38 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
50
- _tmpl$39 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\"><span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span><span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span></span>"],
51
- _tmpl$40 = ["<span class=\"", "\"", ">", "</span>"],
52
- _tmpl$41 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
53
- _tmpl$42 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span>"],
54
- _tmpl$43 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
55
- _tmpl$44 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", " style=\"", "\">", "", "</div>"],
56
- _tmpl$45 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
57
- _tmpl$46 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
58
- _tmpl$47 = ["<i", " aria-hidden=\"true\"></i>"],
59
- _tmpl$48 = ["<span class=\"k2b-app-workspace__head-primary-label\">", "</span>"],
60
- _tmpl$49 = "<i class=\"ti ti-layout-sidebar\" aria-hidden=\"true\"></i>",
61
- _tmpl$50 = ["<div class=\"k2b-app-workspace__head-views\">", "</div>"],
62
- _tmpl$51 = ["<div class=\"k2b-app-workspace__head-filters\" role=\"group\"", ">", "", "</div>"],
63
- _tmpl$52 = ["<span class=\"k2b-app-workspace__head-count\"><span>", "</span></span>"],
64
- _tmpl$53 = ["<div class=\"k2b-app-workspace__head-actions\">", "", "</div>"],
65
- _tmpl$54 = ["<div class=\"k2b-app-workspace__head\"", ">", "<div class=\"k2b-app-workspace__head-lead\">", "", "", "", "", "</div>", "</div>"],
66
- _tmpl$55 = ["<h1 class=\"k2b-app-workspace__head-heading\" data-k2b-page-trail-title", ">", "</h1>"],
67
- _tmpl$56 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "</div>"],
68
- _tmpl$57 = ["<div class=\"", "\">", "</div>"];
11
+ _tmpl$2 = ["<span class=\"k2b-app-workspace__level-lead\">", "</span>"],
12
+ _tmpl$3 = ["<p class=\"k2b-truncate-fade\">", "</p>"],
13
+ _tmpl$4 = ["<div class=\"k2b-app-workspace__level-actions\">", "</div>"],
14
+ _tmpl$5 = ["<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>", "</header>"],
15
+ _tmpl$6 = ["<style>", "</style>"],
16
+ _tmpl$7 = ["<div class=\"k2b-app-workspace__main-primary\" data-workspace-main-region=\"main\"", ">", "</div>"],
17
+ _tmpl$8 = ["<section", " class=\"", "\"", " style=\"", "\">", "</section>"],
18
+ _tmpl$9 = "<i class=\"ti ti-chevron-left\" aria-hidden=\"true\"></i>",
19
+ _tmpl$0 = ["<div class=\"k2b-app-workspace__level-body\"", ">", "</div>"],
20
+ _tmpl$1 = "<i class=\"ti ti-layout-sidebar-right\" aria-hidden=\"true\"></i>",
21
+ _tmpl$10 = ["<aside", " class=\"", "\"", "", " style=\"", "\"><button type=\"button\" class=\"k2b-app-workspace__detail-grabber\"", " aria-pressed=\"false\"><span aria-hidden=\"true\"></span></button>", "</aside>"],
22
+ _tmpl$11 = ["<aside", " class=\"", "\"", "", " style=\"", "\">", "</aside>"],
23
+ _tmpl$12 = ["<nav class=\"k2b-app-workspace__sidebar-sheet\"", " style=\"", "\">", "</nav>"],
24
+ _tmpl$13 = ["<div class=\"k2b-app-workspace__sidebar-desktop\"", ">", "</div>"],
25
+ _tmpl$14 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-all\" aria-haspopup=\"dialog\"", "><span>", "</span><i class=\"ti ti-chevron-down\" aria-hidden=\"true\"></i></button>"],
26
+ _tmpl$15 = ["<script>", "</script>"],
27
+ _tmpl$16 = ["<span aria-hidden=\"true\"><i", "></i></span>"],
28
+ _tmpl$17 = ["<span class=\"k2b-app-workspace__sidebar-section-count\">", "</span>"],
29
+ _tmpl$18 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-section-toggle\"", ">", "<i", " aria-hidden=\"true\"></i></button>"],
30
+ _tmpl$19 = ["<div class=\"k2b-app-workspace__sidebar-section-actions\">", "</div>"],
31
+ _tmpl$20 = ["<header class=\"k2b-app-workspace__sidebar-section-header\">", "", "</header>"],
32
+ _tmpl$21 = ["<div", "", " class=\"k2b-app-workspace__sidebar-section-content\">", "</div>"],
33
+ _tmpl$22 = ["<h2>", "</h2>"],
34
+ _tmpl$23 = ["<div class=\"k2b-app-workspace__sidebar-item-actions\"", ">", "</div>"],
35
+ _tmpl$24 = "<span class=\"k2b-app-workspace__sidebar-status-mention\" aria-hidden=\"true\">@</span>",
36
+ _tmpl$25 = "<span class=\"k2b-app-workspace__sidebar-status-muted\" aria-hidden=\"true\"><i class=\"ti ti-bell-off\"></i></span>",
37
+ _tmpl$26 = ["<span class=\"k2b-app-workspace__sidebar-status-count\"", ">", "</span>"],
38
+ _tmpl$27 = ["<span class=\"k2b-app-workspace__sidebar-status-unread\" aria-hidden=\"true\">", "</span>"],
39
+ _tmpl$28 = ["<span class=\"k2b-sr-only\">, ", "</span>"],
40
+ _tmpl$29 = ["<span class=\"k2b-app-workspace__sidebar-status\"", ">", "</span>"],
41
+ _tmpl$30 = "<span class=\"k2b-app-workspace__sidebar-status-dot\"></span>",
42
+ _tmpl$31 = ["<span", " aria-hidden=\"true\">", "</span>"],
43
+ _tmpl$32 = ["<span class=\"k2b-app-workspace__sidebar-item-context-meta\">", "</span>"],
44
+ _tmpl$33 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label k2b-truncate-fade\">", "</span>", "</span>"],
45
+ _tmpl$34 = ["<span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span>"],
46
+ _tmpl$35 = ["<span class=\"k2b-app-workspace__sidebar-item-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>"],
47
+ _tmpl$36 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
48
+ _tmpl$37 = ["<i", "></i>"],
49
+ _tmpl$38 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
50
+ _tmpl$39 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
51
+ _tmpl$40 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\"><span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span><span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span></span>"],
52
+ _tmpl$41 = ["<span class=\"", "\"", ">", "</span>"],
53
+ _tmpl$42 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
54
+ _tmpl$43 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span>"],
55
+ _tmpl$44 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
56
+ _tmpl$45 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", " style=\"", "\">", "", "</div>"],
57
+ _tmpl$46 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
58
+ _tmpl$47 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
59
+ _tmpl$48 = ["<i", " aria-hidden=\"true\"></i>"],
60
+ _tmpl$49 = ["<span class=\"k2b-app-workspace__head-primary-label\">", "</span>"],
61
+ _tmpl$50 = "<i class=\"ti ti-layout-sidebar\" aria-hidden=\"true\"></i>",
62
+ _tmpl$51 = ["<div class=\"k2b-app-workspace__head-views\">", "</div>"],
63
+ _tmpl$52 = ["<div class=\"k2b-app-workspace__head-filters\" role=\"group\"", ">", "", "</div>"],
64
+ _tmpl$53 = ["<span class=\"k2b-app-workspace__head-count\"><span>", "</span></span>"],
65
+ _tmpl$54 = ["<div class=\"k2b-app-workspace__head-actions\">", "", "</div>"],
66
+ _tmpl$55 = ["<div class=\"k2b-app-workspace__head\"", ">", "<div class=\"k2b-app-workspace__head-lead\">", "", "", "", "", "</div>", "</div>"],
67
+ _tmpl$56 = ["<h1 class=\"k2b-app-workspace__head-heading\" data-k2b-page-trail-title", ">", "</h1>"],
68
+ _tmpl$57 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "</div>"],
69
+ _tmpl$58 = ["<div class=\"", "\">", "</div>"];
69
70
  import { Link } from "@k2b/ssr/nav";
70
71
  import { children, createContext, createEffect, createMemo, createRoot, createSignal, createUniqueId, For, getOwner, mergeProps, on, onCleanup, onMount, Show, useContext } from "solid-js";
71
72
  import { Dynamic, isServer } from "solid-js/web";
72
73
  import { Button, ButtonLink, IconButton, IconButtonLink } from "../actions/Button";
73
74
  import { useFilterMessages } from "../actions/filter-messages";
74
75
  import { dialogCore } from "../feedback/dialog-core";
76
+ import { Tooltip } from "../feedback/Tooltip";
75
77
  import { RenderErrorBoundary } from "../internal/render-error";
76
78
  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";
77
79
  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";
@@ -79,11 +81,23 @@ import { appWorkspaceInverseWidthCss, appWorkspaceWidthCss, appWorkspaceWidthTok
79
81
  import BottomSheet, { bottomSheetAdaptiveOptions } from "./BottomSheet";
80
82
  import { PageTitle, usePageTrail } from "./PageTitle";
81
83
  import { SidebarItemPreview } from "./SidebarItemPreview";
84
+ import { inSidebarRail, SidebarRailHint } from "./SidebarRailHint";
82
85
  import { AppWorkspaceSidebarSwitcher } from "./SidebarSwitcher";
83
86
  import { createScrollFade, scrollFadeEdges } from "./scroll-fade";
84
87
  import { rememberSidebarScroll } from "./sidebar-scroll-memory";
85
88
  import { assertStableUiId, assertUniqueStableUiIds } from "./stable-id";
86
89
  import { useWorkspaceMessages } from "./workspace-messages";
90
+ /** The narrowest container of each levels width class, as the stylesheet's breakpoints define them (48rem, 80rem). */
91
+ const LEVEL_CLASS_WIDTH = {
92
+ 1: 0,
93
+ 2: 768,
94
+ 3: 1280
95
+ };
96
+ /** The last shown level's minimum width when the level does not declare one; the stylesheet uses the same value. */
97
+ const LEVEL_LAST_MIN = 320;
98
+ /** The width the last shown level keeps at least: its declared minimum, never below the default. */
99
+ const levelLastMin = minSize => Math.max(minSize ?? 0, LEVEL_LAST_MIN);
100
+ const nonEmptyStyle = style => Object.keys(style).length ? style : undefined;
87
101
  const ResizeContext = createContext(true);
88
102
  /** The enclosing workspace: its head names the sidebar, and a nested workspace leaves the page title to it. */
89
103
  const WorkspaceContext = createContext();
@@ -168,19 +182,27 @@ function LevelHead(props) {
168
182
  // server and the client would then disagree on hydration keys.
169
183
  const description = children(() => props.description);
170
184
  const actions = children(() => props.actions);
171
- return _$ssr(_tmpl$4, _$escape(props.children), _$escape(props.label), _$escape(_$createComponent(Show, {
185
+ const lead = children(() => props.lead);
186
+ return _$ssr(_tmpl$5, _$escape(props.children), _$escape(_$createComponent(Show, {
187
+ get when() {
188
+ return lead();
189
+ },
190
+ get children() {
191
+ return _$ssr(_tmpl$2, _$escape(lead()));
192
+ }
193
+ })), _$escape(props.label), _$escape(_$createComponent(Show, {
172
194
  get when() {
173
195
  return description();
174
196
  },
175
197
  get children() {
176
- return _$ssr(_tmpl$2, _$escape(description()));
198
+ return _$ssr(_tmpl$3, _$escape(description()));
177
199
  }
178
200
  })), _$escape(_$createComponent(Show, {
179
201
  get when() {
180
202
  return actions();
181
203
  },
182
204
  get children() {
183
- return _$ssr(_tmpl$3, _$escape(actions()));
205
+ return _$ssr(_tmpl$4, _$escape(actions()));
184
206
  }
185
207
  })));
186
208
  }
@@ -235,8 +257,20 @@ function AppWorkspaceMain(props) {
235
257
  return open;
236
258
  });
237
259
  const depth = () => Math.max(1, levels().findIndex(pane => pane.props.id === props.level) + 1);
260
+ /** How many of the deepest levels a width class shows: up to its count, as long as their minimum widths fit. */
261
+ const levelCount = widthClass => {
262
+ const all = levels();
263
+ let count = Math.min(widthClass, all.length);
264
+ while (count > 1) {
265
+ const end = Math.max(depth(), count);
266
+ 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);
267
+ if (needed <= LEVEL_CLASS_WIDTH[widthClass]) break;
268
+ count--;
269
+ }
270
+ return count;
271
+ };
238
272
  const levelClasses = (index, kind) => [1, 2, 3].filter(widthClass => {
239
- const count = Math.min(widthClass, levels().length);
273
+ const count = levelCount(widthClass);
240
274
  const end = Math.max(depth(), count);
241
275
  const start = end - count + 1;
242
276
  return kind === "first" ? index === start && index > 1 : kind === "last" ? index === end : kind === "handle" ? index >= start && index + 1 <= end : index >= start && index <= end;
@@ -287,7 +321,7 @@ function AppWorkspaceMain(props) {
287
321
  get when() {
288
322
  return minWidth();
289
323
  },
290
- children: value => _$ssr(_tmpl$5, minWidthRule(value()))
324
+ children: value => _$ssr(_tmpl$6, minWidthRule(value()))
291
325
  }), _$ssrElement("div", _$mergeProps({
292
326
  get ["class"]() {
293
327
  return `k2b-app-workspace__main ${hasPanes() ? "has-panes" : ""} ${props.class ?? ""}`;
@@ -334,7 +368,7 @@ function AppWorkspaceMain(props) {
334
368
  return props.mobilePane ?? (anchor?.type === "pane" ? anchor.slot.props.id : "main");
335
369
  };
336
370
  if (region.type === "primary") {
337
- return _$ssr(_tmpl$6, _$ssrAttribute("data-workspace-mobile-active", activeMobilePane() === "main" ? "true" : "false", false), _$escape(region.children));
371
+ return _$ssr(_tmpl$7, _$ssrAttribute("data-workspace-mobile-active", activeMobilePane() === "main" ? "true" : "false", false), _$escape(region.children));
338
372
  }
339
373
  const pane = region.slot;
340
374
  const levelIndex = () => levels().indexOf(pane) + 1;
@@ -390,11 +424,18 @@ function AppWorkspaceMain(props) {
390
424
  get children() {
391
425
  return handle();
392
426
  }
393
- }), _$ssr(_tmpl$7, _$ssrAttribute("id", _$escape(pane.domId, true), false), `k2b-app-workspace__main-pane ${isAnchor() ? "is-primary" : ""} ${_$escape(pane.props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(pane.props.label, true), false) + _$ssrAttribute("data-workspace-level", levelsMode() ? _$escape(levelIndex(), true) : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-level-shown", _$escape(levelAttr("shown"), true), false) + _$ssrAttribute("data-workspace-level-first", _$escape(levelAttr("first"), true), false) + _$ssrAttribute("data-workspace-level-last", _$escape(levelAttr("last"), true), false) + _$ssrAttribute("data-workspace-main-region", _$escape(pane.props.id, true), false) + _$ssrAttribute("data-workspace-mobile-active", (levelsMode() ? levelClasses(levelIndex(), "shown").split(" ").includes("1") : activeMobilePane() === pane.props.id) ? "true" : "false", false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId, true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-surface", pane.props.surface === "navigation" ? "navigation" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll", !levelsMode() && pane.props.scroll === false ? "false" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-mode", !levelsMode() && pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : _$escape(undefined, true), false), _$ssrStyle(isAnchor() ? undefined : {
394
- // A stored width keeps to this pane's limits before the controller attaches.
395
- "--k2b-workspace-panel-size": `clamp(${minSize()}px, var(${variable}, ${appWorkspaceWidthCss(defaultSize(), "var(--k2b-workspace-width)")}), ${maxSize()}px)`,
396
- "--k2b-workspace-panel-min": `${minSize()}px`
397
- }), levelsMode() ? _$escape([_$createComponent(LevelHead, {
427
+ }), _$ssr(_tmpl$8, _$ssrAttribute("id", _$escape(pane.domId, true), false), `k2b-app-workspace__main-pane ${isAnchor() ? "is-primary" : ""} ${_$escape(pane.props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(pane.props.label, true), false) + _$ssrAttribute("data-workspace-level", levelsMode() ? _$escape(levelIndex(), true) : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-level-shown", _$escape(levelAttr("shown"), true), false) + _$ssrAttribute("data-workspace-level-first", _$escape(levelAttr("first"), true), false) + _$ssrAttribute("data-workspace-level-last", _$escape(levelAttr("last"), true), false) + _$ssrAttribute("data-workspace-main-region", _$escape(pane.props.id, true), false) + _$ssrAttribute("data-workspace-mobile-active", (levelsMode() ? levelClasses(levelIndex(), "shown").split(" ").includes("1") : activeMobilePane() === pane.props.id) ? "true" : "false", false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId, true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-surface", pane.props.surface === "navigation" ? "navigation" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll", !levelsMode() && pane.props.scroll === false ? "false" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-mode", !levelsMode() && pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : _$escape(undefined, true), false), _$ssrStyle(nonEmptyStyle({
428
+ ...(isAnchor() ? {} : {
429
+ // A stored width keeps to this pane's limits before the controller attaches.
430
+ "--k2b-workspace-panel-size": `clamp(${minSize()}px, var(${variable}, ${appWorkspaceWidthCss(defaultSize(), "var(--k2b-workspace-width)")}), ${maxSize()}px)`,
431
+ "--k2b-workspace-panel-min": `${minSize()}px`
432
+ }),
433
+ // The last shown level fills the rest, but never below its minimum; set on every level, so a workspace
434
+ // nested in a wide level does not inherit that minimum.
435
+ ...(levelsMode() ? {
436
+ "--k2b-workspace-level-min": `${levelLastMin(pane.props.minSize)}px`
437
+ } : {})
438
+ })), levelsMode() ? _$escape([_$createComponent(LevelHead, {
398
439
  get label() {
399
440
  return pane.props.label;
400
441
  },
@@ -404,6 +445,9 @@ function AppWorkspaceMain(props) {
404
445
  get actions() {
405
446
  return pane.props.actions;
406
447
  },
448
+ get lead() {
449
+ return pane.props.lead;
450
+ },
407
451
  get children() {
408
452
  return _$createComponent(Show, {
409
453
  get when() {
@@ -427,13 +471,13 @@ function AppWorkspaceMain(props) {
427
471
  return props.onLevelNavigate ? navigateBack : undefined;
428
472
  },
429
473
  get children() {
430
- return _$ssr(_tmpl$8);
474
+ return _$ssr(_tmpl$9);
431
475
  }
432
476
  });
433
477
  }
434
478
  });
435
479
  }
436
- }), _$ssr(_tmpl$9, _$ssrAttribute("data-scroll", pane.props.scroll === false ? "false" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-mode", pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : _$escape(undefined, true), false), _$escape(pane.props.children))]) : _$escape(pane.props.children)), _$createComponent(Show, {
480
+ }), _$ssr(_tmpl$0, _$ssrAttribute("data-scroll", pane.props.scroll === false ? "false" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-mode", pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : _$escape(undefined, true), false), _$escape(pane.props.children))]) : _$escape(pane.props.children)), _$createComponent(Show, {
437
481
  get when() {
438
482
  return _$memo(() => !!resizable())() && before();
439
483
  },
@@ -504,7 +548,7 @@ function AppWorkspaceDetail(props) {
504
548
  aside?.removeEventListener(APP_WORKSPACE_DETAIL_STEP_EVENT, step);
505
549
  });
506
550
  });
507
- return [_$ssr(_tmpl$5, workspaceRule()), _$createComponent(Button, {
551
+ return [_$ssr(_tmpl$6, workspaceRule()), _$createComponent(Button, {
508
552
  type: "button",
509
553
  variant: "ghost",
510
554
  get ["aria-controls"]() {
@@ -520,7 +564,7 @@ function AppWorkspaceDetail(props) {
520
564
  },
521
565
  "class": "k2b-app-workspace__detail-toggle",
522
566
  get children() {
523
- return [_$ssr(_tmpl$0), workspaceMessages().details];
567
+ return [_$ssr(_tmpl$1), workspaceMessages().details];
524
568
  }
525
569
  }), _$createComponent(Show, {
526
570
  get when() {
@@ -551,7 +595,7 @@ function AppWorkspaceDetail(props) {
551
595
  }
552
596
  });
553
597
  }
554
- }), _$ssr(_tmpl$1, _$ssrAttribute("id", _$escape(domId(), true), false), `k2b-app-workspace__detail ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-width", _$escape(props.width ?? "md", true), false) + _$ssrAttribute("data-workspace-detail-phone", props.phone === "page" ? "page" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-choice", props.openOnChoice === false ? "request" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId(), true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-workspace-detail-reopen", props.onOpen ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-closable", props.onClose ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-steppable", props.onStep ? "true" : _$escape(undefined, true), false), _$ssrAttribute("hidden", !props.open || props.available === false, true), _$ssrStyle({
598
+ }), _$ssr(_tmpl$10, _$ssrAttribute("id", _$escape(domId(), true), false), `k2b-app-workspace__detail ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-width", _$escape(props.width ?? "md", true), false) + _$ssrAttribute("data-workspace-detail-phone", props.phone === "page" ? "page" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-choice", props.openOnChoice === false ? "request" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId(), true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-workspace-detail-reopen", props.onOpen ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-closable", props.onClose ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-steppable", props.onStep ? "true" : _$escape(undefined, true), false), _$ssrAttribute("hidden", !props.open || props.available === false, true), _$ssrStyle({
555
599
  ...sizeStyle(),
556
600
  "view-transition-name": props.viewTransitionName
557
601
  }), _$ssrAttribute("aria-label", _$escape(workspaceMessages().detailFullHeight, true), false), _$escape(props.children))];
@@ -602,7 +646,7 @@ function AppWorkspaceBottomDrawer(props) {
602
646
  }
603
647
  });
604
648
  }
605
- }), _$ssr(_tmpl$10, _$ssrAttribute("id", _$escape(domId(), true), false), `k2b-app-workspace__drawer ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-height", _$escape(props.height ?? "md", true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId(), true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false), _$ssrAttribute("hidden", !props.open, true), _$ssrStyleProperty("--k2b-workspace-panel-size:", `var(${_$escape(variable(), true)}, ${_$escape(defaultHeight(), true)}px)`) + _$ssrStyleProperty(";view-transition-name:", _$escape(props.viewTransitionName, true)), _$escape(props.children))];
649
+ }), _$ssr(_tmpl$11, _$ssrAttribute("id", _$escape(domId(), true), false), `k2b-app-workspace__drawer ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-height", _$escape(props.height ?? "md", true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId(), true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false), _$ssrAttribute("hidden", !props.open, true), _$ssrStyleProperty("--k2b-workspace-panel-size:", `var(${_$escape(variable(), true)}, ${_$escape(defaultHeight(), true)}px)`) + _$ssrStyleProperty(";view-transition-name:", _$escape(props.viewTransitionName, true)), _$escape(props.children))];
606
650
  }
607
651
  function AppWorkspaceSidebar(props) {
608
652
  const rootResizable = useContext(ResizeContext);
@@ -687,7 +731,7 @@ function AppWorkspaceSidebar(props) {
687
731
  console.error("AppWorkspace.Sidebar: write the sidebar children as JSX inside AppWorkspace.Sidebar so they can render a second time in the All sheet; pre-resolved children cannot be reused.");
688
732
  return null;
689
733
  }
690
- return _$ssr(_tmpl$11, _$ssrAttribute("aria-label", _$escape(props.label, true), false), _$ssrStyle(accent), _$escape(resolved()));
734
+ return _$ssr(_tmpl$12, _$ssrAttribute("aria-label", _$escape(props.label, true), false), _$ssrStyle(accent), _$escape(resolved()));
691
735
  }
692
736
  });
693
737
  }
@@ -754,14 +798,14 @@ function AppWorkspaceSidebar(props) {
754
798
  return !props.hidden;
755
799
  },
756
800
  get children() {
757
- return [_$ssr(_tmpl$12, _$ssrAttribute("data-scroll-fade-mode", stacked() ? "both" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-axis", stacked() ? "horizontal" : _$escape(undefined, true), false), _$escape(desktop()?.children)), _$createComponent(Show, {
801
+ return [_$ssr(_tmpl$13, _$ssrAttribute("data-scroll-fade-mode", stacked() ? "both" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-axis", stacked() ? "horizontal" : _$escape(undefined, true), false), _$escape(desktop()?.children)), _$createComponent(Show, {
758
802
  get when() {
759
803
  return stacked();
760
804
  },
761
805
  get children() {
762
- return [_$ssr(_tmpl$13, _$ssrAttribute("aria-expanded", _$escape(sheetOpen(), true), false) + _$ssrAttribute("aria-label", props.label ? _$escape(workspaceMessages().sidebarAllLabel({
806
+ return [_$ssr(_tmpl$14, _$ssrAttribute("aria-expanded", _$escape(sheetOpen(), true), false) + _$ssrAttribute("aria-label", props.label ? _$escape(workspaceMessages().sidebarAllLabel({
763
807
  label: props.label
764
- }), true) : _$escape(undefined, true), false), _$escape(workspaceMessages().sidebarAll)), _$ssr(_tmpl$14, CHIP_ROW_SCRIPT)];
808
+ }), true) : _$escape(undefined, true), false), _$escape(workspaceMessages().sidebarAll)), _$ssr(_tmpl$15, CHIP_ROW_SCRIPT)];
765
809
  }
766
810
  })];
767
811
  }
@@ -841,7 +885,7 @@ const AppWorkspaceSidebarBody = props => {
841
885
  get ["data-scroll-fade-mode"]() {
842
886
  return props.scrollFade !== false ? "both" : undefined;
843
887
  }
844
- }, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), _$escape(props.children), false), _$ssr(_tmpl$14, SIDEBAR_SCROLL_MEMORY_SCRIPT)];
888
+ }, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), _$escape(props.children), false), _$ssr(_tmpl$15, SIDEBAR_SCROLL_MEMORY_SCRIPT)];
845
889
  };
846
890
  const AppWorkspaceSidebarFooter = props => _$ssrElement("footer", _$mergeProps({
847
891
  get ["class"]() {
@@ -857,14 +901,14 @@ const AppWorkspaceSidebarSection = props => {
857
901
  return props.icon;
858
902
  },
859
903
  get children() {
860
- return _$ssr(_tmpl$15, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
904
+ return _$ssr(_tmpl$16, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
861
905
  }
862
906
  }), props.title, _$createComponent(Show, {
863
907
  get when() {
864
908
  return props.count !== undefined;
865
909
  },
866
910
  get children() {
867
- return _$ssr(_tmpl$16, _$escape(props.count));
911
+ return _$ssr(_tmpl$17, _$escape(props.count));
868
912
  }
869
913
  })];
870
914
  return _$ssrElement("section", _$mergeProps({
@@ -879,7 +923,7 @@ const AppWorkspaceSidebarSection = props => {
879
923
  return props.title || props.actions;
880
924
  },
881
925
  get children() {
882
- return _$ssr(_tmpl$19, _$escape(_$createComponent(Show, {
926
+ return _$ssr(_tmpl$20, _$escape(_$createComponent(Show, {
883
927
  get when() {
884
928
  return props.collapsible;
885
929
  },
@@ -889,23 +933,23 @@ const AppWorkspaceSidebarSection = props => {
889
933
  return props.title;
890
934
  },
891
935
  get children() {
892
- return _$ssr(_tmpl$21, _$escape(title()));
936
+ return _$ssr(_tmpl$22, _$escape(title()));
893
937
  }
894
938
  });
895
939
  },
896
940
  get children() {
897
- return _$ssr(_tmpl$17, _$ssrAttribute("aria-expanded", _$escape(open(), true), false) + _$ssrAttribute("aria-controls", _$escape(id, true), false), _$escape(title()), _$ssrAttribute("class", open() ? "ti ti-chevron-down" : "ti ti-chevron-right", false));
941
+ return _$ssr(_tmpl$18, _$ssrAttribute("aria-expanded", _$escape(open(), true), false) + _$ssrAttribute("aria-controls", _$escape(id, true), false), _$escape(title()), _$ssrAttribute("class", open() ? "ti ti-chevron-down" : "ti ti-chevron-right", false));
898
942
  }
899
943
  })), _$escape(_$createComponent(Show, {
900
944
  get when() {
901
945
  return props.actions;
902
946
  },
903
947
  get children() {
904
- return _$ssr(_tmpl$18, _$escape(props.actions));
948
+ return _$ssr(_tmpl$19, _$escape(props.actions));
905
949
  }
906
950
  })));
907
951
  }
908
- })), _$ssr(_tmpl$20, _$ssrAttribute("id", _$escape(id, true), false), _$ssrAttribute("hidden", !open(), true), _$escape(props.children))], false);
952
+ })), _$ssr(_tmpl$21, _$ssrAttribute("id", _$escape(id, true), false), _$ssrAttribute("hidden", !open(), true), _$escape(props.children))], false);
909
953
  };
910
954
  const AppWorkspaceSidebarItemIcon = props => mergeProps({
911
955
  kind: SIDEBAR_ITEM_ICON
@@ -919,7 +963,7 @@ const AppWorkspaceSidebarItemMeta = props => mergeProps({
919
963
  const AppWorkspaceSidebarItemAction = props => mergeProps({
920
964
  kind: SIDEBAR_ITEM_ACTION
921
965
  }, props);
922
- const AppWorkspaceSidebarItemActions = props => _$ssr(_tmpl$22, _$ssrAttribute("data-visibility", props.visibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(props.children));
966
+ const AppWorkspaceSidebarItemActions = props => _$ssr(_tmpl$23, _$ssrAttribute("data-visibility", props.visibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(props.children));
923
967
  const AppWorkspaceSidebarItemStatus = props => {
924
968
  const workspaceMessages = useWorkspaceMessages();
925
969
  const waiting = () => props.waiting && Number.isFinite(props.waiting.count) ? Math.max(0, Math.floor(props.waiting.count)) : null;
@@ -935,7 +979,7 @@ const AppWorkspaceSidebarItemStatus = props => {
935
979
  // The element itself stays when there is nothing to show: empty, it takes no
936
980
  // space, and it still keeps the row's label on one line, so the first count
937
981
  // never re-wraps the label and moves the rows below.
938
- return _$ssr(_tmpl$28, _$ssrAttribute("data-unread", waiting() !== null ? _$escape(undefined, true) : count() ? "count" : dot() ? "dot" : _$escape(undefined, true), false) + _$ssrAttribute("data-waiting", waiting() === null ? _$escape(undefined, true) : waiting() ? "count" : "zero", false), _$escape(_$createComponent(Show, {
982
+ return _$ssr(_tmpl$29, _$ssrAttribute("data-unread", waiting() !== null ? _$escape(undefined, true) : count() ? "count" : dot() ? "dot" : _$escape(undefined, true), false) + _$ssrAttribute("data-waiting", waiting() === null ? _$escape(undefined, true) : waiting() ? "count" : "zero", false), _$escape(_$createComponent(Show, {
939
983
  get when() {
940
984
  return description();
941
985
  },
@@ -945,16 +989,16 @@ const AppWorkspaceSidebarItemStatus = props => {
945
989
  return props.mention;
946
990
  },
947
991
  get children() {
948
- return _$ssr(_tmpl$23);
992
+ return _$ssr(_tmpl$24);
949
993
  }
950
994
  }), _$createComponent(Show, {
951
995
  get when() {
952
996
  return props.muted;
953
997
  },
954
998
  get children() {
955
- return _$ssr(_tmpl$24);
999
+ return _$ssr(_tmpl$25);
956
1000
  }
957
- }), _$ssr(_tmpl$26, _$escape(_$createComponent(Show, {
1001
+ }), _$ssr(_tmpl$27, _$escape(_$createComponent(Show, {
958
1002
  get when() {
959
1003
  return count() || waiting() === 0;
960
1004
  },
@@ -964,24 +1008,84 @@ const AppWorkspaceSidebarItemStatus = props => {
964
1008
  return dot();
965
1009
  },
966
1010
  get children() {
967
- return _$ssr(_tmpl$29);
1011
+ return _$ssr(_tmpl$30);
968
1012
  }
969
1013
  });
970
1014
  },
971
1015
  get children() {
972
- return _$ssr(_tmpl$25, _$ssrAttribute("data-mention", props.mention ? "true" : _$escape(undefined, true), false), count() > 99 ? "99+" : _$escape(count()));
1016
+ return _$ssr(_tmpl$26, _$ssrAttribute("data-mention", props.mention ? "true" : _$escape(undefined, true), false), count() > 99 ? "99+" : _$escape(count()));
973
1017
  }
974
- }))), _$ssr(_tmpl$27, _$escape(description()))];
1018
+ }))), _$ssr(_tmpl$28, _$escape(description()))];
975
1019
  }
976
1020
  })));
977
1021
  };
1022
+ /**
1023
+ * Hover actions overlay a row's end, so the label and count under them fade
1024
+ * out while they show. The row measures how far the overlay reaches into its
1025
+ * count (`--k2b-sidebar-item-cover`) and how much of that the count and gap
1026
+ * after the label already take (`--k2b-sidebar-item-label-trail`), so the
1027
+ * label keeps all the width the overlay leaves it. The stylesheet applies
1028
+ * both only while the overlay shows, and assumes its usual size until then.
1029
+ */
1030
+ function observeSidebarRowCover(row) {
1031
+ if (isServer || typeof ResizeObserver === "undefined") return;
1032
+ // A hidden count, such as an empty status, or hidden actions have no box to measure from.
1033
+ const laidOut = element => Boolean(element?.getClientRects().length);
1034
+ const measure = () => {
1035
+ const main = row.querySelector(":scope > .k2b-app-workspace__sidebar-item-main");
1036
+ const label = main?.querySelector(":scope > :is(.k2b-app-workspace__sidebar-item-copy, .k2b-app-workspace__sidebar-item-label)");
1037
+ 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");
1038
+ if (!main || !laidOut(label) || !overlays.length) {
1039
+ row.style.removeProperty("--k2b-sidebar-item-cover");
1040
+ row.style.removeProperty("--k2b-sidebar-item-label-trail");
1041
+ return;
1042
+ }
1043
+ // Lengths along the inline axis, measured toward the row's end.
1044
+ const rtl = getComputedStyle(row).direction === "rtl";
1045
+ const end = element => {
1046
+ const box = element.getBoundingClientRect();
1047
+ return rtl ? -box.left : box.right;
1048
+ };
1049
+ const start = Math.min(...overlays.map(element => {
1050
+ const box = element.getBoundingClientRect();
1051
+ return rtl ? -box.right : box.left;
1052
+ }));
1053
+ const meta = main.querySelector(":scope > .k2b-app-workspace__sidebar-item-meta");
1054
+ const content = end(laidOut(meta) ? meta : label);
1055
+ row.style.setProperty("--k2b-sidebar-item-cover", `${Math.max(0, content - start)}px`);
1056
+ row.style.setProperty("--k2b-sidebar-item-label-trail", `${Math.max(0, content - end(label))}px`);
1057
+ };
1058
+ const resized = new ResizeObserver(measure);
1059
+ // The label, the count, and the actions can be replaced while the row stays.
1060
+ const replaced = new MutationObserver(() => observe());
1061
+ const observe = () => {
1062
+ const main = row.querySelector(":scope > .k2b-app-workspace__sidebar-item-main");
1063
+ if (main) replaced.observe(main, {
1064
+ childList: true
1065
+ });
1066
+ resized.disconnect();
1067
+ resized.observe(row);
1068
+ 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);
1069
+ };
1070
+ replaced.observe(row, {
1071
+ childList: true
1072
+ });
1073
+ observe();
1074
+ onCleanup(() => {
1075
+ replaced.disconnect();
1076
+ resized.disconnect();
1077
+ });
1078
+ }
1079
+
978
1080
  /** Shared visual and semantic row frame for flat sidebar items and tree items. */
979
1081
  function AppWorkspaceSidebarRow(props) {
1082
+ const [link, setLink] = createSignal();
1083
+ const [hinted, setHinted] = createSignal(false);
980
1084
  const className = () => `k2b-app-workspace__sidebar-item ${props.hasActions ? "has-action" : ""} ${props.active ? props.activeClass ?? "is-active" : ""} ${props.class ?? ""}`;
981
1085
  const data = () => Object.fromEntries(Object.entries(props.data ?? {}).filter(([, value]) => value !== undefined && value !== null).map(([key, value]) => [`data-${key}`, String(value)]));
982
1086
  const common = () => ({
983
1087
  class: className(),
984
- title: props.title,
1088
+ title: hinted() ? undefined : props.title,
985
1089
  "data-tone": props.tone,
986
1090
  style: {
987
1091
  "view-transition-name": props.viewTransitionName,
@@ -991,9 +1095,12 @@ function AppWorkspaceSidebarRow(props) {
991
1095
  });
992
1096
  const current = () => props.active === "ancestor" ? "true" : props.active ? "page" : undefined;
993
1097
  const Control = control => {
994
- const attrs = () => control.grouped ? {
995
- class: "k2b-app-workspace__sidebar-item-main"
996
- } : common();
1098
+ const attrs = () => ({
1099
+ ...(control.grouped ? {
1100
+ class: "k2b-app-workspace__sidebar-item-main"
1101
+ } : common()),
1102
+ ref: setLink
1103
+ });
997
1104
  return _$createComponent(Show, {
998
1105
  get when() {
999
1106
  return Boolean(props.href && !props.disabled);
@@ -1062,7 +1169,7 @@ function AppWorkspaceSidebarRow(props) {
1062
1169
  }
1063
1170
  });
1064
1171
  };
1065
- return _$createComponent(Show, {
1172
+ return [_$createComponent(Show, {
1066
1173
  get when() {
1067
1174
  return props.hasActions;
1068
1175
  },
@@ -1080,7 +1187,26 @@ function AppWorkspaceSidebarRow(props) {
1080
1187
  grouped: true
1081
1188
  })), _$escape(props.actions)], false);
1082
1189
  }
1083
- });
1190
+ }), _$createComponent(Show, {
1191
+ get when() {
1192
+ return link();
1193
+ },
1194
+ keyed: true,
1195
+ children: element => _$createComponent(SidebarRailHint, {
1196
+ target: () => element,
1197
+ get label() {
1198
+ return props.title ?? props.hint;
1199
+ },
1200
+ get focusTarget() {
1201
+ return props.focusTarget ?? (() => element);
1202
+ },
1203
+ labelSelector: ".k2b-app-workspace__sidebar-item-label-text",
1204
+ get titled() {
1205
+ return props.title !== undefined;
1206
+ },
1207
+ onArm: () => setHinted(true)
1208
+ })
1209
+ })];
1084
1210
  }
1085
1211
  function AppWorkspaceSidebarItem(props) {
1086
1212
  const workspaceMessages = useWorkspaceMessages();
@@ -1111,22 +1237,22 @@ function AppWorkspaceSidebarItem(props) {
1111
1237
  return iconContent() || icon();
1112
1238
  },
1113
1239
  get children() {
1114
- return _$ssr(_tmpl$30, _$ssrAttribute("class",
1240
+ return _$ssr(_tmpl$31, _$ssrAttribute("class",
1115
1241
  // An object row's own glyph sits in a soft chip of the app colour; custom content such as an avatar keeps
1116
1242
  // its own look.
1117
- props.variant === "object" && !iconContent() ? "k2b-app-workspace__sidebar-item-icon k2b-icon-tile" : "k2b-app-workspace__sidebar-item-icon", false), _$escape(iconContent() ?? _$ssr(_tmpl$36, _$ssrAttribute("class", _$escape(iconClass(icon()), true), false))));
1243
+ props.variant === "object" && !iconContent() ? "k2b-app-workspace__sidebar-item-icon k2b-icon-tile" : "k2b-app-workspace__sidebar-item-icon", false), _$escape(iconContent() ?? _$ssr(_tmpl$37, _$ssrAttribute("class", _$escape(iconClass(icon()), true), false))));
1118
1244
  }
1119
- }), _$ssr(_tmpl$34, _$escape(_$createComponent(Show, {
1245
+ }), _$ssr(_tmpl$35, _$escape(_$createComponent(Show, {
1120
1246
  get when() {
1121
1247
  return props.context || props.contextMeta;
1122
1248
  },
1123
1249
  get children() {
1124
- return _$ssr(_tmpl$32, _$escape(props.context), _$escape(_$createComponent(Show, {
1250
+ return _$ssr(_tmpl$33, _$escape(props.context), _$escape(_$createComponent(Show, {
1125
1251
  get when() {
1126
1252
  return props.contextMeta;
1127
1253
  },
1128
1254
  get children() {
1129
- return _$ssr(_tmpl$31, _$escape(props.contextMeta));
1255
+ return _$ssr(_tmpl$32, _$escape(props.contextMeta));
1130
1256
  }
1131
1257
  })));
1132
1258
  }
@@ -1135,14 +1261,14 @@ function AppWorkspaceSidebarItem(props) {
1135
1261
  return props.description;
1136
1262
  },
1137
1263
  get children() {
1138
- return _$ssr(_tmpl$33, _$escape(props.description));
1264
+ return _$ssr(_tmpl$34, _$escape(props.description));
1139
1265
  }
1140
1266
  }))), _$createComponent(Show, {
1141
1267
  get when() {
1142
1268
  return hasMeta();
1143
1269
  },
1144
1270
  get children() {
1145
- return _$ssr(_tmpl$35, _$ssrAttribute("id", props.preview?.trigger === "row" ? _$escape(metaId, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-visibility", metaVisibility() === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(meta()));
1271
+ return _$ssr(_tmpl$36, _$ssrAttribute("id", props.preview?.trigger === "row" ? _$escape(metaId, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-visibility", metaVisibility() === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(meta()));
1146
1272
  }
1147
1273
  })];
1148
1274
  const singleAction = () => {
@@ -1157,7 +1283,7 @@ function AppWorkspaceSidebarItem(props) {
1157
1283
  actionSlot()?.onSelect?.(event);
1158
1284
  props.onActionClick?.(event);
1159
1285
  };
1160
- const content = () => actionSlot()?.children ?? _$ssr(_tmpl$36, _$ssrAttribute("class", _$escape(iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots"), true), false));
1286
+ const content = () => actionSlot()?.children ?? _$ssr(_tmpl$37, _$ssrAttribute("class", _$escape(iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots"), true), false));
1161
1287
  return _$createComponent(Show, {
1162
1288
  get when() {
1163
1289
  return Boolean(actionSlot() || props.actionIcon);
@@ -1168,10 +1294,10 @@ function AppWorkspaceSidebarItem(props) {
1168
1294
  return _$memo(() => !!actionSlot()?.href)() && !actionSlot()?.disabled;
1169
1295
  },
1170
1296
  get fallback() {
1171
- return _$ssr(_tmpl$38, _$ssrAttribute("disabled", actionSlot()?.disabled, true) + _$ssrAttribute("data-visibility", actionSlot()?.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label(), true), false), _$escape(content()));
1297
+ return _$ssr(_tmpl$39, _$ssrAttribute("disabled", actionSlot()?.disabled, true) + _$ssrAttribute("data-visibility", actionSlot()?.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label(), true), false), _$escape(content()));
1172
1298
  },
1173
1299
  get children() {
1174
- return _$ssr(_tmpl$37, _$ssrAttribute("href", _$escape(actionSlot()?.href, true), false), _$ssrAttribute("data-visibility", actionSlot()?.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label(), true), false), _$escape(content()));
1300
+ return _$ssr(_tmpl$38, _$ssrAttribute("href", _$escape(actionSlot()?.href, true), false), _$ssrAttribute("data-visibility", actionSlot()?.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label(), true), false), _$escape(content()));
1175
1301
  }
1176
1302
  });
1177
1303
  }
@@ -1242,6 +1368,9 @@ function AppWorkspaceSidebarItem(props) {
1242
1368
  get title() {
1243
1369
  return props.title;
1244
1370
  },
1371
+ get hint() {
1372
+ return _$memo(() => typeof label() === "string")() ? label() : undefined;
1373
+ },
1245
1374
  get viewTransitionName() {
1246
1375
  return props.viewTransitionName;
1247
1376
  },
@@ -1359,7 +1488,7 @@ const AppWorkspaceNavTree = props => {
1359
1488
  },
1360
1489
  children: (item, place) => {
1361
1490
  const nested = createMemo(() => navTreeItems(item.children));
1362
- const hasChildren = () => nested().length > 0;
1491
+ const hasChildren = () => item.hasChildren ?? nested().length > 0;
1363
1492
  const selected = () => props.selectedId === item.id;
1364
1493
  const siblingIndex = id => siblings().findIndex(sibling => sibling.id === id);
1365
1494
  const movable = () => Boolean(props.onMove && item.movable && !item.disabled);
@@ -1477,31 +1606,31 @@ const AppWorkspaceNavTree = props => {
1477
1606
  get ["data-k2b-nav-tree-toggle"]() {
1478
1607
  return usesIconDisclosure() ? "" : undefined;
1479
1608
  }
1480
- }, () => iconAccessibility(item.iconLabel)), _$ssr(_tmpl$36, _$ssrAttribute("class", _$escape(iconClass(rowIcon()), true), false)), false);
1609
+ }, () => iconAccessibility(item.iconLabel)), _$ssr(_tmpl$37, _$ssrAttribute("class", _$escape(iconClass(rowIcon()), true), false)), false);
1481
1610
  }
1482
1611
  }), _$createComponent(Show, {
1483
1612
  get when() {
1484
1613
  return item.description !== undefined;
1485
1614
  },
1486
1615
  get fallback() {
1487
- return _$ssr(_tmpl$42, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label));
1616
+ return _$ssr(_tmpl$43, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label));
1488
1617
  },
1489
1618
  get children() {
1490
- return _$ssr(_tmpl$39, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label), _$escape(item.description));
1619
+ return _$ssr(_tmpl$40, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label), _$escape(item.description));
1491
1620
  }
1492
1621
  }), _$createComponent(Show, {
1493
1622
  get when() {
1494
1623
  return item.meta !== undefined;
1495
1624
  },
1496
1625
  get children() {
1497
- return _$ssr(_tmpl$40, `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`, _$ssrAttribute("data-visibility", item.metaVisibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(item.meta));
1626
+ return _$ssr(_tmpl$41, `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`, _$ssrAttribute("data-visibility", item.metaVisibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(item.meta));
1498
1627
  }
1499
1628
  }), _$createComponent(Show, {
1500
1629
  get when() {
1501
1630
  return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
1502
1631
  },
1503
1632
  get children() {
1504
- return _$ssr(_tmpl$41, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`);
1633
+ return _$ssr(_tmpl$42, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`);
1505
1634
  }
1506
1635
  })];
1507
1636
  const row = () => _$createComponent(AppWorkspaceSidebarRow, {
@@ -1536,6 +1665,10 @@ const AppWorkspaceNavTree = props => {
1536
1665
  get title() {
1537
1666
  return item.title;
1538
1667
  },
1668
+ get hint() {
1669
+ return _$memo(() => typeof item.label === "string")() ? item.label : undefined;
1670
+ },
1671
+ focusTarget: () => treeItem,
1539
1672
  get viewTransitionName() {
1540
1673
  return item.viewTransitionName;
1541
1674
  },
@@ -1608,12 +1741,12 @@ const AppWorkspaceNavTree = props => {
1608
1741
  endDrag();
1609
1742
  requestMove(target.move, false);
1610
1743
  };
1611
- return _$ssr(_tmpl$44, _$ssrAttribute("aria-level", _$escape(depth, true) + 1, false) + _$ssrAttribute("aria-setsize", _$escape(siblings().length, true), false) + _$ssrAttribute("aria-posinset", _$escape(place(), true) + 1, false) + _$ssrAttribute("aria-selected", _$escape(selected(), true), false) + _$ssrAttribute("aria-expanded", hasChildren() ? _$escape(isExpanded(item.id), true) : _$escape(undefined, true), false) + _$ssrAttribute("aria-disabled", item.disabled ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("tabindex", item.disabled ? -1 : tabStopId() === item.id ? 0 : -1, false) + _$ssrAttribute("draggable", movable() ? _$escape(true, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-k2b-nav-tree-id", _$escape(item.id, true), false) + _$ssrAttribute("data-k2b-nav-tree-parent-id", _$escape(parentId, true), false) + _$ssrAttribute("data-k2b-nav-tree-dragging", dragged()?.id === item.id ? "" : _$escape(undefined, true), false) + _$ssrAttribute("data-k2b-nav-tree-drop", dropTarget()?.id === item.id ? _$escape(dropTarget().side, true) : _$escape(undefined, true), false), _$ssrStyleProperty("--k2b-nav-tree-depth:", _$escape(String(props.indented === false ? 0 : depth), true)), _$escape(row()), _$escape(_$createComponent(Show, {
1744
+ return _$ssr(_tmpl$45, _$ssrAttribute("aria-level", _$escape(depth, true) + 1, false) + _$ssrAttribute("aria-setsize", _$escape(siblings().length, true), false) + _$ssrAttribute("aria-posinset", _$escape(place(), true) + 1, false) + _$ssrAttribute("aria-selected", _$escape(selected(), true), false) + _$ssrAttribute("aria-expanded", hasChildren() ? _$escape(isExpanded(item.id), true) : _$escape(undefined, true), false) + _$ssrAttribute("aria-disabled", item.disabled ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("tabindex", item.disabled ? -1 : tabStopId() === item.id ? 0 : -1, false) + _$ssrAttribute("draggable", movable() ? _$escape(true, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-k2b-nav-tree-id", _$escape(item.id, true), false) + _$ssrAttribute("data-k2b-nav-tree-parent-id", _$escape(parentId, true), false) + _$ssrAttribute("data-k2b-nav-tree-dragging", dragged()?.id === item.id ? "" : _$escape(undefined, true), false) + _$ssrAttribute("data-k2b-nav-tree-drop", dropTarget()?.id === item.id ? _$escape(dropTarget().side, true) : _$escape(undefined, true), false), _$ssrStyleProperty("--k2b-nav-tree-depth:", _$escape(String(props.indented === false ? 0 : depth), true)), _$escape(row()), _$escape(_$createComponent(Show, {
1612
1745
  get when() {
1613
1746
  return _$memo(() => !!hasChildren())() && isExpanded(item.id);
1614
1747
  },
1615
1748
  get children() {
1616
- return _$ssr(_tmpl$43, _$escape(renderItems(nested, depth + 1, item.id)));
1749
+ return _$ssr(_tmpl$44, _$escape(renderItems(nested, depth + 1, item.id)));
1617
1750
  }
1618
1751
  })));
1619
1752
  }
@@ -1638,7 +1771,7 @@ const AppWorkspaceNavTree = props => {
1638
1771
  doc?.removeEventListener("pointermove", forgetDrag, true);
1639
1772
  });
1640
1773
  });
1641
- return _$ssr(_tmpl$45, `k2b-app-workspace__nav-tree ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.ariaLabel, true), false), _$escape(renderItems(roots, 0)));
1774
+ return _$ssr(_tmpl$46, `k2b-app-workspace__nav-tree ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.ariaLabel, true), false), _$escape(renderItems(roots, 0)));
1642
1775
  };
1643
1776
  AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
1644
1777
  const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProps({
@@ -1649,13 +1782,14 @@ const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProp
1649
1782
  get when() {
1650
1783
  return props.title;
1651
1784
  },
1652
- children: title => _$ssr(_tmpl$21, _$escape(title()))
1653
- })), _$ssr(_tmpl$46, _$ssrAttribute("data-columns", _$escape(props.columns ?? 2, true), false), _$escape(props.children))], false);
1785
+ children: title => _$ssr(_tmpl$22, _$escape(title()))
1786
+ })), _$ssr(_tmpl$47, _$ssrAttribute("data-columns", _$escape(props.columns ?? 2, true), false), _$escape(props.children))], false);
1654
1787
  const AppWorkspaceSidebarIconAction = props => {
1655
- const content = _$ssr(_tmpl$47, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
1788
+ let target;
1789
+ const content = _$ssr(_tmpl$48, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
1656
1790
  const attrs = () => ({
1791
+ ref: element => target = element,
1657
1792
  class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
1658
- title: props.label,
1659
1793
  "aria-label": props.label,
1660
1794
  "data-tone": props.tone,
1661
1795
  style: {
@@ -1663,19 +1797,31 @@ const AppWorkspaceSidebarIconAction = props => {
1663
1797
  },
1664
1798
  ...modeAttrs(props.sidebarMode)
1665
1799
  });
1666
- if (!props.href || props.disabled) return _$ssrElement("button", _$mergeProps({
1800
+ // The icon never shows its label, so the hint names it in every state; in the collapsed rail it sits beside the
1801
+ // icon like the rail's other entries.
1802
+ const hint = _$createComponent(Tooltip, {
1803
+ target: () => target,
1804
+ get content() {
1805
+ return props.label;
1806
+ },
1807
+ get placement() {
1808
+ return inSidebarRail(target) ? "right" : undefined;
1809
+ },
1810
+ delay: 0
1811
+ });
1812
+ if (!props.href || props.disabled) return [_$ssrElement("button", _$mergeProps({
1667
1813
  type: "button"
1668
1814
  }, attrs, {
1669
1815
  get disabled() {
1670
1816
  return props.disabled;
1671
1817
  }
1672
- }), _$escape(content), false);
1673
- if (props.navigation !== "enhanced" || !props.onNavigate) return _$ssrElement("a", _$mergeProps({
1818
+ }), _$escape(content), false), hint];
1819
+ if (props.navigation !== "enhanced" || !props.onNavigate) return [_$ssrElement("a", _$mergeProps({
1674
1820
  get href() {
1675
1821
  return props.href;
1676
1822
  }
1677
- }, attrs), _$escape(content), false);
1678
- return _$createComponent(Link, _$mergeProps({
1823
+ }, attrs), _$escape(content), false), hint];
1824
+ return [_$createComponent(Link, _$mergeProps({
1679
1825
  get href() {
1680
1826
  return props.href;
1681
1827
  }
@@ -1693,7 +1839,7 @@ const AppWorkspaceSidebarIconAction = props => {
1693
1839
  return props.onClick;
1694
1840
  },
1695
1841
  children: content
1696
- }));
1842
+ })), hint];
1697
1843
  };
1698
1844
  /**
1699
1845
  * The row above the work area. From 48 to 64 rem it holds the button that
@@ -1730,12 +1876,12 @@ function AppWorkspaceHead(props) {
1730
1876
  return `@media not all and (min-width:48rem){${host} > .k2b-app-workspace__head,${host} > .k2b-app-workspace__content > .k2b-app-workspace__detail-toggle,${host} > .k2b-app-workspace__content > :is(solid-island, solid-client) > .k2b-app-workspace__detail-toggle{display:none}}`;
1731
1877
  };
1732
1878
  const resetContent = () => filters().reset;
1733
- const primaryContent = () => [_$ssr(_tmpl$47, _$ssrAttribute("class", _$escape(props.head?.primary?.icon, true), false)), _$ssr(_tmpl$48, _$escape(props.head?.primary?.label))];
1734
- return _$ssr(_tmpl$54, _$ssrAttribute("data-trail", trail()?.ancestors.length ? "up" : trail() ? "title" : _$escape(undefined, true), false) + _$ssrAttribute("data-row", props.head ? "" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-head-pane", _$escape(mobilePane(), true), false), _$escape(_$createComponent(Show, {
1879
+ const primaryContent = () => [_$ssr(_tmpl$48, _$ssrAttribute("class", _$escape(props.head?.primary?.icon, true), false)), _$ssr(_tmpl$49, _$escape(props.head?.primary?.label))];
1880
+ return _$ssr(_tmpl$55, _$ssrAttribute("data-trail", trail()?.ancestors.length ? "up" : trail() ? "title" : _$escape(undefined, true), false) + _$ssrAttribute("data-row", props.head ? "" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-head-pane", _$escape(mobilePane(), true), false), _$escape(_$createComponent(Show, {
1735
1881
  get when() {
1736
1882
  return mobilePane();
1737
1883
  },
1738
- children: pane => _$ssr(_tmpl$5, mobilePaneRule(pane()))
1884
+ children: pane => _$ssr(_tmpl$6, mobilePaneRule(pane()))
1739
1885
  })), _$escape(_$createComponent(IconButton, {
1740
1886
  "class": "k2b-app-workspace__head-toggle",
1741
1887
  get label() {
@@ -1747,7 +1893,7 @@ function AppWorkspaceHead(props) {
1747
1893
  "aria-expanded": "false",
1748
1894
  "data-app-workspace-sidebar-toggle": "",
1749
1895
  get children() {
1750
- return _$ssr(_tmpl$49);
1896
+ return _$ssr(_tmpl$50);
1751
1897
  }
1752
1898
  })), _$escape(_$createComponent(Show, {
1753
1899
  get when() {
@@ -1759,20 +1905,20 @@ function AppWorkspaceHead(props) {
1759
1905
  },
1760
1906
  as: "p",
1761
1907
  fallback: true
1762
- }), _$ssr(_tmpl$55, _$ssrAttribute("data-k2b-server", isServer ? "" : _$escape(undefined, true), false), _$escape(current().title))]
1908
+ }), _$ssr(_tmpl$56, _$ssrAttribute("data-k2b-server", isServer ? "" : _$escape(undefined, true), false), _$escape(current().title))]
1763
1909
  })), _$escape(_$createComponent(Show, {
1764
1910
  get when() {
1765
1911
  return resolvedViews.toArray().some(Boolean);
1766
1912
  },
1767
1913
  get children() {
1768
- return _$ssr(_tmpl$50, _$escape(resolvedViews()));
1914
+ return _$ssr(_tmpl$51, _$escape(resolvedViews()));
1769
1915
  }
1770
1916
  })), _$escape(_$createComponent(Show, {
1771
1917
  get when() {
1772
1918
  return resolvedFilters.toArray().some(Boolean) || props.head?.filtered;
1773
1919
  },
1774
1920
  get children() {
1775
- return _$ssr(_tmpl$51, _$ssrAttribute("aria-label", _$escape(filters().filters, true), false), _$escape(resolvedFilters()), _$escape(_$createComponent(Show, {
1921
+ return _$ssr(_tmpl$52, _$ssrAttribute("aria-label", _$escape(filters().filters, true), false), _$escape(resolvedFilters()), _$escape(_$createComponent(Show, {
1776
1922
  get when() {
1777
1923
  return props.head?.filtered;
1778
1924
  },
@@ -1819,14 +1965,14 @@ function AppWorkspaceHead(props) {
1819
1965
  return _$memo(() => !!props.head?.filtered)() && resolvedCount.toArray().some(value => value !== undefined && value !== null && value !== false);
1820
1966
  },
1821
1967
  get children() {
1822
- return _$ssr(_tmpl$52, _$escape(resolvedCount()));
1968
+ return _$ssr(_tmpl$53, _$escape(resolvedCount()));
1823
1969
  }
1824
1970
  })), _$escape(_$createComponent(Show, {
1825
1971
  get when() {
1826
1972
  return resolvedActions.toArray().some(Boolean) || props.head?.primary;
1827
1973
  },
1828
1974
  get children() {
1829
- return _$ssr(_tmpl$53, _$escape(resolvedActions()), _$escape(_$createComponent(Show, {
1975
+ return _$ssr(_tmpl$54, _$escape(resolvedActions()), _$escape(_$createComponent(Show, {
1830
1976
  get when() {
1831
1977
  return props.head?.primary;
1832
1978
  },
@@ -1918,7 +2064,7 @@ const AppWorkspace = props => {
1918
2064
  return _$createComponent(WorkspaceContext.Provider, {
1919
2065
  value: workspace,
1920
2066
  get children() {
1921
- return _$ssr(_tmpl$56, `k2b-app-workspace ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-mobile-surface", _$escape(props.mobileSurface, true), false) + _$ssrAttribute("data-flat", props.flat ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-sidebar-collapsed", initialLayoutState()?.sidebarCollapsed === undefined ? _$escape(undefined, true) : _$escape(String(initialLayoutState()?.sidebarCollapsed), true), false) + _$ssrAttribute("data-workspace-resizable", props.resizable === false ? "false" : "true", false), _$ssrStyle(appWorkspaceLayoutStyle(initialLayoutState())), _$escape(contents()));
2067
+ return _$ssr(_tmpl$57, `k2b-app-workspace ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-mobile-surface", _$escape(props.mobileSurface, true), false) + _$ssrAttribute("data-flat", props.flat ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-sidebar-collapsed", initialLayoutState()?.sidebarCollapsed === undefined ? _$escape(undefined, true) : _$escape(String(initialLayoutState()?.sidebarCollapsed), true), false) + _$ssrAttribute("data-workspace-resizable", props.resizable === false ? "false" : "true", false), _$ssrStyle(appWorkspaceLayoutStyle(initialLayoutState())), _$escape(contents()));
1922
2068
  }
1923
2069
  });
1924
2070
  }
@@ -1933,7 +2079,7 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
1933
2079
  }
1934
2080
  });
1935
2081
  AppWorkspace.Head = AppWorkspaceHeadSlot;
1936
- AppWorkspace.Content = props => _$ssr(_tmpl$57, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
2082
+ AppWorkspace.Content = props => _$ssr(_tmpl$58, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
1937
2083
  AppWorkspace.Main = AppWorkspaceMain;
1938
2084
  AppWorkspace.MainPane = AppWorkspaceMainPane;
1939
2085
  AppWorkspace.Detail = AppWorkspaceDetail;