@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
package/README.md ADDED
@@ -0,0 +1,343 @@
1
+ # @k2b/ui
2
+
3
+ `@k2b/ui` is a standalone, production-ready component library for SolidJS. It
4
+ uses accessible interaction patterns, scoped precompiled styles, configurable
5
+ design tokens, and separate browser and server builds. Use it inside Cloud or
6
+ in another Solid application.
7
+
8
+ ```css
9
+ @import "@k2b/ui/global.css";
10
+ ```
11
+
12
+ Or load only the component styles when the application provides its own fonts
13
+ and icons:
14
+
15
+ ```ts
16
+ import "@k2b/ui/styles.css";
17
+ import { Button, DatePicker, StatusBadge, prompts } from "@k2b/ui";
18
+ ```
19
+
20
+ Wrap the rendered application in the UI scope:
21
+
22
+ ```tsx
23
+ <main class="k2b-ui">
24
+ <Placeholder title="Nothing here yet" />
25
+ </main>
26
+ ```
27
+
28
+ The scope uses `0.9375rem` body text at weight `400` without changing the
29
+ document's global `body`.
30
+
31
+ Fonts and theme stacks are CSS variables and can be replaced without
32
+ JavaScript:
33
+
34
+ ```css
35
+ .k2b-ui {
36
+ --k2b-font-sans: Inter, sans-serif;
37
+ --k2b-accent-50: #f5f3ff;
38
+ --k2b-accent-100: #ede9fe;
39
+ --k2b-accent-300: #c4b5fd;
40
+ --k2b-accent-400: #a78bfa;
41
+ --k2b-accent-500: #8b5cf6;
42
+ --k2b-accent-600: #7c3aed;
43
+ --k2b-accent-700: #6d28d9;
44
+ --k2b-accent-950: #2e1065;
45
+ }
46
+ ```
47
+
48
+ `--k2b-action` is the accessible foreground color for links and text actions.
49
+ `--k2b-action-solid` is the background color for filled controls; override both
50
+ with matching hover tokens when defining a custom theme.
51
+
52
+ AI surfaces can use a distinct semantic treatment without changing the general
53
+ application accent:
54
+
55
+ ```css
56
+ .k2b-ui {
57
+ --k2b-ai-accent: #0891b2;
58
+ --k2b-ai-accent-hover: #0e7490;
59
+ --k2b-ai-border: #06b6d4;
60
+ --k2b-ai-surface: #ecfeff;
61
+ }
62
+ ```
63
+
64
+ IBM Plex is an optional preset:
65
+
66
+ ```ts
67
+ import "@k2b/ui/fonts/plex.css";
68
+ ```
69
+
70
+ Tabler's webfont is the supported icon preset:
71
+
72
+ ```ts
73
+ import "@k2b/ui/icons/tabler.css";
74
+ ```
75
+
76
+ ## Component tranches
77
+
78
+ The public package surface only exposes components that have passed the
79
+ standalone SSR, behavior, styling, and migration checks:
80
+
81
+ - Actions: buttons, menus, context menus, filter/select chips, spotlight
82
+ search, copy, remove, segmented controls, controlled tabs, native
83
+ disclosures, and semantic toolbars
84
+ - Inputs: text, number, checkbox and switch controls; select, combobox,
85
+ multi-select, freeform tags, managed tag editing, icons, PIN, slider, color,
86
+ and date/time pickers;
87
+ dropzones, image selection/cropping, completion-aware plain text,
88
+ Markdown, and template editors
89
+ - Layout: `AppOverview`, `DataPanel`, `PanelHeader`, `PanelDialog`,
90
+ `SettingsModal`, `AppWorkspace`, `Panes`, `FloatingWindow`, and generic
91
+ settings-form helpers
92
+ - Surfaces: `Paper`, `Avatar`, `LinkCard`, `StatGrid`, `StatCell`, `StatusBadge`,
93
+ `ProgressBar`, `NoticeCard` (with `NoticeCard.Grid`), `Tag`,
94
+ `DescriptionList`, `Placeholder`, and `NotFoundState`
95
+ - Feedback: the complete scoped prompt family, `Tooltip`, and scoped `toast`
96
+ - AI: the controlled compound `Chat` surface with timeline, messages,
97
+ activity, composer, and compact context usage
98
+ - Content: data and log tables, charts and interactive state timelines,
99
+ calendars, file trees/browsers/previews, lightboxes, PDF previews,
100
+ documentation primitives, pagination, range navigation, code and Markdown
101
+ views, and structured-data previews
102
+ - Widgets: `Widget`, `WidgetHero`, `WidgetList`, `WidgetPills`,
103
+ `WidgetStat`, and `WidgetStatus`
104
+ - Intl: `LocaleProvider`, `useLocale`, and the unstyled `Format` namespace
105
+ (`Number`, `Percent`, `Currency`, `Bytes`, `Date`, `Time`, `DateTime`,
106
+ `RelativeTime`, `Duration`, `DurationMs`)
107
+
108
+ `MarkdownView` renders escaped Markdown by default. Pre-rendered HTML requires
109
+ the explicit `trustedHtml` prop and stays an application-owned trust boundary.
110
+ Authoring previews may pass an exact `inlineTokens` allowlist to emphasize
111
+ standalone placeholders during safe Markdown parsing.
112
+
113
+ ## Field contract
114
+
115
+ Form controls share one controlled contract. The same prop always has the same
116
+ meaning:
117
+
118
+ - `id`, `class`, `label`, `description`, `error`, `required`, and `disabled`
119
+ describe the field around the control.
120
+ - Use a visible `label` whenever possible. If the surrounding UI already
121
+ provides the label, use the native `"aria-label"` or `"aria-describedby"`
122
+ props. A placeholder is never an accessible label.
123
+ - `value` accepts either a direct value or a Solid accessor.
124
+ - `onValueChange` reports every controlled edit.
125
+ - `onValueCommit` reports the value when the user finishes the edit: on blur
126
+ or Enter for text-like controls, and on an explicit selection or Apply action
127
+ for pickers.
128
+
129
+ ```tsx
130
+ const [name, setName] = createSignal("");
131
+ const [date, setDate] = createSignal<string | null>(null);
132
+
133
+ <TextInput
134
+ label="Project name"
135
+ value={name}
136
+ onValueChange={setName}
137
+ onValueCommit={saveName}
138
+ />
139
+ <DatePicker
140
+ label="Release date"
141
+ value={date}
142
+ onValueChange={setDate}
143
+ onValueCommit={saveReleaseDate}
144
+ />
145
+ ```
146
+
147
+ Select, date, combobox, tags, and text controls use the same field metadata,
148
+ ARIA wiring, disabled and invalid states, and stable one-border focus shell.
149
+ Control-specific props only describe genuinely different behavior. For
150
+ example, `Combobox` owns a transient search `query` and hands the selected
151
+ domain object to `onSelect`; `FileDropzone` and `ImageCropper` are action/editor
152
+ primitives rather than value fields.
153
+
154
+ The package does not read Cloud routes, services, permissions, or application
155
+ state. Product-specific composition stays with the consuming application.
156
+ `Avatar` is therefore an additive portable presentation adapter. It does not
157
+ migrate Cloud's routed `./misc/Avatar` source contract, which remains
158
+ Cloud-specific.
159
+
160
+ Composition components intentionally use semantic data instead of application
161
+ stores:
162
+
163
+ ```tsx
164
+ <Widget title="Platform health" icon="ti ti-heartbeat">
165
+ <WidgetStatus title="Operational" tone="success" />
166
+ <WidgetPills pills={[{ label: "Checks", value: 48, tone: "emerald" }]} />
167
+ </Widget>
168
+ ```
169
+
170
+ Portable presentation components use shared semantic vocabularies:
171
+ `IntentTone` (`neutral`, `info`, `success`, `warning`, `danger`) and
172
+ `AccentColor` (`zinc`, `blue`, `emerald`, `amber`, `red`). Specialized state
173
+ components such as `StatusBadge` keep a smaller domain-specific vocabulary
174
+ where the states carry meaning beyond color.
175
+
176
+ ## Locale and formatting
177
+
178
+ Locale-aware components resolve their locale in one order: an explicit
179
+ component `locale` prop, the nearest `LocaleProvider`, the browser's
180
+ `document.documentElement.lang`, then `"en"`. The package never reads
181
+ `navigator.language` and holds no global locale state, so one server can
182
+ render different locales concurrently.
183
+
184
+ ```tsx
185
+ import { Format, LocaleProvider } from "@k2b/ui";
186
+
187
+ <html lang={locale}>
188
+ {/* ... */}
189
+ <LocaleProvider locale={locale}>
190
+ <Format.Currency value={1999.5} currency="EUR" />
191
+ <Format.DateTime value={order.createdAt} timeZone="Europe/Berlin" />
192
+ </LocaleProvider>
193
+ </html>;
194
+ ```
195
+
196
+ The server-side provider controls SSR output. A browser island rendered with
197
+ `@k2b/ssr` is an independent Solid root: an outer server provider does not
198
+ survive the island's browser re-render, which falls back to `<html lang>`.
199
+ Emit `<html lang>` equal to the provider locale to keep both passes identical.
200
+ Changing the language without a reload is out of scope.
201
+
202
+ `Format` components are unstyled and semantic: numeric components render a
203
+ `<span>`, temporal components render `<time>` with a canonical `datetime`
204
+ attribute. `Format.Percent` takes a ratio (`0.12` → `12%`), `Format.Currency`
205
+ requires an ISO 4217 code, and `Format.Date`/`Time`/`DateTime` format in UTC
206
+ unless an explicit `timeZone` is passed, so server and browser text cannot
207
+ drift with the runtime timezone. Null and invalid input renders a `"—"`
208
+ fallback (override with `fallback`).
209
+
210
+ `NumberInput` derives its decimal separator from the effective locale while
211
+ keeping the controlled value a canonical number; `DatePicker` and `Calendar`
212
+ prefer an explicit `dateConfig.locale` and inherit the render locale
213
+ otherwise. Timezone is never part of the locale context.
214
+
215
+ ## Catalog groups
216
+
217
+ The source tree and component documentation use the same groups as the Cloud
218
+ UI showcase: AI, Inputs, Actions, Layout, Surfaces, Feedback, Content, and
219
+ Widgets. Cloud-specific integrations are intentionally not part of this
220
+ package.
221
+
222
+ The chat family accepts portable data and callbacks. Applications keep their
223
+ protocol, persistence, tool rendering, approvals, and file storage:
224
+
225
+ ```tsx
226
+ const [draft, setDraft] = createSignal("");
227
+
228
+ <Chat>
229
+ <Chat.Timeline
230
+ items={items()}
231
+ hasMore={hasMore()}
232
+ onLoadOlder={loadOlder}
233
+ />
234
+ <Chat.Composer
235
+ value={draft()}
236
+ onValueChange={setDraft}
237
+ onSubmit={sendMessage}
238
+ state={runState()}
239
+ models={models}
240
+ selectedModelId={modelId()}
241
+ onModelChange={setModelId}
242
+ contextUsage={{ usage: usage(), contextWindow: 128_000 }}
243
+ />
244
+ </Chat>;
245
+ ```
246
+
247
+ Return `false` or throw from `onSubmit` to restore the controlled draft and
248
+ attachments. A synchronous throw and a rejected promise are treated identically,
249
+ and the failure is handed to
250
+ `onError` for user-facing reporting. Raw selected files are handed to
251
+ `fileSelection.onSelect`; storage and upload policy remain application-owned.
252
+ `Chat.Timeline` requests older items through `hasMore`/`onLoadOlder` and keeps
253
+ the reader's position once they are prepended.
254
+
255
+ `Panes` is a controlled, serializable layout for IDE-like workspaces. The
256
+ package owns tabs, nested splits, resize and drag-and-drop; applications own
257
+ pane content, open and close behavior, routing, and persistence:
258
+
259
+ ```tsx
260
+ const [layout, setLayout] = createSignal(createPanesLayout(["result", "query"]));
261
+ const items: PanesItem[] = [
262
+ {
263
+ id: "result",
264
+ title: "Result",
265
+ icon: "ti ti-table",
266
+ render: () => <ResultView />,
267
+ onClose: () => setLayout((current) => removePanesItem(current, "result")),
268
+ },
269
+ {
270
+ id: "query",
271
+ title: "Query",
272
+ icon: "ti ti-code",
273
+ render: () => <QueryEditor />,
274
+ },
275
+ ];
276
+
277
+ <Panes layout={layout()} onLayoutChange={setLayout} items={items} />;
278
+ ```
279
+
280
+ Persist only `PanesLayout`, never the runtime item descriptors containing
281
+ render functions. Validate stored input with `parsePanesLayout`; invalid or
282
+ unsupported values require an explicit application fallback. Panes invokes an
283
+ item's `render` function only while that item is active in its tab group.
284
+ Tab rows remain one line and scroll horizontally when needed. Dragging exposes
285
+ separate tab-insertion, group, and directional split targets while the pointer
286
+ preview retains the source tab's compact pill treatment.
287
+
288
+ Cloud applications import portable components directly from `@k2b/ui`.
289
+ Product-owned behavior such as permissions, account routes, stored AI
290
+ protocols, and workflow contracts stays behind focused Cloud package exports;
291
+ there is no generic Cloud UI compatibility layer.
292
+
293
+ The Fibel component showcase is the canonical acceptance consumer. Its
294
+ portable pages import `@k2b/ui` directly, while Cloud API integrations remain
295
+ in a visibly separate section. Together with `packages/ui/fixture`, it
296
+ exercises the package boundary and public API ergonomics outside the Cloud
297
+ shell. The fixture provides automated server-render and shipped-class checks;
298
+ the catalog owns representative browser interaction, theme, responsive, and
299
+ accessibility states.
300
+
301
+ ## Verification
302
+
303
+ ```bash
304
+ bun run typecheck # package sources
305
+ bun run test # builds the stylesheet first, then runs every suite
306
+ bun run build # dist/styles.css and the optional font/icon presets
307
+ bun run fixture:typecheck # standalone consumer fixture
308
+ bun run fixture:build # standalone SSR build, no Cloud CSS or runtime
309
+ ```
310
+
311
+ The JavaScript build preserves per-component ESM modules for browser and SSR
312
+ conditions. Bundlers can therefore tree-shake unused component families instead
313
+ of retaining the complete package through the root export.
314
+
315
+ Do not use bare `bun test` as the package verification command: several guards
316
+ compare rendered markup with `dist/styles.css`. The fixture render guard rejects
317
+ a missing or stale stylesheet so this mistake fails loudly, but `bun run test`
318
+ is the supported one-step command.
319
+
320
+ Three contracts are enforced by tests rather than convention, because each one
321
+ regressed silently during the extraction:
322
+
323
+ - `src/styles/class-contract.test.ts` — the package renders no class its own
324
+ stylesheet cannot style, renders only `k2b-`-prefixed names, and claims no
325
+ unprefixed name inside the `.k2b-ui` scope. `styles/entry.css` imports the six
326
+ scoped source sheets; Tailwind `@reference` directives live in source sheets
327
+ such as `index.css` and `content-parity.css` and emit no generic utilities, so
328
+ a leftover utility class in markup styles nothing.
329
+ - `src/styles/focus-contract.test.ts` — at most one focus signal per selector
330
+ and cascade context, box-shadow-only focus rings have a forced-colors outline
331
+ fallback, and AI tokens stay inside AI surfaces.
332
+ - Per-group single-ownership tests — a selector may be declared in only one
333
+ stylesheet. Two partial declarations of the same selector merge into a third
334
+ geometry matching neither Cloud nor either source.
335
+
336
+ ## License
337
+
338
+ `@k2b/ui` uses AGPL-3.0-or-later, the same license as Cloud. See `LICENSE`.
339
+ The bundled IBM Plex fonts retain their SIL Open Font License, and Tabler
340
+ Icons retain their MIT license. Their complete notices ship in `dist/licenses`.
341
+
342
+ See [Release instructions](https://github.com/ValentinKolb/cloud/blob/main/docs-site/RELEASING.md) for package verification
343
+ and the first npm publication.
File without changes
@@ -0,0 +1,236 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
3
+ import { getNextMarker as _$getNextMarker } from "solid-js/web";
4
+ import { insert as _$insert } from "solid-js/web";
5
+ import { createComponent as _$createComponent } from "solid-js/web";
6
+ import { getNextElement as _$getNextElement } from "solid-js/web";
7
+ import { use as _$use } from "solid-js/web";
8
+ import { spread as _$spread } from "solid-js/web";
9
+ import { mergeProps as _$mergeProps } from "solid-js/web";
10
+ import { memo as _$memo } from "solid-js/web";
11
+ var _tmpl$ = /*#__PURE__*/_$template(`<i class="ti ti-loader-2 k2b-spin"aria-hidden=true>`),
12
+ _tmpl$2 = /*#__PURE__*/_$template(`<button><!$><!/><span class=k2b-button__label>`),
13
+ _tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-button__label>`),
14
+ _tmpl$4 = /*#__PURE__*/_$template(`<a>`);
15
+ import { Link } from "@k2b/ssr/nav";
16
+ import { Show, splitProps } from "solid-js";
17
+ import { Tooltip } from "../feedback/Tooltip";
18
+ const buttonClass = className => ["k2b-button", className].filter(Boolean).join(" ");
19
+ export function Button(props) {
20
+ const [local, rest] = splitProps(props, ["children", "class", "disabled", "loading", "loadingLabel", "ref", "size", "tooltip", "tooltipDelay", "tooltipPlacement", "type", "variant"]);
21
+ let target;
22
+ const setRef = element => {
23
+ target = element;
24
+ if (typeof local.ref === "function") local.ref(element);
25
+ };
26
+ const control = (() => {
27
+ var _el$ = _$getNextElement(_tmpl$2),
28
+ _el$4 = _el$.firstChild,
29
+ [_el$5, _co$] = _$getNextMarker(_el$4.nextSibling),
30
+ _el$3 = _el$5.nextSibling;
31
+ _$use(setRef, _el$);
32
+ _$spread(_el$, _$mergeProps(rest, {
33
+ get type() {
34
+ return local.type ?? "button";
35
+ },
36
+ get ["class"]() {
37
+ return buttonClass(local.class);
38
+ },
39
+ get ["data-size"]() {
40
+ return local.size ?? "md";
41
+ },
42
+ get ["data-variant"]() {
43
+ return local.variant ?? "primary";
44
+ },
45
+ get disabled() {
46
+ return local.disabled || local.loading;
47
+ },
48
+ get ["aria-busy"]() {
49
+ return local.loading ? "true" : undefined;
50
+ }
51
+ }), false, true);
52
+ _$insert(_el$, _$createComponent(Show, {
53
+ get when() {
54
+ return local.loading;
55
+ },
56
+ get children() {
57
+ return _$getNextElement(_tmpl$);
58
+ }
59
+ }), _el$5, _co$);
60
+ _$insert(_el$3, _$createComponent(Show, {
61
+ get when() {
62
+ return _$memo(() => !!local.loading)() && local.loadingLabel;
63
+ },
64
+ get fallback() {
65
+ return local.children;
66
+ },
67
+ get children() {
68
+ return local.loadingLabel;
69
+ }
70
+ }));
71
+ _$runHydrationEvents();
72
+ return _el$;
73
+ })();
74
+ return [control, _$createComponent(Show, {
75
+ get when() {
76
+ return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
77
+ },
78
+ get children() {
79
+ return _$createComponent(Tooltip, {
80
+ get content() {
81
+ return local.tooltip;
82
+ },
83
+ target: () => target,
84
+ get delay() {
85
+ return local.tooltipDelay;
86
+ },
87
+ get disabled() {
88
+ return local.disabled || local.loading;
89
+ },
90
+ get placement() {
91
+ return local.tooltipPlacement;
92
+ }
93
+ });
94
+ }
95
+ })];
96
+ }
97
+ export function ButtonLink(props) {
98
+ const [local, rest] = splitProps(props, ["children", "class", "href", "navigation", "onClick", "onNavigate", "replace", "ref", "scroll", "size", "tooltip", "tooltipDelay", "tooltipPlacement", "variant"]);
99
+ let target;
100
+ const setRef = element => {
101
+ target = element;
102
+ if (typeof local.ref === "function") local.ref(element);
103
+ };
104
+ const className = buttonClass(local.class);
105
+ const content = (() => {
106
+ var _el$6 = _$getNextElement(_tmpl$3);
107
+ _$insert(_el$6, () => local.children);
108
+ return _el$6;
109
+ })();
110
+ const tooltip = () => _$createComponent(Show, {
111
+ get when() {
112
+ return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
113
+ },
114
+ get children() {
115
+ return _$createComponent(Tooltip, {
116
+ get content() {
117
+ return local.tooltip;
118
+ },
119
+ target: () => target,
120
+ get delay() {
121
+ return local.tooltipDelay;
122
+ },
123
+ get placement() {
124
+ return local.tooltipPlacement;
125
+ }
126
+ });
127
+ }
128
+ });
129
+ if (local.navigation === "enhanced" && local.href && local.onNavigate) {
130
+ return [_$createComponent(Link, _$mergeProps(rest, {
131
+ ref: setRef,
132
+ get href() {
133
+ return local.href;
134
+ },
135
+ "class": className,
136
+ get ["data-size"]() {
137
+ return local.size ?? "md";
138
+ },
139
+ get ["data-variant"]() {
140
+ return local.variant ?? "primary";
141
+ },
142
+ get onClick() {
143
+ return local.onClick;
144
+ },
145
+ get onNavigate() {
146
+ return local.onNavigate;
147
+ },
148
+ get replace() {
149
+ return local.replace;
150
+ },
151
+ get scroll() {
152
+ return local.scroll;
153
+ },
154
+ children: content
155
+ })), _$memo(tooltip)];
156
+ }
157
+ return [(() => {
158
+ var _el$7 = _$getNextElement(_tmpl$4);
159
+ _$use(setRef, _el$7);
160
+ _$spread(_el$7, _$mergeProps(rest, {
161
+ get href() {
162
+ return local.href;
163
+ },
164
+ "class": className,
165
+ get ["data-size"]() {
166
+ return local.size ?? "md";
167
+ },
168
+ get ["data-variant"]() {
169
+ return local.variant ?? "primary";
170
+ },
171
+ get onClick() {
172
+ return local.onClick;
173
+ }
174
+ }), false, true);
175
+ _$insert(_el$7, content);
176
+ _$runHydrationEvents();
177
+ return _el$7;
178
+ })(), _$memo(tooltip)];
179
+ }
180
+ export function IconButton(props) {
181
+ const [local, rest] = splitProps(props, ["children", "class", "label", "loading", "loadingLabel", "tooltip", "variant"]);
182
+ return _$createComponent(Button, _$mergeProps(rest, {
183
+ get loading() {
184
+ return local.loading;
185
+ },
186
+ get variant() {
187
+ return local.variant ?? "ghost";
188
+ },
189
+ get ["class"]() {
190
+ return `k2b-icon-button ${local.class ?? ""}`;
191
+ },
192
+ get ["aria-label"]() {
193
+ return _$memo(() => !!local.loading)() ? local.loadingLabel ?? local.label : local.label;
194
+ },
195
+ get title() {
196
+ return rest.title ?? (local.tooltip === undefined ? local.label : undefined);
197
+ },
198
+ get tooltip() {
199
+ return local.tooltip;
200
+ },
201
+ get children() {
202
+ return _$createComponent(Show, {
203
+ get when() {
204
+ return !local.loading;
205
+ },
206
+ get children() {
207
+ return local.children;
208
+ }
209
+ });
210
+ }
211
+ }));
212
+ }
213
+ export function IconButtonLink(props) {
214
+ const [local, rest] = splitProps(props, ["children", "class", "label", "tooltip", "variant"]);
215
+ return _$createComponent(ButtonLink, _$mergeProps(rest, {
216
+ get variant() {
217
+ return local.variant ?? "ghost";
218
+ },
219
+ get ["class"]() {
220
+ return `k2b-icon-button ${local.class ?? ""}`;
221
+ },
222
+ get ["aria-label"]() {
223
+ return local.label;
224
+ },
225
+ get title() {
226
+ return rest.title ?? (local.tooltip === undefined ? local.label : undefined);
227
+ },
228
+ get tooltip() {
229
+ return local.tooltip;
230
+ },
231
+ get children() {
232
+ return local.children;
233
+ }
234
+ }));
235
+ }
236
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Link","Show","splitProps","Tooltip","buttonClass","className","filter","Boolean","join","Button","props","local","rest","target","setRef","element","ref","control","_el$","_$getNextElement","_tmpl$2","_el$4","firstChild","_el$5","_co$","_$getNextMarker","nextSibling","_el$3","_$use","_$spread","_$mergeProps","type","class","data-size","size","data-variant","variant","disabled","loading","aria-busy","undefined","_$insert","_$createComponent","when","children","_tmpl$","_$memo","loadingLabel","fallback","_$runHydrationEvents","tooltip","content","delay","tooltipDelay","placement","tooltipPlacement","ButtonLink","_el$6","_tmpl$3","navigation","href","onNavigate","onClick","replace","scroll","_el$7","_tmpl$4","IconButton","aria-label","label","title","IconButtonLink"],"sources":["actions/Button.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent, type NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport { type JSX, Show, splitProps } from \"solid-js\";\nimport { Tooltip, type TooltipPlacement } from \"../feedback/Tooltip\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"text\" | \"subtle\" | \"input\" | \"warning\" | \"danger\" | \"success\" | \"ai\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport type ButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n loading?: boolean;\n loadingLabel?: string;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nexport type ButtonLinkProps = Omit<JSX.AnchorHTMLAttributes<HTMLAnchorElement>, \"onClick\"> & {\n navigation?: \"document\" | \"enhanced\";\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n replace?: boolean;\n scroll?: NavigationScrollMode;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nconst buttonClass = (className?: string): string => [\"k2b-button\", className].filter(Boolean).join(\" \");\n\nexport function Button(props: ButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"disabled\",\n \"loading\",\n \"loadingLabel\",\n \"ref\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"type\",\n \"variant\",\n ]);\n let target: HTMLButtonElement | undefined;\n const setRef = (element: HTMLButtonElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n\n const control = (\n <button\n {...rest}\n ref={setRef}\n type={local.type ?? \"button\"}\n class={buttonClass(local.class)}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n <Show when={local.loading}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n <span class=\"k2b-button__label\">\n <Show when={local.loading && local.loadingLabel} fallback={local.children}>\n {local.loadingLabel}\n </Show>\n </span>\n </button>\n );\n\n return (\n <>\n {control}\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip\n content={local.tooltip as JSX.Element}\n target={() => target}\n delay={local.tooltipDelay}\n disabled={local.disabled || local.loading}\n placement={local.tooltipPlacement}\n />\n </Show>\n </>\n );\n}\n\nexport function ButtonLink(props: ButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"href\",\n \"navigation\",\n \"onClick\",\n \"onNavigate\",\n \"replace\",\n \"ref\",\n \"scroll\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"variant\",\n ]);\n let target: HTMLAnchorElement | undefined;\n const setRef = (element: HTMLAnchorElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n const className = buttonClass(local.class);\n const content = <span class=\"k2b-button__label\">{local.children}</span>;\n\n const tooltip = () => (\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip content={local.tooltip as JSX.Element} target={() => target} delay={local.tooltipDelay} placement={local.tooltipPlacement} />\n </Show>\n );\n\n if (local.navigation === \"enhanced\" && local.href && local.onNavigate) {\n return (\n <>\n <Link\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n onClick={local.onClick}\n onNavigate={local.onNavigate}\n replace={local.replace}\n scroll={local.scroll}\n >\n {content}\n </Link>\n {tooltip()}\n </>\n );\n }\n\n return (\n <>\n <a\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n onClick={local.onClick}\n >\n {content}\n </a>\n {tooltip()}\n </>\n );\n}\n\nexport type IconButtonProps = Omit<ButtonProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport type IconButtonLinkProps = Omit<ButtonLinkProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport function IconButton(props: IconButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"loading\", \"loadingLabel\", \"tooltip\", \"variant\"]);\n\n return (\n <Button\n {...rest}\n loading={local.loading}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.loading ? (local.loadingLabel ?? local.label) : local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n <Show when={!local.loading}>{local.children}</Show>\n </Button>\n );\n}\n\nexport function IconButtonLink(props: IconButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"tooltip\", \"variant\"]);\n\n return (\n <ButtonLink\n {...rest}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n {local.children}\n </ButtonLink>\n );\n}\n"],"mappings":"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","ignoreList":[]}