@k2b/ui 0.2.0 → 0.4.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 (378) hide show
  1. package/dist/browser/actions/Button.js +11 -2
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/Disclosure.js +11 -8
  4. package/dist/browser/actions/Disclosure.js.map +1 -1
  5. package/dist/browser/actions/Dropdown.js +4 -1
  6. package/dist/browser/actions/Dropdown.js.map +1 -1
  7. package/dist/browser/actions/FilterChip.js +16 -2
  8. package/dist/browser/actions/FilterChip.js.map +1 -1
  9. package/dist/browser/actions/SplitButton.js +69 -22
  10. package/dist/browser/actions/SplitButton.js.map +1 -1
  11. package/dist/browser/actions/SpotlightSearch.js +3 -7
  12. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  13. package/dist/browser/actions/Tabs.js +132 -47
  14. package/dist/browser/actions/Tabs.js.map +1 -1
  15. package/dist/browser/actions/index.js +2 -2
  16. package/dist/browser/actions/index.js.map +1 -1
  17. package/dist/browser/chat/ChatComposer.js +751 -423
  18. package/dist/browser/chat/ChatComposer.js.map +1 -1
  19. package/dist/browser/chat/ChatContextPopup.js +123 -0
  20. package/dist/browser/chat/ChatContextPopup.js.map +1 -0
  21. package/dist/browser/chat/ChatPrimitives.js +141 -78
  22. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  23. package/dist/browser/chat/ChatTasks.js +112 -0
  24. package/dist/browser/chat/ChatTasks.js.map +1 -0
  25. package/dist/browser/chat/ChatTimeline.js +31 -14
  26. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  27. package/dist/browser/chat/chat-behavior.js +0 -5
  28. package/dist/browser/chat/chat-behavior.js.map +1 -1
  29. package/dist/browser/chat/composer-document.js +55 -0
  30. package/dist/browser/chat/composer-document.js.map +1 -0
  31. package/dist/browser/chat/index.js +6 -1
  32. package/dist/browser/chat/index.js.map +1 -1
  33. package/dist/browser/chat/types.js.map +1 -1
  34. package/dist/browser/content/Chart.js +148 -239
  35. package/dist/browser/content/Chart.js.map +1 -1
  36. package/dist/browser/content/ChartExplorer.js +324 -0
  37. package/dist/browser/content/ChartExplorer.js.map +1 -0
  38. package/dist/browser/content/ChartExplorerControls.js +153 -0
  39. package/dist/browser/content/ChartExplorerControls.js.map +1 -0
  40. package/dist/browser/content/ChartFilterControls.js +200 -0
  41. package/dist/browser/content/ChartFilterControls.js.map +1 -0
  42. package/dist/browser/content/ChartSnapshotView.js +114 -0
  43. package/dist/browser/content/ChartSnapshotView.js.map +1 -0
  44. package/dist/browser/content/DataTable.js +48 -32
  45. package/dist/browser/content/DataTable.js.map +1 -1
  46. package/dist/browser/content/FileBrowser.js +3 -0
  47. package/dist/browser/content/FileBrowser.js.map +1 -1
  48. package/dist/browser/content/FileGrid.js +93 -0
  49. package/dist/browser/content/FileGrid.js.map +1 -0
  50. package/dist/browser/content/FileTree.js +2 -2
  51. package/dist/browser/content/FileTree.js.map +1 -1
  52. package/dist/browser/content/FileView.js +511 -162
  53. package/dist/browser/content/FileView.js.map +1 -1
  54. package/dist/browser/content/MarkdownView.js +6 -0
  55. package/dist/browser/content/MarkdownView.js.map +1 -1
  56. package/dist/browser/content/Pagination.js.map +1 -1
  57. package/dist/browser/content/PdfPreview.js +107 -90
  58. package/dist/browser/content/PdfPreview.js.map +1 -1
  59. package/dist/browser/content/chart-cursor.js +33 -0
  60. package/dist/browser/content/chart-cursor.js.map +1 -0
  61. package/dist/browser/content/chart-explorer.js +147 -0
  62. package/dist/browser/content/chart-explorer.js.map +1 -0
  63. package/dist/browser/content/chart-inspection.js +447 -0
  64. package/dist/browser/content/chart-inspection.js.map +1 -0
  65. package/dist/browser/content/chart-line-gaps.js +53 -0
  66. package/dist/browser/content/chart-line-gaps.js.map +1 -0
  67. package/dist/browser/content/chart-map-viewport.js +5 -1
  68. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  69. package/dist/browser/content/chart-snapshot.js +63 -0
  70. package/dist/browser/content/chart-snapshot.js.map +1 -0
  71. package/dist/browser/content/chart-state-timeline.js +32 -4
  72. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  73. package/dist/browser/content/chart-svg.js +54 -0
  74. package/dist/browser/content/chart-svg.js.map +1 -0
  75. package/dist/browser/content/collection-selection.js +109 -0
  76. package/dist/browser/content/collection-selection.js.map +1 -0
  77. package/dist/browser/content/delimited-preferences.js +21 -0
  78. package/dist/browser/content/delimited-preferences.js.map +1 -0
  79. package/dist/browser/content/file-tree.js.map +1 -1
  80. package/dist/browser/content/file-view-preview.js +11 -7
  81. package/dist/browser/content/file-view-preview.js.map +1 -1
  82. package/dist/browser/content/index.js +9 -0
  83. package/dist/browser/content/index.js.map +1 -1
  84. package/dist/browser/feedback/InlineGuidance.js +17 -3
  85. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  86. package/dist/browser/feedback/dialog-core.js +81 -7
  87. package/dist/browser/feedback/dialog-core.js.map +1 -1
  88. package/dist/browser/feedback/prompts.js +6 -0
  89. package/dist/browser/feedback/prompts.js.map +1 -1
  90. package/dist/browser/feedback/toast.js +29 -6
  91. package/dist/browser/feedback/toast.js.map +1 -1
  92. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  93. package/dist/browser/inputs/Select.js.map +1 -1
  94. package/dist/browser/inputs/SelectChip.js +3 -2
  95. package/dist/browser/inputs/SelectChip.js.map +1 -1
  96. package/dist/browser/inputs/TextInput.js +7 -1
  97. package/dist/browser/inputs/TextInput.js.map +1 -1
  98. package/dist/browser/inputs/markdown/MarkdownEditor.js +61 -37
  99. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  100. package/dist/browser/inputs/markdown/behaviors.js +1 -1
  101. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  102. package/dist/browser/intl/Format.js +89 -16
  103. package/dist/browser/intl/Format.js.map +1 -1
  104. package/dist/browser/intl/index.js.map +1 -1
  105. package/dist/browser/intl/messages.js +130 -2
  106. package/dist/browser/intl/messages.js.map +1 -1
  107. package/dist/browser/layout/AppWorkspace.js +712 -624
  108. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  109. package/dist/browser/layout/BottomSheet.js +95 -0
  110. package/dist/browser/layout/BottomSheet.js.map +1 -0
  111. package/dist/browser/layout/DetailPanel.js +56 -44
  112. package/dist/browser/layout/DetailPanel.js.map +1 -1
  113. package/dist/browser/layout/Navigation.js +278 -0
  114. package/dist/browser/layout/Navigation.js.map +1 -0
  115. package/dist/browser/layout/PanelDialog.js +219 -71
  116. package/dist/browser/layout/PanelDialog.js.map +1 -1
  117. package/dist/browser/layout/ScrollArea.js +21 -1
  118. package/dist/browser/layout/ScrollArea.js.map +1 -1
  119. package/dist/browser/layout/Settings.js.map +1 -1
  120. package/dist/browser/layout/SidebarItemPreview.js +183 -0
  121. package/dist/browser/layout/SidebarItemPreview.js.map +1 -0
  122. package/dist/browser/layout/app-workspace-controller.js +3 -0
  123. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  124. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  125. package/dist/browser/layout/index.js +3 -0
  126. package/dist/browser/layout/index.js.map +1 -1
  127. package/dist/browser/layout/navigation-model.js +23 -0
  128. package/dist/browser/layout/navigation-model.js.map +1 -0
  129. package/dist/browser/layout/scroll-fade.js +100 -0
  130. package/dist/browser/layout/scroll-fade.js.map +1 -0
  131. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  132. package/dist/browser/surfaces/StatusBadge.js +2 -1
  133. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  134. package/dist/fonts/ibm-plex-mono-cyrillic-400-italic-4aded3f2f2a7d27d.woff2 +0 -0
  135. package/dist/fonts/ibm-plex-mono-cyrillic-400-normal-7635422bd10ddbbc.woff2 +0 -0
  136. package/dist/fonts/ibm-plex-mono-cyrillic-500-normal-1d89462e86cb8e87.woff2 +0 -0
  137. package/dist/fonts/ibm-plex-mono-cyrillic-600-normal-2b05a8695c7f9f4a.woff2 +0 -0
  138. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-italic-a0b3b8cbe5a516e7.woff2 +0 -0
  139. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-normal-f8c22ec1804bd696.woff2 +0 -0
  140. package/dist/fonts/ibm-plex-mono-cyrillic-ext-500-normal-3febe5c7f22e4b07.woff2 +0 -0
  141. package/dist/fonts/ibm-plex-mono-cyrillic-ext-600-normal-83109cdd4f8665b4.woff2 +0 -0
  142. package/dist/fonts/ibm-plex-mono-latin-400-italic-0840095faae86403.woff2 +0 -0
  143. package/dist/fonts/ibm-plex-mono-latin-400-normal-08949f728dc52d52.woff2 +0 -0
  144. package/dist/fonts/ibm-plex-mono-latin-500-normal-01d285447409c8a5.woff2 +0 -0
  145. package/dist/fonts/ibm-plex-mono-latin-600-normal-0d1f0b8d0722224e.woff2 +0 -0
  146. package/dist/fonts/ibm-plex-mono-latin-ext-400-italic-1b07eee6df7d26b3.woff2 +0 -0
  147. package/dist/fonts/ibm-plex-mono-latin-ext-400-normal-6bc0f226a5b7884a.woff2 +0 -0
  148. package/dist/fonts/ibm-plex-mono-latin-ext-500-normal-6bb06407c97584b0.woff2 +0 -0
  149. package/dist/fonts/ibm-plex-mono-latin-ext-600-normal-32057cf50dd14bdb.woff2 +0 -0
  150. package/dist/fonts/ibm-plex-mono-vietnamese-400-italic-a6bab38af4f9c761.woff2 +0 -0
  151. package/dist/fonts/ibm-plex-mono-vietnamese-400-normal-62632b6375305e70.woff2 +0 -0
  152. package/dist/fonts/ibm-plex-mono-vietnamese-500-normal-781633d95de88040.woff2 +0 -0
  153. package/dist/fonts/ibm-plex-mono-vietnamese-600-normal-51b74d53e106ba8a.woff2 +0 -0
  154. package/dist/fonts/ibm-plex-sans-cyrillic-400-italic-e8731a7e2b00fc4f.woff2 +0 -0
  155. package/dist/fonts/ibm-plex-sans-cyrillic-400-normal-69afad88a0740b6e.woff2 +0 -0
  156. package/dist/fonts/ibm-plex-sans-cyrillic-500-normal-200be3a2a6b1789f.woff2 +0 -0
  157. package/dist/fonts/ibm-plex-sans-cyrillic-600-normal-730becc6f005c18c.woff2 +0 -0
  158. package/dist/fonts/ibm-plex-sans-cyrillic-700-normal-40540598b4c9eb2c.woff2 +0 -0
  159. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-italic-4ffb25726a7ce4cc.woff2 +0 -0
  160. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-normal-e2580ad78906551e.woff2 +0 -0
  161. package/dist/fonts/ibm-plex-sans-cyrillic-ext-500-normal-08578d906af6d986.woff2 +0 -0
  162. package/dist/fonts/ibm-plex-sans-cyrillic-ext-600-normal-d60d3d0b182753d5.woff2 +0 -0
  163. package/dist/fonts/ibm-plex-sans-cyrillic-ext-700-normal-d07dd53642480097.woff2 +0 -0
  164. package/dist/fonts/ibm-plex-sans-greek-400-italic-1bc10b01688ba9fa.woff2 +0 -0
  165. package/dist/fonts/ibm-plex-sans-greek-400-normal-02296067bc904d2a.woff2 +0 -0
  166. package/dist/fonts/ibm-plex-sans-greek-500-normal-8cb6e20b4dbbaa5f.woff2 +0 -0
  167. package/dist/fonts/ibm-plex-sans-greek-600-normal-0a9ebd9019415ee9.woff2 +0 -0
  168. package/dist/fonts/ibm-plex-sans-greek-700-normal-c949641d10a3bebc.woff2 +0 -0
  169. package/dist/fonts/ibm-plex-sans-latin-400-italic-6de912e531b6c980.woff2 +0 -0
  170. package/dist/fonts/ibm-plex-sans-latin-400-normal-3b646991d30055a9.woff2 +0 -0
  171. package/dist/fonts/ibm-plex-sans-latin-500-normal-0717336fb31fcdcd.woff2 +0 -0
  172. package/dist/fonts/ibm-plex-sans-latin-600-normal-8960851d691c054e.woff2 +0 -0
  173. package/dist/fonts/ibm-plex-sans-latin-700-normal-42e7b0c143c19df9.woff2 +0 -0
  174. package/dist/fonts/ibm-plex-sans-latin-ext-400-italic-c5c00e8a32022dfe.woff2 +0 -0
  175. package/dist/fonts/ibm-plex-sans-latin-ext-400-normal-c93d2a12aaa280f6.woff2 +0 -0
  176. package/dist/fonts/ibm-plex-sans-latin-ext-500-normal-2846035d85100f84.woff2 +0 -0
  177. package/dist/fonts/ibm-plex-sans-latin-ext-600-normal-b25dfd4f979e442a.woff2 +0 -0
  178. package/dist/fonts/ibm-plex-sans-latin-ext-700-normal-92f0392bd74fa395.woff2 +0 -0
  179. package/dist/fonts/ibm-plex-sans-vietnamese-400-italic-675d4bace127bffb.woff2 +0 -0
  180. package/dist/fonts/ibm-plex-sans-vietnamese-400-normal-771538f7f26551bd.woff2 +0 -0
  181. package/dist/fonts/ibm-plex-sans-vietnamese-500-normal-85ba3d9c2488a813.woff2 +0 -0
  182. package/dist/fonts/ibm-plex-sans-vietnamese-600-normal-5d34b803637befe3.woff2 +0 -0
  183. package/dist/fonts/ibm-plex-sans-vietnamese-700-normal-b79d0c4b68b85007.woff2 +0 -0
  184. package/dist/plex.css +1 -1
  185. package/dist/ssr/actions/Button.js +11 -2
  186. package/dist/ssr/actions/Button.js.map +1 -1
  187. package/dist/ssr/actions/Disclosure.js +2 -2
  188. package/dist/ssr/actions/Disclosure.js.map +1 -1
  189. package/dist/ssr/actions/Dropdown.js +4 -1
  190. package/dist/ssr/actions/Dropdown.js.map +1 -1
  191. package/dist/ssr/actions/FilterChip.js +16 -2
  192. package/dist/ssr/actions/FilterChip.js.map +1 -1
  193. package/dist/ssr/actions/SplitButton.js +69 -22
  194. package/dist/ssr/actions/SplitButton.js.map +1 -1
  195. package/dist/ssr/actions/SpotlightSearch.js +3 -7
  196. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  197. package/dist/ssr/actions/Tabs.js +58 -11
  198. package/dist/ssr/actions/Tabs.js.map +1 -1
  199. package/dist/ssr/actions/index.js +2 -2
  200. package/dist/ssr/actions/index.js.map +1 -1
  201. package/dist/ssr/chat/ChatComposer.js +366 -134
  202. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  203. package/dist/ssr/chat/ChatContextPopup.js +86 -0
  204. package/dist/ssr/chat/ChatContextPopup.js.map +1 -0
  205. package/dist/ssr/chat/ChatPrimitives.js +49 -11
  206. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  207. package/dist/ssr/chat/ChatTasks.js +48 -0
  208. package/dist/ssr/chat/ChatTasks.js.map +1 -0
  209. package/dist/ssr/chat/ChatTimeline.js +14 -4
  210. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  211. package/dist/ssr/chat/chat-behavior.js +0 -5
  212. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  213. package/dist/ssr/chat/composer-document.js +55 -0
  214. package/dist/ssr/chat/composer-document.js.map +1 -0
  215. package/dist/ssr/chat/index.js +6 -1
  216. package/dist/ssr/chat/index.js.map +1 -1
  217. package/dist/ssr/chat/types.js.map +1 -1
  218. package/dist/ssr/content/Chart.js +121 -219
  219. package/dist/ssr/content/Chart.js.map +1 -1
  220. package/dist/ssr/content/ChartExplorer.js +257 -0
  221. package/dist/ssr/content/ChartExplorer.js.map +1 -0
  222. package/dist/ssr/content/ChartExplorerControls.js +105 -0
  223. package/dist/ssr/content/ChartExplorerControls.js.map +1 -0
  224. package/dist/ssr/content/ChartFilterControls.js +139 -0
  225. package/dist/ssr/content/ChartFilterControls.js.map +1 -0
  226. package/dist/ssr/content/ChartSnapshotView.js +58 -0
  227. package/dist/ssr/content/ChartSnapshotView.js.map +1 -0
  228. package/dist/ssr/content/DataTable.js +13 -9
  229. package/dist/ssr/content/DataTable.js.map +1 -1
  230. package/dist/ssr/content/FileBrowser.js +3 -0
  231. package/dist/ssr/content/FileBrowser.js.map +1 -1
  232. package/dist/ssr/content/FileGrid.js +38 -0
  233. package/dist/ssr/content/FileGrid.js.map +1 -0
  234. package/dist/ssr/content/FileTree.js +2 -2
  235. package/dist/ssr/content/FileTree.js.map +1 -1
  236. package/dist/ssr/content/FileView.js +356 -75
  237. package/dist/ssr/content/FileView.js.map +1 -1
  238. package/dist/ssr/content/MarkdownView.js +6 -0
  239. package/dist/ssr/content/MarkdownView.js.map +1 -1
  240. package/dist/ssr/content/Pagination.js.map +1 -1
  241. package/dist/ssr/content/PdfPreview.js +37 -24
  242. package/dist/ssr/content/PdfPreview.js.map +1 -1
  243. package/dist/ssr/content/chart-cursor.js +33 -0
  244. package/dist/ssr/content/chart-cursor.js.map +1 -0
  245. package/dist/ssr/content/chart-explorer.js +147 -0
  246. package/dist/ssr/content/chart-explorer.js.map +1 -0
  247. package/dist/ssr/content/chart-inspection.js +447 -0
  248. package/dist/ssr/content/chart-inspection.js.map +1 -0
  249. package/dist/ssr/content/chart-line-gaps.js +53 -0
  250. package/dist/ssr/content/chart-line-gaps.js.map +1 -0
  251. package/dist/ssr/content/chart-map-viewport.js +5 -1
  252. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  253. package/dist/ssr/content/chart-snapshot.js +63 -0
  254. package/dist/ssr/content/chart-snapshot.js.map +1 -0
  255. package/dist/ssr/content/chart-state-timeline.js +32 -4
  256. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  257. package/dist/ssr/content/chart-svg.js +54 -0
  258. package/dist/ssr/content/chart-svg.js.map +1 -0
  259. package/dist/ssr/content/collection-selection.js +109 -0
  260. package/dist/ssr/content/collection-selection.js.map +1 -0
  261. package/dist/ssr/content/delimited-preferences.js +21 -0
  262. package/dist/ssr/content/delimited-preferences.js.map +1 -0
  263. package/dist/ssr/content/file-tree.js.map +1 -1
  264. package/dist/ssr/content/file-view-preview.js +11 -7
  265. package/dist/ssr/content/file-view-preview.js.map +1 -1
  266. package/dist/ssr/content/index.js +9 -0
  267. package/dist/ssr/content/index.js.map +1 -1
  268. package/dist/ssr/feedback/InlineGuidance.js +17 -3
  269. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  270. package/dist/ssr/feedback/dialog-core.js +81 -7
  271. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  272. package/dist/ssr/feedback/prompts.js +6 -0
  273. package/dist/ssr/feedback/prompts.js.map +1 -1
  274. package/dist/ssr/feedback/toast.js +29 -6
  275. package/dist/ssr/feedback/toast.js.map +1 -1
  276. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  277. package/dist/ssr/inputs/Select.js.map +1 -1
  278. package/dist/ssr/inputs/SelectChip.js +3 -3
  279. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  280. package/dist/ssr/inputs/TextInput.js.map +1 -1
  281. package/dist/ssr/inputs/markdown/MarkdownEditor.js +19 -11
  282. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  283. package/dist/ssr/inputs/markdown/behaviors.js +1 -1
  284. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  285. package/dist/ssr/intl/Format.js +61 -0
  286. package/dist/ssr/intl/Format.js.map +1 -1
  287. package/dist/ssr/intl/index.js.map +1 -1
  288. package/dist/ssr/intl/messages.js +130 -2
  289. package/dist/ssr/intl/messages.js.map +1 -1
  290. package/dist/ssr/layout/AppWorkspace.js +368 -275
  291. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  292. package/dist/ssr/layout/BottomSheet.js +43 -0
  293. package/dist/ssr/layout/BottomSheet.js.map +1 -0
  294. package/dist/ssr/layout/DetailPanel.js +11 -4
  295. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  296. package/dist/ssr/layout/Navigation.js +181 -0
  297. package/dist/ssr/layout/Navigation.js.map +1 -0
  298. package/dist/ssr/layout/PanelDialog.js +111 -26
  299. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  300. package/dist/ssr/layout/ScrollArea.js +16 -1
  301. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  302. package/dist/ssr/layout/Settings.js.map +1 -1
  303. package/dist/ssr/layout/SidebarItemPreview.js +133 -0
  304. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -0
  305. package/dist/ssr/layout/app-workspace-controller.js +3 -0
  306. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  307. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  308. package/dist/ssr/layout/index.js +3 -0
  309. package/dist/ssr/layout/index.js.map +1 -1
  310. package/dist/ssr/layout/navigation-model.js +23 -0
  311. package/dist/ssr/layout/navigation-model.js.map +1 -0
  312. package/dist/ssr/layout/scroll-fade.js +100 -0
  313. package/dist/ssr/layout/scroll-fade.js.map +1 -0
  314. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  315. package/dist/ssr/surfaces/StatusBadge.js +2 -1
  316. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  317. package/dist/styles.css +1 -1
  318. package/dist/tabler.css +1 -1
  319. package/dist/types/actions/Button.d.ts +4 -0
  320. package/dist/types/actions/Disclosure.d.ts +1 -0
  321. package/dist/types/actions/FilterChip.d.ts +4 -0
  322. package/dist/types/actions/SplitButton.d.ts +6 -0
  323. package/dist/types/actions/SpotlightSearch.d.ts +0 -4
  324. package/dist/types/actions/Tabs.d.ts +4 -0
  325. package/dist/types/actions/index.d.ts +4 -4
  326. package/dist/types/chat/ChatComposer.d.ts +20 -2
  327. package/dist/types/chat/ChatContextPopup.d.ts +6 -0
  328. package/dist/types/chat/ChatPrimitives.d.ts +4 -0
  329. package/dist/types/chat/ChatTasks.d.ts +15 -0
  330. package/dist/types/chat/ChatTimeline.d.ts +2 -0
  331. package/dist/types/chat/chat-behavior.d.ts +0 -3
  332. package/dist/types/chat/composer-document.d.ts +14 -0
  333. package/dist/types/chat/index.d.ts +8 -1
  334. package/dist/types/chat/types.d.ts +7 -0
  335. package/dist/types/content/Chart.d.ts +42 -23
  336. package/dist/types/content/ChartExplorer.d.ts +34 -0
  337. package/dist/types/content/ChartExplorerControls.d.ts +10 -0
  338. package/dist/types/content/ChartFilterControls.d.ts +21 -0
  339. package/dist/types/content/ChartSnapshotView.d.ts +11 -0
  340. package/dist/types/content/DataTable.d.ts +4 -0
  341. package/dist/types/content/FileBrowser.d.ts +1 -0
  342. package/dist/types/content/FileGrid.d.ts +21 -0
  343. package/dist/types/content/FileView.d.ts +20 -0
  344. package/dist/types/content/PdfPreview.d.ts +8 -1
  345. package/dist/types/content/chart-cursor.d.ts +15 -0
  346. package/dist/types/content/chart-explorer.d.ts +48 -0
  347. package/dist/types/content/chart-inspection.d.ts +40 -0
  348. package/dist/types/content/chart-line-gaps.d.ts +5 -0
  349. package/dist/types/content/chart-map-viewport.d.ts +1 -1
  350. package/dist/types/content/chart-snapshot.d.ts +26 -0
  351. package/dist/types/content/chart-svg.d.ts +21 -0
  352. package/dist/types/content/collection-selection.d.ts +24 -0
  353. package/dist/types/content/delimited-preferences.d.ts +11 -0
  354. package/dist/types/content/file-tree.d.ts +2 -0
  355. package/dist/types/content/file-view-preview.d.ts +4 -1
  356. package/dist/types/content/index.d.ts +16 -2
  357. package/dist/types/feedback/InlineGuidance.d.ts +1 -0
  358. package/dist/types/feedback/dialog-core.d.ts +11 -0
  359. package/dist/types/feedback/prompts.d.ts +2 -0
  360. package/dist/types/feedback/toast.d.ts +7 -1
  361. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -1
  362. package/dist/types/intl/Format.d.ts +9 -0
  363. package/dist/types/intl/index.d.ts +1 -1
  364. package/dist/types/intl/messages.d.ts +31 -1
  365. package/dist/types/layout/AppWorkspace.d.ts +35 -18
  366. package/dist/types/layout/BottomSheet.d.ts +23 -0
  367. package/dist/types/layout/DetailPanel.d.ts +1 -0
  368. package/dist/types/layout/Navigation.d.ts +8 -0
  369. package/dist/types/layout/PanelDialog.d.ts +14 -1
  370. package/dist/types/layout/ScrollArea.d.ts +4 -0
  371. package/dist/types/layout/Settings.d.ts +1 -1
  372. package/dist/types/layout/SidebarItemPreview.d.ts +11 -0
  373. package/dist/types/layout/index.d.ts +4 -1
  374. package/dist/types/layout/navigation-model.d.ts +48 -0
  375. package/dist/types/layout/scroll-fade.d.ts +3 -0
  376. package/dist/types/surfaces/DescriptionList.d.ts +1 -1
  377. package/dist/types/surfaces/StatusBadge.d.ts +1 -1
  378. package/package.json +5 -7
@@ -10,43 +10,46 @@ var _tmpl$ = ["<button type=\"button\" class=\"k2b-app-workspace__resize\" role=
10
10
  _tmpl$2 = ["<div class=\"k2b-app-workspace__main-primary\" data-workspace-main-region=\"main\"", ">", "</div>"],
11
11
  _tmpl$3 = ["<section", " class=\"", "\"", " style=\"", "\">", "</section>"],
12
12
  _tmpl$4 = ["<aside", " class=\"", "\"", "", " style=\"", "\">", "</aside>"],
13
- _tmpl$5 = ["<nav class=\"k2b-app-workspace__sidebar-mobile\"", "><details><summary><span class=\"k2b-app-workspace__sidebar-mobile-trigger\"><i class=\"ti ti-menu-2\" aria-hidden=\"true\"></i><span>", "</span></span><i class=\"ti ti-chevron-down\" aria-hidden=\"true\"></i></summary>", "</details></nav>"],
14
- _tmpl$6 = ["<aside", " class=\"", "\"", "><div class=\"k2b-app-workspace__sidebar-desktop\">", "</div></aside>"],
15
- _tmpl$7 = ["<div class=\"k2b-app-workspace__sidebar-section-actions\">", "</div>"],
16
- _tmpl$8 = ["<header class=\"k2b-app-workspace__sidebar-section-header\">", "", "</header>"],
17
- _tmpl$9 = ["<h2>", "</h2>"],
18
- _tmpl$0 = ["<div class=\"k2b-app-workspace__sidebar-item-actions\"", ">", "</div>"],
19
- _tmpl$1 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-main\"", "", ">", "</button>"],
20
- _tmpl$10 = ["<a", " class=\"k2b-app-workspace__sidebar-item-main\"", ">", "</a>"],
21
- _tmpl$11 = ["<span class=\"k2b-app-workspace__sidebar-item-icon\" aria-hidden=\"true\">", "</span>"],
22
- _tmpl$12 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>"],
23
- _tmpl$13 = ["<i", "></i>"],
24
- _tmpl$14 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
25
- _tmpl$15 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
26
- _tmpl$16 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
27
- _tmpl$17 = ["<span class=\"k2b-app-workspace__sidebar-item-icon\"", " aria-hidden=\"true\"><i", "></i></span>"],
28
- _tmpl$18 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>"],
29
- _tmpl$19 = ["<span class=\"", "\"", ">", "</span>"],
30
- _tmpl$20 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
31
- _tmpl$21 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
32
- _tmpl$22 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", ">", "", "</div>"],
33
- _tmpl$23 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
34
- _tmpl$24 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
35
- _tmpl$25 = ["<i", " aria-hidden=\"true\"></i>"],
36
- _tmpl$26 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "</div>"],
37
- _tmpl$27 = ["<div class=\"", "\">", "</div>"];
13
+ _tmpl$5 = ["<aside", " class=\"", "\"", "><div class=\"k2b-app-workspace__sidebar-desktop\">", "</div></aside>"],
14
+ _tmpl$6 = ["<span aria-hidden=\"true\"><i", "></i></span>"],
15
+ _tmpl$7 = ["<span class=\"k2b-app-workspace__sidebar-section-count\">", "</span>"],
16
+ _tmpl$8 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-section-toggle\"", ">", "<i", " aria-hidden=\"true\"></i></button>"],
17
+ _tmpl$9 = ["<div class=\"k2b-app-workspace__sidebar-section-actions\">", "</div>"],
18
+ _tmpl$0 = ["<header class=\"k2b-app-workspace__sidebar-section-header\">", "", "</header>"],
19
+ _tmpl$1 = ["<div", "", " class=\"k2b-app-workspace__sidebar-section-content\">", "</div>"],
20
+ _tmpl$10 = ["<h2>", "</h2>"],
21
+ _tmpl$11 = ["<div class=\"k2b-app-workspace__sidebar-item-actions\"", ">", "</div>"],
22
+ _tmpl$12 = ["<span class=\"k2b-app-workspace__sidebar-item-icon\" aria-hidden=\"true\">", "</span>"],
23
+ _tmpl$13 = ["<span class=\"k2b-app-workspace__sidebar-item-context-meta\">", "</span>"],
24
+ _tmpl$14 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label\">", "</span>", "</span>"],
25
+ _tmpl$15 = ["<span class=\"k2b-app-workspace__sidebar-item-description\">", "</span>"],
26
+ _tmpl$16 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\">", "<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>", "</span>"],
27
+ _tmpl$17 = ["<i", "></i>"],
28
+ _tmpl$18 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
29
+ _tmpl$19 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
30
+ _tmpl$20 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
31
+ _tmpl$21 = ["<span class=\"k2b-app-workspace__sidebar-item-icon\"", " aria-hidden=\"true\"><i", "></i></span>"],
32
+ _tmpl$22 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>"],
33
+ _tmpl$23 = ["<span class=\"", "\"", ">", "</span>"],
34
+ _tmpl$24 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
35
+ _tmpl$25 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
36
+ _tmpl$26 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", ">", "", "</div>"],
37
+ _tmpl$27 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
38
+ _tmpl$28 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
39
+ _tmpl$29 = ["<i", " aria-hidden=\"true\"></i>"],
40
+ _tmpl$30 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "</div>"],
41
+ _tmpl$31 = ["<div class=\"", "\">", "</div>"];
38
42
  import { Link } from "@k2b/ssr/nav";
39
- import { children, createContext, createMemo, createSignal, createUniqueId, For, onCleanup, onMount, Show, useContext } from "solid-js";
43
+ import { children, createContext, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, useContext } from "solid-js";
40
44
  import { useUiMessages } from "../intl/messages";
41
45
  import { installAppWorkspaceController } from "./app-workspace-controller";
42
46
  import { APP_WORKSPACE_DETAIL_DEFAULT, APP_WORKSPACE_DETAIL_MAX, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DRAWER_DEFAULT, APP_WORKSPACE_DRAWER_MAX, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_PANE_DEFAULT, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_DEFAULT, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspaceLayoutStyle, appWorkspacePanelVariable } from "./app-workspace-state";
47
+ import { SidebarItemPreview } from "./SidebarItemPreview";
48
+ import { createScrollFade } from "./scroll-fade";
43
49
  import { assertStableUiId, assertUniqueStableUiIds } from "./stable-id";
44
50
  const ResizeContext = createContext(true);
45
51
  const LayoutStateContext = createContext(null);
46
- const SidebarModeContext = createContext("desktop");
47
52
  const MAIN_PANE = Symbol("AppWorkspace.MainPane");
48
- const SIDEBAR_MOBILE_TRIGGER = Symbol("AppWorkspace.SidebarMobileTrigger");
49
- const SIDEBAR_MOBILE = Symbol("AppWorkspace.SidebarMobile");
50
53
  const SIDEBAR_DESKTOP = Symbol("AppWorkspace.SidebarDesktop");
51
54
  const SIDEBAR_ITEM_ICON = Symbol("AppWorkspace.SidebarItemIcon");
52
55
  const SIDEBAR_ITEM_LABEL = Symbol("AppWorkspace.SidebarItemLabel");
@@ -62,7 +65,7 @@ const flatten = value => {
62
65
  return value === null || value === undefined || typeof value === "boolean" ? [] : [value];
63
66
  };
64
67
  const mainPaneSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === MAIN_PANE);
65
- const sidebarChildSlot = value => Boolean(value && typeof value === "object" && "kind" in value && [SIDEBAR_MOBILE_TRIGGER, SIDEBAR_MOBILE, SIDEBAR_DESKTOP].includes(value.kind));
68
+ const sidebarChildSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === SIDEBAR_DESKTOP);
66
69
  const sidebarItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && [SIDEBAR_ITEM_ICON, SIDEBAR_ITEM_LABEL, SIDEBAR_ITEM_META, SIDEBAR_ITEM_ACTION].includes(value.kind));
67
70
  const navTreeItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === NAV_TREE_ITEM);
68
71
  function ResizeHandle(props) {
@@ -103,7 +106,7 @@ function AppWorkspaceMain(props) {
103
106
  const result = [];
104
107
  all.forEach((value, index) => {
105
108
  if (mainPaneSlot(value)) {
106
- if (value.props.open !== false) result.push({
109
+ result.push({
107
110
  type: "pane",
108
111
  index,
109
112
  slot: value
@@ -119,7 +122,7 @@ function AppWorkspaceMain(props) {
119
122
  });
120
123
  return result;
121
124
  });
122
- const anchorRegion = createMemo(() => regions().find(candidate => candidate.type === "primary") ?? regions()[0]);
125
+ const anchorRegion = createMemo(() => regions().find(candidate => candidate.type === "primary") ?? regions().find(candidate => candidate.type === "pane" && candidate.slot.props.open !== false));
123
126
  // Presence of a MainPane slot — not of an *open* one — decides the split
124
127
  // layout. Deriving it from `regions()` made a workspace whose panes are all
125
128
  // closed fall back to `resolved()`, which renders the raw slot objects.
@@ -131,6 +134,9 @@ function AppWorkspaceMain(props) {
131
134
  get ["data-mobile-pane"]() {
132
135
  return props.mobilePane;
133
136
  },
137
+ get ["data-scroll-fade-mode"]() {
138
+ return !hasPanes() && props.scroll !== false && props.scrollFade !== false ? "both" : undefined;
139
+ },
134
140
  get ["data-scroll"]() {
135
141
  return props.scroll === false ? "false" : undefined;
136
142
  },
@@ -145,43 +151,77 @@ function AppWorkspaceMain(props) {
145
151
  return resolved();
146
152
  },
147
153
  get children() {
148
- return regions().flatMap(region => {
149
- const anchor = anchorRegion();
150
- const activeMobilePane = props.mobilePane ?? (anchor?.type === "pane" ? anchor.slot.props.id : "main");
151
- if (region.type === "primary") {
152
- return _$ssr(_tmpl$2, _$ssrAttribute("data-workspace-mobile-active", activeMobilePane === "main" ? "true" : "false", false), _$escape(region.children));
153
- }
154
- const pane = region.slot;
155
- const panelId = assertStableUiId(pane.props.id, "AppWorkspace.MainPane id");
156
- const variable = appWorkspacePanelVariable("pane", panelId);
157
- const isAnchor = region === anchor;
158
- const resizable = !isAnchor && (pane.props.resizable ?? rootResizable);
159
- const defaultSize = pane.props.defaultSize ?? APP_WORKSPACE_PANE_DEFAULT;
160
- const minSize = pane.props.minSize ?? APP_WORKSPACE_PANE_MIN;
161
- const maxSize = Math.max(minSize, pane.props.maxSize ?? APP_WORKSPACE_PANE_MAX);
162
- const content = _$ssr(_tmpl$3, _$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-main-region", _$escape(pane.props.id, true), false) + _$ssrAttribute("data-workspace-mobile-active", 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", pane.props.scroll === false ? "false" : _$escape(undefined, true), false), _$ssrStyle(isAnchor ? undefined : {
163
- "--k2b-workspace-panel-size": `var(${variable}, ${defaultSize}px)`
164
- }), _$escape(pane.props.children));
165
- if (!resizable) return content;
166
- const before = region.index < (anchor?.index ?? 0);
167
- const handle = _$createComponent(ResizeHandle, {
168
- kind: "pane",
169
- edge: before ? "end" : "start",
170
- get controls() {
171
- return pane.domId;
172
- },
173
- panelId: panelId,
174
- defaultSize: defaultSize,
175
- minSize: minSize,
176
- maxSize: maxSize,
177
- get shadow() {
178
- return pane.props.resizeShadow !== false;
179
- },
180
- get label() {
181
- return `Resize ${pane.props.label}`;
154
+ return _$createComponent(For, {
155
+ get each() {
156
+ return regions();
157
+ },
158
+ children: region => {
159
+ const activeMobilePane = () => {
160
+ const anchor = anchorRegion();
161
+ return props.mobilePane ?? (anchor?.type === "pane" ? anchor.slot.props.id : "main");
162
+ };
163
+ if (region.type === "primary") {
164
+ return _$ssr(_tmpl$2, _$ssrAttribute("data-workspace-mobile-active", activeMobilePane() === "main" ? "true" : "false", false), _$escape(region.children));
182
165
  }
183
- });
184
- return before ? [content, handle] : [handle, content];
166
+ const pane = region.slot;
167
+ const panelId = assertStableUiId(pane.props.id, "AppWorkspace.MainPane id");
168
+ const variable = appWorkspacePanelVariable("pane", panelId);
169
+ const isAnchor = () => region === anchorRegion();
170
+ const resizable = () => !isAnchor() && (pane.props.resizable ?? rootResizable);
171
+ const defaultSize = () => pane.props.defaultSize ?? APP_WORKSPACE_PANE_DEFAULT;
172
+ const minSize = () => pane.props.minSize ?? APP_WORKSPACE_PANE_MIN;
173
+ const maxSize = () => Math.max(minSize(), pane.props.maxSize ?? APP_WORKSPACE_PANE_MAX);
174
+ const before = () => region.index < (anchorRegion()?.index ?? 0);
175
+ const handle = () => _$createComponent(ResizeHandle, {
176
+ kind: "pane",
177
+ get edge() {
178
+ return before() ? "end" : "start";
179
+ },
180
+ get controls() {
181
+ return pane.domId;
182
+ },
183
+ panelId: panelId,
184
+ get defaultSize() {
185
+ return defaultSize();
186
+ },
187
+ get minSize() {
188
+ return minSize();
189
+ },
190
+ get maxSize() {
191
+ return maxSize();
192
+ },
193
+ get shadow() {
194
+ return pane.props.resizeShadow !== false;
195
+ },
196
+ get label() {
197
+ return `Resize ${pane.props.label}`;
198
+ }
199
+ });
200
+ return _$createComponent(Show, {
201
+ get when() {
202
+ return pane.props.open !== false;
203
+ },
204
+ get children() {
205
+ return [_$createComponent(Show, {
206
+ get when() {
207
+ return resizable() && !before();
208
+ },
209
+ get children() {
210
+ return handle();
211
+ }
212
+ }), _$ssr(_tmpl$3, _$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-main-region", _$escape(pane.props.id, true), false) + _$ssrAttribute("data-workspace-mobile-active", 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", 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), _$ssrStyle(isAnchor() ? undefined : {
213
+ "--k2b-workspace-panel-size": `var(${variable}, ${defaultSize()}px)`
214
+ }), _$escape(pane.props.children)), _$createComponent(Show, {
215
+ get when() {
216
+ return resizable() && before();
217
+ },
218
+ get children() {
219
+ return handle();
220
+ }
221
+ })];
222
+ }
223
+ });
224
+ }
185
225
  });
186
226
  }
187
227
  })), false);
@@ -284,10 +324,6 @@ function AppWorkspaceBottomDrawer(props) {
284
324
  }
285
325
  }), _$ssr(_tmpl$4, _$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))];
286
326
  }
287
- const AppWorkspaceSidebarMobileTrigger = props => ({
288
- kind: SIDEBAR_MOBILE_TRIGGER,
289
- ...props
290
- });
291
327
  function AppWorkspaceSidebar(props) {
292
328
  const rootResizable = useContext(ResizeContext);
293
329
  const resizable = () => props.resizable ?? rootResizable;
@@ -298,27 +334,8 @@ function AppWorkspaceSidebar(props) {
298
334
  const domId = `k2b-workspace-sidebar-${generatedId}`;
299
335
  const resolved = children(() => props.children);
300
336
  const slots = createMemo(() => flatten(resolved()).filter(sidebarChildSlot));
301
- const mobileTrigger = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_MOBILE_TRIGGER));
302
- const mobile = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_MOBILE));
303
337
  const desktop = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_DESKTOP));
304
- return [_$createComponent(Show, {
305
- get when() {
306
- return mobileTrigger() && mobile();
307
- },
308
- get children() {
309
- return _$ssr(_tmpl$5, _$ssrAttribute("aria-label", _$escape(mobileTrigger().label, true), false), _$escape(mobileTrigger().label), _$escape(_$createComponent(SidebarModeContext.Provider, {
310
- value: "mobile",
311
- get children() {
312
- return mobile().children;
313
- }
314
- })));
315
- }
316
- }), _$ssr(_tmpl$6, _$ssrAttribute("id", _$escape(domId, true), false), `k2b-app-workspace__sidebar ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(mobileTrigger()?.label, true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-workspace-collapsible", props.collapsible ? "true" : "false", false), _$escape(_$createComponent(SidebarModeContext.Provider, {
317
- value: "desktop",
318
- get children() {
319
- return desktop()?.children;
320
- }
321
- }))), _$createComponent(Show, {
338
+ return [_$ssr(_tmpl$5, _$ssrAttribute("id", _$escape(domId, true), false), `k2b-app-workspace__sidebar ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.label, true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-workspace-collapsible", props.collapsible ? "true" : "false", false), _$escape(desktop()?.children)), _$createComponent(Show, {
322
339
  get when() {
323
340
  return resizable();
324
341
  },
@@ -343,73 +360,99 @@ function AppWorkspaceSidebar(props) {
343
360
  }
344
361
  })];
345
362
  }
346
- const AppWorkspaceSidebarMobile = props => ({
347
- kind: SIDEBAR_MOBILE,
348
- children: props.children
349
- });
350
363
  const AppWorkspaceSidebarDesktop = props => ({
351
364
  kind: SIDEBAR_DESKTOP,
352
365
  children: props.children
353
366
  });
354
- const AppWorkspaceSidebarMobileItems = props => _$ssrElement("div", _$mergeProps({
355
- "class": "k2b-app-workspace__sidebar-mobile-items"
356
- }, () => scrollAttrs(props.scrollPreserveKey)), _$escape(props.children), false);
357
- const AppWorkspaceSidebarBody = props => _$ssrElement("div", _$mergeProps({
358
- get ["class"]() {
359
- return `k2b-app-workspace__sidebar-body ${props.class ?? ""}`;
360
- }
361
- }, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), _$escape(props.children), false);
362
- const AppWorkspaceSidebarMobileBody = props => _$ssrElement("div", _$mergeProps({
363
- get ["class"]() {
364
- return `k2b-app-workspace__sidebar-mobile-body ${props.class ?? ""}`;
365
- }
366
- }, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), _$escape(props.children), false);
367
+ const AppWorkspaceSidebarBody = props => {
368
+ let body;
369
+ createScrollFade(() => body, () => props.scrollFade !== false);
370
+ return _$ssrElement("div", _$mergeProps({
371
+ get ["class"]() {
372
+ return `k2b-app-workspace__sidebar-body ${props.class ?? ""}`;
373
+ },
374
+ get ["data-scroll-fade-mode"]() {
375
+ return props.scrollFade !== false ? "both" : undefined;
376
+ }
377
+ }, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), _$escape(props.children), false);
378
+ };
367
379
  const AppWorkspaceSidebarFooter = props => _$ssrElement("footer", _$mergeProps({
368
380
  get ["class"]() {
369
381
  return `k2b-app-workspace__sidebar-footer ${props.class ?? ""}`;
370
382
  }
371
383
  }, () => modeAttrs(props.sidebarMode)), _$escape(props.children), false);
372
- const AppWorkspaceSidebarSection = props => _$ssrElement("section", _$mergeProps({
373
- get ["class"]() {
374
- return `k2b-app-workspace__sidebar-section ${props.class ?? ""}`;
375
- }
376
- }, () => modeAttrs(props.sidebarMode)), [_$escape(_$createComponent(Show, {
377
- get when() {
378
- return props.title || props.actions;
379
- },
380
- get children() {
381
- return _$ssr(_tmpl$8, _$escape(_$createComponent(Show, {
382
- get when() {
383
- return props.title;
384
- },
385
- children: title => _$ssr(_tmpl$9, _$escape(title()))
386
- })), _$escape(_$createComponent(Show, {
387
- get when() {
388
- return props.actions;
389
- },
390
- get children() {
391
- return _$ssr(_tmpl$7, _$escape(props.actions));
392
- }
393
- })));
394
- }
395
- })), _$escape(props.children)], false);
396
- const AppWorkspaceSidebarItemIcon = props => ({
397
- kind: SIDEBAR_ITEM_ICON,
398
- ...props
399
- });
400
- const AppWorkspaceSidebarItemLabel = props => ({
401
- kind: SIDEBAR_ITEM_LABEL,
402
- ...props
403
- });
404
- const AppWorkspaceSidebarItemMeta = props => ({
405
- kind: SIDEBAR_ITEM_META,
406
- ...props
407
- });
408
- const AppWorkspaceSidebarItemAction = props => ({
409
- kind: SIDEBAR_ITEM_ACTION,
410
- ...props
411
- });
412
- const AppWorkspaceSidebarItemActions = props => _$ssr(_tmpl$0, _$ssrAttribute("data-visibility", props.visibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(props.children));
384
+ const AppWorkspaceSidebarSection = props => {
385
+ const [expanded, setExpanded] = createSignal(props.defaultOpen ?? true);
386
+ const open = () => !props.collapsible || (props.open ?? expanded());
387
+ const id = `sidebar-section-${createUniqueId()}`;
388
+ const title = () => [_$createComponent(Show, {
389
+ get when() {
390
+ return props.icon;
391
+ },
392
+ get children() {
393
+ return _$ssr(_tmpl$6, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
394
+ }
395
+ }), props.title, _$createComponent(Show, {
396
+ get when() {
397
+ return props.count !== undefined;
398
+ },
399
+ get children() {
400
+ return _$ssr(_tmpl$7, _$escape(props.count));
401
+ }
402
+ })];
403
+ return _$ssrElement("section", _$mergeProps({
404
+ get ["class"]() {
405
+ return `k2b-app-workspace__sidebar-section ${props.class ?? ""}`;
406
+ },
407
+ get ["data-collapsible"]() {
408
+ return props.collapsible ? "true" : undefined;
409
+ }
410
+ }, () => modeAttrs(props.sidebarMode)), [_$escape(_$createComponent(Show, {
411
+ get when() {
412
+ return props.title || props.actions;
413
+ },
414
+ get children() {
415
+ return _$ssr(_tmpl$0, _$escape(_$createComponent(Show, {
416
+ get when() {
417
+ return props.collapsible;
418
+ },
419
+ get fallback() {
420
+ return _$createComponent(Show, {
421
+ get when() {
422
+ return props.title;
423
+ },
424
+ get children() {
425
+ return _$ssr(_tmpl$10, _$escape(title()));
426
+ }
427
+ });
428
+ },
429
+ get children() {
430
+ return _$ssr(_tmpl$8, _$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));
431
+ }
432
+ })), _$escape(_$createComponent(Show, {
433
+ get when() {
434
+ return props.actions;
435
+ },
436
+ get children() {
437
+ return _$ssr(_tmpl$9, _$escape(props.actions));
438
+ }
439
+ })));
440
+ }
441
+ })), _$ssr(_tmpl$1, _$ssrAttribute("id", _$escape(id, true), false), _$ssrAttribute("hidden", !open(), true), _$escape(props.children))], false);
442
+ };
443
+ const AppWorkspaceSidebarItemIcon = props => mergeProps({
444
+ kind: SIDEBAR_ITEM_ICON
445
+ }, props);
446
+ const AppWorkspaceSidebarItemLabel = props => mergeProps({
447
+ kind: SIDEBAR_ITEM_LABEL
448
+ }, props);
449
+ const AppWorkspaceSidebarItemMeta = props => mergeProps({
450
+ kind: SIDEBAR_ITEM_META
451
+ }, props);
452
+ const AppWorkspaceSidebarItemAction = props => mergeProps({
453
+ kind: SIDEBAR_ITEM_ACTION
454
+ }, props);
455
+ const AppWorkspaceSidebarItemActions = props => _$ssr(_tmpl$11, _$ssrAttribute("data-visibility", props.visibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(props.children));
413
456
  /** Shared visual and semantic row frame for flat sidebar items and tree items. */
414
457
  function AppWorkspaceSidebarRow(props) {
415
458
  const className = () => `k2b-app-workspace__sidebar-item ${props.hasActions ? "has-action" : ""} ${props.active ? props.activeClass ?? "is-active" : ""} ${props.class ?? ""}`;
@@ -418,7 +461,6 @@ function AppWorkspaceSidebarRow(props) {
418
461
  class: className(),
419
462
  title: props.title,
420
463
  "data-tone": props.tone,
421
- "data-mode": props.mode,
422
464
  style: {
423
465
  "view-transition-name": props.viewTransitionName,
424
466
  "--k2b-sidebar-item-depth": props.depth === undefined ? undefined : String(Math.max(0, props.depth))
@@ -426,102 +468,100 @@ function AppWorkspaceSidebarRow(props) {
426
468
  ...data()
427
469
  });
428
470
  const current = () => props.active ? "page" : undefined;
429
- if (props.hasActions) {
430
- if (!props.href || props.disabled) {
431
- return _$ssrElement("div", _$mergeProps(common, {
432
- get ["data-disabled"]() {
433
- return props.disabled ? "true" : undefined;
434
- }
435
- }), [_$ssr(_tmpl$1, _$ssrAttribute("tabindex", _$escape(props.tabIndex, true), false), _$ssrAttribute("disabled", props.disabled, true), _$escape(props.children)), _$escape(props.actions)], false);
436
- }
437
- if (props.navigation !== "enhanced" || !props.onNavigate) {
438
- return _$ssrElement("div", common(), [_$ssr(_tmpl$10, _$ssrAttribute("href", _$escape(props.href, true), false), _$ssrAttribute("tabindex", _$escape(props.tabIndex, true), false) + _$ssrAttribute("aria-current", _$escape(current(), true), false), _$escape(props.children)), _$escape(props.actions)], false);
439
- }
440
- return _$ssrElement("div", common(), [_$escape(_$createComponent(Link, {
441
- get href() {
442
- return props.href;
443
- },
444
- "class": "k2b-app-workspace__sidebar-item-main",
445
- get tabIndex() {
446
- return props.tabIndex;
447
- },
448
- get ["aria-current"]() {
449
- return current();
450
- },
451
- get replace() {
452
- return props.replace;
453
- },
454
- get scroll() {
455
- return props.scroll;
456
- },
457
- get onNavigate() {
458
- return props.onNavigate;
471
+ const Control = control => {
472
+ const attrs = () => control.grouped ? {
473
+ class: "k2b-app-workspace__sidebar-item-main"
474
+ } : common();
475
+ return _$createComponent(Show, {
476
+ get when() {
477
+ return Boolean(props.href && !props.disabled);
459
478
  },
460
- get onClick() {
461
- return props.onClick;
479
+ get fallback() {
480
+ return _$ssrElement("button", _$mergeProps({
481
+ type: "button"
482
+ }, attrs, {
483
+ get tabIndex() {
484
+ return props.tabIndex;
485
+ },
486
+ get disabled() {
487
+ return props.disabled;
488
+ }
489
+ }), _$escape(props.children), false);
462
490
  },
463
491
  get children() {
464
- return props.children;
465
- }
466
- })), _$escape(props.actions)], false);
467
- }
468
- if (!props.href || props.disabled) {
469
- return _$ssrElement("button", _$mergeProps({
470
- type: "button"
471
- }, common, {
472
- get tabIndex() {
473
- return props.tabIndex;
474
- },
475
- get disabled() {
476
- return props.disabled;
477
- }
478
- }), _$escape(props.children), false);
479
- }
480
- if (props.navigation !== "enhanced" || !props.onNavigate) {
481
- return _$ssrElement("a", _$mergeProps({
482
- get href() {
483
- return props.href;
484
- }
485
- }, common, {
486
- get tabIndex() {
487
- return props.tabIndex;
488
- },
489
- get ["aria-current"]() {
490
- return current();
492
+ return _$createComponent(Show, {
493
+ get when() {
494
+ return props.navigation === "enhanced" && Boolean(props.onNavigate);
495
+ },
496
+ get fallback() {
497
+ return _$ssrElement("a", _$mergeProps({
498
+ get href() {
499
+ return props.href;
500
+ }
501
+ }, attrs, {
502
+ get tabIndex() {
503
+ return props.tabIndex;
504
+ },
505
+ get ["aria-current"]() {
506
+ return current();
507
+ }
508
+ }), _$escape(props.children), false);
509
+ },
510
+ get children() {
511
+ return _$createComponent(Link, _$mergeProps({
512
+ get href() {
513
+ return props.href;
514
+ }
515
+ }, attrs, {
516
+ get tabIndex() {
517
+ return props.tabIndex;
518
+ },
519
+ get ["aria-current"]() {
520
+ return current();
521
+ },
522
+ get replace() {
523
+ return props.replace;
524
+ },
525
+ get scroll() {
526
+ return props.scroll;
527
+ },
528
+ get onNavigate() {
529
+ return props.onNavigate;
530
+ },
531
+ get onClick() {
532
+ return props.onClick;
533
+ },
534
+ get children() {
535
+ return props.children;
536
+ }
537
+ }));
538
+ }
539
+ });
491
540
  }
492
- }), _$escape(props.children), false);
493
- }
494
- return _$createComponent(Link, _$mergeProps({
495
- get href() {
496
- return props.href;
497
- }
498
- }, common, {
499
- get tabIndex() {
500
- return props.tabIndex;
501
- },
502
- get ["aria-current"]() {
503
- return current();
504
- },
505
- get replace() {
506
- return props.replace;
507
- },
508
- get scroll() {
509
- return props.scroll;
510
- },
511
- get onNavigate() {
512
- return props.onNavigate;
541
+ });
542
+ };
543
+ return _$createComponent(Show, {
544
+ get when() {
545
+ return props.hasActions;
513
546
  },
514
- get onClick() {
515
- return props.onClick;
547
+ get fallback() {
548
+ return _$createComponent(Control, {
549
+ grouped: false
550
+ });
516
551
  },
517
552
  get children() {
518
- return props.children;
553
+ return _$ssrElement("div", _$mergeProps(common, {
554
+ get ["data-disabled"]() {
555
+ return props.disabled ? "true" : undefined;
556
+ }
557
+ }), [_$escape(_$createComponent(Control, {
558
+ grouped: true
559
+ })), _$escape(props.actions)], false);
519
560
  }
520
- }));
561
+ });
521
562
  }
522
563
  function AppWorkspaceSidebarItem(props) {
523
564
  const messages = useUiMessages();
524
- const mode = useContext(SidebarModeContext);
525
565
  const resolved = children(() => props.children);
526
566
  const resolvedActions = children(() => props.actions);
527
567
  const values = createMemo(() => flatten(resolved()));
@@ -538,43 +578,99 @@ function AppWorkspaceSidebarItem(props) {
538
578
  const metaVisibility = () => metaSlot()?.visibility ?? props.metaVisibility;
539
579
  const customActions = () => resolvedActions();
540
580
  const hasCustomActions = () => Boolean(customActions());
541
- const hasAction = () => Boolean(actionSlot() || props.actionIcon || hasCustomActions());
581
+ const hasAction = () => Boolean(actionSlot() || props.actionIcon || hasCustomActions() || props.preview);
542
582
  const mainContent = [_$createComponent(Show, {
543
583
  get when() {
544
584
  return iconContent() || icon();
545
585
  },
546
586
  get children() {
547
- return _$ssr(_tmpl$11, _$escape(iconContent() ?? _$ssr(_tmpl$13, _$ssrAttribute("class", _$escape(iconClass(icon()), true), false))));
587
+ return _$ssr(_tmpl$12, _$escape(iconContent() ?? _$ssr(_tmpl$17, _$ssrAttribute("class", _$escape(iconClass(icon()), true), false))));
588
+ }
589
+ }), _$ssr(_tmpl$16, _$escape(_$createComponent(Show, {
590
+ get when() {
591
+ return props.context || props.contextMeta;
592
+ },
593
+ get children() {
594
+ return _$ssr(_tmpl$14, _$escape(props.context), _$escape(_$createComponent(Show, {
595
+ get when() {
596
+ return props.contextMeta;
597
+ },
598
+ get children() {
599
+ return _$ssr(_tmpl$13, _$escape(props.contextMeta));
600
+ }
601
+ })));
602
+ }
603
+ })), _$ssrAttribute("data-marquee", labelSlot()?.marquee ?? props.variant !== "card" ? "true" : "false", false), _$escape(label()), _$escape(_$createComponent(Show, {
604
+ get when() {
605
+ return props.description;
606
+ },
607
+ get children() {
608
+ return _$ssr(_tmpl$15, _$escape(props.description));
548
609
  }
549
- }), _$ssr(_tmpl$12, _$ssrAttribute("data-marquee", labelSlot()?.marquee === false ? _$escape(undefined, true) : "true", false), _$escape(label())), _$createComponent(Show, {
610
+ }))), _$createComponent(Show, {
550
611
  get when() {
551
612
  return meta();
552
613
  },
553
- children: value => _$ssr(_tmpl$14, _$ssrAttribute("data-visibility", metaVisibility() === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(value()))
614
+ children: value => _$ssr(_tmpl$18, _$ssrAttribute("data-visibility", metaVisibility() === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(value()))
554
615
  })];
555
616
  const singleAction = () => {
556
- const slot = actionSlot();
557
- if (!slot && !props.actionIcon) return null;
558
- const content = slot?.children ?? _$ssr(_tmpl$13, _$ssrAttribute("class", _$escape(iconClass(slot?.icon ?? props.actionIcon, "ti-dots"), true), false));
559
- const label = slot?.label ?? props.actionLabel ?? messages().rowAction;
617
+ const label = () => actionSlot()?.label ?? props.actionLabel ?? messages().rowAction;
560
618
  const select = event => {
561
- event.preventDefault();
562
- event.stopPropagation();
563
- slot?.onSelect?.(event);
564
- props.onActionClick?.(event);
565
- };
566
- // A row action that is a link must still navigate — only the row's own
567
- // click handling is suppressed.
568
- const follow = event => {
569
619
  event.stopPropagation();
570
- slot?.onSelect?.(event);
620
+ if (actionSlot()?.disabled) {
621
+ event.preventDefault();
622
+ return;
623
+ }
624
+ if (!actionSlot()?.href) event.preventDefault();
625
+ actionSlot()?.onSelect?.(event);
571
626
  props.onActionClick?.(event);
572
627
  };
573
- return slot?.href ? _$ssr(_tmpl$15, _$ssrAttribute("href", _$escape(slot.href, true), false), _$ssrAttribute("data-visibility", slot.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label, true), false), _$escape(content)) : _$ssr(_tmpl$16, _$ssrAttribute("data-visibility", slot?.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label, true), false), _$escape(content));
628
+ const content = () => actionSlot()?.children ?? _$ssr(_tmpl$17, _$ssrAttribute("class", _$escape(iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots"), true), false));
629
+ return _$createComponent(Show, {
630
+ get when() {
631
+ return Boolean(actionSlot() || props.actionIcon);
632
+ },
633
+ get children() {
634
+ return _$createComponent(Show, {
635
+ get when() {
636
+ return actionSlot()?.href && !actionSlot()?.disabled;
637
+ },
638
+ get fallback() {
639
+ return _$ssr(_tmpl$20, _$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()));
640
+ },
641
+ get children() {
642
+ return _$ssr(_tmpl$19, _$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()));
643
+ }
644
+ });
645
+ }
646
+ });
574
647
  };
575
- const actions = () => [customActions(), singleAction()];
648
+ const actions = () => [customActions(), singleAction(), _$createComponent(Show, {
649
+ get when() {
650
+ return props.preview;
651
+ },
652
+ children: preview => _$createComponent(SidebarItemPreview, {
653
+ get label() {
654
+ return preview().label;
655
+ },
656
+ get trigger() {
657
+ return preview().trigger;
658
+ },
659
+ get align() {
660
+ return preview().align;
661
+ },
662
+ get viewportSize() {
663
+ return preview().viewportSize;
664
+ },
665
+ get onOpenChange() {
666
+ return preview().onOpenChange;
667
+ },
668
+ get children() {
669
+ return preview().content;
670
+ }
671
+ })
672
+ })];
576
673
  return _$createComponent(AppWorkspaceSidebarRow, {
577
- mode: mode,
578
674
  get hasActions() {
579
675
  return hasAction();
580
676
  },
@@ -627,6 +723,7 @@ function AppWorkspaceSidebarItem(props) {
627
723
  return {
628
724
  ...props.data,
629
725
  ...modeData(props.sidebarMode),
726
+ variant: props.variant ?? "row",
630
727
  "has-actions": hasCustomActions() ? "true" : undefined,
631
728
  "action-visibility": actionSlot()?.visibility === "hover" ? "hover" : undefined
632
729
  };
@@ -640,7 +737,6 @@ const AppWorkspaceNavTreeItem = props => ({
640
737
  ...props
641
738
  });
642
739
  const AppWorkspaceNavTree = props => {
643
- const mode = useContext(SidebarModeContext);
644
740
  let root;
645
741
  const resolved = children(() => props.children);
646
742
  const roots = createMemo(() => navTreeItems(resolved()));
@@ -683,9 +779,11 @@ const AppWorkspaceNavTree = props => {
683
779
  preventScroll: true
684
780
  });
685
781
  };
782
+
783
+ // Items arrive through an accessor so a changed nested list reconciles rows by identity instead of rebuilding the list.
686
784
  const renderItems = (value, depth, parentId) => _$createComponent(For, {
687
785
  get each() {
688
- return navTreeItems(value);
786
+ return navTreeItems(value());
689
787
  },
690
788
  children: item => {
691
789
  const nested = createMemo(() => navTreeItems(item.children));
@@ -777,25 +875,24 @@ const AppWorkspaceNavTree = props => {
777
875
  return rowIcon();
778
876
  },
779
877
  get children() {
780
- return _$ssr(_tmpl$17, _$ssrAttribute("data-k2b-nav-tree-toggle", usesIconDisclosure() ? "" : _$escape(undefined, true), false), _$ssrAttribute("class", _$escape(iconClass(rowIcon()), true), false));
878
+ return _$ssr(_tmpl$21, _$ssrAttribute("data-k2b-nav-tree-toggle", usesIconDisclosure() ? "" : _$escape(undefined, true), false), _$ssrAttribute("class", _$escape(iconClass(rowIcon()), true), false));
781
879
  }
782
- }), _$ssr(_tmpl$18, _$escape(item.label)), _$createComponent(Show, {
880
+ }), _$ssr(_tmpl$22, _$escape(item.label)), _$createComponent(Show, {
783
881
  get when() {
784
882
  return item.meta !== undefined;
785
883
  },
786
884
  get children() {
787
- return _$ssr(_tmpl$19, `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));
885
+ return _$ssr(_tmpl$23, `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));
788
886
  }
789
887
  }), _$createComponent(Show, {
790
888
  get when() {
791
889
  return hasChildren() && !usesIconDisclosure();
792
890
  },
793
891
  get children() {
794
- return _$ssr(_tmpl$20, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`);
892
+ return _$ssr(_tmpl$24, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`);
795
893
  }
796
894
  })];
797
895
  const row = () => _$createComponent(AppWorkspaceSidebarRow, {
798
- mode: mode,
799
896
  get hasActions() {
800
897
  return Boolean(item.actions);
801
898
  },
@@ -847,17 +944,17 @@ const AppWorkspaceNavTree = props => {
847
944
  },
848
945
  children: rowContent
849
946
  });
850
- return _$ssr(_tmpl$22, _$ssrAttribute("aria-level", _$escape(depth, 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("data-k2b-nav-tree-id", _$escape(item.id, true), false) + _$ssrAttribute("data-k2b-nav-tree-parent-id", _$escape(parentId, true), false), _$escape(row()), _$escape(_$createComponent(Show, {
947
+ return _$ssr(_tmpl$26, _$ssrAttribute("aria-level", _$escape(depth, 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("data-k2b-nav-tree-id", _$escape(item.id, true), false) + _$ssrAttribute("data-k2b-nav-tree-parent-id", _$escape(parentId, true), false), _$escape(row()), _$escape(_$createComponent(Show, {
851
948
  get when() {
852
949
  return hasChildren() && isExpanded(item.id);
853
950
  },
854
951
  get children() {
855
- return _$ssr(_tmpl$21, _$escape(renderItems(nested(), depth + 1, item.id)));
952
+ return _$ssr(_tmpl$25, _$escape(renderItems(nested, depth + 1, item.id)));
856
953
  }
857
954
  })));
858
955
  }
859
956
  });
860
- return _$ssr(_tmpl$23, `k2b-app-workspace__nav-tree ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.ariaLabel, true), false), _$escape(renderItems(roots(), 0)));
957
+ return _$ssr(_tmpl$27, `k2b-app-workspace__nav-tree ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.ariaLabel, true), false), _$escape(renderItems(roots, 0)));
861
958
  };
862
959
  AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
863
960
  const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProps({
@@ -868,10 +965,10 @@ const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProp
868
965
  get when() {
869
966
  return props.title;
870
967
  },
871
- children: title => _$ssr(_tmpl$9, _$escape(title()))
872
- })), _$ssr(_tmpl$24, _$ssrAttribute("data-columns", _$escape(props.columns ?? 2, true), false), _$escape(props.children))], false);
968
+ children: title => _$ssr(_tmpl$10, _$escape(title()))
969
+ })), _$ssr(_tmpl$28, _$ssrAttribute("data-columns", _$escape(props.columns ?? 2, true), false), _$escape(props.children))], false);
873
970
  const AppWorkspaceSidebarIconAction = props => {
874
- const content = _$ssr(_tmpl$25, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
971
+ const content = _$ssr(_tmpl$29, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
875
972
  const attrs = () => ({
876
973
  class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
877
974
  title: props.label,
@@ -937,7 +1034,7 @@ const AppWorkspace = props => {
937
1034
  return props.resizable !== false;
938
1035
  },
939
1036
  get children() {
940
- return _$ssr(_tmpl$26, `k2b-app-workspace ${_$escape(props.class ?? "", true)}`, _$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(props.children));
1037
+ return _$ssr(_tmpl$30, `k2b-app-workspace ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-mobile-surface", _$escape(props.mobileSurface, 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(props.children));
941
1038
  }
942
1039
  });
943
1040
  };
@@ -949,16 +1046,12 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
949
1046
  return props.children;
950
1047
  }
951
1048
  });
952
- AppWorkspace.Content = props => _$ssr(_tmpl$27, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
1049
+ AppWorkspace.Content = props => _$ssr(_tmpl$31, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
953
1050
  AppWorkspace.Main = AppWorkspaceMain;
954
1051
  AppWorkspace.MainPane = AppWorkspaceMainPane;
955
1052
  AppWorkspace.Detail = AppWorkspaceDetail;
956
1053
  AppWorkspace.BottomDrawer = AppWorkspaceBottomDrawer;
957
1054
  AppWorkspace.Sidebar = AppWorkspaceSidebar;
958
- AppWorkspace.SidebarMobileTrigger = AppWorkspaceSidebarMobileTrigger;
959
- AppWorkspace.SidebarMobile = AppWorkspaceSidebarMobile;
960
- AppWorkspace.SidebarMobileItems = AppWorkspaceSidebarMobileItems;
961
- AppWorkspace.SidebarMobileBody = AppWorkspaceSidebarMobileBody;
962
1055
  AppWorkspace.SidebarDesktop = AppWorkspaceSidebarDesktop;
963
1056
  AppWorkspace.SidebarSection = AppWorkspaceSidebarSection;
964
1057
  AppWorkspace.SidebarBody = AppWorkspaceSidebarBody;