@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,443 @@
1
+ import { ssrStyle as _$ssrStyle } from "solid-js/web";
2
+ import { ssrElement as _$ssrElement } from "solid-js/web";
3
+ import { mergeProps as _$mergeProps } from "solid-js/web";
4
+ import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
5
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
6
+ import { ssr as _$ssr } from "solid-js/web";
7
+ import { escape as _$escape } from "solid-js/web";
8
+ import { createComponent as _$createComponent } from "solid-js/web";
9
+ var _tmpl$ = ["<span class=\"k2b-dropdown__copy\"><span>", "</span>", "</span>"],
10
+ _tmpl$2 = ["<i", " aria-hidden=\"true\"></i>"],
11
+ _tmpl$3 = ["<img class=\"k2b-dropdown__image\"", " alt>"],
12
+ _tmpl$4 = ["<small>", "</small>"],
13
+ _tmpl$5 = ["<button type=\"button\" role=\"menuitem\" tabindex=\"-1\" class=\"", "\"", "", ">", "</button>"],
14
+ _tmpl$6 = ["<a", " role=\"menuitem\" tabindex=\"-1\" class=\"", "\"", ">", "</a>"],
15
+ _tmpl$7 = "<i class=\"ti ti-check\"></i>",
16
+ _tmpl$8 = ["<span class=\"k2b-dropdown__checkbox\" aria-hidden=\"true\">", "</span>"],
17
+ _tmpl$9 = "<i class=\"ti ti-check k2b-dropdown__check\" aria-hidden=\"true\"></i>",
18
+ _tmpl$0 = ["<button type=\"button\"", " tabindex=\"-1\" class=\"", "\"", "", ">", "", "", "<span class=\"k2b-dropdown__copy\"><span>", "</span>", "</span>", "</button>"],
19
+ _tmpl$1 = ["<span class=\"k2b-dropdown__color\" style=\"", "\" aria-hidden=\"true\"></span>"],
20
+ _tmpl$10 = ["<div class=\"k2b-dropdown__section\"", " role=\"group\"", ">", "", "</div>"],
21
+ _tmpl$11 = ["<div class=\"k2b-dropdown__label\">", "</div>"],
22
+ _tmpl$12 = ["<span class=\"", "\">", "<div", " popover=\"auto\" role=\"menu\"", " class=\"", "\" style=\"", "\"", ">", "</div></span>"];
23
+ import { createContext, createEffect, createSignal, createUniqueId, For, onCleanup, onMount, Show, splitProps, useContext } from "solid-js";
24
+ import { Tooltip } from "../feedback/Tooltip";
25
+ import { useUiMessages } from "../intl/messages";
26
+ import { Button } from "./Button";
27
+
28
+ /** Declarative radio or checkbox row for compact action menus. */
29
+
30
+ const MenuContext = createContext();
31
+ const DropdownContext = createContext();
32
+ const actionableItems = menu => menu ? Array.from(menu.querySelectorAll(["[role='menuitem']:not([aria-disabled='true'])", "[role='menuitemcheckbox']:not([aria-disabled='true'])", "[role='menuitemradio']:not([aria-disabled='true'])"].join(", "))) : [];
33
+ const focusMenuItem = (menu, index) => {
34
+ const items = actionableItems(menu);
35
+ if (items.length === 0) return;
36
+ items[(index + items.length) % items.length]?.focus();
37
+ };
38
+ export const dropdownPosition = (trigger, menu, position, viewport, gap = 4) => {
39
+ let left = trigger.left;
40
+ let top = trigger.bottom + gap;
41
+ if (position === "bottom-left" || position === "top-left") left = trigger.right - menu.width;
42
+ if (position === "top-right" || position === "top-left") top = trigger.top - menu.height - gap;
43
+ if (position === "right-start") {
44
+ left = trigger.right + gap;
45
+ top = trigger.top;
46
+ }
47
+ return {
48
+ left: Math.max(8, Math.min(left, viewport.width - menu.width - 8)),
49
+ top: Math.max(8, Math.min(top, viewport.height - menu.height - 8))
50
+ };
51
+ };
52
+ const itemContent = props => [_$createComponent(Show, {
53
+ get when() {
54
+ return props.image;
55
+ },
56
+ get fallback() {
57
+ return _$createComponent(Show, {
58
+ get when() {
59
+ return props.icon;
60
+ },
61
+ children: icon => _$ssr(_tmpl$2, _$ssrAttribute("class", _$escape(icon(), true), false))
62
+ });
63
+ },
64
+ children: image => _$ssr(_tmpl$3, _$ssrAttribute("src", _$escape(image(), true), false))
65
+ }), _$ssr(_tmpl$, _$escape(props.children), _$escape(_$createComponent(Show, {
66
+ get when() {
67
+ return props.description;
68
+ },
69
+ children: description => _$ssr(_tmpl$4, _$escape(description()))
70
+ })))];
71
+ export function DropdownItem(props) {
72
+ const menu = useContext(MenuContext);
73
+ const danger = () => props.danger || props.variant === "danger";
74
+ const content = itemContent(props);
75
+ return _$createComponent(Show, {
76
+ get when() {
77
+ return !props.disabled ? props.href : undefined;
78
+ },
79
+ get fallback() {
80
+ return _$ssr(_tmpl$5, `k2b-dropdown__item ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-danger", danger() ? "true" : _$escape(undefined, true), false), _$ssrAttribute("disabled", props.disabled, true) + _$ssrAttribute("aria-disabled", props.disabled ? "true" : _$escape(undefined, true), false), _$escape(content));
81
+ },
82
+ children: href => _$ssr(_tmpl$6, _$ssrAttribute("href", _$escape(href(), true), false) + _$ssrAttribute("target", props.external ? "_blank" : _$escape(undefined, true), false) + _$ssrAttribute("rel", props.external ? "noopener noreferrer" : _$escape(undefined, true), false), `k2b-dropdown__item ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-danger", danger() ? "true" : _$escape(undefined, true), false), _$escape(content))
83
+ });
84
+ }
85
+ function DropdownChoiceItem(props) {
86
+ const menu = useContext(MenuContext);
87
+ const checked = () => typeof props.checked === "function" ? props.checked() : props.checked;
88
+ return (// biome-ignore lint/a11y/useAriaPropsSupportedByRole: the runtime role is always menuitemcheckbox or menuitemradio, both of which support aria-checked.
89
+ _$ssr(_tmpl$0, _$ssrAttribute("role", props.choice === "checkbox" ? "menuitemcheckbox" : "menuitemradio", false) + _$ssrAttribute("aria-checked", _$escape(checked(), true), false) + _$ssrAttribute("aria-disabled", props.disabled ? "true" : _$escape(undefined, true), false), `k2b-dropdown__item ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-selected", checked() ? "true" : _$escape(undefined, true), false), _$ssrAttribute("disabled", props.disabled, true), _$escape(_$createComponent(Show, {
90
+ get when() {
91
+ return props.choice === "checkbox";
92
+ },
93
+ get children() {
94
+ return _$ssr(_tmpl$8, _$escape(_$createComponent(Show, {
95
+ get when() {
96
+ return checked();
97
+ },
98
+ get children() {
99
+ return _$ssr(_tmpl$7);
100
+ }
101
+ })));
102
+ }
103
+ })), _$escape(_$createComponent(Show, {
104
+ get when() {
105
+ return props.image;
106
+ },
107
+ get fallback() {
108
+ return _$createComponent(Show, {
109
+ get when() {
110
+ return props.icon;
111
+ },
112
+ children: icon => _$ssr(_tmpl$2, _$ssrAttribute("class", _$escape(icon(), true), false))
113
+ });
114
+ },
115
+ children: image => _$ssr(_tmpl$3, _$ssrAttribute("src", _$escape(image(), true), false))
116
+ })), _$escape(_$createComponent(Show, {
117
+ get when() {
118
+ return props.color;
119
+ },
120
+ children: color => _$ssr(_tmpl$1, _$ssrStyleProperty("--k2b-dropdown-color:", _$escape(color(), true)))
121
+ })), _$escape(props.label), _$escape(_$createComponent(Show, {
122
+ get when() {
123
+ return props.description;
124
+ },
125
+ children: description => _$ssr(_tmpl$4, _$escape(description()))
126
+ })), _$escape(_$createComponent(Show, {
127
+ get when() {
128
+ return props.choice === "radio" && checked();
129
+ },
130
+ get children() {
131
+ return _$ssr(_tmpl$9);
132
+ }
133
+ })))
134
+ );
135
+ }
136
+ export function DropdownItems(props) {
137
+ const messages = useUiMessages();
138
+ const renderItem = item => "choice" in item ? _$createComponent(DropdownChoiceItem, item) : _$createComponent(DropdownItem, {
139
+ get icon() {
140
+ return item.icon;
141
+ },
142
+ get image() {
143
+ return item.image;
144
+ },
145
+ get description() {
146
+ return item.description;
147
+ },
148
+ get variant() {
149
+ return item.variant;
150
+ },
151
+ get disabled() {
152
+ return item.disabled;
153
+ },
154
+ get ["class"]() {
155
+ return item.class;
156
+ },
157
+ get href() {
158
+ return "href" in item ? item.href : undefined;
159
+ },
160
+ get external() {
161
+ return "external" in item ? item.external : undefined;
162
+ },
163
+ get onSelect() {
164
+ return "action" in item ? item.action : undefined;
165
+ },
166
+ get children() {
167
+ return item.label;
168
+ }
169
+ });
170
+ return _$createComponent(MenuContext.Provider, {
171
+ get value() {
172
+ return {
173
+ close: props.close
174
+ };
175
+ },
176
+ get children() {
177
+ return _$createComponent(For, {
178
+ get each() {
179
+ return props.items;
180
+ },
181
+ children: (item, index) => _$createComponent(Show, {
182
+ get when() {
183
+ return "items" in item;
184
+ },
185
+ get fallback() {
186
+ return renderItem(item);
187
+ },
188
+ get children() {
189
+ return _$ssr(_tmpl$10, _$ssrAttribute("data-divided", index() > 0 ? "true" : _$escape(undefined, true), false), _$ssrAttribute("aria-label", _$escape(item.sectionLabel ?? messages().actions, true), false), _$escape(_$createComponent(Show, {
190
+ get when() {
191
+ return item.sectionLabel;
192
+ },
193
+ children: label => _$ssr(_tmpl$11, _$escape(label()))
194
+ })), _$escape(_$createComponent(For, {
195
+ get each() {
196
+ return item.items;
197
+ },
198
+ children: renderItem
199
+ })));
200
+ }
201
+ })
202
+ });
203
+ }
204
+ });
205
+ }
206
+ function DropdownTrigger(props) {
207
+ const context = useContext(DropdownContext);
208
+ if (!context) throw new Error("Dropdown.Trigger must be used inside Dropdown.Root");
209
+ const [local, rest] = splitProps(props, ["appearance", "children", "class", "disabled", "iconOnly", "label", "ref", "size", "tabIndex", "tooltip", "tooltipDelay", "tooltipPlacement", "type", "variant"]);
210
+ let target;
211
+ const disabled = () => Boolean(context.disabled() || local.disabled);
212
+ const register = element => {
213
+ target = element;
214
+ context.registerTrigger(element);
215
+ if (typeof local.ref === "function") local.ref(element);
216
+ };
217
+ const click = event => {
218
+ event.stopPropagation();
219
+ context.toggle();
220
+ };
221
+ if (local.appearance !== "plain") {
222
+ return _$createComponent(Button, _$mergeProps(rest, {
223
+ get ["aria-controls"]() {
224
+ return context.menuId;
225
+ },
226
+ get ["aria-expanded"]() {
227
+ return context.open();
228
+ },
229
+ "aria-haspopup": "menu",
230
+ get ["aria-label"]() {
231
+ return local.label;
232
+ },
233
+ get disabled() {
234
+ return disabled();
235
+ },
236
+ get tabIndex() {
237
+ return disabled() ? -1 : local.tabIndex;
238
+ },
239
+ onClick: click,
240
+ get onKeyDown() {
241
+ return context.triggerKeyDown;
242
+ },
243
+ get type() {
244
+ return local.type ?? "button";
245
+ },
246
+ get ["class"]() {
247
+ return `${local.iconOnly ? "k2b-icon-button" : ""} k2b-dropdown__trigger ${local.class ?? ""}`;
248
+ },
249
+ get size() {
250
+ return local.size;
251
+ },
252
+ get variant() {
253
+ return local.variant ?? (local.iconOnly ? "ghost" : undefined);
254
+ },
255
+ get tooltip() {
256
+ return local.tooltip;
257
+ },
258
+ get tooltipDelay() {
259
+ return local.tooltipDelay;
260
+ },
261
+ get tooltipPlacement() {
262
+ return local.tooltipPlacement;
263
+ },
264
+ get children() {
265
+ return local.children;
266
+ }
267
+ }));
268
+ }
269
+ return [_$ssrElement("button", _$mergeProps(rest, {
270
+ get ["aria-controls"]() {
271
+ return context.menuId;
272
+ },
273
+ get ["aria-expanded"]() {
274
+ return context.open();
275
+ },
276
+ "aria-haspopup": "menu",
277
+ get ["aria-label"]() {
278
+ return local.label;
279
+ },
280
+ get disabled() {
281
+ return disabled();
282
+ },
283
+ get tabIndex() {
284
+ return disabled() ? -1 : local.tabIndex;
285
+ },
286
+ get type() {
287
+ return local.type ?? "button";
288
+ },
289
+ get ["class"]() {
290
+ return `k2b-dropdown__trigger ${local.class ?? ""}`;
291
+ }
292
+ }), _$escape(local.children), false), _$createComponent(Show, {
293
+ get when() {
294
+ return local.tooltip !== false && local.tooltip !== undefined;
295
+ },
296
+ get children() {
297
+ return _$createComponent(Tooltip, {
298
+ get content() {
299
+ return local.tooltip;
300
+ },
301
+ target: () => target,
302
+ get delay() {
303
+ return local.tooltipDelay;
304
+ },
305
+ get disabled() {
306
+ return disabled();
307
+ },
308
+ get placement() {
309
+ return local.tooltipPlacement;
310
+ }
311
+ });
312
+ }
313
+ })];
314
+ }
315
+
316
+ /** Accessible top-layer menu with explicit trigger ownership. */
317
+ function DropdownRoot(props) {
318
+ const messages = useUiMessages();
319
+ const id = createUniqueId().replace(/[^a-zA-Z0-9_-]/g, "-");
320
+ const menuId = `k2b-dropdown-${id}`;
321
+ const [internalOpen, setInternalOpen] = createSignal(false);
322
+ let triggerRef;
323
+ let menuRef;
324
+ let mounted = false;
325
+ let viewportListenersAttached = false;
326
+ const isOpen = () => props.open ?? internalOpen();
327
+ const position = () => typeof props.position === "function" ? props.position() : props.position ?? (props.align === "end" ? "bottom-left" : "bottom-right");
328
+ const place = () => {
329
+ if (!triggerRef || !menuRef) return;
330
+ const rect = dropdownPosition(triggerRef.getBoundingClientRect(), menuRef.getBoundingClientRect(), position(), {
331
+ width: window.innerWidth,
332
+ height: window.innerHeight
333
+ });
334
+ menuRef.style.left = `${rect.left}px`;
335
+ menuRef.style.top = `${rect.top}px`;
336
+ };
337
+ const reposition = () => {
338
+ if (isOpen()) place();
339
+ };
340
+ const attachViewportListeners = () => {
341
+ if (viewportListenersAttached) return;
342
+ viewportListenersAttached = true;
343
+ window.addEventListener("resize", reposition);
344
+ window.addEventListener("scroll", reposition, true);
345
+ };
346
+ const detachViewportListeners = () => {
347
+ if (!viewportListenersAttached) return;
348
+ viewportListenersAttached = false;
349
+ window.removeEventListener("resize", reposition);
350
+ window.removeEventListener("scroll", reposition, true);
351
+ };
352
+ const close = (restoreFocus = true) => {
353
+ if (menuRef?.matches(":popover-open")) menuRef.hidePopover();
354
+ detachViewportListeners();
355
+ if (restoreFocus) queueMicrotask(() => triggerRef?.focus());
356
+ };
357
+ const open = (focus = "first") => {
358
+ if (props.disabled || !menuRef || menuRef.matches(":popover-open")) return;
359
+ menuRef.showPopover();
360
+ attachViewportListeners();
361
+ place();
362
+ queueMicrotask(() => {
363
+ if (focus) focusMenuItem(menuRef, focus === "first" ? 0 : -1);
364
+ });
365
+ };
366
+ const requestOpen = (next, focus = "first") => {
367
+ if (props.disabled && next) return;
368
+ if (props.open !== undefined) {
369
+ props.onOpenChange?.(next);
370
+ return;
371
+ }
372
+ if (next) open(focus);else close(false);
373
+ };
374
+ const handleMenuKeyDown = event => {
375
+ const items = actionableItems(menuRef);
376
+ const current = items.indexOf(document.activeElement);
377
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
378
+ event.preventDefault();
379
+ focusMenuItem(menuRef, current + (event.key === "ArrowDown" ? 1 : -1));
380
+ } else if (event.key === "Home" || event.key === "End") {
381
+ event.preventDefault();
382
+ focusMenuItem(menuRef, event.key === "Home" ? 0 : -1);
383
+ } else if (event.key === "Escape") {
384
+ event.preventDefault();
385
+ requestOpen(false);
386
+ queueMicrotask(() => triggerRef?.focus());
387
+ } else if (event.key === "Tab") {
388
+ requestOpen(false);
389
+ }
390
+ };
391
+ const context = {
392
+ disabled: () => Boolean(props.disabled),
393
+ menuId,
394
+ open: isOpen,
395
+ registerTrigger: element => {
396
+ triggerRef = element;
397
+ },
398
+ toggle: () => requestOpen(!isOpen()),
399
+ triggerKeyDown: event => {
400
+ if (!["Enter", " ", "ArrowDown", "ArrowUp"].includes(event.key)) return;
401
+ event.preventDefault();
402
+ event.stopPropagation();
403
+ if (isOpen()) {
404
+ focusMenuItem(menuRef, event.key === "ArrowUp" ? -1 : 0);
405
+ return;
406
+ }
407
+ requestOpen(true, event.key === "ArrowUp" ? "last" : "first");
408
+ }
409
+ };
410
+ createEffect(() => {
411
+ const controlled = props.open;
412
+ if (!mounted || controlled === undefined || !menuRef) return;
413
+ if (controlled && !menuRef.matches(":popover-open")) open(false);
414
+ if (!controlled && menuRef.matches(":popover-open")) close(false);
415
+ });
416
+ createEffect(() => {
417
+ if (mounted && props.disabled) close(false);
418
+ });
419
+ onMount(() => {
420
+ mounted = true;
421
+ if (props.open) open(false);
422
+ onCleanup(detachViewportListeners);
423
+ });
424
+ return _$createComponent(DropdownContext.Provider, {
425
+ value: context,
426
+ get children() {
427
+ return _$ssr(_tmpl$12, `k2b-dropdown ${_$escape(props.class ?? "", true)}`, _$escape(props.children), _$ssrAttribute("id", _$escape(menuId, true), false), _$ssrAttribute("aria-label", _$escape(props.label ?? messages().dropdownMenu, true), false), `k2b-dropdown__menu ${_$escape(props.menuClass ?? "", true)}`, _$ssrStyle(props.width ? {
428
+ "--k2b-dropdown-width": props.width
429
+ } : undefined), _$ssrAttribute("data-position", _$escape(position(), true), false), _$escape(_$createComponent(DropdownItems, {
430
+ get items() {
431
+ return props.items;
432
+ },
433
+ close: close
434
+ })));
435
+ }
436
+ });
437
+ }
438
+ export const Dropdown = DropdownRoot;
439
+ Dropdown.Root = DropdownRoot;
440
+ Dropdown.Trigger = DropdownTrigger;
441
+ Dropdown.Item = DropdownItem;
442
+ export default Dropdown;
443
+ //# sourceMappingURL=Dropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","createEffect","createSignal","createUniqueId","For","onCleanup","onMount","Show","splitProps","useContext","Tooltip","useUiMessages","Button","MenuContext","DropdownContext","actionableItems","menu","Array","from","querySelectorAll","join","focusMenuItem","index","items","length","focus","dropdownPosition","trigger","position","viewport","gap","left","top","bottom","right","width","height","Math","max","min","itemContent","props","_$createComponent","when","image","fallback","icon","children","_$ssr","_tmpl$2","_$ssrAttribute","_$escape","_tmpl$3","_tmpl$","description","_tmpl$4","DropdownItem","danger","variant","content","disabled","href","undefined","_tmpl$5","class","_tmpl$6","external","DropdownChoiceItem","checked","_tmpl$0","choice","_tmpl$8","_tmpl$7","color","_tmpl$1","_$ssrStyleProperty","label","_tmpl$9","DropdownItems","messages","renderItem","item","onSelect","action","Provider","value","close","each","_tmpl$10","sectionLabel","actions","_tmpl$11","DropdownTrigger","context","Error","local","rest","target","Boolean","register","element","registerTrigger","ref","click","event","stopPropagation","toggle","appearance","_$mergeProps","aria-controls","menuId","aria-expanded","open","aria-label","tabIndex","onClick","onKeyDown","triggerKeyDown","type","iconOnly","size","tooltip","tooltipDelay","tooltipPlacement","_$ssrElement","delay","placement","DropdownRoot","id","replace","internalOpen","setInternalOpen","triggerRef","menuRef","mounted","viewportListenersAttached","isOpen","align","place","rect","getBoundingClientRect","window","innerWidth","innerHeight","style","reposition","attachViewportListeners","addEventListener","detachViewportListeners","removeEventListener","restoreFocus","matches","hidePopover","queueMicrotask","showPopover","requestOpen","next","onOpenChange","handleMenuKeyDown","current","indexOf","document","activeElement","key","preventDefault","includes","controlled","_tmpl$12","dropdownMenu","menuClass","_$ssrStyle","Dropdown","Root","Trigger","Item"],"sources":["actions/Dropdown.tsx"],"sourcesContent":["import {\n createContext,\n createEffect,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n onCleanup,\n onMount,\n Show,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport { Tooltip, type TooltipPlacement } from \"../feedback/Tooltip\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Button, type ButtonProps, type ButtonSize, type ButtonVariant } from \"./Button\";\n\nexport type DropdownPosition = \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\" | \"right-start\";\n\nexport type DropdownActionBase = {\n class?: string;\n disabled?: boolean;\n icon?: string;\n image?: string;\n label: string;\n description?: string;\n variant?: \"danger\";\n};\n\nexport type DropdownAction =\n | (DropdownActionBase & {\n action: () => void;\n href?: never;\n external?: never;\n })\n | (DropdownActionBase & {\n href: string;\n external?: boolean;\n action?: never;\n })\n | (DropdownActionBase & {\n disabled: true;\n action?: never;\n href?: never;\n external?: never;\n });\n\n/** Declarative radio or checkbox row for compact action menus. */\nexport type DropdownChoice = DropdownActionBase & {\n action: () => void;\n checked: boolean | (() => boolean);\n choice: \"checkbox\" | \"radio\";\n closeOnSelect?: boolean;\n color?: string;\n};\n\nexport type DropdownSection = {\n sectionLabel?: string;\n items: readonly (DropdownAction | DropdownChoice)[];\n};\n\nexport type DropdownItem = DropdownAction | DropdownChoice | DropdownSection;\n\nexport type DropdownProps = {\n items: readonly DropdownItem[];\n children: JSX.Element;\n position?: DropdownPosition | (() => DropdownPosition);\n /** Menu width as a CSS length. Defaults to `12rem`. */\n width?: string;\n class?: string;\n menuClass?: string;\n onClose?: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n label?: string;\n align?: \"start\" | \"end\";\n};\n\nexport type DropdownTriggerProps = Omit<\n ButtonProps,\n \"aria-controls\" | \"aria-expanded\" | \"aria-haspopup\" | \"children\" | \"disabled\" | \"onClick\" | \"onKeyDown\"\n> & {\n children: JSX.Element;\n /** Use `plain` when a specialized component class owns the complete visual treatment. */\n appearance?: \"button\" | \"plain\";\n disabled?: boolean;\n iconOnly?: boolean;\n label?: string;\n size?: ButtonSize;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n variant?: ButtonVariant;\n};\n\nexport type DropdownItemProps = {\n children: JSX.Element;\n icon?: string;\n image?: string;\n description?: string;\n disabled?: boolean;\n danger?: boolean;\n variant?: \"danger\";\n href?: string;\n external?: boolean;\n onSelect?: () => void;\n class?: string;\n};\n\ntype MenuContextValue = {\n close: (restoreFocus?: boolean) => void;\n};\n\ntype DropdownContextValue = {\n disabled: () => boolean;\n menuId: string;\n open: () => boolean;\n registerTrigger: (element: HTMLButtonElement) => void;\n toggle: () => void;\n triggerKeyDown: JSX.EventHandlerUnion<HTMLButtonElement, KeyboardEvent>;\n};\n\nconst MenuContext = createContext<MenuContextValue>();\nconst DropdownContext = createContext<DropdownContextValue>();\n\nconst actionableItems = (menu: HTMLElement | undefined): HTMLElement[] =>\n menu\n ? Array.from(\n menu.querySelectorAll<HTMLElement>(\n [\n \"[role='menuitem']:not([aria-disabled='true'])\",\n \"[role='menuitemcheckbox']:not([aria-disabled='true'])\",\n \"[role='menuitemradio']:not([aria-disabled='true'])\",\n ].join(\", \"),\n ),\n )\n : [];\n\nconst focusMenuItem = (menu: HTMLElement | undefined, index: number): void => {\n const items = actionableItems(menu);\n if (items.length === 0) return;\n items[(index + items.length) % items.length]?.focus();\n};\n\nexport const dropdownPosition = (\n trigger: DOMRect,\n menu: Pick<DOMRect, \"width\" | \"height\">,\n position: DropdownPosition,\n viewport: { width: number; height: number },\n gap = 4,\n): { left: number; top: number } => {\n let left = trigger.left;\n let top = trigger.bottom + gap;\n\n if (position === \"bottom-left\" || position === \"top-left\") left = trigger.right - menu.width;\n if (position === \"top-right\" || position === \"top-left\") top = trigger.top - menu.height - gap;\n if (position === \"right-start\") {\n left = trigger.right + gap;\n top = trigger.top;\n }\n\n return {\n left: Math.max(8, Math.min(left, viewport.width - menu.width - 8)),\n top: Math.max(8, Math.min(top, viewport.height - menu.height - 8)),\n };\n};\n\nconst itemContent = (props: { description?: string; icon?: string; image?: string; children: JSX.Element }): JSX.Element => (\n <>\n <Show when={props.image} fallback={<Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(image) => <img class=\"k2b-dropdown__image\" src={image()} alt=\"\" />}\n </Show>\n <span class=\"k2b-dropdown__copy\">\n <span>{props.children}</span>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n </>\n);\n\nexport function DropdownItem(props: DropdownItemProps): JSX.Element {\n const menu = useContext(MenuContext);\n const danger = () => props.danger || props.variant === \"danger\";\n const content = itemContent(props);\n\n return (\n <Show\n when={!props.disabled ? props.href : undefined}\n fallback={\n <button\n type=\"button\"\n role=\"menuitem\"\n tabIndex={-1}\n class={`k2b-dropdown__item ${props.class ?? \"\"}`}\n data-danger={danger() ? \"true\" : undefined}\n disabled={props.disabled}\n aria-disabled={props.disabled ? \"true\" : undefined}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n menu?.close();\n props.onSelect?.();\n }}\n >\n {content}\n </button>\n }\n >\n {(href) => (\n <a\n href={href()}\n target={props.external ? \"_blank\" : undefined}\n rel={props.external ? \"noopener noreferrer\" : undefined}\n role=\"menuitem\"\n tabIndex={-1}\n class={`k2b-dropdown__item ${props.class ?? \"\"}`}\n data-danger={danger() ? \"true\" : undefined}\n onClick={() => {\n menu?.close(false);\n props.onSelect?.();\n }}\n >\n {content}\n </a>\n )}\n </Show>\n );\n}\n\nfunction DropdownChoiceItem(props: DropdownChoice): JSX.Element {\n const menu = useContext(MenuContext);\n const checked = () => (typeof props.checked === \"function\" ? props.checked() : props.checked);\n return (\n // biome-ignore lint/a11y/useAriaPropsSupportedByRole: the runtime role is always menuitemcheckbox or menuitemradio, both of which support aria-checked.\n <button\n type=\"button\"\n role={props.choice === \"checkbox\" ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={checked()}\n aria-disabled={props.disabled ? \"true\" : undefined}\n tabIndex={-1}\n class={`k2b-dropdown__item ${props.class ?? \"\"}`}\n data-selected={checked() ? \"true\" : undefined}\n disabled={props.disabled}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n if (props.closeOnSelect !== false) menu?.close();\n props.action();\n }}\n >\n <Show when={props.choice === \"checkbox\"}>\n <span class=\"k2b-dropdown__checkbox\" aria-hidden=\"true\">\n <Show when={checked()}>\n <i class=\"ti ti-check\" />\n </Show>\n </span>\n </Show>\n <Show when={props.image} fallback={<Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(image) => <img class=\"k2b-dropdown__image\" src={image()} alt=\"\" />}\n </Show>\n <Show when={props.color}>\n {(color) => <span class=\"k2b-dropdown__color\" style={{ \"--k2b-dropdown-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-dropdown__copy\">\n <span>{props.label}</span>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n <Show when={props.choice === \"radio\" && checked()}>\n <i class=\"ti ti-check k2b-dropdown__check\" aria-hidden=\"true\" />\n </Show>\n </button>\n );\n}\n\nexport function DropdownItems(props: { items: readonly DropdownItem[]; close: (restoreFocus?: boolean) => void }): JSX.Element {\n const messages = useUiMessages();\n const renderItem = (item: DropdownAction | DropdownChoice): JSX.Element =>\n \"choice\" in item ? (\n <DropdownChoiceItem {...item} />\n ) : (\n <DropdownItem\n icon={item.icon}\n image={item.image}\n description={item.description}\n variant={item.variant}\n disabled={item.disabled}\n class={item.class}\n href={\"href\" in item ? item.href : undefined}\n external={\"external\" in item ? item.external : undefined}\n onSelect={\"action\" in item ? item.action : undefined}\n >\n {item.label}\n </DropdownItem>\n );\n\n return (\n <MenuContext.Provider value={{ close: props.close }}>\n <For each={props.items}>\n {(item, index) => (\n <Show when={\"items\" in item} fallback={renderItem(item as DropdownAction | DropdownChoice)}>\n <div\n class=\"k2b-dropdown__section\"\n data-divided={index() > 0 ? \"true\" : undefined}\n role=\"group\"\n aria-label={(item as DropdownSection).sectionLabel ?? messages().actions}\n >\n <Show when={(item as DropdownSection).sectionLabel}>{(label) => <div class=\"k2b-dropdown__label\">{label()}</div>}</Show>\n <For each={(item as DropdownSection).items}>{renderItem}</For>\n </div>\n </Show>\n )}\n </For>\n </MenuContext.Provider>\n );\n}\n\nfunction DropdownTrigger(props: DropdownTriggerProps): JSX.Element {\n const context = useContext(DropdownContext);\n if (!context) throw new Error(\"Dropdown.Trigger must be used inside Dropdown.Root\");\n const [local, rest] = splitProps(props, [\n \"appearance\",\n \"children\",\n \"class\",\n \"disabled\",\n \"iconOnly\",\n \"label\",\n \"ref\",\n \"size\",\n \"tabIndex\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"type\",\n \"variant\",\n ]);\n let target: HTMLButtonElement | undefined;\n const disabled = () => Boolean(context.disabled() || local.disabled);\n const register = (element: HTMLButtonElement) => {\n target = element;\n context.registerTrigger(element);\n if (typeof local.ref === \"function\") local.ref(element);\n };\n const click: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent> = (event) => {\n event.stopPropagation();\n context.toggle();\n };\n\n if (local.appearance !== \"plain\") {\n return (\n <Button\n {...rest}\n ref={register}\n aria-controls={context.menuId}\n aria-expanded={context.open()}\n aria-haspopup=\"menu\"\n aria-label={local.label}\n disabled={disabled()}\n tabIndex={disabled() ? -1 : local.tabIndex}\n onClick={click}\n onKeyDown={context.triggerKeyDown}\n type={local.type ?? \"button\"}\n class={`${local.iconOnly ? \"k2b-icon-button\" : \"\"} k2b-dropdown__trigger ${local.class ?? \"\"}`}\n size={local.size}\n variant={local.variant ?? (local.iconOnly ? \"ghost\" : undefined)}\n tooltip={local.tooltip}\n tooltipDelay={local.tooltipDelay}\n tooltipPlacement={local.tooltipPlacement}\n >\n {local.children}\n </Button>\n );\n }\n\n return (\n <>\n <button\n {...rest}\n ref={register}\n aria-controls={context.menuId}\n aria-expanded={context.open()}\n aria-haspopup=\"menu\"\n aria-label={local.label}\n disabled={disabled()}\n tabIndex={disabled() ? -1 : local.tabIndex}\n onClick={click}\n onKeyDown={context.triggerKeyDown}\n type={local.type ?? \"button\"}\n class={`k2b-dropdown__trigger ${local.class ?? \"\"}`}\n >\n {local.children}\n </button>\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip\n content={local.tooltip as JSX.Element}\n target={() => target}\n delay={local.tooltipDelay}\n disabled={disabled()}\n placement={local.tooltipPlacement}\n />\n </Show>\n </>\n );\n}\n\n/** Accessible top-layer menu with explicit trigger ownership. */\nfunction DropdownRoot(props: DropdownProps): JSX.Element {\n const messages = useUiMessages();\n const id = createUniqueId().replace(/[^a-zA-Z0-9_-]/g, \"-\");\n const menuId = `k2b-dropdown-${id}`;\n const [internalOpen, setInternalOpen] = createSignal(false);\n let triggerRef: HTMLButtonElement | undefined;\n let menuRef: HTMLDivElement | undefined;\n let mounted = false;\n let viewportListenersAttached = false;\n\n const isOpen = () => props.open ?? internalOpen();\n const position = (): DropdownPosition =>\n typeof props.position === \"function\" ? props.position() : (props.position ?? (props.align === \"end\" ? \"bottom-left\" : \"bottom-right\"));\n\n const place = () => {\n if (!triggerRef || !menuRef) return;\n const rect = dropdownPosition(triggerRef.getBoundingClientRect(), menuRef.getBoundingClientRect(), position(), {\n width: window.innerWidth,\n height: window.innerHeight,\n });\n menuRef.style.left = `${rect.left}px`;\n menuRef.style.top = `${rect.top}px`;\n };\n const reposition = () => {\n if (isOpen()) place();\n };\n const attachViewportListeners = () => {\n if (viewportListenersAttached) return;\n viewportListenersAttached = true;\n window.addEventListener(\"resize\", reposition);\n window.addEventListener(\"scroll\", reposition, true);\n };\n const detachViewportListeners = () => {\n if (!viewportListenersAttached) return;\n viewportListenersAttached = false;\n window.removeEventListener(\"resize\", reposition);\n window.removeEventListener(\"scroll\", reposition, true);\n };\n const close = (restoreFocus = true) => {\n if (menuRef?.matches(\":popover-open\")) menuRef.hidePopover();\n detachViewportListeners();\n if (restoreFocus) queueMicrotask(() => triggerRef?.focus());\n };\n const open = (focus: \"first\" | \"last\" | false = \"first\") => {\n if (props.disabled || !menuRef || menuRef.matches(\":popover-open\")) return;\n menuRef.showPopover();\n attachViewportListeners();\n place();\n queueMicrotask(() => {\n if (focus) focusMenuItem(menuRef, focus === \"first\" ? 0 : -1);\n });\n };\n const requestOpen = (next: boolean, focus: \"first\" | \"last\" | false = \"first\") => {\n if (props.disabled && next) return;\n if (props.open !== undefined) {\n props.onOpenChange?.(next);\n return;\n }\n if (next) open(focus);\n else close(false);\n };\n const handleMenuKeyDown = (event: KeyboardEvent) => {\n const items = actionableItems(menuRef);\n const current = items.indexOf(document.activeElement as HTMLElement);\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n focusMenuItem(menuRef, current + (event.key === \"ArrowDown\" ? 1 : -1));\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n focusMenuItem(menuRef, event.key === \"Home\" ? 0 : -1);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n requestOpen(false);\n queueMicrotask(() => triggerRef?.focus());\n } else if (event.key === \"Tab\") {\n requestOpen(false);\n }\n };\n\n const context: DropdownContextValue = {\n disabled: () => Boolean(props.disabled),\n menuId,\n open: isOpen,\n registerTrigger: (element) => {\n triggerRef = element;\n },\n toggle: () => requestOpen(!isOpen()),\n triggerKeyDown: (event) => {\n if (![\"Enter\", \" \", \"ArrowDown\", \"ArrowUp\"].includes(event.key)) return;\n event.preventDefault();\n event.stopPropagation();\n if (isOpen()) {\n focusMenuItem(menuRef, event.key === \"ArrowUp\" ? -1 : 0);\n return;\n }\n requestOpen(true, event.key === \"ArrowUp\" ? \"last\" : \"first\");\n },\n };\n\n createEffect(() => {\n const controlled = props.open;\n if (!mounted || controlled === undefined || !menuRef) return;\n if (controlled && !menuRef.matches(\":popover-open\")) open(false);\n if (!controlled && menuRef.matches(\":popover-open\")) close(false);\n });\n createEffect(() => {\n if (mounted && props.disabled) close(false);\n });\n onMount(() => {\n mounted = true;\n if (props.open) open(false);\n onCleanup(detachViewportListeners);\n });\n\n return (\n <DropdownContext.Provider value={context}>\n <span class={`k2b-dropdown ${props.class ?? \"\"}`}>\n {props.children}\n <div\n ref={menuRef}\n id={menuId}\n popover=\"auto\"\n role=\"menu\"\n aria-label={props.label ?? messages().dropdownMenu}\n class={`k2b-dropdown__menu ${props.menuClass ?? \"\"}`}\n style={props.width ? { \"--k2b-dropdown-width\": props.width } : undefined}\n data-position={position()}\n onKeyDown={handleMenuKeyDown}\n onToggle={(event) => {\n const nextOpen = (event as ToggleEvent).newState === \"open\";\n const wasOpen = internalOpen();\n setInternalOpen(nextOpen);\n if (nextOpen) attachViewportListeners();\n else detachViewportListeners();\n if (props.open === undefined || props.open !== nextOpen) props.onOpenChange?.(nextOpen);\n if (wasOpen && !nextOpen) props.onClose?.();\n if (!nextOpen && props.open === true) queueMicrotask(() => props.open === true && open(false));\n }}\n >\n <DropdownItems items={props.items} close={close} />\n </div>\n </span>\n </DropdownContext.Provider>\n );\n}\n\ntype DropdownComponent = ((props: DropdownProps) => JSX.Element) & {\n Root: (props: DropdownProps) => JSX.Element;\n Trigger: (props: DropdownTriggerProps) => JSX.Element;\n Item: (props: DropdownItemProps) => JSX.Element;\n};\n\nexport const Dropdown = DropdownRoot as DropdownComponent;\nDropdown.Root = DropdownRoot;\nDropdown.Trigger = DropdownTrigger;\nDropdown.Item = DropdownItem;\n\nexport default Dropdown;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,132 @@
1
+ import { createComponent as _$createComponent } from "solid-js/web";
2
+ import { ssr as _$ssr } 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$ = ["<i", " aria-hidden=\"true\"></i>"],
6
+ _tmpl$2 = ["<span>", "", "</span>"],
7
+ _tmpl$3 = "<i class=\"ti ti-chevron-down k2b-filter-chip__chevron\" aria-hidden=\"true\"></i>";
8
+ import { createMemo, Show } from "solid-js";
9
+ import { useUiMessages } from "../intl/messages";
10
+ import Dropdown from "./Dropdown";
11
+ /** Section-aware controlled filter with immediate single- and multi-select commits. */
12
+ export function FilterChip(props) {
13
+ const messages = useUiMessages();
14
+ const selectedValues = createMemo(() => new Set(props.value));
15
+ const defaultValues = createMemo(() => new Set(props.defaultValue ?? []));
16
+ const sectionByValue = createMemo(() => {
17
+ const sections = new Map();
18
+ for (const section of props.options) {
19
+ for (const option of section.options) sections.set(option.value, section);
20
+ }
21
+ return sections;
22
+ });
23
+ const hasDefault = () => (props.defaultValue?.length ?? 0) > 0;
24
+ const selected = value => selectedValues().has(value);
25
+ const active = () => props.isActive ?? props.value.length > 0;
26
+ const atDefault = () => {
27
+ if (!props.defaultValue) return false;
28
+ const current = props.value;
29
+ return current.length === props.defaultValue.length && current.every(value => defaultValues().has(value));
30
+ };
31
+ const emit = value => props.onValueChange(value);
32
+ const toggle = value => {
33
+ const section = sectionByValue().get(value);
34
+ if (!section) return;
35
+ const current = props.value;
36
+ if (section.multiple) {
37
+ emit(selected(value) ? current.filter(entry => entry !== value) : [...current, value]);
38
+ return;
39
+ }
40
+ const sectionValues = new Set(section.options.map(option => option.value));
41
+ const otherValues = current.filter(entry => !sectionValues.has(entry));
42
+ emit(selected(value) ? otherValues : [...otherValues, value]);
43
+ };
44
+ const reset = () => emit(props.defaultValue ? [...props.defaultValue] : []);
45
+ const showReset = () => hasDefault() && !atDefault() || !hasDefault() && props.value.length > 0;
46
+ const optionItems = createMemo(() => {
47
+ const result = [];
48
+ for (const section of props.options) {
49
+ const items = section.options.map(option => ({
50
+ action: () => toggle(option.value),
51
+ checked: () => props.value.includes(option.value),
52
+ choice: section.multiple ? "checkbox" : "radio",
53
+ class: "k2b-filter-chip__option",
54
+ closeOnSelect: false,
55
+ color: option.color,
56
+ icon: !section.multiple ? option.icon : undefined,
57
+ label: option.label
58
+ }));
59
+ if (section.label) result.push({
60
+ sectionLabel: section.label,
61
+ items
62
+ });else result.push(...items);
63
+ }
64
+ return result;
65
+ });
66
+ const items = createMemo(() => {
67
+ if (!showReset()) return optionItems();
68
+ return [...optionItems(), {
69
+ sectionLabel: messages().filterActions,
70
+ items: [{
71
+ action: reset,
72
+ icon: hasDefault() ? "ti ti-refresh" : "ti ti-x",
73
+ label: hasDefault() ? messages().reset : messages().clear,
74
+ variant: "danger"
75
+ }]
76
+ }];
77
+ });
78
+ return _$createComponent(Dropdown.Root, {
79
+ get items() {
80
+ return items();
81
+ },
82
+ get position() {
83
+ return props.position ?? "bottom-left";
84
+ },
85
+ width: "13rem",
86
+ get label() {
87
+ return props.label;
88
+ },
89
+ get children() {
90
+ return _$createComponent(Dropdown.Trigger, {
91
+ appearance: "plain",
92
+ get ["class"]() {
93
+ return `k2b-filter-chip ${props.class ?? ""}`;
94
+ },
95
+ get ["data-state"]() {
96
+ return active() ? "active" : "idle";
97
+ },
98
+ get ["data-active"]() {
99
+ return active() ? "true" : undefined;
100
+ },
101
+ get ["data-icon-only"]() {
102
+ return props.iconOnly ? "true" : undefined;
103
+ },
104
+ get label() {
105
+ return props.label;
106
+ },
107
+ get title() {
108
+ return props.iconOnly ? props.label : undefined;
109
+ },
110
+ get children() {
111
+ return [_$ssr(_tmpl$, _$ssrAttribute("class", _$escape(props.icon, true), false)), _$createComponent(Show, {
112
+ get when() {
113
+ return !props.iconOnly;
114
+ },
115
+ get children() {
116
+ return [_$ssr(_tmpl$2, _$escape(props.label), _$escape(_$createComponent(Show, {
117
+ get when() {
118
+ return !hasDefault() && props.value.length > 0;
119
+ },
120
+ get children() {
121
+ return ` (${props.value.length})`;
122
+ }
123
+ }))), _$ssr(_tmpl$3)];
124
+ }
125
+ })];
126
+ }
127
+ });
128
+ }
129
+ });
130
+ }
131
+ export default FilterChip;
132
+ //# sourceMappingURL=FilterChip.js.map