@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,736 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
+ import { style as _$style } from "solid-js/web";
4
+ import { setProperty as _$setProperty } from "solid-js/web";
5
+ import { setAttribute as _$setAttribute } from "solid-js/web";
6
+ import { use as _$use } from "solid-js/web";
7
+ import { className as _$className } from "solid-js/web";
8
+ import { effect as _$effect } from "solid-js/web";
9
+ import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
10
+ import { getNextMarker as _$getNextMarker } from "solid-js/web";
11
+ import { createComponent as _$createComponent } from "solid-js/web";
12
+ import { getNextElement as _$getNextElement } from "solid-js/web";
13
+ import { insert as _$insert } from "solid-js/web";
14
+ import { spread as _$spread } from "solid-js/web";
15
+ import { mergeProps as _$mergeProps } from "solid-js/web";
16
+ import { memo as _$memo } from "solid-js/web";
17
+ var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-dropzone__subtitle>`),
18
+ _tmpl$2 = /*#__PURE__*/_$template(`<span class=k2b-dropzone__hint>`),
19
+ _tmpl$3 = /*#__PURE__*/_$template(`<button type=button class=k2b-dropzone><span class=k2b-dropzone__icon aria-hidden=true><i></i></span><span class=k2b-dropzone__copy><strong></strong><!$><!/><!$><!/>`),
20
+ _tmpl$4 = /*#__PURE__*/_$template(`<input class=k2b-sr-only type=file tabindex=-1>`),
21
+ _tmpl$5 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
22
+ _tmpl$6 = /*#__PURE__*/_$template(`<i class="ti ti-trash"aria-hidden=true>`),
23
+ _tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-image-input role=group><div class=k2b-image-input__preview></div><div class=k2b-image-input__actions><!$><!/><!$><!/></div><input class=k2b-sr-only type=file>`),
24
+ _tmpl$8 = /*#__PURE__*/_$template(`<i class="ti ti-photo-off"aria-hidden=true>`),
25
+ _tmpl$9 = /*#__PURE__*/_$template(`<img>`),
26
+ _tmpl$0 = /*#__PURE__*/_$template(`<div class=k2b-image-cropper__frame><img><div class=k2b-image-cropper__selection role=group></div><button type=button class=k2b-image-cropper__rotate><i class="ti ti-rotate-clockwise"aria-hidden=true>`),
27
+ _tmpl$1 = /*#__PURE__*/_$template(`<div><div class=k2b-image-cropper__stage>`),
28
+ _tmpl$10 = /*#__PURE__*/_$template(`<small>`),
29
+ _tmpl$11 = /*#__PURE__*/_$template(`<small class=k2b-image-cropper__error>`),
30
+ _tmpl$12 = /*#__PURE__*/_$template(`<button type=button class=k2b-image-cropper__handle>`);
31
+ import { dropzone } from "@k2b/stdlib/solid";
32
+ import { createEffect, createSignal, For, onCleanup, Show } from "solid-js";
33
+ import { Button, IconButton } from "../actions/Button";
34
+ import { createFieldMeta, Field, fieldControlAria } from "../internal/field";
35
+ import { useUiMessages } from "../intl/messages";
36
+ import { commitFieldValue, resolveMaybeAccessor } from "./field-contract";
37
+ import { clampImageCropRect, getInitialImageCropRect, resizeImageCropFromCorner, rotateImageCropRight } from "./image-crop";
38
+ export function FileDropzone(props) {
39
+ const messages = useUiMessages();
40
+ const meta = createFieldMeta(props.id);
41
+ const disabled = () => Boolean(props.disabled || props.busy);
42
+ const error = () => resolveMaybeAccessor(props.error);
43
+ let input;
44
+ const emit = files => {
45
+ if (disabled() || files.length === 0) return;
46
+ void props.onDrop(props.multiple === false ? files.slice(0, 1) : files);
47
+ };
48
+ const zone = dropzone.create({
49
+ get accept() {
50
+ return props.accept;
51
+ },
52
+ onDrop: emit
53
+ });
54
+ const title = () => props.busy ? messages().uploading : zone.invalidDrag() ? messages().fileTypeNotAccepted : zone.isDragging() ? messages().dropToUpload : props.title ?? messages().dropFiles;
55
+ return _$createComponent(Field, {
56
+ get ["class"]() {
57
+ return props.class;
58
+ },
59
+ get label() {
60
+ return props.label;
61
+ },
62
+ get description() {
63
+ return props.description;
64
+ },
65
+ get error() {
66
+ return error();
67
+ },
68
+ meta: meta,
69
+ get required() {
70
+ return props.required;
71
+ },
72
+ get disabled() {
73
+ return disabled();
74
+ },
75
+ get children() {
76
+ return [(() => {
77
+ var _el$ = _$getNextElement(_tmpl$3),
78
+ _el$2 = _el$.firstChild,
79
+ _el$3 = _el$2.firstChild,
80
+ _el$4 = _el$2.nextSibling,
81
+ _el$5 = _el$4.firstChild,
82
+ _el$8 = _el$5.nextSibling,
83
+ [_el$9, _co$] = _$getNextMarker(_el$8.nextSibling),
84
+ _el$0 = _el$9.nextSibling,
85
+ [_el$1, _co$2] = _$getNextMarker(_el$0.nextSibling);
86
+ _$spread(_el$, _$mergeProps({
87
+ get id() {
88
+ return meta.controlId;
89
+ },
90
+ get ["data-dragging"]() {
91
+ return zone.isDragging() ? "true" : undefined;
92
+ },
93
+ get ["data-invalid"]() {
94
+ return zone.invalidDrag() || error() ? "true" : undefined;
95
+ },
96
+ get disabled() {
97
+ return disabled();
98
+ }
99
+ }, () => fieldControlAria(meta, props), {
100
+ "onClick": () => input?.click()
101
+ }, () => zone.handlers), false, true);
102
+ _$insert(_el$5, title);
103
+ _$insert(_el$4, _$createComponent(Show, {
104
+ get when() {
105
+ return zone.invalidDrag();
106
+ },
107
+ get fallback() {
108
+ return _$createComponent(Show, {
109
+ get when() {
110
+ return props.subtitle;
111
+ },
112
+ get children() {
113
+ var _el$11 = _$getNextElement(_tmpl$);
114
+ _$insert(_el$11, () => props.subtitle);
115
+ return _el$11;
116
+ }
117
+ });
118
+ },
119
+ get children() {
120
+ var _el$6 = _$getNextElement(_tmpl$);
121
+ _$insert(_el$6, () => messages().chooseMatchingFile);
122
+ return _el$6;
123
+ }
124
+ }), _el$9, _co$);
125
+ _$insert(_el$4, _$createComponent(Show, {
126
+ get when() {
127
+ return props.hint;
128
+ },
129
+ get children() {
130
+ var _el$7 = _$getNextElement(_tmpl$2);
131
+ _$insert(_el$7, () => props.hint);
132
+ return _el$7;
133
+ }
134
+ }), _el$1, _co$2);
135
+ _$effect(() => _$className(_el$3, props.busy ? "ti ti-loader-2 k2b-spin" : props.icon ?? "ti ti-cloud-upload"));
136
+ _$runHydrationEvents();
137
+ return _el$;
138
+ })(), (() => {
139
+ var _el$10 = _$getNextElement(_tmpl$4);
140
+ _el$10.addEventListener("change", event => {
141
+ const files = Array.from(event.currentTarget.files ?? []);
142
+ // Reset before emitting so re-picking the same file still fires change,
143
+ // even when onDrop throws.
144
+ event.currentTarget.value = "";
145
+ emit(files);
146
+ });
147
+ var _ref$ = input;
148
+ typeof _ref$ === "function" ? _$use(_ref$, _el$10) : input = _el$10;
149
+ _$effect(_p$ => {
150
+ var _v$ = props["aria-label"] ?? (typeof props.label === "string" ? props.label : props.multiple === false ? messages().chooseFile : messages().chooseFiles),
151
+ _v$2 = props.accept,
152
+ _v$3 = props.multiple ?? true,
153
+ _v$4 = disabled();
154
+ _v$ !== _p$.e && _$setAttribute(_el$10, "aria-label", _p$.e = _v$);
155
+ _v$2 !== _p$.t && _$setAttribute(_el$10, "accept", _p$.t = _v$2);
156
+ _v$3 !== _p$.a && _$setProperty(_el$10, "multiple", _p$.a = _v$3);
157
+ _v$4 !== _p$.o && _$setProperty(_el$10, "disabled", _p$.o = _v$4);
158
+ return _p$;
159
+ }, {
160
+ e: undefined,
161
+ t: undefined,
162
+ a: undefined,
163
+ o: undefined
164
+ });
165
+ return _el$10;
166
+ })()];
167
+ }
168
+ });
169
+ }
170
+ const DEFAULT_IMAGE_ACCEPT = "image/jpeg,image/png,image/gif,image/webp,image/svg+xml,.jpg,.jpeg,.png,.gif,.webp,.svg";
171
+ const defaultImageTransform = async file => {
172
+ const {
173
+ img
174
+ } = await import("@k2b/stdlib/browser");
175
+ return img.presets.avatar(file);
176
+ };
177
+ export function ImageInput(props) {
178
+ const messages = useUiMessages();
179
+ const meta = createFieldMeta(props.id);
180
+ const [busy, setBusy] = createSignal(false);
181
+ const [localError, setLocalError] = createSignal();
182
+ let input;
183
+ const disabled = () => Boolean(props.disabled || busy() || !props.onValueChange);
184
+ const error = () => resolveMaybeAccessor(props.error) ?? localError();
185
+ const value = () => {
186
+ const current = resolveMaybeAccessor(props.value);
187
+ return current && !current.includes(props.fallbackMarker ?? "?fallback") ? current : null;
188
+ };
189
+ const compact = () => props.variant === "small";
190
+ const changeLabel = () => value() ? messages().changeImage : messages().addImage;
191
+ const changeIcon = () => value() ? "ti ti-pencil" : "ti ti-photo-plus";
192
+ const select = async file => {
193
+ if (!file || disabled()) return;
194
+ setBusy(true);
195
+ setLocalError();
196
+ try {
197
+ const transformed = await (props.transform ?? defaultImageTransform)(file);
198
+ commitFieldValue(props, transformed);
199
+ } catch (error) {
200
+ setLocalError(error instanceof Error ? error.message : messages().imageProcessingFailed);
201
+ } finally {
202
+ setBusy(false);
203
+ if (input) input.value = "";
204
+ }
205
+ };
206
+ return _$createComponent(Field, {
207
+ get ["class"]() {
208
+ return props.class;
209
+ },
210
+ get label() {
211
+ return props.label;
212
+ },
213
+ get description() {
214
+ return props.description;
215
+ },
216
+ get error() {
217
+ return error();
218
+ },
219
+ meta: meta,
220
+ get required() {
221
+ return props.required;
222
+ },
223
+ get disabled() {
224
+ return disabled();
225
+ },
226
+ get children() {
227
+ var _el$12 = _$getNextElement(_tmpl$7),
228
+ _el$13 = _el$12.firstChild,
229
+ _el$14 = _el$13.nextSibling,
230
+ _el$17 = _el$14.firstChild,
231
+ [_el$18, _co$3] = _$getNextMarker(_el$17.nextSibling),
232
+ _el$19 = _el$18.nextSibling,
233
+ [_el$20, _co$4] = _$getNextMarker(_el$19.nextSibling),
234
+ _el$21 = _el$14.nextSibling;
235
+ _$insert(_el$13, _$createComponent(Show, {
236
+ get when() {
237
+ return value();
238
+ },
239
+ get fallback() {
240
+ return _$getNextElement(_tmpl$8);
241
+ },
242
+ children: source => (() => {
243
+ var _el$23 = _$getNextElement(_tmpl$9);
244
+ _$effect(_p$ => {
245
+ var _v$0 = source(),
246
+ _v$1 = typeof props.label === "string" ? props.label : messages().selectedImage;
247
+ _v$0 !== _p$.e && _$setAttribute(_el$23, "src", _p$.e = _v$0);
248
+ _v$1 !== _p$.t && _$setAttribute(_el$23, "alt", _p$.t = _v$1);
249
+ return _p$;
250
+ }, {
251
+ e: undefined,
252
+ t: undefined
253
+ });
254
+ return _el$23;
255
+ })()
256
+ }));
257
+ _$insert(_el$14, _$createComponent(Show, {
258
+ get when() {
259
+ return compact();
260
+ },
261
+ get fallback() {
262
+ return _$createComponent(Button, {
263
+ variant: "secondary",
264
+ get loading() {
265
+ return busy();
266
+ },
267
+ get loadingLabel() {
268
+ return messages().processingImage;
269
+ },
270
+ get disabled() {
271
+ return disabled();
272
+ },
273
+ onClick: () => input?.click(),
274
+ get children() {
275
+ return [(() => {
276
+ var _el$24 = _$getNextElement(_tmpl$5);
277
+ _$effect(() => _$className(_el$24, changeIcon()));
278
+ return _el$24;
279
+ })(), _$memo(() => _$memo(() => !!value())() ? messages().change : messages().add)];
280
+ }
281
+ });
282
+ },
283
+ get children() {
284
+ return _$createComponent(IconButton, {
285
+ get label() {
286
+ return changeLabel();
287
+ },
288
+ get loading() {
289
+ return busy();
290
+ },
291
+ get loadingLabel() {
292
+ return messages().processingImage;
293
+ },
294
+ get disabled() {
295
+ return disabled();
296
+ },
297
+ onClick: () => input?.click(),
298
+ get children() {
299
+ var _el$15 = _$getNextElement(_tmpl$5);
300
+ _$effect(() => _$className(_el$15, changeIcon()));
301
+ return _el$15;
302
+ }
303
+ });
304
+ }
305
+ }), _el$18, _co$3);
306
+ _$insert(_el$14, _$createComponent(Show, {
307
+ get when() {
308
+ return value();
309
+ },
310
+ get children() {
311
+ return _$createComponent(Show, {
312
+ get when() {
313
+ return compact();
314
+ },
315
+ get fallback() {
316
+ return _$createComponent(Button, {
317
+ variant: "ghost",
318
+ get disabled() {
319
+ return disabled();
320
+ },
321
+ onClick: () => commitFieldValue(props, null),
322
+ get children() {
323
+ return [_$getNextElement(_tmpl$6), " Remove"];
324
+ }
325
+ });
326
+ },
327
+ get children() {
328
+ return _$createComponent(IconButton, {
329
+ get label() {
330
+ return messages().removeImage;
331
+ },
332
+ get disabled() {
333
+ return disabled();
334
+ },
335
+ onClick: () => commitFieldValue(props, null),
336
+ get children() {
337
+ return _$getNextElement(_tmpl$6);
338
+ }
339
+ });
340
+ }
341
+ });
342
+ }
343
+ }), _el$20, _co$4);
344
+ var _ref$2 = input;
345
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$21) : input = _el$21;
346
+ _$spread(_el$21, _$mergeProps({
347
+ get id() {
348
+ return meta.controlId;
349
+ },
350
+ get accept() {
351
+ return props.accept ?? DEFAULT_IMAGE_ACCEPT;
352
+ },
353
+ get disabled() {
354
+ return disabled();
355
+ },
356
+ get required() {
357
+ return _$memo(() => !!props.required)() && !value();
358
+ }
359
+ }, () => fieldControlAria(meta, {
360
+ ...props,
361
+ error
362
+ }), {
363
+ "onChange": event => void select(event.currentTarget.files?.[0])
364
+ }), false, false);
365
+ _$effect(_p$ => {
366
+ var _v$5 = props.round ? "true" : undefined,
367
+ _v$6 = props.variant ?? "default",
368
+ _v$7 = props.label ? meta.labelId : undefined,
369
+ _v$8 = !props.label ? props["aria-label"] : undefined,
370
+ _v$9 = fieldControlAria(meta, {
371
+ ...props,
372
+ error
373
+ })["aria-describedby"];
374
+ _v$5 !== _p$.e && _$setAttribute(_el$12, "data-round", _p$.e = _v$5);
375
+ _v$6 !== _p$.t && _$setAttribute(_el$12, "data-variant", _p$.t = _v$6);
376
+ _v$7 !== _p$.a && _$setAttribute(_el$12, "aria-labelledby", _p$.a = _v$7);
377
+ _v$8 !== _p$.o && _$setAttribute(_el$12, "aria-label", _p$.o = _v$8);
378
+ _v$9 !== _p$.i && _$setAttribute(_el$12, "aria-describedby", _p$.i = _v$9);
379
+ return _p$;
380
+ }, {
381
+ e: undefined,
382
+ t: undefined,
383
+ a: undefined,
384
+ o: undefined,
385
+ i: undefined
386
+ });
387
+ _$runHydrationEvents();
388
+ return _el$12;
389
+ }
390
+ });
391
+ }
392
+ const clamp = (value, min, max) => Math.max(min, Math.min(max, value));
393
+ const imageElementReady = async image => {
394
+ if (image.complete && image.naturalWidth > 0) return;
395
+ await new Promise((resolve, reject) => {
396
+ image.addEventListener("load", () => resolve(), {
397
+ once: true
398
+ });
399
+ image.addEventListener("error", () => reject(new Error("Failed to load image.")), {
400
+ once: true
401
+ });
402
+ });
403
+ };
404
+ const loadPreviewState = async source => {
405
+ const sourceImage = source instanceof HTMLImageElement ? source : Object.assign(new Image(), {
406
+ crossOrigin: source instanceof Blob ? undefined : "anonymous",
407
+ src: source instanceof HTMLCanvasElement ? source.toDataURL("image/png") : source instanceof Blob ? URL.createObjectURL(source) : source
408
+ });
409
+ try {
410
+ await imageElementReady(sourceImage);
411
+ return {
412
+ url: source instanceof HTMLImageElement ? source.currentSrc || source.src : sourceImage.src,
413
+ objectUrl: source instanceof Blob,
414
+ sourceWidth: sourceImage.naturalWidth || sourceImage.width,
415
+ sourceHeight: sourceImage.naturalHeight || sourceImage.height
416
+ };
417
+ } catch (error) {
418
+ if (source instanceof Blob) URL.revokeObjectURL(sourceImage.src);
419
+ throw error;
420
+ }
421
+ };
422
+ export function ImageCropper(props) {
423
+ const messages = useUiMessages();
424
+ let frame;
425
+ let activePreview = null;
426
+ const aspect = () => props.aspect ?? "free";
427
+ const previewShape = () => props.previewShape ?? "rect";
428
+ const disabled = () => props.disabled ?? false;
429
+ const [preview, setPreview] = createSignal(null);
430
+ const [crop, setCrop] = createSignal(null);
431
+ const [rotation, setRotation] = createSignal(0);
432
+ const [loading, setLoading] = createSignal(true);
433
+ const [error, setError] = createSignal(null);
434
+ const [drag, setDrag] = createSignal(null);
435
+ const previewSize = () => {
436
+ const currentPreview = preview();
437
+ if (!currentPreview) return null;
438
+ const swapsDimensions = rotation() === 90 || rotation() === 270;
439
+ return {
440
+ width: swapsDimensions ? currentPreview.sourceHeight : currentPreview.sourceWidth,
441
+ height: swapsDimensions ? currentPreview.sourceWidth : currentPreview.sourceHeight
442
+ };
443
+ };
444
+ const replacePreview = next => {
445
+ if (activePreview?.objectUrl) URL.revokeObjectURL(activePreview.url);
446
+ activePreview = next;
447
+ setPreview(next);
448
+ };
449
+ onCleanup(() => {
450
+ if (activePreview?.objectUrl) URL.revokeObjectURL(activePreview.url);
451
+ });
452
+ createEffect(() => {
453
+ props.source;
454
+ setRotation(0);
455
+ setCrop(null);
456
+ });
457
+ createEffect(() => {
458
+ const source = props.source;
459
+ let disposed = false;
460
+ replacePreview(null);
461
+ setLoading(true);
462
+ setError(null);
463
+ void (async () => {
464
+ try {
465
+ const nextPreview = await loadPreviewState(source);
466
+ if (disposed) {
467
+ if (nextPreview.objectUrl) URL.revokeObjectURL(nextPreview.url);
468
+ return;
469
+ }
470
+ replacePreview(nextPreview);
471
+ } catch {
472
+ if (disposed) return;
473
+ replacePreview(null);
474
+ setCrop(null);
475
+ setError(messages().failedLoadImage);
476
+ } finally {
477
+ if (!disposed) setLoading(false);
478
+ }
479
+ })();
480
+ onCleanup(() => {
481
+ disposed = true;
482
+ });
483
+ });
484
+ createEffect(() => {
485
+ const currentSize = previewSize();
486
+ const currentAspect = aspect();
487
+ if (!currentSize) return;
488
+ setCrop(current => clampImageCropRect(current ?? getInitialImageCropRect(currentSize, currentAspect), currentSize, currentAspect));
489
+ });
490
+ createEffect(() => {
491
+ const currentCrop = crop();
492
+ const currentPreview = preview();
493
+ props.onValueChange?.(currentCrop && currentPreview ? {
494
+ crop: currentCrop,
495
+ rotation: rotation()
496
+ } : null);
497
+ });
498
+ const readPointerPosition = event => {
499
+ if (!frame) return {
500
+ x: 0,
501
+ y: 0
502
+ };
503
+ const rect = frame.getBoundingClientRect();
504
+ return {
505
+ x: (event.clientX - rect.left) / Math.max(1, rect.width),
506
+ y: (event.clientY - rect.top) / Math.max(1, rect.height)
507
+ };
508
+ };
509
+ const moveCrop = event => {
510
+ const state = drag();
511
+ const currentSize = previewSize();
512
+ if (!state || !currentSize || state.pointerId !== event.pointerId) return;
513
+ event.preventDefault();
514
+ const point = readPointerPosition(event);
515
+ const dx = point.x - state.startX;
516
+ const dy = point.y - state.startY;
517
+ const start = state.startCrop;
518
+ if (state.handle === "move") {
519
+ setCrop(clampImageCropRect({
520
+ ...start,
521
+ x: start.x + dx,
522
+ y: start.y + dy
523
+ }, currentSize, aspect()));
524
+ return;
525
+ }
526
+ setCrop(resizeImageCropFromCorner(start, currentSize, aspect(), state.handle, dx, dy));
527
+ };
528
+ const endDrag = event => {
529
+ const state = drag();
530
+ if (!state || state.pointerId !== event.pointerId) return;
531
+ window.removeEventListener("pointermove", moveCrop);
532
+ window.removeEventListener("pointerup", endDrag);
533
+ window.removeEventListener("pointercancel", endDrag);
534
+ setDrag(null);
535
+ };
536
+ const startDrag = (handle, event) => {
537
+ const currentCrop = crop();
538
+ if (!currentCrop || disabled()) return;
539
+ event.preventDefault();
540
+ event.stopPropagation();
541
+ event.currentTarget.setPointerCapture?.(event.pointerId);
542
+ const point = readPointerPosition(event);
543
+ setDrag({
544
+ handle,
545
+ pointerId: event.pointerId,
546
+ startX: point.x,
547
+ startY: point.y,
548
+ startCrop: currentCrop
549
+ });
550
+ window.addEventListener("pointermove", moveCrop);
551
+ window.addEventListener("pointerup", endDrag);
552
+ window.addEventListener("pointercancel", endDrag);
553
+ };
554
+ onCleanup(() => {
555
+ if (typeof window === "undefined") return;
556
+ window.removeEventListener("pointermove", moveCrop);
557
+ window.removeEventListener("pointerup", endDrag);
558
+ window.removeEventListener("pointercancel", endDrag);
559
+ });
560
+ const rotateRight = () => {
561
+ if (disabled()) return;
562
+ setRotation(current => rotateImageCropRight(current));
563
+ };
564
+ const nudgeCrop = (handle, event) => {
565
+ if (disabled() || !["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"].includes(event.key)) return;
566
+ const current = crop();
567
+ const currentSize = previewSize();
568
+ if (!current || !currentSize) return;
569
+ event.preventDefault();
570
+ const step = event.shiftKey ? 0.05 : 0.01;
571
+ const dx = event.key === "ArrowLeft" ? -step : event.key === "ArrowRight" ? step : 0;
572
+ const dy = event.key === "ArrowUp" ? -step : event.key === "ArrowDown" ? step : 0;
573
+ setCrop(handle === "move" ? clampImageCropRect({
574
+ ...current,
575
+ x: current.x + dx,
576
+ y: current.y + dy
577
+ }, currentSize, aspect()) : resizeImageCropFromCorner(current, currentSize, aspect(), handle, dx, dy));
578
+ };
579
+ const previewFrameStyle = () => {
580
+ const currentSize = previewSize();
581
+ if (!currentSize) return {};
582
+ return {
583
+ "aspect-ratio": `${currentSize.width} / ${currentSize.height}`,
584
+ "max-width": `min(100%, calc(min(58vh, 24rem) * ${currentSize.width} / ${currentSize.height}))`
585
+ };
586
+ };
587
+ const previewImageStyle = () => {
588
+ const currentPreview = preview();
589
+ const currentSize = previewSize();
590
+ if (!currentPreview || !currentSize) return {};
591
+ const swapsDimensions = rotation() === 90 || rotation() === 270;
592
+ return {
593
+ left: "50%",
594
+ top: "50%",
595
+ width: swapsDimensions ? `${currentPreview.sourceWidth / currentSize.width * 100}%` : "100%",
596
+ height: swapsDimensions ? `${currentPreview.sourceHeight / currentSize.height * 100}%` : "100%",
597
+ "max-width": "none",
598
+ "object-fit": "fill",
599
+ transform: `translate(-50%, -50%) rotate(${rotation()}deg)`
600
+ };
601
+ };
602
+ const cropStyle = () => {
603
+ const currentCrop = crop();
604
+ if (!currentCrop) return {};
605
+ return {
606
+ left: `${currentCrop.x * 100}%`,
607
+ top: `${currentCrop.y * 100}%`,
608
+ width: `${currentCrop.width * 100}%`,
609
+ height: `${currentCrop.height * 100}%`,
610
+ "box-shadow": "0 0 0 9999px rgba(0,0,0,.42)"
611
+ };
612
+ };
613
+ const showResizeHandles = () => previewShape() !== "circle";
614
+ return (() => {
615
+ var _el$26 = _$getNextElement(_tmpl$1),
616
+ _el$27 = _el$26.firstChild;
617
+ _$insert(_el$27, _$createComponent(Show, {
618
+ get when() {
619
+ return !loading();
620
+ },
621
+ get fallback() {
622
+ return (() => {
623
+ var _el$32 = _$getNextElement(_tmpl$10);
624
+ _$insert(_el$32, () => messages().preparingImage);
625
+ return _el$32;
626
+ })();
627
+ },
628
+ get children() {
629
+ return _$createComponent(Show, {
630
+ get when() {
631
+ return !error();
632
+ },
633
+ get fallback() {
634
+ return (() => {
635
+ var _el$33 = _$getNextElement(_tmpl$11);
636
+ _$insert(_el$33, error);
637
+ return _el$33;
638
+ })();
639
+ },
640
+ get children() {
641
+ return _$createComponent(Show, {
642
+ get when() {
643
+ return _$memo(() => !!preview())() && crop();
644
+ },
645
+ get children() {
646
+ var _el$28 = _$getNextElement(_tmpl$0),
647
+ _el$29 = _el$28.firstChild,
648
+ _el$30 = _el$29.nextSibling,
649
+ _el$31 = _el$30.nextSibling;
650
+ var _ref$3 = frame;
651
+ typeof _ref$3 === "function" ? _$use(_ref$3, _el$28) : frame = _el$28;
652
+ _$setAttribute(_el$29, "draggable", false);
653
+ _el$30.$$keydown = event => nudgeCrop("move", event);
654
+ _el$30.$$pointerdown = event => startDrag("move", event);
655
+ _$insert(_el$30, _$createComponent(Show, {
656
+ get when() {
657
+ return showResizeHandles();
658
+ },
659
+ get children() {
660
+ return _$createComponent(For, {
661
+ each: ["nw", "ne", "sw", "se"],
662
+ children: handle => (() => {
663
+ var _el$34 = _$getNextElement(_tmpl$12);
664
+ _el$34.$$keydown = event => nudgeCrop(handle, event);
665
+ _el$34.$$pointerdown = event => startDrag(handle, event);
666
+ _$setAttribute(_el$34, "data-handle", handle);
667
+ _$effect(_p$ => {
668
+ var _v$21 = messages().resizeCrop({
669
+ handle
670
+ }),
671
+ _v$22 = disabled();
672
+ _v$21 !== _p$.e && _$setAttribute(_el$34, "aria-label", _p$.e = _v$21);
673
+ _v$22 !== _p$.t && _$setProperty(_el$34, "disabled", _p$.t = _v$22);
674
+ return _p$;
675
+ }, {
676
+ e: undefined,
677
+ t: undefined
678
+ });
679
+ _$runHydrationEvents();
680
+ return _el$34;
681
+ })()
682
+ });
683
+ }
684
+ }));
685
+ _el$31.$$click = rotateRight;
686
+ _$effect(_p$ => {
687
+ var _v$10 = previewFrameStyle(),
688
+ _v$11 = preview().url,
689
+ _v$12 = messages().cropPreview,
690
+ _v$13 = previewImageStyle(),
691
+ _v$14 = previewShape(),
692
+ _v$15 = cropStyle(),
693
+ _v$16 = disabled() ? undefined : 0,
694
+ _v$17 = messages().cropArea,
695
+ _v$18 = messages().rotateRight,
696
+ _v$19 = messages().rotateRight,
697
+ _v$20 = disabled() || !crop() || Boolean(error());
698
+ _p$.e = _$style(_el$28, _v$10, _p$.e);
699
+ _v$11 !== _p$.t && _$setAttribute(_el$29, "src", _p$.t = _v$11);
700
+ _v$12 !== _p$.a && _$setAttribute(_el$29, "alt", _p$.a = _v$12);
701
+ _p$.o = _$style(_el$29, _v$13, _p$.o);
702
+ _v$14 !== _p$.i && _$setAttribute(_el$30, "data-shape", _p$.i = _v$14);
703
+ _p$.n = _$style(_el$30, _v$15, _p$.n);
704
+ _v$16 !== _p$.s && _$setAttribute(_el$30, "tabindex", _p$.s = _v$16);
705
+ _v$17 !== _p$.h && _$setAttribute(_el$30, "aria-label", _p$.h = _v$17);
706
+ _v$18 !== _p$.r && _$setAttribute(_el$31, "title", _p$.r = _v$18);
707
+ _v$19 !== _p$.d && _$setAttribute(_el$31, "aria-label", _p$.d = _v$19);
708
+ _v$20 !== _p$.l && _$setProperty(_el$31, "disabled", _p$.l = _v$20);
709
+ return _p$;
710
+ }, {
711
+ e: undefined,
712
+ t: undefined,
713
+ a: undefined,
714
+ o: undefined,
715
+ i: undefined,
716
+ n: undefined,
717
+ s: undefined,
718
+ h: undefined,
719
+ r: undefined,
720
+ d: undefined,
721
+ l: undefined
722
+ });
723
+ _$runHydrationEvents();
724
+ return _el$28;
725
+ }
726
+ });
727
+ }
728
+ });
729
+ }
730
+ }));
731
+ _$effect(() => _$className(_el$26, `k2b-image-cropper ${props.class ?? ""}`));
732
+ return _el$26;
733
+ })();
734
+ }
735
+ _$delegateEvents(["pointerdown", "keydown", "click"]);
736
+ //# sourceMappingURL=FileInputs.js.map