@k2b/ui 0.1.0-rc.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 (548) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +343 -0
  3. package/dist/.build-complete +0 -0
  4. package/dist/browser/actions/Button.js +236 -0
  5. package/dist/browser/actions/Button.js.map +1 -0
  6. package/dist/browser/actions/ContextMenu.js +199 -0
  7. package/dist/browser/actions/ContextMenu.js.map +1 -0
  8. package/dist/browser/actions/CopyButton.js +97 -0
  9. package/dist/browser/actions/CopyButton.js.map +1 -0
  10. package/dist/browser/actions/Disclosure.js +83 -0
  11. package/dist/browser/actions/Disclosure.js.map +1 -0
  12. package/dist/browser/actions/Dropdown.js +669 -0
  13. package/dist/browser/actions/Dropdown.js.map +1 -0
  14. package/dist/browser/actions/FilterChip.js +149 -0
  15. package/dist/browser/actions/FilterChip.js.map +1 -0
  16. package/dist/browser/actions/RemoveButton.js +47 -0
  17. package/dist/browser/actions/RemoveButton.js.map +1 -0
  18. package/dist/browser/actions/SegmentedControl.js +138 -0
  19. package/dist/browser/actions/SegmentedControl.js.map +1 -0
  20. package/dist/browser/actions/SplitButton.js +76 -0
  21. package/dist/browser/actions/SplitButton.js.map +1 -0
  22. package/dist/browser/actions/SpotlightSearch.js +87 -0
  23. package/dist/browser/actions/SpotlightSearch.js.map +1 -0
  24. package/dist/browser/actions/Tabs.js +185 -0
  25. package/dist/browser/actions/Tabs.js.map +1 -0
  26. package/dist/browser/actions/Toolbar.js +87 -0
  27. package/dist/browser/actions/Toolbar.js.map +1 -0
  28. package/dist/browser/actions/index.js +13 -0
  29. package/dist/browser/actions/index.js.map +1 -0
  30. package/dist/browser/chat/ChatComposer.js +760 -0
  31. package/dist/browser/chat/ChatComposer.js.map +1 -0
  32. package/dist/browser/chat/ChatPrimitives.js +688 -0
  33. package/dist/browser/chat/ChatPrimitives.js.map +1 -0
  34. package/dist/browser/chat/ChatRoot.js +27 -0
  35. package/dist/browser/chat/ChatRoot.js.map +1 -0
  36. package/dist/browser/chat/ChatTimeline.js +404 -0
  37. package/dist/browser/chat/ChatTimeline.js.map +1 -0
  38. package/dist/browser/chat/chat-behavior.js +53 -0
  39. package/dist/browser/chat/chat-behavior.js.map +1 -0
  40. package/dist/browser/chat/index.js +17 -0
  41. package/dist/browser/chat/index.js.map +1 -0
  42. package/dist/browser/chat/types.js +2 -0
  43. package/dist/browser/chat/types.js.map +1 -0
  44. package/dist/browser/content/Calendar.js +2168 -0
  45. package/dist/browser/content/Calendar.js.map +1 -0
  46. package/dist/browser/content/Chart.js +680 -0
  47. package/dist/browser/content/Chart.js.map +1 -0
  48. package/dist/browser/content/CodeDisplay.js +104 -0
  49. package/dist/browser/content/CodeDisplay.js.map +1 -0
  50. package/dist/browser/content/DataTable.js +724 -0
  51. package/dist/browser/content/DataTable.js.map +1 -0
  52. package/dist/browser/content/Docs.js +227 -0
  53. package/dist/browser/content/Docs.js.map +1 -0
  54. package/dist/browser/content/FileBrowser.js +462 -0
  55. package/dist/browser/content/FileBrowser.js.map +1 -0
  56. package/dist/browser/content/FileTree.js +453 -0
  57. package/dist/browser/content/FileTree.js.map +1 -0
  58. package/dist/browser/content/FileView.js +842 -0
  59. package/dist/browser/content/FileView.js.map +1 -0
  60. package/dist/browser/content/Lightbox.js +285 -0
  61. package/dist/browser/content/Lightbox.js.map +1 -0
  62. package/dist/browser/content/LogEntriesTable.js +139 -0
  63. package/dist/browser/content/LogEntriesTable.js.map +1 -0
  64. package/dist/browser/content/MarkdownView.js +138 -0
  65. package/dist/browser/content/MarkdownView.js.map +1 -0
  66. package/dist/browser/content/Pagination.js +182 -0
  67. package/dist/browser/content/Pagination.js.map +1 -0
  68. package/dist/browser/content/PdfPreview.js +204 -0
  69. package/dist/browser/content/PdfPreview.js.map +1 -0
  70. package/dist/browser/content/RangePicker.js +83 -0
  71. package/dist/browser/content/RangePicker.js.map +1 -0
  72. package/dist/browser/content/StructuredDataPreview.js +194 -0
  73. package/dist/browser/content/StructuredDataPreview.js.map +1 -0
  74. package/dist/browser/content/calendar-event-layout.js +92 -0
  75. package/dist/browser/content/calendar-event-layout.js.map +1 -0
  76. package/dist/browser/content/calendar-pointer.js +114 -0
  77. package/dist/browser/content/calendar-pointer.js.map +1 -0
  78. package/dist/browser/content/chart-map-viewport.js +33 -0
  79. package/dist/browser/content/chart-map-viewport.js.map +1 -0
  80. package/dist/browser/content/chart-state-timeline.js +124 -0
  81. package/dist/browser/content/chart-state-timeline.js.map +1 -0
  82. package/dist/browser/content/code-highlight.js +144 -0
  83. package/dist/browser/content/code-highlight.js.map +1 -0
  84. package/dist/browser/content/file-tree.js +93 -0
  85. package/dist/browser/content/file-tree.js.map +1 -0
  86. package/dist/browser/content/file-view-preview.js +112 -0
  87. package/dist/browser/content/file-view-preview.js.map +1 -0
  88. package/dist/browser/content/index.js +16 -0
  89. package/dist/browser/content/index.js.map +1 -0
  90. package/dist/browser/feedback/InlineGuidance.js +46 -0
  91. package/dist/browser/feedback/InlineGuidance.js.map +1 -0
  92. package/dist/browser/feedback/Tooltip.js +189 -0
  93. package/dist/browser/feedback/Tooltip.js.map +1 -0
  94. package/dist/browser/feedback/dialog-core.js +207 -0
  95. package/dist/browser/feedback/dialog-core.js.map +1 -0
  96. package/dist/browser/feedback/index.js +6 -0
  97. package/dist/browser/feedback/index.js.map +1 -0
  98. package/dist/browser/feedback/prompts.js +991 -0
  99. package/dist/browser/feedback/prompts.js.map +1 -0
  100. package/dist/browser/feedback/toast.js +271 -0
  101. package/dist/browser/feedback/toast.js.map +1 -0
  102. package/dist/browser/feedback/tooltip-position.js +25 -0
  103. package/dist/browser/feedback/tooltip-position.js.map +1 -0
  104. package/dist/browser/index.js +11 -0
  105. package/dist/browser/index.js.map +1 -0
  106. package/dist/browser/inputs/AutocompleteEditor.js +610 -0
  107. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -0
  108. package/dist/browser/inputs/AutocompleteSelect.js +632 -0
  109. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -0
  110. package/dist/browser/inputs/Checkbox.js +137 -0
  111. package/dist/browser/inputs/Checkbox.js.map +1 -0
  112. package/dist/browser/inputs/CheckboxCard.js +130 -0
  113. package/dist/browser/inputs/CheckboxCard.js.map +1 -0
  114. package/dist/browser/inputs/ChoiceGroups.js +174 -0
  115. package/dist/browser/inputs/ChoiceGroups.js.map +1 -0
  116. package/dist/browser/inputs/ChoiceInputs.js +400 -0
  117. package/dist/browser/inputs/ChoiceInputs.js.map +1 -0
  118. package/dist/browser/inputs/Combobox.js +274 -0
  119. package/dist/browser/inputs/Combobox.js.map +1 -0
  120. package/dist/browser/inputs/DatePicker.js +923 -0
  121. package/dist/browser/inputs/DatePicker.js.map +1 -0
  122. package/dist/browser/inputs/FileInputs.js +736 -0
  123. package/dist/browser/inputs/FileInputs.js.map +1 -0
  124. package/dist/browser/inputs/MultiSelectInput.js +565 -0
  125. package/dist/browser/inputs/MultiSelectInput.js.map +1 -0
  126. package/dist/browser/inputs/NumberInput.js +288 -0
  127. package/dist/browser/inputs/NumberInput.js.map +1 -0
  128. package/dist/browser/inputs/Select.js +507 -0
  129. package/dist/browser/inputs/Select.js.map +1 -0
  130. package/dist/browser/inputs/SelectChip.js +151 -0
  131. package/dist/browser/inputs/SelectChip.js.map +1 -0
  132. package/dist/browser/inputs/SpecialInputs.js +117 -0
  133. package/dist/browser/inputs/SpecialInputs.js.map +1 -0
  134. package/dist/browser/inputs/Switch.js +117 -0
  135. package/dist/browser/inputs/Switch.js.map +1 -0
  136. package/dist/browser/inputs/TagEditor.js +358 -0
  137. package/dist/browser/inputs/TagEditor.js.map +1 -0
  138. package/dist/browser/inputs/TagsInput.js +195 -0
  139. package/dist/browser/inputs/TagsInput.js.map +1 -0
  140. package/dist/browser/inputs/TemplateEditor.js +190 -0
  141. package/dist/browser/inputs/TemplateEditor.js.map +1 -0
  142. package/dist/browser/inputs/TextInput.js +318 -0
  143. package/dist/browser/inputs/TextInput.js.map +1 -0
  144. package/dist/browser/inputs/choice.js +188 -0
  145. package/dist/browser/inputs/choice.js.map +1 -0
  146. package/dist/browser/inputs/completion/behaviors.js +108 -0
  147. package/dist/browser/inputs/completion/behaviors.js.map +1 -0
  148. package/dist/browser/inputs/completion/engine.js +103 -0
  149. package/dist/browser/inputs/completion/engine.js.map +1 -0
  150. package/dist/browser/inputs/completion/index.js +4 -0
  151. package/dist/browser/inputs/completion/index.js.map +1 -0
  152. package/dist/browser/inputs/completion/overlay.js +25 -0
  153. package/dist/browser/inputs/completion/overlay.js.map +1 -0
  154. package/dist/browser/inputs/date-picker.js +123 -0
  155. package/dist/browser/inputs/date-picker.js.map +1 -0
  156. package/dist/browser/inputs/editor-dom.js +26 -0
  157. package/dist/browser/inputs/editor-dom.js.map +1 -0
  158. package/dist/browser/inputs/field-contract.js +9 -0
  159. package/dist/browser/inputs/field-contract.js.map +1 -0
  160. package/dist/browser/inputs/icon-options.js +46 -0
  161. package/dist/browser/inputs/icon-options.js.map +1 -0
  162. package/dist/browser/inputs/image-crop.js +145 -0
  163. package/dist/browser/inputs/image-crop.js.map +1 -0
  164. package/dist/browser/inputs/index.js +23 -0
  165. package/dist/browser/inputs/index.js.map +1 -0
  166. package/dist/browser/inputs/markdown/MarkdownEditor.js +725 -0
  167. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -0
  168. package/dist/browser/inputs/markdown/Toolbar.js +172 -0
  169. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -0
  170. package/dist/browser/inputs/markdown/actions.js +140 -0
  171. package/dist/browser/inputs/markdown/actions.js.map +1 -0
  172. package/dist/browser/inputs/markdown/active-formats.js +36 -0
  173. package/dist/browser/inputs/markdown/active-formats.js.map +1 -0
  174. package/dist/browser/inputs/markdown/behaviors.js +63 -0
  175. package/dist/browser/inputs/markdown/behaviors.js.map +1 -0
  176. package/dist/browser/inputs/markdown/code-zone.js +8 -0
  177. package/dist/browser/inputs/markdown/code-zone.js.map +1 -0
  178. package/dist/browser/internal/color.js +18 -0
  179. package/dist/browser/internal/color.js.map +1 -0
  180. package/dist/browser/internal/field.js +158 -0
  181. package/dist/browser/internal/field.js.map +1 -0
  182. package/dist/browser/internal/portal.js +17 -0
  183. package/dist/browser/internal/portal.js.map +1 -0
  184. package/dist/browser/intl/Format.js +273 -0
  185. package/dist/browser/intl/Format.js.map +1 -0
  186. package/dist/browser/intl/index.js +3 -0
  187. package/dist/browser/intl/index.js.map +1 -0
  188. package/dist/browser/intl/locale.js +63 -0
  189. package/dist/browser/intl/locale.js.map +1 -0
  190. package/dist/browser/intl/messages.js +753 -0
  191. package/dist/browser/intl/messages.js.map +1 -0
  192. package/dist/browser/layout/AppOverview.js +151 -0
  193. package/dist/browser/layout/AppOverview.js.map +1 -0
  194. package/dist/browser/layout/AppWorkspace.js +1502 -0
  195. package/dist/browser/layout/AppWorkspace.js.map +1 -0
  196. package/dist/browser/layout/DataPanel.js +122 -0
  197. package/dist/browser/layout/DataPanel.js.map +1 -0
  198. package/dist/browser/layout/DetailPanel.js +484 -0
  199. package/dist/browser/layout/DetailPanel.js.map +1 -0
  200. package/dist/browser/layout/Discussion.js +511 -0
  201. package/dist/browser/layout/Discussion.js.map +1 -0
  202. package/dist/browser/layout/FloatingWindow.js +332 -0
  203. package/dist/browser/layout/FloatingWindow.js.map +1 -0
  204. package/dist/browser/layout/PanelDialog.js +236 -0
  205. package/dist/browser/layout/PanelDialog.js.map +1 -0
  206. package/dist/browser/layout/PanelHeader.js +91 -0
  207. package/dist/browser/layout/PanelHeader.js.map +1 -0
  208. package/dist/browser/layout/Panes.js +978 -0
  209. package/dist/browser/layout/Panes.js.map +1 -0
  210. package/dist/browser/layout/ScrollArea.js +29 -0
  211. package/dist/browser/layout/ScrollArea.js.map +1 -0
  212. package/dist/browser/layout/Settings.js +381 -0
  213. package/dist/browser/layout/Settings.js.map +1 -0
  214. package/dist/browser/layout/SettingsCollection.js +212 -0
  215. package/dist/browser/layout/SettingsCollection.js.map +1 -0
  216. package/dist/browser/layout/SettingsModal.js +281 -0
  217. package/dist/browser/layout/SettingsModal.js.map +1 -0
  218. package/dist/browser/layout/app-workspace-controller.js +419 -0
  219. package/dist/browser/layout/app-workspace-controller.js.map +1 -0
  220. package/dist/browser/layout/app-workspace-state.js +125 -0
  221. package/dist/browser/layout/app-workspace-state.js.map +1 -0
  222. package/dist/browser/layout/floating-window-geometry.js +15 -0
  223. package/dist/browser/layout/floating-window-geometry.js.map +1 -0
  224. package/dist/browser/layout/index.js +17 -0
  225. package/dist/browser/layout/index.js.map +1 -0
  226. package/dist/browser/layout/panes-layout.js +436 -0
  227. package/dist/browser/layout/panes-layout.js.map +1 -0
  228. package/dist/browser/layout/stable-id.js +17 -0
  229. package/dist/browser/layout/stable-id.js.map +1 -0
  230. package/dist/browser/semantics.js +2 -0
  231. package/dist/browser/semantics.js.map +1 -0
  232. package/dist/browser/surfaces/Avatar.js +97 -0
  233. package/dist/browser/surfaces/Avatar.js.map +1 -0
  234. package/dist/browser/surfaces/DescriptionList.js +66 -0
  235. package/dist/browser/surfaces/DescriptionList.js.map +1 -0
  236. package/dist/browser/surfaces/LinkCard.js +40 -0
  237. package/dist/browser/surfaces/LinkCard.js.map +1 -0
  238. package/dist/browser/surfaces/NotFoundState.js +85 -0
  239. package/dist/browser/surfaces/NotFoundState.js.map +1 -0
  240. package/dist/browser/surfaces/NoticeCard.js +145 -0
  241. package/dist/browser/surfaces/NoticeCard.js.map +1 -0
  242. package/dist/browser/surfaces/Paper.js +33 -0
  243. package/dist/browser/surfaces/Paper.js.map +1 -0
  244. package/dist/browser/surfaces/Placeholder.js +90 -0
  245. package/dist/browser/surfaces/Placeholder.js.map +1 -0
  246. package/dist/browser/surfaces/ProgressBar.js +58 -0
  247. package/dist/browser/surfaces/ProgressBar.js.map +1 -0
  248. package/dist/browser/surfaces/StatCell.js +172 -0
  249. package/dist/browser/surfaces/StatCell.js.map +1 -0
  250. package/dist/browser/surfaces/StatGrid.js +80 -0
  251. package/dist/browser/surfaces/StatGrid.js.map +1 -0
  252. package/dist/browser/surfaces/StatusBadge.js +70 -0
  253. package/dist/browser/surfaces/StatusBadge.js.map +1 -0
  254. package/dist/browser/surfaces/Tag.js +94 -0
  255. package/dist/browser/surfaces/Tag.js.map +1 -0
  256. package/dist/browser/surfaces/index.js +13 -0
  257. package/dist/browser/surfaces/index.js.map +1 -0
  258. package/dist/browser/widgets/Widget.js +89 -0
  259. package/dist/browser/widgets/Widget.js.map +1 -0
  260. package/dist/browser/widgets/WidgetHero.js +47 -0
  261. package/dist/browser/widgets/WidgetHero.js.map +1 -0
  262. package/dist/browser/widgets/WidgetList.js +125 -0
  263. package/dist/browser/widgets/WidgetList.js.map +1 -0
  264. package/dist/browser/widgets/WidgetPills.js +78 -0
  265. package/dist/browser/widgets/WidgetPills.js.map +1 -0
  266. package/dist/browser/widgets/WidgetStat.js +114 -0
  267. package/dist/browser/widgets/WidgetStat.js.map +1 -0
  268. package/dist/browser/widgets/WidgetStatus.js +54 -0
  269. package/dist/browser/widgets/WidgetStatus.js.map +1 -0
  270. package/dist/browser/widgets/index.js +7 -0
  271. package/dist/browser/widgets/index.js.map +1 -0
  272. package/dist/global.css +3 -0
  273. package/dist/licenses/ibm-plex-mono.txt +93 -0
  274. package/dist/licenses/ibm-plex-sans.txt +93 -0
  275. package/dist/licenses/tabler-icons.txt +21 -0
  276. package/dist/plex.css +1 -0
  277. package/dist/ssr/actions/Button.js +203 -0
  278. package/dist/ssr/actions/Button.js.map +1 -0
  279. package/dist/ssr/actions/ContextMenu.js +128 -0
  280. package/dist/ssr/actions/ContextMenu.js.map +1 -0
  281. package/dist/ssr/actions/CopyButton.js +79 -0
  282. package/dist/ssr/actions/CopyButton.js.map +1 -0
  283. package/dist/ssr/actions/Disclosure.js +26 -0
  284. package/dist/ssr/actions/Disclosure.js.map +1 -0
  285. package/dist/ssr/actions/Dropdown.js +443 -0
  286. package/dist/ssr/actions/Dropdown.js.map +1 -0
  287. package/dist/ssr/actions/FilterChip.js +132 -0
  288. package/dist/ssr/actions/FilterChip.js.map +1 -0
  289. package/dist/ssr/actions/RemoveButton.js +45 -0
  290. package/dist/ssr/actions/RemoveButton.js.map +1 -0
  291. package/dist/ssr/actions/SegmentedControl.js +57 -0
  292. package/dist/ssr/actions/SegmentedControl.js.map +1 -0
  293. package/dist/ssr/actions/SplitButton.js +74 -0
  294. package/dist/ssr/actions/SplitButton.js.map +1 -0
  295. package/dist/ssr/actions/SpotlightSearch.js +38 -0
  296. package/dist/ssr/actions/SpotlightSearch.js.map +1 -0
  297. package/dist/ssr/actions/Tabs.js +91 -0
  298. package/dist/ssr/actions/Tabs.js.map +1 -0
  299. package/dist/ssr/actions/Toolbar.js +33 -0
  300. package/dist/ssr/actions/Toolbar.js.map +1 -0
  301. package/dist/ssr/actions/index.js +13 -0
  302. package/dist/ssr/actions/index.js.map +1 -0
  303. package/dist/ssr/chat/ChatComposer.js +392 -0
  304. package/dist/ssr/chat/ChatComposer.js.map +1 -0
  305. package/dist/ssr/chat/ChatPrimitives.js +377 -0
  306. package/dist/ssr/chat/ChatPrimitives.js.map +1 -0
  307. package/dist/ssr/chat/ChatRoot.js +10 -0
  308. package/dist/ssr/chat/ChatRoot.js.map +1 -0
  309. package/dist/ssr/chat/ChatTimeline.js +301 -0
  310. package/dist/ssr/chat/ChatTimeline.js.map +1 -0
  311. package/dist/ssr/chat/chat-behavior.js +53 -0
  312. package/dist/ssr/chat/chat-behavior.js.map +1 -0
  313. package/dist/ssr/chat/index.js +17 -0
  314. package/dist/ssr/chat/index.js.map +1 -0
  315. package/dist/ssr/chat/types.js +2 -0
  316. package/dist/ssr/chat/types.js.map +1 -0
  317. package/dist/ssr/content/Calendar.js +1542 -0
  318. package/dist/ssr/content/Calendar.js.map +1 -0
  319. package/dist/ssr/content/Chart.js +552 -0
  320. package/dist/ssr/content/Chart.js.map +1 -0
  321. package/dist/ssr/content/CodeDisplay.js +55 -0
  322. package/dist/ssr/content/CodeDisplay.js.map +1 -0
  323. package/dist/ssr/content/DataTable.js +470 -0
  324. package/dist/ssr/content/DataTable.js.map +1 -0
  325. package/dist/ssr/content/Docs.js +108 -0
  326. package/dist/ssr/content/Docs.js.map +1 -0
  327. package/dist/ssr/content/FileBrowser.js +422 -0
  328. package/dist/ssr/content/FileBrowser.js.map +1 -0
  329. package/dist/ssr/content/FileTree.js +299 -0
  330. package/dist/ssr/content/FileTree.js.map +1 -0
  331. package/dist/ssr/content/FileView.js +612 -0
  332. package/dist/ssr/content/FileView.js.map +1 -0
  333. package/dist/ssr/content/Lightbox.js +164 -0
  334. package/dist/ssr/content/Lightbox.js.map +1 -0
  335. package/dist/ssr/content/LogEntriesTable.js +106 -0
  336. package/dist/ssr/content/LogEntriesTable.js.map +1 -0
  337. package/dist/ssr/content/MarkdownView.js +119 -0
  338. package/dist/ssr/content/MarkdownView.js.map +1 -0
  339. package/dist/ssr/content/Pagination.js +141 -0
  340. package/dist/ssr/content/Pagination.js.map +1 -0
  341. package/dist/ssr/content/PdfPreview.js +126 -0
  342. package/dist/ssr/content/PdfPreview.js.map +1 -0
  343. package/dist/ssr/content/RangePicker.js +35 -0
  344. package/dist/ssr/content/RangePicker.js.map +1 -0
  345. package/dist/ssr/content/StructuredDataPreview.js +127 -0
  346. package/dist/ssr/content/StructuredDataPreview.js.map +1 -0
  347. package/dist/ssr/content/calendar-event-layout.js +92 -0
  348. package/dist/ssr/content/calendar-event-layout.js.map +1 -0
  349. package/dist/ssr/content/calendar-pointer.js +114 -0
  350. package/dist/ssr/content/calendar-pointer.js.map +1 -0
  351. package/dist/ssr/content/chart-map-viewport.js +33 -0
  352. package/dist/ssr/content/chart-map-viewport.js.map +1 -0
  353. package/dist/ssr/content/chart-state-timeline.js +124 -0
  354. package/dist/ssr/content/chart-state-timeline.js.map +1 -0
  355. package/dist/ssr/content/code-highlight.js +144 -0
  356. package/dist/ssr/content/code-highlight.js.map +1 -0
  357. package/dist/ssr/content/file-tree.js +93 -0
  358. package/dist/ssr/content/file-tree.js.map +1 -0
  359. package/dist/ssr/content/file-view-preview.js +112 -0
  360. package/dist/ssr/content/file-view-preview.js.map +1 -0
  361. package/dist/ssr/content/index.js +16 -0
  362. package/dist/ssr/content/index.js.map +1 -0
  363. package/dist/ssr/feedback/InlineGuidance.js +26 -0
  364. package/dist/ssr/feedback/InlineGuidance.js.map +1 -0
  365. package/dist/ssr/feedback/Tooltip.js +156 -0
  366. package/dist/ssr/feedback/Tooltip.js.map +1 -0
  367. package/dist/ssr/feedback/dialog-core.js +207 -0
  368. package/dist/ssr/feedback/dialog-core.js.map +1 -0
  369. package/dist/ssr/feedback/index.js +6 -0
  370. package/dist/ssr/feedback/index.js.map +1 -0
  371. package/dist/ssr/feedback/prompts.js +703 -0
  372. package/dist/ssr/feedback/prompts.js.map +1 -0
  373. package/dist/ssr/feedback/toast.js +271 -0
  374. package/dist/ssr/feedback/toast.js.map +1 -0
  375. package/dist/ssr/feedback/tooltip-position.js +25 -0
  376. package/dist/ssr/feedback/tooltip-position.js.map +1 -0
  377. package/dist/ssr/index.js +11 -0
  378. package/dist/ssr/index.js.map +1 -0
  379. package/dist/ssr/inputs/AutocompleteEditor.js +463 -0
  380. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -0
  381. package/dist/ssr/inputs/AutocompleteSelect.js +420 -0
  382. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -0
  383. package/dist/ssr/inputs/Checkbox.js +75 -0
  384. package/dist/ssr/inputs/Checkbox.js.map +1 -0
  385. package/dist/ssr/inputs/CheckboxCard.js +69 -0
  386. package/dist/ssr/inputs/CheckboxCard.js.map +1 -0
  387. package/dist/ssr/inputs/ChoiceGroups.js +101 -0
  388. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -0
  389. package/dist/ssr/inputs/ChoiceInputs.js +250 -0
  390. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -0
  391. package/dist/ssr/inputs/Combobox.js +177 -0
  392. package/dist/ssr/inputs/Combobox.js.map +1 -0
  393. package/dist/ssr/inputs/DatePicker.js +629 -0
  394. package/dist/ssr/inputs/DatePicker.js.map +1 -0
  395. package/dist/ssr/inputs/FileInputs.js +543 -0
  396. package/dist/ssr/inputs/FileInputs.js.map +1 -0
  397. package/dist/ssr/inputs/MultiSelectInput.js +347 -0
  398. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -0
  399. package/dist/ssr/inputs/NumberInput.js +177 -0
  400. package/dist/ssr/inputs/NumberInput.js.map +1 -0
  401. package/dist/ssr/inputs/Select.js +308 -0
  402. package/dist/ssr/inputs/Select.js.map +1 -0
  403. package/dist/ssr/inputs/SelectChip.js +129 -0
  404. package/dist/ssr/inputs/SelectChip.js.map +1 -0
  405. package/dist/ssr/inputs/SpecialInputs.js +116 -0
  406. package/dist/ssr/inputs/SpecialInputs.js.map +1 -0
  407. package/dist/ssr/inputs/Switch.js +62 -0
  408. package/dist/ssr/inputs/Switch.js.map +1 -0
  409. package/dist/ssr/inputs/TagEditor.js +280 -0
  410. package/dist/ssr/inputs/TagEditor.js.map +1 -0
  411. package/dist/ssr/inputs/TagsInput.js +122 -0
  412. package/dist/ssr/inputs/TagsInput.js.map +1 -0
  413. package/dist/ssr/inputs/TemplateEditor.js +164 -0
  414. package/dist/ssr/inputs/TemplateEditor.js.map +1 -0
  415. package/dist/ssr/inputs/TextInput.js +211 -0
  416. package/dist/ssr/inputs/TextInput.js.map +1 -0
  417. package/dist/ssr/inputs/choice.js +188 -0
  418. package/dist/ssr/inputs/choice.js.map +1 -0
  419. package/dist/ssr/inputs/completion/behaviors.js +108 -0
  420. package/dist/ssr/inputs/completion/behaviors.js.map +1 -0
  421. package/dist/ssr/inputs/completion/engine.js +103 -0
  422. package/dist/ssr/inputs/completion/engine.js.map +1 -0
  423. package/dist/ssr/inputs/completion/index.js +4 -0
  424. package/dist/ssr/inputs/completion/index.js.map +1 -0
  425. package/dist/ssr/inputs/completion/overlay.js +25 -0
  426. package/dist/ssr/inputs/completion/overlay.js.map +1 -0
  427. package/dist/ssr/inputs/date-picker.js +123 -0
  428. package/dist/ssr/inputs/date-picker.js.map +1 -0
  429. package/dist/ssr/inputs/editor-dom.js +26 -0
  430. package/dist/ssr/inputs/editor-dom.js.map +1 -0
  431. package/dist/ssr/inputs/field-contract.js +9 -0
  432. package/dist/ssr/inputs/field-contract.js.map +1 -0
  433. package/dist/ssr/inputs/icon-options.js +46 -0
  434. package/dist/ssr/inputs/icon-options.js.map +1 -0
  435. package/dist/ssr/inputs/image-crop.js +145 -0
  436. package/dist/ssr/inputs/image-crop.js.map +1 -0
  437. package/dist/ssr/inputs/index.js +23 -0
  438. package/dist/ssr/inputs/index.js.map +1 -0
  439. package/dist/ssr/inputs/markdown/MarkdownEditor.js +516 -0
  440. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -0
  441. package/dist/ssr/inputs/markdown/Toolbar.js +115 -0
  442. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -0
  443. package/dist/ssr/inputs/markdown/actions.js +140 -0
  444. package/dist/ssr/inputs/markdown/actions.js.map +1 -0
  445. package/dist/ssr/inputs/markdown/active-formats.js +36 -0
  446. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -0
  447. package/dist/ssr/inputs/markdown/behaviors.js +63 -0
  448. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -0
  449. package/dist/ssr/inputs/markdown/code-zone.js +8 -0
  450. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -0
  451. package/dist/ssr/internal/color.js +18 -0
  452. package/dist/ssr/internal/color.js.map +1 -0
  453. package/dist/ssr/internal/field.js +90 -0
  454. package/dist/ssr/internal/field.js.map +1 -0
  455. package/dist/ssr/internal/portal.js +17 -0
  456. package/dist/ssr/internal/portal.js.map +1 -0
  457. package/dist/ssr/intl/Format.js +192 -0
  458. package/dist/ssr/intl/Format.js.map +1 -0
  459. package/dist/ssr/intl/index.js +3 -0
  460. package/dist/ssr/intl/index.js.map +1 -0
  461. package/dist/ssr/intl/locale.js +63 -0
  462. package/dist/ssr/intl/locale.js.map +1 -0
  463. package/dist/ssr/intl/messages.js +753 -0
  464. package/dist/ssr/intl/messages.js.map +1 -0
  465. package/dist/ssr/layout/AppOverview.js +85 -0
  466. package/dist/ssr/layout/AppOverview.js.map +1 -0
  467. package/dist/ssr/layout/AppWorkspace.js +976 -0
  468. package/dist/ssr/layout/AppWorkspace.js.map +1 -0
  469. package/dist/ssr/layout/DataPanel.js +101 -0
  470. package/dist/ssr/layout/DataPanel.js.map +1 -0
  471. package/dist/ssr/layout/DetailPanel.js +284 -0
  472. package/dist/ssr/layout/DetailPanel.js.map +1 -0
  473. package/dist/ssr/layout/Discussion.js +319 -0
  474. package/dist/ssr/layout/Discussion.js.map +1 -0
  475. package/dist/ssr/layout/FloatingWindow.js +259 -0
  476. package/dist/ssr/layout/FloatingWindow.js.map +1 -0
  477. package/dist/ssr/layout/PanelDialog.js +136 -0
  478. package/dist/ssr/layout/PanelDialog.js.map +1 -0
  479. package/dist/ssr/layout/PanelHeader.js +45 -0
  480. package/dist/ssr/layout/PanelHeader.js.map +1 -0
  481. package/dist/ssr/layout/Panes.js +678 -0
  482. package/dist/ssr/layout/Panes.js.map +1 -0
  483. package/dist/ssr/layout/ScrollArea.js +18 -0
  484. package/dist/ssr/layout/ScrollArea.js.map +1 -0
  485. package/dist/ssr/layout/Settings.js +219 -0
  486. package/dist/ssr/layout/Settings.js.map +1 -0
  487. package/dist/ssr/layout/SettingsCollection.js +150 -0
  488. package/dist/ssr/layout/SettingsCollection.js.map +1 -0
  489. package/dist/ssr/layout/SettingsModal.js +156 -0
  490. package/dist/ssr/layout/SettingsModal.js.map +1 -0
  491. package/dist/ssr/layout/app-workspace-controller.js +419 -0
  492. package/dist/ssr/layout/app-workspace-controller.js.map +1 -0
  493. package/dist/ssr/layout/app-workspace-state.js +125 -0
  494. package/dist/ssr/layout/app-workspace-state.js.map +1 -0
  495. package/dist/ssr/layout/floating-window-geometry.js +15 -0
  496. package/dist/ssr/layout/floating-window-geometry.js.map +1 -0
  497. package/dist/ssr/layout/index.js +17 -0
  498. package/dist/ssr/layout/index.js.map +1 -0
  499. package/dist/ssr/layout/panes-layout.js +436 -0
  500. package/dist/ssr/layout/panes-layout.js.map +1 -0
  501. package/dist/ssr/layout/stable-id.js +17 -0
  502. package/dist/ssr/layout/stable-id.js.map +1 -0
  503. package/dist/ssr/semantics.js +2 -0
  504. package/dist/ssr/semantics.js.map +1 -0
  505. package/dist/ssr/surfaces/Avatar.js +43 -0
  506. package/dist/ssr/surfaces/Avatar.js.map +1 -0
  507. package/dist/ssr/surfaces/DescriptionList.js +25 -0
  508. package/dist/ssr/surfaces/DescriptionList.js.map +1 -0
  509. package/dist/ssr/surfaces/LinkCard.js +25 -0
  510. package/dist/ssr/surfaces/LinkCard.js.map +1 -0
  511. package/dist/ssr/surfaces/NotFoundState.js +38 -0
  512. package/dist/ssr/surfaces/NotFoundState.js.map +1 -0
  513. package/dist/ssr/surfaces/NoticeCard.js +83 -0
  514. package/dist/ssr/surfaces/NoticeCard.js.map +1 -0
  515. package/dist/ssr/surfaces/Paper.js +32 -0
  516. package/dist/ssr/surfaces/Paper.js.map +1 -0
  517. package/dist/ssr/surfaces/Placeholder.js +76 -0
  518. package/dist/ssr/surfaces/Placeholder.js.map +1 -0
  519. package/dist/ssr/surfaces/ProgressBar.js +13 -0
  520. package/dist/ssr/surfaces/ProgressBar.js.map +1 -0
  521. package/dist/ssr/surfaces/StatCell.js +80 -0
  522. package/dist/ssr/surfaces/StatCell.js.map +1 -0
  523. package/dist/ssr/surfaces/StatGrid.js +62 -0
  524. package/dist/ssr/surfaces/StatGrid.js.map +1 -0
  525. package/dist/ssr/surfaces/StatusBadge.js +38 -0
  526. package/dist/ssr/surfaces/StatusBadge.js.map +1 -0
  527. package/dist/ssr/surfaces/Tag.js +32 -0
  528. package/dist/ssr/surfaces/Tag.js.map +1 -0
  529. package/dist/ssr/surfaces/index.js +13 -0
  530. package/dist/ssr/surfaces/index.js.map +1 -0
  531. package/dist/ssr/widgets/Widget.js +54 -0
  532. package/dist/ssr/widgets/Widget.js.map +1 -0
  533. package/dist/ssr/widgets/WidgetHero.js +23 -0
  534. package/dist/ssr/widgets/WidgetHero.js.map +1 -0
  535. package/dist/ssr/widgets/WidgetList.js +73 -0
  536. package/dist/ssr/widgets/WidgetList.js.map +1 -0
  537. package/dist/ssr/widgets/WidgetPills.js +40 -0
  538. package/dist/ssr/widgets/WidgetPills.js.map +1 -0
  539. package/dist/ssr/widgets/WidgetStat.js +45 -0
  540. package/dist/ssr/widgets/WidgetStat.js.map +1 -0
  541. package/dist/ssr/widgets/WidgetStatus.js +23 -0
  542. package/dist/ssr/widgets/WidgetStatus.js.map +1 -0
  543. package/dist/ssr/widgets/index.js +7 -0
  544. package/dist/ssr/widgets/index.js.map +1 -0
  545. package/dist/styles.css +1 -0
  546. package/dist/tabler-icons-q30jt7jk.woff2 +0 -0
  547. package/dist/tabler.css +4 -0
  548. package/package.json +77 -0
@@ -0,0 +1,1502 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
+ import { use as _$use } from "solid-js/web";
4
+ import { addEventListener as _$addEventListener } from "solid-js/web";
5
+ import { getNextMarker as _$getNextMarker } from "solid-js/web";
6
+ import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
7
+ import { setProperty as _$setProperty } from "solid-js/web";
8
+ import { className as _$className } from "solid-js/web";
9
+ import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
10
+ import { insert as _$insert } from "solid-js/web";
11
+ import { createComponent as _$createComponent } from "solid-js/web";
12
+ import { spread as _$spread } from "solid-js/web";
13
+ import { mergeProps as _$mergeProps } from "solid-js/web";
14
+ import { memo as _$memo } from "solid-js/web";
15
+ import { style as _$style } from "solid-js/web";
16
+ import { setAttribute as _$setAttribute } from "solid-js/web";
17
+ import { effect as _$effect } from "solid-js/web";
18
+ import { getNextElement as _$getNextElement } from "solid-js/web";
19
+ var _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__resize role=separator><span aria-hidden=true>`),
20
+ _tmpl$2 = /*#__PURE__*/_$template(`<div>`),
21
+ _tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__main-primary data-workspace-main-region=main>`),
22
+ _tmpl$4 = /*#__PURE__*/_$template(`<section>`),
23
+ _tmpl$5 = /*#__PURE__*/_$template(`<aside>`),
24
+ _tmpl$6 = /*#__PURE__*/_$template(`<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><!$><!/>`),
25
+ _tmpl$7 = /*#__PURE__*/_$template(`<aside><div class=k2b-app-workspace__sidebar-desktop>`),
26
+ _tmpl$8 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-mobile-items>`),
27
+ _tmpl$9 = /*#__PURE__*/_$template(`<footer>`),
28
+ _tmpl$0 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-section-actions>`),
29
+ _tmpl$1 = /*#__PURE__*/_$template(`<header class=k2b-app-workspace__sidebar-section-header><!$><!/><!$><!/>`),
30
+ _tmpl$10 = /*#__PURE__*/_$template(`<section><!$><!/><!$><!/>`),
31
+ _tmpl$11 = /*#__PURE__*/_$template(`<h2>`),
32
+ _tmpl$12 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-item-actions>`),
33
+ _tmpl$13 = /*#__PURE__*/_$template(`<div><button type=button class=k2b-app-workspace__sidebar-item-main></button><!$><!/>`),
34
+ _tmpl$14 = /*#__PURE__*/_$template(`<div><a class=k2b-app-workspace__sidebar-item-main></a><!$><!/>`),
35
+ _tmpl$15 = /*#__PURE__*/_$template(`<div><!$><!/><!$><!/>`),
36
+ _tmpl$16 = /*#__PURE__*/_$template(`<button type=button>`),
37
+ _tmpl$17 = /*#__PURE__*/_$template(`<a>`),
38
+ _tmpl$18 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-icon aria-hidden=true>`),
39
+ _tmpl$19 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-label><span class=k2b-app-workspace__sidebar-item-label-text>`),
40
+ _tmpl$20 = /*#__PURE__*/_$template(`<i>`),
41
+ _tmpl$21 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-meta>`),
42
+ _tmpl$22 = /*#__PURE__*/_$template(`<a class=k2b-app-workspace__sidebar-item-action>`),
43
+ _tmpl$23 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-item-action>`),
44
+ _tmpl$24 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-icon aria-hidden=true><i>`),
45
+ _tmpl$25 = /*#__PURE__*/_$template(`<span>`),
46
+ _tmpl$26 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__nav-tree-toggle data-k2b-nav-tree-toggle aria-hidden=true><i>`),
47
+ _tmpl$27 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-group role=group>`),
48
+ _tmpl$28 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-node role=treeitem><!$><!/><!$><!/>`),
49
+ _tmpl$29 = /*#__PURE__*/_$template(`<div role=tree>`),
50
+ _tmpl$30 = /*#__PURE__*/_$template(`<section><!$><!/><div class=k2b-app-workspace__sidebar-icon-grid>`),
51
+ _tmpl$31 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
52
+ _tmpl$32 = /*#__PURE__*/_$template(`<div data-k2b-app-workspace>`);
53
+ import { Link } from "@k2b/ssr/nav";
54
+ import { children, createContext, createMemo, createSignal, createUniqueId, For, onCleanup, onMount, Show, useContext } from "solid-js";
55
+ import { useUiMessages } from "../intl/messages";
56
+ import { installAppWorkspaceController } from "./app-workspace-controller";
57
+ 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";
58
+ import { assertStableUiId, assertUniqueStableUiIds } from "./stable-id";
59
+ const ResizeContext = createContext(true);
60
+ const LayoutStateContext = createContext(null);
61
+ const SidebarModeContext = createContext("desktop");
62
+ const MAIN_PANE = Symbol("AppWorkspace.MainPane");
63
+ const SIDEBAR_MOBILE_TRIGGER = Symbol("AppWorkspace.SidebarMobileTrigger");
64
+ const SIDEBAR_MOBILE = Symbol("AppWorkspace.SidebarMobile");
65
+ const SIDEBAR_DESKTOP = Symbol("AppWorkspace.SidebarDesktop");
66
+ const SIDEBAR_ITEM_ICON = Symbol("AppWorkspace.SidebarItemIcon");
67
+ const SIDEBAR_ITEM_LABEL = Symbol("AppWorkspace.SidebarItemLabel");
68
+ const SIDEBAR_ITEM_META = Symbol("AppWorkspace.SidebarItemMeta");
69
+ const SIDEBAR_ITEM_ACTION = Symbol("AppWorkspace.SidebarItemAction");
70
+ const NAV_TREE_ITEM = Symbol("AppWorkspace.NavTree.Item");
71
+ const flatten = value => {
72
+ // Solid control-flow components such as <For> expose their rendered value
73
+ // through an accessor. Compound slots may therefore be nested behind a
74
+ // function even after `children()` resolves the outer collection.
75
+ if (typeof value === "function") return flatten(value());
76
+ if (Array.isArray(value)) return value.flatMap(flatten);
77
+ return value === null || value === undefined || typeof value === "boolean" ? [] : [value];
78
+ };
79
+ const mainPaneSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === MAIN_PANE);
80
+ const sidebarChildSlot = value => Boolean(value && typeof value === "object" && "kind" in value && [SIDEBAR_MOBILE_TRIGGER, SIDEBAR_MOBILE, SIDEBAR_DESKTOP].includes(value.kind));
81
+ 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));
82
+ const navTreeItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === NAV_TREE_ITEM);
83
+ function ResizeHandle(props) {
84
+ return (() => {
85
+ var _el$ = _$getNextElement(_tmpl$);
86
+ _$effect(_p$ => {
87
+ var _v$ = props.label ?? (props.kind === "sidebar" ? "Resize navigation" : props.kind === "pane" ? "Resize workspace pane" : props.kind === "detail" ? "Resize detail panel" : "Resize bottom drawer"),
88
+ _v$2 = props.controls,
89
+ _v$3 = props.kind === "drawer" ? "horizontal" : "vertical",
90
+ _v$4 = props.minSize,
91
+ _v$5 = props.maxSize,
92
+ _v$6 = props.defaultSize,
93
+ _v$7 = props.kind,
94
+ _v$8 = props.panelId,
95
+ _v$9 = props.edge,
96
+ _v$0 = props.shadow ? "true" : undefined,
97
+ _v$1 = props.defaultSize,
98
+ _v$10 = props.minSize,
99
+ _v$11 = props.maxSize,
100
+ _v$12 = props.style;
101
+ _v$ !== _p$.e && _$setAttribute(_el$, "aria-label", _p$.e = _v$);
102
+ _v$2 !== _p$.t && _$setAttribute(_el$, "aria-controls", _p$.t = _v$2);
103
+ _v$3 !== _p$.a && _$setAttribute(_el$, "aria-orientation", _p$.a = _v$3);
104
+ _v$4 !== _p$.o && _$setAttribute(_el$, "aria-valuemin", _p$.o = _v$4);
105
+ _v$5 !== _p$.i && _$setAttribute(_el$, "aria-valuemax", _p$.i = _v$5);
106
+ _v$6 !== _p$.n && _$setAttribute(_el$, "aria-valuenow", _p$.n = _v$6);
107
+ _v$7 !== _p$.s && _$setAttribute(_el$, "data-app-workspace-resize", _p$.s = _v$7);
108
+ _v$8 !== _p$.h && _$setAttribute(_el$, "data-workspace-panel-id", _p$.h = _v$8);
109
+ _v$9 !== _p$.r && _$setAttribute(_el$, "data-workspace-resize-edge", _p$.r = _v$9);
110
+ _v$0 !== _p$.d && _$setAttribute(_el$, "data-workspace-resize-shadow", _p$.d = _v$0);
111
+ _v$1 !== _p$.l && _$setAttribute(_el$, "data-workspace-default-size", _p$.l = _v$1);
112
+ _v$10 !== _p$.u && _$setAttribute(_el$, "data-workspace-min-size", _p$.u = _v$10);
113
+ _v$11 !== _p$.c && _$setAttribute(_el$, "data-workspace-max-size", _p$.c = _v$11);
114
+ _p$.w = _$style(_el$, _v$12, _p$.w);
115
+ return _p$;
116
+ }, {
117
+ e: undefined,
118
+ t: undefined,
119
+ a: undefined,
120
+ o: undefined,
121
+ i: undefined,
122
+ n: undefined,
123
+ s: undefined,
124
+ h: undefined,
125
+ r: undefined,
126
+ d: undefined,
127
+ l: undefined,
128
+ u: undefined,
129
+ c: undefined,
130
+ w: undefined
131
+ });
132
+ return _el$;
133
+ })();
134
+ }
135
+ const modeAttrs = mode => mode && mode !== "always" ? {
136
+ "data-sidebar-mode": mode
137
+ } : {};
138
+ /** Same rule as `modeAttrs`, for the un-prefixed `data` bag on sidebar items. */
139
+ const modeData = mode => mode && mode !== "always" ? {
140
+ "sidebar-mode": mode
141
+ } : {};
142
+ const scrollAttrs = key => key ? {
143
+ "data-scroll-preserve": key
144
+ } : {};
145
+ const iconClass = (icon, fallback = "ti-circle") => icon?.startsWith("ti ") ? icon : `ti ${icon || fallback}`;
146
+ function AppWorkspaceMainPane(props) {
147
+ return {
148
+ kind: MAIN_PANE,
149
+ props,
150
+ domId: `k2b-workspace-pane-${createUniqueId()}`
151
+ };
152
+ }
153
+ function AppWorkspaceMain(props) {
154
+ const rootResizable = useContext(ResizeContext);
155
+ const resolved = children(() => props.children);
156
+ const values = createMemo(() => flatten(resolved()));
157
+ const paneIds = createMemo(() => {
158
+ const ids = values().filter(mainPaneSlot).map(slot => slot.props.id);
159
+ assertUniqueStableUiIds(ids, "AppWorkspace.MainPane id");
160
+ return ids;
161
+ });
162
+ const regions = createMemo(() => {
163
+ const all = values();
164
+ const primary = all.filter(value => !mainPaneSlot(value));
165
+ const primaryIndex = all.findIndex(value => !mainPaneSlot(value));
166
+ let inserted = false;
167
+ const result = [];
168
+ all.forEach((value, index) => {
169
+ if (mainPaneSlot(value)) {
170
+ if (value.props.open !== false) result.push({
171
+ type: "pane",
172
+ index,
173
+ slot: value
174
+ });
175
+ } else if (!inserted) {
176
+ inserted = true;
177
+ result.push({
178
+ type: "primary",
179
+ index: primaryIndex,
180
+ children: primary
181
+ });
182
+ }
183
+ });
184
+ return result;
185
+ });
186
+ const anchorRegion = createMemo(() => regions().find(candidate => candidate.type === "primary") ?? regions()[0]);
187
+ // Presence of a MainPane slot — not of an *open* one — decides the split
188
+ // layout. Deriving it from `regions()` made a workspace whose panes are all
189
+ // closed fall back to `resolved()`, which renders the raw slot objects.
190
+ const hasPanes = createMemo(() => paneIds().length > 0);
191
+ return (() => {
192
+ var _el$2 = _$getNextElement(_tmpl$2);
193
+ _$spread(_el$2, _$mergeProps({
194
+ get ["class"]() {
195
+ return `k2b-app-workspace__main ${hasPanes() ? "has-panes" : ""} ${props.class ?? ""}`;
196
+ },
197
+ get ["data-mobile-pane"]() {
198
+ return props.mobilePane;
199
+ },
200
+ get ["data-scroll"]() {
201
+ return props.scroll === false ? "false" : undefined;
202
+ },
203
+ get ["aria-busy"]() {
204
+ return props["aria-busy"];
205
+ }
206
+ }, () => scrollAttrs(props.scrollPreserveKey)), false, true);
207
+ _$insert(_el$2, _$createComponent(Show, {
208
+ get when() {
209
+ return hasPanes();
210
+ },
211
+ get fallback() {
212
+ return resolved();
213
+ },
214
+ get children() {
215
+ return regions().flatMap(region => {
216
+ const anchor = anchorRegion();
217
+ const activeMobilePane = props.mobilePane ?? (anchor?.type === "pane" ? anchor.slot.props.id : "main");
218
+ if (region.type === "primary") {
219
+ return (() => {
220
+ var _el$3 = _$getNextElement(_tmpl$3);
221
+ _$setAttribute(_el$3, "data-workspace-mobile-active", activeMobilePane === "main" ? "true" : "false");
222
+ _$insert(_el$3, () => region.children);
223
+ return _el$3;
224
+ })();
225
+ }
226
+ const pane = region.slot;
227
+ const panelId = assertStableUiId(pane.props.id, "AppWorkspace.MainPane id");
228
+ const variable = appWorkspacePanelVariable("pane", panelId);
229
+ const isAnchor = region === anchor;
230
+ const resizable = !isAnchor && (pane.props.resizable ?? rootResizable);
231
+ const defaultSize = pane.props.defaultSize ?? APP_WORKSPACE_PANE_DEFAULT;
232
+ const minSize = pane.props.minSize ?? APP_WORKSPACE_PANE_MIN;
233
+ const maxSize = Math.max(minSize, pane.props.maxSize ?? APP_WORKSPACE_PANE_MAX);
234
+ const content = (() => {
235
+ var _el$4 = _$getNextElement(_tmpl$4);
236
+ _$setAttribute(_el$4, "data-workspace-panel-id", panelId);
237
+ _$setAttribute(_el$4, "data-workspace-resizable", resizable ? "true" : "false");
238
+ _$insert(_el$4, () => pane.props.children);
239
+ _$effect(_p$ => {
240
+ var _v$13 = pane.domId,
241
+ _v$14 = `k2b-app-workspace__main-pane ${isAnchor ? "is-primary" : ""} ${pane.props.class ?? ""}`,
242
+ _v$15 = pane.props.label,
243
+ _v$16 = pane.props.id,
244
+ _v$17 = activeMobilePane === pane.props.id ? "true" : "false",
245
+ _v$18 = pane.props.surface === "navigation" ? "navigation" : undefined,
246
+ _v$19 = pane.props.scroll === false ? "false" : undefined,
247
+ _v$20 = isAnchor ? undefined : {
248
+ "--k2b-workspace-panel-size": `var(${variable}, ${defaultSize}px)`
249
+ };
250
+ _v$13 !== _p$.e && _$setAttribute(_el$4, "id", _p$.e = _v$13);
251
+ _v$14 !== _p$.t && _$className(_el$4, _p$.t = _v$14);
252
+ _v$15 !== _p$.a && _$setAttribute(_el$4, "aria-label", _p$.a = _v$15);
253
+ _v$16 !== _p$.o && _$setAttribute(_el$4, "data-workspace-main-region", _p$.o = _v$16);
254
+ _v$17 !== _p$.i && _$setAttribute(_el$4, "data-workspace-mobile-active", _p$.i = _v$17);
255
+ _v$18 !== _p$.n && _$setAttribute(_el$4, "data-surface", _p$.n = _v$18);
256
+ _v$19 !== _p$.s && _$setAttribute(_el$4, "data-scroll", _p$.s = _v$19);
257
+ _p$.h = _$style(_el$4, _v$20, _p$.h);
258
+ return _p$;
259
+ }, {
260
+ e: undefined,
261
+ t: undefined,
262
+ a: undefined,
263
+ o: undefined,
264
+ i: undefined,
265
+ n: undefined,
266
+ s: undefined,
267
+ h: undefined
268
+ });
269
+ return _el$4;
270
+ })();
271
+ if (!resizable) return content;
272
+ const before = region.index < (anchor?.index ?? 0);
273
+ const handle = _$createComponent(ResizeHandle, {
274
+ kind: "pane",
275
+ edge: before ? "end" : "start",
276
+ get controls() {
277
+ return pane.domId;
278
+ },
279
+ panelId: panelId,
280
+ defaultSize: defaultSize,
281
+ minSize: minSize,
282
+ maxSize: maxSize,
283
+ get shadow() {
284
+ return pane.props.resizeShadow !== false;
285
+ },
286
+ get label() {
287
+ return `Resize ${pane.props.label}`;
288
+ }
289
+ });
290
+ return before ? [content, handle] : [handle, content];
291
+ });
292
+ }
293
+ }));
294
+ _$runHydrationEvents();
295
+ return _el$2;
296
+ })();
297
+ }
298
+ function AppWorkspaceDetail(props) {
299
+ const rootResizable = useContext(ResizeContext);
300
+ const panelId = () => assertStableUiId(props.id, "AppWorkspace.Detail id");
301
+ const domId = () => `k2b-workspace-detail-${panelId()}`;
302
+ const variable = () => appWorkspacePanelVariable("detail", panelId());
303
+ // Cloud's `detailDefaultWidth`. These feed `aria-valuenow` and the
304
+ // `var(…, Npx)` first-paint fallback, so they are behaviour, not taste.
305
+ const widths = {
306
+ sm: 288,
307
+ md: 384,
308
+ lg: 480,
309
+ xl: 544
310
+ };
311
+ const defaultWidth = () => widths[props.width ?? "md"] ?? APP_WORKSPACE_DETAIL_DEFAULT;
312
+ const minWidth = () => props.minWidth ?? APP_WORKSPACE_DETAIL_MIN;
313
+ const maxWidth = () => Math.max(minWidth(), props.maxWidth ?? APP_WORKSPACE_DETAIL_MAX);
314
+ const resizable = () => props.resizable ?? rootResizable;
315
+ return [_$createComponent(Show, {
316
+ get when() {
317
+ return resizable();
318
+ },
319
+ get children() {
320
+ return _$createComponent(ResizeHandle, {
321
+ kind: "detail",
322
+ edge: "start",
323
+ get controls() {
324
+ return domId();
325
+ },
326
+ get panelId() {
327
+ return panelId();
328
+ },
329
+ get defaultSize() {
330
+ return defaultWidth();
331
+ },
332
+ get minSize() {
333
+ return minWidth();
334
+ },
335
+ get maxSize() {
336
+ return maxWidth();
337
+ },
338
+ shadow: true,
339
+ get style() {
340
+ return {
341
+ "--k2b-workspace-panel-size": `var(${variable()}, ${defaultWidth()}px)`
342
+ };
343
+ }
344
+ });
345
+ }
346
+ }), (() => {
347
+ var _el$5 = _$getNextElement(_tmpl$5);
348
+ _$insert(_el$5, () => props.children);
349
+ _$effect(_p$ => {
350
+ var _v$21 = domId(),
351
+ _v$22 = `k2b-app-workspace__detail ${props.class ?? ""}`,
352
+ _v$23 = props.width ?? "md",
353
+ _v$24 = panelId(),
354
+ _v$25 = resizable() ? "true" : "false",
355
+ _v$26 = !props.open,
356
+ _v$27 = `var(${variable()}, ${defaultWidth()}px)`,
357
+ _v$28 = props.viewTransitionName;
358
+ _v$21 !== _p$.e && _$setAttribute(_el$5, "id", _p$.e = _v$21);
359
+ _v$22 !== _p$.t && _$className(_el$5, _p$.t = _v$22);
360
+ _v$23 !== _p$.a && _$setAttribute(_el$5, "data-width", _p$.a = _v$23);
361
+ _v$24 !== _p$.o && _$setAttribute(_el$5, "data-workspace-panel-id", _p$.o = _v$24);
362
+ _v$25 !== _p$.i && _$setAttribute(_el$5, "data-workspace-resizable", _p$.i = _v$25);
363
+ _v$26 !== _p$.n && _$setProperty(_el$5, "hidden", _p$.n = _v$26);
364
+ _v$27 !== _p$.s && _$setStyleProperty(_el$5, "--k2b-workspace-panel-size", _p$.s = _v$27);
365
+ _v$28 !== _p$.h && _$setStyleProperty(_el$5, "view-transition-name", _p$.h = _v$28);
366
+ return _p$;
367
+ }, {
368
+ e: undefined,
369
+ t: undefined,
370
+ a: undefined,
371
+ o: undefined,
372
+ i: undefined,
373
+ n: undefined,
374
+ s: undefined,
375
+ h: undefined
376
+ });
377
+ return _el$5;
378
+ })()];
379
+ }
380
+ function AppWorkspaceBottomDrawer(props) {
381
+ const rootResizable = useContext(ResizeContext);
382
+ const panelId = () => assertStableUiId(props.id, "AppWorkspace.BottomDrawer id");
383
+ const domId = () => `k2b-workspace-drawer-${panelId()}`;
384
+ const variable = () => appWorkspacePanelVariable("drawer", panelId());
385
+ // Cloud's `drawerDefaultHeight`.
386
+ const heights = {
387
+ sm: 192,
388
+ md: 240,
389
+ lg: 320
390
+ };
391
+ const defaultHeight = () => heights[props.height ?? "md"] ?? APP_WORKSPACE_DRAWER_DEFAULT;
392
+ const minHeight = () => props.minHeight ?? APP_WORKSPACE_DRAWER_MIN;
393
+ const maxHeight = () => Math.max(minHeight(), props.maxHeight ?? APP_WORKSPACE_DRAWER_MAX);
394
+ const resizable = () => props.resizable ?? rootResizable;
395
+ return [_$createComponent(Show, {
396
+ get when() {
397
+ return resizable();
398
+ },
399
+ get children() {
400
+ return _$createComponent(ResizeHandle, {
401
+ kind: "drawer",
402
+ edge: "start",
403
+ get controls() {
404
+ return domId();
405
+ },
406
+ get panelId() {
407
+ return panelId();
408
+ },
409
+ get defaultSize() {
410
+ return defaultHeight();
411
+ },
412
+ get minSize() {
413
+ return minHeight();
414
+ },
415
+ get maxSize() {
416
+ return maxHeight();
417
+ },
418
+ shadow: true,
419
+ get style() {
420
+ return {
421
+ "--k2b-workspace-panel-size": `var(${variable()}, ${defaultHeight()}px)`
422
+ };
423
+ }
424
+ });
425
+ }
426
+ }), (() => {
427
+ var _el$6 = _$getNextElement(_tmpl$5);
428
+ _$insert(_el$6, () => props.children);
429
+ _$effect(_p$ => {
430
+ var _v$29 = domId(),
431
+ _v$30 = `k2b-app-workspace__drawer ${props.class ?? ""}`,
432
+ _v$31 = props.height ?? "md",
433
+ _v$32 = panelId(),
434
+ _v$33 = resizable() ? "true" : "false",
435
+ _v$34 = !props.open,
436
+ _v$35 = `var(${variable()}, ${defaultHeight()}px)`,
437
+ _v$36 = props.viewTransitionName;
438
+ _v$29 !== _p$.e && _$setAttribute(_el$6, "id", _p$.e = _v$29);
439
+ _v$30 !== _p$.t && _$className(_el$6, _p$.t = _v$30);
440
+ _v$31 !== _p$.a && _$setAttribute(_el$6, "data-height", _p$.a = _v$31);
441
+ _v$32 !== _p$.o && _$setAttribute(_el$6, "data-workspace-panel-id", _p$.o = _v$32);
442
+ _v$33 !== _p$.i && _$setAttribute(_el$6, "data-workspace-resizable", _p$.i = _v$33);
443
+ _v$34 !== _p$.n && _$setProperty(_el$6, "hidden", _p$.n = _v$34);
444
+ _v$35 !== _p$.s && _$setStyleProperty(_el$6, "--k2b-workspace-panel-size", _p$.s = _v$35);
445
+ _v$36 !== _p$.h && _$setStyleProperty(_el$6, "view-transition-name", _p$.h = _v$36);
446
+ return _p$;
447
+ }, {
448
+ e: undefined,
449
+ t: undefined,
450
+ a: undefined,
451
+ o: undefined,
452
+ i: undefined,
453
+ n: undefined,
454
+ s: undefined,
455
+ h: undefined
456
+ });
457
+ return _el$6;
458
+ })()];
459
+ }
460
+ const AppWorkspaceSidebarMobileTrigger = props => ({
461
+ kind: SIDEBAR_MOBILE_TRIGGER,
462
+ ...props
463
+ });
464
+ function AppWorkspaceSidebar(props) {
465
+ const rootResizable = useContext(ResizeContext);
466
+ const resizable = () => props.resizable ?? rootResizable;
467
+ const defaultSize = () => props.defaultSize ?? APP_WORKSPACE_SIDEBAR_DEFAULT;
468
+ const minSize = () => props.minSize ?? (props.collapsible ? APP_WORKSPACE_SIDEBAR_COLLAPSED : APP_WORKSPACE_SIDEBAR_MIN);
469
+ const maxSize = () => props.maxSize ?? APP_WORKSPACE_SIDEBAR_MAX;
470
+ const generatedId = createUniqueId();
471
+ const domId = `k2b-workspace-sidebar-${generatedId}`;
472
+ const resolved = children(() => props.children);
473
+ const slots = createMemo(() => flatten(resolved()).filter(sidebarChildSlot));
474
+ const mobileTrigger = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_MOBILE_TRIGGER));
475
+ const mobile = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_MOBILE));
476
+ const desktop = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_DESKTOP));
477
+ return [_$createComponent(Show, {
478
+ get when() {
479
+ return _$memo(() => !!mobileTrigger())() && mobile();
480
+ },
481
+ get children() {
482
+ var _el$7 = _$getNextElement(_tmpl$6),
483
+ _el$8 = _el$7.firstChild,
484
+ _el$9 = _el$8.firstChild,
485
+ _el$0 = _el$9.firstChild,
486
+ _el$1 = _el$0.firstChild,
487
+ _el$10 = _el$1.nextSibling,
488
+ _el$11 = _el$9.nextSibling,
489
+ [_el$12, _co$] = _$getNextMarker(_el$11.nextSibling);
490
+ _$insert(_el$10, () => mobileTrigger().label);
491
+ _$insert(_el$8, _$createComponent(SidebarModeContext.Provider, {
492
+ value: "mobile",
493
+ get children() {
494
+ return mobile().children;
495
+ }
496
+ }), _el$12, _co$);
497
+ _$effect(() => _$setAttribute(_el$7, "aria-label", mobileTrigger().label));
498
+ return _el$7;
499
+ }
500
+ }), (() => {
501
+ var _el$13 = _$getNextElement(_tmpl$7),
502
+ _el$14 = _el$13.firstChild;
503
+ _$setAttribute(_el$13, "id", domId);
504
+ _$insert(_el$14, _$createComponent(SidebarModeContext.Provider, {
505
+ value: "desktop",
506
+ get children() {
507
+ return desktop()?.children;
508
+ }
509
+ }));
510
+ _$effect(_p$ => {
511
+ var _v$37 = `k2b-app-workspace__sidebar ${props.class ?? ""}`,
512
+ _v$38 = mobileTrigger()?.label,
513
+ _v$39 = resizable() ? "true" : "false",
514
+ _v$40 = props.collapsible ? "true" : "false";
515
+ _v$37 !== _p$.e && _$className(_el$13, _p$.e = _v$37);
516
+ _v$38 !== _p$.t && _$setAttribute(_el$13, "aria-label", _p$.t = _v$38);
517
+ _v$39 !== _p$.a && _$setAttribute(_el$13, "data-workspace-resizable", _p$.a = _v$39);
518
+ _v$40 !== _p$.o && _$setAttribute(_el$13, "data-workspace-collapsible", _p$.o = _v$40);
519
+ return _p$;
520
+ }, {
521
+ e: undefined,
522
+ t: undefined,
523
+ a: undefined,
524
+ o: undefined
525
+ });
526
+ return _el$13;
527
+ })(), _$createComponent(Show, {
528
+ get when() {
529
+ return resizable();
530
+ },
531
+ get children() {
532
+ return _$createComponent(ResizeHandle, {
533
+ kind: "sidebar",
534
+ edge: "end",
535
+ controls: domId,
536
+ get defaultSize() {
537
+ return defaultSize();
538
+ },
539
+ get minSize() {
540
+ return minSize();
541
+ },
542
+ get maxSize() {
543
+ return maxSize();
544
+ },
545
+ get shadow() {
546
+ return props.resizeShadow !== false;
547
+ }
548
+ });
549
+ }
550
+ })];
551
+ }
552
+ const AppWorkspaceSidebarMobile = props => ({
553
+ kind: SIDEBAR_MOBILE,
554
+ children: props.children
555
+ });
556
+ const AppWorkspaceSidebarDesktop = props => ({
557
+ kind: SIDEBAR_DESKTOP,
558
+ children: props.children
559
+ });
560
+ const AppWorkspaceSidebarMobileItems = props => (() => {
561
+ var _el$15 = _$getNextElement(_tmpl$8);
562
+ _$spread(_el$15, _$mergeProps(() => scrollAttrs(props.scrollPreserveKey)), false, true);
563
+ _$insert(_el$15, () => props.children);
564
+ _$runHydrationEvents();
565
+ return _el$15;
566
+ })();
567
+ const AppWorkspaceSidebarBody = props => (() => {
568
+ var _el$16 = _$getNextElement(_tmpl$2);
569
+ _$spread(_el$16, _$mergeProps({
570
+ get ["class"]() {
571
+ return `k2b-app-workspace__sidebar-body ${props.class ?? ""}`;
572
+ }
573
+ }, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), false, true);
574
+ _$insert(_el$16, () => props.children);
575
+ _$runHydrationEvents();
576
+ return _el$16;
577
+ })();
578
+ const AppWorkspaceSidebarMobileBody = props => (() => {
579
+ var _el$17 = _$getNextElement(_tmpl$2);
580
+ _$spread(_el$17, _$mergeProps({
581
+ get ["class"]() {
582
+ return `k2b-app-workspace__sidebar-mobile-body ${props.class ?? ""}`;
583
+ }
584
+ }, () => scrollAttrs(props.scrollPreserveKey), () => modeAttrs(props.sidebarMode)), false, true);
585
+ _$insert(_el$17, () => props.children);
586
+ _$runHydrationEvents();
587
+ return _el$17;
588
+ })();
589
+ const AppWorkspaceSidebarFooter = props => (() => {
590
+ var _el$18 = _$getNextElement(_tmpl$9);
591
+ _$spread(_el$18, _$mergeProps({
592
+ get ["class"]() {
593
+ return `k2b-app-workspace__sidebar-footer ${props.class ?? ""}`;
594
+ }
595
+ }, () => modeAttrs(props.sidebarMode)), false, true);
596
+ _$insert(_el$18, () => props.children);
597
+ _$runHydrationEvents();
598
+ return _el$18;
599
+ })();
600
+ const AppWorkspaceSidebarSection = props => (() => {
601
+ var _el$19 = _$getNextElement(_tmpl$10),
602
+ _el$26 = _el$19.firstChild,
603
+ [_el$27, _co$4] = _$getNextMarker(_el$26.nextSibling),
604
+ _el$28 = _el$27.nextSibling,
605
+ [_el$29, _co$5] = _$getNextMarker(_el$28.nextSibling);
606
+ _$spread(_el$19, _$mergeProps({
607
+ get ["class"]() {
608
+ return `k2b-app-workspace__sidebar-section ${props.class ?? ""}`;
609
+ }
610
+ }, () => modeAttrs(props.sidebarMode)), false, true);
611
+ _$insert(_el$19, _$createComponent(Show, {
612
+ get when() {
613
+ return props.title || props.actions;
614
+ },
615
+ get children() {
616
+ var _el$20 = _$getNextElement(_tmpl$1),
617
+ _el$22 = _el$20.firstChild,
618
+ [_el$23, _co$2] = _$getNextMarker(_el$22.nextSibling),
619
+ _el$24 = _el$23.nextSibling,
620
+ [_el$25, _co$3] = _$getNextMarker(_el$24.nextSibling);
621
+ _$insert(_el$20, _$createComponent(Show, {
622
+ get when() {
623
+ return props.title;
624
+ },
625
+ children: title => (() => {
626
+ var _el$30 = _$getNextElement(_tmpl$11);
627
+ _$insert(_el$30, title);
628
+ return _el$30;
629
+ })()
630
+ }), _el$23, _co$2);
631
+ _$insert(_el$20, _$createComponent(Show, {
632
+ get when() {
633
+ return props.actions;
634
+ },
635
+ get children() {
636
+ var _el$21 = _$getNextElement(_tmpl$0);
637
+ _$insert(_el$21, () => props.actions);
638
+ return _el$21;
639
+ }
640
+ }), _el$25, _co$3);
641
+ return _el$20;
642
+ }
643
+ }), _el$27, _co$4);
644
+ _$insert(_el$19, () => props.children, _el$29, _co$5);
645
+ _$runHydrationEvents();
646
+ return _el$19;
647
+ })();
648
+ const AppWorkspaceSidebarItemIcon = props => ({
649
+ kind: SIDEBAR_ITEM_ICON,
650
+ ...props
651
+ });
652
+ const AppWorkspaceSidebarItemLabel = props => ({
653
+ kind: SIDEBAR_ITEM_LABEL,
654
+ ...props
655
+ });
656
+ const AppWorkspaceSidebarItemMeta = props => ({
657
+ kind: SIDEBAR_ITEM_META,
658
+ ...props
659
+ });
660
+ const AppWorkspaceSidebarItemAction = props => ({
661
+ kind: SIDEBAR_ITEM_ACTION,
662
+ ...props
663
+ });
664
+ const AppWorkspaceSidebarItemActions = props => (() => {
665
+ var _el$31 = _$getNextElement(_tmpl$12);
666
+ _$insert(_el$31, () => props.children);
667
+ _$effect(() => _$setAttribute(_el$31, "data-visibility", props.visibility === "hover" ? "hover" : undefined));
668
+ return _el$31;
669
+ })();
670
+ /** Shared visual and semantic row frame for flat sidebar items and tree items. */
671
+ function AppWorkspaceSidebarRow(props) {
672
+ const className = () => `k2b-app-workspace__sidebar-item ${props.hasActions ? "has-action" : ""} ${props.active ? props.activeClass ?? "is-active" : ""} ${props.class ?? ""}`;
673
+ const data = () => Object.fromEntries(Object.entries(props.data ?? {}).filter(([, value]) => value !== undefined && value !== null).map(([key, value]) => [`data-${key}`, String(value)]));
674
+ const common = () => ({
675
+ class: className(),
676
+ title: props.title,
677
+ "data-tone": props.tone,
678
+ "data-mode": props.mode,
679
+ style: {
680
+ "view-transition-name": props.viewTransitionName,
681
+ "--k2b-sidebar-item-depth": props.depth === undefined ? undefined : String(Math.max(0, props.depth))
682
+ },
683
+ ...data()
684
+ });
685
+ const current = () => props.active ? "page" : undefined;
686
+ if (props.hasActions) {
687
+ if (!props.href || props.disabled) {
688
+ return (() => {
689
+ var _el$32 = _$getNextElement(_tmpl$13),
690
+ _el$33 = _el$32.firstChild,
691
+ _el$34 = _el$33.nextSibling,
692
+ [_el$35, _co$6] = _$getNextMarker(_el$34.nextSibling);
693
+ _$spread(_el$32, _$mergeProps(common, {
694
+ get ["data-disabled"]() {
695
+ return props.disabled ? "true" : undefined;
696
+ }
697
+ }), false, true);
698
+ _$addEventListener(_el$33, "click", props.onClick, true);
699
+ _$insert(_el$33, () => props.children);
700
+ _$insert(_el$32, () => props.actions, _el$35, _co$6);
701
+ _$effect(_p$ => {
702
+ var _v$41 = props.tabIndex,
703
+ _v$42 = props.disabled;
704
+ _v$41 !== _p$.e && _$setAttribute(_el$33, "tabindex", _p$.e = _v$41);
705
+ _v$42 !== _p$.t && _$setProperty(_el$33, "disabled", _p$.t = _v$42);
706
+ return _p$;
707
+ }, {
708
+ e: undefined,
709
+ t: undefined
710
+ });
711
+ _$runHydrationEvents();
712
+ return _el$32;
713
+ })();
714
+ }
715
+ if (props.navigation !== "enhanced" || !props.onNavigate) {
716
+ return (() => {
717
+ var _el$36 = _$getNextElement(_tmpl$14),
718
+ _el$37 = _el$36.firstChild,
719
+ _el$38 = _el$37.nextSibling,
720
+ [_el$39, _co$7] = _$getNextMarker(_el$38.nextSibling);
721
+ _$spread(_el$36, _$mergeProps(common), false, true);
722
+ _$addEventListener(_el$37, "click", props.onClick, true);
723
+ _$insert(_el$37, () => props.children);
724
+ _$insert(_el$36, () => props.actions, _el$39, _co$7);
725
+ _$effect(_p$ => {
726
+ var _v$43 = props.href,
727
+ _v$44 = props.tabIndex,
728
+ _v$45 = current();
729
+ _v$43 !== _p$.e && _$setAttribute(_el$37, "href", _p$.e = _v$43);
730
+ _v$44 !== _p$.t && _$setAttribute(_el$37, "tabindex", _p$.t = _v$44);
731
+ _v$45 !== _p$.a && _$setAttribute(_el$37, "aria-current", _p$.a = _v$45);
732
+ return _p$;
733
+ }, {
734
+ e: undefined,
735
+ t: undefined,
736
+ a: undefined
737
+ });
738
+ _$runHydrationEvents();
739
+ return _el$36;
740
+ })();
741
+ }
742
+ return (() => {
743
+ var _el$40 = _$getNextElement(_tmpl$15),
744
+ _el$41 = _el$40.firstChild,
745
+ [_el$42, _co$8] = _$getNextMarker(_el$41.nextSibling),
746
+ _el$43 = _el$42.nextSibling,
747
+ [_el$44, _co$9] = _$getNextMarker(_el$43.nextSibling);
748
+ _$spread(_el$40, _$mergeProps(common), false, true);
749
+ _$insert(_el$40, _$createComponent(Link, {
750
+ get href() {
751
+ return props.href;
752
+ },
753
+ "class": "k2b-app-workspace__sidebar-item-main",
754
+ get tabIndex() {
755
+ return props.tabIndex;
756
+ },
757
+ get ["aria-current"]() {
758
+ return current();
759
+ },
760
+ get replace() {
761
+ return props.replace;
762
+ },
763
+ get scroll() {
764
+ return props.scroll;
765
+ },
766
+ get onNavigate() {
767
+ return props.onNavigate;
768
+ },
769
+ get onClick() {
770
+ return props.onClick;
771
+ },
772
+ get children() {
773
+ return props.children;
774
+ }
775
+ }), _el$42, _co$8);
776
+ _$insert(_el$40, () => props.actions, _el$44, _co$9);
777
+ _$runHydrationEvents();
778
+ return _el$40;
779
+ })();
780
+ }
781
+ if (!props.href || props.disabled) {
782
+ return (() => {
783
+ var _el$45 = _$getNextElement(_tmpl$16);
784
+ _$spread(_el$45, _$mergeProps(common, {
785
+ get tabIndex() {
786
+ return props.tabIndex;
787
+ },
788
+ get disabled() {
789
+ return props.disabled;
790
+ },
791
+ get onClick() {
792
+ return props.onClick;
793
+ }
794
+ }), false, true);
795
+ _$insert(_el$45, () => props.children);
796
+ _$runHydrationEvents();
797
+ return _el$45;
798
+ })();
799
+ }
800
+ if (props.navigation !== "enhanced" || !props.onNavigate) {
801
+ return (() => {
802
+ var _el$46 = _$getNextElement(_tmpl$17);
803
+ _$spread(_el$46, _$mergeProps({
804
+ get href() {
805
+ return props.href;
806
+ }
807
+ }, common, {
808
+ get tabIndex() {
809
+ return props.tabIndex;
810
+ },
811
+ get ["aria-current"]() {
812
+ return current();
813
+ },
814
+ get onClick() {
815
+ return props.onClick;
816
+ }
817
+ }), false, true);
818
+ _$insert(_el$46, () => props.children);
819
+ _$runHydrationEvents();
820
+ return _el$46;
821
+ })();
822
+ }
823
+ return _$createComponent(Link, _$mergeProps({
824
+ get href() {
825
+ return props.href;
826
+ }
827
+ }, common, {
828
+ get tabIndex() {
829
+ return props.tabIndex;
830
+ },
831
+ get ["aria-current"]() {
832
+ return current();
833
+ },
834
+ get replace() {
835
+ return props.replace;
836
+ },
837
+ get scroll() {
838
+ return props.scroll;
839
+ },
840
+ get onNavigate() {
841
+ return props.onNavigate;
842
+ },
843
+ get onClick() {
844
+ return props.onClick;
845
+ },
846
+ get children() {
847
+ return props.children;
848
+ }
849
+ }));
850
+ }
851
+ function AppWorkspaceSidebarItem(props) {
852
+ const messages = useUiMessages();
853
+ const mode = useContext(SidebarModeContext);
854
+ const resolved = children(() => props.children);
855
+ const resolvedActions = children(() => props.actions);
856
+ const values = createMemo(() => flatten(resolved()));
857
+ const slots = createMemo(() => values().filter(sidebarItemSlot));
858
+ const iconSlot = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_ITEM_ICON));
859
+ const labelSlot = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_ITEM_LABEL));
860
+ const metaSlot = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_ITEM_META));
861
+ const actionSlot = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_ITEM_ACTION));
862
+ const legacy = createMemo(() => values().filter(value => !sidebarItemSlot(value)));
863
+ const label = () => labelSlot()?.children ?? (legacy().length === 1 ? legacy()[0] : legacy());
864
+ const icon = () => iconSlot()?.icon ?? props.icon;
865
+ const iconContent = () => iconSlot()?.children;
866
+ const meta = () => metaSlot()?.children ?? props.meta;
867
+ const metaVisibility = () => metaSlot()?.visibility ?? props.metaVisibility;
868
+ const customActions = () => resolvedActions();
869
+ const hasCustomActions = () => Boolean(customActions());
870
+ const hasAction = () => Boolean(actionSlot() || props.actionIcon || hasCustomActions());
871
+ const mainContent = [_$createComponent(Show, {
872
+ get when() {
873
+ return iconContent() || icon();
874
+ },
875
+ get children() {
876
+ var _el$47 = _$getNextElement(_tmpl$18);
877
+ _$insert(_el$47, () => iconContent() ?? (() => {
878
+ var _el$50 = _$getNextElement(_tmpl$20);
879
+ _$effect(() => _$className(_el$50, iconClass(icon())));
880
+ return _el$50;
881
+ })());
882
+ return _el$47;
883
+ }
884
+ }), (() => {
885
+ var _el$48 = _$getNextElement(_tmpl$19),
886
+ _el$49 = _el$48.firstChild;
887
+ _$insert(_el$49, () => label());
888
+ _$effect(() => _$setAttribute(_el$48, "data-marquee", labelSlot()?.marquee === false ? undefined : "true"));
889
+ return _el$48;
890
+ })(), _$createComponent(Show, {
891
+ get when() {
892
+ return meta();
893
+ },
894
+ children: value => (() => {
895
+ var _el$51 = _$getNextElement(_tmpl$21);
896
+ _$insert(_el$51, value);
897
+ _$effect(() => _$setAttribute(_el$51, "data-visibility", metaVisibility() === "hover" ? "hover" : undefined));
898
+ return _el$51;
899
+ })()
900
+ })];
901
+ const singleAction = () => {
902
+ const slot = actionSlot();
903
+ if (!slot && !props.actionIcon) return null;
904
+ const content = slot?.children ?? (() => {
905
+ var _el$52 = _$getNextElement(_tmpl$20);
906
+ _$effect(() => _$className(_el$52, iconClass(slot?.icon ?? props.actionIcon, "ti-dots")));
907
+ return _el$52;
908
+ })();
909
+ const label = slot?.label ?? props.actionLabel ?? messages().rowAction;
910
+ const select = event => {
911
+ event.preventDefault();
912
+ event.stopPropagation();
913
+ slot?.onSelect?.(event);
914
+ props.onActionClick?.(event);
915
+ };
916
+ // A row action that is a link must still navigate — only the row's own
917
+ // click handling is suppressed.
918
+ const follow = event => {
919
+ event.stopPropagation();
920
+ slot?.onSelect?.(event);
921
+ props.onActionClick?.(event);
922
+ };
923
+ return slot?.href ? (() => {
924
+ var _el$53 = _$getNextElement(_tmpl$22);
925
+ _el$53.$$click = follow;
926
+ _$setAttribute(_el$53, "aria-label", label);
927
+ _$insert(_el$53, content);
928
+ _$effect(_p$ => {
929
+ var _v$46 = slot.href,
930
+ _v$47 = slot.visibility === "hover" ? "hover" : undefined;
931
+ _v$46 !== _p$.e && _$setAttribute(_el$53, "href", _p$.e = _v$46);
932
+ _v$47 !== _p$.t && _$setAttribute(_el$53, "data-visibility", _p$.t = _v$47);
933
+ return _p$;
934
+ }, {
935
+ e: undefined,
936
+ t: undefined
937
+ });
938
+ _$runHydrationEvents();
939
+ return _el$53;
940
+ })() : (() => {
941
+ var _el$54 = _$getNextElement(_tmpl$23);
942
+ _el$54.$$click = select;
943
+ _$setAttribute(_el$54, "aria-label", label);
944
+ _$insert(_el$54, content);
945
+ _$effect(() => _$setAttribute(_el$54, "data-visibility", slot?.visibility === "hover" ? "hover" : undefined));
946
+ _$runHydrationEvents();
947
+ return _el$54;
948
+ })();
949
+ };
950
+ const actions = () => [_$memo(customActions), _$memo(singleAction)];
951
+ return _$createComponent(AppWorkspaceSidebarRow, {
952
+ mode: mode,
953
+ get hasActions() {
954
+ return hasAction();
955
+ },
956
+ get href() {
957
+ return props.href;
958
+ },
959
+ get navigation() {
960
+ return props.navigation;
961
+ },
962
+ get replace() {
963
+ return props.replace;
964
+ },
965
+ get scroll() {
966
+ return props.scroll;
967
+ },
968
+ get onNavigate() {
969
+ return props.onNavigate;
970
+ },
971
+ get onClick() {
972
+ return props.onClick;
973
+ },
974
+ get active() {
975
+ return props.active;
976
+ },
977
+ get activeClass() {
978
+ return props.activeClass;
979
+ },
980
+ get disabled() {
981
+ return props.disabled;
982
+ },
983
+ get tone() {
984
+ return props.tone;
985
+ },
986
+ get title() {
987
+ return props.title;
988
+ },
989
+ get viewTransitionName() {
990
+ return props.viewTransitionName;
991
+ },
992
+ get ["class"]() {
993
+ return props.class;
994
+ },
995
+ get depth() {
996
+ return props.depth;
997
+ },
998
+ get actions() {
999
+ return actions();
1000
+ },
1001
+ get data() {
1002
+ return {
1003
+ ...props.data,
1004
+ ...modeData(props.sidebarMode),
1005
+ "has-actions": hasCustomActions() ? "true" : undefined,
1006
+ "action-visibility": actionSlot()?.visibility === "hover" ? "hover" : undefined
1007
+ };
1008
+ },
1009
+ children: mainContent
1010
+ });
1011
+ }
1012
+ const navTreeItems = value => flatten(value).filter(navTreeItemSlot);
1013
+ const AppWorkspaceNavTreeItem = props => ({
1014
+ kind: NAV_TREE_ITEM,
1015
+ ...props
1016
+ });
1017
+ const AppWorkspaceNavTree = props => {
1018
+ const mode = useContext(SidebarModeContext);
1019
+ let root;
1020
+ const resolved = children(() => props.children);
1021
+ const roots = createMemo(() => navTreeItems(resolved()));
1022
+ const [uncontrolledExpandedIds, setUncontrolledExpandedIds] = createSignal([...new Set(props.defaultExpandedIds ?? [])]);
1023
+ const [focusedId, setFocusedId] = createSignal(props.selectedId ?? null);
1024
+ const expandedIds = createMemo(() => new Set(props.expandedIds ?? uncontrolledExpandedIds()));
1025
+ const isExpanded = id => expandedIds().has(id);
1026
+ const setExpanded = (id, expanded) => {
1027
+ const next = new Set(expandedIds());
1028
+ if (expanded) next.add(id);else next.delete(id);
1029
+ const value = [...next];
1030
+ if (props.expandedIds === undefined) setUncontrolledExpandedIds(value);
1031
+ props.onExpandedIdsChange?.(value);
1032
+ };
1033
+ const visibleIds = createMemo(() => {
1034
+ const result = [];
1035
+ const visit = items => {
1036
+ for (const item of items) {
1037
+ if (item.disabled) continue;
1038
+ result.push(item.id);
1039
+ const nested = navTreeItems(item.children);
1040
+ if (nested.length > 0 && isExpanded(item.id)) visit(nested);
1041
+ }
1042
+ };
1043
+ visit(roots());
1044
+ return result;
1045
+ });
1046
+ const tabStopId = () => {
1047
+ const visible = visibleIds();
1048
+ const focused = focusedId();
1049
+ if (focused && visible.includes(focused)) return focused;
1050
+ if (props.selectedId && visible.includes(props.selectedId)) return props.selectedId;
1051
+ return visible[0] ?? null;
1052
+ };
1053
+ const treeItemElements = () => Array.from(root?.querySelectorAll("[data-k2b-nav-tree-id]") ?? []).filter(element => element.getAttribute("aria-disabled") !== "true");
1054
+ const focusItem = id => {
1055
+ if (!id) return;
1056
+ const element = treeItemElements().find(candidate => candidate.dataset.k2bNavTreeId === id);
1057
+ element?.focus({
1058
+ preventScroll: true
1059
+ });
1060
+ };
1061
+ const renderItems = (value, depth, parentId) => _$createComponent(For, {
1062
+ get each() {
1063
+ return navTreeItems(value);
1064
+ },
1065
+ children: item => {
1066
+ const nested = createMemo(() => navTreeItems(item.children));
1067
+ const hasChildren = () => nested().length > 0;
1068
+ const selected = () => props.selectedId === item.id;
1069
+ let treeItem;
1070
+ const activate = event => {
1071
+ if (item.disabled) return;
1072
+ treeItem?.focus({
1073
+ preventScroll: true
1074
+ });
1075
+ setFocusedId(item.id);
1076
+ if (hasChildren() && !item.href && !item.onSelect && !props.onSelectedIdChange) {
1077
+ setExpanded(item.id, !isExpanded(item.id));
1078
+ return;
1079
+ }
1080
+ props.onSelectedIdChange?.(item.id);
1081
+ item.onSelect?.(event);
1082
+ };
1083
+ const toggle = event => {
1084
+ event.preventDefault();
1085
+ event.stopPropagation();
1086
+ if (!item.disabled && hasChildren()) setExpanded(item.id, !isExpanded(item.id));
1087
+ };
1088
+ const onRowClick = event => {
1089
+ if (event.target?.closest("[data-k2b-nav-tree-toggle]")) {
1090
+ toggle(event);
1091
+ return;
1092
+ }
1093
+ activate(event);
1094
+ };
1095
+ const rowControl = () => {
1096
+ const firstChild = treeItem?.firstElementChild;
1097
+ if (!firstChild?.classList.contains("has-action")) return firstChild;
1098
+ return firstChild.firstElementChild;
1099
+ };
1100
+ const onKeyDown = event => {
1101
+ if (event.target !== event.currentTarget) return;
1102
+ if (event.altKey || event.ctrlKey || event.metaKey) return;
1103
+ const items = treeItemElements();
1104
+ const index = items.indexOf(event.currentTarget);
1105
+ if (event.key === "ArrowDown" && index >= 0) {
1106
+ event.preventDefault();
1107
+ items[Math.min(items.length - 1, index + 1)]?.focus({
1108
+ preventScroll: true
1109
+ });
1110
+ return;
1111
+ }
1112
+ if (event.key === "ArrowUp" && index >= 0) {
1113
+ event.preventDefault();
1114
+ items[Math.max(0, index - 1)]?.focus({
1115
+ preventScroll: true
1116
+ });
1117
+ return;
1118
+ }
1119
+ if (event.key === "Home") {
1120
+ event.preventDefault();
1121
+ items[0]?.focus({
1122
+ preventScroll: true
1123
+ });
1124
+ return;
1125
+ }
1126
+ if (event.key === "End") {
1127
+ event.preventDefault();
1128
+ items.at(-1)?.focus({
1129
+ preventScroll: true
1130
+ });
1131
+ return;
1132
+ }
1133
+ if (event.key === "ArrowRight" && hasChildren()) {
1134
+ event.preventDefault();
1135
+ if (!isExpanded(item.id)) setExpanded(item.id, true);else queueMicrotask(() => focusItem(nested()[0]?.id ?? null));
1136
+ return;
1137
+ }
1138
+ if (event.key === "ArrowLeft") {
1139
+ event.preventDefault();
1140
+ if (hasChildren() && isExpanded(item.id)) setExpanded(item.id, false);else focusItem(parentId ?? null);
1141
+ return;
1142
+ }
1143
+ if (event.key === "Enter" || event.key === " ") {
1144
+ event.preventDefault();
1145
+ rowControl()?.click();
1146
+ }
1147
+ };
1148
+ const usesIconDisclosure = () => hasChildren() && Boolean(item.icon && item.expandedIcon);
1149
+ const rowIcon = () => usesIconDisclosure() && isExpanded(item.id) ? item.expandedIcon : item.icon;
1150
+ const rowContent = [_$createComponent(Show, {
1151
+ get when() {
1152
+ return rowIcon();
1153
+ },
1154
+ get children() {
1155
+ var _el$55 = _$getNextElement(_tmpl$24),
1156
+ _el$56 = _el$55.firstChild;
1157
+ _$effect(_p$ => {
1158
+ var _v$48 = usesIconDisclosure() ? "" : undefined,
1159
+ _v$49 = iconClass(rowIcon());
1160
+ _v$48 !== _p$.e && _$setAttribute(_el$55, "data-k2b-nav-tree-toggle", _p$.e = _v$48);
1161
+ _v$49 !== _p$.t && _$className(_el$56, _p$.t = _v$49);
1162
+ return _p$;
1163
+ }, {
1164
+ e: undefined,
1165
+ t: undefined
1166
+ });
1167
+ return _el$55;
1168
+ }
1169
+ }), (() => {
1170
+ var _el$57 = _$getNextElement(_tmpl$19),
1171
+ _el$58 = _el$57.firstChild;
1172
+ _$insert(_el$58, () => item.label);
1173
+ return _el$57;
1174
+ })(), _$createComponent(Show, {
1175
+ get when() {
1176
+ return item.meta !== undefined;
1177
+ },
1178
+ get children() {
1179
+ var _el$59 = _$getNextElement(_tmpl$25);
1180
+ _$insert(_el$59, () => item.meta);
1181
+ _$effect(_p$ => {
1182
+ var _v$50 = `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`,
1183
+ _v$51 = item.metaVisibility === "hover" ? "hover" : undefined;
1184
+ _v$50 !== _p$.e && _$className(_el$59, _p$.e = _v$50);
1185
+ _v$51 !== _p$.t && _$setAttribute(_el$59, "data-visibility", _p$.t = _v$51);
1186
+ return _p$;
1187
+ }, {
1188
+ e: undefined,
1189
+ t: undefined
1190
+ });
1191
+ return _el$59;
1192
+ }
1193
+ }), _$createComponent(Show, {
1194
+ get when() {
1195
+ return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
1196
+ },
1197
+ get children() {
1198
+ var _el$60 = _$getNextElement(_tmpl$26),
1199
+ _el$61 = _el$60.firstChild;
1200
+ _$effect(() => _$className(_el$61, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`));
1201
+ return _el$60;
1202
+ }
1203
+ })];
1204
+ const row = () => _$createComponent(AppWorkspaceSidebarRow, {
1205
+ mode: mode,
1206
+ get hasActions() {
1207
+ return Boolean(item.actions);
1208
+ },
1209
+ get href() {
1210
+ return item.href;
1211
+ },
1212
+ get navigation() {
1213
+ return item.navigation;
1214
+ },
1215
+ get replace() {
1216
+ return item.replace;
1217
+ },
1218
+ get scroll() {
1219
+ return item.scroll;
1220
+ },
1221
+ get onNavigate() {
1222
+ return item.onNavigate;
1223
+ },
1224
+ onClick: onRowClick,
1225
+ get active() {
1226
+ return selected();
1227
+ },
1228
+ get disabled() {
1229
+ return item.disabled;
1230
+ },
1231
+ get tone() {
1232
+ return item.tone;
1233
+ },
1234
+ get title() {
1235
+ return item.title;
1236
+ },
1237
+ get viewTransitionName() {
1238
+ return item.viewTransitionName;
1239
+ },
1240
+ get ["class"]() {
1241
+ return `k2b-app-workspace__nav-tree-row ${item.class ?? ""}`;
1242
+ },
1243
+ get depth() {
1244
+ return props.indented === false ? 0 : depth;
1245
+ },
1246
+ tabIndex: -1,
1247
+ get actions() {
1248
+ return item.actions;
1249
+ },
1250
+ get data() {
1251
+ return {
1252
+ "has-actions": item.actions ? "true" : undefined
1253
+ };
1254
+ },
1255
+ children: rowContent
1256
+ });
1257
+ return (() => {
1258
+ var _el$62 = _$getNextElement(_tmpl$28),
1259
+ _el$64 = _el$62.firstChild,
1260
+ [_el$65, _co$0] = _$getNextMarker(_el$64.nextSibling),
1261
+ _el$66 = _el$65.nextSibling,
1262
+ [_el$67, _co$1] = _$getNextMarker(_el$66.nextSibling);
1263
+ _$addEventListener(_el$62, "drop", item.onDrop);
1264
+ _$addEventListener(_el$62, "dragleave", item.onDragLeave);
1265
+ _$addEventListener(_el$62, "dragover", item.onDragOver);
1266
+ _$addEventListener(_el$62, "dragenter", item.onDragEnter);
1267
+ _el$62.$$keydown = onKeyDown;
1268
+ _el$62.addEventListener("focus", () => setFocusedId(item.id));
1269
+ var _ref$ = treeItem;
1270
+ typeof _ref$ === "function" ? _$use(_ref$, _el$62) : treeItem = _el$62;
1271
+ _$setAttribute(_el$62, "aria-level", depth + 1);
1272
+ _$setAttribute(_el$62, "data-k2b-nav-tree-parent-id", parentId);
1273
+ _$insert(_el$62, row, _el$65, _co$0);
1274
+ _$insert(_el$62, _$createComponent(Show, {
1275
+ get when() {
1276
+ return _$memo(() => !!hasChildren())() && isExpanded(item.id);
1277
+ },
1278
+ get children() {
1279
+ var _el$63 = _$getNextElement(_tmpl$27);
1280
+ _$insert(_el$63, () => renderItems(nested(), depth + 1, item.id));
1281
+ return _el$63;
1282
+ }
1283
+ }), _el$67, _co$1);
1284
+ _$effect(_p$ => {
1285
+ var _v$52 = selected(),
1286
+ _v$53 = hasChildren() ? isExpanded(item.id) : undefined,
1287
+ _v$54 = item.disabled ? "true" : undefined,
1288
+ _v$55 = item.disabled ? -1 : tabStopId() === item.id ? 0 : -1,
1289
+ _v$56 = item.id;
1290
+ _v$52 !== _p$.e && _$setAttribute(_el$62, "aria-selected", _p$.e = _v$52);
1291
+ _v$53 !== _p$.t && _$setAttribute(_el$62, "aria-expanded", _p$.t = _v$53);
1292
+ _v$54 !== _p$.a && _$setAttribute(_el$62, "aria-disabled", _p$.a = _v$54);
1293
+ _v$55 !== _p$.o && _$setAttribute(_el$62, "tabindex", _p$.o = _v$55);
1294
+ _v$56 !== _p$.i && _$setAttribute(_el$62, "data-k2b-nav-tree-id", _p$.i = _v$56);
1295
+ return _p$;
1296
+ }, {
1297
+ e: undefined,
1298
+ t: undefined,
1299
+ a: undefined,
1300
+ o: undefined,
1301
+ i: undefined
1302
+ });
1303
+ _$runHydrationEvents();
1304
+ return _el$62;
1305
+ })();
1306
+ }
1307
+ });
1308
+ return (() => {
1309
+ var _el$68 = _$getNextElement(_tmpl$29);
1310
+ var _ref$2 = root;
1311
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$68) : root = _el$68;
1312
+ _$insert(_el$68, () => renderItems(roots(), 0));
1313
+ _$effect(_p$ => {
1314
+ var _v$57 = `k2b-app-workspace__nav-tree ${props.class ?? ""}`,
1315
+ _v$58 = props.ariaLabel;
1316
+ _v$57 !== _p$.e && _$className(_el$68, _p$.e = _v$57);
1317
+ _v$58 !== _p$.t && _$setAttribute(_el$68, "aria-label", _p$.t = _v$58);
1318
+ return _p$;
1319
+ }, {
1320
+ e: undefined,
1321
+ t: undefined
1322
+ });
1323
+ return _el$68;
1324
+ })();
1325
+ };
1326
+ AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
1327
+ const AppWorkspaceSidebarIconGrid = props => (() => {
1328
+ var _el$69 = _$getNextElement(_tmpl$30),
1329
+ _el$71 = _el$69.firstChild,
1330
+ [_el$72, _co$10] = _$getNextMarker(_el$71.nextSibling),
1331
+ _el$70 = _el$72.nextSibling;
1332
+ _$spread(_el$69, _$mergeProps({
1333
+ get ["class"]() {
1334
+ return `k2b-app-workspace__sidebar-icon-grid-wrap ${props.class ?? ""}`;
1335
+ }
1336
+ }, () => modeAttrs(props.sidebarMode)), false, true);
1337
+ _$insert(_el$69, _$createComponent(Show, {
1338
+ get when() {
1339
+ return props.title;
1340
+ },
1341
+ children: title => (() => {
1342
+ var _el$73 = _$getNextElement(_tmpl$11);
1343
+ _$insert(_el$73, title);
1344
+ return _el$73;
1345
+ })()
1346
+ }), _el$72, _co$10);
1347
+ _$insert(_el$70, () => props.children);
1348
+ _$effect(() => _$setAttribute(_el$70, "data-columns", props.columns ?? 2));
1349
+ _$runHydrationEvents();
1350
+ return _el$69;
1351
+ })();
1352
+ const AppWorkspaceSidebarIconAction = props => {
1353
+ const content = (() => {
1354
+ var _el$74 = _$getNextElement(_tmpl$31);
1355
+ _$effect(() => _$className(_el$74, iconClass(props.icon)));
1356
+ return _el$74;
1357
+ })();
1358
+ const attrs = () => ({
1359
+ class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
1360
+ title: props.label,
1361
+ "aria-label": props.label,
1362
+ "data-tone": props.tone,
1363
+ style: {
1364
+ "view-transition-name": props.viewTransitionName
1365
+ },
1366
+ ...modeAttrs(props.sidebarMode)
1367
+ });
1368
+ if (!props.href || props.disabled) return (() => {
1369
+ var _el$75 = _$getNextElement(_tmpl$16);
1370
+ _$spread(_el$75, _$mergeProps(attrs, {
1371
+ get disabled() {
1372
+ return props.disabled;
1373
+ },
1374
+ get onClick() {
1375
+ return props.onClick;
1376
+ }
1377
+ }), false, true);
1378
+ _$insert(_el$75, content);
1379
+ _$runHydrationEvents();
1380
+ return _el$75;
1381
+ })();
1382
+ if (props.navigation !== "enhanced" || !props.onNavigate) return (() => {
1383
+ var _el$76 = _$getNextElement(_tmpl$17);
1384
+ _$spread(_el$76, _$mergeProps({
1385
+ get href() {
1386
+ return props.href;
1387
+ }
1388
+ }, attrs, {
1389
+ get onClick() {
1390
+ return props.onClick;
1391
+ }
1392
+ }), false, true);
1393
+ _$insert(_el$76, content);
1394
+ _$runHydrationEvents();
1395
+ return _el$76;
1396
+ })();
1397
+ return _$createComponent(Link, _$mergeProps({
1398
+ get href() {
1399
+ return props.href;
1400
+ }
1401
+ }, attrs, {
1402
+ get replace() {
1403
+ return props.replace;
1404
+ },
1405
+ get scroll() {
1406
+ return props.scroll;
1407
+ },
1408
+ get onNavigate() {
1409
+ return props.onNavigate;
1410
+ },
1411
+ get onClick() {
1412
+ return props.onClick;
1413
+ },
1414
+ children: content
1415
+ }));
1416
+ };
1417
+ const AppWorkspace = props => {
1418
+ let root;
1419
+ const serverLayoutState = useContext(LayoutStateContext);
1420
+ const initialLayoutState = () => props.layoutState?.() ?? serverLayoutState;
1421
+
1422
+ // The resize handles are inert markup until the controller is attached, so
1423
+ // the workspace attaches it itself and scopes it to this root. `onMount`
1424
+ // never runs during SSR, and the disposer removes every listener. A host
1425
+ // shell may own one document-level controller for SSR and hydrated roots;
1426
+ // its marker keeps controller ownership singular without app-level props.
1427
+ onMount(() => {
1428
+ if (props.controller === false || !root || root.closest("[data-k2b-app-workspace-controller]")) return;
1429
+ onCleanup(installAppWorkspaceController({
1430
+ root,
1431
+ readState: () => props.layoutState ? props.layoutState() : serverLayoutState,
1432
+ writeState: state => props.onLayoutChange?.(state)
1433
+ }));
1434
+ });
1435
+ return _$createComponent(ResizeContext.Provider, {
1436
+ get value() {
1437
+ return props.resizable !== false;
1438
+ },
1439
+ get children() {
1440
+ var _el$77 = _$getNextElement(_tmpl$32);
1441
+ var _ref$3 = root;
1442
+ typeof _ref$3 === "function" ? _$use(_ref$3, _el$77) : root = _el$77;
1443
+ _$insert(_el$77, () => props.children);
1444
+ _$effect(_p$ => {
1445
+ var _v$59 = `k2b-app-workspace ${props.class ?? ""}`,
1446
+ _v$60 = initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed),
1447
+ _v$61 = props.resizable === false ? "false" : "true",
1448
+ _v$62 = appWorkspaceLayoutStyle(initialLayoutState());
1449
+ _v$59 !== _p$.e && _$className(_el$77, _p$.e = _v$59);
1450
+ _v$60 !== _p$.t && _$setAttribute(_el$77, "data-sidebar-collapsed", _p$.t = _v$60);
1451
+ _v$61 !== _p$.a && _$setAttribute(_el$77, "data-workspace-resizable", _p$.a = _v$61);
1452
+ _p$.o = _$style(_el$77, _v$62, _p$.o);
1453
+ return _p$;
1454
+ }, {
1455
+ e: undefined,
1456
+ t: undefined,
1457
+ a: undefined,
1458
+ o: undefined
1459
+ });
1460
+ return _el$77;
1461
+ }
1462
+ });
1463
+ };
1464
+ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext.Provider, {
1465
+ get value() {
1466
+ return props.state ?? null;
1467
+ },
1468
+ get children() {
1469
+ return props.children;
1470
+ }
1471
+ });
1472
+ AppWorkspace.Content = props => (() => {
1473
+ var _el$78 = _$getNextElement(_tmpl$2);
1474
+ _$insert(_el$78, () => props.children);
1475
+ _$effect(() => _$className(_el$78, `k2b-app-workspace__content ${props.class ?? ""}`));
1476
+ return _el$78;
1477
+ })();
1478
+ AppWorkspace.Main = AppWorkspaceMain;
1479
+ AppWorkspace.MainPane = AppWorkspaceMainPane;
1480
+ AppWorkspace.Detail = AppWorkspaceDetail;
1481
+ AppWorkspace.BottomDrawer = AppWorkspaceBottomDrawer;
1482
+ AppWorkspace.Sidebar = AppWorkspaceSidebar;
1483
+ AppWorkspace.SidebarMobileTrigger = AppWorkspaceSidebarMobileTrigger;
1484
+ AppWorkspace.SidebarMobile = AppWorkspaceSidebarMobile;
1485
+ AppWorkspace.SidebarMobileItems = AppWorkspaceSidebarMobileItems;
1486
+ AppWorkspace.SidebarMobileBody = AppWorkspaceSidebarMobileBody;
1487
+ AppWorkspace.SidebarDesktop = AppWorkspaceSidebarDesktop;
1488
+ AppWorkspace.SidebarSection = AppWorkspaceSidebarSection;
1489
+ AppWorkspace.SidebarBody = AppWorkspaceSidebarBody;
1490
+ AppWorkspace.SidebarFooter = AppWorkspaceSidebarFooter;
1491
+ AppWorkspace.SidebarItem = AppWorkspaceSidebarItem;
1492
+ AppWorkspace.SidebarItemIcon = AppWorkspaceSidebarItemIcon;
1493
+ AppWorkspace.SidebarItemLabel = AppWorkspaceSidebarItemLabel;
1494
+ AppWorkspace.SidebarItemMeta = AppWorkspaceSidebarItemMeta;
1495
+ AppWorkspace.SidebarItemAction = AppWorkspaceSidebarItemAction;
1496
+ AppWorkspace.SidebarItemActions = AppWorkspaceSidebarItemActions;
1497
+ AppWorkspace.NavTree = AppWorkspaceNavTree;
1498
+ AppWorkspace.SidebarIconGrid = AppWorkspaceSidebarIconGrid;
1499
+ AppWorkspace.SidebarIconAction = AppWorkspaceSidebarIconAction;
1500
+ export default AppWorkspace;
1501
+ _$delegateEvents(["click", "keydown"]);
1502
+ //# sourceMappingURL=AppWorkspace.js.map