@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 @@
1
+ {"version":3,"names":["assertUniqueStableUiIds","isStableUiId","PANES_LAYOUT_VERSION","PANES_MIN_RATIO","PANES_MAX_ID_LENGTH","MAX_DEPTH","MAX_NODES","isRecord","value","Array","isArray","isItemId","parseNode","usedItems","budget","depth","nodes","type","items","length","active","item","has","add","push","includes","direction","ratio","Number","isFinite","first","second","parsePanesLayout","version","root","Set","createPanesLayout","itemIds","findItem","node","itemId","path","index","indexOf","group","firstGroup","mapAtPath","update","segment","rest","removeFromNode","filter","id","Math","min","reconcileNode","desiredOpen","sameItems","left","right","every","sameNode","isWithinLayoutLimits","insertIntoGroup","beforeItemId","splice","activatePanesItem","layout","located","isPanesItemVisible","removePanesItem","addPanesItem","options","targetItemId","target","applyPanesIntent","intent","source","rootWithoutSource","nextTarget","side","itemGroup","itemFirst","nextRoot","reconcilePanesLayout","desiredOpenItemIds","present","collectPresent","missing","ids","forEach","resizePanesSplit","nextRatio","max","intentKey","samePanesIntent","canSplitSide","split","collectGroups","groups","nodeAtPath","current","isExistingSplitPlacement","parent","slice","sourceFirst","sibling","collectTreeStats","stats","maxDepth","itemDepth","Map","set","getPanesDropTargets","movable","splitStats","targets","seen","noop","sameGroup","remaining","kind","targetDepth","get","exceedsLimits","undefined"],"sources":["layout/panes-layout.ts"],"sourcesContent":["import { assertUniqueStableUiIds, isStableUiId } from \"./stable-id\";\n\nexport const PANES_LAYOUT_VERSION = 2 as const;\nexport const PANES_MIN_RATIO = 0.08;\nexport const PANES_MAX_ID_LENGTH = 160;\n\nexport type PanesDirection = \"horizontal\" | \"vertical\";\nexport type PanesSide = \"left\" | \"right\" | \"top\" | \"bottom\";\nexport type PanesPathSegment = \"first\" | \"second\";\nexport type PanesPath = readonly PanesPathSegment[];\n\nexport type PanesGroup = {\n type: \"group\";\n items: string[];\n active: string;\n};\n\nexport type PanesSplit = {\n type: \"split\";\n direction: PanesDirection;\n ratio: number;\n first: PanesNode;\n second: PanesNode;\n};\n\nexport type PanesNode = PanesGroup | PanesSplit;\n\nexport type PanesLayout = {\n version: typeof PANES_LAYOUT_VERSION;\n root: PanesNode | null;\n};\n\nexport type PanesIntent =\n | {\n type: \"tab\";\n itemId: string;\n targetItemId: string;\n beforeItemId: string | null;\n }\n | {\n type: \"split\";\n itemId: string;\n targetItemId: string;\n side: PanesSide;\n };\n\nexport type PanesDropTarget = {\n id: string;\n kind: \"tab\" | \"group\" | \"split\";\n targetItemId: string;\n beforeItemId?: string | null;\n side?: PanesSide;\n intent: PanesIntent;\n};\n\nexport type PanesDropTargetOptions = {\n movable: boolean;\n split: false | PanesDirection | \"both\";\n};\n\nconst MAX_DEPTH = 12;\nconst MAX_NODES = 64;\n\ntype LocatedGroup = {\n group: PanesGroup;\n path: PanesPathSegment[];\n index: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => !!value && typeof value === \"object\" && !Array.isArray(value);\n\nconst isItemId = (value: unknown): value is string => isStableUiId(value, PANES_MAX_ID_LENGTH);\n\nconst parseNode = (value: unknown, usedItems: Set<string>, budget: { nodes: number }, depth = 0): PanesNode | null => {\n if (!isRecord(value) || depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return null;\n budget.nodes += 1;\n\n if (value.type === \"group\") {\n if (!Array.isArray(value.items) || value.items.length === 0 || !isItemId(value.active)) return null;\n const items: string[] = [];\n for (const item of value.items) {\n if (!isItemId(item) || usedItems.has(item)) return null;\n usedItems.add(item);\n items.push(item);\n }\n if (!items.includes(value.active)) return null;\n return { type: \"group\", items, active: value.active };\n }\n\n if (\n value.type !== \"split\" ||\n (value.direction !== \"horizontal\" && value.direction !== \"vertical\") ||\n typeof value.ratio !== \"number\" ||\n !Number.isFinite(value.ratio) ||\n value.ratio < PANES_MIN_RATIO ||\n value.ratio > 1 - PANES_MIN_RATIO\n ) {\n return null;\n }\n const first = parseNode(value.first, usedItems, budget, depth + 1);\n const second = parseNode(value.second, usedItems, budget, depth + 1);\n if (!first || !second) return null;\n return {\n type: \"split\",\n direction: value.direction,\n ratio: value.ratio,\n first,\n second,\n };\n};\n\nexport const parsePanesLayout = (value: unknown): PanesLayout | null => {\n if (!isRecord(value) || value.version !== PANES_LAYOUT_VERSION) return null;\n if (value.root === null) return { version: PANES_LAYOUT_VERSION, root: null };\n const root = parseNode(value.root, new Set<string>(), { nodes: 0 });\n return root ? { version: PANES_LAYOUT_VERSION, root } : null;\n};\n\nexport const createPanesLayout = (itemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(itemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n return {\n version: PANES_LAYOUT_VERSION,\n root: itemIds.length > 0 ? { type: \"group\", items: [...itemIds], active: itemIds[0]! } : null,\n };\n};\n\nconst findItem = (node: PanesNode | null, itemId: string, path: PanesPathSegment[] = []): LocatedGroup | null => {\n if (!node) return null;\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n return index >= 0 ? { group: node, path, index } : null;\n }\n return findItem(node.first, itemId, [...path, \"first\"]) ?? findItem(node.second, itemId, [...path, \"second\"]);\n};\n\nconst firstGroup = (node: PanesNode | null): PanesGroup | null => {\n if (!node) return null;\n return node.type === \"group\" ? node : firstGroup(node.first);\n};\n\nconst mapAtPath = (node: PanesNode, path: PanesPath, update: (node: PanesNode) => PanesNode): PanesNode => {\n const [segment, ...rest] = path;\n if (!segment) return update(node);\n if (node.type !== \"split\") return node;\n if (segment === \"first\") {\n const first = mapAtPath(node.first, rest, update);\n return first === node.first ? node : { ...node, first };\n }\n const second = mapAtPath(node.second, rest, update);\n return second === node.second ? node : { ...node, second };\n};\n\nconst removeFromNode = (node: PanesNode, itemId: string): PanesNode | null => {\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n if (index < 0) return node;\n const items = node.items.filter((id) => id !== itemId);\n if (items.length === 0) return null;\n const active = node.active === itemId ? items[Math.min(index, items.length - 1)]! : node.active;\n return { ...node, items, active };\n }\n\n const first = removeFromNode(node.first, itemId);\n const second = removeFromNode(node.second, itemId);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst reconcileNode = (node: PanesNode, desiredOpen: ReadonlySet<string>): PanesNode | null => {\n if (node.type === \"group\") {\n const items = node.items.filter((itemId) => desiredOpen.has(itemId));\n if (items.length === 0) return null;\n if (sameItems(items, node.items)) return node;\n const active = items.includes(node.active) ? node.active : items[Math.min(node.items.indexOf(node.active), items.length - 1)]!;\n return { ...node, items, active };\n }\n const first = reconcileNode(node.first, desiredOpen);\n const second = reconcileNode(node.second, desiredOpen);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst sameItems = (left: readonly string[], right: readonly string[]): boolean =>\n left.length === right.length && left.every((item, index) => item === right[index]);\n\nconst sameNode = (left: PanesNode, right: PanesNode): boolean => {\n if (left.type !== right.type) return false;\n if (left.type === \"group\" && right.type === \"group\") {\n return left.active === right.active && sameItems(left.items, right.items);\n }\n if (left.type === \"split\" && right.type === \"split\") {\n return (\n left.direction === right.direction &&\n left.ratio === right.ratio &&\n sameNode(left.first, right.first) &&\n sameNode(left.second, right.second)\n );\n }\n return false;\n};\n\nconst isWithinLayoutLimits = (node: PanesNode, budget = { nodes: 0 }, depth = 0): boolean => {\n if (depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return false;\n budget.nodes += 1;\n return (\n node.type === \"group\" || (isWithinLayoutLimits(node.first, budget, depth + 1) && isWithinLayoutLimits(node.second, budget, depth + 1))\n );\n};\n\nconst insertIntoGroup = (group: PanesGroup, itemId: string, beforeItemId: string | null): PanesGroup | null => {\n if (beforeItemId !== null && !group.items.includes(beforeItemId)) return null;\n const items = group.items.filter((id) => id !== itemId);\n const index = beforeItemId === null ? items.length : items.indexOf(beforeItemId);\n if (index < 0) return null;\n items.splice(index, 0, itemId);\n if (sameItems(items, group.items)) return group;\n return { ...group, items, active: itemId };\n};\n\nexport const activatePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n const located = findItem(layout.root, itemId);\n if (!located || located.group.active === itemId || !layout.root) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, located.path, (node) => (node.type === \"group\" ? { ...node, active: itemId } : node)),\n };\n};\n\nexport const isPanesItemVisible = (layout: PanesLayout, itemId: string): boolean => findItem(layout.root, itemId)?.group.active === itemId;\n\nexport const removePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n if (!layout.root || !findItem(layout.root, itemId)) return layout;\n return { version: PANES_LAYOUT_VERSION, root: removeFromNode(layout.root, itemId) };\n};\n\nexport type AddPanesItemOptions = {\n itemId: string;\n targetItemId: string | null;\n beforeItemId?: string | null;\n};\n\nexport const addPanesItem = (layout: PanesLayout, options: AddPanesItemOptions): PanesLayout => {\n if (!isItemId(options.itemId) || findItem(layout.root, options.itemId)) return layout;\n if (!layout.root) {\n return options.targetItemId === null ? createPanesLayout([options.itemId]) : layout;\n }\n if (options.targetItemId === null) return layout;\n const target = findItem(layout.root, options.targetItemId);\n if (!target) return layout;\n const group = insertIntoGroup(target.group, options.itemId, options.beforeItemId ?? null);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, target.path, () => group) };\n};\n\nexport const applyPanesIntent = (layout: PanesLayout, intent: PanesIntent): PanesLayout => {\n if (!layout.root || intent.itemId === intent.targetItemId) return layout;\n const source = findItem(layout.root, intent.itemId);\n const target = findItem(layout.root, intent.targetItemId);\n if (!source || !target) return layout;\n\n if (intent.type === \"tab\" && source.group === target.group) {\n const group = insertIntoGroup(source.group, intent.itemId, intent.beforeItemId);\n if (!group || group === source.group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, source.path, () => group) };\n }\n\n const rootWithoutSource = removeFromNode(layout.root, intent.itemId);\n if (!rootWithoutSource) return layout;\n const nextTarget = findItem(rootWithoutSource, intent.targetItemId);\n if (!nextTarget) return layout;\n\n if (intent.type === \"tab\") {\n const group = insertIntoGroup(nextTarget.group, intent.itemId, intent.beforeItemId);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(rootWithoutSource, nextTarget.path, () => group) };\n }\n\n const direction: PanesDirection = intent.side === \"left\" || intent.side === \"right\" ? \"horizontal\" : \"vertical\";\n const itemGroup: PanesGroup = { type: \"group\", items: [intent.itemId], active: intent.itemId };\n const itemFirst = intent.side === \"left\" || intent.side === \"top\";\n const nextRoot = mapAtPath(rootWithoutSource, nextTarget.path, (node) => ({\n type: \"split\",\n direction,\n ratio: 0.5,\n first: itemFirst ? itemGroup : node,\n second: itemFirst ? node : itemGroup,\n }));\n if (!isWithinLayoutLimits(nextRoot) || sameNode(nextRoot, layout.root)) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: nextRoot,\n };\n};\n\nexport const reconcilePanesLayout = (layout: PanesLayout, desiredOpenItemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(desiredOpenItemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n const desiredOpen = new Set(desiredOpenItemIds);\n const root = layout.root ? reconcileNode(layout.root, desiredOpen) : null;\n const present = new Set<string>();\n collectPresent(root, present);\n const missing = desiredOpenItemIds.filter((itemId) => !present.has(itemId));\n if (missing.length === 0) return root === layout.root ? layout : { version: PANES_LAYOUT_VERSION, root };\n if (!root) return createPanesLayout(missing);\n const target = firstGroup(root);\n if (!target) return createPanesLayout(missing);\n const located = findItem(root, target.active);\n if (!located) return createPanesLayout(missing);\n const group = { ...located.group, items: [...located.group.items, ...missing] };\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(root, located.path, () => group) };\n};\n\nconst collectPresent = (node: PanesNode | null, ids: Set<string>): void => {\n if (!node) return;\n if (node.type === \"group\") {\n node.items.forEach((item) => ids.add(item));\n return;\n }\n collectPresent(node.first, ids);\n collectPresent(node.second, ids);\n};\n\nexport const resizePanesSplit = (layout: PanesLayout, path: PanesPath, ratio: number): PanesLayout => {\n if (!layout.root || !Number.isFinite(ratio)) return layout;\n let target: PanesNode = layout.root;\n for (const segment of path) {\n if (target.type !== \"split\") return layout;\n target = target[segment];\n }\n if (target.type !== \"split\") return layout;\n const nextRatio = Math.min(1 - PANES_MIN_RATIO, Math.max(PANES_MIN_RATIO, ratio));\n if (nextRatio === target.ratio) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, path, (node) => (node.type === \"split\" ? { ...node, ratio: nextRatio } : node)),\n };\n};\n\nconst intentKey = (intent: PanesIntent): string =>\n intent.type === \"tab\"\n ? `tab:${intent.itemId}:${intent.targetItemId}:${intent.beforeItemId === null ? \"end:\" : `before:${intent.beforeItemId}`}`\n : `split:${intent.itemId}:${intent.targetItemId}:${intent.side}`;\n\nexport const samePanesIntent = (left: PanesIntent | null, right: PanesIntent | null): boolean =>\n left === right ||\n (!!left &&\n !!right &&\n left.type === right.type &&\n left.itemId === right.itemId &&\n left.targetItemId === right.targetItemId &&\n (left.type === \"tab\" && right.type === \"tab\"\n ? left.beforeItemId === right.beforeItemId\n : left.type === \"split\" && right.type === \"split\" && left.side === right.side));\n\nconst canSplitSide = (side: PanesSide, split: PanesDropTargetOptions[\"split\"]): boolean => {\n if (split === false) return false;\n const direction = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n return split === \"both\" || split === direction;\n};\n\nconst collectGroups = (node: PanesNode | null, groups: PanesGroup[] = []): PanesGroup[] => {\n if (!node) return groups;\n if (node.type === \"group\") groups.push(node);\n else {\n collectGroups(node.first, groups);\n collectGroups(node.second, groups);\n }\n return groups;\n};\n\nconst nodeAtPath = (node: PanesNode, path: PanesPath): PanesNode | null => {\n let current = node;\n for (const segment of path) {\n if (current.type !== \"split\") return null;\n current = current[segment];\n }\n return current;\n};\n\nconst isExistingSplitPlacement = (layout: PanesLayout, source: LocatedGroup, targetItemId: string, side: PanesSide): boolean => {\n if (!layout.root || source.group.items.length !== 1 || source.path.length === 0) return false;\n const segment = source.path[source.path.length - 1]!;\n const parent = nodeAtPath(layout.root, source.path.slice(0, -1));\n if (!parent || parent.type !== \"split\" || parent.ratio !== 0.5) return false;\n const direction: PanesDirection = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n const sourceFirst = side === \"left\" || side === \"top\";\n if (parent.direction !== direction || (segment === \"first\") !== sourceFirst) return false;\n const sibling = parent[segment === \"first\" ? \"second\" : \"first\"];\n return sibling.type === \"group\" && sibling.items.includes(targetItemId);\n};\n\nconst collectTreeStats = (\n node: PanesNode,\n depth = 0,\n stats: { nodes: number; maxDepth: number; itemDepth: Map<string, number> } = {\n nodes: 0,\n maxDepth: 0,\n itemDepth: new Map(),\n },\n) => {\n stats.nodes += 1;\n stats.maxDepth = Math.max(stats.maxDepth, depth);\n if (node.type === \"group\") node.items.forEach((itemId) => stats.itemDepth.set(itemId, depth));\n else {\n collectTreeStats(node.first, depth + 1, stats);\n collectTreeStats(node.second, depth + 1, stats);\n }\n return stats;\n};\n\nexport const getPanesDropTargets = (layout: PanesLayout, itemId: string, options: PanesDropTargetOptions): PanesDropTarget[] => {\n if (!options.movable || !layout.root) return [];\n const source = findItem(layout.root, itemId);\n if (!source) return [];\n const rootWithoutSource = removeFromNode(layout.root, itemId);\n const splitStats = rootWithoutSource ? collectTreeStats(rootWithoutSource) : null;\n const targets: PanesDropTarget[] = [];\n const seen = new Set<string>();\n const add = (target: Omit<PanesDropTarget, \"id\">, noop = false) => {\n const id = intentKey(target.intent);\n if (noop || seen.has(id)) return;\n seen.add(id);\n targets.push({ ...target, id });\n };\n\n for (const group of collectGroups(layout.root)) {\n const sameGroup = group === source.group;\n const remaining = group.items.filter((id) => id !== itemId);\n const targetItemId = sameGroup ? remaining[0] : group.active;\n if (!targetItemId) continue;\n for (const beforeItemId of remaining) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId,\n intent,\n },\n sameGroup && group.items[source.index + 1] === beforeItemId,\n );\n }\n if (sameGroup) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId: null };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId: null,\n intent,\n },\n source.index === group.items.length - 1,\n );\n } else {\n add({\n kind: \"group\",\n targetItemId,\n intent: { type: \"tab\", itemId, targetItemId, beforeItemId: null },\n });\n }\n\n for (const side of [\"top\", \"right\", \"bottom\", \"left\"] as const) {\n if (!canSplitSide(side, options.split)) continue;\n const intent: PanesIntent = { type: \"split\", itemId, targetItemId, side };\n const targetDepth = splitStats?.itemDepth.get(targetItemId);\n const exceedsLimits =\n !splitStats ||\n targetDepth === undefined ||\n splitStats.nodes + 2 > MAX_NODES ||\n Math.max(splitStats.maxDepth, targetDepth + 1) > MAX_DEPTH;\n add(\n {\n kind: \"split\",\n targetItemId,\n side,\n intent,\n },\n exceedsLimits || isExistingSplitPlacement(layout, source, targetItemId, side),\n );\n }\n }\n return targets;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ const STABLE_UI_ID = /^[A-Za-z][A-Za-z0-9_-]*$/;
2
+ export const isStableUiId = (value, maxLength = 64) => typeof value === "string" && value.length > 0 && value.length <= maxLength && STABLE_UI_ID.test(value);
3
+ export const assertStableUiId = (value, label, maxLength = 64) => {
4
+ if (!isStableUiId(value, maxLength)) {
5
+ throw new Error(`${label} must start with a letter and contain only letters, numbers, underscores, or hyphens.`);
6
+ }
7
+ return value;
8
+ };
9
+ export const assertUniqueStableUiIds = (values, label, maxLength = 64) => {
10
+ const seen = new Set();
11
+ values.forEach(value => {
12
+ assertStableUiId(value, label, maxLength);
13
+ if (seen.has(value)) throw new Error(`${label} must be unique; received duplicate id "${value}".`);
14
+ seen.add(value);
15
+ });
16
+ };
17
+ //# sourceMappingURL=stable-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["STABLE_UI_ID","isStableUiId","value","maxLength","length","test","assertStableUiId","label","Error","assertUniqueStableUiIds","values","seen","Set","forEach","has","add"],"sources":["layout/stable-id.ts"],"sourcesContent":["const STABLE_UI_ID = /^[A-Za-z][A-Za-z0-9_-]*$/;\n\nexport const isStableUiId = (value: unknown, maxLength = 64): value is string =>\n typeof value === \"string\" && value.length > 0 && value.length <= maxLength && STABLE_UI_ID.test(value);\n\nexport const assertStableUiId = (value: string, label: string, maxLength = 64): string => {\n if (!isStableUiId(value, maxLength)) {\n throw new Error(`${label} must start with a letter and contain only letters, numbers, underscores, or hyphens.`);\n }\n return value;\n};\n\nexport const assertUniqueStableUiIds = (values: readonly string[], label: string, maxLength = 64): void => {\n const seen = new Set<string>();\n values.forEach((value) => {\n assertStableUiId(value, label, maxLength);\n if (seen.has(value)) throw new Error(`${label} must be unique; received duplicate id \"${value}\".`);\n seen.add(value);\n });\n};\n"],"mappings":"AAAA,MAAMA,YAAY,GAAG,0BAA0B;AAE/C,OAAO,MAAMC,YAAY,GAAGA,CAACC,KAAc,EAAEC,SAAS,GAAG,EAAE,KACzD,OAAOD,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACE,MAAM,GAAG,CAAC,IAAIF,KAAK,CAACE,MAAM,IAAID,SAAS,IAAIH,YAAY,CAACK,IAAI,CAACH,KAAK,CAAC;AAExG,OAAO,MAAMI,gBAAgB,GAAGA,CAACJ,KAAa,EAAEK,KAAa,EAAEJ,SAAS,GAAG,EAAE,KAAa;EACxF,IAAI,CAACF,YAAY,CAACC,KAAK,EAAEC,SAAS,CAAC,EAAE;IACnC,MAAM,IAAIK,KAAK,CAAC,GAAGD,KAAK,uFAAuF,CAAC;EAClH;EACA,OAAOL,KAAK;AACd,CAAC;AAED,OAAO,MAAMO,uBAAuB,GAAGA,CAACC,MAAyB,EAAEH,KAAa,EAAEJ,SAAS,GAAG,EAAE,KAAW;EACzG,MAAMQ,IAAI,GAAG,IAAIC,GAAG,CAAS,CAAC;EAC9BF,MAAM,CAACG,OAAO,CAAEX,KAAK,IAAK;IACxBI,gBAAgB,CAACJ,KAAK,EAAEK,KAAK,EAAEJ,SAAS,CAAC;IACzC,IAAIQ,IAAI,CAACG,GAAG,CAACZ,KAAK,CAAC,EAAE,MAAM,IAAIM,KAAK,CAAC,GAAGD,KAAK,2CAA2CL,KAAK,IAAI,CAAC;IAClGS,IAAI,CAACI,GAAG,CAACb,KAAK,CAAC;EACjB,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=semantics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["semantics.ts"],"sourcesContent":["/** Semantic intent for user-facing feedback and actions. */\nexport type IntentTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\n/** Deliberately small accent palette for data and identity presentation. */\nexport type AccentColor = \"zinc\" | \"blue\" | \"emerald\" | \"amber\" | \"red\";\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ import { ssrStyle as _$ssrStyle } from "solid-js/web";
2
+ import { createComponent as _$createComponent } from "solid-js/web";
3
+ import { ssr as _$ssr } from "solid-js/web";
4
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
5
+ import { escape as _$escape } from "solid-js/web";
6
+ var _tmpl$ = ["<i", " aria-hidden=\"true\"></i>"],
7
+ _tmpl$2 = ["<span", " style=\"", "\" role=\"img\"", ">", "</span>"],
8
+ _tmpl$3 = ["<img", " style=\"", "\"", " decoding=\"async\">"];
9
+ import { createEffect, createSignal, on, Show } from "solid-js";
10
+ import { useUiMessages } from "../intl/messages";
11
+ const initialsFor = name => {
12
+ const parts = name.trim().split(/\s+/).filter(Boolean);
13
+ if (parts.length === 0) return "?";
14
+ if (parts.length === 1) return parts[0]?.slice(0, 2).toUpperCase() ?? "?";
15
+ return `${parts[0]?.[0] ?? ""}${parts.at(-1)?.[0] ?? ""}`.toUpperCase();
16
+ };
17
+ export function Avatar(props) {
18
+ const messages = useUiMessages();
19
+ const [failed, setFailed] = createSignal(false);
20
+ const label = () => props.name.trim() || messages().unknownUser;
21
+ // Derive initials from the given name, not from the accessible-name fallback:
22
+ // an empty `name` must render "?" the way Cloud's avatar does, not "UU".
23
+ const fallback = () => props.fallback ?? initialsFor(props.name);
24
+ const fallbackContent = () => props.icon ? _$ssr(_tmpl$, _$ssrAttribute("class", _$escape(props.icon, true), false)) : fallback();
25
+ const className = () => `k2b-avatar ${props.class ?? ""}`;
26
+ createEffect(on(() => props.src, () => setFailed(false), {
27
+ defer: true
28
+ }));
29
+ return _$createComponent(Show, {
30
+ get when() {
31
+ return !failed() ? props.src || undefined : undefined;
32
+ },
33
+ get fallback() {
34
+ return _$ssr(_tmpl$2, _$ssrAttribute("class", _$escape(className(), true), false) + _$ssrAttribute("data-size", _$escape(props.size ?? "md", true), false), _$ssrStyle(props.style), _$ssrAttribute("aria-label", _$escape(props.alt ?? messages().avatarLabel({
35
+ name: label()
36
+ }), true), false), _$escape(fallbackContent()));
37
+ },
38
+ children: src => _$ssr(_tmpl$3, _$ssrAttribute("src", _$escape(src(), true), false) + _$ssrAttribute("alt", _$escape(props.alt ?? messages().avatarLabel({
39
+ name: label()
40
+ }), true), false) + _$ssrAttribute("class", _$escape(className(), true), false) + _$ssrAttribute("data-size", _$escape(props.size ?? "md", true), false), _$ssrStyle(props.style), _$ssrAttribute("loading", _$escape(props.loading ?? "lazy", true), false))
41
+ });
42
+ }
43
+ //# sourceMappingURL=Avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createEffect","createSignal","on","Show","useUiMessages","initialsFor","name","parts","trim","split","filter","Boolean","length","slice","toUpperCase","at","Avatar","props","messages","failed","setFailed","label","unknownUser","fallback","fallbackContent","icon","_$ssr","_tmpl$","_$ssrAttribute","_$escape","className","class","src","defer","_$createComponent","when","undefined","_tmpl$2","size","_$ssrStyle","style","alt","avatarLabel","children","_tmpl$3","loading"],"sources":["surfaces/Avatar.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, on, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type AvatarProps = {\n name: string;\n src?: string | null;\n icon?: string;\n alt?: string;\n fallback?: string;\n size?: AvatarSize;\n loading?: \"eager\" | \"lazy\";\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nconst initialsFor = (name: string): string => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0]?.slice(0, 2).toUpperCase() ?? \"?\";\n return `${parts[0]?.[0] ?? \"\"}${parts.at(-1)?.[0] ?? \"\"}`.toUpperCase();\n};\n\nexport function Avatar(props: AvatarProps): JSX.Element {\n const messages = useUiMessages();\n const [failed, setFailed] = createSignal(false);\n const label = () => props.name.trim() || messages().unknownUser;\n // Derive initials from the given name, not from the accessible-name fallback:\n // an empty `name` must render \"?\" the way Cloud's avatar does, not \"UU\".\n const fallback = () => props.fallback ?? initialsFor(props.name);\n const fallbackContent = () => (props.icon ? <i class={props.icon} aria-hidden=\"true\" /> : fallback());\n const className = () => `k2b-avatar ${props.class ?? \"\"}`;\n\n createEffect(\n on(\n () => props.src,\n () => setFailed(false),\n { defer: true },\n ),\n );\n\n return (\n <Show\n when={!failed() ? props.src || undefined : undefined}\n fallback={\n <span\n class={className()}\n data-size={props.size ?? \"md\"}\n style={props.style}\n role=\"img\"\n aria-label={props.alt ?? messages().avatarLabel({ name: label() })}\n >\n {fallbackContent()}\n </span>\n }\n >\n {(src) => (\n <img\n src={src()}\n alt={props.alt ?? messages().avatarLabel({ name: label() })}\n class={className()}\n data-size={props.size ?? \"md\"}\n style={props.style}\n loading={props.loading ?? \"lazy\"}\n decoding=\"async\"\n onError={() => setFailed(true)}\n />\n )}\n </Show>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ import { ssr as _$ssr } from "solid-js/web";
2
+ import { createComponent as _$createComponent } from "solid-js/web";
3
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
4
+ import { escape as _$escape } from "solid-js/web";
5
+ var _tmpl$ = ["<dl class=\"", "\"", ">", "</dl>"],
6
+ _tmpl$2 = ["<div class=\"k2b-description-list__item\"><dt>", "</dt><dd>", "</dd>", "</div>"],
7
+ _tmpl$3 = ["<div class=\"k2b-description-list__action\">", "</div>"];
8
+ import { For, Show } from "solid-js";
9
+ /** Semantic key-value content with predictable responsive density. */
10
+ export function DescriptionList(props) {
11
+ const columns = () => Math.max(1, Math.min(3, props.columns ?? 1));
12
+ return _$ssr(_tmpl$, `k2b-description-list ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-columns", _$escape(columns(), true), false) + _$ssrAttribute("data-layout", _$escape(props.layout ?? "grid", true), false) + _$ssrAttribute("data-size", _$escape(props.size ?? "md", true), false) + _$ssrAttribute("data-action-visibility", _$escape(props.actionVisibility ?? "always", true), false), _$escape(_$createComponent(For, {
13
+ get each() {
14
+ return props.items;
15
+ },
16
+ children: item => _$ssr(_tmpl$2, _$escape(item.term), _$escape(item.description), _$escape(_$createComponent(Show, {
17
+ get when() {
18
+ return item.action;
19
+ },
20
+ children: action => _$ssr(_tmpl$3, _$escape(action()))
21
+ })))
22
+ })));
23
+ }
24
+ export default DescriptionList;
25
+ //# sourceMappingURL=DescriptionList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["For","Show","DescriptionList","props","columns","Math","max","min","_$ssr","_tmpl$","_$escape","class","_$ssrAttribute","layout","size","actionVisibility","_$createComponent","each","items","children","item","_tmpl$2","term","description","when","action","_tmpl$3"],"sources":["surfaces/DescriptionList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\n\nexport type DescriptionListItem = {\n term: JSX.Element;\n description: JSX.Element;\n action?: JSX.Element;\n};\n\nexport type DescriptionListProps = {\n items: readonly DescriptionListItem[];\n columns?: 1 | 2 | 3;\n layout?: \"grid\" | \"rows\";\n size?: \"sm\" | \"md\";\n actionVisibility?: \"always\" | \"progressive\";\n class?: string;\n};\n\n/** Semantic key-value content with predictable responsive density. */\nexport function DescriptionList(props: DescriptionListProps): JSX.Element {\n const columns = () => Math.max(1, Math.min(3, props.columns ?? 1));\n return (\n <dl\n class={`k2b-description-list ${props.class ?? \"\"}`}\n data-columns={columns()}\n data-layout={props.layout ?? \"grid\"}\n data-size={props.size ?? \"md\"}\n data-action-visibility={props.actionVisibility ?? \"always\"}\n >\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-description-list__item\">\n <dt>{item.term}</dt>\n <dd>{item.description}</dd>\n <Show when={item.action}>{(action) => <div class=\"k2b-description-list__action\">{action()}</div>}</Show>\n </div>\n )}\n </For>\n </dl>\n );\n}\n\nexport default DescriptionList;\n"],"mappings":";;;;;;;AAAA,SAASA,GAAG,EAAYC,IAAI,QAAQ,UAAU;AAiB9C;AACA,OAAO,SAASC,eAAeA,CAACC,KAA2B,EAAe;EACxE,MAAMC,OAAO,GAAGA,CAAA,KAAMC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEJ,KAAK,CAACC,OAAO,IAAI,CAAC,CAAC,CAAC;EAClE,OAAAI,KAAA,CAAAC,MAAA,EAEW,wBAAAC,QAAA,CAAwBP,KAAK,CAACQ,KAAK,IAAI,EAAE,SAAE,EAAAC,cAAA,iBAAAF,QAAA,CACpCN,OAAO,CAAC,CAAC,kBAAAQ,cAAA,gBAAAF,QAAA,CACVP,KAAK,CAACU,MAAM,IAAI,MAAM,kBAAAD,cAAA,cAAAF,QAAA,CACxBP,KAAK,CAACW,IAAI,IAAI,IAAI,kBAAAF,cAAA,2BAAAF,QAAA,CACLP,KAAK,CAACY,gBAAgB,IAAI,QAAQ,iBAAAL,QAAA,CAAAM,iBAAA,CAEzDhB,GAAG;IAAA,IAACiB,IAAIA,CAAA;MAAA,OAAEd,KAAK,CAACe,KAAK;IAAA;IAAAC,QAAA,EAClBC,IAAI,IAAAZ,KAAA,CAAAa,OAAA,EAAAX,QAAA,CAEGU,IAAI,CAACE,IAAI,GAAAZ,QAAA,CACTU,IAAI,CAACG,WAAW,GAAAb,QAAA,CAAAM,iBAAA,CACpBf,IAAI;MAAA,IAACuB,IAAIA,CAAA;QAAA,OAAEJ,IAAI,CAACK,MAAM;MAAA;MAAAN,QAAA,EAAIM,MAAM,IAAAjB,KAAA,CAAAkB,OAAA,EAAAhB,QAAA,CAAgDe,MAAM,CAAC,CAAC;IAAO;EAEnG;AAIT;AAEA,eAAevB,eAAe","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ import { createComponent as _$createComponent } from "solid-js/web";
2
+ import { ssr as _$ssr } from "solid-js/web";
3
+ import { escape as _$escape } from "solid-js/web";
4
+ var _tmpl$ = ["<div class=\"k2b-link-card__icon\"><i class=\"", "\" aria-hidden=\"true\"></i></div>"],
5
+ _tmpl$2 = ["<div class=\"k2b-link-card__copy\"><span class=\"k2b-link-card__title\">", "</span><p class=\"k2b-link-card__description\">", "</p></div>"],
6
+ _tmpl$3 = "<i class=\"ti ti-chevron-right k2b-link-card__chevron\" aria-hidden=\"true\"></i>";
7
+ import { Paper } from "./Paper";
8
+ export function LinkCard(props) {
9
+ return _$createComponent(Paper, {
10
+ as: "a",
11
+ get href() {
12
+ return props.href;
13
+ },
14
+ "class": "k2b-link-card",
15
+ get ["data-color"]() {
16
+ return props.color;
17
+ },
18
+ interactive: true,
19
+ get children() {
20
+ return [_$ssr(_tmpl$, `${_$escape(props.icon, true)} k2b-link-card__glyph`), _$ssr(_tmpl$2, _$escape(props.title), _$escape(props.description)), _$ssr(_tmpl$3)];
21
+ }
22
+ });
23
+ }
24
+ export default LinkCard;
25
+ //# sourceMappingURL=LinkCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Paper","LinkCard","props","_$createComponent","as","href","data-color","color","interactive","children","_$ssr","_tmpl$","_$escape","icon","_tmpl$2","title","description","_tmpl$3"],"sources":["surfaces/LinkCard.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport { Paper } from \"./Paper\";\n\nexport type LinkCardColor = \"blue\" | \"emerald\" | \"violet\" | \"orange\" | \"red\" | \"amber\" | \"zinc\" | \"cyan\" | \"rose\";\n\nexport type LinkCardProps = {\n href: string;\n title: string;\n description: string;\n icon: string;\n color: LinkCardColor;\n};\n\nexport function LinkCard(props: LinkCardProps): JSX.Element {\n return (\n <Paper as=\"a\" href={props.href} class=\"k2b-link-card\" data-color={props.color} interactive>\n <div class=\"k2b-link-card__icon\">\n <i class={`${props.icon} k2b-link-card__glyph`} aria-hidden=\"true\" />\n </div>\n <div class=\"k2b-link-card__copy\">\n <span class=\"k2b-link-card__title\">{props.title}</span>\n <p class=\"k2b-link-card__description\">{props.description}</p>\n </div>\n <i class=\"ti ti-chevron-right k2b-link-card__chevron\" aria-hidden=\"true\" />\n </Paper>\n );\n}\n\nexport default LinkCard;\n"],"mappings":";;;;;;AACA,SAASA,KAAK,QAAQ,SAAS;AAY/B,OAAO,SAASC,QAAQA,CAACC,KAAoB,EAAe;EAC1D,OAAAC,iBAAA,CACGH,KAAK;IAACI,EAAE;IAAA,IAAKC,IAAIA,CAAA;MAAA,OAAEH,KAAK,CAACG,IAAI;IAAA;IAAA;IAAA,kBAAAC,CAAA;MAAA,OAAoCJ,KAAK,CAACK,KAAK;IAAA;IAAEC,WAAW;IAAA,IAAAC,SAAA;MAAA,QAAAC,KAAA,CAAAC,MAAA,EAE5E,GAAAC,QAAA,CAAGV,KAAK,CAACW,IAAI,8BAAuB,GAAAH,KAAA,CAAAI,OAAA,EAAAF,QAAA,CAGVV,KAAK,CAACa,KAAK,GAAAH,QAAA,CACRV,KAAK,CAACc,WAAW,IAAAN,KAAA,CAAAO,OAAA;IAAA;EAAA;AAKhE;AAEA,eAAehB,QAAQ","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
2
+ import { ssr as _$ssr } from "solid-js/web";
3
+ import { escape as _$escape } from "solid-js/web";
4
+ import { createComponent as _$createComponent } from "solid-js/web";
5
+ var _tmpl$ = ["<div class=\"k2b-not-found\">", "<div class=\"k2b-not-found__copy\"><h1>", "</h1>", "</div>", "</div>"],
6
+ _tmpl$2 = ["<i class=\"", "\" aria-hidden=\"true\"></i>"],
7
+ _tmpl$3 = ["<div class=\"k2b-not-found__code\">", "</div>"],
8
+ _tmpl$4 = ["<p>", "</p>"],
9
+ _tmpl$5 = ["<a", " class=\"k2b-button\" data-size=\"sm\" data-variant=\"primary\"><i", " aria-hidden=\"true\"></i><span>", "</span></a>"];
10
+ import { Show } from "solid-js";
11
+ export function NotFoundState(props) {
12
+ return _$ssr(_tmpl$, _$escape(_$createComponent(Show, {
13
+ get when() {
14
+ return props.code;
15
+ },
16
+ get fallback() {
17
+ return _$createComponent(Show, {
18
+ get when() {
19
+ return props.icon;
20
+ },
21
+ children: icon => _$ssr(_tmpl$2, `${_$escape(icon(), true)} k2b-not-found__icon`)
22
+ });
23
+ },
24
+ children: code => _$ssr(_tmpl$3, _$escape(code()))
25
+ })), _$escape(props.title), _$escape(_$createComponent(Show, {
26
+ get when() {
27
+ return props.description;
28
+ },
29
+ children: description => _$ssr(_tmpl$4, _$escape(description()))
30
+ })), _$escape(_$createComponent(Show, {
31
+ get when() {
32
+ return props.action;
33
+ },
34
+ children: action => _$ssr(_tmpl$5, _$ssrAttribute("href", _$escape(action().href, true), false), _$ssrAttribute("class", _$escape(action().icon ?? "ti ti-home", true), false), _$escape(action().label))
35
+ })));
36
+ }
37
+ export default NotFoundState;
38
+ //# sourceMappingURL=NotFoundState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Show","NotFoundState","props","_$ssr","_tmpl$","_$escape","_$createComponent","when","code","fallback","icon","children","_tmpl$2","_tmpl$3","title","description","_tmpl$4","action","_tmpl$5","_$ssrAttribute","href","label"],"sources":["surfaces/NotFoundState.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\n\nexport type NotFoundStateAction = {\n label: string;\n href: string;\n icon?: string;\n};\n\nexport type NotFoundStateProps = {\n code?: string;\n title: string;\n description?: string;\n icon?: string;\n action?: NotFoundStateAction;\n};\n\nexport function NotFoundState(props: NotFoundStateProps): JSX.Element {\n return (\n <div class=\"k2b-not-found\">\n <Show\n when={props.code}\n fallback={<Show when={props.icon}>{(icon) => <i class={`${icon()} k2b-not-found__icon`} aria-hidden=\"true\" />}</Show>}\n >\n {(code) => <div class=\"k2b-not-found__code\">{code()}</div>}\n </Show>\n <div class=\"k2b-not-found__copy\">\n <h1>{props.title}</h1>\n <Show when={props.description}>{(description) => <p>{description()}</p>}</Show>\n </div>\n <Show when={props.action}>\n {(action) => (\n <a href={action().href} class=\"k2b-button\" data-size=\"sm\" data-variant=\"primary\">\n <i class={action().icon ?? \"ti ti-home\"} aria-hidden=\"true\" />\n <span>{action().label}</span>\n </a>\n )}\n </Show>\n </div>\n );\n}\n\nexport default NotFoundState;\n"],"mappings":";;;;;;;;;AAAA,SAAmBA,IAAI,QAAQ,UAAU;AAgBzC,OAAO,SAASC,aAAaA,CAACC,KAAyB,EAAe;EACpE,OAAAC,KAAA,CAAAC,MAAA,EAAAC,QAAA,CAAAC,iBAAA,CAEKN,IAAI;IAAA,IACHO,IAAIA,CAAA;MAAA,OAAEL,KAAK,CAACM,IAAI;IAAA;IAAA,IAChBC,QAAQA,CAAA;MAAA,OAAAH,iBAAA,CAAGN,IAAI;QAAA,IAACO,IAAIA,CAAA;UAAA,OAAEL,KAAK,CAACQ,IAAI;QAAA;QAAAC,QAAA,EAAID,IAAI,IAAAP,KAAA,CAAAS,OAAA,EAAe,GAAAP,QAAA,CAAGK,IAAI,CAAC,CAAC,6BAAsB;MAAuB;IAAA;IAAAC,QAAA,EAE3GH,IAAI,IAAAL,KAAA,CAAAU,OAAA,EAAAR,QAAA,CAAuCG,IAAI,CAAC,CAAC;EAAO,KAAAH,QAAA,CAGrDH,KAAK,CAACY,KAAK,GAAAT,QAAA,CAAAC,iBAAA,CACfN,IAAI;IAAA,IAACO,IAAIA,CAAA;MAAA,OAAEL,KAAK,CAACa,WAAW;IAAA;IAAAJ,QAAA,EAAII,WAAW,IAAAZ,KAAA,CAAAa,OAAA,EAAAX,QAAA,CAASU,WAAW,CAAC,CAAC;EAAK,KAAAV,QAAA,CAAAC,iBAAA,CAExEN,IAAI;IAAA,IAACO,IAAIA,CAAA;MAAA,OAAEL,KAAK,CAACe,MAAM;IAAA;IAAAN,QAAA,EACpBM,MAAM,IAAAd,KAAA,CAAAe,OAAA,EAAAC,cAAA,SAAAd,QAAA,CACGY,MAAM,CAAC,CAAC,CAACG,IAAI,iBAAAD,cAAA,UAAAd,QAAA,CACVY,MAAM,CAAC,CAAC,CAACP,IAAI,IAAI,YAAY,iBAAAL,QAAA,CAChCY,MAAM,CAAC,CAAC,CAACI,KAAK;EAExB;AAIT;AAEA,eAAepB,aAAa","ignoreList":[]}
@@ -0,0 +1,83 @@
1
+ import { ssrElement as _$ssrElement } from "solid-js/web";
2
+ import { mergeProps as _$mergeProps } from "solid-js/web";
3
+ import { createComponent as _$createComponent } from "solid-js/web";
4
+ import { ssr as _$ssr } from "solid-js/web";
5
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
6
+ import { escape as _$escape } from "solid-js/web";
7
+ var _tmpl$ = ["<i class=\"", "\" aria-hidden=\"true\"></i>"],
8
+ _tmpl$2 = ["<div", ">", "<div", ">", "", "", "</div></div>"],
9
+ _tmpl$3 = ["<p", ">", "</p>"],
10
+ _tmpl$4 = ["<div class=\"", "\">", "</div>"],
11
+ _tmpl$5 = ["<div class=\"", "\"", ">", "</div>"];
12
+ import { For, Show, splitProps } from "solid-js";
13
+ export const NOTICE_CARD_CLASSES = {
14
+ root: "k2b-notice-card",
15
+ inner: "k2b-notice-card__inner",
16
+ icon: "k2b-notice-card__icon",
17
+ content: "k2b-notice-card__content",
18
+ title: "k2b-notice-card__title",
19
+ description: "k2b-notice-card__description",
20
+ body: "k2b-notice-card__body"
21
+ };
22
+ export const NOTICE_CARD_ICONS = {
23
+ neutral: "ti ti-note",
24
+ info: "ti ti-info-circle",
25
+ success: "ti ti-circle-check",
26
+ warning: "ti ti-alert-triangle",
27
+ danger: "ti ti-alert-circle"
28
+ };
29
+ function NoticeCardComponent(props) {
30
+ const [local, articleProps] = splitProps(props, ["tone", "title", "detail", "children", "icon", "class", "bodyClass"]);
31
+ const tone = () => local.tone ?? "warning";
32
+ return _$ssrElement("article", _$mergeProps(articleProps, {
33
+ get ["class"]() {
34
+ return `${NOTICE_CARD_CLASSES.root} ${local.class ?? ""}`;
35
+ },
36
+ get ["data-tone"]() {
37
+ return tone();
38
+ }
39
+ }), _$ssr(_tmpl$2, _$ssrAttribute("class", _$escape(NOTICE_CARD_CLASSES.inner, true), false), _$escape(_$createComponent(Show, {
40
+ get when() {
41
+ return local.icon !== false;
42
+ },
43
+ get children() {
44
+ return _$ssr(_tmpl$, `${typeof local.icon === "string" ? _$escape(local.icon, true) : _$escape(NOTICE_CARD_ICONS[tone()], true)} ${_$escape(NOTICE_CARD_CLASSES.icon, true)}`);
45
+ }
46
+ })), _$ssrAttribute("class", _$escape(NOTICE_CARD_CLASSES.content, true), false), _$escape(_$createComponent(Show, {
47
+ get when() {
48
+ return local.title;
49
+ },
50
+ children: title => _$ssr(_tmpl$3, _$ssrAttribute("class", _$escape(NOTICE_CARD_CLASSES.title, true), false), _$escape(title()))
51
+ })), _$escape(_$createComponent(Show, {
52
+ get when() {
53
+ return local.detail;
54
+ },
55
+ children: detail => _$ssr(_tmpl$3, _$ssrAttribute("class", _$escape(NOTICE_CARD_CLASSES.description, true), false), _$escape(detail()))
56
+ })), _$escape(_$createComponent(Show, {
57
+ get when() {
58
+ return local.children;
59
+ },
60
+ children: body => _$ssr(_tmpl$4, `${_$escape(NOTICE_CARD_CLASSES.body, true)} ${_$escape(local.bodyClass ?? "", true)}`, _$escape(body()))
61
+ }))), false);
62
+ }
63
+ function NoticeGrid(props) {
64
+ const columns = () => props.items.length <= 1 ? "one" : props.items.length === 2 ? "two" : "three";
65
+ return _$createComponent(Show, {
66
+ get when() {
67
+ return props.items.length > 0;
68
+ },
69
+ get children() {
70
+ return _$ssr(_tmpl$5, `k2b-notice-grid ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-columns", _$escape(columns(), true), false), _$escape(_$createComponent(For, {
71
+ get each() {
72
+ return props.items;
73
+ },
74
+ children: item => props.children(item)
75
+ })));
76
+ }
77
+ });
78
+ }
79
+ export const NoticeCard = Object.assign(NoticeCardComponent, {
80
+ Grid: NoticeGrid
81
+ });
82
+ export default NoticeCard;
83
+ //# sourceMappingURL=NoticeCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["For","Show","splitProps","NOTICE_CARD_CLASSES","root","inner","icon","content","title","description","body","NOTICE_CARD_ICONS","neutral","info","success","warning","danger","NoticeCardComponent","props","local","articleProps","tone","_$ssrElement","_$mergeProps","class","data-tone","_$ssr","_tmpl$2","_$ssrAttribute","_$escape","_$createComponent","when","children","_tmpl$","_tmpl$3","detail","_tmpl$4","bodyClass","NoticeGrid","columns","items","length","_tmpl$5","each","item","NoticeCard","Object","assign","Grid"],"sources":["surfaces/NoticeCard.tsx"],"sourcesContent":["import { For, type JSX, Show, splitProps } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type NoticeTone = Extract<IntentTone, \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\">;\n\ntype NoticeCardContentProps =\n | { title: JSX.Element; detail?: JSX.Element; children?: JSX.Element }\n | { title?: never; detail?: never; children: JSX.Element };\n\nexport type NoticeCardProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"title\"> &\n NoticeCardContentProps & {\n tone?: NoticeTone;\n icon?: string | false;\n class?: string;\n bodyClass?: string;\n };\n\nexport const NOTICE_CARD_CLASSES = {\n root: \"k2b-notice-card\",\n inner: \"k2b-notice-card__inner\",\n icon: \"k2b-notice-card__icon\",\n content: \"k2b-notice-card__content\",\n title: \"k2b-notice-card__title\",\n description: \"k2b-notice-card__description\",\n body: \"k2b-notice-card__body\",\n} as const;\n\nexport const NOTICE_CARD_ICONS: Readonly<Record<NoticeTone, string>> = {\n neutral: \"ti ti-note\",\n info: \"ti ti-info-circle\",\n success: \"ti ti-circle-check\",\n warning: \"ti ti-alert-triangle\",\n danger: \"ti ti-alert-circle\",\n};\n\nfunction NoticeCardComponent(props: NoticeCardProps): JSX.Element {\n const [local, articleProps] = splitProps(props, [\"tone\", \"title\", \"detail\", \"children\", \"icon\", \"class\", \"bodyClass\"]);\n const tone = () => local.tone ?? \"warning\";\n return (\n <article {...articleProps} class={`${NOTICE_CARD_CLASSES.root} ${local.class ?? \"\"}`} data-tone={tone()}>\n <div class={NOTICE_CARD_CLASSES.inner}>\n <Show when={local.icon !== false}>\n <i\n class={`${typeof local.icon === \"string\" ? local.icon : NOTICE_CARD_ICONS[tone()]} ${NOTICE_CARD_CLASSES.icon}`}\n aria-hidden=\"true\"\n />\n </Show>\n <div class={NOTICE_CARD_CLASSES.content}>\n <Show when={local.title}>{(title) => <p class={NOTICE_CARD_CLASSES.title}>{title()}</p>}</Show>\n <Show when={local.detail}>{(detail) => <p class={NOTICE_CARD_CLASSES.description}>{detail()}</p>}</Show>\n <Show when={local.children}>{(body) => <div class={`${NOTICE_CARD_CLASSES.body} ${local.bodyClass ?? \"\"}`}>{body()}</div>}</Show>\n </div>\n </div>\n </article>\n );\n}\n\nexport type NoticeGridProps<T> = {\n items: readonly T[];\n children: (item: T) => JSX.Element;\n class?: string;\n};\n\nfunction NoticeGrid<T>(props: NoticeGridProps<T>): JSX.Element {\n const columns = () => (props.items.length <= 1 ? \"one\" : props.items.length === 2 ? \"two\" : \"three\");\n return (\n <Show when={props.items.length > 0}>\n <div class={`k2b-notice-grid ${props.class ?? \"\"}`} data-columns={columns()}>\n <For each={props.items}>{(item) => props.children(item)}</For>\n </div>\n </Show>\n );\n}\n\nexport const NoticeCard = Object.assign(NoticeCardComponent, { Grid: NoticeGrid });\nexport default NoticeCard;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ import { createComponent as _$createComponent } from "solid-js/web";
2
+ import { mergeProps as _$mergeProps } from "solid-js/web";
3
+ import { splitProps } from "solid-js";
4
+ import { Dynamic } from "solid-js/web";
5
+ const PaperElement = Dynamic;
6
+ export function Paper(props) {
7
+ const [local, elementProps] = splitProps(props, ["as", "children", "class", "elevated", "interactive", "tabIndex"]);
8
+ const className = () => local.class?.trim();
9
+ return _$createComponent(PaperElement, _$mergeProps({
10
+ get component() {
11
+ return local.as ?? "div";
12
+ }
13
+ }, elementProps, {
14
+ get ["class"]() {
15
+ return className() ? `k2b-paper ${className()}` : "k2b-paper";
16
+ },
17
+ get ["data-elevated"]() {
18
+ return local.elevated ? "true" : undefined;
19
+ },
20
+ get ["data-interactive"]() {
21
+ return local.interactive ? "true" : undefined;
22
+ },
23
+ get tabindex() {
24
+ return local.tabIndex;
25
+ },
26
+ get children() {
27
+ return local.children;
28
+ }
29
+ }));
30
+ }
31
+ export default Paper;
32
+ //# sourceMappingURL=Paper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["splitProps","Dynamic","PaperElement","Paper","props","local","elementProps","className","class","trim","_$createComponent","_$mergeProps","component","as","data-elevated","elevated","undefined","data-interactive","interactive","tabindex","tabIndex","children"],"sources":["surfaces/Paper.tsx"],"sourcesContent":["import { type JSX, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\n\nexport type PaperTag = \"div\" | \"section\" | \"article\" | \"a\";\n\ntype PaperOwnProps<T extends PaperTag> = {\n as?: T;\n children?: JSX.Element;\n class?: string;\n elevated?: boolean;\n interactive?: boolean;\n tabIndex?: number;\n};\n\nexport type PaperProps<T extends PaperTag = \"div\"> = PaperOwnProps<T> & Omit<JSX.IntrinsicElements[T], keyof PaperOwnProps<T>>;\n\nconst PaperElement = Dynamic as unknown as (props: Record<string, unknown>) => JSX.Element;\n\nexport function Paper<T extends PaperTag = \"div\">(props: PaperProps<T>): JSX.Element {\n const [local, elementProps] = splitProps(props, [\"as\", \"children\", \"class\", \"elevated\", \"interactive\", \"tabIndex\"]);\n const className = () => local.class?.trim();\n\n return (\n <PaperElement\n component={local.as ?? \"div\"}\n {...elementProps}\n class={className() ? `k2b-paper ${className()}` : \"k2b-paper\"}\n data-elevated={local.elevated ? \"true\" : undefined}\n data-interactive={local.interactive ? \"true\" : undefined}\n tabindex={local.tabIndex}\n >\n {local.children}\n </PaperElement>\n );\n}\n\nexport default Paper;\n"],"mappings":";;AAAA,SAAmBA,UAAU,QAAQ,UAAU;AAC/C,SAASC,OAAO,QAAQ,cAAc;AAetC,MAAMC,YAAY,GAAGD,OAAqE;AAE1F,OAAO,SAASE,KAAKA,CAA6BC,KAAoB,EAAe;EACnF,MAAM,CAACC,KAAK,EAAEC,YAAY,CAAC,GAAGN,UAAU,CAACI,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;EACnH,MAAMG,SAAS,GAAGA,CAAA,KAAMF,KAAK,CAACG,KAAK,EAAEC,IAAI,CAAC,CAAC;EAE3C,OAAAC,iBAAA,CACGR,YAAY,EAAAS,YAAA;IAAA,IACXC,SAASA,CAAA;MAAA,OAAEP,KAAK,CAACQ,EAAE,IAAI,KAAK;IAAA;EAAA,GACxBP,YAAY;IAAA,aAAAE,CAAA;MAAA,OACTD,SAAS,CAAC,CAAC,GAAG,aAAaA,SAAS,CAAC,CAAC,EAAE,GAAG,WAAW;IAAA;IAAA,qBAAAO,CAAA;MAAA,OAC9CT,KAAK,CAACU,QAAQ,GAAG,MAAM,GAAGC,SAAS;IAAA;IAAA,wBAAAC,CAAA;MAAA,OAChCZ,KAAK,CAACa,WAAW,GAAG,MAAM,GAAGF,SAAS;IAAA;IAAA,IACxDG,QAAQA,CAAA;MAAA,OAAEd,KAAK,CAACe,QAAQ;IAAA;IAAA,IAAAC,SAAA;MAAA,OAEvBhB,KAAK,CAACgB,QAAQ;IAAA;EAAA;AAGrB;AAEA,eAAelB,KAAK","ignoreList":[]}
@@ -0,0 +1,76 @@
1
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
2
+ import { ssr as _$ssr } from "solid-js/web";
3
+ import { escape as _$escape } from "solid-js/web";
4
+ import { createComponent as _$createComponent } from "solid-js/web";
5
+ var _tmpl$ = ["<p class=\"k2b-placeholder__title\">", "</p>"],
6
+ _tmpl$2 = ["<div class=\"k2b-placeholder__description\">", "</div>"],
7
+ _tmpl$3 = ["<div class=\"k2b-placeholder__action\">", "</div>"],
8
+ _tmpl$4 = ["<span class=\"k2b-placeholder__icon\"><i", " aria-hidden=\"true\"></i></span>"];
9
+ import { Show } from "solid-js";
10
+ import { Dynamic } from "solid-js/web";
11
+ import { Paper } from "./Paper";
12
+ export default function Placeholder(props) {
13
+ const align = () => props.align ?? "center";
14
+ const state = () => props.state ?? "empty";
15
+ const variant = () => props.variant ?? "compact";
16
+ const icon = () => props.icon ?? (state() === "loading" ? "ti ti-loader-2" : state() === "error" ? "ti ti-alert-circle" : undefined);
17
+ return _$createComponent(Dynamic, {
18
+ get component() {
19
+ return props.surface === "paper" ? Paper : "div";
20
+ },
21
+ get ["class"]() {
22
+ return `k2b-placeholder ${props.class ?? ""}`;
23
+ },
24
+ get ["data-align"]() {
25
+ return align();
26
+ },
27
+ get ["data-state"]() {
28
+ return state();
29
+ },
30
+ get ["data-surface"]() {
31
+ return props.surface ?? "none";
32
+ },
33
+ get ["data-variant"]() {
34
+ return variant();
35
+ },
36
+ get role() {
37
+ return state() === "error" ? "alert" : state() === "loading" ? "status" : undefined;
38
+ },
39
+ get ["aria-live"]() {
40
+ return state() === "loading" ? "polite" : undefined;
41
+ },
42
+ get ["aria-busy"]() {
43
+ return state() === "loading" ? "true" : undefined;
44
+ },
45
+ get children() {
46
+ return [_$createComponent(Show, {
47
+ get when() {
48
+ return icon();
49
+ },
50
+ children: iconClass => _$ssr(_tmpl$4, _$ssrAttribute("class", _$escape(iconClass(), true), false))
51
+ }), _$createComponent(Show, {
52
+ get when() {
53
+ return props.title;
54
+ },
55
+ get children() {
56
+ return _$ssr(_tmpl$, _$escape(props.title));
57
+ }
58
+ }), _$createComponent(Show, {
59
+ get when() {
60
+ return props.description;
61
+ },
62
+ get children() {
63
+ return _$ssr(_tmpl$2, _$escape(props.description));
64
+ }
65
+ }), _$createComponent(Show, {
66
+ get when() {
67
+ return props.action;
68
+ },
69
+ get children() {
70
+ return _$ssr(_tmpl$3, _$escape(props.action));
71
+ }
72
+ })];
73
+ }
74
+ });
75
+ }
76
+ //# sourceMappingURL=Placeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Show","Dynamic","Paper","Placeholder","props","align","state","variant","icon","undefined","_$createComponent","component","surface","class","data-align","data-state","data-surface","data-variant","role","aria-live","aria-busy","children","when","iconClass","_$ssr","_tmpl$4","_$ssrAttribute","_$escape","title","_tmpl$","description","_tmpl$2","action","_tmpl$3"],"sources":["surfaces/Placeholder.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport { Paper } from \"./Paper\";\n\nexport type PlaceholderAlign = \"center\" | \"left\";\nexport type PlaceholderSurface = \"none\" | \"paper\";\nexport type PlaceholderState = \"empty\" | \"loading\" | \"error\";\nexport type PlaceholderVariant = \"compact\" | \"panel\";\n\nexport type PlaceholderProps = {\n title?: JSX.Element;\n description?: JSX.Element;\n icon?: string;\n action?: JSX.Element;\n align?: PlaceholderAlign;\n surface?: PlaceholderSurface;\n state?: PlaceholderState;\n variant?: PlaceholderVariant;\n class?: string;\n};\n\nexport default function Placeholder(props: PlaceholderProps): JSX.Element {\n const align = () => props.align ?? \"center\";\n const state = () => props.state ?? \"empty\";\n const variant = () => props.variant ?? \"compact\";\n const icon = () => props.icon ?? (state() === \"loading\" ? \"ti ti-loader-2\" : state() === \"error\" ? \"ti ti-alert-circle\" : undefined);\n\n return (\n <Dynamic\n component={props.surface === \"paper\" ? Paper : \"div\"}\n class={`k2b-placeholder ${props.class ?? \"\"}`}\n data-align={align()}\n data-state={state()}\n data-surface={props.surface ?? \"none\"}\n data-variant={variant()}\n role={state() === \"error\" ? \"alert\" : state() === \"loading\" ? \"status\" : undefined}\n aria-live={state() === \"loading\" ? \"polite\" : undefined}\n aria-busy={state() === \"loading\" ? \"true\" : undefined}\n >\n <Show when={icon()}>\n {(iconClass) => (\n <span class=\"k2b-placeholder__icon\">\n <i class={iconClass()} aria-hidden=\"true\" />\n </span>\n )}\n </Show>\n <Show when={props.title}>\n <p class=\"k2b-placeholder__title\">{props.title}</p>\n </Show>\n <Show when={props.description}>\n <div class=\"k2b-placeholder__description\">{props.description}</div>\n </Show>\n <Show when={props.action}>\n <div class=\"k2b-placeholder__action\">{props.action}</div>\n </Show>\n </Dynamic>\n );\n}\n"],"mappings":";;;;;;;;AAAA,SAAmBA,IAAI,QAAQ,UAAU;AACzC,SAASC,OAAO,QAAQ,cAAc;AACtC,SAASC,KAAK,QAAQ,SAAS;AAmB/B,eAAe,SAASC,WAAWA,CAACC,KAAuB,EAAe;EACxE,MAAMC,KAAK,GAAGA,CAAA,KAAMD,KAAK,CAACC,KAAK,IAAI,QAAQ;EAC3C,MAAMC,KAAK,GAAGA,CAAA,KAAMF,KAAK,CAACE,KAAK,IAAI,OAAO;EAC1C,MAAMC,OAAO,GAAGA,CAAA,KAAMH,KAAK,CAACG,OAAO,IAAI,SAAS;EAChD,MAAMC,IAAI,GAAGA,CAAA,KAAMJ,KAAK,CAACI,IAAI,KAAKF,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,gBAAgB,GAAGA,KAAK,CAAC,CAAC,KAAK,OAAO,GAAG,oBAAoB,GAAGG,SAAS,CAAC;EAEpI,OAAAC,iBAAA,CACGT,OAAO;IAAA,IACNU,SAASA,CAAA;MAAA,OAAEP,KAAK,CAACQ,OAAO,KAAK,OAAO,GAAGV,KAAK,GAAG,KAAK;IAAA;IAAA,aAAAW,CAAA;MAAA,OAC7C,mBAAmBT,KAAK,CAACS,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA,kBAAAC,CAAA;MAAA,OACjCT,KAAK,CAAC,CAAC;IAAA;IAAA,kBAAAU,CAAA;MAAA,OACPT,KAAK,CAAC,CAAC;IAAA;IAAA,oBAAAU,CAAA;MAAA,OACLZ,KAAK,CAACQ,OAAO,IAAI,MAAM;IAAA;IAAA,oBAAAK,CAAA;MAAA,OACvBV,OAAO,CAAC,CAAC;IAAA;IAAA,IACvBW,IAAIA,CAAA;MAAA,OAAEZ,KAAK,CAAC,CAAC,KAAK,OAAO,GAAG,OAAO,GAAGA,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,QAAQ,GAAGG,SAAS;IAAA;IAAA,iBAAAU,CAAA;MAAA,OACvEb,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,QAAQ,GAAGG,SAAS;IAAA;IAAA,iBAAAW,CAAA;MAAA,OAC5Cd,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,MAAM,GAAGG,SAAS;IAAA;IAAA,IAAAY,SAAA;MAAA,QAAAX,iBAAA,CAEpDV,IAAI;QAAA,IAACsB,IAAIA,CAAA;UAAA,OAAEd,IAAI,CAAC,CAAC;QAAA;QAAAa,QAAA,EACdE,SAAS,IAAAC,KAAA,CAAAC,OAAA,EAAAC,cAAA,UAAAC,QAAA,CAEGJ,SAAS,CAAC,CAAC;MAExB,IAAAb,iBAAA,CAEFV,IAAI;QAAA,IAACsB,IAAIA,CAAA;UAAA,OAAElB,KAAK,CAACwB,KAAK;QAAA;QAAA,IAAAP,SAAA;UAAA,OAAAG,KAAA,CAAAK,MAAA,EAAAF,QAAA,CACcvB,KAAK,CAACwB,KAAK;QAAA;MAAA,IAAAlB,iBAAA,CAE/CV,IAAI;QAAA,IAACsB,IAAIA,CAAA;UAAA,OAAElB,KAAK,CAAC0B,WAAW;QAAA;QAAA,IAAAT,SAAA;UAAA,OAAAG,KAAA,CAAAO,OAAA,EAAAJ,QAAA,CACgBvB,KAAK,CAAC0B,WAAW;QAAA;MAAA,IAAApB,iBAAA,CAE7DV,IAAI;QAAA,IAACsB,IAAIA,CAAA;UAAA,OAAElB,KAAK,CAAC4B,MAAM;QAAA;QAAA,IAAAX,SAAA;UAAA,OAAAG,KAAA,CAAAS,OAAA,EAAAN,QAAA,CACgBvB,KAAK,CAAC4B,MAAM;QAAA;MAAA;IAAA;EAAA;AAI1D","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import { ssr as _$ssr } from "solid-js/web";
2
+ import { ssrStyle as _$ssrStyle } from "solid-js/web";
3
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
4
+ import { escape as _$escape } from "solid-js/web";
5
+ var _tmpl$ = ["<div class=\"", "\"", "><div class=\"k2b-progress__track\" role=\"progressbar\"", " aria-valuemin=\"0\" aria-valuemax=\"100\"", "><div class=\"k2b-progress__value\" style=\"", "\"></div></div>", "</div>"],
6
+ _tmpl$2 = ["<span class=\"k2b-progress__percent\">", "%</span>"];
7
+ const clamp = value => Number.isFinite(value) ? Math.max(0, Math.min(100, Math.round(value))) : 0;
8
+ export function ProgressBar(props) {
9
+ const percent = () => clamp(props.value);
10
+ return _$ssr(_tmpl$, `k2b-progress ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-size", _$escape(props.size ?? "md", true), false) + _$ssrAttribute("data-tone", _$escape(props.tone ?? "info", true), false), _$ssrAttribute("aria-label", _$escape(props.label, true), false), _$ssrAttribute("aria-valuenow", _$escape(percent(), true), false), _$ssrStyle(`width: ${percent()}%`), props.showValue ? _$ssr(_tmpl$2, _$escape(percent())) : _$escape(null));
11
+ }
12
+ export default ProgressBar;
13
+ //# sourceMappingURL=ProgressBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["clamp","value","Number","isFinite","Math","max","min","round","ProgressBar","props","percent","_$ssr","_tmpl$","_$escape","class","_$ssrAttribute","size","tone","label","_$ssrStyle","showValue","_tmpl$2"],"sources":["surfaces/ProgressBar.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type ProgressBarTone = Extract<IntentTone, \"info\" | \"success\" | \"danger\">;\n\nexport type ProgressBarProps = {\n value: number;\n size?: \"xs\" | \"sm\" | \"md\";\n tone?: ProgressBarTone;\n showValue?: boolean;\n label: string;\n class?: string;\n};\n\nconst clamp = (value: number) => (Number.isFinite(value) ? Math.max(0, Math.min(100, Math.round(value))) : 0);\n\nexport function ProgressBar(props: ProgressBarProps): JSX.Element {\n const percent = () => clamp(props.value);\n return (\n <div class={`k2b-progress ${props.class ?? \"\"}`} data-size={props.size ?? \"md\"} data-tone={props.tone ?? \"info\"}>\n <div\n class=\"k2b-progress__track\"\n role=\"progressbar\"\n aria-label={props.label}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={percent()}\n >\n <div class=\"k2b-progress__value\" style={`width: ${percent()}%`} />\n </div>\n {props.showValue ? <span class=\"k2b-progress__percent\">{percent()}%</span> : null}\n </div>\n );\n}\n\nexport default ProgressBar;\n"],"mappings":";;;;;;AAcA,MAAMA,KAAK,GAAIC,KAAa,IAAMC,MAAM,CAACC,QAAQ,CAACF,KAAK,CAAC,GAAGG,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,GAAG,EAAEF,IAAI,CAACG,KAAK,CAACN,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE;AAE7G,OAAO,SAASO,WAAWA,CAACC,KAAuB,EAAe;EAChE,MAAMC,OAAO,GAAGA,CAAA,KAAMV,KAAK,CAACS,KAAK,CAACR,KAAK,CAAC;EACxC,OAAAU,KAAA,CAAAC,MAAA,EACc,gBAAAC,QAAA,CAAgBJ,KAAK,CAACK,KAAK,IAAI,EAAE,SAAE,EAAAC,cAAA,cAAAF,QAAA,CAAaJ,KAAK,CAACO,IAAI,IAAI,IAAI,kBAAAD,cAAA,cAAAF,QAAA,CAAaJ,KAAK,CAACQ,IAAI,IAAI,MAAM,iBAAAF,cAAA,eAAAF,QAAA,CAI/FJ,KAAK,CAACS,KAAK,iBAAAH,cAAA,kBAAAF,QAAA,CAGRH,OAAO,CAAC,CAAC,iBAAAS,UAAA,CAEgB,UAAUT,OAAO,CAAC,CAAC,GAAG,GAE/DD,KAAK,CAACW,SAAS,GAAAT,KAAA,CAAAU,OAAA,EAAAR,QAAA,CAAwCH,OAAO,CAAC,CAAC,KAAAG,QAAA,CAAY,IAAI;AAGvF;AAEA,eAAeL,WAAW","ignoreList":[]}