@k2b/ui 0.4.2 → 0.5.1

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 (383) hide show
  1. package/dist/browser/actions/Button.js.map +1 -1
  2. package/dist/browser/actions/ContextMenu.js.map +1 -1
  3. package/dist/browser/actions/CopyButton.js.map +1 -1
  4. package/dist/browser/actions/Disclosure.js.map +1 -1
  5. package/dist/browser/actions/Dropdown.js.map +1 -1
  6. package/dist/browser/actions/FilterChip.js.map +1 -1
  7. package/dist/browser/actions/RemoveButton.js.map +1 -1
  8. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  9. package/dist/browser/actions/SplitButton.js.map +1 -1
  10. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  11. package/dist/browser/actions/Tabs.js.map +1 -1
  12. package/dist/browser/actions/Toolbar.js.map +1 -1
  13. package/dist/browser/actions/index.js.map +1 -1
  14. package/dist/browser/chat/ChatComposer.js.map +1 -1
  15. package/dist/browser/chat/ChatContextPopup.js.map +1 -1
  16. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  17. package/dist/browser/chat/ChatRoot.js.map +1 -1
  18. package/dist/browser/chat/ChatTasks.js +1 -1
  19. package/dist/browser/chat/ChatTasks.js.map +1 -1
  20. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  21. package/dist/browser/chat/chat-behavior.js.map +1 -1
  22. package/dist/browser/chat/composer-document.js.map +1 -1
  23. package/dist/browser/chat/index.js.map +1 -1
  24. package/dist/browser/content/Calendar.js.map +1 -1
  25. package/dist/browser/content/Chart.js.map +1 -1
  26. package/dist/browser/content/ChartExplorer.js.map +1 -1
  27. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  28. package/dist/browser/content/ChartFilterControls.js +1 -1
  29. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  30. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  31. package/dist/browser/content/CodeDisplay.js.map +1 -1
  32. package/dist/browser/content/DataTable.js.map +1 -1
  33. package/dist/browser/content/Docs.js.map +1 -1
  34. package/dist/browser/content/FileBrowser.js.map +1 -1
  35. package/dist/browser/content/FileGrid.js.map +1 -1
  36. package/dist/browser/content/FileTree.js.map +1 -1
  37. package/dist/browser/content/FileView.js.map +1 -1
  38. package/dist/browser/content/Lightbox.js.map +1 -1
  39. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  40. package/dist/browser/content/MarkdownView.js.map +1 -1
  41. package/dist/browser/content/Pagination.js.map +1 -1
  42. package/dist/browser/content/PdfPreview.js.map +1 -1
  43. package/dist/browser/content/RangePicker.js.map +1 -1
  44. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  45. package/dist/browser/content/calendar-event-layout.js.map +1 -1
  46. package/dist/browser/content/calendar-pointer.js.map +1 -1
  47. package/dist/browser/content/chart-cursor.js.map +1 -1
  48. package/dist/browser/content/chart-explorer.js.map +1 -1
  49. package/dist/browser/content/chart-inspection.js.map +1 -1
  50. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  51. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  52. package/dist/browser/content/chart-snapshot.js.map +1 -1
  53. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  54. package/dist/browser/content/chart-svg.js.map +1 -1
  55. package/dist/browser/content/code-highlight.js.map +1 -1
  56. package/dist/browser/content/collection-selection.js.map +1 -1
  57. package/dist/browser/content/delimited-preferences.js.map +1 -1
  58. package/dist/browser/content/file-tree.js.map +1 -1
  59. package/dist/browser/content/file-view-preview.js.map +1 -1
  60. package/dist/browser/content/index.js.map +1 -1
  61. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  62. package/dist/browser/feedback/Tooltip.js.map +1 -1
  63. package/dist/browser/feedback/dialog-core.js.map +1 -1
  64. package/dist/browser/feedback/index.js.map +1 -1
  65. package/dist/browser/feedback/prompts.js.map +1 -1
  66. package/dist/browser/feedback/toast.js.map +1 -1
  67. package/dist/browser/feedback/tooltip-position.js.map +1 -1
  68. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  69. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  70. package/dist/browser/inputs/Checkbox.js.map +1 -1
  71. package/dist/browser/inputs/CheckboxCard.js.map +1 -1
  72. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  73. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  74. package/dist/browser/inputs/Combobox.js.map +1 -1
  75. package/dist/browser/inputs/DatePicker.js.map +1 -1
  76. package/dist/browser/inputs/FileInputs.js.map +1 -1
  77. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  78. package/dist/browser/inputs/NumberInput.js.map +1 -1
  79. package/dist/browser/inputs/Select.js.map +1 -1
  80. package/dist/browser/inputs/SelectChip.js.map +1 -1
  81. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  82. package/dist/browser/inputs/Switch.js.map +1 -1
  83. package/dist/browser/inputs/TagEditor.js.map +1 -1
  84. package/dist/browser/inputs/TagsInput.js.map +1 -1
  85. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  86. package/dist/browser/inputs/TextInput.js.map +1 -1
  87. package/dist/browser/inputs/choice.js.map +1 -1
  88. package/dist/browser/inputs/completion/behaviors.js.map +1 -1
  89. package/dist/browser/inputs/completion/engine.js.map +1 -1
  90. package/dist/browser/inputs/completion/index.js.map +1 -1
  91. package/dist/browser/inputs/completion/overlay.js.map +1 -1
  92. package/dist/browser/inputs/date-picker.js.map +1 -1
  93. package/dist/browser/inputs/editor-dom.js.map +1 -1
  94. package/dist/browser/inputs/field-contract.js.map +1 -1
  95. package/dist/browser/inputs/icon-options.js.map +1 -1
  96. package/dist/browser/inputs/image-crop.js.map +1 -1
  97. package/dist/browser/inputs/index.js.map +1 -1
  98. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  99. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  100. package/dist/browser/inputs/markdown/actions.js.map +1 -1
  101. package/dist/browser/inputs/markdown/active-formats.js.map +1 -1
  102. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  103. package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
  104. package/dist/browser/internal/color.js.map +1 -1
  105. package/dist/browser/internal/field.js.map +1 -1
  106. package/dist/browser/internal/portal.js.map +1 -1
  107. package/dist/browser/intl/Format.js.map +1 -1
  108. package/dist/browser/intl/index.js.map +1 -1
  109. package/dist/browser/intl/locale.js.map +1 -1
  110. package/dist/browser/intl/messages.js +2 -0
  111. package/dist/browser/intl/messages.js.map +1 -1
  112. package/dist/browser/layout/AppOverview.js +29 -20
  113. package/dist/browser/layout/AppOverview.js.map +1 -1
  114. package/dist/browser/layout/AppWorkspace.js +60 -54
  115. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  116. package/dist/browser/layout/BottomSheet.js.map +1 -1
  117. package/dist/browser/layout/DataPanel.js.map +1 -1
  118. package/dist/browser/layout/DetailPanel.js.map +1 -1
  119. package/dist/browser/layout/Discussion.js.map +1 -1
  120. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  121. package/dist/browser/layout/Navigation.js.map +1 -1
  122. package/dist/browser/layout/PanelDialog.js.map +1 -1
  123. package/dist/browser/layout/PanelHeader.js +1 -1
  124. package/dist/browser/layout/PanelHeader.js.map +1 -1
  125. package/dist/browser/layout/Panes.js.map +1 -1
  126. package/dist/browser/layout/PullToRefresh.js +217 -0
  127. package/dist/browser/layout/PullToRefresh.js.map +1 -0
  128. package/dist/browser/layout/ScrollArea.js.map +1 -1
  129. package/dist/browser/layout/Settings.js.map +1 -1
  130. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  131. package/dist/browser/layout/SettingsModal.js.map +1 -1
  132. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  133. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  134. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  135. package/dist/browser/layout/floating-window-geometry.js.map +1 -1
  136. package/dist/browser/layout/index.js +1 -0
  137. package/dist/browser/layout/index.js.map +1 -1
  138. package/dist/browser/layout/navigation-model.js.map +1 -1
  139. package/dist/browser/layout/panes-layout.js.map +1 -1
  140. package/dist/browser/layout/scroll-fade.js.map +1 -1
  141. package/dist/browser/layout/stable-id.js.map +1 -1
  142. package/dist/browser/surfaces/Avatar.js.map +1 -1
  143. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  144. package/dist/browser/surfaces/LinkCard.js +13 -2
  145. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  146. package/dist/browser/surfaces/NotFoundState.js.map +1 -1
  147. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  148. package/dist/browser/surfaces/Paper.js.map +1 -1
  149. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  150. package/dist/browser/surfaces/ProgressBar.js.map +1 -1
  151. package/dist/browser/surfaces/StatCell.js.map +1 -1
  152. package/dist/browser/surfaces/StatGrid.js.map +1 -1
  153. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  154. package/dist/browser/surfaces/Tag.js.map +1 -1
  155. package/dist/browser/surfaces/index.js.map +1 -1
  156. package/dist/browser/widgets/Widget.js.map +1 -1
  157. package/dist/browser/widgets/WidgetHero.js.map +1 -1
  158. package/dist/browser/widgets/WidgetList.js.map +1 -1
  159. package/dist/browser/widgets/WidgetPills.js.map +1 -1
  160. package/dist/browser/widgets/WidgetStat.js.map +1 -1
  161. package/dist/browser/widgets/WidgetStatus.js.map +1 -1
  162. package/dist/ssr/actions/Button.js +5 -4
  163. package/dist/ssr/actions/Button.js.map +1 -1
  164. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  165. package/dist/ssr/actions/CopyButton.js +2 -1
  166. package/dist/ssr/actions/CopyButton.js.map +1 -1
  167. package/dist/ssr/actions/Disclosure.js.map +1 -1
  168. package/dist/ssr/actions/Dropdown.js +7 -6
  169. package/dist/ssr/actions/Dropdown.js.map +1 -1
  170. package/dist/ssr/actions/FilterChip.js +5 -4
  171. package/dist/ssr/actions/FilterChip.js.map +1 -1
  172. package/dist/ssr/actions/RemoveButton.js +1 -0
  173. package/dist/ssr/actions/RemoveButton.js.map +1 -1
  174. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  175. package/dist/ssr/actions/SplitButton.js +1 -0
  176. package/dist/ssr/actions/SplitButton.js.map +1 -1
  177. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  178. package/dist/ssr/actions/Tabs.js.map +1 -1
  179. package/dist/ssr/actions/Toolbar.js.map +1 -1
  180. package/dist/ssr/actions/index.js.map +1 -1
  181. package/dist/ssr/chat/ChatComposer.js +6 -5
  182. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  183. package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
  184. package/dist/ssr/chat/ChatPrimitives.js +6 -5
  185. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  186. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  187. package/dist/ssr/chat/ChatTasks.js +1 -1
  188. package/dist/ssr/chat/ChatTasks.js.map +1 -1
  189. package/dist/ssr/chat/ChatTimeline.js +5 -4
  190. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  191. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  192. package/dist/ssr/chat/composer-document.js.map +1 -1
  193. package/dist/ssr/chat/index.js.map +1 -1
  194. package/dist/ssr/content/Calendar.js +2 -1
  195. package/dist/ssr/content/Calendar.js.map +1 -1
  196. package/dist/ssr/content/Chart.js.map +1 -1
  197. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  198. package/dist/ssr/content/ChartExplorerControls.js +5 -4
  199. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  200. package/dist/ssr/content/ChartFilterControls.js +3 -2
  201. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  202. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  203. package/dist/ssr/content/CodeDisplay.js.map +1 -1
  204. package/dist/ssr/content/DataTable.js +1 -0
  205. package/dist/ssr/content/DataTable.js.map +1 -1
  206. package/dist/ssr/content/Docs.js +1 -0
  207. package/dist/ssr/content/Docs.js.map +1 -1
  208. package/dist/ssr/content/FileBrowser.js +2 -1
  209. package/dist/ssr/content/FileBrowser.js.map +1 -1
  210. package/dist/ssr/content/FileGrid.js.map +1 -1
  211. package/dist/ssr/content/FileTree.js +2 -1
  212. package/dist/ssr/content/FileTree.js.map +1 -1
  213. package/dist/ssr/content/FileView.js +5 -4
  214. package/dist/ssr/content/FileView.js.map +1 -1
  215. package/dist/ssr/content/Lightbox.js +2 -1
  216. package/dist/ssr/content/Lightbox.js.map +1 -1
  217. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  218. package/dist/ssr/content/MarkdownView.js.map +1 -1
  219. package/dist/ssr/content/Pagination.js +2 -1
  220. package/dist/ssr/content/Pagination.js.map +1 -1
  221. package/dist/ssr/content/PdfPreview.js.map +1 -1
  222. package/dist/ssr/content/RangePicker.js.map +1 -1
  223. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  224. package/dist/ssr/content/calendar-event-layout.js.map +1 -1
  225. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  226. package/dist/ssr/content/chart-cursor.js.map +1 -1
  227. package/dist/ssr/content/chart-explorer.js.map +1 -1
  228. package/dist/ssr/content/chart-inspection.js.map +1 -1
  229. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  230. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  231. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  232. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  233. package/dist/ssr/content/chart-svg.js.map +1 -1
  234. package/dist/ssr/content/code-highlight.js.map +1 -1
  235. package/dist/ssr/content/collection-selection.js.map +1 -1
  236. package/dist/ssr/content/delimited-preferences.js.map +1 -1
  237. package/dist/ssr/content/file-tree.js.map +1 -1
  238. package/dist/ssr/content/file-view-preview.js.map +1 -1
  239. package/dist/ssr/content/index.js.map +1 -1
  240. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  241. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  242. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  243. package/dist/ssr/feedback/index.js.map +1 -1
  244. package/dist/ssr/feedback/prompts.js +3 -2
  245. package/dist/ssr/feedback/prompts.js.map +1 -1
  246. package/dist/ssr/feedback/toast.js.map +1 -1
  247. package/dist/ssr/feedback/tooltip-position.js.map +1 -1
  248. package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
  249. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  250. package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
  251. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  252. package/dist/ssr/inputs/Checkbox.js +1 -0
  253. package/dist/ssr/inputs/Checkbox.js.map +1 -1
  254. package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
  255. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  256. package/dist/ssr/inputs/ChoiceInputs.js +1 -0
  257. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  258. package/dist/ssr/inputs/Combobox.js +2 -1
  259. package/dist/ssr/inputs/Combobox.js.map +1 -1
  260. package/dist/ssr/inputs/DatePicker.js +4 -3
  261. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  262. package/dist/ssr/inputs/FileInputs.js +2 -1
  263. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  264. package/dist/ssr/inputs/MultiSelectInput.js +4 -3
  265. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  266. package/dist/ssr/inputs/NumberInput.js +2 -1
  267. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  268. package/dist/ssr/inputs/Select.js +4 -3
  269. package/dist/ssr/inputs/Select.js.map +1 -1
  270. package/dist/ssr/inputs/SelectChip.js +3 -2
  271. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  272. package/dist/ssr/inputs/SpecialInputs.js +1 -0
  273. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  274. package/dist/ssr/inputs/Switch.js.map +1 -1
  275. package/dist/ssr/inputs/TagEditor.js +3 -2
  276. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  277. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  278. package/dist/ssr/inputs/TemplateEditor.js +1 -0
  279. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  280. package/dist/ssr/inputs/TextInput.js +4 -3
  281. package/dist/ssr/inputs/TextInput.js.map +1 -1
  282. package/dist/ssr/inputs/choice.js.map +1 -1
  283. package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
  284. package/dist/ssr/inputs/completion/engine.js.map +1 -1
  285. package/dist/ssr/inputs/completion/index.js.map +1 -1
  286. package/dist/ssr/inputs/completion/overlay.js.map +1 -1
  287. package/dist/ssr/inputs/date-picker.js.map +1 -1
  288. package/dist/ssr/inputs/editor-dom.js.map +1 -1
  289. package/dist/ssr/inputs/field-contract.js.map +1 -1
  290. package/dist/ssr/inputs/icon-options.js.map +1 -1
  291. package/dist/ssr/inputs/image-crop.js.map +1 -1
  292. package/dist/ssr/inputs/index.js.map +1 -1
  293. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  294. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  295. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  296. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  297. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
  298. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  299. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  300. package/dist/ssr/internal/color.js.map +1 -1
  301. package/dist/ssr/internal/field.js.map +1 -1
  302. package/dist/ssr/internal/portal.js.map +1 -1
  303. package/dist/ssr/intl/Format.js.map +1 -1
  304. package/dist/ssr/intl/index.js.map +1 -1
  305. package/dist/ssr/intl/locale.js.map +1 -1
  306. package/dist/ssr/intl/messages.js +2 -0
  307. package/dist/ssr/intl/messages.js.map +1 -1
  308. package/dist/ssr/layout/AppOverview.js +16 -6
  309. package/dist/ssr/layout/AppOverview.js.map +1 -1
  310. package/dist/ssr/layout/AppWorkspace.js +12 -8
  311. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  312. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  313. package/dist/ssr/layout/DataPanel.js +1 -0
  314. package/dist/ssr/layout/DataPanel.js.map +1 -1
  315. package/dist/ssr/layout/DetailPanel.js +1 -0
  316. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  317. package/dist/ssr/layout/Discussion.js +3 -2
  318. package/dist/ssr/layout/Discussion.js.map +1 -1
  319. package/dist/ssr/layout/FloatingWindow.js +1 -0
  320. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  321. package/dist/ssr/layout/Navigation.js +3 -2
  322. package/dist/ssr/layout/Navigation.js.map +1 -1
  323. package/dist/ssr/layout/PanelDialog.js +1 -0
  324. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  325. package/dist/ssr/layout/PanelHeader.js +1 -1
  326. package/dist/ssr/layout/PanelHeader.js.map +1 -1
  327. package/dist/ssr/layout/Panes.js.map +1 -1
  328. package/dist/ssr/layout/PullToRefresh.js +177 -0
  329. package/dist/ssr/layout/PullToRefresh.js.map +1 -0
  330. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  331. package/dist/ssr/layout/Settings.js +2 -1
  332. package/dist/ssr/layout/Settings.js.map +1 -1
  333. package/dist/ssr/layout/SettingsCollection.js +1 -0
  334. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  335. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  336. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  337. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  338. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  339. package/dist/ssr/layout/floating-window-geometry.js.map +1 -1
  340. package/dist/ssr/layout/index.js +1 -0
  341. package/dist/ssr/layout/index.js.map +1 -1
  342. package/dist/ssr/layout/navigation-model.js.map +1 -1
  343. package/dist/ssr/layout/panes-layout.js.map +1 -1
  344. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  345. package/dist/ssr/layout/stable-id.js.map +1 -1
  346. package/dist/ssr/surfaces/Avatar.js +2 -1
  347. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  348. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  349. package/dist/ssr/surfaces/LinkCard.js +11 -2
  350. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  351. package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
  352. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  353. package/dist/ssr/surfaces/Paper.js +2 -1
  354. package/dist/ssr/surfaces/Paper.js.map +1 -1
  355. package/dist/ssr/surfaces/Placeholder.js +2 -1
  356. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  357. package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
  358. package/dist/ssr/surfaces/StatCell.js +2 -1
  359. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  360. package/dist/ssr/surfaces/StatGrid.js +1 -0
  361. package/dist/ssr/surfaces/StatGrid.js.map +1 -1
  362. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  363. package/dist/ssr/surfaces/Tag.js.map +1 -1
  364. package/dist/ssr/surfaces/index.js.map +1 -1
  365. package/dist/ssr/widgets/Widget.js +1 -0
  366. package/dist/ssr/widgets/Widget.js.map +1 -1
  367. package/dist/ssr/widgets/WidgetHero.js.map +1 -1
  368. package/dist/ssr/widgets/WidgetList.js.map +1 -1
  369. package/dist/ssr/widgets/WidgetPills.js.map +1 -1
  370. package/dist/ssr/widgets/WidgetStat.js +1 -0
  371. package/dist/ssr/widgets/WidgetStat.js.map +1 -1
  372. package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
  373. package/dist/styles.css +1 -1
  374. package/dist/types/actions/SpotlightSearch.d.ts +1 -1
  375. package/dist/types/feedback/prompts.d.ts +2 -2
  376. package/dist/types/intl/messages.d.ts +1 -0
  377. package/dist/types/layout/AppOverview.d.ts +7 -0
  378. package/dist/types/layout/AppWorkspace.d.ts +14 -2
  379. package/dist/types/layout/PanelHeader.d.ts +1 -1
  380. package/dist/types/layout/PullToRefresh.d.ts +21 -0
  381. package/dist/types/layout/index.d.ts +3 -1
  382. package/dist/types/surfaces/LinkCard.d.ts +5 -2
  383. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","Show","useContext","Paper","StatGridSizeContext","StatGridSurfaceContext","useStatGridSize","useStatGridSurface","columnValue","columns","Number","isInteger","StatGrid","props","surface","_$createComponent","class","data-columns","data-surface","children","when","title","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_co$","_$getNextMarker","_$insert","action","_el$6","_tmpl$3","_el$7","label","_$effect","_$setAttribute","href","Provider","value","size","_el$5","_tmpl$2"],"sources":["surfaces/StatGrid.tsx"],"sourcesContent":["import { createContext, type JSX, Show, useContext } from \"solid-js\";\nimport { Paper } from \"./Paper\";\n\nexport type StatGridSize = \"md\" | \"sm\";\nexport type StatGridSurface = \"white\" | \"muted\";\nexport type StatGridColumns = 1 | 2 | 3 | 4 | 5 | 6;\nexport type StatGridAction = { label: string; href: string };\n\nexport type StatGridProps = {\n children: JSX.Element;\n title?: string;\n action?: StatGridAction;\n columns?: StatGridColumns;\n size?: StatGridSize;\n surface?: StatGridSurface;\n class?: string;\n};\n\nconst StatGridSizeContext = createContext<StatGridSize>(\"md\");\nconst StatGridSurfaceContext = createContext<StatGridSurface>(\"white\");\n\nexport const useStatGridSize = (): StatGridSize => useContext(StatGridSizeContext);\nexport const useStatGridSurface = (): StatGridSurface => useContext(StatGridSurfaceContext);\n\nconst columnValue = (columns?: StatGridColumns): StatGridColumns => {\n if (columns && Number.isInteger(columns) && columns >= 1 && columns <= 6) return columns;\n return 6;\n};\n\nexport function StatGrid(props: StatGridProps): JSX.Element {\n const surface = () => props.surface ?? \"white\";\n return (\n <Paper class={`k2b-stat-grid ${props.class ?? \"\"}`} data-columns={columnValue(props.columns)} data-surface={surface()}>\n <Show when={props.title}>\n <header class=\"k2b-stat-grid__header\">\n <span class=\"k2b-stat-grid__title\">{props.title}</span>\n <Show when={props.action}>\n {(action) => (\n <a href={action().href} class=\"k2b-stat-grid__action\">\n <span>{action().label}</span>\n <i class=\"ti ti-arrow-up-right\" aria-hidden=\"true\" />\n </a>\n )}\n </Show>\n </header>\n </Show>\n <StatGridSizeContext.Provider value={props.size ?? \"md\"}>\n <StatGridSurfaceContext.Provider value={surface()}>\n <div class=\"k2b-stat-grid__body\">{props.children}</div>\n </StatGridSurfaceContext.Provider>\n </StatGridSizeContext.Provider>\n </Paper>\n );\n}\n\nexport default StatGrid;\n"],"mappings":";;;;;;;;;;;AAAA,SAASA,aAAa,EAAYC,IAAI,EAAEC,UAAU,QAAQ,UAAU;AACpE,SAASC,KAAK,QAAQ,SAAS;AAiB/B,MAAMC,mBAAmB,GAAGJ,aAAa,CAAe,IAAI,CAAC;AAC7D,MAAMK,sBAAsB,GAAGL,aAAa,CAAkB,OAAO,CAAC;AAEtE,OAAO,MAAMM,eAAe,GAAGA,CAAA,KAAoBJ,UAAU,CAACE,mBAAmB,CAAC;AAClF,OAAO,MAAMG,kBAAkB,GAAGA,CAAA,KAAuBL,UAAU,CAACG,sBAAsB,CAAC;AAE3F,MAAMG,WAAW,GAAIC,OAAyB,IAAsB;EAClE,IAAIA,OAAO,IAAIC,MAAM,CAACC,SAAS,CAACF,OAAO,CAAC,IAAIA,OAAO,IAAI,CAAC,IAAIA,OAAO,IAAI,CAAC,EAAE,OAAOA,OAAO;EACxF,OAAO,CAAC;AACV,CAAC;AAED,OAAO,SAASG,QAAQA,CAACC,KAAoB,EAAe;EAC1D,MAAMC,OAAO,GAAGA,CAAA,KAAMD,KAAK,CAACC,OAAO,IAAI,OAAO;EAC9C,OAAAC,iBAAA,CACGZ,KAAK;IAAA,aAAAa,CAAA;MAAA,OAAQ,iBAAiBH,KAAK,CAACG,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA,oBAAAC,CAAA;MAAA,OAAgBT,WAAW,CAACK,KAAK,CAACJ,OAAO,CAAC;IAAA;IAAA,oBAAAS,CAAA;MAAA,OAAgBJ,OAAO,CAAC,CAAC;IAAA;IAAA,IAAAK,SAAA;MAAA,QAAAJ,iBAAA,CAClHd,IAAI;QAAA,IAACmB,IAAIA,CAAA;UAAA,OAAEP,KAAK,CAACQ,KAAK;QAAA;QAAA,IAAAF,SAAA;UAAA,IAAAG,IAAA,GAAAC,gBAAA,CAAAC,MAAA;YAAAC,KAAA,GAAAH,IAAA,CAAAI,UAAA;YAAAC,KAAA,GAAAF,KAAA,CAAAG,WAAA;YAAA,CAAAC,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAJ,KAAA,CAAAC,WAAA;UAAAI,QAAA,CAAAP,KAAA,QAEiBZ,KAAK,CAACQ,KAAK;UAAAW,QAAA,CAAAV,IAAA,EAAAP,iBAAA,CAC9Cd,IAAI;YAAA,IAACmB,IAAIA,CAAA;cAAA,OAAEP,KAAK,CAACoB,MAAM;YAAA;YAAAd,QAAA,EACpBc,MAAM;cAAA,IAAAC,KAAA,GAAAX,gBAAA,CAAAY,OAAA;gBAAAC,KAAA,GAAAF,KAAA,CAAAR,UAAA;cAAAM,QAAA,CAAAI,KAAA,QAEGH,MAAM,CAAC,CAAC,CAACI,KAAK;cAAAC,QAAA,OAAAC,cAAA,CAAAL,KAAA,UADdD,MAAM,CAAC,CAAC,CAACO,IAAI;cAAA,OAAAN,KAAA;YAAA;UAIvB,IAAAL,KAAA,EAAAC,IAAA;UAAA,OAAAR,IAAA;QAAA;MAAA,IAAAP,iBAAA,CAINX,mBAAmB,CAACqC,QAAQ;QAAA,IAACC,KAAKA,CAAA;UAAA,OAAE7B,KAAK,CAAC8B,IAAI,IAAI,IAAI;QAAA;QAAA,IAAAxB,SAAA;UAAA,OAAAJ,iBAAA,CACpDV,sBAAsB,CAACoC,QAAQ;YAAA,IAACC,KAAKA,CAAA;cAAA,OAAE5B,OAAO,CAAC,CAAC;YAAA;YAAA,IAAAK,SAAA;cAAA,IAAAyB,KAAA,GAAArB,gBAAA,CAAAsB,OAAA;cAAAb,QAAA,CAAAY,KAAA,QACb/B,KAAK,CAACM,QAAQ;cAAA,OAAAyB,KAAA;YAAA;UAAA;QAAA;MAAA;IAAA;EAAA;AAK1D;AAEA,eAAehC,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/StatGrid.tsx"],"sourcesContent":["import { createContext, type JSX, Show, useContext } from \"solid-js\";\nimport { Paper } from \"./Paper\";\n\nexport type StatGridSize = \"md\" | \"sm\";\nexport type StatGridSurface = \"white\" | \"muted\";\nexport type StatGridColumns = 1 | 2 | 3 | 4 | 5 | 6;\nexport type StatGridAction = { label: string; href: string };\n\nexport type StatGridProps = {\n children: JSX.Element;\n title?: string;\n action?: StatGridAction;\n columns?: StatGridColumns;\n size?: StatGridSize;\n surface?: StatGridSurface;\n class?: string;\n};\n\nconst StatGridSizeContext = createContext<StatGridSize>(\"md\");\nconst StatGridSurfaceContext = createContext<StatGridSurface>(\"white\");\n\nexport const useStatGridSize = (): StatGridSize => useContext(StatGridSizeContext);\nexport const useStatGridSurface = (): StatGridSurface => useContext(StatGridSurfaceContext);\n\nconst columnValue = (columns?: StatGridColumns): StatGridColumns => {\n if (columns && Number.isInteger(columns) && columns >= 1 && columns <= 6) return columns;\n return 6;\n};\n\nexport function StatGrid(props: StatGridProps): JSX.Element {\n const surface = () => props.surface ?? \"white\";\n return (\n <Paper class={`k2b-stat-grid ${props.class ?? \"\"}`} data-columns={columnValue(props.columns)} data-surface={surface()}>\n <Show when={props.title}>\n <header class=\"k2b-stat-grid__header\">\n <span class=\"k2b-stat-grid__title\">{props.title}</span>\n <Show when={props.action}>\n {(action) => (\n <a href={action().href} class=\"k2b-stat-grid__action\">\n <span>{action().label}</span>\n <i class=\"ti ti-arrow-up-right\" aria-hidden=\"true\" />\n </a>\n )}\n </Show>\n </header>\n </Show>\n <StatGridSizeContext.Provider value={props.size ?? \"md\"}>\n <StatGridSurfaceContext.Provider value={surface()}>\n <div class=\"k2b-stat-grid__body\">{props.children}</div>\n </StatGridSurfaceContext.Provider>\n </StatGridSizeContext.Provider>\n </Paper>\n );\n}\n\nexport default StatGrid;\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,aAAa,EAAY,IAAI,EAAE,UAAU,QAAQ,UAAU;AACpE,SAAS,KAAK,QAAQ,SAAS;AAiB/B,MAAM,mBAAmB,GAAG,aAAa,CAAe,IAAI,CAAC;AAC7D,MAAM,sBAAsB,GAAG,aAAa,CAAkB,OAAO,CAAC;AAEtE,OAAO,MAAM,eAAe,GAAG,MAAoB,UAAU,CAAC,mBAAmB,CAAC;AAClF,OAAO,MAAM,kBAAkB,GAAG,MAAuB,UAAU,CAAC,sBAAsB,CAAC;AAE3F,MAAM,WAAW,GAAI,OAAyB,IAAsB;EAClE,IAAI,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,OAAO,OAAO;EACxF,OAAO,CAAC;AACV,CAAC;AAED,OAAO,SAAS,QAAQ,CAAC,KAAoB,EAAe;EAC1D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,IAAI,OAAO;EAC9C,yBACG,KAAK;IAAA;MAAA,OAAQ,iBAAiB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA;MAAA,OAAgB,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;IAAA;IAAA;MAAA,OAAgB,OAAO,CAAC,CAAC;IAAA;IAAA;MAAA,0BAClH,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA;UAAA;YAAA;YAAA;YAAA;UAAA,sBAEiB,KAAK,CAAC,KAAK;UAAA,iCAC9C,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,KAAK,CAAC,MAAM;YAAA;YAAA,UACpB,MAAM;cAAA;gBAAA;cAAA,sBAEG,MAAM,CAAC,CAAC,CAAC,KAAK;cAAA,6CADd,MAAM,CAAC,CAAC,CAAC,IAAI;cAAA;YAAA;UAIvB;UAAA;QAAA;MAAA,sBAIN,mBAAmB,CAAC,QAAQ;QAAA,IAAC,KAAK;UAAA,OAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QAAA;QAAA;UAAA,yBACpD,sBAAsB,CAAC,QAAQ;YAAA,IAAC,KAAK;cAAA,OAAE,OAAO,CAAC,CAAC;YAAA;YAAA;cAAA;cAAA,sBACb,KAAK,CAAC,QAAQ;cAAA;YAAA;UAAA;QAAA;MAAA;IAAA;EAAA;AAK1D;AAEA,eAAe,QAAQ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Show","DEFAULT_ICONS","info","ok","warning","error","degraded","running","neutral","StatusBadge","props","variant","icon","undefined","tone","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","_$insert","_$createComponent","when","fallback","_tmpl$2","children","glyph","_el$6","_tmpl$3","_$effect","_$className","label","_p$","_v$","class","_v$2","_v$3","_v$4","title","e","t","_$setAttribute","a","o"],"sources":["surfaces/StatusBadge.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\n\nexport type StatusTone = \"info\" | \"ok\" | \"warning\" | \"error\" | \"degraded\" | \"running\" | \"neutral\";\n\nexport type StatusBadgeProps = {\n tone: StatusTone;\n label: JSX.Element;\n icon?: string | null;\n variant?: \"chip\" | \"dot\" | \"text\";\n title?: string;\n class?: string;\n};\n\nconst DEFAULT_ICONS: Record<StatusTone, string> = {\n info: \"ti ti-info-circle\",\n ok: \"ti ti-check\",\n warning: \"ti ti-alert-triangle\",\n error: \"ti ti-alert-circle\",\n degraded: \"ti ti-plug-connected-x\",\n running: \"ti ti-loader-2\",\n neutral: \"ti ti-alert-square-rounded\",\n};\n\nexport function StatusBadge(props: StatusBadgeProps): JSX.Element {\n const variant = () => props.variant ?? \"chip\";\n const icon = () => (props.icon === null ? undefined : (props.icon ?? DEFAULT_ICONS[props.tone]));\n return (\n <span class={`k2b-status-badge ${props.class ?? \"\"}`} data-tone={props.tone} data-variant={variant()} title={props.title}>\n <Show when={variant() !== \"dot\"} fallback={<span class=\"k2b-status-badge__dot\" aria-hidden=\"true\" />}>\n <Show when={icon()}>{(glyph) => <i class={glyph()} aria-hidden=\"true\" />}</Show>\n </Show>\n <span class=\"k2b-status-badge__label\">{props.label}</span>\n </span>\n );\n}\n\nexport default StatusBadge;\n"],"mappings":";;;;;;;;;;;AAAA,SAAmBA,IAAI,QAAQ,UAAU;AAazC,MAAMC,aAAyC,GAAG;EAChDC,IAAI,EAAE,mBAAmB;EACzBC,EAAE,EAAE,aAAa;EACjBC,OAAO,EAAE,sBAAsB;EAC/BC,KAAK,EAAE,oBAAoB;EAC3BC,QAAQ,EAAE,wBAAwB;EAClCC,OAAO,EAAE,gBAAgB;EACzBC,OAAO,EAAE;AACX,CAAC;AAED,OAAO,SAASC,WAAWA,CAACC,KAAuB,EAAe;EAChE,MAAMC,OAAO,GAAGA,CAAA,KAAMD,KAAK,CAACC,OAAO,IAAI,MAAM;EAC7C,MAAMC,IAAI,GAAGA,CAAA,KAAOF,KAAK,CAACE,IAAI,KAAK,IAAI,GAAGC,SAAS,GAAIH,KAAK,CAACE,IAAI,IAAIX,aAAa,CAACS,KAAK,CAACI,IAAI,CAAG;EAChG;IAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;MAAAC,KAAA,GAAAH,IAAA,CAAAI,UAAA;MAAA,CAAAC,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAJ,KAAA,CAAAK,WAAA;MAAAC,KAAA,GAAAJ,KAAA,CAAAG,WAAA;IAAAE,QAAA,CAAAV,IAAA,EAAAW,iBAAA,CAEK1B,IAAI;MAAA,IAAC2B,IAAIA,CAAA;QAAA,OAAEhB,OAAO,CAAC,CAAC,KAAK,KAAK;MAAA;MAAA,IAAEiB,QAAQA,CAAA;QAAA,OAAAZ,gBAAA,CAAAa,OAAA;MAAA;MAAA,IAAAC,SAAA;QAAA,OAAAJ,iBAAA,CACtC1B,IAAI;UAAA,IAAC2B,IAAIA,CAAA;YAAA,OAAEf,IAAI,CAAC,CAAC;UAAA;UAAAkB,QAAA,EAAIC,KAAK;YAAA,IAAAC,KAAA,GAAAhB,gBAAA,CAAAiB,OAAA;YAAAC,QAAA,OAAAC,WAAA,CAAAH,KAAA,EAAeD,KAAK,CAAC,CAAC;YAAA,OAAAC,KAAA;UAAA;QAAuB;MAAA;IAAA,IAAAZ,KAAA,EAAAC,IAAA;IAAAI,QAAA,CAAAD,KAAA,QAEnCd,KAAK,CAAC0B,KAAK;IAAAF,QAAA,CAAAG,GAAA;MAAA,IAAAC,GAAA,GAJvC,oBAAoB5B,KAAK,CAAC6B,KAAK,IAAI,EAAE,EAAE;QAAAC,IAAA,GAAa9B,KAAK,CAACI,IAAI;QAAA2B,IAAA,GAAgB9B,OAAO,CAAC,CAAC;QAAA+B,IAAA,GAAShC,KAAK,CAACiC,KAAK;MAAAL,GAAA,KAAAD,GAAA,CAAAO,CAAA,IAAAT,WAAA,CAAApB,IAAA,EAAAsB,GAAA,CAAAO,CAAA,GAAAN,GAAA;MAAAE,IAAA,KAAAH,GAAA,CAAAQ,CAAA,IAAAC,cAAA,CAAA/B,IAAA,eAAAsB,GAAA,CAAAQ,CAAA,GAAAL,IAAA;MAAAC,IAAA,KAAAJ,GAAA,CAAAU,CAAA,IAAAD,cAAA,CAAA/B,IAAA,kBAAAsB,GAAA,CAAAU,CAAA,GAAAN,IAAA;MAAAC,IAAA,KAAAL,GAAA,CAAAW,CAAA,IAAAF,cAAA,CAAA/B,IAAA,WAAAsB,GAAA,CAAAW,CAAA,GAAAN,IAAA;MAAA,OAAAL,GAAA;IAAA;MAAAO,CAAA,EAAA/B,SAAA;MAAAgC,CAAA,EAAAhC,SAAA;MAAAkC,CAAA,EAAAlC,SAAA;MAAAmC,CAAA,EAAAnC;IAAA;IAAA,OAAAE,IAAA;EAAA;AAO5H;AAEA,eAAeN,WAAW","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/StatusBadge.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\n\nexport type StatusTone = \"info\" | \"ok\" | \"warning\" | \"error\" | \"degraded\" | \"running\" | \"neutral\";\n\nexport type StatusBadgeProps = {\n tone: StatusTone;\n label: JSX.Element;\n icon?: string | null;\n variant?: \"chip\" | \"dot\" | \"text\";\n title?: string;\n class?: string;\n};\n\nconst DEFAULT_ICONS: Record<StatusTone, string> = {\n info: \"ti ti-info-circle\",\n ok: \"ti ti-check\",\n warning: \"ti ti-alert-triangle\",\n error: \"ti ti-alert-circle\",\n degraded: \"ti ti-plug-connected-x\",\n running: \"ti ti-loader-2\",\n neutral: \"ti ti-alert-square-rounded\",\n};\n\nexport function StatusBadge(props: StatusBadgeProps): JSX.Element {\n const variant = () => props.variant ?? \"chip\";\n const icon = () => (props.icon === null ? undefined : (props.icon ?? DEFAULT_ICONS[props.tone]));\n return (\n <span class={`k2b-status-badge ${props.class ?? \"\"}`} data-tone={props.tone} data-variant={variant()} title={props.title}>\n <Show when={variant() !== \"dot\"} fallback={<span class=\"k2b-status-badge__dot\" aria-hidden=\"true\" />}>\n <Show when={icon()}>{(glyph) => <i class={glyph()} aria-hidden=\"true\" />}</Show>\n </Show>\n <span class=\"k2b-status-badge__label\">{props.label}</span>\n </span>\n );\n}\n\nexport default StatusBadge;\n"],"mappings":";;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAazC,MAAM,aAAyC,GAAG;EAChD,IAAI,EAAE,mBAAmB;EACzB,EAAE,EAAE,aAAa;EACjB,OAAO,EAAE,sBAAsB;EAC/B,KAAK,EAAE,oBAAoB;EAC3B,QAAQ,EAAE,wBAAwB;EAClC,OAAO,EAAE,gBAAgB;EACzB,OAAO,EAAE;AACX,CAAC;AAED,OAAO,SAAS,WAAW,CAAC,KAAuB,EAAe;EAChE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,IAAI,MAAM;EAC7C,MAAM,IAAI,GAAG,MAAO,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,SAAS,GAAI,KAAK,CAAC,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAG;EAChG;IAAA;MAAA;MAAA;MAAA;IAAA,iCAEK,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,OAAO,CAAC,CAAC,KAAK,KAAK;MAAA;MAAA,IAAE,QAAQ;QAAA;MAAA;MAAA;QAAA,yBACtC,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,IAAI,CAAC,CAAC;UAAA;UAAA,UAAI,KAAK;YAAA;YAAA,kCAAe,KAAK,CAAC,CAAC;YAAA;UAAA;QAAuB;MAAA;IAAA;IAAA,sBAEnC,KAAK,CAAC,KAAK;IAAA;MAAA,UAJvC,oBAAoB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAAa,KAAK,CAAC,IAAI;QAAA,OAAgB,OAAO,CAAC,CAAC;QAAA,OAAS,KAAK,CAAC,KAAK;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAO5H;AAEA,eAAe,WAAW","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Show","colorTintStyle","useUiMessages","Tag","props","messages","hasIconSlot","selected","undefined","Boolean","icon","_el$","_$getNextElement","_tmpl$2","_el$4","firstChild","_el$5","_co$","_$getNextMarker","nextSibling","_el$3","_el$6","_el$7","_co$2","_$insert","_$createComponent","when","children","_el$2","_tmpl$","_$effect","_p$","_v$","_v$2","e","_$className","t","_$setAttribute","onRemove","remove","_el$8","_tmpl$3","_$addEventListener","_v$7","removeLabel","removeTag","_v$8","disabled","_$setProperty","_$runHydrationEvents","_v$3","class","_v$4","size","_v$5","_v$6","color","a","o","_$style","_$delegateEvents"],"sources":["surfaces/Tag.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { colorTintStyle } from \"../internal/color\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type TagSize = \"sm\" | \"md\" | \"lg\";\n\nexport type TagProps = {\n children: JSX.Element;\n color?: string | null;\n icon?: string;\n size?: TagSize;\n selected?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n disabled?: boolean;\n class?: string;\n};\n\n/** Compact label presentation with optional color, icon, and remove action. */\nexport function Tag(props: TagProps): JSX.Element {\n const messages = useUiMessages();\n const hasIconSlot = () => props.selected !== undefined || Boolean(props.icon);\n const icon = () => (props.selected ? \"ti ti-check\" : (props.icon ?? \"ti ti-check\"));\n\n return (\n <span\n class={`k2b-tag ${props.class ?? \"\"}`}\n data-size={props.size ?? \"md\"}\n data-selected={props.selected ? \"true\" : undefined}\n style={colorTintStyle(props.color)}\n >\n <Show when={hasIconSlot()}>\n <i class={`${icon()} k2b-tag__icon`} data-placeholder={!props.selected && !props.icon ? \"true\" : undefined} aria-hidden=\"true\" />\n </Show>\n <span class=\"k2b-tag__label\">{props.children}</span>\n <Show when={props.onRemove}>\n {(remove) => (\n <button\n type=\"button\"\n class=\"k2b-tag__remove\"\n aria-label={props.removeLabel ?? messages().removeTag}\n disabled={props.disabled}\n onClick={remove()}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n )}\n </Show>\n </span>\n );\n}\n\nexport default Tag;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/Tag.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { colorTintStyle } from \"../internal/color\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type TagSize = \"sm\" | \"md\" | \"lg\";\n\nexport type TagProps = {\n children: JSX.Element;\n color?: string | null;\n icon?: string;\n size?: TagSize;\n selected?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n disabled?: boolean;\n class?: string;\n};\n\n/** Compact label presentation with optional color, icon, and remove action. */\nexport function Tag(props: TagProps): JSX.Element {\n const messages = useUiMessages();\n const hasIconSlot = () => props.selected !== undefined || Boolean(props.icon);\n const icon = () => (props.selected ? \"ti ti-check\" : (props.icon ?? \"ti ti-check\"));\n\n return (\n <span\n class={`k2b-tag ${props.class ?? \"\"}`}\n data-size={props.size ?? \"md\"}\n data-selected={props.selected ? \"true\" : undefined}\n style={colorTintStyle(props.color)}\n >\n <Show when={hasIconSlot()}>\n <i class={`${icon()} k2b-tag__icon`} data-placeholder={!props.selected && !props.icon ? \"true\" : undefined} aria-hidden=\"true\" />\n </Show>\n <span class=\"k2b-tag__label\">{props.children}</span>\n <Show when={props.onRemove}>\n {(remove) => (\n <button\n type=\"button\"\n class=\"k2b-tag__remove\"\n aria-label={props.removeLabel ?? messages().removeTag}\n disabled={props.disabled}\n onClick={remove()}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n )}\n </Show>\n </span>\n );\n}\n\nexport default Tag;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,cAAc,QAAQ,mBAAmB;AAClD,SAAS,aAAa,QAAQ,kBAAkB;AAgBhD;AACA,OAAO,SAAS,GAAG,CAAC,KAAe,EAAe;EAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;EAC7E,MAAM,IAAI,GAAG,MAAO,KAAK,CAAC,QAAQ,GAAG,aAAa,GAAI,KAAK,CAAC,IAAI,IAAI,aAAe;EAEnF;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,iCAOK,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,WAAW,CAAC,CAAC;MAAA;MAAA;QAAA;QAAA;UAAA,UACb,GAAG,IAAI,CAAC,CAAC,gBAAgB;YAAA,OAAoB,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;UAAA;UAAA;UAAA;QAAA;UAAA;UAAA;QAAA;QAAA;MAAA;IAAA;IAAA,sBAE9E,KAAK,CAAC,QAAQ;IAAA,iCAC3C,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,QAAQ;MAAA;MAAA,UACtB,MAAM;QAAA;QAAA,mCAMK,MAAM,CAAC,CAAC;QAAA;UAAA,WAFL,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS;YAAA,OAC3C,KAAK,CAAC,QAAQ;UAAA;UAAA;UAAA;QAAA;UAAA;UAAA;QAAA;QAAA;QAAA;MAAA;IAK3B;IAAA;MAAA,WApBI,WAAW,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAC1B,KAAK,CAAC,IAAI,IAAI,IAAI;QAAA,OACd,KAAK,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS;QAAA,OAC3C,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAqBxC;AAEA,eAAe,GAAG;AAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Avatar","DescriptionList","LinkCard","NotFoundState","NOTICE_CARD_CLASSES","NOTICE_CARD_ICONS","NoticeCard","Paper","default","Placeholder","ProgressBar","StatCell","StatGrid","StatusBadge","Tag"],"sources":["surfaces/index.ts"],"sourcesContent":["export type { AvatarProps, AvatarSize } from \"./Avatar\";\nexport { Avatar } from \"./Avatar\";\nexport type { DescriptionListItem, DescriptionListProps } from \"./DescriptionList\";\nexport { DescriptionList } from \"./DescriptionList\";\nexport type { LinkCardColor, LinkCardProps } from \"./LinkCard\";\nexport { LinkCard } from \"./LinkCard\";\nexport type { NotFoundStateAction, NotFoundStateProps } from \"./NotFoundState\";\nexport { NotFoundState } from \"./NotFoundState\";\nexport type { NoticeCardProps, NoticeGridProps, NoticeTone } from \"./NoticeCard\";\nexport { NOTICE_CARD_CLASSES, NOTICE_CARD_ICONS, NoticeCard } from \"./NoticeCard\";\nexport type { PaperProps, PaperTag } from \"./Paper\";\nexport { Paper } from \"./Paper\";\nexport type {\n PlaceholderAlign,\n PlaceholderProps,\n PlaceholderState,\n PlaceholderSurface,\n PlaceholderVariant,\n} from \"./Placeholder\";\nexport { default as Placeholder } from \"./Placeholder\";\nexport type { ProgressBarProps, ProgressBarTone } from \"./ProgressBar\";\nexport { ProgressBar } from \"./ProgressBar\";\nexport type { StatCellAccent, StatCellProps, StatCellTone } from \"./StatCell\";\nexport { StatCell } from \"./StatCell\";\nexport type {\n StatGridAction,\n StatGridColumns,\n StatGridProps,\n StatGridSize,\n StatGridSurface,\n} from \"./StatGrid\";\nexport { StatGrid } from \"./StatGrid\";\nexport type { StatusBadgeProps, StatusTone } from \"./StatusBadge\";\nexport { StatusBadge } from \"./StatusBadge\";\nexport type { TagProps, TagSize } from \"./Tag\";\nexport { Tag } from \"./Tag\";\n"],"mappings":"AACA,SAASA,MAAM,QAAQ,UAAU;AAEjC,SAASC,eAAe,QAAQ,mBAAmB;AAEnD,SAASC,QAAQ,QAAQ,YAAY;AAErC,SAASC,aAAa,QAAQ,iBAAiB;AAE/C,SAASC,mBAAmB,EAAEC,iBAAiB,EAAEC,UAAU,QAAQ,cAAc;AAEjF,SAASC,KAAK,QAAQ,SAAS;AAQ/B,SAASC,OAAO,IAAIC,WAAW,QAAQ,eAAe;AAEtD,SAASC,WAAW,QAAQ,eAAe;AAE3C,SAASC,QAAQ,QAAQ,YAAY;AAQrC,SAASC,QAAQ,QAAQ,YAAY;AAErC,SAASC,WAAW,QAAQ,eAAe;AAE3C,SAASC,GAAG,QAAQ,OAAO","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/index.ts"],"sourcesContent":["export type { AvatarProps, AvatarSize } from \"./Avatar\";\nexport { Avatar } from \"./Avatar\";\nexport type { DescriptionListItem, DescriptionListProps } from \"./DescriptionList\";\nexport { DescriptionList } from \"./DescriptionList\";\nexport type { LinkCardColor, LinkCardProps } from \"./LinkCard\";\nexport { LinkCard } from \"./LinkCard\";\nexport type { NotFoundStateAction, NotFoundStateProps } from \"./NotFoundState\";\nexport { NotFoundState } from \"./NotFoundState\";\nexport type { NoticeCardProps, NoticeGridProps, NoticeTone } from \"./NoticeCard\";\nexport { NOTICE_CARD_CLASSES, NOTICE_CARD_ICONS, NoticeCard } from \"./NoticeCard\";\nexport type { PaperProps, PaperTag } from \"./Paper\";\nexport { Paper } from \"./Paper\";\nexport type {\n PlaceholderAlign,\n PlaceholderProps,\n PlaceholderState,\n PlaceholderSurface,\n PlaceholderVariant,\n} from \"./Placeholder\";\nexport { default as Placeholder } from \"./Placeholder\";\nexport type { ProgressBarProps, ProgressBarTone } from \"./ProgressBar\";\nexport { ProgressBar } from \"./ProgressBar\";\nexport type { StatCellAccent, StatCellProps, StatCellTone } from \"./StatCell\";\nexport { StatCell } from \"./StatCell\";\nexport type {\n StatGridAction,\n StatGridColumns,\n StatGridProps,\n StatGridSize,\n StatGridSurface,\n} from \"./StatGrid\";\nexport { StatGrid } from \"./StatGrid\";\nexport type { StatusBadgeProps, StatusTone } from \"./StatusBadge\";\nexport { StatusBadge } from \"./StatusBadge\";\nexport type { TagProps, TagSize } from \"./Tag\";\nexport { Tag } from \"./Tag\";\n"],"mappings":"AACA,SAAS,MAAM,QAAQ,UAAU;AAEjC,SAAS,eAAe,QAAQ,mBAAmB;AAEnD,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,QAAQ,cAAc;AAEjF,SAAS,KAAK,QAAQ,SAAS;AAQ/B,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,QAAQ,QAAQ,YAAY;AAQrC,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,GAAG,QAAQ,OAAO","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Show","Paper","Header","props","_$createComponent","when","icon","children","_el$6","_$getNextElement","_tmpl$3","_el$7","firstChild","_$effect","_$className","_el$","_tmpl$","_el$2","_el$3","nextSibling","_el$4","_co$","_$getNextMarker","_$insert","title","meta","_el$8","_tmpl$4","href","_tmpl$2","Widget","data-size","size","fallback","_el$0","_tmpl$6","_el$1","_tmpl$7","_$setAttribute","_el$9","_tmpl$5"],"sources":["widgets/Widget.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { Paper } from \"../surfaces/Paper\";\n\nexport type WidgetSize = \"content\" | \"compact\" | \"standard\";\n\nexport type WidgetProps = {\n title: string;\n icon?: string;\n href?: string;\n meta?: string;\n size?: WidgetSize;\n children: JSX.Element;\n};\n\nfunction Header(props: WidgetProps): JSX.Element {\n return (\n <>\n <Show when={props.icon}>\n {(icon) => (\n <span class=\"k2b-widget__icon\">\n <i class={icon()} aria-hidden=\"true\" />\n </span>\n )}\n </Show>\n <span class=\"k2b-widget__heading\">\n <span class=\"k2b-widget__title\">{props.title}</span>\n <Show when={props.meta}>{(meta) => <span class=\"k2b-widget__meta\">{meta()}</span>}</Show>\n </span>\n <Show when={props.href}>\n <i class=\"ti ti-chevron-right k2b-widget__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n );\n}\n\nexport function Widget(props: WidgetProps): JSX.Element {\n return (\n <Paper class=\"k2b-widget\" data-size={props.size ?? \"standard\"}>\n <Show\n when={props.href}\n fallback={\n <div class=\"k2b-widget__header\">\n <Header {...props} />\n </div>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-widget__header\">\n <Header {...props} />\n </a>\n )}\n </Show>\n <div class=\"k2b-widget__body\">{props.children}</div>\n </Paper>\n );\n}\n\nexport default Widget;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAmBA,IAAI,QAAQ,UAAU;AACzC,SAASC,KAAK,QAAQ,mBAAmB;AAazC,SAASC,MAAMA,CAACC,KAAkB,EAAe;EAC/C,QAAAC,iBAAA,CAEKJ,IAAI;IAAA,IAACK,IAAIA,CAAA;MAAA,OAAEF,KAAK,CAACG,IAAI;IAAA;IAAAC,QAAA,EAClBD,IAAI;MAAA,IAAAE,KAAA,GAAAC,gBAAA,CAAAC,OAAA;QAAAC,KAAA,GAAAH,KAAA,CAAAI,UAAA;MAAAC,QAAA,OAAAC,WAAA,CAAAH,KAAA,EAEQL,IAAI,CAAC,CAAC;MAAA,OAAAE,KAAA;IAAA;EAEnB;IAAA,IAAAO,IAAA,GAAAN,gBAAA,CAAAO,MAAA;MAAAC,KAAA,GAAAF,IAAA,CAAAH,UAAA;MAAAM,KAAA,GAAAD,KAAA,CAAAE,WAAA;MAAA,CAAAC,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAJ,KAAA,CAAAC,WAAA;IAAAI,QAAA,CAAAN,KAAA,QAGgCd,KAAK,CAACqB,KAAK;IAAAD,QAAA,CAAAR,IAAA,EAAAX,iBAAA,CAC3CJ,IAAI;MAAA,IAACK,IAAIA,CAAA;QAAA,OAAEF,KAAK,CAACsB,IAAI;MAAA;MAAAlB,QAAA,EAAIkB,IAAI;QAAA,IAAAC,KAAA,GAAAjB,gBAAA,CAAAkB,OAAA;QAAAJ,QAAA,CAAAG,KAAA,EAAqCD,IAAI;QAAA,OAAAC,KAAA;MAAA;IAAU,IAAAN,KAAA,EAAAC,IAAA;IAAA,OAAAN,IAAA;EAAA,MAAAX,iBAAA,CAElFJ,IAAI;IAAA,IAACK,IAAIA,CAAA;MAAA,OAAEF,KAAK,CAACyB,IAAI;IAAA;IAAA,IAAArB,SAAA;MAAA,OAAAE,gBAAA,CAAAoB,OAAA;IAAA;EAAA;AAK5B;AAEA,OAAO,SAASC,MAAMA,CAAC3B,KAAkB,EAAe;EACtD,OAAAC,iBAAA,CACGH,KAAK;IAAA;IAAA,iBAAA8B,CAAA;MAAA,OAA+B5B,KAAK,CAAC6B,IAAI,IAAI,UAAU;IAAA;IAAA,IAAAzB,SAAA;MAAA,QAAAH,iBAAA,CAC1DJ,IAAI;QAAA,IACHK,IAAIA,CAAA;UAAA,OAAEF,KAAK,CAACyB,IAAI;QAAA;QAAA,IAChBK,QAAQA,CAAA;UAAA;YAAA,IAAAC,KAAA,GAAAzB,gBAAA,CAAA0B,OAAA;YAAAZ,QAAA,CAAAW,KAAA,EAAA9B,iBAAA,CAEHF,MAAM,EAAKC,KAAK;YAAA,OAAA+B,KAAA;UAAA;QAAA;QAAA3B,QAAA,EAInBqB,IAAI;UAAA,IAAAQ,KAAA,GAAA3B,gBAAA,CAAA4B,OAAA;UAAAd,QAAA,CAAAa,KAAA,EAAAhC,iBAAA,CAEDF,MAAM,EAAKC,KAAK;UAAAU,QAAA,OAAAyB,cAAA,CAAAF,KAAA,UADVR,IAAI,CAAC,CAAC;UAAA,OAAAQ,KAAA;QAAA;MAGhB;QAAA,IAAAG,KAAA,GAAA9B,gBAAA,CAAA+B,OAAA;QAAAjB,QAAA,CAAAgB,KAAA,QAE4BpC,KAAK,CAACI,QAAQ;QAAA,OAAAgC,KAAA;MAAA;IAAA;EAAA;AAGnD;AAEA,eAAeT,MAAM","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["widgets/Widget.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { Paper } from \"../surfaces/Paper\";\n\nexport type WidgetSize = \"content\" | \"compact\" | \"standard\";\n\nexport type WidgetProps = {\n title: string;\n icon?: string;\n href?: string;\n meta?: string;\n size?: WidgetSize;\n children: JSX.Element;\n};\n\nfunction Header(props: WidgetProps): JSX.Element {\n return (\n <>\n <Show when={props.icon}>\n {(icon) => (\n <span class=\"k2b-widget__icon\">\n <i class={icon()} aria-hidden=\"true\" />\n </span>\n )}\n </Show>\n <span class=\"k2b-widget__heading\">\n <span class=\"k2b-widget__title\">{props.title}</span>\n <Show when={props.meta}>{(meta) => <span class=\"k2b-widget__meta\">{meta()}</span>}</Show>\n </span>\n <Show when={props.href}>\n <i class=\"ti ti-chevron-right k2b-widget__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n );\n}\n\nexport function Widget(props: WidgetProps): JSX.Element {\n return (\n <Paper class=\"k2b-widget\" data-size={props.size ?? \"standard\"}>\n <Show\n when={props.href}\n fallback={\n <div class=\"k2b-widget__header\">\n <Header {...props} />\n </div>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-widget__header\">\n <Header {...props} />\n </a>\n )}\n </Show>\n <div class=\"k2b-widget__body\">{props.children}</div>\n </Paper>\n );\n}\n\nexport default Widget;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,KAAK,QAAQ,mBAAmB;AAazC,SAAS,MAAM,CAAC,KAAkB,EAAe;EAC/C,0BAEK,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA,UAClB,IAAI;MAAA;QAAA;MAAA,kCAEQ,IAAI,CAAC,CAAC;MAAA;IAAA;EAEnB;IAAA;MAAA;MAAA;MAAA;IAAA,sBAGgC,KAAK,CAAC,KAAK;IAAA,iCAC3C,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,UAAI,IAAI;QAAA;QAAA,gBAAqC,IAAI;QAAA;MAAA;IAAU;IAAA;EAAA,wBAElF,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA;MAAA;IAAA;EAAA;AAK5B;AAEA,OAAO,SAAS,MAAM,CAAC,KAAkB,EAAe;EACtD,yBACG,KAAK;IAAA;IAAA;MAAA,OAA+B,KAAK,CAAC,IAAI,IAAI,UAAU;IAAA;IAAA;MAAA,0BAC1D,IAAI;QAAA,IACH,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA,IAChB,QAAQ;UAAA;YAAA;YAAA,kCAEH,MAAM,EAAK,KAAK;YAAA;UAAA;QAAA;QAAA,UAInB,IAAI;UAAA;UAAA,kCAED,MAAM,EAAK,KAAK;UAAA,6CADV,IAAI,CAAC,CAAC;UAAA;QAAA;MAGhB;QAAA;QAAA,sBAE4B,KAAK,CAAC,QAAQ;QAAA;MAAA;IAAA;EAAA;AAGnD;AAEA,eAAe,MAAM","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Show","WidgetHero","props","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","_el$5","_el$6","_co$2","_$insert","_$createComponent","when","icon","children","_el$7","_tmpl$2","_$effect","_$className","title","subtitle","_el$8","_tmpl$3","_$setAttribute","tone"],"sources":["widgets/WidgetHero.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { AccentColor } from \"../semantics\";\n\nexport type WidgetTone = AccentColor;\n\nexport type WidgetHeroProps = {\n title: string;\n subtitle?: string;\n icon?: string;\n tone?: WidgetTone;\n};\n\nexport function WidgetHero(props: WidgetHeroProps): JSX.Element {\n return (\n <div class=\"k2b-widget-hero\" data-tone={props.tone}>\n <Show when={props.icon}>{(icon) => <i class={`${icon()} k2b-widget-hero__icon`} aria-hidden=\"true\" />}</Show>\n <span class=\"k2b-widget-hero__title\">{props.title}</span>\n <Show when={props.subtitle}>{(subtitle) => <span class=\"k2b-widget-hero__subtitle\">{subtitle()}</span>}</Show>\n </div>\n );\n}\n\nexport default WidgetHero;\n"],"mappings":";;;;;;;;;;;AAAA,SAAmBA,IAAI,QAAQ,UAAU;AAYzC,OAAO,SAASC,UAAUA,CAACC,KAAsB,EAAe;EAC9D;IAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;MAAAC,KAAA,GAAAH,IAAA,CAAAI,UAAA;MAAA,CAAAC,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAJ,KAAA,CAAAK,WAAA;MAAAC,KAAA,GAAAJ,KAAA,CAAAG,WAAA;MAAAE,KAAA,GAAAD,KAAA,CAAAD,WAAA;MAAA,CAAAG,KAAA,EAAAC,KAAA,IAAAL,eAAA,CAAAG,KAAA,CAAAF,WAAA;IAAAK,QAAA,CAAAb,IAAA,EAAAc,iBAAA,CAEKjB,IAAI;MAAA,IAACkB,IAAIA,CAAA;QAAA,OAAEhB,KAAK,CAACiB,IAAI;MAAA;MAAAC,QAAA,EAAID,IAAI;QAAA,IAAAE,KAAA,GAAAjB,gBAAA,CAAAkB,OAAA;QAAAC,QAAA,OAAAC,WAAA,CAAAH,KAAA,EAAe,GAAGF,IAAI,CAAC,CAAC,wBAAwB;QAAA,OAAAE,KAAA;MAAA;IAAuB,IAAAb,KAAA,EAAAC,IAAA;IAAAO,QAAA,CAAAJ,KAAA,QAC/DV,KAAK,CAACuB,KAAK;IAAAT,QAAA,CAAAb,IAAA,EAAAc,iBAAA,CAChDjB,IAAI;MAAA,IAACkB,IAAIA,CAAA;QAAA,OAAEhB,KAAK,CAACwB,QAAQ;MAAA;MAAAN,QAAA,EAAIM,QAAQ;QAAA,IAAAC,KAAA,GAAAvB,gBAAA,CAAAwB,OAAA;QAAAZ,QAAA,CAAAW,KAAA,EAA8CD,QAAQ;QAAA,OAAAC,KAAA;MAAA;IAAU,IAAAb,KAAA,EAAAC,KAAA;IAAAQ,QAAA,OAAAM,cAAA,CAAA1B,IAAA,eAHhED,KAAK,CAAC4B,IAAI;IAAA,OAAA3B,IAAA;EAAA;AAMtD;AAEA,eAAeF,UAAU","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["widgets/WidgetHero.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { AccentColor } from \"../semantics\";\n\nexport type WidgetTone = AccentColor;\n\nexport type WidgetHeroProps = {\n title: string;\n subtitle?: string;\n icon?: string;\n tone?: WidgetTone;\n};\n\nexport function WidgetHero(props: WidgetHeroProps): JSX.Element {\n return (\n <div class=\"k2b-widget-hero\" data-tone={props.tone}>\n <Show when={props.icon}>{(icon) => <i class={`${icon()} k2b-widget-hero__icon`} aria-hidden=\"true\" />}</Show>\n <span class=\"k2b-widget-hero__title\">{props.title}</span>\n <Show when={props.subtitle}>{(subtitle) => <span class=\"k2b-widget-hero__subtitle\">{subtitle()}</span>}</Show>\n </div>\n );\n}\n\nexport default WidgetHero;\n"],"mappings":";;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAYzC,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,iCAEK,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,UAAI,IAAI;QAAA;QAAA,kCAAe,GAAG,IAAI,CAAC,CAAC,wBAAwB;QAAA;MAAA;IAAuB;IAAA,sBAC/D,KAAK,CAAC,KAAK;IAAA,iCAChD,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,QAAQ;MAAA;MAAA,UAAI,QAAQ;QAAA;QAAA,gBAA8C,QAAQ;QAAA;MAAA;IAAU;IAAA,iDAHhE,KAAK,CAAC,IAAI;IAAA;EAAA;AAMtD;AAEA,eAAe,UAAU","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["For","Show","useUiMessages","ItemContent","props","_$createComponent","when","item","icon","children","_el$6","_$getNextElement","_tmpl$3","_$effect","_p$","_v$","_v$2","iconTone","e","_$className","t","_$setAttribute","undefined","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_co$","_$getNextMarker","_$insert","label","sub","_el$7","_tmpl$4","meta","_el$8","_tmpl$5","href","_tmpl$2","WidgetList","messages","items","length","fallback","_el$0","_tmpl$7","_el$1","emptyMessage","nothingHere","grow","_el$9","_tmpl$6","each","_el$10","_tmpl$8","_el$11","_tmpl$9"],"sources":["widgets/WidgetList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { WidgetTone } from \"./WidgetHero\";\n\nexport type WidgetListItem = {\n icon?: string;\n iconTone?: WidgetTone;\n label: string;\n sub?: string;\n meta?: string;\n href?: string;\n};\n\nexport type WidgetListProps = {\n items: readonly WidgetListItem[];\n emptyMessage?: string;\n grow?: boolean;\n};\n\nfunction ItemContent(props: { item: WidgetListItem }): JSX.Element {\n return (\n <>\n <Show when={props.item.icon}>\n {(icon) => <i class={`${icon()} k2b-widget-list__icon`} data-tone={props.item.iconTone} aria-hidden=\"true\" />}\n </Show>\n <div class=\"k2b-widget-list__copy\">\n <span class=\"k2b-widget-list__label\">{props.item.label}</span>\n <Show when={props.item.sub}>{(sub) => <span class=\"k2b-widget-list__sub\">{sub()}</span>}</Show>\n </div>\n <Show when={props.item.meta}>{(meta) => <span class=\"k2b-widget-list__meta\">{meta()}</span>}</Show>\n <Show when={props.item.href}>\n <i class=\"ti ti-chevron-right k2b-widget-list__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n );\n}\n\nexport function WidgetList(props: WidgetListProps): JSX.Element {\n const messages = useUiMessages();\n return (\n <Show\n when={props.items.length > 0}\n fallback={\n <div class=\"k2b-widget-list__empty\" data-grow={props.grow ? \"true\" : undefined}>\n <span>{props.emptyMessage ?? messages().nothingHere}</span>\n </div>\n }\n >\n <div class=\"k2b-widget-list\" data-grow={props.grow ? \"true\" : undefined}>\n <For each={props.items}>\n {(item) => (\n <Show\n when={item.href}\n fallback={\n <div class=\"k2b-widget-list__item\">\n <ItemContent item={item} />\n </div>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-widget-list__item\">\n <ItemContent item={item} />\n </a>\n )}\n </Show>\n )}\n </For>\n </div>\n </Show>\n );\n}\n\nexport default WidgetList;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["widgets/WidgetList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { WidgetTone } from \"./WidgetHero\";\n\nexport type WidgetListItem = {\n icon?: string;\n iconTone?: WidgetTone;\n label: string;\n sub?: string;\n meta?: string;\n href?: string;\n};\n\nexport type WidgetListProps = {\n items: readonly WidgetListItem[];\n emptyMessage?: string;\n grow?: boolean;\n};\n\nfunction ItemContent(props: { item: WidgetListItem }): JSX.Element {\n return (\n <>\n <Show when={props.item.icon}>\n {(icon) => <i class={`${icon()} k2b-widget-list__icon`} data-tone={props.item.iconTone} aria-hidden=\"true\" />}\n </Show>\n <div class=\"k2b-widget-list__copy\">\n <span class=\"k2b-widget-list__label\">{props.item.label}</span>\n <Show when={props.item.sub}>{(sub) => <span class=\"k2b-widget-list__sub\">{sub()}</span>}</Show>\n </div>\n <Show when={props.item.meta}>{(meta) => <span class=\"k2b-widget-list__meta\">{meta()}</span>}</Show>\n <Show when={props.item.href}>\n <i class=\"ti ti-chevron-right k2b-widget-list__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n );\n}\n\nexport function WidgetList(props: WidgetListProps): JSX.Element {\n const messages = useUiMessages();\n return (\n <Show\n when={props.items.length > 0}\n fallback={\n <div class=\"k2b-widget-list__empty\" data-grow={props.grow ? \"true\" : undefined}>\n <span>{props.emptyMessage ?? messages().nothingHere}</span>\n </div>\n }\n >\n <div class=\"k2b-widget-list\" data-grow={props.grow ? \"true\" : undefined}>\n <For each={props.items}>\n {(item) => (\n <Show\n when={item.href}\n fallback={\n <div class=\"k2b-widget-list__item\">\n <ItemContent item={item} />\n </div>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-widget-list__item\">\n <ItemContent item={item} />\n </a>\n )}\n </Show>\n )}\n </For>\n </div>\n </Show>\n );\n}\n\nexport default WidgetList;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,SAAS,GAAG,EAAY,IAAI,QAAQ,UAAU;AAC9C,SAAS,aAAa,QAAQ,kBAAkB;AAkBhD,SAAS,WAAW,CAAC,KAA+B,EAAe;EACjE,0BAEK,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,CAAC,IAAI;IAAA;IAAA,UACvB,IAAI;MAAA;MAAA;QAAA,UAAe,GAAG,IAAI,CAAC,CAAC,wBAAwB;UAAA,OAAa,KAAK,CAAC,IAAI,CAAC,QAAQ;QAAA;QAAA;QAAA;MAAA;QAAA;QAAA;MAAA;MAAA;IAAA;EAAuB;IAAA;MAAA;MAAA;MAAA;IAAA,sBAGvE,KAAK,CAAC,IAAI,CAAC,KAAK;IAAA,iCACrD,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI,CAAC,GAAG;MAAA;MAAA,UAAI,GAAG;QAAA;QAAA,gBAAyC,GAAG;QAAA;MAAA;IAAU;IAAA;EAAA,wBAExF,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,CAAC,IAAI;IAAA;IAAA,UAAI,IAAI;MAAA;MAAA,gBAA0C,IAAI;MAAA;IAAA;EAAU,sBAC1F,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,CAAC,IAAI;IAAA;IAAA;MAAA;IAAA;EAAA;AAKjC;AAEA,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,yBACG,IAAI;IAAA,IACH,IAAI;MAAA,OAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAAA;IAAA,IAC5B,QAAQ;MAAA;QAAA;UAAA;QAAA,sBAEG,KAAK,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW;QAAA,kDADN,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;QAAA;MAAA;IAAA;IAAA;MAAA;MAAA,kCAM7E,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,UAClB,IAAI,sBACH,IAAI;UAAA,IACH,IAAI;YAAA,OAAE,IAAI,CAAC,IAAI;UAAA;UAAA,IACf,QAAQ;YAAA;cAAA;cAAA,mCAEH,WAAW;gBAAC,IAAI,EAAE;cAAI;cAAA;YAAA;UAAA;UAAA,UAIzB,IAAI;YAAA;YAAA,mCAED,WAAW;cAAC,IAAI,EAAE;YAAI;YAAA,8CADhB,IAAI,CAAC,CAAC;YAAA;UAAA;QAGhB;MAEJ;MAAA,kDAjBmC,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;MAAA;IAAA;EAAA;AAsB7E;AAEA,eAAe,UAAU","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["text","For","Show","useLocale","Content","props","locale","_el$","_$getNextElement","_tmpl$","_$insert","pill","label","_el$2","_tmpl$2","_c$","_$memo","value","pprintNumber","WidgetPills","_el$3","_tmpl$3","_$createComponent","each","pills","children","when","href","fallback","_el$4","_tmpl$4","_$effect","_$setAttribute","tone","_el$5","_tmpl$5","_p$","_v$","_v$2","e","t","undefined","grow"],"sources":["widgets/WidgetPills.tsx"],"sourcesContent":["import { text } from \"@k2b/stdlib\";\nimport { For, type JSX, Show } from \"solid-js\";\nimport { useLocale } from \"../intl/locale\";\nimport type { WidgetTone } from \"./WidgetHero\";\n\nexport type WidgetPill = {\n label: string;\n value: string | number;\n tone?: WidgetTone;\n href?: string;\n};\n\nexport type WidgetPillsProps = {\n pills: readonly WidgetPill[];\n grow?: boolean;\n};\n\nfunction Content(props: { pill: WidgetPill }): JSX.Element {\n const locale = useLocale();\n return (\n <>\n <span class=\"k2b-widget-pill__label\">{props.pill.label}</span>\n <span class=\"k2b-widget-pill__value\">\n {typeof props.pill.value === \"number\" ? text.pprintNumber(props.pill.value, { locale: locale() }) : props.pill.value}\n </span>\n </>\n );\n}\n\nexport function WidgetPills(props: WidgetPillsProps): JSX.Element {\n return (\n <div class=\"k2b-widget-pills\" data-grow={props.grow ? \"true\" : undefined}>\n <For each={props.pills}>\n {(pill) => (\n <Show\n when={pill.href}\n fallback={\n <span class=\"k2b-widget-pill\" data-tone={pill.tone ?? \"zinc\"}>\n <Content pill={pill} />\n </span>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-widget-pill\" data-tone={pill.tone ?? \"zinc\"}>\n <Content pill={pill} />\n </a>\n )}\n </Show>\n )}\n </For>\n </div>\n );\n}\n\nexport default WidgetPills;\n"],"mappings":";;;;;;;;;;;;AAAA,SAASA,IAAI,QAAQ,aAAa;AAClC,SAASC,GAAG,EAAYC,IAAI,QAAQ,UAAU;AAC9C,SAASC,SAAS,QAAQ,gBAAgB;AAe1C,SAASC,OAAOA,CAACC,KAA2B,EAAe;EACzD,MAAMC,MAAM,GAAGH,SAAS,CAAC,CAAC;EAC1B;IAAA,IAAAI,IAAA,GAAAC,gBAAA,CAAAC,MAAA;IAAAC,QAAA,CAAAH,IAAA,QAE0CF,KAAK,CAACM,IAAI,CAACC,KAAK;IAAA,OAAAL,IAAA;EAAA;IAAA,IAAAM,KAAA,GAAAL,gBAAA,CAAAM,OAAA;IAAAJ,QAAA,CAAAG,KAAA;MAAA,IAAAE,GAAA,GAAAC,MAAA,OAEnD,OAAOX,KAAK,CAACM,IAAI,CAACM,KAAK,KAAK,QAAQ;MAAA,aAApCF,GAAA,KAAuCf,IAAI,CAACkB,YAAY,CAACb,KAAK,CAACM,IAAI,CAACM,KAAK,EAAE;QAAEX,MAAM,EAAEA,MAAM,CAAC;MAAE,CAAC,CAAC,GAAGD,KAAK,CAACM,IAAI,CAACM,KAAK;IAAA;IAAA,OAAAJ,KAAA;EAAA;AAI5H;AAEA,OAAO,SAASM,WAAWA,CAACd,KAAuB,EAAe;EAChE;IAAA,IAAAe,KAAA,GAAAZ,gBAAA,CAAAa,OAAA;IAAAX,QAAA,CAAAU,KAAA,EAAAE,iBAAA,CAEKrB,GAAG;MAAA,IAACsB,IAAIA,CAAA;QAAA,OAAElB,KAAK,CAACmB,KAAK;MAAA;MAAAC,QAAA,EAClBd,IAAI,IAAAW,iBAAA,CACHpB,IAAI;QAAA,IACHwB,IAAIA,CAAA;UAAA,OAAEf,IAAI,CAACgB,IAAI;QAAA;QAAA,IACfC,QAAQA,CAAA;UAAA;YAAA,IAAAC,KAAA,GAAArB,gBAAA,CAAAsB,OAAA;YAAApB,QAAA,CAAAmB,KAAA,EAAAP,iBAAA,CAEHlB,OAAO;cAACO,IAAI,EAAEA;YAAI;YAAAoB,QAAA,OAAAC,cAAA,CAAAH,KAAA,eADoBlB,IAAI,CAACsB,IAAI,IAAI,MAAM;YAAA,OAAAJ,KAAA;UAAA;QAAA;QAAAJ,QAAA,EAK5DE,IAAI;UAAA,IAAAO,KAAA,GAAA1B,gBAAA,CAAA2B,OAAA;UAAAzB,QAAA,CAAAwB,KAAA,EAAAZ,iBAAA,CAEDlB,OAAO;YAACO,IAAI,EAAEA;UAAI;UAAAoB,QAAA,CAAAK,GAAA;YAAA,IAAAC,GAAA,GADZV,IAAI,CAAC,CAAC;cAAAW,IAAA,GAAqC3B,IAAI,CAACsB,IAAI,IAAI,MAAM;YAAAI,GAAA,KAAAD,GAAA,CAAAG,CAAA,IAAAP,cAAA,CAAAE,KAAA,UAAAE,GAAA,CAAAG,CAAA,GAAAF,GAAA;YAAAC,IAAA,KAAAF,GAAA,CAAAI,CAAA,IAAAR,cAAA,CAAAE,KAAA,eAAAE,GAAA,CAAAI,CAAA,GAAAF,IAAA;YAAA,OAAAF,GAAA;UAAA;YAAAG,CAAA,EAAAE,SAAA;YAAAD,CAAA,EAAAC;UAAA;UAAA,OAAAP,KAAA;QAAA;MAGxE;IAEJ;IAAAH,QAAA,OAAAC,cAAA,CAAAZ,KAAA,eAjBoCf,KAAK,CAACqC,IAAI,GAAG,MAAM,GAAGD,SAAS;IAAA,OAAArB,KAAA;EAAA;AAqB5E;AAEA,eAAeD,WAAW","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["widgets/WidgetPills.tsx"],"sourcesContent":["import { text } from \"@k2b/stdlib\";\nimport { For, type JSX, Show } from \"solid-js\";\nimport { useLocale } from \"../intl/locale\";\nimport type { WidgetTone } from \"./WidgetHero\";\n\nexport type WidgetPill = {\n label: string;\n value: string | number;\n tone?: WidgetTone;\n href?: string;\n};\n\nexport type WidgetPillsProps = {\n pills: readonly WidgetPill[];\n grow?: boolean;\n};\n\nfunction Content(props: { pill: WidgetPill }): JSX.Element {\n const locale = useLocale();\n return (\n <>\n <span class=\"k2b-widget-pill__label\">{props.pill.label}</span>\n <span class=\"k2b-widget-pill__value\">\n {typeof props.pill.value === \"number\" ? text.pprintNumber(props.pill.value, { locale: locale() }) : props.pill.value}\n </span>\n </>\n );\n}\n\nexport function WidgetPills(props: WidgetPillsProps): JSX.Element {\n return (\n <div class=\"k2b-widget-pills\" data-grow={props.grow ? \"true\" : undefined}>\n <For each={props.pills}>\n {(pill) => (\n <Show\n when={pill.href}\n fallback={\n <span class=\"k2b-widget-pill\" data-tone={pill.tone ?? \"zinc\"}>\n <Content pill={pill} />\n </span>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-widget-pill\" data-tone={pill.tone ?? \"zinc\"}>\n <Content pill={pill} />\n </a>\n )}\n </Show>\n )}\n </For>\n </div>\n );\n}\n\nexport default WidgetPills;\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,GAAG,EAAY,IAAI,QAAQ,UAAU;AAC9C,SAAS,SAAS,QAAQ,gBAAgB;AAe1C,SAAS,OAAO,CAAC,KAA2B,EAAe;EACzD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B;IAAA;IAAA,qBAE0C,KAAK,CAAC,IAAI,CAAC,KAAK;IAAA;EAAA;IAAA;IAAA;MAAA,uBAEnD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;MAAA,aAApC,QAAuC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;MAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK;IAAA;IAAA;EAAA;AAI5H;AAEA,OAAO,SAAS,WAAW,CAAC,KAAuB,EAAe;EAChE;IAAA;IAAA,kCAEK,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK;MAAA;MAAA,UAClB,IAAI,sBACH,IAAI;QAAA,IACH,IAAI;UAAA,OAAE,IAAI,CAAC,IAAI;QAAA;QAAA,IACf,QAAQ;UAAA;YAAA;YAAA,kCAEH,OAAO;cAAC,IAAI,EAAE;YAAI;YAAA,kDADoB,IAAI,CAAC,IAAI,IAAI,MAAM;YAAA;UAAA;QAAA;QAAA,UAK5D,IAAI;UAAA;UAAA,kCAED,OAAO;YAAC,IAAI,EAAE;UAAI;UAAA;YAAA,UADZ,IAAI,CAAC,CAAC;cAAA,OAAqC,IAAI,CAAC,IAAI,IAAI,MAAM;YAAA;YAAA;YAAA;UAAA;YAAA;YAAA;UAAA;UAAA;QAAA;MAGxE;IAEJ;IAAA,kDAjBoC,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;IAAA;EAAA;AAqB5E;AAEA,eAAe,WAAW","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["text","Show","useLocale","WidgetStat","props","locale","_el$","_$getNextElement","_tmpl$2","_el$2","firstChild","_el$3","nextSibling","_el$9","_el$0","_co$3","_$getNextMarker","_$insert","label","_c$","_$memo","value","pprintNumber","_$createComponent","when","sub","accent","children","_el$4","_tmpl$","_el$5","_el$6","_co$","_el$7","_el$8","_co$2","_el$1","_tmpl$3","fallback","_el$10","_tmpl$4","_$effect","_p$","_v$3","icon","_v$4","tone","e","_$className","t","_$setAttribute","undefined","_el$11","_tmpl$5","_el$12","_el$13","_el$14","_co$4","_v$5","_v$6","_v$","grow","_v$2","valueClass"],"sources":["widgets/WidgetStat.tsx"],"sourcesContent":["import { text } from \"@k2b/stdlib\";\nimport { type JSX, Show } from \"solid-js\";\nimport { useLocale } from \"../intl/locale\";\nimport type { WidgetTone } from \"./WidgetHero\";\n\nexport type WidgetStatAccent = {\n tone: WidgetTone;\n icon: string;\n text?: string;\n};\n\nexport type WidgetStatProps = {\n value: string | number;\n label: string;\n sub?: string;\n valueClass?: string;\n accent?: WidgetStatAccent;\n grow?: boolean;\n};\n\nexport function WidgetStat(props: WidgetStatProps): JSX.Element {\n const locale = useLocale();\n return (\n <div class=\"k2b-widget-stat\" data-grow={props.grow ? \"true\" : undefined}>\n <span class=\"k2b-widget-stat__label\">{props.label}</span>\n <span class={`k2b-widget-stat__value ${props.valueClass ?? \"\"}`}>\n {typeof props.value === \"number\" ? text.pprintNumber(props.value, { locale: locale() }) : props.value}\n </span>\n <Show when={props.sub || props.accent}>\n <div class=\"k2b-widget-stat__support\">\n <Show when={props.sub}>{(sub) => <span class=\"k2b-widget-stat__sub\">{sub()}</span>}</Show>\n <Show when={props.accent}>\n {(accent) => (\n <Show\n when={accent().text}\n fallback={<i class={`${accent().icon} k2b-widget-stat__accent-icon`} data-tone={accent().tone} aria-hidden=\"true\" />}\n >\n {(text) => (\n <span class=\"k2b-widget-stat__accent\" data-tone={accent().tone}>\n <i class={accent().icon} aria-hidden=\"true\" />\n {text()}\n </span>\n )}\n </Show>\n )}\n </Show>\n </div>\n </Show>\n </div>\n );\n}\n\nexport default WidgetStat;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["widgets/WidgetStat.tsx"],"sourcesContent":["import { text } from \"@k2b/stdlib\";\nimport { type JSX, Show } from \"solid-js\";\nimport { useLocale } from \"../intl/locale\";\nimport type { WidgetTone } from \"./WidgetHero\";\n\nexport type WidgetStatAccent = {\n tone: WidgetTone;\n icon: string;\n text?: string;\n};\n\nexport type WidgetStatProps = {\n value: string | number;\n label: string;\n sub?: string;\n valueClass?: string;\n accent?: WidgetStatAccent;\n grow?: boolean;\n};\n\nexport function WidgetStat(props: WidgetStatProps): JSX.Element {\n const locale = useLocale();\n return (\n <div class=\"k2b-widget-stat\" data-grow={props.grow ? \"true\" : undefined}>\n <span class=\"k2b-widget-stat__label\">{props.label}</span>\n <span class={`k2b-widget-stat__value ${props.valueClass ?? \"\"}`}>\n {typeof props.value === \"number\" ? text.pprintNumber(props.value, { locale: locale() }) : props.value}\n </span>\n <Show when={props.sub || props.accent}>\n <div class=\"k2b-widget-stat__support\">\n <Show when={props.sub}>{(sub) => <span class=\"k2b-widget-stat__sub\">{sub()}</span>}</Show>\n <Show when={props.accent}>\n {(accent) => (\n <Show\n when={accent().text}\n fallback={<i class={`${accent().icon} k2b-widget-stat__accent-icon`} data-tone={accent().tone} aria-hidden=\"true\" />}\n >\n {(text) => (\n <span class=\"k2b-widget-stat__accent\" data-tone={accent().tone}>\n <i class={accent().icon} aria-hidden=\"true\" />\n {text()}\n </span>\n )}\n </Show>\n )}\n </Show>\n </div>\n </Show>\n </div>\n );\n}\n\nexport default WidgetStat;\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,SAAS,QAAQ,gBAAgB;AAkB1C,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA,sBAE0C,KAAK,CAAC,KAAK;IAAA;MAAA,uBAE9C,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;MAAA,aAA/B,QAAkC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;MAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK;IAAA;IAAA,iCAEtG,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM;MAAA;MAAA;QAAA;UAAA;UAAA;UAAA;UAAA;QAAA,kCAEhC,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,GAAG;UAAA;UAAA,UAAI,GAAG;YAAA;YAAA,gBAAyC,GAAG;YAAA;UAAA;QAAU;QAAA,kCACjF,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,MAAM;UAAA;UAAA,UACpB,MAAM,sBACL,IAAI;YAAA,IACH,IAAI;cAAA,OAAE,MAAM,CAAC,CAAC,CAAC,IAAI;YAAA;YAAA,IACnB,QAAQ;cAAA;gBAAA;gBAAA;kBAAA,WAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,+BAA+B;oBAAA,OAAa,MAAM,CAAC,CAAC,CAAC,IAAI;kBAAA;kBAAA;kBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;YAAA;YAAA,UAE3F,IAAI;cAAA;gBAAA;gBAAA;gBAAA;cAAA,iBAGD,IAAI;cAAA;gBAAA,WAF0C,MAAM,CAAC,CAAC,CAAC,IAAI;kBAAA,OAClD,MAAM,CAAC,CAAC,CAAC,IAAI;gBAAA;gBAAA;gBAAA;cAAA;gBAAA;gBAAA;cAAA;cAAA;YAAA;UAG1B;QAEJ;QAAA;MAAA;IAAA;IAAA;MAAA,UArB+B,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;QAAA,OAExD,0BAA0B,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAyBrE;AAEA,eAAe,UAAU","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Show","DEFAULT_ICONS","success","warning","danger","info","WidgetStatus","props","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_el$5","_el$6","_co$","_$getNextMarker","_$insert","title","_$createComponent","when","message","children","_el$7","_tmpl$2","_$effect","_p$","_v$","tone","_v$2","grow","undefined","_v$3","icon","e","_$setAttribute","t","a","_$className"],"sources":["widgets/WidgetStatus.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type WidgetStatusTone = Extract<IntentTone, \"info\" | \"success\" | \"warning\" | \"danger\">;\n\nexport type WidgetStatusProps = {\n tone: WidgetStatusTone;\n title: string;\n message?: string;\n icon?: string;\n grow?: boolean;\n};\n\nconst DEFAULT_ICONS: Record<WidgetStatusTone, string> = {\n success: \"ti ti-circle-check\",\n warning: \"ti ti-alert-triangle\",\n danger: \"ti ti-alert-circle\",\n info: \"ti ti-info-circle\",\n};\n\nexport function WidgetStatus(props: WidgetStatusProps): JSX.Element {\n return (\n <div class=\"k2b-widget-status\" data-tone={props.tone} data-grow={props.grow ? \"true\" : undefined}>\n <i class={`${props.icon ?? DEFAULT_ICONS[props.tone]} k2b-widget-status__icon`} aria-hidden=\"true\" />\n <div class=\"k2b-widget-status__copy\">\n <span class=\"k2b-widget-status__title\">{props.title}</span>\n <Show when={props.message}>{(message) => <span class=\"k2b-widget-status__message\">{message()}</span>}</Show>\n </div>\n </div>\n );\n}\n\nexport default WidgetStatus;\n"],"mappings":";;;;;;;;;;AAAA,SAAmBA,IAAI,QAAQ,UAAU;AAazC,MAAMC,aAA+C,GAAG;EACtDC,OAAO,EAAE,oBAAoB;EAC7BC,OAAO,EAAE,sBAAsB;EAC/BC,MAAM,EAAE,oBAAoB;EAC5BC,IAAI,EAAE;AACR,CAAC;AAED,OAAO,SAASC,YAAYA,CAACC,KAAwB,EAAe;EAClE;IAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;MAAAC,KAAA,GAAAH,IAAA,CAAAI,UAAA;MAAAC,KAAA,GAAAF,KAAA,CAAAG,WAAA;MAAAC,KAAA,GAAAF,KAAA,CAAAD,UAAA;MAAAI,KAAA,GAAAD,KAAA,CAAAD,WAAA;MAAA,CAAAG,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAH,KAAA,CAAAF,WAAA;IAAAM,QAAA,CAAAL,KAAA,QAI8CR,KAAK,CAACc,KAAK;IAAAD,QAAA,CAAAP,KAAA,EAAAS,iBAAA,CAClDtB,IAAI;MAAA,IAACuB,IAAIA,CAAA;QAAA,OAAEhB,KAAK,CAACiB,OAAO;MAAA;MAAAC,QAAA,EAAID,OAAO;QAAA,IAAAE,KAAA,GAAAjB,gBAAA,CAAAkB,OAAA;QAAAP,QAAA,CAAAM,KAAA,EAA+CF,OAAO;QAAA,OAAAE,KAAA;MAAA;IAAU,IAAAT,KAAA,EAAAC,IAAA;IAAAU,QAAA,CAAAC,GAAA;MAAA,IAAAC,GAAA,GAJ9DvB,KAAK,CAACwB,IAAI;QAAAC,IAAA,GAAazB,KAAK,CAAC0B,IAAI,GAAG,MAAM,GAAGC,SAAS;QAAAC,IAAA,GACpF,GAAG5B,KAAK,CAAC6B,IAAI,IAAInC,aAAa,CAACM,KAAK,CAACwB,IAAI,CAAC,0BAA0B;MAAAD,GAAA,KAAAD,GAAA,CAAAQ,CAAA,IAAAC,cAAA,CAAA9B,IAAA,eAAAqB,GAAA,CAAAQ,CAAA,GAAAP,GAAA;MAAAE,IAAA,KAAAH,GAAA,CAAAU,CAAA,IAAAD,cAAA,CAAA9B,IAAA,eAAAqB,GAAA,CAAAU,CAAA,GAAAP,IAAA;MAAAG,IAAA,KAAAN,GAAA,CAAAW,CAAA,IAAAC,WAAA,CAAA9B,KAAA,EAAAkB,GAAA,CAAAW,CAAA,GAAAL,IAAA;MAAA,OAAAN,GAAA;IAAA;MAAAQ,CAAA,EAAAH,SAAA;MAAAK,CAAA,EAAAL,SAAA;MAAAM,CAAA,EAAAN;IAAA;IAAA,OAAA1B,IAAA;EAAA;AAOpF;AAEA,eAAeF,YAAY","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["widgets/WidgetStatus.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type WidgetStatusTone = Extract<IntentTone, \"info\" | \"success\" | \"warning\" | \"danger\">;\n\nexport type WidgetStatusProps = {\n tone: WidgetStatusTone;\n title: string;\n message?: string;\n icon?: string;\n grow?: boolean;\n};\n\nconst DEFAULT_ICONS: Record<WidgetStatusTone, string> = {\n success: \"ti ti-circle-check\",\n warning: \"ti ti-alert-triangle\",\n danger: \"ti ti-alert-circle\",\n info: \"ti ti-info-circle\",\n};\n\nexport function WidgetStatus(props: WidgetStatusProps): JSX.Element {\n return (\n <div class=\"k2b-widget-status\" data-tone={props.tone} data-grow={props.grow ? \"true\" : undefined}>\n <i class={`${props.icon ?? DEFAULT_ICONS[props.tone]} k2b-widget-status__icon`} aria-hidden=\"true\" />\n <div class=\"k2b-widget-status__copy\">\n <span class=\"k2b-widget-status__title\">{props.title}</span>\n <Show when={props.message}>{(message) => <span class=\"k2b-widget-status__message\">{message()}</span>}</Show>\n </div>\n </div>\n );\n}\n\nexport default WidgetStatus;\n"],"mappings":";;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAazC,MAAM,aAA+C,GAAG;EACtD,OAAO,EAAE,oBAAoB;EAC7B,OAAO,EAAE,sBAAsB;EAC/B,MAAM,EAAE,oBAAoB;EAC5B,IAAI,EAAE;AACR,CAAC;AAED,OAAO,SAAS,YAAY,CAAC,KAAwB,EAAe;EAClE;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,sBAI8C,KAAK,CAAC,KAAK;IAAA,kCAClD,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,OAAO;MAAA;MAAA,UAAI,OAAO;QAAA;QAAA,gBAA+C,OAAO;QAAA;MAAA;IAAU;IAAA;MAAA,UAJ9D,KAAK,CAAC,IAAI;QAAA,OAAa,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS;QAAA,OACpF,GAAG,KAAK,CAAC,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAOpF;AAEA,eAAe,YAAY","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import { ssrElement as _$ssrElement } from "solid-js/web";
2
2
  import { mergeProps as _$mergeProps } from "solid-js/web";
3
+ import { memo as _$memo } from "solid-js/web";
3
4
  import { escape as _$escape } from "solid-js/web";
4
5
  import { createComponent as _$createComponent } from "solid-js/web";
5
6
  import { ssr as _$ssr } from "solid-js/web";
@@ -47,7 +48,7 @@ export function Button(props) {
47
48
  }
48
49
  })), _$ssr(_tmpl$2, _$escape(_$createComponent(Show, {
49
50
  get when() {
50
- return local.loading && local.loadingLabel;
51
+ return _$memo(() => !!local.loading)() && local.loadingLabel;
51
52
  },
52
53
  get fallback() {
53
54
  return local.children;
@@ -58,7 +59,7 @@ export function Button(props) {
58
59
  })))], false);
59
60
  return [control, _$createComponent(Show, {
60
61
  get when() {
61
- return local.tooltip !== false && local.tooltip !== undefined;
62
+ return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
62
63
  },
63
64
  get children() {
64
65
  return _$createComponent(Tooltip, {
@@ -90,7 +91,7 @@ export function ButtonLink(props) {
90
91
  const content = _$ssr(_tmpl$2, _$escape(local.children));
91
92
  const tooltip = () => _$createComponent(Show, {
92
93
  get when() {
93
- return local.tooltip !== false && local.tooltip !== undefined;
94
+ return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
94
95
  },
95
96
  get children() {
96
97
  return _$createComponent(Tooltip, {
@@ -166,7 +167,7 @@ export function IconButton(props) {
166
167
  return `k2b-icon-button ${local.class ?? ""}`;
167
168
  },
168
169
  get ["aria-label"]() {
169
- return local.loading ? local.loadingLabel ?? local.label : local.label;
170
+ return _$memo(() => !!local.loading)() ? local.loadingLabel ?? local.label : local.label;
170
171
  },
171
172
  get title() {
172
173
  return rest.title ?? (local.tooltip === undefined ? local.label : undefined);
@@ -1 +1 @@
1
- {"version":3,"names":["Link","Show","splitProps","Tooltip","buttonClass","className","filter","Boolean","join","Button","props","local","rest","target","setRef","element","ref","control","_$ssrElement","_$mergeProps","type","class","data-size","size","data-variant","variant","data-wrap","wrap","undefined","disabled","loading","aria-busy","_$escape","_$createComponent","when","children","_$ssr","_tmpl$","_tmpl$2","loadingLabel","fallback","tooltip","content","delay","tooltipDelay","placement","tooltipPlacement","ButtonLink","navigation","href","onNavigate","onClick","replace","scroll","IconButton","aria-label","label","title","IconButtonLink"],"sources":["actions/Button.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent, type NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport { type JSX, Show, splitProps } from \"solid-js\";\nimport { Tooltip, type TooltipPlacement } from \"../feedback/Tooltip\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"text\" | \"subtle\" | \"input\" | \"warning\" | \"danger\" | \"success\" | \"ai\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport type ButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n /** Allow a deliberately long or rich label to wrap. Defaults to false. */\n wrap?: boolean;\n loading?: boolean;\n loadingLabel?: string;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nexport type ButtonLinkProps = Omit<JSX.AnchorHTMLAttributes<HTMLAnchorElement>, \"onClick\"> & {\n /** Allow a deliberately long or rich label to wrap. Defaults to false. */\n wrap?: boolean;\n navigation?: \"document\" | \"enhanced\";\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n replace?: boolean;\n scroll?: NavigationScrollMode;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nconst buttonClass = (className?: string): string => [\"k2b-button\", className].filter(Boolean).join(\" \");\n\nexport function Button(props: ButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"disabled\",\n \"loading\",\n \"loadingLabel\",\n \"ref\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"type\",\n \"variant\",\n \"wrap\",\n ]);\n let target: HTMLButtonElement | undefined;\n const setRef = (element: HTMLButtonElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n\n const control = (\n <button\n {...rest}\n ref={setRef}\n type={local.type ?? \"button\"}\n class={buttonClass(local.class)}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n <Show when={local.loading}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n <span class=\"k2b-button__label\">\n <Show when={local.loading && local.loadingLabel} fallback={local.children}>\n {local.loadingLabel}\n </Show>\n </span>\n </button>\n );\n\n return (\n <>\n {control}\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip\n content={local.tooltip as JSX.Element}\n target={() => target}\n delay={local.tooltipDelay}\n disabled={local.disabled || local.loading}\n placement={local.tooltipPlacement}\n />\n </Show>\n </>\n );\n}\n\nexport function ButtonLink(props: ButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"href\",\n \"navigation\",\n \"onClick\",\n \"onNavigate\",\n \"replace\",\n \"ref\",\n \"scroll\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"variant\",\n \"wrap\",\n ]);\n let target: HTMLAnchorElement | undefined;\n const setRef = (element: HTMLAnchorElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n const className = buttonClass(local.class);\n const content = <span class=\"k2b-button__label\">{local.children}</span>;\n\n const tooltip = () => (\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip content={local.tooltip as JSX.Element} target={() => target} delay={local.tooltipDelay} placement={local.tooltipPlacement} />\n </Show>\n );\n\n if (local.navigation === \"enhanced\" && local.href && local.onNavigate) {\n return (\n <>\n <Link\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n onClick={local.onClick}\n onNavigate={local.onNavigate}\n replace={local.replace}\n scroll={local.scroll}\n >\n {content}\n </Link>\n {tooltip()}\n </>\n );\n }\n\n return (\n <>\n <a\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n onClick={local.onClick}\n >\n {content}\n </a>\n {tooltip()}\n </>\n );\n}\n\nexport type IconButtonProps = Omit<ButtonProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport type IconButtonLinkProps = Omit<ButtonLinkProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport function IconButton(props: IconButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"loading\", \"loadingLabel\", \"tooltip\", \"variant\"]);\n\n return (\n <Button\n {...rest}\n loading={local.loading}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.loading ? (local.loadingLabel ?? local.label) : local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n <Show when={!local.loading}>{local.children}</Show>\n </Button>\n );\n}\n\nexport function IconButtonLink(props: IconButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"tooltip\", \"variant\"]);\n\n return (\n <ButtonLink\n {...rest}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n {local.children}\n </ButtonLink>\n );\n}\n"],"mappings":";;;;;;;AAAA,SAASA,IAAI,QAA2D,cAAc;AACtF,SAAmBC,IAAI,EAAEC,UAAU,QAAQ,UAAU;AACrD,SAASC,OAAO,QAA+B,qBAAqB;AAgCpE,MAAMC,WAAW,GAAIC,SAAkB,IAAa,CAAC,YAAY,EAAEA,SAAS,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;AAEvG,OAAO,SAASC,MAAMA,CAACC,KAAkB,EAAe;EACtD,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGV,UAAU,CAACQ,KAAK,EAAE,CACtC,UAAU,EACV,OAAO,EACP,UAAU,EACV,SAAS,EACT,cAAc,EACd,KAAK,EACL,MAAM,EACN,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,MAAM,CACP,CAAC;EACF,IAAIG,MAAqC;EACzC,MAAMC,MAAM,GAAIC,OAA0B,IAAK;IAC7CF,MAAM,GAAGE,OAAO;IAChB,IAAI,OAAOJ,KAAK,CAACK,GAAG,KAAK,UAAU,EAAEL,KAAK,CAACK,GAAG,CAACD,OAAO,CAAC;EACzD,CAAC;EAED,MAAME,OAAO,GAAAC,YAAA,WAAAC,YAAA,CAELP,IAAI;IAAA,IAERQ,IAAIA,CAAA;MAAA,OAAET,KAAK,CAACS,IAAI,IAAI,QAAQ;IAAA;IAAA,aAAAC,CAAA;MAAA,OACrBjB,WAAW,CAACO,KAAK,CAACU,KAAK,CAAC;IAAA;IAAA,iBAAAC,CAAA;MAAA,OACpBX,KAAK,CAACY,IAAI,IAAI,IAAI;IAAA;IAAA,oBAAAC,CAAA;MAAA,OACfb,KAAK,CAACc,OAAO,IAAI,SAAS;IAAA;IAAA,iBAAAC,CAAA;MAAA,OAC7Bf,KAAK,CAACgB,IAAI,IAAIC,SAAS;IAAA;IAAA,IAClCC,QAAQA,CAAA;MAAA,OAAElB,KAAK,CAACkB,QAAQ,IAAIlB,KAAK,CAACmB,OAAO;IAAA;IAAA,iBAAAC,CAAA;MAAA,OAC9BpB,KAAK,CAACmB,OAAO,GAAG,MAAM,GAAGF,SAAS;IAAA;EAAA,KAAAI,QAAA,CAAAC,iBAAA,CAE5ChC,IAAI;IAAA,IAACiC,IAAIA,CAAA;MAAA,OAAEvB,KAAK,CAACmB,OAAO;IAAA;IAAA,IAAAK,SAAA;MAAA,OAAAC,KAAA,CAAAC,MAAA;IAAA;EAAA,KAAAD,KAAA,CAAAE,OAAA,EAAAN,QAAA,CAAAC,iBAAA,CAItBhC,IAAI;IAAA,IAACiC,IAAIA,CAAA;MAAA,OAAEvB,KAAK,CAACmB,OAAO,IAAInB,KAAK,CAAC4B,YAAY;IAAA;IAAA,IAAEC,QAAQA,CAAA;MAAA,OAAE7B,KAAK,CAACwB,QAAQ;IAAA;IAAA,IAAAA,SAAA;MAAA,OACtExB,KAAK,CAAC4B,YAAY;IAAA;EAAA,aAI1B;EAED,QAEKtB,OAAO,EAAAgB,iBAAA,CACPhC,IAAI;IAAA,IAACiC,IAAIA,CAAA;MAAA,OAAEvB,KAAK,CAAC8B,OAAO,KAAK,KAAK,IAAI9B,KAAK,CAAC8B,OAAO,KAAKb,SAAS;IAAA;IAAA,IAAAO,SAAA;MAAA,OAAAF,iBAAA,CAC/D9B,OAAO;QAAA,IACNuC,OAAOA,CAAA;UAAA,OAAE/B,KAAK,CAAC8B,OAAO;QAAA;QACtB5B,MAAM,EAAEA,CAAA,KAAMA,MAAM;QAAA,IACpB8B,KAAKA,CAAA;UAAA,OAAEhC,KAAK,CAACiC,YAAY;QAAA;QAAA,IACzBf,QAAQA,CAAA;UAAA,OAAElB,KAAK,CAACkB,QAAQ,IAAIlB,KAAK,CAACmB,OAAO;QAAA;QAAA,IACzCe,SAASA,CAAA;UAAA,OAAElC,KAAK,CAACmC,gBAAgB;QAAA;MAAA;IAAA;EAAA;AAK3C;AAEA,OAAO,SAASC,UAAUA,CAACrC,KAAsB,EAAe;EAC9D,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGV,UAAU,CAACQ,KAAK,EAAE,CACtC,UAAU,EACV,OAAO,EACP,MAAM,EACN,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,SAAS,EACT,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,MAAM,CACP,CAAC;EACF,IAAIG,MAAqC;EACzC,MAAMC,MAAM,GAAIC,OAA0B,IAAK;IAC7CF,MAAM,GAAGE,OAAO;IAChB,IAAI,OAAOJ,KAAK,CAACK,GAAG,KAAK,UAAU,EAAEL,KAAK,CAACK,GAAG,CAACD,OAAO,CAAC;EACzD,CAAC;EACD,MAAMV,SAAS,GAAGD,WAAW,CAACO,KAAK,CAACU,KAAK,CAAC;EAC1C,MAAMqB,OAAO,GAAAN,KAAA,CAAAE,OAAA,EAAAN,QAAA,CAAoCrB,KAAK,CAACwB,QAAQ,EAAQ;EAEvE,MAAMM,OAAO,GAAGA,CAAA,KAAAR,iBAAA,CACbhC,IAAI;IAAA,IAACiC,IAAIA,CAAA;MAAA,OAAEvB,KAAK,CAAC8B,OAAO,KAAK,KAAK,IAAI9B,KAAK,CAAC8B,OAAO,KAAKb,SAAS;IAAA;IAAA,IAAAO,SAAA;MAAA,OAAAF,iBAAA,CAC/D9B,OAAO;QAAA,IAACuC,OAAOA,CAAA;UAAA,OAAE/B,KAAK,CAAC8B,OAAO;QAAA;QAAiB5B,MAAM,EAAEA,CAAA,KAAMA,MAAM;QAAA,IAAE8B,KAAKA,CAAA;UAAA,OAAEhC,KAAK,CAACiC,YAAY;QAAA;QAAA,IAAEC,SAASA,CAAA;UAAA,OAAElC,KAAK,CAACmC,gBAAgB;QAAA;MAAA;IAAA;EAAA,EAErI;EAED,IAAInC,KAAK,CAACqC,UAAU,KAAK,UAAU,IAAIrC,KAAK,CAACsC,IAAI,IAAItC,KAAK,CAACuC,UAAU,EAAE;IACrE,QAAAjB,iBAAA,CAEKjC,IAAI,EAAAmB,YAAA,CACCP,IAAI;MAAA,IAERqC,IAAIA,CAAA;QAAA,OAAEtC,KAAK,CAACsC,IAAI;MAAA;MAAA,SACT5C,SAAS;MAAA,iBAAAiB,CAAA;QAAA,OACLX,KAAK,CAACY,IAAI,IAAI,IAAI;MAAA;MAAA,oBAAAC,CAAA;QAAA,OACfb,KAAK,CAACc,OAAO,IAAI,SAAS;MAAA;MAAA,iBAAAC,CAAA;QAAA,OAC7Bf,KAAK,CAACgB,IAAI,IAAIC,SAAS;MAAA;MAAA,IAClCuB,OAAOA,CAAA;QAAA,OAAExC,KAAK,CAACwC,OAAO;MAAA;MAAA,IACtBD,UAAUA,CAAA;QAAA,OAAEvC,KAAK,CAACuC,UAAU;MAAA;MAAA,IAC5BE,OAAOA,CAAA;QAAA,OAAEzC,KAAK,CAACyC,OAAO;MAAA;MAAA,IACtBC,MAAMA,CAAA;QAAA,OAAE1C,KAAK,CAAC0C,MAAM;MAAA;MAAAlB,QAAA,EAEnBO;IAAO,KAETD,OAAO,CAAC,CAAC;EAGhB;EAEA,QAAAvB,YAAA,MAAAC,YAAA,CAGUP,IAAI;IAAA,IAERqC,IAAIA,CAAA;MAAA,OAAEtC,KAAK,CAACsC,IAAI;IAAA;IAAA,SACT5C,SAAS;IAAA,iBAAAiB,CAAA;MAAA,OACLX,KAAK,CAACY,IAAI,IAAI,IAAI;IAAA;IAAA,oBAAAC,CAAA;MAAA,OACfb,KAAK,CAACc,OAAO,IAAI,SAAS;IAAA;IAAA,iBAAAC,CAAA;MAAA,OAC7Bf,KAAK,CAACgB,IAAI,IAAIC,SAAS;IAAA;EAAA,IAAAI,QAAA,CAGjCU,OAAO,WAETD,OAAO,CAAC,CAAC;AAGhB;AAYA,OAAO,SAASa,UAAUA,CAAC5C,KAAsB,EAAe;EAC9D,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGV,UAAU,CAACQ,KAAK,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;EAExH,OAAAuB,iBAAA,CACGxB,MAAM,EAAAU,YAAA,CACDP,IAAI;IAAA,IACRkB,OAAOA,CAAA;MAAA,OAAEnB,KAAK,CAACmB,OAAO;IAAA;IAAA,IACtBL,OAAOA,CAAA;MAAA,OAAEd,KAAK,CAACc,OAAO,IAAI,OAAO;IAAA;IAAA,aAAAJ,CAAA;MAAA,OAC1B,mBAAmBV,KAAK,CAACU,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA,kBAAAkC,CAAA;MAAA,OACjC5C,KAAK,CAACmB,OAAO,GAAInB,KAAK,CAAC4B,YAAY,IAAI5B,KAAK,CAAC6C,KAAK,GAAI7C,KAAK,CAAC6C,KAAK;IAAA;IAAA,IAC7EC,KAAKA,CAAA;MAAA,OAAE7C,IAAI,CAAC6C,KAAK,KAAK9C,KAAK,CAAC8B,OAAO,KAAKb,SAAS,GAAGjB,KAAK,CAAC6C,KAAK,GAAG5B,SAAS,CAAC;IAAA;IAAA,IAC5Ea,OAAOA,CAAA;MAAA,OAAE9B,KAAK,CAAC8B,OAAO;IAAA;IAAA,IAAAN,SAAA;MAAA,OAAAF,iBAAA,CAErBhC,IAAI;QAAA,IAACiC,IAAIA,CAAA;UAAA,OAAE,CAACvB,KAAK,CAACmB,OAAO;QAAA;QAAA,IAAAK,SAAA;UAAA,OAAGxB,KAAK,CAACwB,QAAQ;QAAA;MAAA;IAAA;EAAA;AAGjD;AAEA,OAAO,SAASuB,cAAcA,CAAChD,KAA0B,EAAe;EACtE,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGV,UAAU,CAACQ,KAAK,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;EAE7F,OAAAuB,iBAAA,CACGc,UAAU,EAAA5B,YAAA,CACLP,IAAI;IAAA,IACRa,OAAOA,CAAA;MAAA,OAAEd,KAAK,CAACc,OAAO,IAAI,OAAO;IAAA;IAAA,aAAAJ,CAAA;MAAA,OAC1B,mBAAmBV,KAAK,CAACU,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA,kBAAAkC,CAAA;MAAA,OACjC5C,KAAK,CAAC6C,KAAK;IAAA;IAAA,IACvBC,KAAKA,CAAA;MAAA,OAAE7C,IAAI,CAAC6C,KAAK,KAAK9C,KAAK,CAAC8B,OAAO,KAAKb,SAAS,GAAGjB,KAAK,CAAC6C,KAAK,GAAG5B,SAAS,CAAC;IAAA;IAAA,IAC5Ea,OAAOA,CAAA;MAAA,OAAE9B,KAAK,CAAC8B,OAAO;IAAA;IAAA,IAAAN,SAAA;MAAA,OAErBxB,KAAK,CAACwB,QAAQ;IAAA;EAAA;AAGrB","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/Button.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent, type NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport { type JSX, Show, splitProps } from \"solid-js\";\nimport { Tooltip, type TooltipPlacement } from \"../feedback/Tooltip\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"text\" | \"subtle\" | \"input\" | \"warning\" | \"danger\" | \"success\" | \"ai\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport type ButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n /** Allow a deliberately long or rich label to wrap. Defaults to false. */\n wrap?: boolean;\n loading?: boolean;\n loadingLabel?: string;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nexport type ButtonLinkProps = Omit<JSX.AnchorHTMLAttributes<HTMLAnchorElement>, \"onClick\"> & {\n /** Allow a deliberately long or rich label to wrap. Defaults to false. */\n wrap?: boolean;\n navigation?: \"document\" | \"enhanced\";\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n replace?: boolean;\n scroll?: NavigationScrollMode;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nconst buttonClass = (className?: string): string => [\"k2b-button\", className].filter(Boolean).join(\" \");\n\nexport function Button(props: ButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"disabled\",\n \"loading\",\n \"loadingLabel\",\n \"ref\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"type\",\n \"variant\",\n \"wrap\",\n ]);\n let target: HTMLButtonElement | undefined;\n const setRef = (element: HTMLButtonElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n\n const control = (\n <button\n {...rest}\n ref={setRef}\n type={local.type ?? \"button\"}\n class={buttonClass(local.class)}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n <Show when={local.loading}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n <span class=\"k2b-button__label\">\n <Show when={local.loading && local.loadingLabel} fallback={local.children}>\n {local.loadingLabel}\n </Show>\n </span>\n </button>\n );\n\n return (\n <>\n {control}\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip\n content={local.tooltip as JSX.Element}\n target={() => target}\n delay={local.tooltipDelay}\n disabled={local.disabled || local.loading}\n placement={local.tooltipPlacement}\n />\n </Show>\n </>\n );\n}\n\nexport function ButtonLink(props: ButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"href\",\n \"navigation\",\n \"onClick\",\n \"onNavigate\",\n \"replace\",\n \"ref\",\n \"scroll\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"variant\",\n \"wrap\",\n ]);\n let target: HTMLAnchorElement | undefined;\n const setRef = (element: HTMLAnchorElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n const className = buttonClass(local.class);\n const content = <span class=\"k2b-button__label\">{local.children}</span>;\n\n const tooltip = () => (\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip content={local.tooltip as JSX.Element} target={() => target} delay={local.tooltipDelay} placement={local.tooltipPlacement} />\n </Show>\n );\n\n if (local.navigation === \"enhanced\" && local.href && local.onNavigate) {\n return (\n <>\n <Link\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n onClick={local.onClick}\n onNavigate={local.onNavigate}\n replace={local.replace}\n scroll={local.scroll}\n >\n {content}\n </Link>\n {tooltip()}\n </>\n );\n }\n\n return (\n <>\n <a\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n data-wrap={local.wrap || undefined}\n onClick={local.onClick}\n >\n {content}\n </a>\n {tooltip()}\n </>\n );\n}\n\nexport type IconButtonProps = Omit<ButtonProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport type IconButtonLinkProps = Omit<ButtonLinkProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport function IconButton(props: IconButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"loading\", \"loadingLabel\", \"tooltip\", \"variant\"]);\n\n return (\n <Button\n {...rest}\n loading={local.loading}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.loading ? (local.loadingLabel ?? local.label) : local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n <Show when={!local.loading}>{local.children}</Show>\n </Button>\n );\n}\n\nexport function IconButtonLink(props: IconButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"tooltip\", \"variant\"]);\n\n return (\n <ButtonLink\n {...rest}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n {local.children}\n </ButtonLink>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createMemo","createSignal","createUniqueId","onCleanup","onMount","Show","Portal","useUiMessages","DropdownItems","dropdownPosition","closeActiveContextMenu","focusableItems","menu","Array","from","querySelectorAll","join","ContextMenu","props","messages","generatedId","menuId","position","setPosition","host","listenersAttached","isOpen","undefined","hostClass","class","items","dismiss","event","contains","target","close","closeOnViewportChange","Node","attachOpenListeners","document","addEventListener","keyDown","window","detachOpenListeners","removeEventListener","onClose","focusItem","index","length","focus","open","x","y","disabled","point","DOMRect","width","height","Math","min","innerWidth","innerHeight","left","top","onOpen","queueMicrotask","current","indexOf","activeElement","key","preventDefault","_$ssr","_tmpl$","_$ssrAttribute","_$escape","id","tabIndex","label","contextMenu","children","_$createComponent","when","_tmpl$2","_$ssrStyleProperty"],"sources":["actions/ContextMenu.tsx"],"sourcesContent":["import { createMemo, createSignal, createUniqueId, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { type DropdownItem, DropdownItems, type DropdownPosition, dropdownPosition } from \"./Dropdown\";\n\nexport type ContextMenuProps = {\n items: readonly DropdownItem[];\n children: JSX.Element;\n class?: string | ((isOpen: boolean) => string);\n /** Tab order of the context-menu host. Descendant-focused composite widgets use -1. */\n tabIndex?: number;\n disabled?: boolean;\n onClose?: () => void;\n onOpen?: () => void;\n id?: string;\n label?: string;\n};\n\nlet closeActiveContextMenu: (() => void) | undefined;\n\nconst focusableItems = (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\n/** Right-click menu with keyboard invocation, one-open-at-a-time behavior, and viewport clamping. */\nexport function ContextMenu(props: ContextMenuProps): JSX.Element {\n const messages = useUiMessages();\n const generatedId = `k2b-context-${createUniqueId()}`;\n const menuId = `${generatedId}-menu`;\n const [position, setPosition] = createSignal<{ x: number; y: number }>();\n let host: HTMLDivElement | undefined;\n let menu: HTMLDivElement | undefined;\n let listenersAttached = false;\n\n const isOpen = () => position() !== undefined;\n const hostClass = createMemo(() => (typeof props.class === \"function\" ? props.class(isOpen()) : props.class));\n const items = createMemo<readonly DropdownItem[]>(() => props.items);\n\n const dismiss = (event: PointerEvent) => {\n if (menu?.contains(event.target as Node)) return;\n close();\n };\n const closeOnViewportChange = (event: Event) => {\n const target = event.target;\n if (target instanceof Node && menu?.contains(target)) return;\n close();\n };\n const attachOpenListeners = () => {\n if (listenersAttached) return;\n listenersAttached = true;\n document.addEventListener(\"pointerdown\", dismiss);\n document.addEventListener(\"keydown\", keyDown);\n window.addEventListener(\"resize\", closeOnViewportChange);\n window.addEventListener(\"scroll\", closeOnViewportChange, true);\n };\n const detachOpenListeners = () => {\n if (!listenersAttached) return;\n listenersAttached = false;\n document.removeEventListener(\"pointerdown\", dismiss);\n document.removeEventListener(\"keydown\", keyDown);\n window.removeEventListener(\"resize\", closeOnViewportChange);\n window.removeEventListener(\"scroll\", closeOnViewportChange, true);\n };\n const close = () => {\n detachOpenListeners();\n if (!isOpen()) return;\n setPosition();\n if (closeActiveContextMenu === close) closeActiveContextMenu = undefined;\n props.onClose?.();\n };\n const focusItem = (index: number) => {\n const items = focusableItems(menu);\n if (items.length === 0) return;\n items[(index + items.length) % items.length]?.focus();\n };\n const open = (x: number, y: number) => {\n if (props.disabled) return;\n closeActiveContextMenu?.();\n const point = dropdownPosition(\n new DOMRect(x, y, 0, 0),\n // Matches the fixed 13rem `.k2b-context-menu` surface (border-box).\n { width: 208, height: Math.min(items().length * 38 + 12, 384) },\n \"bottom-right\" satisfies DropdownPosition,\n { width: window.innerWidth, height: window.innerHeight },\n 0,\n );\n setPosition({ x: point.left, y: point.top });\n closeActiveContextMenu = close;\n attachOpenListeners();\n props.onOpen?.();\n queueMicrotask(() => {\n focusItem(0);\n });\n };\n const keyDown = (event: KeyboardEvent) => {\n if (!isOpen()) return;\n const items = focusableItems(menu);\n const current = items.indexOf(document.activeElement as HTMLElement);\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n focusItem(current + (event.key === \"ArrowDown\" ? 1 : -1));\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n focusItem(event.key === \"Home\" ? 0 : -1);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close();\n host?.focus();\n } else if (event.key === \"Tab\") {\n close();\n }\n };\n\n onMount(() => {\n onCleanup(() => {\n detachOpenListeners();\n if (closeActiveContextMenu === close) closeActiveContextMenu = undefined;\n });\n });\n\n return (\n <>\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: the named group owns the context-menu relationship without pretending arbitrary children form one button. */}\n <div\n ref={host}\n id={props.id ?? generatedId}\n class={hostClass()}\n role=\"group\"\n tabIndex={props.disabled ? undefined : (props.tabIndex ?? 0)}\n aria-label={props.label ?? messages().contextMenu}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen()}\n aria-controls={isOpen() ? menuId : undefined}\n aria-disabled={props.disabled ? \"true\" : undefined}\n onContextMenu={(event) => {\n if (props.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n open(event.clientX, event.clientY);\n }}\n onKeyDown={(event) => {\n if (props.disabled || (event.key !== \"ContextMenu\" && !(event.shiftKey && event.key === \"F10\"))) return;\n event.preventDefault();\n const rect = host?.getBoundingClientRect();\n if (rect) open(rect.left + 12, rect.top + 12);\n }}\n >\n {props.children}\n </div>\n <Show when={position()}>\n {(point) => (\n <Portal>\n <div\n ref={menu}\n id={menuId}\n class=\"k2b-ui k2b-context-menu\"\n role=\"menu\"\n aria-label={props.label ?? messages().contextMenu}\n style={{ left: `${point().x}px`, top: `${point().y}px` }}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <DropdownItems items={items()} close={close} />\n </div>\n </Portal>\n )}\n </Show>\n </>\n );\n}\n\nexport default ContextMenu;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/ContextMenu.tsx"],"sourcesContent":["import { createMemo, createSignal, createUniqueId, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { type DropdownItem, DropdownItems, type DropdownPosition, dropdownPosition } from \"./Dropdown\";\n\nexport type ContextMenuProps = {\n items: readonly DropdownItem[];\n children: JSX.Element;\n class?: string | ((isOpen: boolean) => string);\n /** Tab order of the context-menu host. Descendant-focused composite widgets use -1. */\n tabIndex?: number;\n disabled?: boolean;\n onClose?: () => void;\n onOpen?: () => void;\n id?: string;\n label?: string;\n};\n\nlet closeActiveContextMenu: (() => void) | undefined;\n\nconst focusableItems = (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\n/** Right-click menu with keyboard invocation, one-open-at-a-time behavior, and viewport clamping. */\nexport function ContextMenu(props: ContextMenuProps): JSX.Element {\n const messages = useUiMessages();\n const generatedId = `k2b-context-${createUniqueId()}`;\n const menuId = `${generatedId}-menu`;\n const [position, setPosition] = createSignal<{ x: number; y: number }>();\n let host: HTMLDivElement | undefined;\n let menu: HTMLDivElement | undefined;\n let listenersAttached = false;\n\n const isOpen = () => position() !== undefined;\n const hostClass = createMemo(() => (typeof props.class === \"function\" ? props.class(isOpen()) : props.class));\n const items = createMemo<readonly DropdownItem[]>(() => props.items);\n\n const dismiss = (event: PointerEvent) => {\n if (menu?.contains(event.target as Node)) return;\n close();\n };\n const closeOnViewportChange = (event: Event) => {\n const target = event.target;\n if (target instanceof Node && menu?.contains(target)) return;\n close();\n };\n const attachOpenListeners = () => {\n if (listenersAttached) return;\n listenersAttached = true;\n document.addEventListener(\"pointerdown\", dismiss);\n document.addEventListener(\"keydown\", keyDown);\n window.addEventListener(\"resize\", closeOnViewportChange);\n window.addEventListener(\"scroll\", closeOnViewportChange, true);\n };\n const detachOpenListeners = () => {\n if (!listenersAttached) return;\n listenersAttached = false;\n document.removeEventListener(\"pointerdown\", dismiss);\n document.removeEventListener(\"keydown\", keyDown);\n window.removeEventListener(\"resize\", closeOnViewportChange);\n window.removeEventListener(\"scroll\", closeOnViewportChange, true);\n };\n const close = () => {\n detachOpenListeners();\n if (!isOpen()) return;\n setPosition();\n if (closeActiveContextMenu === close) closeActiveContextMenu = undefined;\n props.onClose?.();\n };\n const focusItem = (index: number) => {\n const items = focusableItems(menu);\n if (items.length === 0) return;\n items[(index + items.length) % items.length]?.focus();\n };\n const open = (x: number, y: number) => {\n if (props.disabled) return;\n closeActiveContextMenu?.();\n const point = dropdownPosition(\n new DOMRect(x, y, 0, 0),\n // Matches the fixed 13rem `.k2b-context-menu` surface (border-box).\n { width: 208, height: Math.min(items().length * 38 + 12, 384) },\n \"bottom-right\" satisfies DropdownPosition,\n { width: window.innerWidth, height: window.innerHeight },\n 0,\n );\n setPosition({ x: point.left, y: point.top });\n closeActiveContextMenu = close;\n attachOpenListeners();\n props.onOpen?.();\n queueMicrotask(() => {\n focusItem(0);\n });\n };\n const keyDown = (event: KeyboardEvent) => {\n if (!isOpen()) return;\n const items = focusableItems(menu);\n const current = items.indexOf(document.activeElement as HTMLElement);\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n focusItem(current + (event.key === \"ArrowDown\" ? 1 : -1));\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n focusItem(event.key === \"Home\" ? 0 : -1);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close();\n host?.focus();\n } else if (event.key === \"Tab\") {\n close();\n }\n };\n\n onMount(() => {\n onCleanup(() => {\n detachOpenListeners();\n if (closeActiveContextMenu === close) closeActiveContextMenu = undefined;\n });\n });\n\n return (\n <>\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: the named group owns the context-menu relationship without pretending arbitrary children form one button. */}\n <div\n ref={host}\n id={props.id ?? generatedId}\n class={hostClass()}\n role=\"group\"\n tabIndex={props.disabled ? undefined : (props.tabIndex ?? 0)}\n aria-label={props.label ?? messages().contextMenu}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen()}\n aria-controls={isOpen() ? menuId : undefined}\n aria-disabled={props.disabled ? \"true\" : undefined}\n onContextMenu={(event) => {\n if (props.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n open(event.clientX, event.clientY);\n }}\n onKeyDown={(event) => {\n if (props.disabled || (event.key !== \"ContextMenu\" && !(event.shiftKey && event.key === \"F10\"))) return;\n event.preventDefault();\n const rect = host?.getBoundingClientRect();\n if (rect) open(rect.left + 12, rect.top + 12);\n }}\n >\n {props.children}\n </div>\n <Show when={position()}>\n {(point) => (\n <Portal>\n <div\n ref={menu}\n id={menuId}\n class=\"k2b-ui k2b-context-menu\"\n role=\"menu\"\n aria-label={props.label ?? messages().contextMenu}\n style={{ left: `${point().x}px`, top: `${point().y}px` }}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <DropdownItems items={items()} close={close} />\n </div>\n </Portal>\n )}\n </Show>\n </>\n );\n}\n\nexport default ContextMenu;\n"],"mappings":"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","ignoreList":[]}
@@ -3,6 +3,7 @@ import { mergeProps as _$mergeProps } from "solid-js/web";
3
3
  import { ssr as _$ssr } from "solid-js/web";
4
4
  import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
5
5
  import { escape as _$escape } from "solid-js/web";
6
+ import { memo as _$memo } from "solid-js/web";
6
7
  var _tmpl$ = ["<i", " aria-hidden=\"true\"></i>"],
7
8
  _tmpl$2 = ["<span>", "</span>"],
8
9
  _tmpl$3 = ["<span class=\"k2b-sr-only\" aria-live=\"polite\">", "</span>"];
@@ -66,7 +67,7 @@ export function CopyButton(props) {
66
67
  return local.loading ? "true" : undefined;
67
68
  },
68
69
  get ["aria-label"]() {
69
- return iconOnly() ? buttonLabel() : undefined;
70
+ return _$memo(() => !!iconOnly())() ? buttonLabel() : undefined;
70
71
  },
71
72
  onClick: copy,
72
73
  get children() {
@@ -1 +1 @@
1
- {"version":3,"names":["copyToClipboard","createSignal","onCleanup","splitProps","useUiMessages","Button","copyText","text","onCopyError","copy","error","CopyButton","props","messages","local","rest","copied","setCopied","resetTimer","clearTimeout","value","onCopied","setTimeout","resetAfter","visibleLabel","copiedLabel","label","icon","iconOnly","undefined","buttonLabel","loading","loadingLabel","button","tooltip","_$createComponent","_$mergeProps","disabled","type","class","size","variant","aria-busy","aria-label","onClick","children","_$ssr","_tmpl$","_$ssrAttribute","_$escape","_tmpl$2","_tmpl$3"],"sources":["actions/CopyButton.tsx"],"sourcesContent":["import { copyToClipboard } from \"@k2b/stdlib/browser\";\nimport { createSignal, type JSX, onCleanup, splitProps } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Button, type ButtonProps } from \"./Button\";\n\nexport type CopyButtonValue = { text: string; value?: string } | { text?: string; value: string };\n\nexport type CopyButtonProps = CopyButtonValue &\n Omit<ButtonProps, \"children\" | \"onClick\"> & {\n label?: string;\n copiedLabel?: string;\n iconOnly?: boolean;\n onCopied?: () => void;\n onCopyError?: (error: unknown) => void;\n resetAfter?: number;\n };\n\nexport async function copyText(\n text: string,\n onCopyError?: (error: unknown) => void,\n copy: (text: string) => Promise<void> = copyToClipboard,\n): Promise<void> {\n try {\n await copy(text);\n } catch (error) {\n onCopyError?.(error);\n throw error;\n }\n}\n\nexport function CopyButton(props: CopyButtonProps): JSX.Element {\n const messages = useUiMessages();\n const [local, rest] = splitProps(props, [\n \"class\",\n \"copiedLabel\",\n \"disabled\",\n \"iconOnly\",\n \"label\",\n \"loading\",\n \"loadingLabel\",\n \"onCopied\",\n \"onCopyError\",\n \"resetAfter\",\n \"size\",\n \"text\",\n \"type\",\n \"value\",\n \"variant\",\n ]);\n const [copied, setCopied] = createSignal(false);\n let resetTimer: ReturnType<typeof setTimeout> | undefined;\n\n onCleanup(() => {\n if (resetTimer) clearTimeout(resetTimer);\n });\n\n const copy = async () => {\n // `copyText` reports through `onCopyError` and then rethrows so direct\n // callers can await it. The click handler is not awaited by anyone, so it\n // has to absorb the rejection here — otherwise a denied clipboard\n // permission surfaces as an unhandled rejection despite `onCopyError`.\n try {\n await copyText(local.text ?? local.value ?? \"\", local.onCopyError);\n } catch {\n return;\n }\n setCopied(true);\n local.onCopied?.();\n if (resetTimer) clearTimeout(resetTimer);\n resetTimer = setTimeout(() => setCopied(false), local.resetAfter ?? 2000);\n };\n\n const visibleLabel = () => (copied() ? (local.copiedLabel ?? messages().copied) : (local.label ?? messages().copy));\n const icon = () => (copied() ? \"ti ti-check\" : \"ti ti-copy\");\n const iconOnly = () => local.iconOnly ?? local.label === undefined;\n const buttonLabel = () => (local.loading && local.loadingLabel ? local.loadingLabel : visibleLabel());\n const button = (tooltip?: string) => (\n <Button\n {...rest}\n tooltip={tooltip}\n disabled={local.disabled || local.loading}\n type={local.type ?? \"button\"}\n class={`k2b-copy-button ${local.class ?? \"\"}`}\n size={local.size ?? \"sm\"}\n variant={local.variant ?? \"ghost\"}\n aria-busy={local.loading ? \"true\" : undefined}\n aria-label={iconOnly() ? buttonLabel() : undefined}\n onClick={copy}\n >\n <i class={local.loading ? \"ti ti-loader-2 k2b-spin\" : icon()} aria-hidden=\"true\" />\n {!iconOnly() && <span>{buttonLabel()}</span>}\n </Button>\n );\n\n return iconOnly() ? (\n <>\n {button(visibleLabel())}\n <span class=\"k2b-sr-only\" aria-live=\"polite\">\n {copied() ? visibleLabel() : \"\"}\n </span>\n </>\n ) : (\n button(undefined)\n );\n}\n\nexport default CopyButton;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/CopyButton.tsx"],"sourcesContent":["import { copyToClipboard } from \"@k2b/stdlib/browser\";\nimport { createSignal, type JSX, onCleanup, splitProps } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Button, type ButtonProps } from \"./Button\";\n\nexport type CopyButtonValue = { text: string; value?: string } | { text?: string; value: string };\n\nexport type CopyButtonProps = CopyButtonValue &\n Omit<ButtonProps, \"children\" | \"onClick\"> & {\n label?: string;\n copiedLabel?: string;\n iconOnly?: boolean;\n onCopied?: () => void;\n onCopyError?: (error: unknown) => void;\n resetAfter?: number;\n };\n\nexport async function copyText(\n text: string,\n onCopyError?: (error: unknown) => void,\n copy: (text: string) => Promise<void> = copyToClipboard,\n): Promise<void> {\n try {\n await copy(text);\n } catch (error) {\n onCopyError?.(error);\n throw error;\n }\n}\n\nexport function CopyButton(props: CopyButtonProps): JSX.Element {\n const messages = useUiMessages();\n const [local, rest] = splitProps(props, [\n \"class\",\n \"copiedLabel\",\n \"disabled\",\n \"iconOnly\",\n \"label\",\n \"loading\",\n \"loadingLabel\",\n \"onCopied\",\n \"onCopyError\",\n \"resetAfter\",\n \"size\",\n \"text\",\n \"type\",\n \"value\",\n \"variant\",\n ]);\n const [copied, setCopied] = createSignal(false);\n let resetTimer: ReturnType<typeof setTimeout> | undefined;\n\n onCleanup(() => {\n if (resetTimer) clearTimeout(resetTimer);\n });\n\n const copy = async () => {\n // `copyText` reports through `onCopyError` and then rethrows so direct\n // callers can await it. The click handler is not awaited by anyone, so it\n // has to absorb the rejection here — otherwise a denied clipboard\n // permission surfaces as an unhandled rejection despite `onCopyError`.\n try {\n await copyText(local.text ?? local.value ?? \"\", local.onCopyError);\n } catch {\n return;\n }\n setCopied(true);\n local.onCopied?.();\n if (resetTimer) clearTimeout(resetTimer);\n resetTimer = setTimeout(() => setCopied(false), local.resetAfter ?? 2000);\n };\n\n const visibleLabel = () => (copied() ? (local.copiedLabel ?? messages().copied) : (local.label ?? messages().copy));\n const icon = () => (copied() ? \"ti ti-check\" : \"ti ti-copy\");\n const iconOnly = () => local.iconOnly ?? local.label === undefined;\n const buttonLabel = () => (local.loading && local.loadingLabel ? local.loadingLabel : visibleLabel());\n const button = (tooltip?: string) => (\n <Button\n {...rest}\n tooltip={tooltip}\n disabled={local.disabled || local.loading}\n type={local.type ?? \"button\"}\n class={`k2b-copy-button ${local.class ?? \"\"}`}\n size={local.size ?? \"sm\"}\n variant={local.variant ?? \"ghost\"}\n aria-busy={local.loading ? \"true\" : undefined}\n aria-label={iconOnly() ? buttonLabel() : undefined}\n onClick={copy}\n >\n <i class={local.loading ? \"ti ti-loader-2 k2b-spin\" : icon()} aria-hidden=\"true\" />\n {!iconOnly() && <span>{buttonLabel()}</span>}\n </Button>\n );\n\n return iconOnly() ? (\n <>\n {button(visibleLabel())}\n <span class=\"k2b-sr-only\" aria-live=\"polite\">\n {copied() ? visibleLabel() : \"\"}\n </span>\n </>\n ) : (\n button(undefined)\n );\n}\n\nexport default CopyButton;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createSignal","Show","resolveMaybeAccessor","Disclosure","props","controlled","value","undefined","internal","setInternal","defaultValue","open","Boolean","details","_$ssr","_tmpl$","_$escape","class","_$ssrAttribute","surface","disabled","_$createComponent","when","icon","children","_tmpl$2","summary"],"sources":["actions/Disclosure.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, Show } from \"solid-js\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { resolveMaybeAccessor } from \"../inputs/field-contract\";\n\nexport type DisclosureProps = {\n summary: JSX.Element;\n surface?: \"paper\" | \"plain\";\n children: JSX.Element;\n value?: MaybeAccessor<boolean>;\n defaultValue?: boolean;\n onValueChange?: (value: boolean) => void;\n icon?: string;\n disabled?: boolean;\n class?: string;\n};\n\n/** Native disclosure with the same value/onValueChange vocabulary as other controls. */\nexport function Disclosure(props: DisclosureProps): JSX.Element {\n const controlled = () => props.value !== undefined;\n const [internal, setInternal] = createSignal(props.defaultValue ?? false);\n const open = () => (controlled() ? Boolean(resolveMaybeAccessor(props.value)) : internal());\n let details: HTMLDetailsElement | undefined;\n\n createEffect(() => {\n if (details && details.open !== open()) details.open = open();\n });\n\n return (\n <details\n ref={details}\n class={`k2b-disclosure ${props.class ?? \"\"}`}\n data-surface={props.surface ?? \"paper\"}\n open={open()}\n data-disabled={props.disabled ? \"true\" : undefined}\n onToggle={(event) => {\n if (props.disabled) {\n event.currentTarget.open = open();\n return;\n }\n const next = event.currentTarget.open;\n // A controlled owner may change `value` without user input. Reflecting\n // that value onto <details> emits a native toggle event; it must not be\n // reported back as a second user change.\n if (controlled() && next === open()) return;\n if (!controlled()) setInternal(next);\n props.onValueChange?.(next);\n }}\n >\n {/* biome-ignore lint/a11y/noStaticElementInteractions: summary is the native interactive trigger for details. */}\n <summary aria-disabled={props.disabled ? \"true\" : undefined} onClick={(event) => props.disabled && event.preventDefault()}>\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{props.summary}</span>\n <i class=\"ti ti-chevron-down k2b-disclosure__chevron\" aria-hidden=\"true\" />\n </summary>\n <div class=\"k2b-disclosure__content\">{props.children}</div>\n </details>\n );\n}\n\nexport default Disclosure;\n"],"mappings":";;;;;;AAAA,SAASA,YAAY,EAAEC,YAAY,EAAYC,IAAI,QAAQ,UAAU;AAErE,SAASC,oBAAoB,QAAQ,0BAA0B;AAc/D;AACA,OAAO,SAASC,UAAUA,CAACC,KAAsB,EAAe;EAC9D,MAAMC,UAAU,GAAGA,CAAA,KAAMD,KAAK,CAACE,KAAK,KAAKC,SAAS;EAClD,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGT,YAAY,CAACI,KAAK,CAACM,YAAY,IAAI,KAAK,CAAC;EACzE,MAAMC,IAAI,GAAGA,CAAA,KAAON,UAAU,CAAC,CAAC,GAAGO,OAAO,CAACV,oBAAoB,CAACE,KAAK,CAACE,KAAK,CAAC,CAAC,GAAGE,QAAQ,CAAC,CAAE;EAC3F,IAAIK,OAAuC;EAE3Cd,YAAY,CAAC,MAAM;IACjB,IAAIc,OAAO,IAAIA,OAAO,CAACF,IAAI,KAAKA,IAAI,CAAC,CAAC,EAAEE,OAAO,CAACF,IAAI,GAAGA,IAAI,CAAC,CAAC;EAC/D,CAAC,CAAC;EAEF,OAAAG,KAAA,CAAAC,MAAA,EAGW,kBAAAC,QAAA,CAAkBZ,KAAK,CAACa,KAAK,IAAI,EAAE,SAAE,EAAAC,cAAA,iBAAAF,QAAA,CAC9BZ,KAAK,CAACe,OAAO,IAAI,OAAO,iBAAAD,cAAA,SAChCP,IAAI,CAAC,CAAC,UAAAO,cAAA,kBACGd,KAAK,CAACgB,QAAQ,GAAG,MAAM,GAAAJ,QAAA,CAAGT,SAAS,iBAAAW,cAAA,kBAgB1Bd,KAAK,CAACgB,QAAQ,GAAG,MAAM,GAAAJ,QAAA,CAAGT,SAAS,iBAAAS,QAAA,CAAAK,iBAAA,CACxDpB,IAAI;IAAA,IAACqB,IAAIA,CAAA;MAAA,OAAElB,KAAK,CAACmB,IAAI;IAAA;IAAAC,QAAA,EAAID,IAAI,IAAAT,KAAA,CAAAW,OAAA,EAAAP,cAAA,UAAAF,QAAA,CAAeO,IAAI,CAAC,CAAC;EAAuB,KAAAP,QAAA,CACnEZ,KAAK,CAACsB,OAAO,GAAAV,QAAA,CAGgBZ,KAAK,CAACoB,QAAQ;AAG1D;AAEA,eAAerB,UAAU","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/Disclosure.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, Show } from \"solid-js\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { resolveMaybeAccessor } from \"../inputs/field-contract\";\n\nexport type DisclosureProps = {\n summary: JSX.Element;\n surface?: \"paper\" | \"plain\";\n children: JSX.Element;\n value?: MaybeAccessor<boolean>;\n defaultValue?: boolean;\n onValueChange?: (value: boolean) => void;\n icon?: string;\n disabled?: boolean;\n class?: string;\n};\n\n/** Native disclosure with the same value/onValueChange vocabulary as other controls. */\nexport function Disclosure(props: DisclosureProps): JSX.Element {\n const controlled = () => props.value !== undefined;\n const [internal, setInternal] = createSignal(props.defaultValue ?? false);\n const open = () => (controlled() ? Boolean(resolveMaybeAccessor(props.value)) : internal());\n let details: HTMLDetailsElement | undefined;\n\n createEffect(() => {\n if (details && details.open !== open()) details.open = open();\n });\n\n return (\n <details\n ref={details}\n class={`k2b-disclosure ${props.class ?? \"\"}`}\n data-surface={props.surface ?? \"paper\"}\n open={open()}\n data-disabled={props.disabled ? \"true\" : undefined}\n onToggle={(event) => {\n if (props.disabled) {\n event.currentTarget.open = open();\n return;\n }\n const next = event.currentTarget.open;\n // A controlled owner may change `value` without user input. Reflecting\n // that value onto <details> emits a native toggle event; it must not be\n // reported back as a second user change.\n if (controlled() && next === open()) return;\n if (!controlled()) setInternal(next);\n props.onValueChange?.(next);\n }}\n >\n {/* biome-ignore lint/a11y/noStaticElementInteractions: summary is the native interactive trigger for details. */}\n <summary aria-disabled={props.disabled ? \"true\" : undefined} onClick={(event) => props.disabled && event.preventDefault()}>\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{props.summary}</span>\n <i class=\"ti ti-chevron-down k2b-disclosure__chevron\" aria-hidden=\"true\" />\n </summary>\n <div class=\"k2b-disclosure__content\">{props.children}</div>\n </details>\n );\n}\n\nexport default Disclosure;\n"],"mappings":";;;;;;AAAA,SAAS,YAAY,EAAE,YAAY,EAAY,IAAI,QAAQ,UAAU;AAErE,SAAS,oBAAoB,QAAQ,0BAA0B;AAc/D;AACA,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,KAAK,KAAK,SAAS;EAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC;EACzE,MAAM,IAAI,GAAG,MAAO,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAE;EAC3F,IAAI,OAAuC;EAE3C,YAAY,CAAC,MAAM;IACjB,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;EAC/D,CAAC,CAAC;EAEF,qBAGW,2BAAkB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,0CAC9B,KAAK,CAAC,OAAO,IAAI,OAAO,wCAChC,IAAI,CAAC,CAAC,0CACG,KAAK,CAAC,QAAQ,GAAG,MAAM,YAAG,SAAS,iDAgB1B,KAAK,CAAC,QAAQ,GAAG,MAAM,YAAG,SAAS,4CACxD,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA,UAAI,IAAI,oDAAe,IAAI,CAAC,CAAC;EAAuB,cACnE,KAAK,CAAC,OAAO,YAGgB,KAAK,CAAC,QAAQ;AAG1D;AAEA,eAAe,UAAU","ignoreList":[]}
@@ -2,6 +2,7 @@ import { ssrStyle as _$ssrStyle } from "solid-js/web";
2
2
  import { ssrElement as _$ssrElement } from "solid-js/web";
3
3
  import { mergeProps as _$mergeProps } from "solid-js/web";
4
4
  import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
5
+ import { memo as _$memo } from "solid-js/web";
5
6
  import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
6
7
  import { ssr as _$ssr } from "solid-js/web";
7
8
  import { escape as _$escape } from "solid-js/web";
@@ -77,7 +78,7 @@ export function DropdownItem(props) {
77
78
  const content = itemContent(props);
78
79
  return _$createComponent(Show, {
79
80
  get when() {
80
- return !props.disabled ? props.href : undefined;
81
+ return _$memo(() => !!!props.disabled)() ? props.href : undefined;
81
82
  },
82
83
  get fallback() {
83
84
  return _$ssr(_tmpl$5, `k2b-dropdown__item ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-danger", danger() ? "true" : _$escape(undefined, true), false), _$ssrAttribute("disabled", props.disabled, true) + _$ssrAttribute("aria-disabled", props.disabled ? "true" : _$escape(undefined, true), false), _$escape(content));
@@ -128,7 +129,7 @@ function DropdownChoiceItem(props) {
128
129
  children: description => _$ssr(_tmpl$4, _$escape(description()))
129
130
  })), _$escape(_$createComponent(Show, {
130
131
  get when() {
131
- return props.choice === "radio" && checked();
132
+ return _$memo(() => props.choice === "radio")() && checked();
132
133
  },
133
134
  get children() {
134
135
  return _$ssr(_tmpl$9);
@@ -158,10 +159,10 @@ export function DropdownItems(props) {
158
159
  return item.class;
159
160
  },
160
161
  get href() {
161
- return "href" in item ? item.href : undefined;
162
+ return _$memo(() => "href" in item)() ? item.href : undefined;
162
163
  },
163
164
  get external() {
164
- return "external" in item ? item.external : undefined;
165
+ return _$memo(() => "external" in item)() ? item.external : undefined;
165
166
  },
166
167
  get onSelect() {
167
168
  return selectAction(item);
@@ -237,7 +238,7 @@ function DropdownTrigger(props) {
237
238
  return disabled();
238
239
  },
239
240
  get tabIndex() {
240
- return disabled() ? -1 : local.tabIndex;
241
+ return _$memo(() => !!disabled())() ? -1 : local.tabIndex;
241
242
  },
242
243
  onClick: click,
243
244
  get onKeyDown() {
@@ -294,7 +295,7 @@ function DropdownTrigger(props) {
294
295
  }
295
296
  }), _$escape(local.children), false), _$createComponent(Show, {
296
297
  get when() {
297
- return local.tooltip !== false && local.tooltip !== undefined;
298
+ return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
298
299
  },
299
300
  get children() {
300
301
  return _$createComponent(Tooltip, {