@k2b/ui 0.5.0 → 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 (364) 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.map +1 -1
  111. package/dist/browser/layout/AppOverview.js.map +1 -1
  112. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  113. package/dist/browser/layout/BottomSheet.js.map +1 -1
  114. package/dist/browser/layout/DataPanel.js.map +1 -1
  115. package/dist/browser/layout/DetailPanel.js.map +1 -1
  116. package/dist/browser/layout/Discussion.js.map +1 -1
  117. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  118. package/dist/browser/layout/Navigation.js.map +1 -1
  119. package/dist/browser/layout/PanelDialog.js.map +1 -1
  120. package/dist/browser/layout/PanelHeader.js.map +1 -1
  121. package/dist/browser/layout/Panes.js.map +1 -1
  122. package/dist/browser/layout/PullToRefresh.js.map +1 -1
  123. package/dist/browser/layout/ScrollArea.js.map +1 -1
  124. package/dist/browser/layout/Settings.js.map +1 -1
  125. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  126. package/dist/browser/layout/SettingsModal.js.map +1 -1
  127. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  128. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  129. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  130. package/dist/browser/layout/floating-window-geometry.js.map +1 -1
  131. package/dist/browser/layout/index.js.map +1 -1
  132. package/dist/browser/layout/navigation-model.js.map +1 -1
  133. package/dist/browser/layout/panes-layout.js.map +1 -1
  134. package/dist/browser/layout/scroll-fade.js.map +1 -1
  135. package/dist/browser/layout/stable-id.js.map +1 -1
  136. package/dist/browser/surfaces/Avatar.js.map +1 -1
  137. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  138. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  139. package/dist/browser/surfaces/NotFoundState.js.map +1 -1
  140. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  141. package/dist/browser/surfaces/Paper.js.map +1 -1
  142. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  143. package/dist/browser/surfaces/ProgressBar.js.map +1 -1
  144. package/dist/browser/surfaces/StatCell.js.map +1 -1
  145. package/dist/browser/surfaces/StatGrid.js.map +1 -1
  146. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  147. package/dist/browser/surfaces/Tag.js.map +1 -1
  148. package/dist/browser/surfaces/index.js.map +1 -1
  149. package/dist/browser/widgets/Widget.js.map +1 -1
  150. package/dist/browser/widgets/WidgetHero.js.map +1 -1
  151. package/dist/browser/widgets/WidgetList.js.map +1 -1
  152. package/dist/browser/widgets/WidgetPills.js.map +1 -1
  153. package/dist/browser/widgets/WidgetStat.js.map +1 -1
  154. package/dist/browser/widgets/WidgetStatus.js.map +1 -1
  155. package/dist/ssr/actions/Button.js +5 -4
  156. package/dist/ssr/actions/Button.js.map +1 -1
  157. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  158. package/dist/ssr/actions/CopyButton.js +2 -1
  159. package/dist/ssr/actions/CopyButton.js.map +1 -1
  160. package/dist/ssr/actions/Disclosure.js.map +1 -1
  161. package/dist/ssr/actions/Dropdown.js +7 -6
  162. package/dist/ssr/actions/Dropdown.js.map +1 -1
  163. package/dist/ssr/actions/FilterChip.js +5 -4
  164. package/dist/ssr/actions/FilterChip.js.map +1 -1
  165. package/dist/ssr/actions/RemoveButton.js +1 -0
  166. package/dist/ssr/actions/RemoveButton.js.map +1 -1
  167. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  168. package/dist/ssr/actions/SplitButton.js +1 -0
  169. package/dist/ssr/actions/SplitButton.js.map +1 -1
  170. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  171. package/dist/ssr/actions/Tabs.js.map +1 -1
  172. package/dist/ssr/actions/Toolbar.js.map +1 -1
  173. package/dist/ssr/actions/index.js.map +1 -1
  174. package/dist/ssr/chat/ChatComposer.js +6 -5
  175. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  176. package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
  177. package/dist/ssr/chat/ChatPrimitives.js +6 -5
  178. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  179. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  180. package/dist/ssr/chat/ChatTasks.js +1 -1
  181. package/dist/ssr/chat/ChatTasks.js.map +1 -1
  182. package/dist/ssr/chat/ChatTimeline.js +5 -4
  183. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  184. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  185. package/dist/ssr/chat/composer-document.js.map +1 -1
  186. package/dist/ssr/chat/index.js.map +1 -1
  187. package/dist/ssr/content/Calendar.js +2 -1
  188. package/dist/ssr/content/Calendar.js.map +1 -1
  189. package/dist/ssr/content/Chart.js.map +1 -1
  190. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  191. package/dist/ssr/content/ChartExplorerControls.js +5 -4
  192. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  193. package/dist/ssr/content/ChartFilterControls.js +3 -2
  194. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  195. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  196. package/dist/ssr/content/CodeDisplay.js.map +1 -1
  197. package/dist/ssr/content/DataTable.js +1 -0
  198. package/dist/ssr/content/DataTable.js.map +1 -1
  199. package/dist/ssr/content/Docs.js +1 -0
  200. package/dist/ssr/content/Docs.js.map +1 -1
  201. package/dist/ssr/content/FileBrowser.js +2 -1
  202. package/dist/ssr/content/FileBrowser.js.map +1 -1
  203. package/dist/ssr/content/FileGrid.js.map +1 -1
  204. package/dist/ssr/content/FileTree.js +2 -1
  205. package/dist/ssr/content/FileTree.js.map +1 -1
  206. package/dist/ssr/content/FileView.js +5 -4
  207. package/dist/ssr/content/FileView.js.map +1 -1
  208. package/dist/ssr/content/Lightbox.js +2 -1
  209. package/dist/ssr/content/Lightbox.js.map +1 -1
  210. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  211. package/dist/ssr/content/MarkdownView.js.map +1 -1
  212. package/dist/ssr/content/Pagination.js +2 -1
  213. package/dist/ssr/content/Pagination.js.map +1 -1
  214. package/dist/ssr/content/PdfPreview.js.map +1 -1
  215. package/dist/ssr/content/RangePicker.js.map +1 -1
  216. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  217. package/dist/ssr/content/calendar-event-layout.js.map +1 -1
  218. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  219. package/dist/ssr/content/chart-cursor.js.map +1 -1
  220. package/dist/ssr/content/chart-explorer.js.map +1 -1
  221. package/dist/ssr/content/chart-inspection.js.map +1 -1
  222. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  223. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  224. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  225. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  226. package/dist/ssr/content/chart-svg.js.map +1 -1
  227. package/dist/ssr/content/code-highlight.js.map +1 -1
  228. package/dist/ssr/content/collection-selection.js.map +1 -1
  229. package/dist/ssr/content/delimited-preferences.js.map +1 -1
  230. package/dist/ssr/content/file-tree.js.map +1 -1
  231. package/dist/ssr/content/file-view-preview.js.map +1 -1
  232. package/dist/ssr/content/index.js.map +1 -1
  233. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  234. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  235. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  236. package/dist/ssr/feedback/index.js.map +1 -1
  237. package/dist/ssr/feedback/prompts.js +3 -2
  238. package/dist/ssr/feedback/prompts.js.map +1 -1
  239. package/dist/ssr/feedback/toast.js.map +1 -1
  240. package/dist/ssr/feedback/tooltip-position.js.map +1 -1
  241. package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
  242. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  243. package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
  244. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  245. package/dist/ssr/inputs/Checkbox.js +1 -0
  246. package/dist/ssr/inputs/Checkbox.js.map +1 -1
  247. package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
  248. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  249. package/dist/ssr/inputs/ChoiceInputs.js +1 -0
  250. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  251. package/dist/ssr/inputs/Combobox.js +2 -1
  252. package/dist/ssr/inputs/Combobox.js.map +1 -1
  253. package/dist/ssr/inputs/DatePicker.js +4 -3
  254. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  255. package/dist/ssr/inputs/FileInputs.js +2 -1
  256. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  257. package/dist/ssr/inputs/MultiSelectInput.js +4 -3
  258. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  259. package/dist/ssr/inputs/NumberInput.js +2 -1
  260. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  261. package/dist/ssr/inputs/Select.js +4 -3
  262. package/dist/ssr/inputs/Select.js.map +1 -1
  263. package/dist/ssr/inputs/SelectChip.js +3 -2
  264. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  265. package/dist/ssr/inputs/SpecialInputs.js +1 -0
  266. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  267. package/dist/ssr/inputs/Switch.js.map +1 -1
  268. package/dist/ssr/inputs/TagEditor.js +3 -2
  269. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  270. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  271. package/dist/ssr/inputs/TemplateEditor.js +1 -0
  272. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  273. package/dist/ssr/inputs/TextInput.js +4 -3
  274. package/dist/ssr/inputs/TextInput.js.map +1 -1
  275. package/dist/ssr/inputs/choice.js.map +1 -1
  276. package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
  277. package/dist/ssr/inputs/completion/engine.js.map +1 -1
  278. package/dist/ssr/inputs/completion/index.js.map +1 -1
  279. package/dist/ssr/inputs/completion/overlay.js.map +1 -1
  280. package/dist/ssr/inputs/date-picker.js.map +1 -1
  281. package/dist/ssr/inputs/editor-dom.js.map +1 -1
  282. package/dist/ssr/inputs/field-contract.js.map +1 -1
  283. package/dist/ssr/inputs/icon-options.js.map +1 -1
  284. package/dist/ssr/inputs/image-crop.js.map +1 -1
  285. package/dist/ssr/inputs/index.js.map +1 -1
  286. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  287. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  288. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  289. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  290. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
  291. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  292. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  293. package/dist/ssr/internal/color.js.map +1 -1
  294. package/dist/ssr/internal/field.js.map +1 -1
  295. package/dist/ssr/internal/portal.js.map +1 -1
  296. package/dist/ssr/intl/Format.js.map +1 -1
  297. package/dist/ssr/intl/index.js.map +1 -1
  298. package/dist/ssr/intl/locale.js.map +1 -1
  299. package/dist/ssr/intl/messages.js.map +1 -1
  300. package/dist/ssr/layout/AppOverview.js +2 -1
  301. package/dist/ssr/layout/AppOverview.js.map +1 -1
  302. package/dist/ssr/layout/AppWorkspace.js +7 -6
  303. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  304. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  305. package/dist/ssr/layout/DataPanel.js +1 -0
  306. package/dist/ssr/layout/DataPanel.js.map +1 -1
  307. package/dist/ssr/layout/DetailPanel.js +1 -0
  308. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  309. package/dist/ssr/layout/Discussion.js +3 -2
  310. package/dist/ssr/layout/Discussion.js.map +1 -1
  311. package/dist/ssr/layout/FloatingWindow.js +1 -0
  312. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  313. package/dist/ssr/layout/Navigation.js +3 -2
  314. package/dist/ssr/layout/Navigation.js.map +1 -1
  315. package/dist/ssr/layout/PanelDialog.js +1 -0
  316. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  317. package/dist/ssr/layout/PanelHeader.js.map +1 -1
  318. package/dist/ssr/layout/Panes.js.map +1 -1
  319. package/dist/ssr/layout/PullToRefresh.js.map +1 -1
  320. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  321. package/dist/ssr/layout/Settings.js +2 -1
  322. package/dist/ssr/layout/Settings.js.map +1 -1
  323. package/dist/ssr/layout/SettingsCollection.js +1 -0
  324. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  325. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  326. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  327. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  328. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  329. package/dist/ssr/layout/floating-window-geometry.js.map +1 -1
  330. package/dist/ssr/layout/index.js.map +1 -1
  331. package/dist/ssr/layout/navigation-model.js.map +1 -1
  332. package/dist/ssr/layout/panes-layout.js.map +1 -1
  333. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  334. package/dist/ssr/layout/stable-id.js.map +1 -1
  335. package/dist/ssr/surfaces/Avatar.js +2 -1
  336. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  337. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  338. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  339. package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
  340. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  341. package/dist/ssr/surfaces/Paper.js +2 -1
  342. package/dist/ssr/surfaces/Paper.js.map +1 -1
  343. package/dist/ssr/surfaces/Placeholder.js +2 -1
  344. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  345. package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
  346. package/dist/ssr/surfaces/StatCell.js +2 -1
  347. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  348. package/dist/ssr/surfaces/StatGrid.js +1 -0
  349. package/dist/ssr/surfaces/StatGrid.js.map +1 -1
  350. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  351. package/dist/ssr/surfaces/Tag.js.map +1 -1
  352. package/dist/ssr/surfaces/index.js.map +1 -1
  353. package/dist/ssr/widgets/Widget.js +1 -0
  354. package/dist/ssr/widgets/Widget.js.map +1 -1
  355. package/dist/ssr/widgets/WidgetHero.js.map +1 -1
  356. package/dist/ssr/widgets/WidgetList.js.map +1 -1
  357. package/dist/ssr/widgets/WidgetPills.js.map +1 -1
  358. package/dist/ssr/widgets/WidgetStat.js +1 -0
  359. package/dist/ssr/widgets/WidgetStat.js.map +1 -1
  360. package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
  361. package/dist/styles.css +1 -1
  362. package/dist/types/actions/SpotlightSearch.d.ts +1 -1
  363. package/dist/types/feedback/prompts.d.ts +2 -2
  364. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"names":["charts","createEffect","createMemo","createSignal","createUniqueId","onCleanup","onMount","Show","splitProps","untrack","isServer","useLocale","useUiMessages","createChartInspection","lineGapsSvg","DEFAULT_MAP_VIEWPORT","normalizeMapViewport","panMapViewport","zoomMapViewport","panStateTimelineViewport","renderStateTimelineSvg","stateTimelineDomain","stateTimelineHeight","zoomStateTimelineViewport","responsiveChartSvg","responsiveMapSvg","selectedChartSvg","chartRenderHeight","props","kind","rows","length","legend","Math","max","title","subtitle","data","renderChartSvg","width","height","mapViewport","timelineViewport","class","_class","style","_style","labels","_labels","interactive","_interactive","onSelect","_onSelect","selected","_selected","tooltip","_tooltip","cursor","_cursor","zoomFocus","_zoomFocus","opts","viewport","svg","inspect","maxGap","undefined","area","errorBand","Error","preservesAspectRatio","isEmpty","series","every","s","groups","row","intervals","Chart","drawingProps","messages","locale","containerRef","chartTooltipRef","lineAnchorRef","size","dimensions","getBoundingClientRect","initialMapViewport","setMapViewport","initialTimelineViewport","domain","setTimelineViewport","dragging","setDragging","chartTooltipId","timelineViewportLocallyChanged","drag","timelineDrag","pointerFrame","pendingPointer","interactiveMap","interactiveTimeline","interactiveLine","draggable","timelineFullDomain","updateTimelineViewport","update","mapDimensions","viewportElement","querySelector","matrix","getScreenCTM","box","viewBox","baseVal","hypot","a","b","c","d","rect","zoom","delta","closeChartTooltip","current","reset","handlePointerDown","event","inspection","down","button","target","closest","pointerId","x","clientX","currentTarget","setPointerCapture","y","clientY","flushPointerMove","cancelAnimationFrame","sample","start","activeTimelineDrag","handlePointerMove","move","requestAnimationFrame","stopDragging","hasPointerCapture","releasePointerCapture","handleWheel","ctrlKey","metaKey","preventDefault","deltaY","anchor","left","shiftKey","handleKeyDown","key","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","container","enabled","select","selection","format","fields","chartFields","Intl","NumberFormat","maximumFractionDigits","datum","label","seriesIndex","values","map","field","value","formatted","yes","no","close","svgMarkup","invalidate","selectDatum","outside","Node","contains","window","addEventListener","scroll","removeEventListener","chartStyle","_$createComponent","when","fallback","_$ssr","_tmpl$5","_$escape","_$ssrStyle","empty","noData","children","_tmpl$4","_$ssrAttribute","interactiveLineChart","interactiveChart","_$ssrStyleProperty","_tmpl$","_tmpl$2","_tmpl$3","zoomIn","zoomOut","resetMap","resetMapView","resetTimeline","resetTimelineView"],"sources":["content/Chart.tsx"],"sourcesContent":["import type { MapViewport } from \"@k2b/stdlib\";\nimport { charts } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps, untrack } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartDatumRef, type ChartSelection, type ChartTooltipFormatter, createChartInspection } from \"./chart-inspection\";\nimport { lineGapsSvg } from \"./chart-line-gaps\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from \"./chart-map-viewport\";\nimport {\n panStateTimelineViewport,\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n zoomStateTimelineViewport,\n} from \"./chart-state-timeline\";\nimport { responsiveChartSvg, responsiveMapSvg, selectedChartSvg } from \"./chart-svg\";\n\n/**\n * Chart — minimal Solid wrapper around `stdlib.charts`.\n *\n * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;\n * Solid's `innerHTML` is reactive, so any time a prop (signal, store\n * slice, derived value) changes, the SVG re-renders. No manual\n * subscription, no imperative DOM patching. Trade-off: every change\n * is a full SVG re-build, not a diff — fine for dashboard cadences\n * (poll, websocket, store updates). Don't use this for 60fps streaming.\n *\n * **Sizing.** The server and browser render the same logical viewBox. CSS\n * fits Cartesian plots to the container and preserves text/marker sizes;\n * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain\n * their aspect ratio. No measurement\n * or hydration redraw is needed. The caller sizes the wrapper, for example\n * `style={{ height: \"14rem\" }}`. State timelines derive their default height\n * from the row count and legend via `stateTimelineHeight()`.\n *\n * **Why so thin.** The props are a discriminated union over each\n * stdlib chart function — `kind: \"line\"` brings in exactly the params\n * `charts.line` expects, `kind: \"bar\"` brings in `charts.bar`'s, etc.\n * Options stay aligned with stdlib without renaming. Shared interactive\n * layers add bounded pan / zoom controls to maps and state timelines, plus\n * renderer-owned inspection, tooltips and optional selection for all chart kinds.\n * If stdlib gains a new option, it's automatically available at every\n * callsite.\n *\n * **Theming.** stdlib charts use `currentColor` for axes / ticks /\n * tick labels — set the wrapping element's `color` and everything\n * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS\n * custom properties; override on the parent for per-chart palettes.\n *\n * ```tsx\n * <Chart kind=\"line\" style={{ height: \"12rem\" }}\n * series={[{ data: points() }]}\n * yAxis={{ format: v => `€${v}k` }} />\n *\n * <Chart kind=\"donut\" style={{ height: \"12rem\" }} data={slices()} />\n *\n * <Chart kind=\"sparkline\" style={{ width: \"6rem\", height: \"1.5rem\" }} data={trend()} />\n *\n * <Chart kind=\"map\" style={{ height: \"16rem\" }} series={locations()} interactive />\n * ```\n */\n\n/** All chart kinds shipped by `stdlib.charts`. */\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartLabels = Partial<{\n empty: string;\n series: string;\n interactiveMap: string;\n interactiveTimeline: string;\n interactiveLine: string;\n interactiveChart: string;\n zoomIn: string;\n zoomOut: string;\n resetMap: string;\n resetTimeline: string;\n}>;\n\n/**\n * Per-kind props: `kind` discriminator + the exact options that\n * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper\n * owns those — CSS fits a stable coordinate space to the box). Solid's\n * component model handles discriminated unions natively, so callsites\n * get full type safety.\n */\nexport type ChartProps = {\n [K in ChartKind]: {\n kind: K;\n class?: string;\n style?: JSX.CSSProperties | string;\n labels?: ChartLabels;\n interactive?: boolean;\n onSelect?: (selection: ChartSelection) => void;\n /** Controlled highlight; indices belong to this exact input snapshot. */\n selected?: ChartDatumRef | null;\n tooltip?: ChartTooltipFormatter;\n /** Optional shared X cursor for line charts. */\n cursor?: ChartCursor;\n } & (K extends \"map\"\n ? {\n /** Target when zooming in from the world view. Defaults to Europe (50, 10). */\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n }\n : {}) &\n (K extends \"line\" ? { /** Largest connected X distance; positive, finite, without area/errorBand fills. */ maxGap?: number } : {}) &\n (K extends \"stateTimeline\" ? StateTimelineChartOptions : Omit<Parameters<(typeof charts)[K]>[0], \"width\" | \"height\" | \"inspect\">);\n}[ChartKind];\n\n/** Pure renderer options: component layout, events and inspection are configured elsewhere. */\nexport type ChartRenderOptions = {\n [K in ChartKind]: Omit<\n Extract<ChartProps, { kind: K }>,\n \"class\" | \"style\" | \"labels\" | \"interactive\" | \"onSelect\" | \"selected\" | \"tooltip\" | \"cursor\"\n >;\n}[ChartKind];\n\n/** Keep the fixed 28-unit bar-gauge rows inside the shared SSR/browser coordinate space. */\nexport const chartRenderHeight = (props: ChartRenderOptions): number => {\n if (props.kind === \"stateTimeline\") return stateTimelineHeight(props.rows.length, props.legend !== false);\n if (props.kind === \"barGauge\") return Math.max(280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);\n return 280;\n};\n\n/**\n * Internal — strips wrapper-only keys from props and forwards the\n * rest (plus logical size) to `charts[kind]`. The `any` is the\n * price for dispatching one function call across 14 different option\n * types; an explicit per-kind switch would type it but balloon the\n * component for no runtime benefit.\n */\nexport const renderChartSvg = (\n props: ChartProps,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n): string => {\n const {\n kind,\n class: _class,\n style: _style,\n labels: _labels,\n interactive: _interactive,\n onSelect: _onSelect,\n selected: _selected,\n tooltip: _tooltip,\n cursor: _cursor,\n zoomFocus: _zoomFocus,\n ...opts\n } = props as ChartProps & { interactive?: boolean; zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\"> };\n if (kind === \"stateTimeline\") {\n return responsiveChartSvg(\n renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n interactive: props.interactive,\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let svg = (charts[kind] as (o: unknown) => string)({\n ...(opts as any),\n ...(kind === \"map\" ? { viewport: DEFAULT_MAP_VIEWPORT } : {}),\n width,\n height,\n inspect: props.interactive === true || (props.kind === \"line\" && props.maxGap !== undefined),\n });\n if (props.kind === \"line\" && props.maxGap !== undefined) {\n if (props.area || props.errorBand) throw new Error(\"Chart maxGap does not support area or errorBand fills\");\n svg = lineGapsSvg(svg, props.maxGap, props);\n }\n if (props.kind === \"map\") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));\n return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);\n};\n\nconst preservesAspectRatio = (kind: ChartKind) => kind === \"map\" || kind === \"pie\" || kind === \"donut\" || kind === \"gauge\";\n\n/** Empty-data short-circuit. Kept per-kind because stdlib's payload\n * key differs (series vs data vs groups). We're conservative: only\n * block on truly empty inputs; partially-filled series get rendered\n * as-is and stdlib handles the gaps. */\nconst isEmpty = (props: ChartProps): boolean => {\n if (props.kind === \"line\" || props.kind === \"scatter\") {\n return !props.series?.length || props.series.every((s) => !s.data.length);\n }\n if (props.kind === \"bar\" || props.kind === \"donut\" || props.kind === \"pie\") {\n return !props.data?.length;\n }\n if (props.kind === \"histogram\" || props.kind === \"sparkline\") {\n return !props.data?.length;\n }\n if (props.kind === \"boxplot\") {\n return !props.groups?.length;\n }\n if (props.kind === \"stateTimeline\") {\n return !props.rows?.length || props.rows.every((row) => !row.intervals.length);\n }\n return false;\n};\n\nconst Chart = (props: ChartProps): JSX.Element => {\n const [, drawingProps] = splitProps(props, [\"selected\", \"onSelect\", \"tooltip\", \"cursor\"]);\n const messages = useUiMessages();\n const locale = useLocale();\n let containerRef: HTMLDivElement | undefined;\n let chartTooltipRef: HTMLSpanElement | undefined;\n let lineAnchorRef: HTMLSpanElement | undefined;\n // One deterministic coordinate space on the server and client. CSS fits the\n // SVG to its box; hydration must never replace it with measured geometry.\n const size = () => ({\n width: 480,\n height: chartRenderHeight(props),\n });\n const dimensions = () => containerRef?.getBoundingClientRect() ?? size();\n const initialMapViewport = props.kind === \"map\" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;\n const [mapViewport, setMapViewport] = createSignal<MapViewport>(initialMapViewport);\n const initialTimelineViewport =\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : ([0, 1] as StateTimelineDomain);\n const [timelineViewport, setTimelineViewport] = createSignal<StateTimelineDomain>(initialTimelineViewport);\n const [dragging, setDragging] = createSignal(false);\n const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;\n let timelineViewportLocallyChanged = false;\n let drag:\n | {\n pointerId: number;\n x: number;\n y: number;\n width: number;\n height: number;\n viewport: MapViewport;\n }\n | undefined;\n let timelineDrag:\n | {\n pointerId: number;\n x: number;\n width: number;\n viewport: StateTimelineDomain;\n }\n | undefined;\n let pointerFrame: number | undefined;\n let pendingPointer: { pointerId: number; clientX: number; clientY: number } | undefined;\n\n const interactiveMap = () => props.kind === \"map\" && props.interactive === true;\n const interactiveTimeline = () => props.kind === \"stateTimeline\" && props.interactive === true;\n const interactiveLine = () => props.kind === \"line\" && props.interactive === true;\n const interactive = () => props.interactive === true;\n const draggable = () => interactiveMap() || interactiveTimeline();\n const labels = () => props.labels ?? {};\n const timelineFullDomain = (): StateTimelineDomain =>\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];\n\n createEffect(() => {\n if (props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n });\n\n createEffect(() => {\n if (props.kind === \"stateTimeline\" && !timelineViewportLocallyChanged) {\n setTimelineViewport(timelineFullDomain());\n }\n });\n\n const updateTimelineViewport = (update: (current: StateTimelineDomain) => StateTimelineDomain) => {\n timelineViewportLocallyChanged = true;\n setTimelineViewport(update);\n };\n\n const mapDimensions = () => {\n const viewportElement = containerRef?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n const matrix = viewportElement?.getScreenCTM?.();\n const box = viewportElement?.viewBox?.baseVal;\n if (matrix && box?.width && box.height) {\n return { width: box.width * Math.hypot(matrix.a, matrix.b), height: box.height * Math.hypot(matrix.c, matrix.d) };\n }\n const rect = viewportElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n return { width: rect.width, height: rect.height };\n }\n return dimensions();\n };\n\n const zoom = (delta: number) => {\n closeChartTooltip();\n if (interactiveMap()) {\n setMapViewport((current) => zoomMapViewport(current, delta, props.kind === \"map\" ? props.zoomFocus : undefined));\n } else if (interactiveTimeline()) {\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), delta));\n }\n };\n\n const reset = () => {\n closeChartTooltip();\n if (interactiveMap() && props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n if (interactiveTimeline()) {\n timelineViewportLocallyChanged = false;\n setTimelineViewport(timelineFullDomain());\n }\n };\n\n const handlePointerDown: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.down(event);\n if (!draggable() || event.button !== 0 || (event.target as Element).closest(\"button, a\")) {\n return;\n }\n closeChartTooltip();\n if (interactiveTimeline()) {\n timelineDrag = {\n pointerId: event.pointerId,\n x: event.clientX,\n width: Math.max(1, event.currentTarget.getBoundingClientRect().width),\n viewport: timelineViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n return;\n }\n const dimensions = mapDimensions();\n drag = {\n pointerId: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n width: dimensions.width,\n height: dimensions.height,\n viewport: mapViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n };\n\n const flushPointerMove = () => {\n if (pointerFrame !== undefined) {\n cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n }\n const sample = pendingPointer;\n pendingPointer = undefined;\n if (!sample) return;\n const start = timelineDrag ?? drag;\n if (start && Math.hypot(sample.clientX - start.x, sample.clientY - (\"y\" in start ? start.y : sample.clientY)) <= 6) return;\n const activeTimelineDrag = timelineDrag;\n if (activeTimelineDrag?.pointerId === sample.pointerId) {\n updateTimelineViewport(() =>\n panStateTimelineViewport(\n activeTimelineDrag.viewport,\n timelineFullDomain(),\n sample.clientX - activeTimelineDrag.x,\n activeTimelineDrag.width,\n ),\n );\n return;\n }\n if (!drag || drag.pointerId !== sample.pointerId) return;\n setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));\n };\n\n const handlePointerMove: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.move(event);\n if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;\n pendingPointer = { pointerId: event.pointerId, clientX: event.clientX, clientY: event.clientY };\n if (pointerFrame !== undefined) return;\n pointerFrame = requestAnimationFrame(flushPointerMove);\n };\n\n const stopDragging: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();\n if (timelineDrag?.pointerId === event.pointerId) {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n timelineDrag = undefined;\n setDragging(false);\n return;\n }\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag = undefined;\n setDragging(false);\n };\n\n const handleWheel: JSX.EventHandlerUnion<HTMLDivElement, WheelEvent> = (event) => {\n if (interactiveMap() && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n zoom(event.deltaY < 0 ? 1 : -1);\n return;\n }\n if (!interactiveTimeline()) return;\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));\n } else if (event.shiftKey) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width),\n );\n }\n };\n\n const handleKeyDown: JSX.EventHandlerUnion<HTMLDivElement, KeyboardEvent> = (event) => {\n if (inspection.key(event)) return;\n if (!draggable() || event.target !== containerRef) return;\n if (event.key === \"+\" || event.key === \"=\") {\n event.preventDefault();\n zoom(1);\n return;\n }\n if (event.key === \"-\" || event.key === \"_\") {\n event.preventDefault();\n zoom(-1);\n return;\n }\n if (event.key === \"0\" || event.key === \"Home\") {\n event.preventDefault();\n reset();\n return;\n }\n if (interactiveTimeline() && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(\n current,\n timelineFullDomain(),\n event.key === \"ArrowLeft\" ? 80 : -80,\n event.currentTarget.getBoundingClientRect().width,\n ),\n );\n return;\n }\n const delta: readonly [number, number] | undefined = {\n ArrowLeft: [40, 0],\n ArrowRight: [-40, 0],\n ArrowUp: [0, 40],\n ArrowDown: [0, -40],\n }[event.key] as readonly [number, number] | undefined;\n if (!delta) return;\n event.preventDefault();\n const dimensions = mapDimensions();\n setMapViewport((current) => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));\n };\n\n const inspection = createChartInspection({\n container: () => containerRef,\n cursor: () => props.cursor,\n tooltip: () => chartTooltipRef,\n anchor: () => lineAnchorRef,\n kind: () => props.kind,\n enabled: interactive,\n select: (selection) => props.onSelect?.(selection),\n format: (selection) => {\n if (props.tooltip) return props.tooltip(selection);\n const fields = messages().chartFields;\n const format = new Intl.NumberFormat(locale(), { maximumFractionDigits: 6 });\n return {\n title:\n selection.datum.label ??\n (selection.datum.seriesIndex !== undefined\n ? `${labels().series ?? messages().series} ${selection.datum.seriesIndex + 1}`\n : undefined),\n rows: selection.datum.values.map((field) => ({\n label:\n selection.kind === \"line\" && field.key === \"y\"\n ? (selection.datum.label ?? labels().series ?? messages().series)\n : fields({ key: field.key }),\n value:\n field.formatted ??\n (field.key === \"upperInclusive\"\n ? field.value === \"true\"\n ? messages().yes\n : messages().no\n : typeof field.value === \"number\"\n ? `${format.format(field.value)}${field.key === \"percent\" ? \"%\" : \"\"}`\n : field.value),\n })),\n };\n },\n });\n const closeChartTooltip = () => inspection.close();\n const svgMarkup = createMemo(() =>\n renderChartSvg(\n drawingProps,\n size().width,\n size().height,\n interactiveMap() ? mapViewport() : undefined,\n interactiveTimeline() ? timelineViewport() : undefined,\n ),\n );\n createEffect(() => {\n svgMarkup();\n inspection.invalidate();\n untrack(() => inspection.selectDatum(props.selected));\n });\n\n createEffect(() => inspection.selectDatum(props.selected));\n\n onCleanup(() => {\n inspection.close();\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n });\n\n onMount(() => {\n if (!containerRef) return;\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !containerRef?.contains(event.target)) closeChartTooltip();\n };\n window.addEventListener(\"pointerdown\", outside);\n const scroll = (event: Event) => {\n if (event.target instanceof Node && chartTooltipRef?.contains(event.target)) return;\n closeChartTooltip();\n };\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", closeChartTooltip);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", closeChartTooltip);\n });\n });\n\n const chartStyle = () =>\n props.style ??\n (props.kind === \"stateTimeline\"\n ? {\n height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`,\n }\n : undefined);\n\n return (\n <Show\n when={!isEmpty(props)}\n fallback={\n <div ref={containerRef} class={`k2b-chart k2b-chart__empty ${props.class ?? \"\"}`} style={chartStyle()}>\n {labels().empty ?? messages().noData}\n </div>\n }\n >\n {/* CSS fits the server-rendered SVG to the caller's box. Only changes\n to chart data/options rebuild the SVG; resizing does not. */}\n <div\n ref={containerRef}\n class={`k2b-chart ${props.class ?? \"\"}`}\n data-chart-kind={props.kind}\n data-drag={draggable() ? (dragging() ? \"active\" : \"idle\") : undefined}\n data-crosshair={!draggable() && interactiveLine() ? \"true\" : undefined}\n data-interactive={interactive() ? \"true\" : undefined}\n style={chartStyle()}\n role=\"group\"\n aria-label={\n interactiveMap()\n ? (labels().interactiveMap ?? messages().interactiveMap)\n : interactiveTimeline()\n ? (labels().interactiveTimeline ?? messages().interactiveTimeline)\n : interactiveLine()\n ? (labels().interactiveLine ?? messages().interactiveLineChart)\n : interactive()\n ? (labels().interactiveChart ?? messages().interactiveChart)\n : undefined\n }\n aria-description={interactive() ? messages().interactiveChart : undefined}\n tabIndex={interactive() ? 0 : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={stopDragging}\n onPointerCancel={stopDragging}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={closeChartTooltip}\n onWheel={handleWheel}\n onKeyDown={handleKeyDown}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={!preservesAspectRatio(props.kind) ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${size().width}px`,\n \"--k2b-chart-height\": `${size().height}px`,\n \"aspect-ratio\": `${size().width} / ${size().height}`,\n }}\n innerHTML={isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup()}\n />\n <Show when={interactive()}>\n <span ref={lineAnchorRef} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span\n id={chartTooltipId}\n ref={chartTooltipRef}\n role=\"tooltip\"\n popover=\"manual\"\n data-instant=\"true\"\n class=\"k2b-tooltip k2b-chart__tooltip\"\n />\n </Show>\n <Show when={draggable()}>\n <div class=\"k2b-chart__controls\">\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomIn ?? messages().zoomIn}\n title={`${labels().zoomIn ?? messages().zoomIn} (+)`}\n onClick={() => zoom(1)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomOut ?? messages().zoomOut}\n title={`${labels().zoomOut ?? messages().zoomOut} (-)`}\n onClick={() => zoom(-1)}\n >\n <i class=\"ti ti-minus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={\n interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)\n }\n title={`${interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)} (0)`}\n onClick={reset}\n >\n <i class=\"ti ti-focus-centered\" aria-hidden=\"true\" />\n </button>\n </div>\n </Show>\n </div>\n </Show>\n );\n};\n\nexport default Chart;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/Chart.tsx"],"sourcesContent":["import type { MapViewport } from \"@k2b/stdlib\";\nimport { charts } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps, untrack } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartDatumRef, type ChartSelection, type ChartTooltipFormatter, createChartInspection } from \"./chart-inspection\";\nimport { lineGapsSvg } from \"./chart-line-gaps\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from \"./chart-map-viewport\";\nimport {\n panStateTimelineViewport,\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n zoomStateTimelineViewport,\n} from \"./chart-state-timeline\";\nimport { responsiveChartSvg, responsiveMapSvg, selectedChartSvg } from \"./chart-svg\";\n\n/**\n * Chart — minimal Solid wrapper around `stdlib.charts`.\n *\n * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;\n * Solid's `innerHTML` is reactive, so any time a prop (signal, store\n * slice, derived value) changes, the SVG re-renders. No manual\n * subscription, no imperative DOM patching. Trade-off: every change\n * is a full SVG re-build, not a diff — fine for dashboard cadences\n * (poll, websocket, store updates). Don't use this for 60fps streaming.\n *\n * **Sizing.** The server and browser render the same logical viewBox. CSS\n * fits Cartesian plots to the container and preserves text/marker sizes;\n * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain\n * their aspect ratio. No measurement\n * or hydration redraw is needed. The caller sizes the wrapper, for example\n * `style={{ height: \"14rem\" }}`. State timelines derive their default height\n * from the row count and legend via `stateTimelineHeight()`.\n *\n * **Why so thin.** The props are a discriminated union over each\n * stdlib chart function — `kind: \"line\"` brings in exactly the params\n * `charts.line` expects, `kind: \"bar\"` brings in `charts.bar`'s, etc.\n * Options stay aligned with stdlib without renaming. Shared interactive\n * layers add bounded pan / zoom controls to maps and state timelines, plus\n * renderer-owned inspection, tooltips and optional selection for all chart kinds.\n * If stdlib gains a new option, it's automatically available at every\n * callsite.\n *\n * **Theming.** stdlib charts use `currentColor` for axes / ticks /\n * tick labels — set the wrapping element's `color` and everything\n * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS\n * custom properties; override on the parent for per-chart palettes.\n *\n * ```tsx\n * <Chart kind=\"line\" style={{ height: \"12rem\" }}\n * series={[{ data: points() }]}\n * yAxis={{ format: v => `€${v}k` }} />\n *\n * <Chart kind=\"donut\" style={{ height: \"12rem\" }} data={slices()} />\n *\n * <Chart kind=\"sparkline\" style={{ width: \"6rem\", height: \"1.5rem\" }} data={trend()} />\n *\n * <Chart kind=\"map\" style={{ height: \"16rem\" }} series={locations()} interactive />\n * ```\n */\n\n/** All chart kinds shipped by `stdlib.charts`. */\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartLabels = Partial<{\n empty: string;\n series: string;\n interactiveMap: string;\n interactiveTimeline: string;\n interactiveLine: string;\n interactiveChart: string;\n zoomIn: string;\n zoomOut: string;\n resetMap: string;\n resetTimeline: string;\n}>;\n\n/**\n * Per-kind props: `kind` discriminator + the exact options that\n * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper\n * owns those — CSS fits a stable coordinate space to the box). Solid's\n * component model handles discriminated unions natively, so callsites\n * get full type safety.\n */\nexport type ChartProps = {\n [K in ChartKind]: {\n kind: K;\n class?: string;\n style?: JSX.CSSProperties | string;\n labels?: ChartLabels;\n interactive?: boolean;\n onSelect?: (selection: ChartSelection) => void;\n /** Controlled highlight; indices belong to this exact input snapshot. */\n selected?: ChartDatumRef | null;\n tooltip?: ChartTooltipFormatter;\n /** Optional shared X cursor for line charts. */\n cursor?: ChartCursor;\n } & (K extends \"map\"\n ? {\n /** Target when zooming in from the world view. Defaults to Europe (50, 10). */\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n }\n : {}) &\n (K extends \"line\" ? { /** Largest connected X distance; positive, finite, without area/errorBand fills. */ maxGap?: number } : {}) &\n (K extends \"stateTimeline\" ? StateTimelineChartOptions : Omit<Parameters<(typeof charts)[K]>[0], \"width\" | \"height\" | \"inspect\">);\n}[ChartKind];\n\n/** Pure renderer options: component layout, events and inspection are configured elsewhere. */\nexport type ChartRenderOptions = {\n [K in ChartKind]: Omit<\n Extract<ChartProps, { kind: K }>,\n \"class\" | \"style\" | \"labels\" | \"interactive\" | \"onSelect\" | \"selected\" | \"tooltip\" | \"cursor\"\n >;\n}[ChartKind];\n\n/** Keep the fixed 28-unit bar-gauge rows inside the shared SSR/browser coordinate space. */\nexport const chartRenderHeight = (props: ChartRenderOptions): number => {\n if (props.kind === \"stateTimeline\") return stateTimelineHeight(props.rows.length, props.legend !== false);\n if (props.kind === \"barGauge\") return Math.max(280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);\n return 280;\n};\n\n/**\n * Internal — strips wrapper-only keys from props and forwards the\n * rest (plus logical size) to `charts[kind]`. The `any` is the\n * price for dispatching one function call across 14 different option\n * types; an explicit per-kind switch would type it but balloon the\n * component for no runtime benefit.\n */\nexport const renderChartSvg = (\n props: ChartProps,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n): string => {\n const {\n kind,\n class: _class,\n style: _style,\n labels: _labels,\n interactive: _interactive,\n onSelect: _onSelect,\n selected: _selected,\n tooltip: _tooltip,\n cursor: _cursor,\n zoomFocus: _zoomFocus,\n ...opts\n } = props as ChartProps & { interactive?: boolean; zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\"> };\n if (kind === \"stateTimeline\") {\n return responsiveChartSvg(\n renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n interactive: props.interactive,\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let svg = (charts[kind] as (o: unknown) => string)({\n ...(opts as any),\n ...(kind === \"map\" ? { viewport: DEFAULT_MAP_VIEWPORT } : {}),\n width,\n height,\n inspect: props.interactive === true || (props.kind === \"line\" && props.maxGap !== undefined),\n });\n if (props.kind === \"line\" && props.maxGap !== undefined) {\n if (props.area || props.errorBand) throw new Error(\"Chart maxGap does not support area or errorBand fills\");\n svg = lineGapsSvg(svg, props.maxGap, props);\n }\n if (props.kind === \"map\") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));\n return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);\n};\n\nconst preservesAspectRatio = (kind: ChartKind) => kind === \"map\" || kind === \"pie\" || kind === \"donut\" || kind === \"gauge\";\n\n/** Empty-data short-circuit. Kept per-kind because stdlib's payload\n * key differs (series vs data vs groups). We're conservative: only\n * block on truly empty inputs; partially-filled series get rendered\n * as-is and stdlib handles the gaps. */\nconst isEmpty = (props: ChartProps): boolean => {\n if (props.kind === \"line\" || props.kind === \"scatter\") {\n return !props.series?.length || props.series.every((s) => !s.data.length);\n }\n if (props.kind === \"bar\" || props.kind === \"donut\" || props.kind === \"pie\") {\n return !props.data?.length;\n }\n if (props.kind === \"histogram\" || props.kind === \"sparkline\") {\n return !props.data?.length;\n }\n if (props.kind === \"boxplot\") {\n return !props.groups?.length;\n }\n if (props.kind === \"stateTimeline\") {\n return !props.rows?.length || props.rows.every((row) => !row.intervals.length);\n }\n return false;\n};\n\nconst Chart = (props: ChartProps): JSX.Element => {\n const [, drawingProps] = splitProps(props, [\"selected\", \"onSelect\", \"tooltip\", \"cursor\"]);\n const messages = useUiMessages();\n const locale = useLocale();\n let containerRef: HTMLDivElement | undefined;\n let chartTooltipRef: HTMLSpanElement | undefined;\n let lineAnchorRef: HTMLSpanElement | undefined;\n // One deterministic coordinate space on the server and client. CSS fits the\n // SVG to its box; hydration must never replace it with measured geometry.\n const size = () => ({\n width: 480,\n height: chartRenderHeight(props),\n });\n const dimensions = () => containerRef?.getBoundingClientRect() ?? size();\n const initialMapViewport = props.kind === \"map\" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;\n const [mapViewport, setMapViewport] = createSignal<MapViewport>(initialMapViewport);\n const initialTimelineViewport =\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : ([0, 1] as StateTimelineDomain);\n const [timelineViewport, setTimelineViewport] = createSignal<StateTimelineDomain>(initialTimelineViewport);\n const [dragging, setDragging] = createSignal(false);\n const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;\n let timelineViewportLocallyChanged = false;\n let drag:\n | {\n pointerId: number;\n x: number;\n y: number;\n width: number;\n height: number;\n viewport: MapViewport;\n }\n | undefined;\n let timelineDrag:\n | {\n pointerId: number;\n x: number;\n width: number;\n viewport: StateTimelineDomain;\n }\n | undefined;\n let pointerFrame: number | undefined;\n let pendingPointer: { pointerId: number; clientX: number; clientY: number } | undefined;\n\n const interactiveMap = () => props.kind === \"map\" && props.interactive === true;\n const interactiveTimeline = () => props.kind === \"stateTimeline\" && props.interactive === true;\n const interactiveLine = () => props.kind === \"line\" && props.interactive === true;\n const interactive = () => props.interactive === true;\n const draggable = () => interactiveMap() || interactiveTimeline();\n const labels = () => props.labels ?? {};\n const timelineFullDomain = (): StateTimelineDomain =>\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];\n\n createEffect(() => {\n if (props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n });\n\n createEffect(() => {\n if (props.kind === \"stateTimeline\" && !timelineViewportLocallyChanged) {\n setTimelineViewport(timelineFullDomain());\n }\n });\n\n const updateTimelineViewport = (update: (current: StateTimelineDomain) => StateTimelineDomain) => {\n timelineViewportLocallyChanged = true;\n setTimelineViewport(update);\n };\n\n const mapDimensions = () => {\n const viewportElement = containerRef?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n const matrix = viewportElement?.getScreenCTM?.();\n const box = viewportElement?.viewBox?.baseVal;\n if (matrix && box?.width && box.height) {\n return { width: box.width * Math.hypot(matrix.a, matrix.b), height: box.height * Math.hypot(matrix.c, matrix.d) };\n }\n const rect = viewportElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n return { width: rect.width, height: rect.height };\n }\n return dimensions();\n };\n\n const zoom = (delta: number) => {\n closeChartTooltip();\n if (interactiveMap()) {\n setMapViewport((current) => zoomMapViewport(current, delta, props.kind === \"map\" ? props.zoomFocus : undefined));\n } else if (interactiveTimeline()) {\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), delta));\n }\n };\n\n const reset = () => {\n closeChartTooltip();\n if (interactiveMap() && props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n if (interactiveTimeline()) {\n timelineViewportLocallyChanged = false;\n setTimelineViewport(timelineFullDomain());\n }\n };\n\n const handlePointerDown: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.down(event);\n if (!draggable() || event.button !== 0 || (event.target as Element).closest(\"button, a\")) {\n return;\n }\n closeChartTooltip();\n if (interactiveTimeline()) {\n timelineDrag = {\n pointerId: event.pointerId,\n x: event.clientX,\n width: Math.max(1, event.currentTarget.getBoundingClientRect().width),\n viewport: timelineViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n return;\n }\n const dimensions = mapDimensions();\n drag = {\n pointerId: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n width: dimensions.width,\n height: dimensions.height,\n viewport: mapViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n };\n\n const flushPointerMove = () => {\n if (pointerFrame !== undefined) {\n cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n }\n const sample = pendingPointer;\n pendingPointer = undefined;\n if (!sample) return;\n const start = timelineDrag ?? drag;\n if (start && Math.hypot(sample.clientX - start.x, sample.clientY - (\"y\" in start ? start.y : sample.clientY)) <= 6) return;\n const activeTimelineDrag = timelineDrag;\n if (activeTimelineDrag?.pointerId === sample.pointerId) {\n updateTimelineViewport(() =>\n panStateTimelineViewport(\n activeTimelineDrag.viewport,\n timelineFullDomain(),\n sample.clientX - activeTimelineDrag.x,\n activeTimelineDrag.width,\n ),\n );\n return;\n }\n if (!drag || drag.pointerId !== sample.pointerId) return;\n setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));\n };\n\n const handlePointerMove: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.move(event);\n if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;\n pendingPointer = { pointerId: event.pointerId, clientX: event.clientX, clientY: event.clientY };\n if (pointerFrame !== undefined) return;\n pointerFrame = requestAnimationFrame(flushPointerMove);\n };\n\n const stopDragging: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();\n if (timelineDrag?.pointerId === event.pointerId) {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n timelineDrag = undefined;\n setDragging(false);\n return;\n }\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag = undefined;\n setDragging(false);\n };\n\n const handleWheel: JSX.EventHandlerUnion<HTMLDivElement, WheelEvent> = (event) => {\n if (interactiveMap() && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n zoom(event.deltaY < 0 ? 1 : -1);\n return;\n }\n if (!interactiveTimeline()) return;\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));\n } else if (event.shiftKey) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width),\n );\n }\n };\n\n const handleKeyDown: JSX.EventHandlerUnion<HTMLDivElement, KeyboardEvent> = (event) => {\n if (inspection.key(event)) return;\n if (!draggable() || event.target !== containerRef) return;\n if (event.key === \"+\" || event.key === \"=\") {\n event.preventDefault();\n zoom(1);\n return;\n }\n if (event.key === \"-\" || event.key === \"_\") {\n event.preventDefault();\n zoom(-1);\n return;\n }\n if (event.key === \"0\" || event.key === \"Home\") {\n event.preventDefault();\n reset();\n return;\n }\n if (interactiveTimeline() && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(\n current,\n timelineFullDomain(),\n event.key === \"ArrowLeft\" ? 80 : -80,\n event.currentTarget.getBoundingClientRect().width,\n ),\n );\n return;\n }\n const delta: readonly [number, number] | undefined = {\n ArrowLeft: [40, 0],\n ArrowRight: [-40, 0],\n ArrowUp: [0, 40],\n ArrowDown: [0, -40],\n }[event.key] as readonly [number, number] | undefined;\n if (!delta) return;\n event.preventDefault();\n const dimensions = mapDimensions();\n setMapViewport((current) => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));\n };\n\n const inspection = createChartInspection({\n container: () => containerRef,\n cursor: () => props.cursor,\n tooltip: () => chartTooltipRef,\n anchor: () => lineAnchorRef,\n kind: () => props.kind,\n enabled: interactive,\n select: (selection) => props.onSelect?.(selection),\n format: (selection) => {\n if (props.tooltip) return props.tooltip(selection);\n const fields = messages().chartFields;\n const format = new Intl.NumberFormat(locale(), { maximumFractionDigits: 6 });\n return {\n title:\n selection.datum.label ??\n (selection.datum.seriesIndex !== undefined\n ? `${labels().series ?? messages().series} ${selection.datum.seriesIndex + 1}`\n : undefined),\n rows: selection.datum.values.map((field) => ({\n label:\n selection.kind === \"line\" && field.key === \"y\"\n ? (selection.datum.label ?? labels().series ?? messages().series)\n : fields({ key: field.key }),\n value:\n field.formatted ??\n (field.key === \"upperInclusive\"\n ? field.value === \"true\"\n ? messages().yes\n : messages().no\n : typeof field.value === \"number\"\n ? `${format.format(field.value)}${field.key === \"percent\" ? \"%\" : \"\"}`\n : field.value),\n })),\n };\n },\n });\n const closeChartTooltip = () => inspection.close();\n const svgMarkup = createMemo(() =>\n renderChartSvg(\n drawingProps,\n size().width,\n size().height,\n interactiveMap() ? mapViewport() : undefined,\n interactiveTimeline() ? timelineViewport() : undefined,\n ),\n );\n createEffect(() => {\n svgMarkup();\n inspection.invalidate();\n untrack(() => inspection.selectDatum(props.selected));\n });\n\n createEffect(() => inspection.selectDatum(props.selected));\n\n onCleanup(() => {\n inspection.close();\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n });\n\n onMount(() => {\n if (!containerRef) return;\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !containerRef?.contains(event.target)) closeChartTooltip();\n };\n window.addEventListener(\"pointerdown\", outside);\n const scroll = (event: Event) => {\n if (event.target instanceof Node && chartTooltipRef?.contains(event.target)) return;\n closeChartTooltip();\n };\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", closeChartTooltip);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", closeChartTooltip);\n });\n });\n\n const chartStyle = () =>\n props.style ??\n (props.kind === \"stateTimeline\"\n ? {\n height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`,\n }\n : undefined);\n\n return (\n <Show\n when={!isEmpty(props)}\n fallback={\n <div ref={containerRef} class={`k2b-chart k2b-chart__empty ${props.class ?? \"\"}`} style={chartStyle()}>\n {labels().empty ?? messages().noData}\n </div>\n }\n >\n {/* CSS fits the server-rendered SVG to the caller's box. Only changes\n to chart data/options rebuild the SVG; resizing does not. */}\n <div\n ref={containerRef}\n class={`k2b-chart ${props.class ?? \"\"}`}\n data-chart-kind={props.kind}\n data-drag={draggable() ? (dragging() ? \"active\" : \"idle\") : undefined}\n data-crosshair={!draggable() && interactiveLine() ? \"true\" : undefined}\n data-interactive={interactive() ? \"true\" : undefined}\n style={chartStyle()}\n role=\"group\"\n aria-label={\n interactiveMap()\n ? (labels().interactiveMap ?? messages().interactiveMap)\n : interactiveTimeline()\n ? (labels().interactiveTimeline ?? messages().interactiveTimeline)\n : interactiveLine()\n ? (labels().interactiveLine ?? messages().interactiveLineChart)\n : interactive()\n ? (labels().interactiveChart ?? messages().interactiveChart)\n : undefined\n }\n aria-description={interactive() ? messages().interactiveChart : undefined}\n tabIndex={interactive() ? 0 : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={stopDragging}\n onPointerCancel={stopDragging}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={closeChartTooltip}\n onWheel={handleWheel}\n onKeyDown={handleKeyDown}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={!preservesAspectRatio(props.kind) ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${size().width}px`,\n \"--k2b-chart-height\": `${size().height}px`,\n \"aspect-ratio\": `${size().width} / ${size().height}`,\n }}\n innerHTML={isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup()}\n />\n <Show when={interactive()}>\n <span ref={lineAnchorRef} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span\n id={chartTooltipId}\n ref={chartTooltipRef}\n role=\"tooltip\"\n popover=\"manual\"\n data-instant=\"true\"\n class=\"k2b-tooltip k2b-chart__tooltip\"\n />\n </Show>\n <Show when={draggable()}>\n <div class=\"k2b-chart__controls\">\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomIn ?? messages().zoomIn}\n title={`${labels().zoomIn ?? messages().zoomIn} (+)`}\n onClick={() => zoom(1)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomOut ?? messages().zoomOut}\n title={`${labels().zoomOut ?? messages().zoomOut} (-)`}\n onClick={() => zoom(-1)}\n >\n <i class=\"ti ti-minus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={\n interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)\n }\n title={`${interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)} (0)`}\n onClick={reset}\n >\n <i class=\"ti ti-focus-centered\" aria-hidden=\"true\" />\n </button>\n </div>\n </Show>\n </div>\n </Show>\n );\n};\n\nexport default Chart;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createMemo","createSignal","createUniqueId","Show","Button","CopyButton","SelectChip","useLocale","useUiMessages","DescriptionList","Paper","ChartSnapshotView","validateChartExplorerData","DataTable","tsvCell","value","test","replaceAll","ChartExplorer","props","messages","locale","id","data","copyFailed","setCopyFailed","localSelection","setLocalSelection","localView","setLocalView","defaultView","localSort","setLocalSort","defaultSort","view","sort","undefined","setView","onViewChange","setSort","onSortChange","rowsByKey","Map","rows","map","row","key","rawSelected","selectedKey","selected","has","selectedRow","get","select","onSelectedKeyChange","columns","length","some","column","Set","size","Error","result","order","find","c","sortValue","collator","Intl","Collator","numeric","a","b","av","bv","comparison","compare","String","direction","copyText","label","join","_$ssr","_tmpl$4","_$escape","class","_$ssrAttribute","title","_$createComponent","when","description","children","_tmpl$","text","chartCopyData","iconOnly","variant","disabled","onCopyError","onCopied","onValueChange","aria-label","chartView","options","chartDiagram","chartData","_tmpl$2","chartCopyFailed","_$ssrStyleProperty","height","fallback","_tmpl$5","noData","header","align","sortable","Boolean","ariaLabelledBy","getRowId","selectedRowId","fillHeight","surface","onRowClick","renderCell","col","render","custom","cell","onClick","renderHeader","_tmpl$6","cursor","snapshot","chart","onSelect","style","renderDetails","_tmpl$3","_tmpl$8","chartSelectedDatum","clearSelection","_tmpl$7","items","term"],"sources":["content/ChartExplorer.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { CopyButton } from \"../actions/CopyButton\";\nimport { SelectChip } from \"../inputs/SelectChip\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { DescriptionList } from \"../surfaces/DescriptionList\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { ChartSnapshotView } from \"./ChartSnapshotView\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartExplorerData, type ChartExplorerRow, validateChartExplorerData } from \"./chart-explorer\";\nimport DataTable, { type DataTableSort } from \"./DataTable\";\n\nexport type ChartExplorerColumn<T> = {\n id: string;\n label: string;\n value: (row: T) => string;\n /** Optional table cell presentation; value remains the plain text used for copy/details. */\n render?: (row: T) => JSX.Element;\n /** Explicit comparable value. Omit to leave the column unsortable. */\n sortValue?: (row: T) => string | number | null;\n align?: \"left\" | \"center\" | \"right\";\n};\nexport type ChartExplorerProps<T extends ChartExplorerRow> = {\n cursor?: ChartCursor;\n title: string;\n description?: JSX.Element;\n data: ChartExplorerData<T>;\n columns: readonly ChartExplorerColumn<T>[];\n view?: \"chart\" | \"table\";\n defaultView?: \"chart\" | \"table\";\n onViewChange?: (view: \"chart\" | \"table\") => void;\n sort?: DataTableSort | null;\n defaultSort?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n selectedKey?: string | null;\n onSelectedKeyChange?: (key: string | null) => void;\n /** false hides the complete local detail area for a shared selection panel. */\n renderDetails?: false | ((row: T) => JSX.Element);\n height?: string;\n class?: string;\n};\n\nconst tsvCell = (value: string) => (/[\\t\\r\\n\"]/.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value);\n\nexport function ChartExplorer<T extends ChartExplorerRow>(props: ChartExplorerProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const id = `k2b-chart-explorer-${createUniqueId()}`;\n const data = () => props.data;\n const [copyFailed, setCopyFailed] = createSignal(false);\n const [localSelection, setLocalSelection] = createSignal<string | null>(null);\n const [localView, setLocalView] = createSignal(props.defaultView ?? \"chart\");\n const [localSort, setLocalSort] = createSignal<DataTableSort | null>(props.defaultSort ?? null);\n const view = () => props.view ?? localView();\n const sort = () => (props.sort === undefined ? localSort() : props.sort);\n const setView = (value: \"chart\" | \"table\") => {\n if (props.view === undefined) setLocalView(value);\n props.onViewChange?.(value);\n };\n const setSort = (value: DataTableSort | null) => {\n if (props.sort === undefined) setLocalSort(value);\n props.onSortChange?.(value);\n };\n const rowsByKey = createMemo(() => new Map(data().rows.map((row) => [row.key, row])));\n const rawSelected = () => (props.selectedKey !== undefined ? props.selectedKey : localSelection());\n const selected = () => (rowsByKey().has(rawSelected() ?? \"\") ? rawSelected() : null);\n const selectedRow = () => rowsByKey().get(selected() ?? \"\");\n const select = (key: string | null) => {\n if (key !== null && !rowsByKey().has(key)) return;\n setLocalSelection(key);\n props.onSelectedKeyChange?.(key);\n };\n if (\n !props.columns.length ||\n props.columns.some((column) => !column.id) ||\n new Set(props.columns.map((column) => column.id)).size !== props.columns.length\n ) {\n throw new Error(\"Chart columns require unique nonempty IDs and at least one column\");\n }\n validateChartExplorerData(data());\n createEffect(() => validateChartExplorerData(data()));\n createEffect(() => {\n if (props.selectedKey === undefined && rawSelected() !== null && selected() === null) select(null);\n });\n const rows = createMemo(() => {\n const result = [...data().rows];\n const order = sort();\n const column = props.columns.find((c) => c.id === order?.key);\n const value = column?.sortValue;\n if (!order || !value) return result;\n const collator = new Intl.Collator(locale(), { numeric: true });\n return result.sort((a, b) => {\n const av = value(a),\n bv = value(b);\n if (av === null) return bv === null ? 0 : 1;\n if (bv === null) return -1;\n const comparison = typeof av === \"number\" && typeof bv === \"number\" ? av - bv : collator.compare(String(av), String(bv));\n return order.direction === \"asc\" ? comparison : -comparison;\n });\n });\n const copyText = () =>\n [\n props.columns.map((c) => tsvCell(c.label)).join(\"\\t\"),\n ...rows().map((row) => props.columns.map((c) => tsvCell(c.value(row))).join(\"\\t\")),\n ].join(\"\\n\");\n return (\n <section class={`k2b-chart-explorer ${props.class ?? \"\"}`} aria-labelledby={id}>\n <header class=\"k2b-chart-explorer__header\">\n <div>\n <h3 id={id}>{props.title}</h3>\n <Show when={props.description}>\n <div>{props.description}</div>\n </Show>\n </div>\n <div class=\"k2b-chart-explorer__actions\">\n <CopyButton\n text={copyText()}\n label={messages().chartCopyData}\n iconOnly\n size=\"sm\"\n variant=\"ghost\"\n disabled={!rows().length}\n onCopyError={() => setCopyFailed(true)}\n onCopied={() => setCopyFailed(false)}\n />\n <SelectChip<\"chart\" | \"table\">\n value={view()}\n onValueChange={setView}\n aria-label={messages().chartView}\n options={[\n { value: \"chart\", label: messages().chartDiagram },\n { value: \"table\", label: messages().chartData },\n ]}\n />\n </div>\n </header>\n <Show when={copyFailed()}>\n <span role=\"alert\">{messages().chartCopyFailed}</span>\n </Show>\n <div class=\"k2b-chart-explorer__viewport\" style={{ height: props.height ?? \"18rem\" }}>\n <Show when={data().rows.length > 0} fallback={<div class=\"k2b-chart__empty\">{messages().noData}</div>}>\n <Show\n when={view() === \"chart\"}\n fallback={\n <DataTable\n rows={rows()}\n columns={props.columns.map((column) => ({\n id: column.id,\n header: column.label,\n value: column.value,\n align: column.align,\n sortable: Boolean(column.sortValue),\n }))}\n ariaLabelledBy={id}\n getRowId={(row) => row.key}\n selectedRowId={selected()}\n sort={sort()}\n fillHeight\n surface=\"paper\"\n onRowClick={(row) => select(row.key)}\n renderCell={({ row, col, value, render }) => {\n const custom = props.columns.find((column) => column.id === col.id)?.render;\n const cell = () => (custom ? custom(row) : render(value));\n return col.id === props.columns[0]?.id ? (\n <Button variant=\"text\" size=\"sm\" onClick={() => select(row.key)}>\n {cell()}\n </Button>\n ) : (\n cell()\n );\n }}\n renderHeader={({ col, render }) =>\n col.sortable ? (\n <Button\n variant=\"text\"\n size=\"sm\"\n onClick={() =>\n setSort({\n key: col.id,\n direction: sort()?.key === col.id && sort()?.direction === \"asc\" ? \"desc\" : \"asc\",\n })\n }\n >\n {props.columns.find((column) => column.id === col.id)?.label}{\" \"}\n <span class=\"k2b-chart-explorer__sort-icon\" aria-hidden=\"true\">\n {sort()?.key === col.id ? (sort()?.direction === \"asc\" ? \"↑\" : \"↓\") : \"↕\"}\n </span>\n </Button>\n ) : (\n render()\n )\n }\n />\n }\n >\n <ChartSnapshotView\n cursor={props.cursor}\n snapshot={data().chart}\n selectedKey={selected()}\n onSelect={select}\n style={{ height: \"100%\" }}\n />\n </Show>\n </Show>\n </div>\n <Show when={props.renderDetails !== false}>\n <div class=\"k2b-chart-explorer__details\" aria-live=\"polite\">\n <Show when={selectedRow()}>\n {(row) => (\n <Paper class=\"k2b-chart-explorer__detail-paper\">\n <div class=\"k2b-chart-explorer__detail-header\">\n <span>{messages().chartSelectedDatum}</span>\n <Button\n variant=\"text\"\n size=\"sm\"\n aria-label={messages().clearSelection}\n title={messages().clearSelection}\n onClick={() => select(null)}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n </div>\n {props.renderDetails ? (\n props.renderDetails(row())\n ) : (\n <DescriptionList\n columns={3}\n size=\"sm\"\n items={props.columns.map((column) => ({\n term: column.label,\n description: column.value(row()),\n }))}\n />\n )}\n </Paper>\n )}\n </Show>\n </div>\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/ChartExplorer.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { CopyButton } from \"../actions/CopyButton\";\nimport { SelectChip } from \"../inputs/SelectChip\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { DescriptionList } from \"../surfaces/DescriptionList\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { ChartSnapshotView } from \"./ChartSnapshotView\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartExplorerData, type ChartExplorerRow, validateChartExplorerData } from \"./chart-explorer\";\nimport DataTable, { type DataTableSort } from \"./DataTable\";\n\nexport type ChartExplorerColumn<T> = {\n id: string;\n label: string;\n value: (row: T) => string;\n /** Optional table cell presentation; value remains the plain text used for copy/details. */\n render?: (row: T) => JSX.Element;\n /** Explicit comparable value. Omit to leave the column unsortable. */\n sortValue?: (row: T) => string | number | null;\n align?: \"left\" | \"center\" | \"right\";\n};\nexport type ChartExplorerProps<T extends ChartExplorerRow> = {\n cursor?: ChartCursor;\n title: string;\n description?: JSX.Element;\n data: ChartExplorerData<T>;\n columns: readonly ChartExplorerColumn<T>[];\n view?: \"chart\" | \"table\";\n defaultView?: \"chart\" | \"table\";\n onViewChange?: (view: \"chart\" | \"table\") => void;\n sort?: DataTableSort | null;\n defaultSort?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n selectedKey?: string | null;\n onSelectedKeyChange?: (key: string | null) => void;\n /** false hides the complete local detail area for a shared selection panel. */\n renderDetails?: false | ((row: T) => JSX.Element);\n height?: string;\n class?: string;\n};\n\nconst tsvCell = (value: string) => (/[\\t\\r\\n\"]/.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value);\n\nexport function ChartExplorer<T extends ChartExplorerRow>(props: ChartExplorerProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const id = `k2b-chart-explorer-${createUniqueId()}`;\n const data = () => props.data;\n const [copyFailed, setCopyFailed] = createSignal(false);\n const [localSelection, setLocalSelection] = createSignal<string | null>(null);\n const [localView, setLocalView] = createSignal(props.defaultView ?? \"chart\");\n const [localSort, setLocalSort] = createSignal<DataTableSort | null>(props.defaultSort ?? null);\n const view = () => props.view ?? localView();\n const sort = () => (props.sort === undefined ? localSort() : props.sort);\n const setView = (value: \"chart\" | \"table\") => {\n if (props.view === undefined) setLocalView(value);\n props.onViewChange?.(value);\n };\n const setSort = (value: DataTableSort | null) => {\n if (props.sort === undefined) setLocalSort(value);\n props.onSortChange?.(value);\n };\n const rowsByKey = createMemo(() => new Map(data().rows.map((row) => [row.key, row])));\n const rawSelected = () => (props.selectedKey !== undefined ? props.selectedKey : localSelection());\n const selected = () => (rowsByKey().has(rawSelected() ?? \"\") ? rawSelected() : null);\n const selectedRow = () => rowsByKey().get(selected() ?? \"\");\n const select = (key: string | null) => {\n if (key !== null && !rowsByKey().has(key)) return;\n setLocalSelection(key);\n props.onSelectedKeyChange?.(key);\n };\n if (\n !props.columns.length ||\n props.columns.some((column) => !column.id) ||\n new Set(props.columns.map((column) => column.id)).size !== props.columns.length\n ) {\n throw new Error(\"Chart columns require unique nonempty IDs and at least one column\");\n }\n validateChartExplorerData(data());\n createEffect(() => validateChartExplorerData(data()));\n createEffect(() => {\n if (props.selectedKey === undefined && rawSelected() !== null && selected() === null) select(null);\n });\n const rows = createMemo(() => {\n const result = [...data().rows];\n const order = sort();\n const column = props.columns.find((c) => c.id === order?.key);\n const value = column?.sortValue;\n if (!order || !value) return result;\n const collator = new Intl.Collator(locale(), { numeric: true });\n return result.sort((a, b) => {\n const av = value(a),\n bv = value(b);\n if (av === null) return bv === null ? 0 : 1;\n if (bv === null) return -1;\n const comparison = typeof av === \"number\" && typeof bv === \"number\" ? av - bv : collator.compare(String(av), String(bv));\n return order.direction === \"asc\" ? comparison : -comparison;\n });\n });\n const copyText = () =>\n [\n props.columns.map((c) => tsvCell(c.label)).join(\"\\t\"),\n ...rows().map((row) => props.columns.map((c) => tsvCell(c.value(row))).join(\"\\t\")),\n ].join(\"\\n\");\n return (\n <section class={`k2b-chart-explorer ${props.class ?? \"\"}`} aria-labelledby={id}>\n <header class=\"k2b-chart-explorer__header\">\n <div>\n <h3 id={id}>{props.title}</h3>\n <Show when={props.description}>\n <div>{props.description}</div>\n </Show>\n </div>\n <div class=\"k2b-chart-explorer__actions\">\n <CopyButton\n text={copyText()}\n label={messages().chartCopyData}\n iconOnly\n size=\"sm\"\n variant=\"ghost\"\n disabled={!rows().length}\n onCopyError={() => setCopyFailed(true)}\n onCopied={() => setCopyFailed(false)}\n />\n <SelectChip<\"chart\" | \"table\">\n value={view()}\n onValueChange={setView}\n aria-label={messages().chartView}\n options={[\n { value: \"chart\", label: messages().chartDiagram },\n { value: \"table\", label: messages().chartData },\n ]}\n />\n </div>\n </header>\n <Show when={copyFailed()}>\n <span role=\"alert\">{messages().chartCopyFailed}</span>\n </Show>\n <div class=\"k2b-chart-explorer__viewport\" style={{ height: props.height ?? \"18rem\" }}>\n <Show when={data().rows.length > 0} fallback={<div class=\"k2b-chart__empty\">{messages().noData}</div>}>\n <Show\n when={view() === \"chart\"}\n fallback={\n <DataTable\n rows={rows()}\n columns={props.columns.map((column) => ({\n id: column.id,\n header: column.label,\n value: column.value,\n align: column.align,\n sortable: Boolean(column.sortValue),\n }))}\n ariaLabelledBy={id}\n getRowId={(row) => row.key}\n selectedRowId={selected()}\n sort={sort()}\n fillHeight\n surface=\"paper\"\n onRowClick={(row) => select(row.key)}\n renderCell={({ row, col, value, render }) => {\n const custom = props.columns.find((column) => column.id === col.id)?.render;\n const cell = () => (custom ? custom(row) : render(value));\n return col.id === props.columns[0]?.id ? (\n <Button variant=\"text\" size=\"sm\" onClick={() => select(row.key)}>\n {cell()}\n </Button>\n ) : (\n cell()\n );\n }}\n renderHeader={({ col, render }) =>\n col.sortable ? (\n <Button\n variant=\"text\"\n size=\"sm\"\n onClick={() =>\n setSort({\n key: col.id,\n direction: sort()?.key === col.id && sort()?.direction === \"asc\" ? \"desc\" : \"asc\",\n })\n }\n >\n {props.columns.find((column) => column.id === col.id)?.label}{\" \"}\n <span class=\"k2b-chart-explorer__sort-icon\" aria-hidden=\"true\">\n {sort()?.key === col.id ? (sort()?.direction === \"asc\" ? \"↑\" : \"↓\") : \"↕\"}\n </span>\n </Button>\n ) : (\n render()\n )\n }\n />\n }\n >\n <ChartSnapshotView\n cursor={props.cursor}\n snapshot={data().chart}\n selectedKey={selected()}\n onSelect={select}\n style={{ height: \"100%\" }}\n />\n </Show>\n </Show>\n </div>\n <Show when={props.renderDetails !== false}>\n <div class=\"k2b-chart-explorer__details\" aria-live=\"polite\">\n <Show when={selectedRow()}>\n {(row) => (\n <Paper class=\"k2b-chart-explorer__detail-paper\">\n <div class=\"k2b-chart-explorer__detail-header\">\n <span>{messages().chartSelectedDatum}</span>\n <Button\n variant=\"text\"\n size=\"sm\"\n aria-label={messages().clearSelection}\n title={messages().clearSelection}\n onClick={() => select(null)}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n </div>\n {props.renderDetails ? (\n props.renderDetails(row())\n ) : (\n <DescriptionList\n columns={3}\n size=\"sm\"\n items={props.columns.map((column) => ({\n term: column.label,\n description: column.value(row()),\n }))}\n />\n )}\n </Paper>\n )}\n </Show>\n </div>\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,14 +1,15 @@
1
+ import { memo as _$memo } from "solid-js/web";
1
2
  import { createComponent as _$createComponent } from "solid-js/web";
2
3
  import { ssr as _$ssr } from "solid-js/web";
3
4
  import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
4
5
  import { escape as _$escape } from "solid-js/web";
5
6
  var _tmpl$ = "<i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\"></i>",
6
- _tmpl$2 = ["<span class=\"k2b-sr-only\">", " \xB7 ", ": ", "</span>"],
7
+ _tmpl$2 = ["<span class=\"k2b-sr-only\">", " · ", ": ", "</span>"],
7
8
  _tmpl$3 = ["<div class=\"k2b-chart-explorer__header\"><strong>", "</strong><div class=\"k2b-chart-explorer__actions\"><span class=\"k2b-chart-group-controls__loading\"", " role=\"status\"", ">", "</span>", "</div></div>"],
8
9
  _tmpl$4 = "<i class=\"ti ti-x\" aria-hidden=\"true\"></i>",
9
10
  _tmpl$5 = ["<div class=\"k2b-chart-explorer__actions\" aria-live=\"polite\">", "", "</div>"],
10
- _tmpl$6 = "<span aria-hidden=\"true\">\u25CF</span>",
11
- _tmpl$7 = "<span aria-hidden=\"true\">\u25CB</span>";
11
+ _tmpl$6 = "<span aria-hidden=\"true\">●</span>",
12
+ _tmpl$7 = "<span aria-hidden=\"true\">○</span>";
12
13
  import { Show } from "solid-js";
13
14
  import { Button } from "../actions/Button";
14
15
  import { useUiMessages } from "../intl/messages";
@@ -30,7 +31,7 @@ export function ChartExplorerControls(props) {
30
31
  }
31
32
  })), _$escape(_$createComponent(Show, {
32
33
  get when() {
33
- return props.steps?.length && props.explorer.snapshot().request.step !== undefined;
34
+ return _$memo(() => !!props.steps?.length)() && props.explorer.snapshot().request.step !== undefined;
34
35
  },
35
36
  get children() {
36
37
  return [_$createComponent(Show, {
@@ -1 +1 @@
1
- {"version":3,"names":["Show","Button","useUiMessages","Paper","StatusBadge","ChartFilterControls","ChartExplorerControls","props","messages","label","key","steps","find","step","_$createComponent","children","_$ssr","_tmpl$3","_$escape","title","_$ssrAttribute","explorer","loading","undefined","chartPreviousData","snapshot","request","when","_tmpl$","_tmpl$2","length","desired","referenceStep","reference","size","variant","onClick","clearReference","aria-label","chartRemoveComparison","chartReference","_tmpl$4","disabled","error","pinReference","chartPinReference","displayedRequest","series","dimensionLabel","failed","onRequest","setRequest","onRetry","retry","_tmpl$5","tone","icon","_tmpl$6","chartCurrent","_tmpl$7"],"sources":["content/ChartExplorerControls.tsx"],"sourcesContent":["import { Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { StatusBadge } from \"../surfaces/StatusBadge\";\nimport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nimport type { ChartExplorerCharts, ChartExplorerController } from \"./chart-explorer\";\n\nexport type ChartExplorerControlsProps<C extends ChartExplorerCharts> = {\n explorer: ChartExplorerController<C>;\n title: string;\n steps?: ChartFilterControlsProps[\"steps\"];\n series?: ChartFilterControlsProps[\"series\"];\n dimensionLabel?: string;\n};\n\nexport function ChartExplorerControls<C extends ChartExplorerCharts>(props: ChartExplorerControlsProps<C>) {\n const messages = useUiMessages();\n const label = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <Paper class=\"k2b-chart-group-controls\">\n <div class=\"k2b-chart-explorer__header\">\n <strong>{props.title}</strong>\n <div class=\"k2b-chart-explorer__actions\">\n <span\n class=\"k2b-chart-group-controls__loading\"\n data-loading={props.explorer.loading() || undefined}\n role=\"status\"\n title={\n props.explorer.loading()\n ? `${messages().loading} · ${messages().chartPreviousData}: ${label(props.explorer.snapshot().request.step)}`\n : undefined\n }\n >\n <Show when={props.explorer.loading()}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">\n {messages().loading} · {messages().chartPreviousData}: {label(props.explorer.snapshot().request.step)}\n </span>\n </Show>\n </span>\n <Show when={props.steps?.length && props.explorer.snapshot().request.step !== undefined}>\n <Show when={props.explorer.desired().referenceStep}>\n {(reference) => (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => void props.explorer.clearReference()}\n aria-label={`${messages().chartRemoveComparison}: ${label(reference())}`}\n >\n {messages().chartReference}: {label(reference())} <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n )}\n </Show>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={\n props.explorer.loading() ||\n props.explorer.error() !== null ||\n props.explorer.desired().referenceStep === props.explorer.snapshot().request.step\n }\n onClick={() => void props.explorer.pinReference()}\n >\n {messages().chartPinReference}\n </Button>\n </Show>\n </div>\n </div>\n <ChartFilterControls\n request={props.explorer.desired()}\n displayedRequest={props.explorer.snapshot().request}\n steps={props.steps}\n series={props.series}\n dimensionLabel={props.dimensionLabel}\n failed={props.explorer.error() !== null}\n onRequest={(request) => void props.explorer.setRequest(request)}\n onRetry={() => void props.explorer.retry()}\n />\n <Show when={props.explorer.snapshot().request.referenceStep}>\n {(reference) => (\n <div class=\"k2b-chart-explorer__actions\" aria-live=\"polite\">\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">●</span> {messages().chartCurrent}: {label(props.explorer.snapshot().request.step)}\n </>\n }\n />\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">○</span> {messages().chartReference}: {label(reference())}\n </>\n }\n />\n </div>\n )}\n </Show>\n </Paper>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/ChartExplorerControls.tsx"],"sourcesContent":["import { Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { StatusBadge } from \"../surfaces/StatusBadge\";\nimport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nimport type { ChartExplorerCharts, ChartExplorerController } from \"./chart-explorer\";\n\nexport type ChartExplorerControlsProps<C extends ChartExplorerCharts> = {\n explorer: ChartExplorerController<C>;\n title: string;\n steps?: ChartFilterControlsProps[\"steps\"];\n series?: ChartFilterControlsProps[\"series\"];\n dimensionLabel?: string;\n};\n\nexport function ChartExplorerControls<C extends ChartExplorerCharts>(props: ChartExplorerControlsProps<C>) {\n const messages = useUiMessages();\n const label = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <Paper class=\"k2b-chart-group-controls\">\n <div class=\"k2b-chart-explorer__header\">\n <strong>{props.title}</strong>\n <div class=\"k2b-chart-explorer__actions\">\n <span\n class=\"k2b-chart-group-controls__loading\"\n data-loading={props.explorer.loading() || undefined}\n role=\"status\"\n title={\n props.explorer.loading()\n ? `${messages().loading} · ${messages().chartPreviousData}: ${label(props.explorer.snapshot().request.step)}`\n : undefined\n }\n >\n <Show when={props.explorer.loading()}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">\n {messages().loading} · {messages().chartPreviousData}: {label(props.explorer.snapshot().request.step)}\n </span>\n </Show>\n </span>\n <Show when={props.steps?.length && props.explorer.snapshot().request.step !== undefined}>\n <Show when={props.explorer.desired().referenceStep}>\n {(reference) => (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => void props.explorer.clearReference()}\n aria-label={`${messages().chartRemoveComparison}: ${label(reference())}`}\n >\n {messages().chartReference}: {label(reference())} <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n )}\n </Show>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={\n props.explorer.loading() ||\n props.explorer.error() !== null ||\n props.explorer.desired().referenceStep === props.explorer.snapshot().request.step\n }\n onClick={() => void props.explorer.pinReference()}\n >\n {messages().chartPinReference}\n </Button>\n </Show>\n </div>\n </div>\n <ChartFilterControls\n request={props.explorer.desired()}\n displayedRequest={props.explorer.snapshot().request}\n steps={props.steps}\n series={props.series}\n dimensionLabel={props.dimensionLabel}\n failed={props.explorer.error() !== null}\n onRequest={(request) => void props.explorer.setRequest(request)}\n onRetry={() => void props.explorer.retry()}\n />\n <Show when={props.explorer.snapshot().request.referenceStep}>\n {(reference) => (\n <div class=\"k2b-chart-explorer__actions\" aria-live=\"polite\">\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">●</span> {messages().chartCurrent}: {label(props.explorer.snapshot().request.step)}\n </>\n }\n />\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">○</span> {messages().chartReference}: {label(reference())}\n </>\n }\n />\n </div>\n )}\n </Show>\n </Paper>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import { ssr as _$ssr } from "solid-js/web";
2
2
  import { createComponent as _$createComponent } from "solid-js/web";
3
+ import { memo as _$memo } from "solid-js/web";
3
4
  import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
4
5
  import { escape as _$escape } from "solid-js/web";
5
6
  var _tmpl$ = ["<div class=\"k2b-chart-explorer__dimension\" role=\"group\"", ">", "<output class=\"k2b-chart-explorer__dimension-value\" for=\"", "\">", "</output><div id=\"", "\" class=\"k2b-chart-explorer__steps\">", "</div></div>"],
@@ -86,7 +87,7 @@ export function ChartFilterControls(props) {
86
87
  return props.series?.map(item => item.key) ?? [];
87
88
  },
88
89
  get isActive() {
89
- return props.request.visibleKeys !== undefined && props.request.visibleKeys.length !== props.series?.length;
90
+ return _$memo(() => props.request.visibleKeys !== undefined)() && props.request.visibleKeys.length !== props.series?.length;
90
91
  },
91
92
  get options() {
92
93
  return [{
@@ -125,7 +126,7 @@ export function ChartFilterControls(props) {
125
126
  return props.failed;
126
127
  },
127
128
  get children() {
128
- return ["\xB7 ", messages().chartPreviousData, _$createComponent(Show, {
129
+ return ["· ", messages().chartPreviousData, _$createComponent(Show, {
129
130
  get when() {
130
131
  return props.steps?.length;
131
132
  },
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createSignal","createUniqueId","For","Show","Button","FilterChip","Slider","useUiMessages","ChartFilterControls","props","validateOptions","items","steps","series","keys","map","item","key","some","Set","size","length","Error","messages","id","keyboardSteps","setKeyboardSteps","pointerFocus","stepLabel","find","step","label","_$createComponent","when","children","_$ssr","_tmpl$","_$ssrAttribute","_$escape","dimensionLabel","range","undefined","showValue","min","max","Math","value","findIndex","request","disabled","formatValue","index","aria-valuetext","onValueChange","onRequest","each","_tmpl$3","_tmpl$2","chartSeries","icon","visibleKeys","defaultValue","isActive","options","multiple","color","failed","couldNotLoadData","variant","onClick","onRetry","retry","chartPreviousData","displayedRequest"],"sources":["content/ChartFilterControls.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, For, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { FilterChip } from \"../actions/FilterChip\";\nimport { Slider } from \"../inputs/ChoiceInputs\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartExplorerRequest } from \"./chart-explorer\";\n\nexport type ChartFilterControlsProps = {\n request: ChartExplorerRequest;\n displayedRequest: ChartExplorerRequest;\n steps?: readonly { key: string; label: string }[];\n series?: readonly { key: string; label: string; color: string }[];\n dimensionLabel?: string;\n disabled?: boolean;\n failed?: boolean;\n onRequest: (request: ChartExplorerRequest) => void;\n onRetry?: () => void;\n};\n\n/** Shared controls for a standalone explorer or an atomic group of charts. */\nexport function ChartFilterControls(props: ChartFilterControlsProps) {\n const validateOptions = () => {\n for (const items of [props.steps, props.series]) {\n const keys = items?.map((item) => item.key) ?? [];\n if (keys.some((key) => !key) || new Set(keys).size !== keys.length)\n throw new Error(\"Chart control options require nonempty unique keys\");\n }\n };\n validateOptions();\n createEffect(validateOptions);\n const messages = useUiMessages();\n const id = `k2b-chart-controls-${createUniqueId()}`;\n const [keyboardSteps, setKeyboardSteps] = createSignal(false);\n let pointerFocus = false;\n const stepLabel = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <>\n <Show when={props.steps?.length}>\n <div\n class=\"k2b-chart-explorer__dimension\"\n role=\"group\"\n aria-label={props.dimensionLabel ?? messages().range}\n data-keyboard={keyboardSteps() ? \"true\" : undefined}\n onPointerDown={() => {\n pointerFocus = true;\n setKeyboardSteps(false);\n }}\n onKeyDown={() => {\n pointerFocus = false;\n setKeyboardSteps(true);\n }}\n onFocusIn={(event) => {\n if (!pointerFocus && event.target.matches(\":focus-visible\")) setKeyboardSteps(true);\n }}\n onFocusOut={() => {\n pointerFocus = false;\n setKeyboardSteps(false);\n }}\n >\n <Slider\n id={`${id}-dimension`}\n showValue={false}\n aria-describedby={`${id}-steps`}\n label={props.dimensionLabel ?? messages().range}\n min={0}\n max={Math.max(0, (props.steps?.length ?? 1) - 1)}\n step={1}\n value={Math.max(0, props.steps?.findIndex((step) => step.key === props.request.step) ?? 0)}\n disabled={props.disabled || (props.steps?.length ?? 0) < 2}\n formatValue={(index) => props.steps?.[index]?.label ?? \"\"}\n aria-valuetext={stepLabel(props.request.step)}\n onValueChange={(index) => {\n const step = props.steps?.[index];\n if (step) props.onRequest({ ...props.request, step: step.key });\n }}\n />\n <output class=\"k2b-chart-explorer__dimension-value\" for={`${id}-dimension`}>\n {stepLabel(props.request.step)}\n </output>\n <div id={`${id}-steps`} class=\"k2b-chart-explorer__steps\">\n <For each={props.steps}>\n {(step) => <span data-current={step.key === props.request.step ? \"true\" : undefined}>{step.label}</span>}\n </For>\n </div>\n </div>\n </Show>\n <div class=\"k2b-chart-explorer__legend\">\n <Show when={props.series?.length}>\n <FilterChip\n label={messages().chartSeries}\n icon=\"ti ti-chart-dots\"\n disabled={props.disabled}\n value={props.request.visibleKeys ?? props.series?.map((item) => item.key) ?? []}\n defaultValue={props.series?.map((item) => item.key) ?? []}\n isActive={props.request.visibleKeys !== undefined && props.request.visibleKeys.length !== props.series?.length}\n options={[\n { multiple: true, options: (props.series ?? []).map((item) => ({ value: item.key, label: item.label, color: item.color })) },\n ]}\n onValueChange={(visibleKeys) => props.onRequest({ ...props.request, visibleKeys })}\n />\n </Show>\n <div class=\"k2b-chart-explorer__status\" role=\"status\">\n <Show when={props.failed}>\n {messages().couldNotLoadData}{\" \"}\n <Button variant=\"text\" size=\"sm\" onClick={props.onRetry}>\n {messages().retry}\n </Button>\n </Show>\n <Show when={props.failed}>\n · {messages().chartPreviousData}\n <Show when={props.steps?.length}>: {stepLabel(props.displayedRequest.step)}</Show>\n </Show>\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/ChartFilterControls.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, For, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { FilterChip } from \"../actions/FilterChip\";\nimport { Slider } from \"../inputs/ChoiceInputs\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartExplorerRequest } from \"./chart-explorer\";\n\nexport type ChartFilterControlsProps = {\n request: ChartExplorerRequest;\n displayedRequest: ChartExplorerRequest;\n steps?: readonly { key: string; label: string }[];\n series?: readonly { key: string; label: string; color: string }[];\n dimensionLabel?: string;\n disabled?: boolean;\n failed?: boolean;\n onRequest: (request: ChartExplorerRequest) => void;\n onRetry?: () => void;\n};\n\n/** Shared controls for a standalone explorer or an atomic group of charts. */\nexport function ChartFilterControls(props: ChartFilterControlsProps) {\n const validateOptions = () => {\n for (const items of [props.steps, props.series]) {\n const keys = items?.map((item) => item.key) ?? [];\n if (keys.some((key) => !key) || new Set(keys).size !== keys.length)\n throw new Error(\"Chart control options require nonempty unique keys\");\n }\n };\n validateOptions();\n createEffect(validateOptions);\n const messages = useUiMessages();\n const id = `k2b-chart-controls-${createUniqueId()}`;\n const [keyboardSteps, setKeyboardSteps] = createSignal(false);\n let pointerFocus = false;\n const stepLabel = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <>\n <Show when={props.steps?.length}>\n <div\n class=\"k2b-chart-explorer__dimension\"\n role=\"group\"\n aria-label={props.dimensionLabel ?? messages().range}\n data-keyboard={keyboardSteps() ? \"true\" : undefined}\n onPointerDown={() => {\n pointerFocus = true;\n setKeyboardSteps(false);\n }}\n onKeyDown={() => {\n pointerFocus = false;\n setKeyboardSteps(true);\n }}\n onFocusIn={(event) => {\n if (!pointerFocus && event.target.matches(\":focus-visible\")) setKeyboardSteps(true);\n }}\n onFocusOut={() => {\n pointerFocus = false;\n setKeyboardSteps(false);\n }}\n >\n <Slider\n id={`${id}-dimension`}\n showValue={false}\n aria-describedby={`${id}-steps`}\n label={props.dimensionLabel ?? messages().range}\n min={0}\n max={Math.max(0, (props.steps?.length ?? 1) - 1)}\n step={1}\n value={Math.max(0, props.steps?.findIndex((step) => step.key === props.request.step) ?? 0)}\n disabled={props.disabled || (props.steps?.length ?? 0) < 2}\n formatValue={(index) => props.steps?.[index]?.label ?? \"\"}\n aria-valuetext={stepLabel(props.request.step)}\n onValueChange={(index) => {\n const step = props.steps?.[index];\n if (step) props.onRequest({ ...props.request, step: step.key });\n }}\n />\n <output class=\"k2b-chart-explorer__dimension-value\" for={`${id}-dimension`}>\n {stepLabel(props.request.step)}\n </output>\n <div id={`${id}-steps`} class=\"k2b-chart-explorer__steps\">\n <For each={props.steps}>\n {(step) => <span data-current={step.key === props.request.step ? \"true\" : undefined}>{step.label}</span>}\n </For>\n </div>\n </div>\n </Show>\n <div class=\"k2b-chart-explorer__legend\">\n <Show when={props.series?.length}>\n <FilterChip\n label={messages().chartSeries}\n icon=\"ti ti-chart-dots\"\n disabled={props.disabled}\n value={props.request.visibleKeys ?? props.series?.map((item) => item.key) ?? []}\n defaultValue={props.series?.map((item) => item.key) ?? []}\n isActive={props.request.visibleKeys !== undefined && props.request.visibleKeys.length !== props.series?.length}\n options={[\n { multiple: true, options: (props.series ?? []).map((item) => ({ value: item.key, label: item.label, color: item.color })) },\n ]}\n onValueChange={(visibleKeys) => props.onRequest({ ...props.request, visibleKeys })}\n />\n </Show>\n <div class=\"k2b-chart-explorer__status\" role=\"status\">\n <Show when={props.failed}>\n {messages().couldNotLoadData}{\" \"}\n <Button variant=\"text\" size=\"sm\" onClick={props.onRetry}>\n {messages().retry}\n </Button>\n </Show>\n <Show when={props.failed}>\n · {messages().chartPreviousData}\n <Show when={props.steps?.length}>: {stepLabel(props.displayedRequest.step)}</Show>\n </Show>\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createUniqueId","onCleanup","onMount","isServer","useUiMessages","createChartInspection","sameChartDatum","selectedChartSvg","ChartSnapshotView","props","messages","container","tooltip","anchor","id","inspection","cursor","kind","snapshot","enabled","format","datum","marks","find","m","rows","select","mark","onSelect","rowKey","invalidate","selectData","filter","selectedKey","map","outside","event","target","Node","contains","close","window","addEventListener","removeEventListener","_$ssr","_tmpl$","_$ssrAttribute","_$escape","_$ssrStyle","style","interactiveChart","stretch","undefined","_$ssrStyleProperty","width","height","svg"],"sources":["content/ChartSnapshotView.tsx"],"sourcesContent":["import { createEffect, createUniqueId, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { createChartInspection, sameChartDatum } from \"./chart-inspection\";\nimport type { ChartSnapshot } from \"./chart-snapshot\";\nimport { selectedChartSvg } from \"./chart-svg\";\n\n/** Internal display for server-prepared geometry. Viewports are snapshot-owned. */\nexport function ChartSnapshotView(props: {\n snapshot: ChartSnapshot;\n cursor?: ChartCursor;\n selectedKey: string | null;\n onSelect: (key: string) => void;\n style?: JSX.CSSProperties;\n}) {\n const messages = useUiMessages();\n let container: HTMLDivElement | undefined;\n let tooltip: HTMLSpanElement | undefined;\n let anchor: HTMLSpanElement | undefined;\n const id = `k2b-chart-tooltip-${createUniqueId()}`;\n const inspection = createChartInspection({\n container: () => container,\n cursor: () => props.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => props.snapshot.kind,\n enabled: () => true,\n format: ({ datum }) => props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum))?.tooltip ?? { rows: [] },\n select: ({ datum }) => {\n const mark = props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum));\n if (mark) props.onSelect(mark.rowKey);\n },\n });\n createEffect(() => {\n props.snapshot;\n inspection.invalidate();\n });\n createEffect(() => inspection.selectData(props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum)));\n onMount(() => {\n const outside = (event: Event) => {\n if (event.target instanceof Node && !container?.contains(event.target)) inspection.close();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", inspection.close, true);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", inspection.close, true);\n });\n });\n onCleanup(inspection.close);\n return (\n <div\n ref={container}\n class=\"k2b-chart\"\n data-chart-kind={props.snapshot.kind}\n data-interactive=\"true\"\n style={props.style}\n role=\"group\"\n aria-label={messages().interactiveChart}\n tabIndex={0}\n onPointerDown={inspection.down}\n onPointerMove={inspection.move}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={inspection.close}\n onKeyDown={inspection.key}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={props.snapshot.stretch ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${props.snapshot.width}px`,\n \"--k2b-chart-height\": `${props.snapshot.height}px`,\n \"aspect-ratio\": `${props.snapshot.width}/${props.snapshot.height}`,\n }}\n innerHTML={\n isServer\n ? selectedChartSvg(\n props.snapshot.svg,\n props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum),\n )\n : props.snapshot.svg\n }\n />\n <span ref={anchor} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span ref={tooltip} id={id} class=\"k2b-chart__tooltip k2b-tooltip\" role=\"tooltip\" popover=\"manual\" data-instant=\"true\" />\n </div>\n );\n}\n"],"mappings":";;;;;;AAAA,SAASA,YAAY,EAAEC,cAAc,EAAYC,SAAS,EAAEC,OAAO,QAAQ,UAAU;AACrF,SAASC,QAAQ,QAAQ,cAAc;AACvC,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,SAASC,qBAAqB,EAAEC,cAAc,QAAQ,oBAAoB;AAE1E,SAASC,gBAAgB,QAAQ,aAAa;;AAE9C;AACA,OAAO,SAASC,iBAAiBA,CAACC,KAMjC,EAAE;EACD,MAAMC,QAAQ,GAAGN,aAAa,CAAC,CAAC;EAChC,IAAIO,SAAqC;EACzC,IAAIC,OAAoC;EACxC,IAAIC,MAAmC;EACvC,MAAMC,EAAE,GAAG,qBAAqBd,cAAc,CAAC,CAAC,EAAE;EAClD,MAAMe,UAAU,GAAGV,qBAAqB,CAAC;IACvCM,SAAS,EAAEA,CAAA,KAAMA,SAAS;IAC1BK,MAAM,EAAEA,CAAA,KAAMP,KAAK,CAACO,MAAM;IAC1BJ,OAAO,EAAEA,CAAA,KAAMA,OAAO;IACtBC,MAAM,EAAEA,CAAA,KAAMA,MAAM;IACpBI,IAAI,EAAEA,CAAA,KAAMR,KAAK,CAACS,QAAQ,CAACD,IAAI;IAC/BE,OAAO,EAAEA,CAAA,KAAM,IAAI;IACnBC,MAAM,EAAEA,CAAC;MAAEC;IAAM,CAAC,KAAKZ,KAAK,CAACS,QAAQ,CAACI,KAAK,CAACC,IAAI,CAAEC,CAAC,IAAKlB,cAAc,CAACkB,CAAC,CAACH,KAAK,EAAEA,KAAK,CAAC,CAAC,EAAET,OAAO,IAAI;MAAEa,IAAI,EAAE;IAAG,CAAC;IAChHC,MAAM,EAAEA,CAAC;MAAEL;IAAM,CAAC,KAAK;MACrB,MAAMM,IAAI,GAAGlB,KAAK,CAACS,QAAQ,CAACI,KAAK,CAACC,IAAI,CAAEC,CAAC,IAAKlB,cAAc,CAACkB,CAAC,CAACH,KAAK,EAAEA,KAAK,CAAC,CAAC;MAC7E,IAAIM,IAAI,EAAElB,KAAK,CAACmB,QAAQ,CAACD,IAAI,CAACE,MAAM,CAAC;IACvC;EACF,CAAC,CAAC;EACF9B,YAAY,CAAC,MAAM;IACjBU,KAAK,CAACS,QAAQ;IACdH,UAAU,CAACe,UAAU,CAAC,CAAC;EACzB,CAAC,CAAC;EACF/B,YAAY,CAAC,MAAMgB,UAAU,CAACgB,UAAU,CAACtB,KAAK,CAACS,QAAQ,CAACI,KAAK,CAACU,MAAM,CAAER,CAAC,IAAKA,CAAC,CAACK,MAAM,KAAKpB,KAAK,CAACwB,WAAW,CAAC,CAACC,GAAG,CAAEV,CAAC,IAAKA,CAAC,CAACH,KAAK,CAAC,CAAC,CAAC;EACjInB,OAAO,CAAC,MAAM;IACZ,MAAMiC,OAAO,GAAIC,KAAY,IAAK;MAChC,IAAIA,KAAK,CAACC,MAAM,YAAYC,IAAI,IAAI,CAAC3B,SAAS,EAAE4B,QAAQ,CAACH,KAAK,CAACC,MAAM,CAAC,EAAEtB,UAAU,CAACyB,KAAK,CAAC,CAAC;IAC5F,CAAC;IACDC,MAAM,CAACC,gBAAgB,CAAC,aAAa,EAAEP,OAAO,CAAC;IAC/CM,MAAM,CAACC,gBAAgB,CAAC,QAAQ,EAAE3B,UAAU,CAACyB,KAAK,EAAE,IAAI,CAAC;IACzDvC,SAAS,CAAC,MAAM;MACdwC,MAAM,CAACE,mBAAmB,CAAC,aAAa,EAAER,OAAO,CAAC;MAClDM,MAAM,CAACE,mBAAmB,CAAC,QAAQ,EAAE5B,UAAU,CAACyB,KAAK,EAAE,IAAI,CAAC;IAC9D,CAAC,CAAC;EACJ,CAAC,CAAC;EACFvC,SAAS,CAACc,UAAU,CAACyB,KAAK,CAAC;EAC3B,OAAAI,KAAA,CAAAC,MAAA,EAAAC,cAAA,oBAAAC,QAAA,CAIqBtC,KAAK,CAACS,QAAQ,CAACD,IAAI,iBAAA+B,UAAA,CAE7BvC,KAAK,CAACwC,KAAK,GAAAH,cAAA,eAAAC,QAAA,CAENrC,QAAQ,CAAC,CAAC,CAACwC,gBAAgB,iBAAAJ,cAAA,iBAYvBrC,KAAK,CAACS,QAAQ,CAACiC,OAAO,GAAG,MAAM,GAAAJ,QAAA,CAAGK,SAAS,iBAAAC,kBAAA,uBAElC,GAAAN,QAAA,CAAGtC,KAAK,CAACS,QAAQ,CAACoC,KAAK,WAAI,IAAAD,kBAAA,yBAC1B,GAAAN,QAAA,CAAGtC,KAAK,CAACS,QAAQ,CAACqC,MAAM,WAAI,IAAAF,kBAAA,mBAClC,GAAAN,QAAA,CAAGtC,KAAK,CAACS,QAAQ,CAACoC,KAAK,WAAAP,QAAA,CAAItC,KAAK,CAACS,QAAQ,CAACqC,MAAM,SAAE,GAGlEpD,QAAQ,GACJI,gBAAgB,CACdE,KAAK,CAACS,QAAQ,CAACsC,GAAG,EAClB/C,KAAK,CAACS,QAAQ,CAACI,KAAK,CAACU,MAAM,CAAER,CAAC,IAAKA,CAAC,CAACK,MAAM,KAAKpB,KAAK,CAACwB,WAAW,CAAC,CAACC,GAAG,CAAEV,CAAC,IAAKA,CAAC,CAACH,KAAK,CACvF,CAAC,GACDZ,KAAK,CAACS,QAAQ,CAACsC,GAAG,EAAAV,cAAA,OAAAC,QAAA,CAIFjC,EAAE;AAGhC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/ChartSnapshotView.tsx"],"sourcesContent":["import { createEffect, createUniqueId, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { createChartInspection, sameChartDatum } from \"./chart-inspection\";\nimport type { ChartSnapshot } from \"./chart-snapshot\";\nimport { selectedChartSvg } from \"./chart-svg\";\n\n/** Internal display for server-prepared geometry. Viewports are snapshot-owned. */\nexport function ChartSnapshotView(props: {\n snapshot: ChartSnapshot;\n cursor?: ChartCursor;\n selectedKey: string | null;\n onSelect: (key: string) => void;\n style?: JSX.CSSProperties;\n}) {\n const messages = useUiMessages();\n let container: HTMLDivElement | undefined;\n let tooltip: HTMLSpanElement | undefined;\n let anchor: HTMLSpanElement | undefined;\n const id = `k2b-chart-tooltip-${createUniqueId()}`;\n const inspection = createChartInspection({\n container: () => container,\n cursor: () => props.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => props.snapshot.kind,\n enabled: () => true,\n format: ({ datum }) => props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum))?.tooltip ?? { rows: [] },\n select: ({ datum }) => {\n const mark = props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum));\n if (mark) props.onSelect(mark.rowKey);\n },\n });\n createEffect(() => {\n props.snapshot;\n inspection.invalidate();\n });\n createEffect(() => inspection.selectData(props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum)));\n onMount(() => {\n const outside = (event: Event) => {\n if (event.target instanceof Node && !container?.contains(event.target)) inspection.close();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", inspection.close, true);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", inspection.close, true);\n });\n });\n onCleanup(inspection.close);\n return (\n <div\n ref={container}\n class=\"k2b-chart\"\n data-chart-kind={props.snapshot.kind}\n data-interactive=\"true\"\n style={props.style}\n role=\"group\"\n aria-label={messages().interactiveChart}\n tabIndex={0}\n onPointerDown={inspection.down}\n onPointerMove={inspection.move}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={inspection.close}\n onKeyDown={inspection.key}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={props.snapshot.stretch ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${props.snapshot.width}px`,\n \"--k2b-chart-height\": `${props.snapshot.height}px`,\n \"aspect-ratio\": `${props.snapshot.width}/${props.snapshot.height}`,\n }}\n innerHTML={\n isServer\n ? selectedChartSvg(\n props.snapshot.svg,\n props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum),\n )\n : props.snapshot.svg\n }\n />\n <span ref={anchor} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span ref={tooltip} id={id} class=\"k2b-chart__tooltip k2b-tooltip\" role=\"tooltip\" popover=\"manual\" data-instant=\"true\" />\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["For","Show","CopyButton","highlightCodeDisplayLines","CodeDisplay","props","lines","code","language","lineNumbers","hasHeader","Boolean","title","copy","_$ssr","_tmpl$2","_$escape","class","_$createComponent","when","children","_tmpl$","_tmpl$3","text","_$ssrAttribute","undefined","each","line","index","_tmpl$5","_tmpl$4"],"sources":["content/CodeDisplay.tsx"],"sourcesContent":["import { For, Show } from \"solid-js\";\nimport CopyButton from \"../actions/CopyButton\";\nimport { type CodeDisplayLanguage, highlightCodeDisplayLines } from \"./code-highlight\";\n\nexport type { CodeDisplayLanguage };\n\nexport type CodeDisplayProps = {\n code: string;\n title?: string;\n language?: CodeDisplayLanguage;\n copy?: boolean;\n lineNumbers?: boolean;\n class?: string;\n};\n\nexport default function CodeDisplay(props: CodeDisplayProps) {\n const lines = () => highlightCodeDisplayLines(props.code, language());\n const lineNumbers = () => props.lineNumbers ?? true;\n const language = () => props.language ?? \"text\";\n const hasHeader = () => Boolean(props.title || props.copy !== false);\n\n return (\n <div class={`k2b-content-code-display ${props.class ?? \"\"}`}>\n <Show when={hasHeader()}>\n <div class=\"k2b-content-code-display__header\">\n <Show when={props.title}>{(title) => <p class=\"k2b-content-code-display__title\">{title()}</p>}</Show>\n <Show when={props.copy !== false}>\n <CopyButton text={props.code} />\n </Show>\n </div>\n </Show>\n\n <div\n class=\"k2b-content-code-display__body\"\n data-header={hasHeader() ? \"true\" : undefined}\n role=\"region\"\n aria-label={props.title ? `${props.title} code` : `${language()} code`}\n tabIndex={0}\n >\n <div class=\"k2b-content-code-display__lines\">\n <For each={lines()}>\n {(line, index) => (\n <div class=\"k2b-content-code-display__line\" data-numbered={lineNumbers() ? \"true\" : undefined}>\n <Show when={lineNumbers()}>\n <span class=\"k2b-content-code-display__number\">{index() + 1}</span>\n </Show>\n <code innerHTML={line || \" \"} />\n </div>\n )}\n </For>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAAA,SAASA,GAAG,EAAEC,IAAI,QAAQ,UAAU;AACpC,OAAOC,UAAU,MAAM,uBAAuB;AAC9C,SAAmCC,yBAAyB,QAAQ,kBAAkB;AAatF,eAAe,SAASC,WAAWA,CAACC,KAAuB,EAAE;EAC3D,MAAMC,KAAK,GAAGA,CAAA,KAAMH,yBAAyB,CAACE,KAAK,CAACE,IAAI,EAAEC,QAAQ,CAAC,CAAC,CAAC;EACrE,MAAMC,WAAW,GAAGA,CAAA,KAAMJ,KAAK,CAACI,WAAW,IAAI,IAAI;EACnD,MAAMD,QAAQ,GAAGA,CAAA,KAAMH,KAAK,CAACG,QAAQ,IAAI,MAAM;EAC/C,MAAME,SAAS,GAAGA,CAAA,KAAMC,OAAO,CAACN,KAAK,CAACO,KAAK,IAAIP,KAAK,CAACQ,IAAI,KAAK,KAAK,CAAC;EAEpE,OAAAC,KAAA,CAAAC,OAAA,EACc,4BAAAC,QAAA,CAA4BX,KAAK,CAACY,KAAK,IAAI,EAAE,SAAE,EAAAD,QAAA,CAAAE,iBAAA,CACxDjB,IAAI;IAAA,IAACkB,IAAIA,CAAA;MAAA,OAAET,SAAS,CAAC,CAAC;IAAA;IAAA,IAAAU,SAAA;MAAA,OAAAN,KAAA,CAAAO,MAAA,EAAAL,QAAA,CAAAE,iBAAA,CAElBjB,IAAI;QAAA,IAACkB,IAAIA,CAAA;UAAA,OAAEd,KAAK,CAACO,KAAK;QAAA;QAAAQ,QAAA,EAAIR,KAAK,IAAAE,KAAA,CAAAQ,OAAA,EAAAN,QAAA,CAAiDJ,KAAK,CAAC,CAAC;MAAK,KAAAI,QAAA,CAAAE,iBAAA,CAC5FjB,IAAI;QAAA,IAACkB,IAAIA,CAAA;UAAA,OAAEd,KAAK,CAACQ,IAAI,KAAK,KAAK;QAAA;QAAA,IAAAO,SAAA;UAAA,OAAAF,iBAAA,CAC7BhB,UAAU;YAAA,IAACqB,IAAIA,CAAA;cAAA,OAAElB,KAAK,CAACE,IAAI;YAAA;UAAA;QAAA;MAAA;IAAA;EAAA,KAAAiB,cAAA,gBAOnBd,SAAS,CAAC,CAAC,GAAG,MAAM,GAAAM,QAAA,CAAGS,SAAS,iBAAAD,cAAA,eAEjCnB,KAAK,CAACO,KAAK,GAAG,GAAAI,QAAA,CAAGX,KAAK,CAACO,KAAK,cAAO,GAAG,GAAAI,QAAA,CAAGR,QAAQ,CAAC,CAAC,cAAO,UAAAQ,QAAA,CAAAE,iBAAA,CAInElB,GAAG;IAAA,IAAC0B,IAAIA,CAAA;MAAA,OAAEpB,KAAK,CAAC,CAAC;IAAA;IAAAc,QAAA,EACfA,CAACO,IAAI,EAAEC,KAAK,KAAAd,KAAA,CAAAe,OAAA,EAAAL,cAAA,kBACgDf,WAAW,CAAC,CAAC,GAAG,MAAM,GAAAO,QAAA,CAAGS,SAAS,iBAAAT,QAAA,CAAAE,iBAAA,CAC1FjB,IAAI;MAAA,IAACkB,IAAIA,CAAA;QAAA,OAAEV,WAAW,CAAC,CAAC;MAAA;MAAA,IAAAW,SAAA;QAAA,OAAAN,KAAA,CAAAgB,OAAA,EACyBd,QAAA,CAAAY,KAAK,CAAC,CAAC,IAAG,CAAC;MAAA;IAAA,KAE5CD,IAAI,IAAI,GAAG;EAE/B;AAMb","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/CodeDisplay.tsx"],"sourcesContent":["import { For, Show } from \"solid-js\";\nimport CopyButton from \"../actions/CopyButton\";\nimport { type CodeDisplayLanguage, highlightCodeDisplayLines } from \"./code-highlight\";\n\nexport type { CodeDisplayLanguage };\n\nexport type CodeDisplayProps = {\n code: string;\n title?: string;\n language?: CodeDisplayLanguage;\n copy?: boolean;\n lineNumbers?: boolean;\n class?: string;\n};\n\nexport default function CodeDisplay(props: CodeDisplayProps) {\n const lines = () => highlightCodeDisplayLines(props.code, language());\n const lineNumbers = () => props.lineNumbers ?? true;\n const language = () => props.language ?? \"text\";\n const hasHeader = () => Boolean(props.title || props.copy !== false);\n\n return (\n <div class={`k2b-content-code-display ${props.class ?? \"\"}`}>\n <Show when={hasHeader()}>\n <div class=\"k2b-content-code-display__header\">\n <Show when={props.title}>{(title) => <p class=\"k2b-content-code-display__title\">{title()}</p>}</Show>\n <Show when={props.copy !== false}>\n <CopyButton text={props.code} />\n </Show>\n </div>\n </Show>\n\n <div\n class=\"k2b-content-code-display__body\"\n data-header={hasHeader() ? \"true\" : undefined}\n role=\"region\"\n aria-label={props.title ? `${props.title} code` : `${language()} code`}\n tabIndex={0}\n >\n <div class=\"k2b-content-code-display__lines\">\n <For each={lines()}>\n {(line, index) => (\n <div class=\"k2b-content-code-display__line\" data-numbered={lineNumbers() ? \"true\" : undefined}>\n <Show when={lineNumbers()}>\n <span class=\"k2b-content-code-display__number\">{index() + 1}</span>\n </Show>\n <code innerHTML={line || \" \"} />\n </div>\n )}\n </For>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,GAAG,EAAE,IAAI,QAAQ,UAAU;AACpC,OAAO,UAAU,MAAM,uBAAuB;AAC9C,SAAmC,yBAAyB,QAAQ,kBAAkB;AAatF,eAAe,SAAS,WAAW,CAAC,KAAuB,EAAE;EAC3D,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;EACrE,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,IAAI,IAAI;EACnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,IAAI,MAAM;EAC/C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;EAEpE,sBACc,qCAA4B,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,6BACxD,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,SAAS,CAAC,CAAC;IAAA;IAAA;MAAA,gDAElB,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,UAAI,KAAK,4BAAiD,KAAK,CAAC,CAAC;MAAK,gCAC5F,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI,KAAK,KAAK;QAAA;QAAA;UAAA,yBAC7B,UAAU;YAAA,IAAC,IAAI;cAAA,OAAE,KAAK,CAAC,IAAI;YAAA;UAAA;QAAA;MAAA;IAAA;EAAA,mCAOnB,SAAS,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,8CAEjC,KAAK,CAAC,KAAK,GAAG,YAAG,KAAK,CAAC,KAAK,cAAO,GAAG,YAAG,QAAQ,CAAC,CAAC,cAAO,qCAInE,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,CAAC;IAAA;IAAA,UACf,CAAC,IAAI,EAAE,KAAK,oDACgD,WAAW,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,4CAC1F,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,WAAW,CAAC,CAAC;MAAA;MAAA;QAAA,sBACyB,cAAK,CAAC,CAAC,IAAG,CAAC;MAAA;IAAA,KAE5C,IAAI,IAAI,GAAG;EAE/B;AAMb","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
2
+ import { memo as _$memo } from "solid-js/web";
2
3
  import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
3
4
  import { createComponent as _$createComponent } from "solid-js/web";
4
5
  import { ssr as _$ssr } from "solid-js/web";