@k2b/ui 0.5.0 → 0.6.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 (387) hide show
  1. package/dist/browser/actions/Button.js +11 -2
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/ContextMenu.js.map +1 -1
  4. package/dist/browser/actions/CopyButton.js.map +1 -1
  5. package/dist/browser/actions/Disclosure.js.map +1 -1
  6. package/dist/browser/actions/Dropdown.js.map +1 -1
  7. package/dist/browser/actions/FilterChip.js.map +1 -1
  8. package/dist/browser/actions/RemoveButton.js.map +1 -1
  9. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  10. package/dist/browser/actions/SplitButton.js.map +1 -1
  11. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  12. package/dist/browser/actions/Tabs.js.map +1 -1
  13. package/dist/browser/actions/Toolbar.js.map +1 -1
  14. package/dist/browser/actions/index.js.map +1 -1
  15. package/dist/browser/chat/ChatComposer.js.map +1 -1
  16. package/dist/browser/chat/ChatContextPopup.js.map +1 -1
  17. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  18. package/dist/browser/chat/ChatRoot.js.map +1 -1
  19. package/dist/browser/chat/ChatTasks.js +1 -1
  20. package/dist/browser/chat/ChatTasks.js.map +1 -1
  21. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  22. package/dist/browser/chat/chat-behavior.js.map +1 -1
  23. package/dist/browser/chat/composer-document.js.map +1 -1
  24. package/dist/browser/chat/index.js.map +1 -1
  25. package/dist/browser/content/Calendar.js.map +1 -1
  26. package/dist/browser/content/Chart.js.map +1 -1
  27. package/dist/browser/content/ChartExplorer.js.map +1 -1
  28. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  29. package/dist/browser/content/ChartFilterControls.js +1 -1
  30. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  31. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  32. package/dist/browser/content/CodeDisplay.js.map +1 -1
  33. package/dist/browser/content/DataTable.js.map +1 -1
  34. package/dist/browser/content/Docs.js.map +1 -1
  35. package/dist/browser/content/FileBrowser.js.map +1 -1
  36. package/dist/browser/content/FileGrid.js.map +1 -1
  37. package/dist/browser/content/FileTree.js.map +1 -1
  38. package/dist/browser/content/FileView.js.map +1 -1
  39. package/dist/browser/content/Lightbox.js.map +1 -1
  40. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  41. package/dist/browser/content/MarkdownView.js.map +1 -1
  42. package/dist/browser/content/Pagination.js.map +1 -1
  43. package/dist/browser/content/PdfPreview.js.map +1 -1
  44. package/dist/browser/content/RangePicker.js.map +1 -1
  45. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  46. package/dist/browser/content/ZoomPanViewport.js +396 -0
  47. package/dist/browser/content/ZoomPanViewport.js.map +1 -0
  48. package/dist/browser/content/calendar-event-layout.js.map +1 -1
  49. package/dist/browser/content/calendar-pointer.js.map +1 -1
  50. package/dist/browser/content/chart-cursor.js.map +1 -1
  51. package/dist/browser/content/chart-explorer.js.map +1 -1
  52. package/dist/browser/content/chart-inspection.js.map +1 -1
  53. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  54. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  55. package/dist/browser/content/chart-snapshot.js.map +1 -1
  56. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  57. package/dist/browser/content/chart-svg.js.map +1 -1
  58. package/dist/browser/content/code-highlight.js.map +1 -1
  59. package/dist/browser/content/collection-selection.js.map +1 -1
  60. package/dist/browser/content/delimited-preferences.js.map +1 -1
  61. package/dist/browser/content/file-tree.js.map +1 -1
  62. package/dist/browser/content/file-view-preview.js.map +1 -1
  63. package/dist/browser/content/index.js +1 -0
  64. package/dist/browser/content/index.js.map +1 -1
  65. package/dist/browser/content/zoom-pan.js +54 -0
  66. package/dist/browser/content/zoom-pan.js.map +1 -0
  67. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  68. package/dist/browser/feedback/Tooltip.js.map +1 -1
  69. package/dist/browser/feedback/dialog-core.js.map +1 -1
  70. package/dist/browser/feedback/index.js.map +1 -1
  71. package/dist/browser/feedback/prompts.js.map +1 -1
  72. package/dist/browser/feedback/toast.js.map +1 -1
  73. package/dist/browser/feedback/tooltip-position.js.map +1 -1
  74. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  75. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  76. package/dist/browser/inputs/Checkbox.js.map +1 -1
  77. package/dist/browser/inputs/CheckboxCard.js.map +1 -1
  78. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  79. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  80. package/dist/browser/inputs/Combobox.js.map +1 -1
  81. package/dist/browser/inputs/DatePicker.js.map +1 -1
  82. package/dist/browser/inputs/FileInputs.js.map +1 -1
  83. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  84. package/dist/browser/inputs/NumberInput.js.map +1 -1
  85. package/dist/browser/inputs/Select.js.map +1 -1
  86. package/dist/browser/inputs/SelectChip.js.map +1 -1
  87. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  88. package/dist/browser/inputs/Switch.js.map +1 -1
  89. package/dist/browser/inputs/TagEditor.js.map +1 -1
  90. package/dist/browser/inputs/TagsInput.js.map +1 -1
  91. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  92. package/dist/browser/inputs/TextInput.js +2 -1
  93. package/dist/browser/inputs/TextInput.js.map +1 -1
  94. package/dist/browser/inputs/choice.js.map +1 -1
  95. package/dist/browser/inputs/completion/behaviors.js.map +1 -1
  96. package/dist/browser/inputs/completion/engine.js.map +1 -1
  97. package/dist/browser/inputs/completion/index.js.map +1 -1
  98. package/dist/browser/inputs/completion/overlay.js.map +1 -1
  99. package/dist/browser/inputs/date-picker.js.map +1 -1
  100. package/dist/browser/inputs/editor-dom.js.map +1 -1
  101. package/dist/browser/inputs/field-contract.js.map +1 -1
  102. package/dist/browser/inputs/icon-options.js.map +1 -1
  103. package/dist/browser/inputs/image-crop.js.map +1 -1
  104. package/dist/browser/inputs/index.js.map +1 -1
  105. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  106. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  107. package/dist/browser/inputs/markdown/actions.js.map +1 -1
  108. package/dist/browser/inputs/markdown/active-formats.js.map +1 -1
  109. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  110. package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
  111. package/dist/browser/internal/color.js.map +1 -1
  112. package/dist/browser/internal/field.js.map +1 -1
  113. package/dist/browser/internal/portal.js.map +1 -1
  114. package/dist/browser/intl/Format.js.map +1 -1
  115. package/dist/browser/intl/index.js.map +1 -1
  116. package/dist/browser/intl/locale.js.map +1 -1
  117. package/dist/browser/intl/messages.js +6 -0
  118. package/dist/browser/intl/messages.js.map +1 -1
  119. package/dist/browser/layout/AppOverview.js.map +1 -1
  120. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  121. package/dist/browser/layout/BottomSheet.js.map +1 -1
  122. package/dist/browser/layout/DataPanel.js.map +1 -1
  123. package/dist/browser/layout/DetailPanel.js.map +1 -1
  124. package/dist/browser/layout/Discussion.js.map +1 -1
  125. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  126. package/dist/browser/layout/Navigation.js.map +1 -1
  127. package/dist/browser/layout/PanelDialog.js.map +1 -1
  128. package/dist/browser/layout/PanelHeader.js.map +1 -1
  129. package/dist/browser/layout/Panes.js.map +1 -1
  130. package/dist/browser/layout/PullToRefresh.js +8 -7
  131. package/dist/browser/layout/PullToRefresh.js.map +1 -1
  132. package/dist/browser/layout/ScrollArea.js.map +1 -1
  133. package/dist/browser/layout/Settings.js.map +1 -1
  134. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  135. package/dist/browser/layout/SettingsModal.js.map +1 -1
  136. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  137. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  138. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  139. package/dist/browser/layout/floating-window-geometry.js.map +1 -1
  140. package/dist/browser/layout/index.js.map +1 -1
  141. package/dist/browser/layout/navigation-model.js.map +1 -1
  142. package/dist/browser/layout/panes-layout.js.map +1 -1
  143. package/dist/browser/layout/scroll-fade.js.map +1 -1
  144. package/dist/browser/layout/stable-id.js.map +1 -1
  145. package/dist/browser/surfaces/Avatar.js.map +1 -1
  146. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  147. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  148. package/dist/browser/surfaces/NotFoundState.js.map +1 -1
  149. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  150. package/dist/browser/surfaces/Paper.js.map +1 -1
  151. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  152. package/dist/browser/surfaces/ProgressBar.js.map +1 -1
  153. package/dist/browser/surfaces/StatCell.js.map +1 -1
  154. package/dist/browser/surfaces/StatGrid.js.map +1 -1
  155. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  156. package/dist/browser/surfaces/Tag.js.map +1 -1
  157. package/dist/browser/surfaces/index.js.map +1 -1
  158. package/dist/browser/widgets/Widget.js.map +1 -1
  159. package/dist/browser/widgets/WidgetHero.js.map +1 -1
  160. package/dist/browser/widgets/WidgetList.js.map +1 -1
  161. package/dist/browser/widgets/WidgetPills.js.map +1 -1
  162. package/dist/browser/widgets/WidgetStat.js.map +1 -1
  163. package/dist/browser/widgets/WidgetStatus.js.map +1 -1
  164. package/dist/ssr/actions/Button.js +16 -6
  165. package/dist/ssr/actions/Button.js.map +1 -1
  166. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  167. package/dist/ssr/actions/CopyButton.js +2 -1
  168. package/dist/ssr/actions/CopyButton.js.map +1 -1
  169. package/dist/ssr/actions/Disclosure.js.map +1 -1
  170. package/dist/ssr/actions/Dropdown.js +7 -6
  171. package/dist/ssr/actions/Dropdown.js.map +1 -1
  172. package/dist/ssr/actions/FilterChip.js +5 -4
  173. package/dist/ssr/actions/FilterChip.js.map +1 -1
  174. package/dist/ssr/actions/RemoveButton.js +1 -0
  175. package/dist/ssr/actions/RemoveButton.js.map +1 -1
  176. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  177. package/dist/ssr/actions/SplitButton.js +1 -0
  178. package/dist/ssr/actions/SplitButton.js.map +1 -1
  179. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  180. package/dist/ssr/actions/Tabs.js.map +1 -1
  181. package/dist/ssr/actions/Toolbar.js.map +1 -1
  182. package/dist/ssr/actions/index.js.map +1 -1
  183. package/dist/ssr/chat/ChatComposer.js +6 -5
  184. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  185. package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
  186. package/dist/ssr/chat/ChatPrimitives.js +6 -5
  187. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  188. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  189. package/dist/ssr/chat/ChatTasks.js +1 -1
  190. package/dist/ssr/chat/ChatTasks.js.map +1 -1
  191. package/dist/ssr/chat/ChatTimeline.js +5 -4
  192. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  193. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  194. package/dist/ssr/chat/composer-document.js.map +1 -1
  195. package/dist/ssr/chat/index.js.map +1 -1
  196. package/dist/ssr/content/Calendar.js +2 -1
  197. package/dist/ssr/content/Calendar.js.map +1 -1
  198. package/dist/ssr/content/Chart.js.map +1 -1
  199. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  200. package/dist/ssr/content/ChartExplorerControls.js +5 -4
  201. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  202. package/dist/ssr/content/ChartFilterControls.js +3 -2
  203. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  204. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  205. package/dist/ssr/content/CodeDisplay.js.map +1 -1
  206. package/dist/ssr/content/DataTable.js +1 -0
  207. package/dist/ssr/content/DataTable.js.map +1 -1
  208. package/dist/ssr/content/Docs.js +1 -0
  209. package/dist/ssr/content/Docs.js.map +1 -1
  210. package/dist/ssr/content/FileBrowser.js +2 -1
  211. package/dist/ssr/content/FileBrowser.js.map +1 -1
  212. package/dist/ssr/content/FileGrid.js.map +1 -1
  213. package/dist/ssr/content/FileTree.js +2 -1
  214. package/dist/ssr/content/FileTree.js.map +1 -1
  215. package/dist/ssr/content/FileView.js +5 -4
  216. package/dist/ssr/content/FileView.js.map +1 -1
  217. package/dist/ssr/content/Lightbox.js +2 -1
  218. package/dist/ssr/content/Lightbox.js.map +1 -1
  219. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  220. package/dist/ssr/content/MarkdownView.js.map +1 -1
  221. package/dist/ssr/content/Pagination.js +2 -1
  222. package/dist/ssr/content/Pagination.js.map +1 -1
  223. package/dist/ssr/content/PdfPreview.js.map +1 -1
  224. package/dist/ssr/content/RangePicker.js.map +1 -1
  225. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  226. package/dist/ssr/content/ZoomPanViewport.js +300 -0
  227. package/dist/ssr/content/ZoomPanViewport.js.map +1 -0
  228. package/dist/ssr/content/calendar-event-layout.js.map +1 -1
  229. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  230. package/dist/ssr/content/chart-cursor.js.map +1 -1
  231. package/dist/ssr/content/chart-explorer.js.map +1 -1
  232. package/dist/ssr/content/chart-inspection.js.map +1 -1
  233. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  234. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  235. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  236. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  237. package/dist/ssr/content/chart-svg.js.map +1 -1
  238. package/dist/ssr/content/code-highlight.js.map +1 -1
  239. package/dist/ssr/content/collection-selection.js.map +1 -1
  240. package/dist/ssr/content/delimited-preferences.js.map +1 -1
  241. package/dist/ssr/content/file-tree.js.map +1 -1
  242. package/dist/ssr/content/file-view-preview.js.map +1 -1
  243. package/dist/ssr/content/index.js +1 -0
  244. package/dist/ssr/content/index.js.map +1 -1
  245. package/dist/ssr/content/zoom-pan.js +54 -0
  246. package/dist/ssr/content/zoom-pan.js.map +1 -0
  247. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  248. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  249. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  250. package/dist/ssr/feedback/index.js.map +1 -1
  251. package/dist/ssr/feedback/prompts.js +3 -2
  252. package/dist/ssr/feedback/prompts.js.map +1 -1
  253. package/dist/ssr/feedback/toast.js.map +1 -1
  254. package/dist/ssr/feedback/tooltip-position.js.map +1 -1
  255. package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
  256. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  257. package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
  258. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  259. package/dist/ssr/inputs/Checkbox.js +1 -0
  260. package/dist/ssr/inputs/Checkbox.js.map +1 -1
  261. package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
  262. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  263. package/dist/ssr/inputs/ChoiceInputs.js +1 -0
  264. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  265. package/dist/ssr/inputs/Combobox.js +2 -1
  266. package/dist/ssr/inputs/Combobox.js.map +1 -1
  267. package/dist/ssr/inputs/DatePicker.js +4 -3
  268. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  269. package/dist/ssr/inputs/FileInputs.js +2 -1
  270. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  271. package/dist/ssr/inputs/MultiSelectInput.js +4 -3
  272. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  273. package/dist/ssr/inputs/NumberInput.js +2 -1
  274. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  275. package/dist/ssr/inputs/Select.js +4 -3
  276. package/dist/ssr/inputs/Select.js.map +1 -1
  277. package/dist/ssr/inputs/SelectChip.js +3 -2
  278. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  279. package/dist/ssr/inputs/SpecialInputs.js +1 -0
  280. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  281. package/dist/ssr/inputs/Switch.js.map +1 -1
  282. package/dist/ssr/inputs/TagEditor.js +3 -2
  283. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  284. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  285. package/dist/ssr/inputs/TemplateEditor.js +1 -0
  286. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  287. package/dist/ssr/inputs/TextInput.js +6 -4
  288. package/dist/ssr/inputs/TextInput.js.map +1 -1
  289. package/dist/ssr/inputs/choice.js.map +1 -1
  290. package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
  291. package/dist/ssr/inputs/completion/engine.js.map +1 -1
  292. package/dist/ssr/inputs/completion/index.js.map +1 -1
  293. package/dist/ssr/inputs/completion/overlay.js.map +1 -1
  294. package/dist/ssr/inputs/date-picker.js.map +1 -1
  295. package/dist/ssr/inputs/editor-dom.js.map +1 -1
  296. package/dist/ssr/inputs/field-contract.js.map +1 -1
  297. package/dist/ssr/inputs/icon-options.js.map +1 -1
  298. package/dist/ssr/inputs/image-crop.js.map +1 -1
  299. package/dist/ssr/inputs/index.js.map +1 -1
  300. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  301. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  302. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  303. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  304. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
  305. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  306. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  307. package/dist/ssr/internal/color.js.map +1 -1
  308. package/dist/ssr/internal/field.js.map +1 -1
  309. package/dist/ssr/internal/portal.js.map +1 -1
  310. package/dist/ssr/intl/Format.js.map +1 -1
  311. package/dist/ssr/intl/index.js.map +1 -1
  312. package/dist/ssr/intl/locale.js.map +1 -1
  313. package/dist/ssr/intl/messages.js +6 -0
  314. package/dist/ssr/intl/messages.js.map +1 -1
  315. package/dist/ssr/layout/AppOverview.js +2 -1
  316. package/dist/ssr/layout/AppOverview.js.map +1 -1
  317. package/dist/ssr/layout/AppWorkspace.js +7 -6
  318. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  319. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  320. package/dist/ssr/layout/DataPanel.js +1 -0
  321. package/dist/ssr/layout/DataPanel.js.map +1 -1
  322. package/dist/ssr/layout/DetailPanel.js +1 -0
  323. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  324. package/dist/ssr/layout/Discussion.js +3 -2
  325. package/dist/ssr/layout/Discussion.js.map +1 -1
  326. package/dist/ssr/layout/FloatingWindow.js +1 -0
  327. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  328. package/dist/ssr/layout/Navigation.js +3 -2
  329. package/dist/ssr/layout/Navigation.js.map +1 -1
  330. package/dist/ssr/layout/PanelDialog.js +1 -0
  331. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  332. package/dist/ssr/layout/PanelHeader.js.map +1 -1
  333. package/dist/ssr/layout/Panes.js.map +1 -1
  334. package/dist/ssr/layout/PullToRefresh.js +1 -1
  335. package/dist/ssr/layout/PullToRefresh.js.map +1 -1
  336. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  337. package/dist/ssr/layout/Settings.js +2 -1
  338. package/dist/ssr/layout/Settings.js.map +1 -1
  339. package/dist/ssr/layout/SettingsCollection.js +1 -0
  340. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  341. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  342. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  343. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  344. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  345. package/dist/ssr/layout/floating-window-geometry.js.map +1 -1
  346. package/dist/ssr/layout/index.js.map +1 -1
  347. package/dist/ssr/layout/navigation-model.js.map +1 -1
  348. package/dist/ssr/layout/panes-layout.js.map +1 -1
  349. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  350. package/dist/ssr/layout/stable-id.js.map +1 -1
  351. package/dist/ssr/surfaces/Avatar.js +2 -1
  352. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  353. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  354. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  355. package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
  356. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  357. package/dist/ssr/surfaces/Paper.js +2 -1
  358. package/dist/ssr/surfaces/Paper.js.map +1 -1
  359. package/dist/ssr/surfaces/Placeholder.js +2 -1
  360. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  361. package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
  362. package/dist/ssr/surfaces/StatCell.js +2 -1
  363. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  364. package/dist/ssr/surfaces/StatGrid.js +1 -0
  365. package/dist/ssr/surfaces/StatGrid.js.map +1 -1
  366. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  367. package/dist/ssr/surfaces/Tag.js.map +1 -1
  368. package/dist/ssr/surfaces/index.js.map +1 -1
  369. package/dist/ssr/widgets/Widget.js +1 -0
  370. package/dist/ssr/widgets/Widget.js.map +1 -1
  371. package/dist/ssr/widgets/WidgetHero.js.map +1 -1
  372. package/dist/ssr/widgets/WidgetList.js.map +1 -1
  373. package/dist/ssr/widgets/WidgetPills.js.map +1 -1
  374. package/dist/ssr/widgets/WidgetStat.js +1 -0
  375. package/dist/ssr/widgets/WidgetStat.js.map +1 -1
  376. package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
  377. package/dist/styles.css +1 -1
  378. package/dist/types/actions/Button.d.ts +5 -0
  379. package/dist/types/actions/SplitButton.d.ts +1 -1
  380. package/dist/types/actions/SpotlightSearch.d.ts +1 -1
  381. package/dist/types/actions/index.d.ts +1 -1
  382. package/dist/types/content/ZoomPanViewport.d.ts +33 -0
  383. package/dist/types/content/index.d.ts +2 -0
  384. package/dist/types/content/zoom-pan.d.ts +29 -0
  385. package/dist/types/feedback/prompts.d.ts +4 -3
  386. package/dist/types/intl/messages.d.ts +3 -0
  387. package/package.json +9 -10
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","createEffect","createSignal","createUniqueId","For","onCleanup","onMount","Show","splitProps","useContext","Tooltip","useUiMessages","Button","selectAction","item","action","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","onSelect","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\n// Resolved outside JSX: a conditional attribute compiles to a lazy memo, which would be created inside the click handler.\nconst selectAction = (item: { action?: () => void }) => item.action;\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 /** Larger menu rows and typography for touch. Defaults to `default`. */\n variant?: \"default\" | \"touch\";\n /** Menu width as a CSS length. Defaults to `12rem`, or `18rem` for touch. */\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={selectAction(item)}\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-variant={props.variant ?? \"default\"}\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":[]}
1
+ {"version":3,"names":[],"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\n// Resolved outside JSX: a conditional attribute compiles to a lazy memo, which would be created inside the click handler.\nconst selectAction = (item: { action?: () => void }) => item.action;\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 /** Larger menu rows and typography for touch. Defaults to `default`. */\n variant?: \"default\" | \"touch\";\n /** Menu width as a CSS length. Defaults to `12rem`, or `18rem` for touch. */\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={selectAction(item)}\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-variant={props.variant ?? \"default\"}\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":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SACE,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,GAAG,EAEH,SAAS,EACT,OAAO,EACP,IAAI,EACJ,UAAU,EACV,UAAU,QACL,UAAU;AACjB,SAAS,OAAO,QAA+B,qBAAqB;AACpE,SAAS,aAAa,QAAQ,kBAAkB;AAChD,SAAS,MAAM,QAA+D,UAAU;;AAExF;AACA,MAAM,YAAY,GAAI,IAA6B,IAAK,IAAI,CAAC,MAAM;;AAgCnE;;AA8EA,MAAM,WAAW,GAAG,aAAa,CAAmB,CAAC;AACrD,MAAM,eAAe,GAAG,aAAa,CAAuB,CAAC;AAE7D,MAAM,eAAe,GAAI,IAA6B,IACpD,IAAI,GACA,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,gBAAgB,CACnB,CACE,+CAA+C,EAC/C,uDAAuD,EACvD,oDAAoD,CACrD,CAAC,IAAI,CAAC,IAAI,CACb,CACF,CAAC,GACD,EAAE;AAER,MAAM,aAAa,GAAG,CAAC,IAA6B,EAAE,KAAa,KAAW;EAC5E,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC;EACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;EACxB,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,OAAO,MAAM,gBAAgB,GAAG,CAC9B,OAAgB,EAChB,IAAuC,EACvC,QAA0B,EAC1B,QAA2C,EAC3C,GAAG,GAAG,CAAC,KAC2B;EAClC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI;EACvB,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG;EAE9B,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;EAC5F,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG;EAC9F,IAAI,QAAQ,KAAK,aAAa,EAAE;IAC9B,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,GAAG;IAC1B,GAAG,GAAG,OAAO,CAAC,GAAG;EACnB;EAEA,OAAO;IACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAClE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;EACnE,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAI,KAAqF,uBAErG,IAAI;EAAA,IAAC,IAAI;IAAA,OAAE,KAAK,CAAC,KAAK;EAAA;EAAA,IAAE,QAAQ;IAAA,yBAAG,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,UAAI,IAAI,oDAAe,IAAI,CAAC,CAAC;IAAuB;EAAA;EAAA,UACzG,KAAK,kDAA2C,KAAK,CAAC,CAAC;AAAW,2BAG7D,KAAK,CAAC,QAAQ,8BACpB,IAAI;EAAA,IAAC,IAAI;IAAA,OAAE,KAAK,CAAC,WAAW;EAAA;EAAA,UAAI,WAAW,4BAAa,WAAW,CAAC,CAAC;AAAS,KAGpF;AAED,OAAO,SAAS,YAAY,CAAC,KAAwB,EAAe;EAClE,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC;EACpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ;EAC/D,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC;EAElC,yBACG,IAAI;IAAA,IACH,IAAI;MAAA,OAAE,gBAAC,KAAK,CAAC,QAAQ,MAAG,KAAK,CAAC,IAAI,GAAG,SAAS;IAAA;IAAA,IAC9C,QAAQ;MAAA,sBAKG,+BAAsB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,gCACnC,MAAM,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,4CAChC,KAAK,CAAC,QAAQ,0CACT,KAAK,CAAC,QAAQ,GAAG,MAAM,YAAG,SAAS,0BAQjD,OAAO;IAAA;IAAA,UAIV,IAAI,mDAEI,IAAI,CAAC,CAAC,2CACJ,KAAK,CAAC,QAAQ,GAAG,QAAQ,YAAG,SAAS,wCACxC,KAAK,CAAC,QAAQ,GAAG,qBAAqB,YAAG,SAAS,iBAGhD,+BAAsB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,gCACnC,MAAM,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,0BAMzC,OAAO;EAEX;AAGP;AAEA,SAAS,kBAAkB,CAAC,KAAqB,EAAe;EAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC;EACpC,MAAM,OAAO,GAAG,MAAO,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,OAAQ;EAC7F,QACE;IAAA,sCAGQ,KAAK,CAAC,MAAM,KAAK,UAAU,GAAG,kBAAkB,GAAG,eAAe,mDAC1D,OAAO,CAAC,CAAC,kDACR,KAAK,CAAC,QAAQ,GAAG,MAAM,YAAG,SAAS,iBAE3C,+BAAsB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,kCACjC,OAAO,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,4CACnC,KAAK,CAAC,QAAQ,oCAQvB,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,MAAM,KAAK,UAAU;MAAA;MAAA;QAAA,iDAElC,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,OAAO,CAAC,CAAC;UAAA;UAAA;YAAA;UAAA;QAAA;MAAA;IAAA,gCAKxB,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK;MAAA;MAAA,IAAE,QAAQ;QAAA,yBAAG,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,IAAI;UAAA;UAAA,UAAI,IAAI,oDAAe,IAAI,CAAC,CAAC;QAAuB;MAAA;MAAA,UACzG,KAAK,kDAA2C,KAAK,CAAC,CAAC;IAAW,gCAErE,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK;MAAA;MAAA,UACnB,KAAK,wEAAwE,KAAK,CAAC,CAAC;IAAyB,cAGxG,KAAK,CAAC,KAAK,8BACjB,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,WAAW;MAAA;MAAA,UAAI,WAAW,4BAAa,WAAW,CAAC,CAAC;IAAS,gCAEhF,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,kBAAK,CAAC,MAAM,KAAK,OAAO,OAAI,OAAO,CAAC,CAAC;MAAA;MAAA;QAAA;MAAA;IAAA;EAAA;AAKvD;AAEA,OAAO,SAAS,aAAa,CAAC,KAAkF,EAAe;EAC7H,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,UAAU,GAAI,IAAqC,IACvD,QAAQ,IAAI,IAAI,qBACb,kBAAkB,EAAK,IAAI,sBAE3B,YAAY;IAAA,IACX,IAAI;MAAA,OAAE,IAAI,CAAC,IAAI;IAAA;IAAA,IACf,KAAK;MAAA,OAAE,IAAI,CAAC,KAAK;IAAA;IAAA,IACjB,WAAW;MAAA,OAAE,IAAI,CAAC,WAAW;IAAA;IAAA,IAC7B,OAAO;MAAA,OAAE,IAAI,CAAC,OAAO;IAAA;IAAA,IACrB,QAAQ;MAAA,OAAE,IAAI,CAAC,QAAQ;IAAA;IAAA;MAAA,OAChB,IAAI,CAAC,KAAK;IAAA;IAAA,IACjB,IAAI;MAAA,OAAE,mBAAM,IAAI,IAAI,MAAG,IAAI,CAAC,IAAI,GAAG,SAAS;IAAA;IAAA,IAC5C,QAAQ;MAAA,OAAE,uBAAU,IAAI,IAAI,MAAG,IAAI,CAAC,QAAQ,GAAG,SAAS;IAAA;IAAA,IACxD,QAAQ;MAAA,OAAE,YAAY,CAAC,IAAI,CAAC;IAAA;IAAA;MAAA,OAE3B,IAAI,CAAC,KAAK;IAAA;EAAA,EAEd;EAEH,yBACG,WAAW,CAAC,QAAQ;IAAA,IAAC,KAAK;MAAA,OAAE;QAAE,KAAK,EAAE,KAAK,CAAC;MAAM,CAAC;IAAA;IAAA;MAAA,yBAChD,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,UACnB,CAAC,IAAI,EAAE,KAAK,uBACV,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,OAAO,IAAI,IAAI;UAAA;UAAA,IAAE,QAAQ;YAAA,OAAE,UAAU,CAAC,IAAuC,CAAC;UAAA;UAAA;YAAA,sDAGxE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,YAAG,SAAS,uDAEjC,IAAI,CAAqB,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,4CAEvE,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAG,IAAI,CAAqB,YAAY;cAAA;cAAA,UAAI,KAAK,6BAAuC,KAAK,CAAC,CAAC;YAAO,gCAC/G,GAAG;cAAA,IAAC,IAAI;gBAAA,OAAG,IAAI,CAAqB,KAAK;cAAA;cAAA,UAAG;YAAU;UAAA;QAAA;MAG5D;IAAA;EAAA;AAIT;AAEA,SAAS,eAAe,CAAC,KAA2B,EAAe;EACjE,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC;EAC3C,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC;EACnF,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CACtC,YAAY,EACZ,UAAU,EACV,OAAO,EACP,UAAU,EACV,UAAU,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,SAAS,CACV,CAAC;EACF,IAAI,MAAqC;EACzC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC;EACpE,MAAM,QAAQ,GAAI,OAA0B,IAAK;IAC/C,MAAM,GAAG,OAAO;IAChB,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;IAChC,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;EACzD,CAAC;EACD,MAAM,KAA2D,GAAI,KAAK,IAAK;IAC7E,KAAK,CAAC,eAAe,CAAC,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC,CAAC;EAClB,CAAC;EAED,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,EAAE;IAChC,yBACG,MAAM,eACD,IAAI;MAAA;QAAA,OAEO,OAAO,CAAC,MAAM;MAAA;MAAA;QAAA,OACd,OAAO,CAAC,IAAI,CAAC,CAAC;MAAA;MAAA;MAAA;QAAA,OAEjB,KAAK,CAAC,KAAK;MAAA;MAAA,IACvB,QAAQ;QAAA,OAAE,QAAQ,CAAC,CAAC;MAAA;MAAA,IACpB,QAAQ;QAAA,OAAE,uBAAQ,CAAC,CAAC,MAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ;MAAA;MAC1C,OAAO,EAAE,KAAK;MAAA,IACd,SAAS;QAAA,OAAE,OAAO,CAAC,cAAc;MAAA;MAAA,IACjC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI,IAAI,QAAQ;MAAA;MAAA;QAAA,OACrB,GAAG,KAAK,CAAC,QAAQ,GAAG,iBAAiB,GAAG,EAAE,0BAA0B,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;MAAA;MAAA,IAC9F,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,IAChB,OAAO;QAAA,OAAE,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;MAAA;MAAA,IAChE,OAAO;QAAA,OAAE,KAAK,CAAC,OAAO;MAAA;MAAA,IACtB,YAAY;QAAA,OAAE,KAAK,CAAC,YAAY;MAAA;MAAA,IAChC,gBAAgB;QAAA,OAAE,KAAK,CAAC,gBAAgB;MAAA;MAAA;QAAA,OAEvC,KAAK,CAAC,QAAQ;MAAA;IAAA;EAGrB;EAEA,4CAGU,IAAI;IAAA;MAAA,OAEO,OAAO,CAAC,MAAM;IAAA;IAAA;MAAA,OACd,OAAO,CAAC,IAAI,CAAC,CAAC;IAAA;IAAA,iBACf,MAAM;IAAA;MAAA,OACR,KAAK,CAAC,KAAK;IAAA;IAAA,IACvB,QAAQ;MAAA,OAAE,QAAQ,CAAC,CAAC;IAAA;IAAA,IACpB,QAAQ;MAAA,OAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ;IAAA;IAAA,IAG1C,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,IAAI,QAAQ;IAAA;IAAA;MAAA,OACrB,yBAAyB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;IAAA;EAAA,aAElD,KAAK,CAAC,QAAQ,6BAEhB,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,kBAAK,CAAC,OAAO,KAAK,KAAK,OAAI,KAAK,CAAC,OAAO,KAAK,SAAS;IAAA;IAAA;MAAA,yBAC/D,OAAO;QAAA,IACN,OAAO;UAAA,OAAE,KAAK,CAAC,OAAO;QAAA;QACtB,MAAM,EAAE,MAAM,MAAM;QAAA,IACpB,KAAK;UAAA,OAAE,KAAK,CAAC,YAAY;QAAA;QAAA,IACzB,QAAQ;UAAA,OAAE,QAAQ,CAAC,CAAC;QAAA;QAAA,IACpB,SAAS;UAAA,OAAE,KAAK,CAAC,gBAAgB;QAAA;MAAA;IAAA;EAAA;AAK3C;;AAEA;AACA,SAAS,YAAY,CAAC,KAAoB,EAAe;EACvD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;EAC3D,MAAM,MAAM,GAAG,gBAAgB,EAAE,EAAE;EACnC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC3D,IAAI,UAAyC;EAC7C,IAAI,OAAmC;EACvC,IAAI,OAAO,GAAG,KAAK;EACnB,IAAI,yBAAyB,GAAG,KAAK;EAErC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,CAAC;EACjD,MAAM,QAAQ,GAAG,MACf,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,GAAG,aAAa,GAAG,cAAc,CAAE;EAExI,MAAM,KAAK,GAAG,MAAM;IAClB,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE;IAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE;MAC7G,KAAK,EAAE,MAAM,CAAC,UAAU;MACxB,MAAM,EAAE,MAAM,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI;IACrC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI;EACrC,CAAC;EACD,MAAM,UAAU,GAAG,MAAM;IACvB,IAAI,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;EACvB,CAAC;EACD,MAAM,uBAAuB,GAAG,MAAM;IACpC,IAAI,yBAAyB,EAAE;IAC/B,yBAAyB,GAAG,IAAI;IAChC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC;EACrD,CAAC;EACD,MAAM,uBAAuB,GAAG,MAAM;IACpC,IAAI,CAAC,yBAAyB,EAAE;IAChC,yBAAyB,GAAG,KAAK;IACjC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC;IAChD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC;EACxD,CAAC;EACD,MAAM,KAAK,GAAG,CAAC,YAAY,GAAG,IAAI,KAAK;IACrC,IAAI,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5D,uBAAuB,CAAC,CAAC;IACzB,IAAI,YAAY,EAAE,cAAc,CAAC,MAAM,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;EAC7D,CAAC;EACD,MAAM,IAAI,GAAG,CAAC,KAA+B,GAAG,OAAO,KAAK;IAC1D,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;IACpE,OAAO,CAAC,WAAW,CAAC,CAAC;IACrB,uBAAuB,CAAC,CAAC;IACzB,KAAK,CAAC,CAAC;IACP,cAAc,CAAC,MAAM;MACnB,IAAI,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,WAAW,GAAG,CAAC,IAAa,EAAE,KAA+B,GAAG,OAAO,KAAK;IAChF,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;IAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;MAC5B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;MAC1B;IACF;IACA,IAAI,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KACjB,KAAK,CAAC,KAAK,CAAC;EACnB,CAAC;EACD,MAAM,iBAAiB,GAAI,KAAoB,IAAK;IAClD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAA4B,CAAC;IACpE,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;MACxD,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,aAAa,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;MACtD,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;MACjC,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,WAAW,CAAC,KAAK,CAAC;MAClB,cAAc,CAAC,MAAM,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;MAC9B,WAAW,CAAC,KAAK,CAAC;IACpB;EACF,CAAC;EAED,MAAM,OAA6B,GAAG;IACpC,QAAQ,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;IACvC,MAAM;IACN,IAAI,EAAE,MAAM;IACZ,eAAe,EAAG,OAAO,IAAK;MAC5B,UAAU,GAAG,OAAO;IACtB,CAAC;IACD,MAAM,EAAE,MAAM,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACpC,cAAc,EAAG,KAAK,IAAK;MACzB,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;MACjE,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,KAAK,CAAC,eAAe,CAAC,CAAC;MACvB,IAAI,MAAM,CAAC,CAAC,EAAE;QACZ,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACxD;MACF;MACA,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/D;EACF,CAAC;EAED,YAAY,CAAC,MAAM;IACjB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI;IAC7B,IAAI,CAAC,OAAO,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,EAAE;IACtD,IAAI,UAAU,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;IAChE,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;EACnE,CAAC,CAAC;EACF,YAAY,CAAC,MAAM;IACjB,IAAI,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC;EAC7C,CAAC,CAAC;EACF,OAAO,CAAC,MAAM;IACZ,OAAO,GAAG,IAAI;IACd,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IAC3B,SAAS,CAAC,uBAAuB,CAAC;EACpC,CAAC,CAAC;EAEF,yBACG,eAAe,CAAC,QAAQ;IAAC,KAAK,EAAE,OAAO;IAAA;MAAA,uBACzB,yBAAgB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,WAC7C,KAAK,CAAC,QAAQ,iCAGT,MAAM,uDAGE,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,YAAY,iBAC3C,+BAAsB,KAAK,CAAC,SAAS,IAAI,EAAE,SAAE,aAC7C,KAAK,CAAC,KAAK,GAAG;QAAE,sBAAsB,EAAE,KAAK,CAAC;MAAM,CAAC,GAAG,SAAS,2CAC1D,KAAK,CAAC,OAAO,IAAI,SAAS,2DACzB,QAAQ,CAAC,CAAC,4CAaxB,aAAa;QAAA,IAAC,KAAK;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAE,KAAK,EAAE;MAAK;IAAA;EAAA;AAKzD;AAQA,OAAO,MAAM,QAAQ,GAAG,YAAiC;AACzD,QAAQ,CAAC,IAAI,GAAG,YAAY;AAC5B,QAAQ,CAAC,OAAO,GAAG,eAAe;AAClC,QAAQ,CAAC,IAAI,GAAG,YAAY;AAE5B,eAAe,QAAQ","ignoreList":[]}
@@ -2,6 +2,7 @@ import { createComponent as _$createComponent } from "solid-js/web";
2
2
  import { ssr as _$ssr } from "solid-js/web";
3
3
  import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
4
4
  import { escape as _$escape } from "solid-js/web";
5
+ import { memo as _$memo } from "solid-js/web";
5
6
  var _tmpl$ = ["<i", " aria-hidden=\"true\"></i>"],
6
7
  _tmpl$2 = ["<span>", "", "</span>"],
7
8
  _tmpl$3 = "<i class=\"ti ti-chevron-down k2b-filter-chip__chevron\" aria-hidden=\"true\"></i>";
@@ -101,10 +102,10 @@ export function FilterChip(props) {
101
102
  return props.iconOnly;
102
103
  },
103
104
  get tooltip() {
104
- return props.variant && props.iconOnly ? props.label : undefined;
105
+ return _$memo(() => !!(props.variant && props.iconOnly))() ? props.label : undefined;
105
106
  },
106
107
  get ["class"]() {
107
- return props.variant ? props.class : `k2b-filter-chip ${props.class ?? ""}`;
108
+ return _$memo(() => !!props.variant)() ? props.class : `k2b-filter-chip ${props.class ?? ""}`;
108
109
  },
109
110
  get ["data-state"]() {
110
111
  return active() ? "active" : "idle";
@@ -119,7 +120,7 @@ export function FilterChip(props) {
119
120
  return props.label;
120
121
  },
121
122
  get title() {
122
- return props.iconOnly ? props.label : undefined;
123
+ return _$memo(() => !!props.iconOnly)() ? props.label : undefined;
123
124
  },
124
125
  get children() {
125
126
  return [_$ssr(_tmpl$, _$ssrAttribute("class", _$escape(props.icon, true), false)), _$createComponent(Show, {
@@ -129,7 +130,7 @@ export function FilterChip(props) {
129
130
  get children() {
130
131
  return [_$ssr(_tmpl$2, _$escape(props.label), _$escape(_$createComponent(Show, {
131
132
  get when() {
132
- return !hasDefault() && props.value.length > 0;
133
+ return _$memo(() => !!!hasDefault())() && props.value.length > 0;
133
134
  },
134
135
  get children() {
135
136
  return ` (${props.value.length})`;
@@ -1 +1 @@
1
- {"version":3,"names":["createMemo","Show","useUiMessages","Dropdown","FilterChip","props","messages","selectedValues","Set","value","defaultValues","defaultValue","sectionByValue","sections","Map","section","options","option","set","hasDefault","length","selected","has","active","isActive","atDefault","current","every","emit","onValueChange","toggle","get","multiple","filter","entry","sectionValues","map","otherValues","reset","showReset","optionItems","result","items","action","checked","includes","choice","class","closeOnSelect","color","icon","undefined","label","push","sectionLabel","filterActions","clear","variant","_$createComponent","Root","disabled","position","width","children","Trigger","appearance","iconOnly","tooltip","data-state","data-active","data-icon-only","title","_$ssr","_tmpl$","_$ssrAttribute","_$escape","when","_tmpl$2","_tmpl$3"],"sources":["actions/FilterChip.tsx"],"sourcesContent":["import { createMemo, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ButtonVariant } from \"./Button\";\nimport Dropdown, { type DropdownItem } from \"./Dropdown\";\n\nexport type FilterChipOption = {\n value: string;\n label: string;\n icon?: string;\n color?: string;\n};\n\nexport type FilterChipSection = {\n label?: string;\n options: readonly FilterChipOption[];\n multiple?: boolean;\n};\n\nexport type FilterChipProps = {\n label: string;\n icon: string;\n options: readonly FilterChipSection[];\n value: readonly string[];\n onValueChange: (value: string[]) => void;\n isActive?: boolean;\n position?: \"bottom-left\" | \"bottom-right\";\n defaultValue?: readonly string[];\n iconOnly?: boolean;\n /** Use a standard button appearance instead of the default filter field. */\n variant?: ButtonVariant;\n disabled?: boolean;\n class?: string;\n};\n\n/** Section-aware controlled filter with immediate single- and multi-select commits. */\nexport function FilterChip(props: FilterChipProps): JSX.Element {\n const messages = useUiMessages();\n const selectedValues = createMemo(() => new Set(props.value));\n const defaultValues = createMemo(() => new Set(props.defaultValue ?? []));\n const sectionByValue = createMemo(() => {\n const sections = new Map<string, FilterChipSection>();\n for (const section of props.options) {\n for (const option of section.options) sections.set(option.value, section);\n }\n return sections;\n });\n const hasDefault = () => (props.defaultValue?.length ?? 0) > 0;\n const selected = (value: string) => selectedValues().has(value);\n const active = () => props.isActive ?? props.value.length > 0;\n const atDefault = () => {\n if (!props.defaultValue) return false;\n const current = props.value;\n return current.length === props.defaultValue.length && current.every((value) => defaultValues().has(value));\n };\n const emit = (value: string[]) => props.onValueChange(value);\n const toggle = (value: string) => {\n const section = sectionByValue().get(value);\n if (!section) return;\n const current = props.value;\n if (section.multiple) {\n emit(selected(value) ? current.filter((entry) => entry !== value) : [...current, value]);\n return;\n }\n const sectionValues = new Set(section.options.map((option) => option.value));\n const otherValues = current.filter((entry) => !sectionValues.has(entry));\n emit(selected(value) ? otherValues : [...otherValues, value]);\n };\n const reset = () => emit(props.defaultValue ? [...props.defaultValue] : []);\n const showReset = () => (hasDefault() && !atDefault()) || (!hasDefault() && props.value.length > 0);\n const optionItems = createMemo<DropdownItem[]>(() => {\n const result: DropdownItem[] = [];\n for (const section of props.options) {\n const items = section.options.map((option) => ({\n action: () => toggle(option.value),\n checked: () => props.value.includes(option.value),\n choice: section.multiple ? (\"checkbox\" as const) : (\"radio\" as const),\n class: \"k2b-filter-chip__option\",\n closeOnSelect: false,\n color: option.color,\n icon: !section.multiple ? option.icon : undefined,\n label: option.label,\n }));\n if (section.label) result.push({ sectionLabel: section.label, items });\n else result.push(...items);\n }\n return result;\n });\n const items = createMemo<DropdownItem[]>(() => {\n if (!showReset()) return optionItems();\n return [\n ...optionItems(),\n {\n sectionLabel: messages().filterActions,\n items: [\n {\n action: reset,\n icon: hasDefault() ? \"ti ti-refresh\" : \"ti ti-x\",\n label: hasDefault() ? messages().reset : messages().clear,\n variant: \"danger\",\n },\n ],\n },\n ];\n });\n\n return (\n <Dropdown.Root disabled={props.disabled} items={items()} position={props.position ?? \"bottom-left\"} width=\"13rem\" label={props.label}>\n <Dropdown.Trigger\n appearance={props.variant ? \"button\" : \"plain\"}\n variant={props.variant}\n iconOnly={props.iconOnly}\n tooltip={props.variant && props.iconOnly ? props.label : undefined}\n class={props.variant ? props.class : `k2b-filter-chip ${props.class ?? \"\"}`}\n data-state={active() ? \"active\" : \"idle\"}\n data-active={active() ? \"true\" : undefined}\n data-icon-only={props.iconOnly ? \"true\" : undefined}\n label={props.label}\n title={props.iconOnly ? props.label : undefined}\n >\n <i class={props.icon} aria-hidden=\"true\" />\n <Show when={!props.iconOnly}>\n <span>\n {props.label}\n <Show when={!hasDefault() && props.value.length > 0}>{` (${props.value.length})`}</Show>\n </span>\n <i class=\"ti ti-chevron-down k2b-filter-chip__chevron\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown.Root>\n );\n}\n\nexport default FilterChip;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/FilterChip.tsx"],"sourcesContent":["import { createMemo, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ButtonVariant } from \"./Button\";\nimport Dropdown, { type DropdownItem } from \"./Dropdown\";\n\nexport type FilterChipOption = {\n value: string;\n label: string;\n icon?: string;\n color?: string;\n};\n\nexport type FilterChipSection = {\n label?: string;\n options: readonly FilterChipOption[];\n multiple?: boolean;\n};\n\nexport type FilterChipProps = {\n label: string;\n icon: string;\n options: readonly FilterChipSection[];\n value: readonly string[];\n onValueChange: (value: string[]) => void;\n isActive?: boolean;\n position?: \"bottom-left\" | \"bottom-right\";\n defaultValue?: readonly string[];\n iconOnly?: boolean;\n /** Use a standard button appearance instead of the default filter field. */\n variant?: ButtonVariant;\n disabled?: boolean;\n class?: string;\n};\n\n/** Section-aware controlled filter with immediate single- and multi-select commits. */\nexport function FilterChip(props: FilterChipProps): JSX.Element {\n const messages = useUiMessages();\n const selectedValues = createMemo(() => new Set(props.value));\n const defaultValues = createMemo(() => new Set(props.defaultValue ?? []));\n const sectionByValue = createMemo(() => {\n const sections = new Map<string, FilterChipSection>();\n for (const section of props.options) {\n for (const option of section.options) sections.set(option.value, section);\n }\n return sections;\n });\n const hasDefault = () => (props.defaultValue?.length ?? 0) > 0;\n const selected = (value: string) => selectedValues().has(value);\n const active = () => props.isActive ?? props.value.length > 0;\n const atDefault = () => {\n if (!props.defaultValue) return false;\n const current = props.value;\n return current.length === props.defaultValue.length && current.every((value) => defaultValues().has(value));\n };\n const emit = (value: string[]) => props.onValueChange(value);\n const toggle = (value: string) => {\n const section = sectionByValue().get(value);\n if (!section) return;\n const current = props.value;\n if (section.multiple) {\n emit(selected(value) ? current.filter((entry) => entry !== value) : [...current, value]);\n return;\n }\n const sectionValues = new Set(section.options.map((option) => option.value));\n const otherValues = current.filter((entry) => !sectionValues.has(entry));\n emit(selected(value) ? otherValues : [...otherValues, value]);\n };\n const reset = () => emit(props.defaultValue ? [...props.defaultValue] : []);\n const showReset = () => (hasDefault() && !atDefault()) || (!hasDefault() && props.value.length > 0);\n const optionItems = createMemo<DropdownItem[]>(() => {\n const result: DropdownItem[] = [];\n for (const section of props.options) {\n const items = section.options.map((option) => ({\n action: () => toggle(option.value),\n checked: () => props.value.includes(option.value),\n choice: section.multiple ? (\"checkbox\" as const) : (\"radio\" as const),\n class: \"k2b-filter-chip__option\",\n closeOnSelect: false,\n color: option.color,\n icon: !section.multiple ? option.icon : undefined,\n label: option.label,\n }));\n if (section.label) result.push({ sectionLabel: section.label, items });\n else result.push(...items);\n }\n return result;\n });\n const items = createMemo<DropdownItem[]>(() => {\n if (!showReset()) return optionItems();\n return [\n ...optionItems(),\n {\n sectionLabel: messages().filterActions,\n items: [\n {\n action: reset,\n icon: hasDefault() ? \"ti ti-refresh\" : \"ti ti-x\",\n label: hasDefault() ? messages().reset : messages().clear,\n variant: \"danger\",\n },\n ],\n },\n ];\n });\n\n return (\n <Dropdown.Root disabled={props.disabled} items={items()} position={props.position ?? \"bottom-left\"} width=\"13rem\" label={props.label}>\n <Dropdown.Trigger\n appearance={props.variant ? \"button\" : \"plain\"}\n variant={props.variant}\n iconOnly={props.iconOnly}\n tooltip={props.variant && props.iconOnly ? props.label : undefined}\n class={props.variant ? props.class : `k2b-filter-chip ${props.class ?? \"\"}`}\n data-state={active() ? \"active\" : \"idle\"}\n data-active={active() ? \"true\" : undefined}\n data-icon-only={props.iconOnly ? \"true\" : undefined}\n label={props.label}\n title={props.iconOnly ? props.label : undefined}\n >\n <i class={props.icon} aria-hidden=\"true\" />\n <Show when={!props.iconOnly}>\n <span>\n {props.label}\n <Show when={!hasDefault() && props.value.length > 0}>{` (${props.value.length})`}</Show>\n </span>\n <i class=\"ti ti-chevron-down k2b-filter-chip__chevron\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown.Root>\n );\n}\n\nexport default FilterChip;\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import { mergeProps as _$mergeProps } from "solid-js/web";
2
2
  import { createComponent as _$createComponent } from "solid-js/web";
3
3
  import { ssr as _$ssr } from "solid-js/web";
4
+ import { memo as _$memo } from "solid-js/web";
4
5
  var _tmpl$ = "<i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\"></i>",
5
6
  _tmpl$2 = "<i class=\"ti ti-x k2b-remove-button__idle\" aria-hidden=\"true\"></i>",
6
7
  _tmpl$3 = "<i class=\"ti ti-trash k2b-remove-button__hover\" aria-hidden=\"true\"></i>";
@@ -1 +1 @@
1
- {"version":3,"names":["Show","splitProps","Tooltip","RemoveButton","props","local","rest","_$createComponent","Trigger","_$mergeProps","content","ariaLabel","type","class","aria-label","aria-busy","loading","undefined","disabled","children","when","fallback","_$ssr","_tmpl$2","_tmpl$3","_tmpl$"],"sources":["actions/RemoveButton.tsx"],"sourcesContent":["import { type JSX, Show, splitProps } from \"solid-js\";\nimport { Tooltip } from \"../feedback/Tooltip\";\n\nexport type RemoveButtonProps = Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"aria-label\" | \"children\"> & {\n ariaLabel: string;\n loading?: boolean;\n};\n\nexport function RemoveButton(props: RemoveButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"ariaLabel\", \"class\", \"disabled\", \"loading\"]);\n return (\n <Tooltip.Trigger\n content={local.ariaLabel}\n {...rest}\n type=\"button\"\n class={`k2b-remove-button ${local.class ?? \"\"}`}\n aria-label={local.ariaLabel}\n aria-busy={local.loading ? \"true\" : undefined}\n disabled={local.disabled || local.loading}\n >\n <Show\n when={local.loading}\n fallback={\n <>\n <i class=\"ti ti-x k2b-remove-button__idle\" aria-hidden=\"true\" />\n <i class=\"ti ti-trash k2b-remove-button__hover\" aria-hidden=\"true\" />\n </>\n }\n >\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n </Tooltip.Trigger>\n );\n}\n\nexport default RemoveButton;\n"],"mappings":";;;;;;AAAA,SAAmBA,IAAI,EAAEC,UAAU,QAAQ,UAAU;AACrD,SAASC,OAAO,QAAQ,qBAAqB;AAO7C,OAAO,SAASC,YAAYA,CAACC,KAAwB,EAAe;EAClE,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGL,UAAU,CAACG,KAAK,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;EACtF,OAAAG,iBAAA,CACGL,OAAO,CAACM,OAAO,EAAAC,YAAA;IAAA,IACdC,OAAOA,CAAA;MAAA,OAAEL,KAAK,CAACM,SAAS;IAAA;EAAA,GACpBL,IAAI;IACRM,IAAI;IAAA,aAAAC,CAAA;MAAA,OACG,qBAAqBR,KAAK,CAACQ,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA,kBAAAC,CAAA;MAAA,OACnCT,KAAK,CAACM,SAAS;IAAA;IAAA,iBAAAI,CAAA;MAAA,OAChBV,KAAK,CAACW,OAAO,GAAG,MAAM,GAAGC,SAAS;IAAA;IAAA,IAC7CC,QAAQA,CAAA;MAAA,OAAEb,KAAK,CAACa,QAAQ,IAAIb,KAAK,CAACW,OAAO;IAAA;IAAA,IAAAG,SAAA;MAAA,OAAAZ,iBAAA,CAExCP,IAAI;QAAA,IACHoB,IAAIA,CAAA;UAAA,OAAEf,KAAK,CAACW,OAAO;QAAA;QAAA,IACnBK,QAAQA,CAAA;UAAA,QAAAC,KAAA,CAAAC,OAAA,GAAAD,KAAA,CAAAE,OAAA;QAAA;QAAA,IAAAL,SAAA;UAAA,OAAAG,KAAA,CAAAG,MAAA;QAAA;MAAA;IAAA;EAAA;AAWhB;AAEA,eAAetB,YAAY","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/RemoveButton.tsx"],"sourcesContent":["import { type JSX, Show, splitProps } from \"solid-js\";\nimport { Tooltip } from \"../feedback/Tooltip\";\n\nexport type RemoveButtonProps = Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"aria-label\" | \"children\"> & {\n ariaLabel: string;\n loading?: boolean;\n};\n\nexport function RemoveButton(props: RemoveButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"ariaLabel\", \"class\", \"disabled\", \"loading\"]);\n return (\n <Tooltip.Trigger\n content={local.ariaLabel}\n {...rest}\n type=\"button\"\n class={`k2b-remove-button ${local.class ?? \"\"}`}\n aria-label={local.ariaLabel}\n aria-busy={local.loading ? \"true\" : undefined}\n disabled={local.disabled || local.loading}\n >\n <Show\n when={local.loading}\n fallback={\n <>\n <i class=\"ti ti-x k2b-remove-button__idle\" aria-hidden=\"true\" />\n <i class=\"ti ti-trash k2b-remove-button__hover\" aria-hidden=\"true\" />\n </>\n }\n >\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n </Tooltip.Trigger>\n );\n}\n\nexport default RemoveButton;\n"],"mappings":";;;;;;;AAAA,SAAmB,IAAI,EAAE,UAAU,QAAQ,UAAU;AACrD,SAAS,OAAO,QAAQ,qBAAqB;AAO7C,OAAO,SAAS,YAAY,CAAC,KAAwB,EAAe;EAClE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;EACtF,yBACG,OAAO,CAAC,OAAO;IAAA,IACd,OAAO;MAAA,OAAE,KAAK,CAAC,SAAS;IAAA;EAAA,GACpB,IAAI;IACR,IAAI;IAAA;MAAA,OACG,qBAAqB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA;MAAA,OACnC,KAAK,CAAC,SAAS;IAAA;IAAA;MAAA,OAChB,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,SAAS;IAAA;IAAA,IAC7C,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO;IAAA;IAAA;MAAA,yBAExC,IAAI;QAAA,IACH,IAAI;UAAA,OAAE,KAAK,CAAC,OAAO;QAAA;QAAA,IACnB,QAAQ;UAAA;QAAA;QAAA;UAAA;QAAA;MAAA;IAAA;EAAA;AAWhB;AAEA,eAAe,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createMemo","For","useUiMessages","SegmentedControl","props","messages","buttons","currentValue","value","enabled","options","map","option","index","filter","disabled","selectedEnabled","some","emit","onValueChange","select","queueMicrotask","focus","selectRelative","currentIndex","direction","available","length","current","findIndex","next","edge","last","at","tabIndex","divider","_$ssr","_tmpl$","_$escape","class","_$ssrAttribute","size","ariaLabel","label","undefined","_$createComponent","each","children","_tmpl$2","icon","_tmpl$3"],"sources":["actions/SegmentedControl.tsx"],"sourcesContent":["import { createMemo, For, type JSX } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type SegmentOption<T extends string = string> = {\n value: T;\n label: JSX.Element;\n icon?: string;\n disabled?: boolean;\n};\n\nexport type SegmentedControlProps<T extends string = string> = {\n options: readonly SegmentOption<T>[];\n value: T | (() => T);\n onValueChange: (value: T) => void;\n disabled?: boolean;\n ariaLabel?: string;\n label?: string;\n size?: \"sm\" | \"md\";\n class?: string;\n};\n\n/** Controlled radio group with automatic selection during arrow-key navigation. */\nexport function SegmentedControl<T extends string = string>(props: SegmentedControlProps<T>): JSX.Element {\n const messages = useUiMessages();\n const buttons: HTMLButtonElement[] = [];\n const currentValue = createMemo<T>(() => (typeof props.value === \"function\" ? props.value() : props.value));\n const enabled = createMemo(() =>\n props.options.map((option, index) => ({ option, index })).filter(({ option }) => !props.disabled && !option.disabled),\n );\n const selectedEnabled = createMemo(() =>\n props.options.some((option) => option.value === currentValue() && !props.disabled && !option.disabled),\n );\n const emit = (value: T) => props.onValueChange(value);\n const select = (index: number) => {\n const option = props.options[index];\n if (!option || props.disabled || option.disabled) return;\n emit(option.value);\n queueMicrotask(() => buttons[index]?.focus());\n };\n const selectRelative = (currentIndex: number, direction: 1 | -1) => {\n const available = enabled();\n if (available.length === 0) return;\n const current = available.findIndex(({ index }) => index === currentIndex);\n const next = available[(current + direction + available.length) % available.length] ?? available[0];\n if (next) select(next.index);\n };\n const edge = (last: boolean) => {\n const available = enabled();\n const next = last ? available.at(-1) : available[0];\n if (next) select(next.index);\n };\n const tabIndex = (index: number, value: T) => {\n if (props.disabled || props.options[index]?.disabled) return -1;\n if (currentValue() === value) return 0;\n return !selectedEnabled() && enabled()[0]?.index === index ? 0 : -1;\n };\n const divider = (index: number, value: T) =>\n index < props.options.length - 1 && currentValue() !== value && currentValue() !== props.options[index + 1]?.value;\n\n return (\n <div\n class={`k2b-segmented-control ${props.class ?? \"\"}`}\n data-size={props.size ?? \"md\"}\n role=\"radiogroup\"\n aria-label={props.ariaLabel ?? props.label ?? messages().options}\n aria-orientation=\"horizontal\"\n aria-disabled={props.disabled ? \"true\" : undefined}\n >\n <For each={props.options}>\n {(option, index) => (\n <button\n ref={(element) => {\n buttons[index()] = element;\n }}\n type=\"button\"\n role=\"radio\"\n class=\"k2b-segmented-control__option\"\n aria-checked={currentValue() === option.value}\n data-selected={currentValue() === option.value ? \"true\" : undefined}\n data-divider={divider(index(), option.value) ? \"true\" : undefined}\n disabled={props.disabled || option.disabled}\n tabIndex={tabIndex(index(), option.value)}\n onClick={() => emit(option.value)}\n onKeyDown={(event) => {\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n selectRelative(index(), 1);\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n selectRelative(index(), -1);\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n edge(event.key === \"End\");\n }\n }}\n >\n {option.icon && <i class={option.icon} aria-hidden=\"true\" />}\n <span>{option.label}</span>\n </button>\n )}\n </For>\n </div>\n );\n}\n\nexport default SegmentedControl;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/SegmentedControl.tsx"],"sourcesContent":["import { createMemo, For, type JSX } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type SegmentOption<T extends string = string> = {\n value: T;\n label: JSX.Element;\n icon?: string;\n disabled?: boolean;\n};\n\nexport type SegmentedControlProps<T extends string = string> = {\n options: readonly SegmentOption<T>[];\n value: T | (() => T);\n onValueChange: (value: T) => void;\n disabled?: boolean;\n ariaLabel?: string;\n label?: string;\n size?: \"sm\" | \"md\";\n class?: string;\n};\n\n/** Controlled radio group with automatic selection during arrow-key navigation. */\nexport function SegmentedControl<T extends string = string>(props: SegmentedControlProps<T>): JSX.Element {\n const messages = useUiMessages();\n const buttons: HTMLButtonElement[] = [];\n const currentValue = createMemo<T>(() => (typeof props.value === \"function\" ? props.value() : props.value));\n const enabled = createMemo(() =>\n props.options.map((option, index) => ({ option, index })).filter(({ option }) => !props.disabled && !option.disabled),\n );\n const selectedEnabled = createMemo(() =>\n props.options.some((option) => option.value === currentValue() && !props.disabled && !option.disabled),\n );\n const emit = (value: T) => props.onValueChange(value);\n const select = (index: number) => {\n const option = props.options[index];\n if (!option || props.disabled || option.disabled) return;\n emit(option.value);\n queueMicrotask(() => buttons[index]?.focus());\n };\n const selectRelative = (currentIndex: number, direction: 1 | -1) => {\n const available = enabled();\n if (available.length === 0) return;\n const current = available.findIndex(({ index }) => index === currentIndex);\n const next = available[(current + direction + available.length) % available.length] ?? available[0];\n if (next) select(next.index);\n };\n const edge = (last: boolean) => {\n const available = enabled();\n const next = last ? available.at(-1) : available[0];\n if (next) select(next.index);\n };\n const tabIndex = (index: number, value: T) => {\n if (props.disabled || props.options[index]?.disabled) return -1;\n if (currentValue() === value) return 0;\n return !selectedEnabled() && enabled()[0]?.index === index ? 0 : -1;\n };\n const divider = (index: number, value: T) =>\n index < props.options.length - 1 && currentValue() !== value && currentValue() !== props.options[index + 1]?.value;\n\n return (\n <div\n class={`k2b-segmented-control ${props.class ?? \"\"}`}\n data-size={props.size ?? \"md\"}\n role=\"radiogroup\"\n aria-label={props.ariaLabel ?? props.label ?? messages().options}\n aria-orientation=\"horizontal\"\n aria-disabled={props.disabled ? \"true\" : undefined}\n >\n <For each={props.options}>\n {(option, index) => (\n <button\n ref={(element) => {\n buttons[index()] = element;\n }}\n type=\"button\"\n role=\"radio\"\n class=\"k2b-segmented-control__option\"\n aria-checked={currentValue() === option.value}\n data-selected={currentValue() === option.value ? \"true\" : undefined}\n data-divider={divider(index(), option.value) ? \"true\" : undefined}\n disabled={props.disabled || option.disabled}\n tabIndex={tabIndex(index(), option.value)}\n onClick={() => emit(option.value)}\n onKeyDown={(event) => {\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n selectRelative(index(), 1);\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n selectRelative(index(), -1);\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n edge(event.key === \"End\");\n }\n }}\n >\n {option.icon && <i class={option.icon} aria-hidden=\"true\" />}\n <span>{option.label}</span>\n </button>\n )}\n </For>\n </div>\n );\n}\n\nexport default SegmentedControl;\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import { ssr as _$ssr } from "solid-js/web";
2
2
  import { mergeProps as _$mergeProps } from "solid-js/web";
3
3
  import { createComponent as _$createComponent } from "solid-js/web";
4
+ import { memo as _$memo } from "solid-js/web";
4
5
  var _tmpl$ = "<i class=\"ti ti-chevron-down\" aria-hidden=\"true\"></i>";
5
6
  import { Show, splitProps } from "solid-js";
6
7
  import { Button } from "./Button";
@@ -1 +1 @@
1
- {"version":3,"names":["Show","splitProps","Button","Dropdown","SplitButton","props","local","buttonProps","disabled","Boolean","loading","_$createComponent","Root","items","label","menuLabel","position","menuPosition","width","menuWidth","children","when","primaryItems","fallback","_$mergeProps","class","size","variant","Trigger","wrap","primaryMenuLabel","iconOnly","title","menuIcon","_$ssr","_tmpl$"],"sources":["actions/SplitButton.tsx"],"sourcesContent":["import { type JSX, Show, splitProps } from \"solid-js\";\nimport { Button, type ButtonProps } from \"./Button\";\nimport { Dropdown, type DropdownItem, type DropdownPosition } from \"./Dropdown\";\n\nexport type SplitButtonProps = ButtonProps & {\n /** Actions shown from the secondary menu trigger. */\n items: readonly DropdownItem[];\n /** Optional selection menu in place of the primary immediate action. */\n primaryItems?: readonly DropdownItem[];\n /** Accessible name for the primary selection menu. */\n primaryMenuLabel?: string;\n /** Secondary menu glyph; defaults to a chevron. */\n menuIcon?: JSX.Element;\n /** Accessible name and title for the icon-only menu trigger. */\n menuLabel: string;\n menuPosition?: DropdownPosition | (() => DropdownPosition);\n menuWidth?: string;\n};\n\n/** One primary button action with a separate menu of related alternatives. */\nexport function SplitButton(props: SplitButtonProps): JSX.Element {\n const [local, buttonProps] = splitProps(props, [\n \"children\",\n \"primaryItems\",\n \"primaryMenuLabel\",\n \"menuIcon\",\n \"class\",\n \"disabled\",\n \"items\",\n \"loading\",\n \"menuLabel\",\n \"menuPosition\",\n \"menuWidth\",\n \"size\",\n \"variant\",\n ]);\n const disabled = () => Boolean(local.disabled || local.loading);\n\n return (\n <Dropdown.Root\n class=\"k2b-split-button\"\n disabled={disabled()}\n items={local.items}\n label={local.menuLabel}\n position={local.menuPosition ?? \"bottom-left\"}\n width={local.menuWidth}\n >\n <Show\n when={local.primaryItems}\n fallback={\n <Button\n {...buttonProps}\n class={`k2b-split-button__primary ${local.class ?? \"\"}`}\n disabled={local.disabled}\n loading={local.loading}\n size={local.size}\n variant={local.variant ?? \"primary\"}\n >\n {local.children}\n </Button>\n }\n >\n {(items) => (\n <Dropdown.Root\n items={items()}\n disabled={disabled()}\n class=\"k2b-split-button__primary-menu\"\n position={local.menuPosition ?? \"bottom-left\"}\n width={local.menuWidth}\n >\n <Dropdown.Trigger\n wrap={buttonProps.wrap}\n disabled={disabled()}\n size={local.size}\n variant={local.variant ?? \"primary\"}\n label={local.primaryMenuLabel}\n class={`k2b-split-button__primary ${local.class ?? \"\"}`}\n >\n {local.children}\n </Dropdown.Trigger>\n </Dropdown.Root>\n )}\n </Show>\n <Dropdown.Trigger\n class=\"k2b-split-button__menu-trigger\"\n disabled={disabled()}\n iconOnly\n label={local.menuLabel}\n size={local.size}\n title={local.menuLabel}\n variant={local.variant ?? \"primary\"}\n >\n {local.menuIcon ?? <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />}\n </Dropdown.Trigger>\n </Dropdown.Root>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/SplitButton.tsx"],"sourcesContent":["import { type JSX, Show, splitProps } from \"solid-js\";\nimport { Button, type ButtonProps } from \"./Button\";\nimport { Dropdown, type DropdownItem, type DropdownPosition } from \"./Dropdown\";\n\nexport type SplitButtonProps = Omit<ButtonProps, \"align\"> & {\n /** Actions shown from the secondary menu trigger. */\n items: readonly DropdownItem[];\n /** Optional selection menu in place of the primary immediate action. */\n primaryItems?: readonly DropdownItem[];\n /** Accessible name for the primary selection menu. */\n primaryMenuLabel?: string;\n /** Secondary menu glyph; defaults to a chevron. */\n menuIcon?: JSX.Element;\n /** Accessible name and title for the icon-only menu trigger. */\n menuLabel: string;\n menuPosition?: DropdownPosition | (() => DropdownPosition);\n menuWidth?: string;\n};\n\n/** One primary button action with a separate menu of related alternatives. */\nexport function SplitButton(props: SplitButtonProps): JSX.Element {\n const [local, buttonProps] = splitProps(props, [\n \"children\",\n \"primaryItems\",\n \"primaryMenuLabel\",\n \"menuIcon\",\n \"class\",\n \"disabled\",\n \"items\",\n \"loading\",\n \"menuLabel\",\n \"menuPosition\",\n \"menuWidth\",\n \"size\",\n \"variant\",\n ]);\n const disabled = () => Boolean(local.disabled || local.loading);\n\n return (\n <Dropdown.Root\n class=\"k2b-split-button\"\n disabled={disabled()}\n items={local.items}\n label={local.menuLabel}\n position={local.menuPosition ?? \"bottom-left\"}\n width={local.menuWidth}\n >\n <Show\n when={local.primaryItems}\n fallback={\n <Button\n {...buttonProps}\n class={`k2b-split-button__primary ${local.class ?? \"\"}`}\n disabled={local.disabled}\n loading={local.loading}\n size={local.size}\n variant={local.variant ?? \"primary\"}\n >\n {local.children}\n </Button>\n }\n >\n {(items) => (\n <Dropdown.Root\n items={items()}\n disabled={disabled()}\n class=\"k2b-split-button__primary-menu\"\n position={local.menuPosition ?? \"bottom-left\"}\n width={local.menuWidth}\n >\n <Dropdown.Trigger\n wrap={buttonProps.wrap}\n disabled={disabled()}\n size={local.size}\n variant={local.variant ?? \"primary\"}\n label={local.primaryMenuLabel}\n class={`k2b-split-button__primary ${local.class ?? \"\"}`}\n >\n {local.children}\n </Dropdown.Trigger>\n </Dropdown.Root>\n )}\n </Show>\n <Dropdown.Trigger\n class=\"k2b-split-button__menu-trigger\"\n disabled={disabled()}\n iconOnly\n label={local.menuLabel}\n size={local.size}\n title={local.menuLabel}\n variant={local.variant ?? \"primary\"}\n >\n {local.menuIcon ?? <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />}\n </Dropdown.Trigger>\n </Dropdown.Root>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["prompts","resolveUiMessages","useUiMessages","openSpotlightSearch","options","resolve","promptOptions","messages","search","icon","placeholder","minQueryLength","noResultsText","spotlightNoResults","size","SpotlightButton","props","variant","label","searchLabel","shortcut","shortcutLabel","title","showsShortcut","Boolean","includes","_$ssr","_tmpl$","_$escape","class","_$ssrAttribute","disabled","ariaLabel","undefined","_tmpl$2"],"sources":["actions/SpotlightSearch.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport type { PromptSearchInput, PromptSearchItem, PromptSearchOptions } from \"../feedback/prompts\";\nimport { prompts } from \"../feedback/prompts\";\nimport { resolveUiMessages, useUiMessages } from \"../intl/messages\";\n\nexport type SpotlightSearchResolver<T = unknown> = (input: PromptSearchInput) => Promise<PromptSearchItem<T>[]> | PromptSearchItem<T>[];\n\nexport type SpotlightSearchOptions<T = unknown> = PromptSearchOptions & {\n resolve: SpotlightSearchResolver<T>;\n};\n\nexport type SpotlightButtonVariant = \"default\" | \"compact\" | \"chip\" | \"sidebar\" | \"sidebar-mobile\" | \"icon\";\n\nexport type SpotlightButtonProps = {\n variant?: SpotlightButtonVariant;\n label?: string;\n title?: string;\n icon?: string;\n shortcutLabel?: string | false;\n ariaLabel?: string;\n disabled?: boolean;\n class?: string;\n onClick: () => void | Promise<void>;\n};\n\nexport const openSpotlightSearch = <T = unknown>(options: SpotlightSearchOptions<T>): Promise<PromptSearchItem<T> | undefined> => {\n const { resolve, ...promptOptions } = options;\n const messages = resolveUiMessages();\n return prompts.search(resolve, {\n icon: \"ti ti-search\",\n placeholder: messages.search,\n minQueryLength: 0,\n noResultsText: messages.spotlightNoResults,\n size: \"small\",\n ...promptOptions,\n });\n};\n\nexport function SpotlightButton(props: SpotlightButtonProps): JSX.Element {\n const messages = useUiMessages();\n const variant = () => props.variant ?? \"default\";\n const label = () => props.label ?? messages().searchLabel;\n const icon = () => props.icon ?? \"ti ti-search\";\n const shortcut = () => props.shortcutLabel;\n const title = () => props.title ?? label();\n const showsShortcut = () => Boolean(shortcut()) && [\"chip\", \"sidebar\"].includes(variant());\n\n return (\n <button\n type=\"button\"\n class={`k2b-spotlight-button ${props.class ?? \"\"}`}\n data-variant={variant()}\n disabled={props.disabled}\n aria-label={props.ariaLabel ?? ([\"compact\", \"icon\"].includes(variant()) ? label() : undefined)}\n title={title()}\n onClick={() => void props.onClick()}\n >\n <i class={icon()} aria-hidden=\"true\" />\n <span class=\"k2b-spotlight-button__label\">{label()}</span>\n {showsShortcut() && <kbd>{shortcut()}</kbd>}\n </button>\n );\n}\n\nexport default SpotlightButton;\n"],"mappings":";;;;;AAEA,SAASA,OAAO,QAAQ,qBAAqB;AAC7C,SAASC,iBAAiB,EAAEC,aAAa,QAAQ,kBAAkB;AAsBnE,OAAO,MAAMC,mBAAmB,GAAiBC,OAAkC,IAA+C;EAChI,MAAM;IAAEC,OAAO;IAAE,GAAGC;EAAc,CAAC,GAAGF,OAAO;EAC7C,MAAMG,QAAQ,GAAGN,iBAAiB,CAAC,CAAC;EACpC,OAAOD,OAAO,CAACQ,MAAM,CAACH,OAAO,EAAE;IAC7BI,IAAI,EAAE,cAAc;IACpBC,WAAW,EAAEH,QAAQ,CAACC,MAAM;IAC5BG,cAAc,EAAE,CAAC;IACjBC,aAAa,EAAEL,QAAQ,CAACM,kBAAkB;IAC1CC,IAAI,EAAE,OAAO;IACb,GAAGR;EACL,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,SAASS,eAAeA,CAACC,KAA2B,EAAe;EACxE,MAAMT,QAAQ,GAAGL,aAAa,CAAC,CAAC;EAChC,MAAMe,OAAO,GAAGA,CAAA,KAAMD,KAAK,CAACC,OAAO,IAAI,SAAS;EAChD,MAAMC,KAAK,GAAGA,CAAA,KAAMF,KAAK,CAACE,KAAK,IAAIX,QAAQ,CAAC,CAAC,CAACY,WAAW;EACzD,MAAMV,IAAI,GAAGA,CAAA,KAAMO,KAAK,CAACP,IAAI,IAAI,cAAc;EAC/C,MAAMW,QAAQ,GAAGA,CAAA,KAAMJ,KAAK,CAACK,aAAa;EAC1C,MAAMC,KAAK,GAAGA,CAAA,KAAMN,KAAK,CAACM,KAAK,IAAIJ,KAAK,CAAC,CAAC;EAC1C,MAAMK,aAAa,GAAGA,CAAA,KAAMC,OAAO,CAACJ,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAACK,QAAQ,CAACR,OAAO,CAAC,CAAC,CAAC;EAE1F,OAAAS,KAAA,CAAAC,MAAA,EAGW,wBAAAC,QAAA,CAAwBZ,KAAK,CAACa,KAAK,IAAI,EAAE,SAAE,EAAAC,cAAA,iBAAAF,QAAA,CACpCX,OAAO,CAAC,CAAC,iBAAAa,cAAA,aACbd,KAAK,CAACe,QAAQ,UAAAD,cAAA,eAAAF,QAAA,CACZZ,KAAK,CAACgB,SAAS,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAACP,QAAQ,CAACR,OAAO,CAAC,CAAC,CAAC,GAAGC,KAAK,CAAC,CAAC,GAAGe,SAAS,CAAC,kBAAAH,cAAA,UAAAF,QAAA,CACvFN,KAAK,CAAC,CAAC,iBAAAQ,cAAA,UAAAF,QAAA,CAGJnB,IAAI,CAAC,CAAC,iBAAAmB,QAAA,CAC2BV,KAAK,CAAC,CAAC,GACjDK,aAAa,CAAC,CAAC,IAAAG,KAAA,CAAAQ,OAAA,EAAAN,QAAA,CAAUR,QAAQ,CAAC,CAAC,EAAO;AAGjD;AAEA,eAAeL,eAAe","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/SpotlightSearch.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport type { PromptSearchInput, PromptSearchItem, PromptSearchOptions } from \"../feedback/prompts\";\nimport { prompts } from \"../feedback/prompts\";\nimport { resolveUiMessages, useUiMessages } from \"../intl/messages\";\n\nexport type SpotlightSearchResolver<T = unknown> = (input: PromptSearchInput) => Promise<PromptSearchItem<T>[]> | PromptSearchItem<T>[];\n\nexport type SpotlightSearchOptions<T = unknown> = PromptSearchOptions & {\n resolve: SpotlightSearchResolver<T>;\n};\n\nexport type SpotlightButtonVariant = \"default\" | \"compact\" | \"chip\" | \"sidebar\" | \"sidebar-mobile\" | \"icon\";\n\nexport type SpotlightButtonProps = {\n variant?: SpotlightButtonVariant;\n label?: string;\n title?: string;\n icon?: string;\n shortcutLabel?: string | false;\n ariaLabel?: string;\n disabled?: boolean;\n class?: string;\n onClick: () => void | Promise<void>;\n};\n\nexport const openSpotlightSearch = <T extends unknown = unknown>(\n options: SpotlightSearchOptions<T>,\n): Promise<PromptSearchItem<T> | undefined> => {\n const { resolve, ...promptOptions } = options;\n const messages = resolveUiMessages();\n return prompts.search(resolve, {\n icon: \"ti ti-search\",\n placeholder: messages.search,\n minQueryLength: 0,\n noResultsText: messages.spotlightNoResults,\n size: \"small\",\n ...promptOptions,\n });\n};\n\nexport function SpotlightButton(props: SpotlightButtonProps): JSX.Element {\n const messages = useUiMessages();\n const variant = () => props.variant ?? \"default\";\n const label = () => props.label ?? messages().searchLabel;\n const icon = () => props.icon ?? \"ti ti-search\";\n const shortcut = () => props.shortcutLabel;\n const title = () => props.title ?? label();\n const showsShortcut = () => Boolean(shortcut()) && [\"chip\", \"sidebar\"].includes(variant());\n\n return (\n <button\n type=\"button\"\n class={`k2b-spotlight-button ${props.class ?? \"\"}`}\n data-variant={variant()}\n disabled={props.disabled}\n aria-label={props.ariaLabel ?? ([\"compact\", \"icon\"].includes(variant()) ? label() : undefined)}\n title={title()}\n onClick={() => void props.onClick()}\n >\n <i class={icon()} aria-hidden=\"true\" />\n <span class=\"k2b-spotlight-button__label\">{label()}</span>\n {showsShortcut() && <kbd>{shortcut()}</kbd>}\n </button>\n );\n}\n\nexport default SpotlightButton;\n"],"mappings":";;;;;AAEA,SAAS,OAAO,QAAQ,qBAAqB;AAC7C,SAAS,iBAAiB,EAAE,aAAa,QAAQ,kBAAkB;AAsBnE,OAAO,MAAM,mBAAmB,GAC9B,OAAkC,IACW;EAC7C,MAAM;IAAE,OAAO;IAAE,GAAG;EAAc,CAAC,GAAG,OAAO;EAC7C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC;EACpC,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,QAAQ,CAAC,MAAM;IAC5B,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,QAAQ,CAAC,kBAAkB;IAC1C,IAAI,EAAE,OAAO;IACb,GAAG;EACL,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,SAAS,eAAe,CAAC,KAA2B,EAAe;EACxE,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,IAAI,SAAS;EAChD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW;EACzD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,IAAI,cAAc;EAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa;EAC1C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;EAC1C,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;EAE1F,qBAGW,iCAAwB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,0CACpC,OAAO,CAAC,CAAC,4CACb,KAAK,CAAC,QAAQ,gDACZ,KAAK,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,mDACvF,KAAK,CAAC,CAAC,kDAGJ,IAAI,CAAC,CAAC,0BAC2B,KAAK,CAAC,CAAC,GACjD,aAAa,CAAC,CAAC,4BAAU,QAAQ,CAAC,CAAC,EAAO;AAGjD;AAEA,eAAe,eAAe","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["children","createEffect","createMemo","createUniqueId","For","Show","resolveMaybeAccessor","useUiMessages","createScrollFade","TABS_ITEM","Symbol","isTabsItem","value","kind","collectTabsItems","Array","isArray","flatMap","TabsItem","props","TabsRoot","messages","root","list","orientation","instanceId","resolvedChildren","trailing","items","options","toArray","map","item","label","icon","disabled","panel","onClose","closeLabel","buttons","closing","requestClose","option","current","active","find","activeIndex","Math","max","findIndex","enabled","index","filter","tabStopIndex","selected","removed","undefined","some","queueMicrotask","scrollIntoView","block","inline","target","length","querySelector","focus","select","onValueChange","move","delta","available","currentIndex","next","_$ssr","_tmpl$3","_$escape","class","_$ssrAttribute","variant","ariaLabel","_$createComponent","each","id","panelId","_tmpl$5","when","_tmpl$6","_tmpl$4","closeNamed","name","_tmpl$","_tmpl$2","Tabs","Item"],"sources":["actions/Tabs.tsx"],"sourcesContent":["import { children, createEffect, createMemo, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { resolveMaybeAccessor } from \"../inputs/field-contract\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { createScrollFade } from \"../layout/scroll-fade\";\n\nexport type TabOption<T extends string = string> = {\n value: T;\n label: JSX.Element;\n icon?: string;\n disabled?: boolean;\n panel?: JSX.Element;\n onClose?: () => void;\n closeLabel?: string;\n};\n\nexport type TabsItemProps<T extends string = string> = Omit<TabOption<T>, \"panel\"> & {\n children?: JSX.Element;\n};\n\ntype TabsItemSlot<T extends string = string> = {\n readonly kind: typeof TABS_ITEM;\n readonly props: TabsItemProps<T>;\n};\n\nexport type TabsProps<T extends string = string> = {\n value: MaybeAccessor<T>;\n onValueChange: (value: T) => void;\n ariaLabel: string;\n orientation?: \"horizontal\" | \"vertical\";\n class?: string;\n variant?: \"line\" | \"pill\";\n trailing?: JSX.Element;\n /** Data-driven alternative to colocated `Tabs.Item` children. */\n options?: readonly TabOption<T>[];\n children?: JSX.Element;\n};\n\ntype TabsComponent = (<T extends string = string>(props: TabsProps<T>) => JSX.Element) & {\n Item: <T extends string = string>(props: TabsItemProps<T>) => JSX.Element;\n};\n\nconst TABS_ITEM = Symbol(\"Tabs.Item\");\n\nconst isTabsItem = <T extends string>(value: unknown): value is TabsItemSlot<T> =>\n !!value && typeof value === \"object\" && \"kind\" in value && value.kind === TABS_ITEM;\n\nconst collectTabsItems = <T extends string>(value: unknown): TabsItemSlot<T>[] => {\n if (Array.isArray(value)) return value.flatMap(collectTabsItems<T>);\n return isTabsItem<T>(value) ? [value] : [];\n};\n\nfunction TabsItem<T extends string = string>(props: TabsItemProps<T>): JSX.Element {\n return { kind: TABS_ITEM, props } satisfies TabsItemSlot<T> as unknown as JSX.Element;\n}\n\n/** Controlled, keyboard-accessible tabs with compositional or data-driven items. */\nfunction TabsRoot<T extends string = string>(props: TabsProps<T>): JSX.Element {\n const messages = useUiMessages();\n let root: HTMLDivElement | undefined;\n let list: HTMLDivElement | undefined;\n createScrollFade(\n () => list,\n () => props.orientation !== \"vertical\",\n );\n const instanceId = `k2b-tabs-${createUniqueId()}`;\n const resolvedChildren = children(() => props.children);\n const trailing = children(() => props.trailing);\n const items = createMemo<readonly TabOption<T>[]>(() => {\n if (props.options) return props.options;\n return collectTabsItems<T>(resolvedChildren.toArray()).map((item) => ({\n value: item.props.value,\n label: item.props.label,\n icon: item.props.icon,\n disabled: item.props.disabled,\n panel: item.props.children,\n onClose: item.props.onClose,\n closeLabel: item.props.closeLabel,\n }));\n });\n const buttons: HTMLButtonElement[] = [];\n let closing: T | undefined;\n const requestClose = (option: TabOption<T>) => {\n closing = option.value;\n option.onClose?.();\n };\n const current = () => resolveMaybeAccessor(props.value);\n const active = createMemo(() => items().find((option) => option.value === current()));\n const activeIndex = createMemo(() =>\n Math.max(\n 0,\n items().findIndex((option) => option.value === current()),\n ),\n );\n const enabled = () =>\n items()\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !option.disabled);\n const tabStopIndex = createMemo(() => {\n const selected = items().findIndex((option) => option.value === current() && !option.disabled);\n return selected >= 0 ? selected : (enabled()[0]?.index ?? -1);\n });\n createEffect(() => {\n const index = activeIndex();\n const removed = closing !== undefined && !items().some((item) => item.value === closing);\n if (removed) closing = undefined;\n queueMicrotask(() => {\n buttons[index]?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n if (removed) {\n const target = items().length ? buttons[index] : root?.querySelector<HTMLElement>(\".k2b-tabs__trailing button\");\n target?.focus();\n }\n });\n });\n const select = (index: number) => {\n const option = items()[index];\n if (!option || option.disabled) return;\n props.onValueChange(option.value);\n queueMicrotask(() => buttons[index]?.focus());\n };\n const move = (index: number, delta: 1 | -1) => {\n const available = enabled();\n if (available.length === 0) return;\n const currentIndex = available.findIndex((item) => item.index === index);\n const next = available[(currentIndex + delta + available.length) % available.length] ?? available[0];\n if (next) select(next.index);\n };\n\n return (\n <div\n ref={root}\n class={`k2b-tabs ${props.class ?? \"\"}`}\n data-orientation={props.orientation ?? \"horizontal\"}\n data-variant={props.variant ?? \"line\"}\n >\n <div class=\"k2b-tabs__bar\">\n <div\n ref={list}\n data-scroll-fade-mode={props.orientation !== \"vertical\" ? \"both\" : undefined}\n data-scroll-fade-axis=\"horizontal\"\n class=\"k2b-tabs__list\"\n role=\"tablist\"\n aria-label={props.ariaLabel}\n aria-orientation={props.orientation ?? \"horizontal\"}\n >\n <For each={items()}>\n {(option, index) => {\n const id = () => `${instanceId}-tab-${index()}`;\n const panelId = () => `${instanceId}-panel-${index()}`;\n return (\n <div class=\"k2b-tabs__item\" role=\"presentation\">\n <button\n ref={(element) => {\n buttons[index()] = element;\n }}\n id={id()}\n type=\"button\"\n role=\"tab\"\n aria-selected={current() === option.value}\n aria-controls={option.panel !== undefined ? panelId() : undefined}\n tabIndex={tabStopIndex() === index() ? 0 : -1}\n disabled={option.disabled}\n onClick={() => props.onValueChange(option.value)}\n onKeyDown={(event) => {\n if ((event.key === \"Delete\" || event.key === \"Backspace\") && option.onClose) {\n event.preventDefault();\n requestClose(option);\n return;\n }\n const previous = props.orientation === \"vertical\" ? \"ArrowUp\" : \"ArrowLeft\";\n const next = props.orientation === \"vertical\" ? \"ArrowDown\" : \"ArrowRight\";\n if (event.key === previous || event.key === next) {\n event.preventDefault();\n move(index(), event.key === next ? 1 : -1);\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n const available = enabled();\n const target = event.key === \"End\" ? available.at(-1) : available[0];\n if (target) select(target.index);\n }\n }}\n >\n <Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{option.label}</span>\n </button>\n <Show when={option.onClose}>\n <button\n type=\"button\"\n class=\"k2b-tabs__close\"\n aria-label={\n option.closeLabel ??\n messages().closeNamed({ name: typeof option.label === \"string\" ? option.label : props.ariaLabel })\n }\n disabled={option.disabled}\n onClick={() => requestClose(option)}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n );\n }}\n </For>\n </div>\n <Show when={trailing()}>\n <div class=\"k2b-tabs__trailing\">{trailing()}</div>\n </Show>\n </div>\n <Show when={active()?.panel !== undefined}>\n <div\n id={`${instanceId}-panel-${activeIndex()}`}\n class=\"k2b-tabs__panel\"\n role=\"tabpanel\"\n aria-labelledby={`${instanceId}-tab-${activeIndex()}`}\n tabIndex={0}\n >\n {active()?.panel}\n </div>\n </Show>\n </div>\n );\n}\n\nexport const Tabs = TabsRoot as TabsComponent;\nTabs.Item = TabsItem;\n\nexport default Tabs;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/Tabs.tsx"],"sourcesContent":["import { children, createEffect, createMemo, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { resolveMaybeAccessor } from \"../inputs/field-contract\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { createScrollFade } from \"../layout/scroll-fade\";\n\nexport type TabOption<T extends string = string> = {\n value: T;\n label: JSX.Element;\n icon?: string;\n disabled?: boolean;\n panel?: JSX.Element;\n onClose?: () => void;\n closeLabel?: string;\n};\n\nexport type TabsItemProps<T extends string = string> = Omit<TabOption<T>, \"panel\"> & {\n children?: JSX.Element;\n};\n\ntype TabsItemSlot<T extends string = string> = {\n readonly kind: typeof TABS_ITEM;\n readonly props: TabsItemProps<T>;\n};\n\nexport type TabsProps<T extends string = string> = {\n value: MaybeAccessor<T>;\n onValueChange: (value: T) => void;\n ariaLabel: string;\n orientation?: \"horizontal\" | \"vertical\";\n class?: string;\n variant?: \"line\" | \"pill\";\n trailing?: JSX.Element;\n /** Data-driven alternative to colocated `Tabs.Item` children. */\n options?: readonly TabOption<T>[];\n children?: JSX.Element;\n};\n\ntype TabsComponent = (<T extends string = string>(props: TabsProps<T>) => JSX.Element) & {\n Item: <T extends string = string>(props: TabsItemProps<T>) => JSX.Element;\n};\n\nconst TABS_ITEM = Symbol(\"Tabs.Item\");\n\nconst isTabsItem = <T extends string>(value: unknown): value is TabsItemSlot<T> =>\n !!value && typeof value === \"object\" && \"kind\" in value && value.kind === TABS_ITEM;\n\nconst collectTabsItems = <T extends string>(value: unknown): TabsItemSlot<T>[] => {\n if (Array.isArray(value)) return value.flatMap(collectTabsItems<T>);\n return isTabsItem<T>(value) ? [value] : [];\n};\n\nfunction TabsItem<T extends string = string>(props: TabsItemProps<T>): JSX.Element {\n return { kind: TABS_ITEM, props } satisfies TabsItemSlot<T> as unknown as JSX.Element;\n}\n\n/** Controlled, keyboard-accessible tabs with compositional or data-driven items. */\nfunction TabsRoot<T extends string = string>(props: TabsProps<T>): JSX.Element {\n const messages = useUiMessages();\n let root: HTMLDivElement | undefined;\n let list: HTMLDivElement | undefined;\n createScrollFade(\n () => list,\n () => props.orientation !== \"vertical\",\n );\n const instanceId = `k2b-tabs-${createUniqueId()}`;\n const resolvedChildren = children(() => props.children);\n const trailing = children(() => props.trailing);\n const items = createMemo<readonly TabOption<T>[]>(() => {\n if (props.options) return props.options;\n return collectTabsItems<T>(resolvedChildren.toArray()).map((item) => ({\n value: item.props.value,\n label: item.props.label,\n icon: item.props.icon,\n disabled: item.props.disabled,\n panel: item.props.children,\n onClose: item.props.onClose,\n closeLabel: item.props.closeLabel,\n }));\n });\n const buttons: HTMLButtonElement[] = [];\n let closing: T | undefined;\n const requestClose = (option: TabOption<T>) => {\n closing = option.value;\n option.onClose?.();\n };\n const current = () => resolveMaybeAccessor(props.value);\n const active = createMemo(() => items().find((option) => option.value === current()));\n const activeIndex = createMemo(() =>\n Math.max(\n 0,\n items().findIndex((option) => option.value === current()),\n ),\n );\n const enabled = () =>\n items()\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !option.disabled);\n const tabStopIndex = createMemo(() => {\n const selected = items().findIndex((option) => option.value === current() && !option.disabled);\n return selected >= 0 ? selected : (enabled()[0]?.index ?? -1);\n });\n createEffect(() => {\n const index = activeIndex();\n const removed = closing !== undefined && !items().some((item) => item.value === closing);\n if (removed) closing = undefined;\n queueMicrotask(() => {\n buttons[index]?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n if (removed) {\n const target = items().length ? buttons[index] : root?.querySelector<HTMLElement>(\".k2b-tabs__trailing button\");\n target?.focus();\n }\n });\n });\n const select = (index: number) => {\n const option = items()[index];\n if (!option || option.disabled) return;\n props.onValueChange(option.value);\n queueMicrotask(() => buttons[index]?.focus());\n };\n const move = (index: number, delta: 1 | -1) => {\n const available = enabled();\n if (available.length === 0) return;\n const currentIndex = available.findIndex((item) => item.index === index);\n const next = available[(currentIndex + delta + available.length) % available.length] ?? available[0];\n if (next) select(next.index);\n };\n\n return (\n <div\n ref={root}\n class={`k2b-tabs ${props.class ?? \"\"}`}\n data-orientation={props.orientation ?? \"horizontal\"}\n data-variant={props.variant ?? \"line\"}\n >\n <div class=\"k2b-tabs__bar\">\n <div\n ref={list}\n data-scroll-fade-mode={props.orientation !== \"vertical\" ? \"both\" : undefined}\n data-scroll-fade-axis=\"horizontal\"\n class=\"k2b-tabs__list\"\n role=\"tablist\"\n aria-label={props.ariaLabel}\n aria-orientation={props.orientation ?? \"horizontal\"}\n >\n <For each={items()}>\n {(option, index) => {\n const id = () => `${instanceId}-tab-${index()}`;\n const panelId = () => `${instanceId}-panel-${index()}`;\n return (\n <div class=\"k2b-tabs__item\" role=\"presentation\">\n <button\n ref={(element) => {\n buttons[index()] = element;\n }}\n id={id()}\n type=\"button\"\n role=\"tab\"\n aria-selected={current() === option.value}\n aria-controls={option.panel !== undefined ? panelId() : undefined}\n tabIndex={tabStopIndex() === index() ? 0 : -1}\n disabled={option.disabled}\n onClick={() => props.onValueChange(option.value)}\n onKeyDown={(event) => {\n if ((event.key === \"Delete\" || event.key === \"Backspace\") && option.onClose) {\n event.preventDefault();\n requestClose(option);\n return;\n }\n const previous = props.orientation === \"vertical\" ? \"ArrowUp\" : \"ArrowLeft\";\n const next = props.orientation === \"vertical\" ? \"ArrowDown\" : \"ArrowRight\";\n if (event.key === previous || event.key === next) {\n event.preventDefault();\n move(index(), event.key === next ? 1 : -1);\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n const available = enabled();\n const target = event.key === \"End\" ? available.at(-1) : available[0];\n if (target) select(target.index);\n }\n }}\n >\n <Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{option.label}</span>\n </button>\n <Show when={option.onClose}>\n <button\n type=\"button\"\n class=\"k2b-tabs__close\"\n aria-label={\n option.closeLabel ??\n messages().closeNamed({ name: typeof option.label === \"string\" ? option.label : props.ariaLabel })\n }\n disabled={option.disabled}\n onClick={() => requestClose(option)}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n );\n }}\n </For>\n </div>\n <Show when={trailing()}>\n <div class=\"k2b-tabs__trailing\">{trailing()}</div>\n </Show>\n </div>\n <Show when={active()?.panel !== undefined}>\n <div\n id={`${instanceId}-panel-${activeIndex()}`}\n class=\"k2b-tabs__panel\"\n role=\"tabpanel\"\n aria-labelledby={`${instanceId}-tab-${activeIndex()}`}\n tabIndex={0}\n >\n {active()?.panel}\n </div>\n </Show>\n </div>\n );\n}\n\nexport const Tabs = TabsRoot as TabsComponent;\nTabs.Item = TabsItem;\n\nexport default Tabs;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","defaultToolbarOrientation","ToolbarOrientationContext","ToolbarGroup","props","_$ssr","_tmpl$","_$escape","class","_$ssrAttribute","label","children","ToolbarSeparator","toolbarOrientation","separatorOrientation","_tmpl$2","ToolbarSpacer","_tmpl$3","Toolbar","Object","assign","orientation","_$createComponent","Provider","value","_tmpl$4","wrap","undefined","Group","Separator","Spacer"],"sources":["actions/Toolbar.tsx"],"sourcesContent":["import { createContext, type JSX, useContext } from \"solid-js\";\n\nexport type ToolbarProps = {\n children: JSX.Element;\n label: string;\n orientation?: \"horizontal\" | \"vertical\";\n wrap?: boolean;\n class?: string;\n};\n\nexport type ToolbarGroupProps = { children: JSX.Element; label?: string; class?: string };\nexport type ToolbarSeparatorProps = { class?: string };\n\ntype ToolbarComponent = ((props: ToolbarProps) => JSX.Element) & {\n Group: (props: ToolbarGroupProps) => JSX.Element;\n Separator: (props: ToolbarSeparatorProps) => JSX.Element;\n Spacer: () => JSX.Element;\n};\n\ntype ToolbarOrientation = NonNullable<ToolbarProps[\"orientation\"]>;\n\nconst defaultToolbarOrientation: () => ToolbarOrientation = () => \"horizontal\";\nconst ToolbarOrientationContext = createContext(defaultToolbarOrientation);\n\nconst ToolbarGroup = (props: ToolbarGroupProps): JSX.Element => (\n <div class={`k2b-toolbar__group ${props.class ?? \"\"}`} role=\"group\" aria-label={props.label}>\n {props.children}\n </div>\n);\n\nconst ToolbarSeparator = (props: ToolbarSeparatorProps): JSX.Element => {\n const toolbarOrientation = useContext(ToolbarOrientationContext);\n const separatorOrientation = () => (toolbarOrientation() === \"horizontal\" ? \"vertical\" : \"horizontal\");\n\n return (\n <span\n class={`k2b-toolbar__separator ${props.class ?? \"\"}`}\n role=\"separator\"\n aria-orientation={separatorOrientation()}\n data-orientation={separatorOrientation()}\n />\n );\n};\n\nconst ToolbarSpacer = (): JSX.Element => <span class=\"k2b-toolbar__spacer\" aria-hidden=\"true\" />;\n\nexport const Toolbar = Object.assign(\n (props: ToolbarProps): JSX.Element => {\n const orientation = () => props.orientation ?? \"horizontal\";\n\n return (\n <ToolbarOrientationContext.Provider value={orientation}>\n <div\n class={`k2b-toolbar ${props.class ?? \"\"}`}\n role=\"toolbar\"\n aria-label={props.label}\n aria-orientation={orientation()}\n data-orientation={orientation()}\n data-wrap={props.wrap ? \"true\" : undefined}\n >\n {props.children}\n </div>\n </ToolbarOrientationContext.Provider>\n );\n },\n { Group: ToolbarGroup, Separator: ToolbarSeparator, Spacer: ToolbarSpacer },\n) as ToolbarComponent;\n\nexport default Toolbar;\n"],"mappings":";;;;;;;;AAAA,SAASA,aAAa,EAAYC,UAAU,QAAQ,UAAU;AAqB9D,MAAMC,yBAAmD,GAAGA,CAAA,KAAM,YAAY;AAC9E,MAAMC,yBAAyB,GAAGH,aAAa,CAACE,yBAAyB,CAAC;AAE1E,MAAME,YAAY,GAAIC,KAAwB,IAAAC,KAAA,CAAAC,MAAA,EAChC,sBAAAC,QAAA,CAAsBH,KAAK,CAACI,KAAK,IAAI,EAAE,SAAE,EAAAC,cAAA,eAAAF,QAAA,CAA2BH,KAAK,CAACM,KAAK,iBAAAH,QAAA,CACxFH,KAAK,CAACO,QAAQ,EAElB;AAED,MAAMC,gBAAgB,GAAIR,KAA4B,IAAkB;EACtE,MAAMS,kBAAkB,GAAGb,UAAU,CAACE,yBAAyB,CAAC;EAChE,MAAMY,oBAAoB,GAAGA,CAAA,KAAOD,kBAAkB,CAAC,CAAC,KAAK,YAAY,GAAG,UAAU,GAAG,YAAa;EAEtG,OAAAR,KAAA,CAAAU,OAAA,EAEW,0BAAAR,QAAA,CAA0BH,KAAK,CAACI,KAAK,IAAI,EAAE,SAAE,EAAAC,cAAA,qBAAAF,QAAA,CAElCO,oBAAoB,CAAC,CAAC,kBAAAL,cAAA,qBAAAF,QAAA,CACtBO,oBAAoB,CAAC,CAAC;AAG9C,CAAC;AAED,MAAME,aAAa,GAAGA,CAAA,KAAAX,KAAA,CAAAY,OAAA,CAA0E;AAEhG,OAAO,MAAMC,OAAO,GAAGC,MAAM,CAACC,MAAM,CACjChB,KAAmB,IAAkB;EACpC,MAAMiB,WAAW,GAAGA,CAAA,KAAMjB,KAAK,CAACiB,WAAW,IAAI,YAAY;EAE3D,OAAAC,iBAAA,CACGpB,yBAAyB,CAACqB,QAAQ;IAACC,KAAK,EAAEH,WAAW;IAAA,IAAAV,SAAA;MAAA,OAAAN,KAAA,CAAAoB,OAAA,EAE3C,eAAAlB,QAAA,CAAeH,KAAK,CAACI,KAAK,IAAI,EAAE,SAAE,EAAAC,cAAA,eAAAF,QAAA,CAE7BH,KAAK,CAACM,KAAK,kBAAAD,cAAA,qBAAAF,QAAA,CACLc,WAAW,CAAC,CAAC,kBAAAZ,cAAA,qBAAAF,QAAA,CACbc,WAAW,CAAC,CAAC,kBAAAZ,cAAA,cACpBL,KAAK,CAACsB,IAAI,GAAG,MAAM,GAAAnB,QAAA,CAAGoB,SAAS,iBAAApB,QAAA,CAEzCH,KAAK,CAACO,QAAQ;IAAA;EAAA;AAIvB,CAAC,EACD;EAAEiB,KAAK,EAAEzB,YAAY;EAAE0B,SAAS,EAAEjB,gBAAgB;EAAEkB,MAAM,EAAEd;AAAc,CAC5E,CAAqB;AAErB,eAAeE,OAAO","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/Toolbar.tsx"],"sourcesContent":["import { createContext, type JSX, useContext } from \"solid-js\";\n\nexport type ToolbarProps = {\n children: JSX.Element;\n label: string;\n orientation?: \"horizontal\" | \"vertical\";\n wrap?: boolean;\n class?: string;\n};\n\nexport type ToolbarGroupProps = { children: JSX.Element; label?: string; class?: string };\nexport type ToolbarSeparatorProps = { class?: string };\n\ntype ToolbarComponent = ((props: ToolbarProps) => JSX.Element) & {\n Group: (props: ToolbarGroupProps) => JSX.Element;\n Separator: (props: ToolbarSeparatorProps) => JSX.Element;\n Spacer: () => JSX.Element;\n};\n\ntype ToolbarOrientation = NonNullable<ToolbarProps[\"orientation\"]>;\n\nconst defaultToolbarOrientation: () => ToolbarOrientation = () => \"horizontal\";\nconst ToolbarOrientationContext = createContext(defaultToolbarOrientation);\n\nconst ToolbarGroup = (props: ToolbarGroupProps): JSX.Element => (\n <div class={`k2b-toolbar__group ${props.class ?? \"\"}`} role=\"group\" aria-label={props.label}>\n {props.children}\n </div>\n);\n\nconst ToolbarSeparator = (props: ToolbarSeparatorProps): JSX.Element => {\n const toolbarOrientation = useContext(ToolbarOrientationContext);\n const separatorOrientation = () => (toolbarOrientation() === \"horizontal\" ? \"vertical\" : \"horizontal\");\n\n return (\n <span\n class={`k2b-toolbar__separator ${props.class ?? \"\"}`}\n role=\"separator\"\n aria-orientation={separatorOrientation()}\n data-orientation={separatorOrientation()}\n />\n );\n};\n\nconst ToolbarSpacer = (): JSX.Element => <span class=\"k2b-toolbar__spacer\" aria-hidden=\"true\" />;\n\nexport const Toolbar = Object.assign(\n (props: ToolbarProps): JSX.Element => {\n const orientation = () => props.orientation ?? \"horizontal\";\n\n return (\n <ToolbarOrientationContext.Provider value={orientation}>\n <div\n class={`k2b-toolbar ${props.class ?? \"\"}`}\n role=\"toolbar\"\n aria-label={props.label}\n aria-orientation={orientation()}\n data-orientation={orientation()}\n data-wrap={props.wrap ? \"true\" : undefined}\n >\n {props.children}\n </div>\n </ToolbarOrientationContext.Provider>\n );\n },\n { Group: ToolbarGroup, Separator: ToolbarSeparator, Spacer: ToolbarSpacer },\n) as ToolbarComponent;\n\nexport default Toolbar;\n"],"mappings":";;;;;;;;AAAA,SAAS,aAAa,EAAY,UAAU,QAAQ,UAAU;AAqB9D,MAAM,yBAAmD,GAAG,MAAM,YAAY;AAC9E,MAAM,yBAAyB,GAAG,aAAa,CAAC,yBAAyB,CAAC;AAE1E,MAAM,YAAY,GAAI,KAAwB,kBAChC,+BAAsB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,wCAA2B,KAAK,CAAC,KAAK,0BACxF,KAAK,CAAC,QAAQ,EAElB;AAED,MAAM,gBAAgB,GAAI,KAA4B,IAAkB;EACtE,MAAM,kBAAkB,GAAG,UAAU,CAAC,yBAAyB,CAAC;EAChE,MAAM,oBAAoB,GAAG,MAAO,kBAAkB,CAAC,CAAC,KAAK,YAAY,GAAG,UAAU,GAAG,YAAa;EAEtG,sBAEW,mCAA0B,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,8CAElC,oBAAoB,CAAC,CAAC,8DACtB,oBAAoB,CAAC,CAAC;AAG9C,CAAC;AAED,MAAM,aAAa,GAAG,oBAA0E;AAEhG,OAAO,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CACjC,KAAmB,IAAkB;EACpC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,IAAI,YAAY;EAE3D,yBACG,yBAAyB,CAAC,QAAQ;IAAC,KAAK,EAAE,WAAW;IAAA;MAAA,sBAE3C,wBAAe,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,wCAE7B,KAAK,CAAC,KAAK,8DACL,WAAW,CAAC,CAAC,8DACb,WAAW,CAAC,CAAC,8CACpB,KAAK,CAAC,IAAI,GAAG,MAAM,YAAG,SAAS,0BAEzC,KAAK,CAAC,QAAQ;IAAA;EAAA;AAIvB,CAAC,EACD;EAAE,KAAK,EAAE,YAAY;EAAE,SAAS,EAAE,gBAAgB;EAAE,MAAM,EAAE;AAAc,CAC5E,CAAqB;AAErB,eAAe,OAAO","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Button","ButtonLink","IconButton","IconButtonLink","ContextMenu","CopyButton","Disclosure","Dropdown","DropdownItem","dropdownPosition","FilterChip","RemoveButton","SegmentedControl","SplitButton","openSpotlightSearch","SpotlightButton","Tabs","Toolbar"],"sources":["actions/index.ts"],"sourcesContent":["export type { ButtonLinkProps, ButtonProps, ButtonSize, ButtonVariant, IconButtonLinkProps, IconButtonProps } from \"./Button\";\nexport { Button, ButtonLink, IconButton, IconButtonLink } from \"./Button\";\nexport type { ContextMenuProps } from \"./ContextMenu\";\nexport { ContextMenu } from \"./ContextMenu\";\nexport type { CopyButtonProps, CopyButtonValue } from \"./CopyButton\";\nexport { CopyButton } from \"./CopyButton\";\nexport type { DisclosureProps } from \"./Disclosure\";\nexport { Disclosure } from \"./Disclosure\";\nexport type {\n DropdownAction,\n DropdownActionBase,\n DropdownChoice,\n DropdownItemProps,\n DropdownPosition,\n DropdownProps,\n DropdownSection,\n DropdownTriggerProps,\n} from \"./Dropdown\";\nexport { Dropdown, DropdownItem, dropdownPosition } from \"./Dropdown\";\nexport type { FilterChipOption, FilterChipProps, FilterChipSection } from \"./FilterChip\";\nexport { FilterChip } from \"./FilterChip\";\nexport type { RemoveButtonProps } from \"./RemoveButton\";\nexport { RemoveButton } from \"./RemoveButton\";\nexport type { SegmentedControlProps, SegmentOption } from \"./SegmentedControl\";\nexport { SegmentedControl } from \"./SegmentedControl\";\nexport type { SplitButtonProps } from \"./SplitButton\";\nexport { SplitButton } from \"./SplitButton\";\nexport type {\n SpotlightButtonProps,\n SpotlightButtonVariant,\n SpotlightSearchOptions,\n SpotlightSearchResolver,\n} from \"./SpotlightSearch\";\nexport {\n openSpotlightSearch,\n SpotlightButton,\n} from \"./SpotlightSearch\";\nexport type { TabOption, TabsItemProps, TabsProps } from \"./Tabs\";\nexport { Tabs } from \"./Tabs\";\nexport type { ToolbarGroupProps, ToolbarProps, ToolbarSeparatorProps } from \"./Toolbar\";\nexport { Toolbar } from \"./Toolbar\";\n"],"mappings":"AACA,SAASA,MAAM,EAAEC,UAAU,EAAEC,UAAU,EAAEC,cAAc,QAAQ,UAAU;AAEzE,SAASC,WAAW,QAAQ,eAAe;AAE3C,SAASC,UAAU,QAAQ,cAAc;AAEzC,SAASC,UAAU,QAAQ,cAAc;AAWzC,SAASC,QAAQ,EAAEC,YAAY,EAAEC,gBAAgB,QAAQ,YAAY;AAErE,SAASC,UAAU,QAAQ,cAAc;AAEzC,SAASC,YAAY,QAAQ,gBAAgB;AAE7C,SAASC,gBAAgB,QAAQ,oBAAoB;AAErD,SAASC,WAAW,QAAQ,eAAe;AAO3C,SACEC,mBAAmB,EACnBC,eAAe,QACV,mBAAmB;AAE1B,SAASC,IAAI,QAAQ,QAAQ;AAE7B,SAASC,OAAO,QAAQ,WAAW","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/index.ts"],"sourcesContent":["export type { ButtonAlign, ButtonLinkProps, ButtonProps, ButtonSize, ButtonVariant, IconButtonLinkProps, IconButtonProps } from \"./Button\";\nexport { Button, ButtonLink, IconButton, IconButtonLink } from \"./Button\";\nexport type { ContextMenuProps } from \"./ContextMenu\";\nexport { ContextMenu } from \"./ContextMenu\";\nexport type { CopyButtonProps, CopyButtonValue } from \"./CopyButton\";\nexport { CopyButton } from \"./CopyButton\";\nexport type { DisclosureProps } from \"./Disclosure\";\nexport { Disclosure } from \"./Disclosure\";\nexport type {\n DropdownAction,\n DropdownActionBase,\n DropdownChoice,\n DropdownItemProps,\n DropdownPosition,\n DropdownProps,\n DropdownSection,\n DropdownTriggerProps,\n} from \"./Dropdown\";\nexport { Dropdown, DropdownItem, dropdownPosition } from \"./Dropdown\";\nexport type { FilterChipOption, FilterChipProps, FilterChipSection } from \"./FilterChip\";\nexport { FilterChip } from \"./FilterChip\";\nexport type { RemoveButtonProps } from \"./RemoveButton\";\nexport { RemoveButton } from \"./RemoveButton\";\nexport type { SegmentedControlProps, SegmentOption } from \"./SegmentedControl\";\nexport { SegmentedControl } from \"./SegmentedControl\";\nexport type { SplitButtonProps } from \"./SplitButton\";\nexport { SplitButton } from \"./SplitButton\";\nexport type {\n SpotlightButtonProps,\n SpotlightButtonVariant,\n SpotlightSearchOptions,\n SpotlightSearchResolver,\n} from \"./SpotlightSearch\";\nexport {\n openSpotlightSearch,\n SpotlightButton,\n} from \"./SpotlightSearch\";\nexport type { TabOption, TabsItemProps, TabsProps } from \"./Tabs\";\nexport { Tabs } from \"./Tabs\";\nexport type { ToolbarGroupProps, ToolbarProps, ToolbarSeparatorProps } from \"./Toolbar\";\nexport { Toolbar } from \"./Toolbar\";\n"],"mappings":"AACA,SAAS,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,QAAQ,UAAU;AAEzE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,UAAU,QAAQ,cAAc;AAWzC,SAAS,QAAQ,EAAE,YAAY,EAAE,gBAAgB,QAAQ,YAAY;AAErE,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SAAS,gBAAgB,QAAQ,oBAAoB;AAErD,SAAS,WAAW,QAAQ,eAAe;AAO3C,SACE,mBAAmB,EACnB,eAAe,QACV,mBAAmB;AAE1B,SAAS,IAAI,QAAQ,QAAQ;AAE7B,SAAS,OAAO,QAAQ,WAAW","ignoreList":[]}