@k2b/ui 0.4.2 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/dist/browser/actions/Button.js.map +1 -1
  2. package/dist/browser/actions/ContextMenu.js.map +1 -1
  3. package/dist/browser/actions/CopyButton.js.map +1 -1
  4. package/dist/browser/actions/Disclosure.js.map +1 -1
  5. package/dist/browser/actions/Dropdown.js.map +1 -1
  6. package/dist/browser/actions/FilterChip.js.map +1 -1
  7. package/dist/browser/actions/RemoveButton.js.map +1 -1
  8. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  9. package/dist/browser/actions/SplitButton.js.map +1 -1
  10. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  11. package/dist/browser/actions/Tabs.js.map +1 -1
  12. package/dist/browser/actions/Toolbar.js.map +1 -1
  13. package/dist/browser/actions/index.js.map +1 -1
  14. package/dist/browser/chat/ChatComposer.js.map +1 -1
  15. package/dist/browser/chat/ChatContextPopup.js.map +1 -1
  16. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  17. package/dist/browser/chat/ChatRoot.js.map +1 -1
  18. package/dist/browser/chat/ChatTasks.js +1 -1
  19. package/dist/browser/chat/ChatTasks.js.map +1 -1
  20. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  21. package/dist/browser/chat/chat-behavior.js.map +1 -1
  22. package/dist/browser/chat/composer-document.js.map +1 -1
  23. package/dist/browser/chat/index.js.map +1 -1
  24. package/dist/browser/content/Calendar.js.map +1 -1
  25. package/dist/browser/content/Chart.js.map +1 -1
  26. package/dist/browser/content/ChartExplorer.js.map +1 -1
  27. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  28. package/dist/browser/content/ChartFilterControls.js +1 -1
  29. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  30. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  31. package/dist/browser/content/CodeDisplay.js.map +1 -1
  32. package/dist/browser/content/DataTable.js.map +1 -1
  33. package/dist/browser/content/Docs.js.map +1 -1
  34. package/dist/browser/content/FileBrowser.js.map +1 -1
  35. package/dist/browser/content/FileGrid.js.map +1 -1
  36. package/dist/browser/content/FileTree.js.map +1 -1
  37. package/dist/browser/content/FileView.js.map +1 -1
  38. package/dist/browser/content/Lightbox.js.map +1 -1
  39. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  40. package/dist/browser/content/MarkdownView.js.map +1 -1
  41. package/dist/browser/content/Pagination.js.map +1 -1
  42. package/dist/browser/content/PdfPreview.js.map +1 -1
  43. package/dist/browser/content/RangePicker.js.map +1 -1
  44. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  45. package/dist/browser/content/calendar-event-layout.js.map +1 -1
  46. package/dist/browser/content/calendar-pointer.js.map +1 -1
  47. package/dist/browser/content/chart-cursor.js.map +1 -1
  48. package/dist/browser/content/chart-explorer.js.map +1 -1
  49. package/dist/browser/content/chart-inspection.js.map +1 -1
  50. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  51. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  52. package/dist/browser/content/chart-snapshot.js.map +1 -1
  53. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  54. package/dist/browser/content/chart-svg.js.map +1 -1
  55. package/dist/browser/content/code-highlight.js.map +1 -1
  56. package/dist/browser/content/collection-selection.js.map +1 -1
  57. package/dist/browser/content/delimited-preferences.js.map +1 -1
  58. package/dist/browser/content/file-tree.js.map +1 -1
  59. package/dist/browser/content/file-view-preview.js.map +1 -1
  60. package/dist/browser/content/index.js.map +1 -1
  61. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  62. package/dist/browser/feedback/Tooltip.js.map +1 -1
  63. package/dist/browser/feedback/dialog-core.js.map +1 -1
  64. package/dist/browser/feedback/index.js.map +1 -1
  65. package/dist/browser/feedback/prompts.js.map +1 -1
  66. package/dist/browser/feedback/toast.js.map +1 -1
  67. package/dist/browser/feedback/tooltip-position.js.map +1 -1
  68. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  69. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  70. package/dist/browser/inputs/Checkbox.js.map +1 -1
  71. package/dist/browser/inputs/CheckboxCard.js.map +1 -1
  72. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  73. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  74. package/dist/browser/inputs/Combobox.js.map +1 -1
  75. package/dist/browser/inputs/DatePicker.js.map +1 -1
  76. package/dist/browser/inputs/FileInputs.js.map +1 -1
  77. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  78. package/dist/browser/inputs/NumberInput.js.map +1 -1
  79. package/dist/browser/inputs/Select.js.map +1 -1
  80. package/dist/browser/inputs/SelectChip.js.map +1 -1
  81. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  82. package/dist/browser/inputs/Switch.js.map +1 -1
  83. package/dist/browser/inputs/TagEditor.js.map +1 -1
  84. package/dist/browser/inputs/TagsInput.js.map +1 -1
  85. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  86. package/dist/browser/inputs/TextInput.js.map +1 -1
  87. package/dist/browser/inputs/choice.js.map +1 -1
  88. package/dist/browser/inputs/completion/behaviors.js.map +1 -1
  89. package/dist/browser/inputs/completion/engine.js.map +1 -1
  90. package/dist/browser/inputs/completion/index.js.map +1 -1
  91. package/dist/browser/inputs/completion/overlay.js.map +1 -1
  92. package/dist/browser/inputs/date-picker.js.map +1 -1
  93. package/dist/browser/inputs/editor-dom.js.map +1 -1
  94. package/dist/browser/inputs/field-contract.js.map +1 -1
  95. package/dist/browser/inputs/icon-options.js.map +1 -1
  96. package/dist/browser/inputs/image-crop.js.map +1 -1
  97. package/dist/browser/inputs/index.js.map +1 -1
  98. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  99. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  100. package/dist/browser/inputs/markdown/actions.js.map +1 -1
  101. package/dist/browser/inputs/markdown/active-formats.js.map +1 -1
  102. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  103. package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
  104. package/dist/browser/internal/color.js.map +1 -1
  105. package/dist/browser/internal/field.js.map +1 -1
  106. package/dist/browser/internal/portal.js.map +1 -1
  107. package/dist/browser/intl/Format.js.map +1 -1
  108. package/dist/browser/intl/index.js.map +1 -1
  109. package/dist/browser/intl/locale.js.map +1 -1
  110. package/dist/browser/intl/messages.js +2 -0
  111. package/dist/browser/intl/messages.js.map +1 -1
  112. package/dist/browser/layout/AppOverview.js +29 -20
  113. package/dist/browser/layout/AppOverview.js.map +1 -1
  114. package/dist/browser/layout/AppWorkspace.js +60 -54
  115. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  116. package/dist/browser/layout/BottomSheet.js.map +1 -1
  117. package/dist/browser/layout/DataPanel.js.map +1 -1
  118. package/dist/browser/layout/DetailPanel.js.map +1 -1
  119. package/dist/browser/layout/Discussion.js.map +1 -1
  120. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  121. package/dist/browser/layout/Navigation.js.map +1 -1
  122. package/dist/browser/layout/PanelDialog.js.map +1 -1
  123. package/dist/browser/layout/PanelHeader.js +1 -1
  124. package/dist/browser/layout/PanelHeader.js.map +1 -1
  125. package/dist/browser/layout/Panes.js.map +1 -1
  126. package/dist/browser/layout/PullToRefresh.js +217 -0
  127. package/dist/browser/layout/PullToRefresh.js.map +1 -0
  128. package/dist/browser/layout/ScrollArea.js.map +1 -1
  129. package/dist/browser/layout/Settings.js.map +1 -1
  130. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  131. package/dist/browser/layout/SettingsModal.js.map +1 -1
  132. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  133. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  134. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  135. package/dist/browser/layout/floating-window-geometry.js.map +1 -1
  136. package/dist/browser/layout/index.js +1 -0
  137. package/dist/browser/layout/index.js.map +1 -1
  138. package/dist/browser/layout/navigation-model.js.map +1 -1
  139. package/dist/browser/layout/panes-layout.js.map +1 -1
  140. package/dist/browser/layout/scroll-fade.js.map +1 -1
  141. package/dist/browser/layout/stable-id.js.map +1 -1
  142. package/dist/browser/surfaces/Avatar.js.map +1 -1
  143. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  144. package/dist/browser/surfaces/LinkCard.js +13 -2
  145. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  146. package/dist/browser/surfaces/NotFoundState.js.map +1 -1
  147. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  148. package/dist/browser/surfaces/Paper.js.map +1 -1
  149. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  150. package/dist/browser/surfaces/ProgressBar.js.map +1 -1
  151. package/dist/browser/surfaces/StatCell.js.map +1 -1
  152. package/dist/browser/surfaces/StatGrid.js.map +1 -1
  153. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  154. package/dist/browser/surfaces/Tag.js.map +1 -1
  155. package/dist/browser/surfaces/index.js.map +1 -1
  156. package/dist/browser/widgets/Widget.js.map +1 -1
  157. package/dist/browser/widgets/WidgetHero.js.map +1 -1
  158. package/dist/browser/widgets/WidgetList.js.map +1 -1
  159. package/dist/browser/widgets/WidgetPills.js.map +1 -1
  160. package/dist/browser/widgets/WidgetStat.js.map +1 -1
  161. package/dist/browser/widgets/WidgetStatus.js.map +1 -1
  162. package/dist/ssr/actions/Button.js +5 -4
  163. package/dist/ssr/actions/Button.js.map +1 -1
  164. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  165. package/dist/ssr/actions/CopyButton.js +2 -1
  166. package/dist/ssr/actions/CopyButton.js.map +1 -1
  167. package/dist/ssr/actions/Disclosure.js.map +1 -1
  168. package/dist/ssr/actions/Dropdown.js +7 -6
  169. package/dist/ssr/actions/Dropdown.js.map +1 -1
  170. package/dist/ssr/actions/FilterChip.js +5 -4
  171. package/dist/ssr/actions/FilterChip.js.map +1 -1
  172. package/dist/ssr/actions/RemoveButton.js +1 -0
  173. package/dist/ssr/actions/RemoveButton.js.map +1 -1
  174. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  175. package/dist/ssr/actions/SplitButton.js +1 -0
  176. package/dist/ssr/actions/SplitButton.js.map +1 -1
  177. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  178. package/dist/ssr/actions/Tabs.js.map +1 -1
  179. package/dist/ssr/actions/Toolbar.js.map +1 -1
  180. package/dist/ssr/actions/index.js.map +1 -1
  181. package/dist/ssr/chat/ChatComposer.js +6 -5
  182. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  183. package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
  184. package/dist/ssr/chat/ChatPrimitives.js +6 -5
  185. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  186. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  187. package/dist/ssr/chat/ChatTasks.js +1 -1
  188. package/dist/ssr/chat/ChatTasks.js.map +1 -1
  189. package/dist/ssr/chat/ChatTimeline.js +5 -4
  190. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  191. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  192. package/dist/ssr/chat/composer-document.js.map +1 -1
  193. package/dist/ssr/chat/index.js.map +1 -1
  194. package/dist/ssr/content/Calendar.js +2 -1
  195. package/dist/ssr/content/Calendar.js.map +1 -1
  196. package/dist/ssr/content/Chart.js.map +1 -1
  197. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  198. package/dist/ssr/content/ChartExplorerControls.js +5 -4
  199. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  200. package/dist/ssr/content/ChartFilterControls.js +3 -2
  201. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  202. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  203. package/dist/ssr/content/CodeDisplay.js.map +1 -1
  204. package/dist/ssr/content/DataTable.js +1 -0
  205. package/dist/ssr/content/DataTable.js.map +1 -1
  206. package/dist/ssr/content/Docs.js +1 -0
  207. package/dist/ssr/content/Docs.js.map +1 -1
  208. package/dist/ssr/content/FileBrowser.js +2 -1
  209. package/dist/ssr/content/FileBrowser.js.map +1 -1
  210. package/dist/ssr/content/FileGrid.js.map +1 -1
  211. package/dist/ssr/content/FileTree.js +2 -1
  212. package/dist/ssr/content/FileTree.js.map +1 -1
  213. package/dist/ssr/content/FileView.js +5 -4
  214. package/dist/ssr/content/FileView.js.map +1 -1
  215. package/dist/ssr/content/Lightbox.js +2 -1
  216. package/dist/ssr/content/Lightbox.js.map +1 -1
  217. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  218. package/dist/ssr/content/MarkdownView.js.map +1 -1
  219. package/dist/ssr/content/Pagination.js +2 -1
  220. package/dist/ssr/content/Pagination.js.map +1 -1
  221. package/dist/ssr/content/PdfPreview.js.map +1 -1
  222. package/dist/ssr/content/RangePicker.js.map +1 -1
  223. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  224. package/dist/ssr/content/calendar-event-layout.js.map +1 -1
  225. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  226. package/dist/ssr/content/chart-cursor.js.map +1 -1
  227. package/dist/ssr/content/chart-explorer.js.map +1 -1
  228. package/dist/ssr/content/chart-inspection.js.map +1 -1
  229. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  230. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  231. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  232. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  233. package/dist/ssr/content/chart-svg.js.map +1 -1
  234. package/dist/ssr/content/code-highlight.js.map +1 -1
  235. package/dist/ssr/content/collection-selection.js.map +1 -1
  236. package/dist/ssr/content/delimited-preferences.js.map +1 -1
  237. package/dist/ssr/content/file-tree.js.map +1 -1
  238. package/dist/ssr/content/file-view-preview.js.map +1 -1
  239. package/dist/ssr/content/index.js.map +1 -1
  240. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  241. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  242. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  243. package/dist/ssr/feedback/index.js.map +1 -1
  244. package/dist/ssr/feedback/prompts.js +3 -2
  245. package/dist/ssr/feedback/prompts.js.map +1 -1
  246. package/dist/ssr/feedback/toast.js.map +1 -1
  247. package/dist/ssr/feedback/tooltip-position.js.map +1 -1
  248. package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
  249. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  250. package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
  251. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  252. package/dist/ssr/inputs/Checkbox.js +1 -0
  253. package/dist/ssr/inputs/Checkbox.js.map +1 -1
  254. package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
  255. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  256. package/dist/ssr/inputs/ChoiceInputs.js +1 -0
  257. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  258. package/dist/ssr/inputs/Combobox.js +2 -1
  259. package/dist/ssr/inputs/Combobox.js.map +1 -1
  260. package/dist/ssr/inputs/DatePicker.js +4 -3
  261. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  262. package/dist/ssr/inputs/FileInputs.js +2 -1
  263. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  264. package/dist/ssr/inputs/MultiSelectInput.js +4 -3
  265. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  266. package/dist/ssr/inputs/NumberInput.js +2 -1
  267. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  268. package/dist/ssr/inputs/Select.js +4 -3
  269. package/dist/ssr/inputs/Select.js.map +1 -1
  270. package/dist/ssr/inputs/SelectChip.js +3 -2
  271. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  272. package/dist/ssr/inputs/SpecialInputs.js +1 -0
  273. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  274. package/dist/ssr/inputs/Switch.js.map +1 -1
  275. package/dist/ssr/inputs/TagEditor.js +3 -2
  276. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  277. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  278. package/dist/ssr/inputs/TemplateEditor.js +1 -0
  279. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  280. package/dist/ssr/inputs/TextInput.js +4 -3
  281. package/dist/ssr/inputs/TextInput.js.map +1 -1
  282. package/dist/ssr/inputs/choice.js.map +1 -1
  283. package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
  284. package/dist/ssr/inputs/completion/engine.js.map +1 -1
  285. package/dist/ssr/inputs/completion/index.js.map +1 -1
  286. package/dist/ssr/inputs/completion/overlay.js.map +1 -1
  287. package/dist/ssr/inputs/date-picker.js.map +1 -1
  288. package/dist/ssr/inputs/editor-dom.js.map +1 -1
  289. package/dist/ssr/inputs/field-contract.js.map +1 -1
  290. package/dist/ssr/inputs/icon-options.js.map +1 -1
  291. package/dist/ssr/inputs/image-crop.js.map +1 -1
  292. package/dist/ssr/inputs/index.js.map +1 -1
  293. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  294. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  295. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  296. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  297. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
  298. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  299. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  300. package/dist/ssr/internal/color.js.map +1 -1
  301. package/dist/ssr/internal/field.js.map +1 -1
  302. package/dist/ssr/internal/portal.js.map +1 -1
  303. package/dist/ssr/intl/Format.js.map +1 -1
  304. package/dist/ssr/intl/index.js.map +1 -1
  305. package/dist/ssr/intl/locale.js.map +1 -1
  306. package/dist/ssr/intl/messages.js +2 -0
  307. package/dist/ssr/intl/messages.js.map +1 -1
  308. package/dist/ssr/layout/AppOverview.js +16 -6
  309. package/dist/ssr/layout/AppOverview.js.map +1 -1
  310. package/dist/ssr/layout/AppWorkspace.js +12 -8
  311. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  312. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  313. package/dist/ssr/layout/DataPanel.js +1 -0
  314. package/dist/ssr/layout/DataPanel.js.map +1 -1
  315. package/dist/ssr/layout/DetailPanel.js +1 -0
  316. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  317. package/dist/ssr/layout/Discussion.js +3 -2
  318. package/dist/ssr/layout/Discussion.js.map +1 -1
  319. package/dist/ssr/layout/FloatingWindow.js +1 -0
  320. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  321. package/dist/ssr/layout/Navigation.js +3 -2
  322. package/dist/ssr/layout/Navigation.js.map +1 -1
  323. package/dist/ssr/layout/PanelDialog.js +1 -0
  324. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  325. package/dist/ssr/layout/PanelHeader.js +1 -1
  326. package/dist/ssr/layout/PanelHeader.js.map +1 -1
  327. package/dist/ssr/layout/Panes.js.map +1 -1
  328. package/dist/ssr/layout/PullToRefresh.js +177 -0
  329. package/dist/ssr/layout/PullToRefresh.js.map +1 -0
  330. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  331. package/dist/ssr/layout/Settings.js +2 -1
  332. package/dist/ssr/layout/Settings.js.map +1 -1
  333. package/dist/ssr/layout/SettingsCollection.js +1 -0
  334. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  335. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  336. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  337. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  338. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  339. package/dist/ssr/layout/floating-window-geometry.js.map +1 -1
  340. package/dist/ssr/layout/index.js +1 -0
  341. package/dist/ssr/layout/index.js.map +1 -1
  342. package/dist/ssr/layout/navigation-model.js.map +1 -1
  343. package/dist/ssr/layout/panes-layout.js.map +1 -1
  344. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  345. package/dist/ssr/layout/stable-id.js.map +1 -1
  346. package/dist/ssr/surfaces/Avatar.js +2 -1
  347. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  348. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  349. package/dist/ssr/surfaces/LinkCard.js +11 -2
  350. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  351. package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
  352. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  353. package/dist/ssr/surfaces/Paper.js +2 -1
  354. package/dist/ssr/surfaces/Paper.js.map +1 -1
  355. package/dist/ssr/surfaces/Placeholder.js +2 -1
  356. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  357. package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
  358. package/dist/ssr/surfaces/StatCell.js +2 -1
  359. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  360. package/dist/ssr/surfaces/StatGrid.js +1 -0
  361. package/dist/ssr/surfaces/StatGrid.js.map +1 -1
  362. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  363. package/dist/ssr/surfaces/Tag.js.map +1 -1
  364. package/dist/ssr/surfaces/index.js.map +1 -1
  365. package/dist/ssr/widgets/Widget.js +1 -0
  366. package/dist/ssr/widgets/Widget.js.map +1 -1
  367. package/dist/ssr/widgets/WidgetHero.js.map +1 -1
  368. package/dist/ssr/widgets/WidgetList.js.map +1 -1
  369. package/dist/ssr/widgets/WidgetPills.js.map +1 -1
  370. package/dist/ssr/widgets/WidgetStat.js +1 -0
  371. package/dist/ssr/widgets/WidgetStat.js.map +1 -1
  372. package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
  373. package/dist/styles.css +1 -1
  374. package/dist/types/actions/SpotlightSearch.d.ts +1 -1
  375. package/dist/types/feedback/prompts.d.ts +2 -2
  376. package/dist/types/intl/messages.d.ts +1 -0
  377. package/dist/types/layout/AppOverview.d.ts +7 -0
  378. package/dist/types/layout/AppWorkspace.d.ts +14 -2
  379. package/dist/types/layout/PanelHeader.d.ts +1 -1
  380. package/dist/types/layout/PullToRefresh.d.ts +21 -0
  381. package/dist/types/layout/index.d.ts +3 -1
  382. package/dist/types/surfaces/LinkCard.d.ts +5 -2
  383. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"names":["assertUniqueStableUiIds","isStableUiId","PANES_LAYOUT_VERSION","PANES_MIN_RATIO","PANES_MAX_ID_LENGTH","MAX_DEPTH","MAX_NODES","isRecord","value","Array","isArray","isItemId","parseNode","usedItems","budget","depth","nodes","type","items","length","active","item","has","add","push","includes","direction","ratio","Number","isFinite","first","second","parsePanesLayout","version","root","Set","createPanesLayout","itemIds","findItem","node","itemId","path","index","indexOf","group","firstGroup","mapAtPath","update","segment","rest","removeFromNode","filter","id","Math","min","reconcileNode","desiredOpen","sameItems","left","right","every","sameNode","isWithinLayoutLimits","insertIntoGroup","beforeItemId","splice","activatePanesItem","layout","located","isPanesItemVisible","removePanesItem","addPanesItem","options","targetItemId","target","applyPanesIntent","intent","source","rootWithoutSource","nextTarget","side","itemGroup","itemFirst","nextRoot","reconcilePanesLayout","desiredOpenItemIds","present","collectPresent","missing","ids","forEach","resizePanesSplit","nextRatio","max","intentKey","samePanesIntent","canSplitSide","split","collectGroups","groups","nodeAtPath","current","isExistingSplitPlacement","parent","slice","sourceFirst","sibling","collectTreeStats","stats","maxDepth","itemDepth","Map","set","getPanesDropTargets","movable","splitStats","targets","seen","noop","sameGroup","remaining","kind","targetDepth","get","exceedsLimits","undefined"],"sources":["layout/panes-layout.ts"],"sourcesContent":["import { assertUniqueStableUiIds, isStableUiId } from \"./stable-id\";\n\nexport const PANES_LAYOUT_VERSION = 2 as const;\nexport const PANES_MIN_RATIO = 0.08;\nexport const PANES_MAX_ID_LENGTH = 160;\n\nexport type PanesDirection = \"horizontal\" | \"vertical\";\nexport type PanesSide = \"left\" | \"right\" | \"top\" | \"bottom\";\nexport type PanesPathSegment = \"first\" | \"second\";\nexport type PanesPath = readonly PanesPathSegment[];\n\nexport type PanesGroup = {\n type: \"group\";\n items: string[];\n active: string;\n};\n\nexport type PanesSplit = {\n type: \"split\";\n direction: PanesDirection;\n ratio: number;\n first: PanesNode;\n second: PanesNode;\n};\n\nexport type PanesNode = PanesGroup | PanesSplit;\n\nexport type PanesLayout = {\n version: typeof PANES_LAYOUT_VERSION;\n root: PanesNode | null;\n};\n\nexport type PanesIntent =\n | {\n type: \"tab\";\n itemId: string;\n targetItemId: string;\n beforeItemId: string | null;\n }\n | {\n type: \"split\";\n itemId: string;\n targetItemId: string;\n side: PanesSide;\n };\n\nexport type PanesDropTarget = {\n id: string;\n kind: \"tab\" | \"group\" | \"split\";\n targetItemId: string;\n beforeItemId?: string | null;\n side?: PanesSide;\n intent: PanesIntent;\n};\n\nexport type PanesDropTargetOptions = {\n movable: boolean;\n split: false | PanesDirection | \"both\";\n};\n\nconst MAX_DEPTH = 12;\nconst MAX_NODES = 64;\n\ntype LocatedGroup = {\n group: PanesGroup;\n path: PanesPathSegment[];\n index: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => !!value && typeof value === \"object\" && !Array.isArray(value);\n\nconst isItemId = (value: unknown): value is string => isStableUiId(value, PANES_MAX_ID_LENGTH);\n\nconst parseNode = (value: unknown, usedItems: Set<string>, budget: { nodes: number }, depth = 0): PanesNode | null => {\n if (!isRecord(value) || depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return null;\n budget.nodes += 1;\n\n if (value.type === \"group\") {\n if (!Array.isArray(value.items) || value.items.length === 0 || !isItemId(value.active)) return null;\n const items: string[] = [];\n for (const item of value.items) {\n if (!isItemId(item) || usedItems.has(item)) return null;\n usedItems.add(item);\n items.push(item);\n }\n if (!items.includes(value.active)) return null;\n return { type: \"group\", items, active: value.active };\n }\n\n if (\n value.type !== \"split\" ||\n (value.direction !== \"horizontal\" && value.direction !== \"vertical\") ||\n typeof value.ratio !== \"number\" ||\n !Number.isFinite(value.ratio) ||\n value.ratio < PANES_MIN_RATIO ||\n value.ratio > 1 - PANES_MIN_RATIO\n ) {\n return null;\n }\n const first = parseNode(value.first, usedItems, budget, depth + 1);\n const second = parseNode(value.second, usedItems, budget, depth + 1);\n if (!first || !second) return null;\n return {\n type: \"split\",\n direction: value.direction,\n ratio: value.ratio,\n first,\n second,\n };\n};\n\nexport const parsePanesLayout = (value: unknown): PanesLayout | null => {\n if (!isRecord(value) || value.version !== PANES_LAYOUT_VERSION) return null;\n if (value.root === null) return { version: PANES_LAYOUT_VERSION, root: null };\n const root = parseNode(value.root, new Set<string>(), { nodes: 0 });\n return root ? { version: PANES_LAYOUT_VERSION, root } : null;\n};\n\nexport const createPanesLayout = (itemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(itemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n return {\n version: PANES_LAYOUT_VERSION,\n root: itemIds.length > 0 ? { type: \"group\", items: [...itemIds], active: itemIds[0]! } : null,\n };\n};\n\nconst findItem = (node: PanesNode | null, itemId: string, path: PanesPathSegment[] = []): LocatedGroup | null => {\n if (!node) return null;\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n return index >= 0 ? { group: node, path, index } : null;\n }\n return findItem(node.first, itemId, [...path, \"first\"]) ?? findItem(node.second, itemId, [...path, \"second\"]);\n};\n\nconst firstGroup = (node: PanesNode | null): PanesGroup | null => {\n if (!node) return null;\n return node.type === \"group\" ? node : firstGroup(node.first);\n};\n\nconst mapAtPath = (node: PanesNode, path: PanesPath, update: (node: PanesNode) => PanesNode): PanesNode => {\n const [segment, ...rest] = path;\n if (!segment) return update(node);\n if (node.type !== \"split\") return node;\n if (segment === \"first\") {\n const first = mapAtPath(node.first, rest, update);\n return first === node.first ? node : { ...node, first };\n }\n const second = mapAtPath(node.second, rest, update);\n return second === node.second ? node : { ...node, second };\n};\n\nconst removeFromNode = (node: PanesNode, itemId: string): PanesNode | null => {\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n if (index < 0) return node;\n const items = node.items.filter((id) => id !== itemId);\n if (items.length === 0) return null;\n const active = node.active === itemId ? items[Math.min(index, items.length - 1)]! : node.active;\n return { ...node, items, active };\n }\n\n const first = removeFromNode(node.first, itemId);\n const second = removeFromNode(node.second, itemId);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst reconcileNode = (node: PanesNode, desiredOpen: ReadonlySet<string>): PanesNode | null => {\n if (node.type === \"group\") {\n const items = node.items.filter((itemId) => desiredOpen.has(itemId));\n if (items.length === 0) return null;\n if (sameItems(items, node.items)) return node;\n const active = items.includes(node.active) ? node.active : items[Math.min(node.items.indexOf(node.active), items.length - 1)]!;\n return { ...node, items, active };\n }\n const first = reconcileNode(node.first, desiredOpen);\n const second = reconcileNode(node.second, desiredOpen);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst sameItems = (left: readonly string[], right: readonly string[]): boolean =>\n left.length === right.length && left.every((item, index) => item === right[index]);\n\nconst sameNode = (left: PanesNode, right: PanesNode): boolean => {\n if (left.type !== right.type) return false;\n if (left.type === \"group\" && right.type === \"group\") {\n return left.active === right.active && sameItems(left.items, right.items);\n }\n if (left.type === \"split\" && right.type === \"split\") {\n return (\n left.direction === right.direction &&\n left.ratio === right.ratio &&\n sameNode(left.first, right.first) &&\n sameNode(left.second, right.second)\n );\n }\n return false;\n};\n\nconst isWithinLayoutLimits = (node: PanesNode, budget = { nodes: 0 }, depth = 0): boolean => {\n if (depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return false;\n budget.nodes += 1;\n return (\n node.type === \"group\" || (isWithinLayoutLimits(node.first, budget, depth + 1) && isWithinLayoutLimits(node.second, budget, depth + 1))\n );\n};\n\nconst insertIntoGroup = (group: PanesGroup, itemId: string, beforeItemId: string | null): PanesGroup | null => {\n if (beforeItemId !== null && !group.items.includes(beforeItemId)) return null;\n const items = group.items.filter((id) => id !== itemId);\n const index = beforeItemId === null ? items.length : items.indexOf(beforeItemId);\n if (index < 0) return null;\n items.splice(index, 0, itemId);\n if (sameItems(items, group.items)) return group;\n return { ...group, items, active: itemId };\n};\n\nexport const activatePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n const located = findItem(layout.root, itemId);\n if (!located || located.group.active === itemId || !layout.root) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, located.path, (node) => (node.type === \"group\" ? { ...node, active: itemId } : node)),\n };\n};\n\nexport const isPanesItemVisible = (layout: PanesLayout, itemId: string): boolean => findItem(layout.root, itemId)?.group.active === itemId;\n\nexport const removePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n if (!layout.root || !findItem(layout.root, itemId)) return layout;\n return { version: PANES_LAYOUT_VERSION, root: removeFromNode(layout.root, itemId) };\n};\n\nexport type AddPanesItemOptions = {\n itemId: string;\n targetItemId: string | null;\n beforeItemId?: string | null;\n};\n\nexport const addPanesItem = (layout: PanesLayout, options: AddPanesItemOptions): PanesLayout => {\n if (!isItemId(options.itemId) || findItem(layout.root, options.itemId)) return layout;\n if (!layout.root) {\n return options.targetItemId === null ? createPanesLayout([options.itemId]) : layout;\n }\n if (options.targetItemId === null) return layout;\n const target = findItem(layout.root, options.targetItemId);\n if (!target) return layout;\n const group = insertIntoGroup(target.group, options.itemId, options.beforeItemId ?? null);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, target.path, () => group) };\n};\n\nexport const applyPanesIntent = (layout: PanesLayout, intent: PanesIntent): PanesLayout => {\n if (!layout.root || intent.itemId === intent.targetItemId) return layout;\n const source = findItem(layout.root, intent.itemId);\n const target = findItem(layout.root, intent.targetItemId);\n if (!source || !target) return layout;\n\n if (intent.type === \"tab\" && source.group === target.group) {\n const group = insertIntoGroup(source.group, intent.itemId, intent.beforeItemId);\n if (!group || group === source.group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, source.path, () => group) };\n }\n\n const rootWithoutSource = removeFromNode(layout.root, intent.itemId);\n if (!rootWithoutSource) return layout;\n const nextTarget = findItem(rootWithoutSource, intent.targetItemId);\n if (!nextTarget) return layout;\n\n if (intent.type === \"tab\") {\n const group = insertIntoGroup(nextTarget.group, intent.itemId, intent.beforeItemId);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(rootWithoutSource, nextTarget.path, () => group) };\n }\n\n const direction: PanesDirection = intent.side === \"left\" || intent.side === \"right\" ? \"horizontal\" : \"vertical\";\n const itemGroup: PanesGroup = { type: \"group\", items: [intent.itemId], active: intent.itemId };\n const itemFirst = intent.side === \"left\" || intent.side === \"top\";\n const nextRoot = mapAtPath(rootWithoutSource, nextTarget.path, (node) => ({\n type: \"split\",\n direction,\n ratio: 0.5,\n first: itemFirst ? itemGroup : node,\n second: itemFirst ? node : itemGroup,\n }));\n if (!isWithinLayoutLimits(nextRoot) || sameNode(nextRoot, layout.root)) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: nextRoot,\n };\n};\n\nexport const reconcilePanesLayout = (layout: PanesLayout, desiredOpenItemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(desiredOpenItemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n const desiredOpen = new Set(desiredOpenItemIds);\n const root = layout.root ? reconcileNode(layout.root, desiredOpen) : null;\n const present = new Set<string>();\n collectPresent(root, present);\n const missing = desiredOpenItemIds.filter((itemId) => !present.has(itemId));\n if (missing.length === 0) return root === layout.root ? layout : { version: PANES_LAYOUT_VERSION, root };\n if (!root) return createPanesLayout(missing);\n const target = firstGroup(root);\n if (!target) return createPanesLayout(missing);\n const located = findItem(root, target.active);\n if (!located) return createPanesLayout(missing);\n const group = { ...located.group, items: [...located.group.items, ...missing] };\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(root, located.path, () => group) };\n};\n\nconst collectPresent = (node: PanesNode | null, ids: Set<string>): void => {\n if (!node) return;\n if (node.type === \"group\") {\n node.items.forEach((item) => ids.add(item));\n return;\n }\n collectPresent(node.first, ids);\n collectPresent(node.second, ids);\n};\n\nexport const resizePanesSplit = (layout: PanesLayout, path: PanesPath, ratio: number): PanesLayout => {\n if (!layout.root || !Number.isFinite(ratio)) return layout;\n let target: PanesNode = layout.root;\n for (const segment of path) {\n if (target.type !== \"split\") return layout;\n target = target[segment];\n }\n if (target.type !== \"split\") return layout;\n const nextRatio = Math.min(1 - PANES_MIN_RATIO, Math.max(PANES_MIN_RATIO, ratio));\n if (nextRatio === target.ratio) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, path, (node) => (node.type === \"split\" ? { ...node, ratio: nextRatio } : node)),\n };\n};\n\nconst intentKey = (intent: PanesIntent): string =>\n intent.type === \"tab\"\n ? `tab:${intent.itemId}:${intent.targetItemId}:${intent.beforeItemId === null ? \"end:\" : `before:${intent.beforeItemId}`}`\n : `split:${intent.itemId}:${intent.targetItemId}:${intent.side}`;\n\nexport const samePanesIntent = (left: PanesIntent | null, right: PanesIntent | null): boolean =>\n left === right ||\n (!!left &&\n !!right &&\n left.type === right.type &&\n left.itemId === right.itemId &&\n left.targetItemId === right.targetItemId &&\n (left.type === \"tab\" && right.type === \"tab\"\n ? left.beforeItemId === right.beforeItemId\n : left.type === \"split\" && right.type === \"split\" && left.side === right.side));\n\nconst canSplitSide = (side: PanesSide, split: PanesDropTargetOptions[\"split\"]): boolean => {\n if (split === false) return false;\n const direction = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n return split === \"both\" || split === direction;\n};\n\nconst collectGroups = (node: PanesNode | null, groups: PanesGroup[] = []): PanesGroup[] => {\n if (!node) return groups;\n if (node.type === \"group\") groups.push(node);\n else {\n collectGroups(node.first, groups);\n collectGroups(node.second, groups);\n }\n return groups;\n};\n\nconst nodeAtPath = (node: PanesNode, path: PanesPath): PanesNode | null => {\n let current = node;\n for (const segment of path) {\n if (current.type !== \"split\") return null;\n current = current[segment];\n }\n return current;\n};\n\nconst isExistingSplitPlacement = (layout: PanesLayout, source: LocatedGroup, targetItemId: string, side: PanesSide): boolean => {\n if (!layout.root || source.group.items.length !== 1 || source.path.length === 0) return false;\n const segment = source.path[source.path.length - 1]!;\n const parent = nodeAtPath(layout.root, source.path.slice(0, -1));\n if (!parent || parent.type !== \"split\" || parent.ratio !== 0.5) return false;\n const direction: PanesDirection = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n const sourceFirst = side === \"left\" || side === \"top\";\n if (parent.direction !== direction || (segment === \"first\") !== sourceFirst) return false;\n const sibling = parent[segment === \"first\" ? \"second\" : \"first\"];\n return sibling.type === \"group\" && sibling.items.includes(targetItemId);\n};\n\nconst collectTreeStats = (\n node: PanesNode,\n depth = 0,\n stats: { nodes: number; maxDepth: number; itemDepth: Map<string, number> } = {\n nodes: 0,\n maxDepth: 0,\n itemDepth: new Map(),\n },\n) => {\n stats.nodes += 1;\n stats.maxDepth = Math.max(stats.maxDepth, depth);\n if (node.type === \"group\") node.items.forEach((itemId) => stats.itemDepth.set(itemId, depth));\n else {\n collectTreeStats(node.first, depth + 1, stats);\n collectTreeStats(node.second, depth + 1, stats);\n }\n return stats;\n};\n\nexport const getPanesDropTargets = (layout: PanesLayout, itemId: string, options: PanesDropTargetOptions): PanesDropTarget[] => {\n if (!options.movable || !layout.root) return [];\n const source = findItem(layout.root, itemId);\n if (!source) return [];\n const rootWithoutSource = removeFromNode(layout.root, itemId);\n const splitStats = rootWithoutSource ? collectTreeStats(rootWithoutSource) : null;\n const targets: PanesDropTarget[] = [];\n const seen = new Set<string>();\n const add = (target: Omit<PanesDropTarget, \"id\">, noop = false) => {\n const id = intentKey(target.intent);\n if (noop || seen.has(id)) return;\n seen.add(id);\n targets.push({ ...target, id });\n };\n\n for (const group of collectGroups(layout.root)) {\n const sameGroup = group === source.group;\n const remaining = group.items.filter((id) => id !== itemId);\n const targetItemId = sameGroup ? remaining[0] : group.active;\n if (!targetItemId) continue;\n for (const beforeItemId of remaining) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId,\n intent,\n },\n sameGroup && group.items[source.index + 1] === beforeItemId,\n );\n }\n if (sameGroup) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId: null };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId: null,\n intent,\n },\n source.index === group.items.length - 1,\n );\n } else {\n add({\n kind: \"group\",\n targetItemId,\n intent: { type: \"tab\", itemId, targetItemId, beforeItemId: null },\n });\n }\n\n for (const side of [\"top\", \"right\", \"bottom\", \"left\"] as const) {\n if (!canSplitSide(side, options.split)) continue;\n const intent: PanesIntent = { type: \"split\", itemId, targetItemId, side };\n const targetDepth = splitStats?.itemDepth.get(targetItemId);\n const exceedsLimits =\n !splitStats ||\n targetDepth === undefined ||\n splitStats.nodes + 2 > MAX_NODES ||\n Math.max(splitStats.maxDepth, targetDepth + 1) > MAX_DEPTH;\n add(\n {\n kind: \"split\",\n targetItemId,\n side,\n intent,\n },\n exceedsLimits || isExistingSplitPlacement(layout, source, targetItemId, side),\n );\n }\n }\n return targets;\n};\n"],"mappings":"AAAA,SAASA,uBAAuB,EAAEC,YAAY,QAAQ,aAAa;AAEnE,OAAO,MAAMC,oBAAoB,GAAG,CAAU;AAC9C,OAAO,MAAMC,eAAe,GAAG,IAAI;AACnC,OAAO,MAAMC,mBAAmB,GAAG,GAAG;AAwDtC,MAAMC,SAAS,GAAG,EAAE;AACpB,MAAMC,SAAS,GAAG,EAAE;AAQpB,MAAMC,QAAQ,GAAIC,KAAc,IAAuC,CAAC,CAACA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC;AAEpI,MAAMG,QAAQ,GAAIH,KAAc,IAAsBP,YAAY,CAACO,KAAK,EAAEJ,mBAAmB,CAAC;AAE9F,MAAMQ,SAAS,GAAGA,CAACJ,KAAc,EAAEK,SAAsB,EAAEC,MAAyB,EAAEC,KAAK,GAAG,CAAC,KAAuB;EACpH,IAAI,CAACR,QAAQ,CAACC,KAAK,CAAC,IAAIO,KAAK,GAAGV,SAAS,IAAIS,MAAM,CAACE,KAAK,IAAIV,SAAS,EAAE,OAAO,IAAI;EACnFQ,MAAM,CAACE,KAAK,IAAI,CAAC;EAEjB,IAAIR,KAAK,CAACS,IAAI,KAAK,OAAO,EAAE;IAC1B,IAAI,CAACR,KAAK,CAACC,OAAO,CAACF,KAAK,CAACU,KAAK,CAAC,IAAIV,KAAK,CAACU,KAAK,CAACC,MAAM,KAAK,CAAC,IAAI,CAACR,QAAQ,CAACH,KAAK,CAACY,MAAM,CAAC,EAAE,OAAO,IAAI;IACnG,MAAMF,KAAe,GAAG,EAAE;IAC1B,KAAK,MAAMG,IAAI,IAAIb,KAAK,CAACU,KAAK,EAAE;MAC9B,IAAI,CAACP,QAAQ,CAACU,IAAI,CAAC,IAAIR,SAAS,CAACS,GAAG,CAACD,IAAI,CAAC,EAAE,OAAO,IAAI;MACvDR,SAAS,CAACU,GAAG,CAACF,IAAI,CAAC;MACnBH,KAAK,CAACM,IAAI,CAACH,IAAI,CAAC;IAClB;IACA,IAAI,CAACH,KAAK,CAACO,QAAQ,CAACjB,KAAK,CAACY,MAAM,CAAC,EAAE,OAAO,IAAI;IAC9C,OAAO;MAAEH,IAAI,EAAE,OAAO;MAAEC,KAAK;MAAEE,MAAM,EAAEZ,KAAK,CAACY;IAAO,CAAC;EACvD;EAEA,IACEZ,KAAK,CAACS,IAAI,KAAK,OAAO,IACrBT,KAAK,CAACkB,SAAS,KAAK,YAAY,IAAIlB,KAAK,CAACkB,SAAS,KAAK,UAAW,IACpE,OAAOlB,KAAK,CAACmB,KAAK,KAAK,QAAQ,IAC/B,CAACC,MAAM,CAACC,QAAQ,CAACrB,KAAK,CAACmB,KAAK,CAAC,IAC7BnB,KAAK,CAACmB,KAAK,GAAGxB,eAAe,IAC7BK,KAAK,CAACmB,KAAK,GAAG,CAAC,GAAGxB,eAAe,EACjC;IACA,OAAO,IAAI;EACb;EACA,MAAM2B,KAAK,GAAGlB,SAAS,CAACJ,KAAK,CAACsB,KAAK,EAAEjB,SAAS,EAAEC,MAAM,EAAEC,KAAK,GAAG,CAAC,CAAC;EAClE,MAAMgB,MAAM,GAAGnB,SAAS,CAACJ,KAAK,CAACuB,MAAM,EAAElB,SAAS,EAAEC,MAAM,EAAEC,KAAK,GAAG,CAAC,CAAC;EACpE,IAAI,CAACe,KAAK,IAAI,CAACC,MAAM,EAAE,OAAO,IAAI;EAClC,OAAO;IACLd,IAAI,EAAE,OAAO;IACbS,SAAS,EAAElB,KAAK,CAACkB,SAAS;IAC1BC,KAAK,EAAEnB,KAAK,CAACmB,KAAK;IAClBG,KAAK;IACLC;EACF,CAAC;AACH,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIxB,KAAc,IAAyB;EACtE,IAAI,CAACD,QAAQ,CAACC,KAAK,CAAC,IAAIA,KAAK,CAACyB,OAAO,KAAK/B,oBAAoB,EAAE,OAAO,IAAI;EAC3E,IAAIM,KAAK,CAAC0B,IAAI,KAAK,IAAI,EAAE,OAAO;IAAED,OAAO,EAAE/B,oBAAoB;IAAEgC,IAAI,EAAE;EAAK,CAAC;EAC7E,MAAMA,IAAI,GAAGtB,SAAS,CAACJ,KAAK,CAAC0B,IAAI,EAAE,IAAIC,GAAG,CAAS,CAAC,EAAE;IAAEnB,KAAK,EAAE;EAAE,CAAC,CAAC;EACnE,OAAOkB,IAAI,GAAG;IAAED,OAAO,EAAE/B,oBAAoB;IAAEgC;EAAK,CAAC,GAAG,IAAI;AAC9D,CAAC;AAED,OAAO,MAAME,iBAAiB,GAAIC,OAA0B,IAAkB;EAC5ErC,uBAAuB,CAACqC,OAAO,EAAE,eAAe,EAAEjC,mBAAmB,CAAC;EACtE,OAAO;IACL6B,OAAO,EAAE/B,oBAAoB;IAC7BgC,IAAI,EAAEG,OAAO,CAAClB,MAAM,GAAG,CAAC,GAAG;MAAEF,IAAI,EAAE,OAAO;MAAEC,KAAK,EAAE,CAAC,GAAGmB,OAAO,CAAC;MAAEjB,MAAM,EAAEiB,OAAO,CAAC,CAAC;IAAG,CAAC,GAAG;EAC3F,CAAC;AACH,CAAC;AAED,MAAMC,QAAQ,GAAGA,CAACC,IAAsB,EAAEC,MAAc,EAAEC,IAAwB,GAAG,EAAE,KAA0B;EAC/G,IAAI,CAACF,IAAI,EAAE,OAAO,IAAI;EACtB,IAAIA,IAAI,CAACtB,IAAI,KAAK,OAAO,EAAE;IACzB,MAAMyB,KAAK,GAAGH,IAAI,CAACrB,KAAK,CAACyB,OAAO,CAACH,MAAM,CAAC;IACxC,OAAOE,KAAK,IAAI,CAAC,GAAG;MAAEE,KAAK,EAAEL,IAAI;MAAEE,IAAI;MAAEC;IAAM,CAAC,GAAG,IAAI;EACzD;EACA,OAAOJ,QAAQ,CAACC,IAAI,CAACT,KAAK,EAAEU,MAAM,EAAE,CAAC,GAAGC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAIH,QAAQ,CAACC,IAAI,CAACR,MAAM,EAAES,MAAM,EAAE,CAAC,GAAGC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/G,CAAC;AAED,MAAMI,UAAU,GAAIN,IAAsB,IAAwB;EAChE,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI;EACtB,OAAOA,IAAI,CAACtB,IAAI,KAAK,OAAO,GAAGsB,IAAI,GAAGM,UAAU,CAACN,IAAI,CAACT,KAAK,CAAC;AAC9D,CAAC;AAED,MAAMgB,SAAS,GAAGA,CAACP,IAAe,EAAEE,IAAe,EAAEM,MAAsC,KAAgB;EACzG,MAAM,CAACC,OAAO,EAAE,GAAGC,IAAI,CAAC,GAAGR,IAAI;EAC/B,IAAI,CAACO,OAAO,EAAE,OAAOD,MAAM,CAACR,IAAI,CAAC;EACjC,IAAIA,IAAI,CAACtB,IAAI,KAAK,OAAO,EAAE,OAAOsB,IAAI;EACtC,IAAIS,OAAO,KAAK,OAAO,EAAE;IACvB,MAAMlB,KAAK,GAAGgB,SAAS,CAACP,IAAI,CAACT,KAAK,EAAEmB,IAAI,EAAEF,MAAM,CAAC;IACjD,OAAOjB,KAAK,KAAKS,IAAI,CAACT,KAAK,GAAGS,IAAI,GAAG;MAAE,GAAGA,IAAI;MAAET;IAAM,CAAC;EACzD;EACA,MAAMC,MAAM,GAAGe,SAAS,CAACP,IAAI,CAACR,MAAM,EAAEkB,IAAI,EAAEF,MAAM,CAAC;EACnD,OAAOhB,MAAM,KAAKQ,IAAI,CAACR,MAAM,GAAGQ,IAAI,GAAG;IAAE,GAAGA,IAAI;IAAER;EAAO,CAAC;AAC5D,CAAC;AAED,MAAMmB,cAAc,GAAGA,CAACX,IAAe,EAAEC,MAAc,KAAuB;EAC5E,IAAID,IAAI,CAACtB,IAAI,KAAK,OAAO,EAAE;IACzB,MAAMyB,KAAK,GAAGH,IAAI,CAACrB,KAAK,CAACyB,OAAO,CAACH,MAAM,CAAC;IACxC,IAAIE,KAAK,GAAG,CAAC,EAAE,OAAOH,IAAI;IAC1B,MAAMrB,KAAK,GAAGqB,IAAI,CAACrB,KAAK,CAACiC,MAAM,CAAEC,EAAE,IAAKA,EAAE,KAAKZ,MAAM,CAAC;IACtD,IAAItB,KAAK,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;IACnC,MAAMC,MAAM,GAAGmB,IAAI,CAACnB,MAAM,KAAKoB,MAAM,GAAGtB,KAAK,CAACmC,IAAI,CAACC,GAAG,CAACZ,KAAK,EAAExB,KAAK,CAACC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAIoB,IAAI,CAACnB,MAAM;IAC/F,OAAO;MAAE,GAAGmB,IAAI;MAAErB,KAAK;MAAEE;IAAO,CAAC;EACnC;EAEA,MAAMU,KAAK,GAAGoB,cAAc,CAACX,IAAI,CAACT,KAAK,EAAEU,MAAM,CAAC;EAChD,MAAMT,MAAM,GAAGmB,cAAc,CAACX,IAAI,CAACR,MAAM,EAAES,MAAM,CAAC;EAClD,IAAI,CAACV,KAAK,EAAE,OAAOC,MAAM;EACzB,IAAI,CAACA,MAAM,EAAE,OAAOD,KAAK;EACzB,IAAIA,KAAK,KAAKS,IAAI,CAACT,KAAK,IAAIC,MAAM,KAAKQ,IAAI,CAACR,MAAM,EAAE,OAAOQ,IAAI;EAC/D,OAAO;IAAE,GAAGA,IAAI;IAAET,KAAK;IAAEC;EAAO,CAAC;AACnC,CAAC;AAED,MAAMwB,aAAa,GAAGA,CAAChB,IAAe,EAAEiB,WAAgC,KAAuB;EAC7F,IAAIjB,IAAI,CAACtB,IAAI,KAAK,OAAO,EAAE;IACzB,MAAMC,KAAK,GAAGqB,IAAI,CAACrB,KAAK,CAACiC,MAAM,CAAEX,MAAM,IAAKgB,WAAW,CAAClC,GAAG,CAACkB,MAAM,CAAC,CAAC;IACpE,IAAItB,KAAK,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;IACnC,IAAIsC,SAAS,CAACvC,KAAK,EAAEqB,IAAI,CAACrB,KAAK,CAAC,EAAE,OAAOqB,IAAI;IAC7C,MAAMnB,MAAM,GAAGF,KAAK,CAACO,QAAQ,CAACc,IAAI,CAACnB,MAAM,CAAC,GAAGmB,IAAI,CAACnB,MAAM,GAAGF,KAAK,CAACmC,IAAI,CAACC,GAAG,CAACf,IAAI,CAACrB,KAAK,CAACyB,OAAO,CAACJ,IAAI,CAACnB,MAAM,CAAC,EAAEF,KAAK,CAACC,MAAM,GAAG,CAAC,CAAC,CAAE;IAC9H,OAAO;MAAE,GAAGoB,IAAI;MAAErB,KAAK;MAAEE;IAAO,CAAC;EACnC;EACA,MAAMU,KAAK,GAAGyB,aAAa,CAAChB,IAAI,CAACT,KAAK,EAAE0B,WAAW,CAAC;EACpD,MAAMzB,MAAM,GAAGwB,aAAa,CAAChB,IAAI,CAACR,MAAM,EAAEyB,WAAW,CAAC;EACtD,IAAI,CAAC1B,KAAK,EAAE,OAAOC,MAAM;EACzB,IAAI,CAACA,MAAM,EAAE,OAAOD,KAAK;EACzB,IAAIA,KAAK,KAAKS,IAAI,CAACT,KAAK,IAAIC,MAAM,KAAKQ,IAAI,CAACR,MAAM,EAAE,OAAOQ,IAAI;EAC/D,OAAO;IAAE,GAAGA,IAAI;IAAET,KAAK;IAAEC;EAAO,CAAC;AACnC,CAAC;AAED,MAAM0B,SAAS,GAAGA,CAACC,IAAuB,EAAEC,KAAwB,KAClED,IAAI,CAACvC,MAAM,KAAKwC,KAAK,CAACxC,MAAM,IAAIuC,IAAI,CAACE,KAAK,CAAC,CAACvC,IAAI,EAAEqB,KAAK,KAAKrB,IAAI,KAAKsC,KAAK,CAACjB,KAAK,CAAC,CAAC;AAEpF,MAAMmB,QAAQ,GAAGA,CAACH,IAAe,EAAEC,KAAgB,KAAc;EAC/D,IAAID,IAAI,CAACzC,IAAI,KAAK0C,KAAK,CAAC1C,IAAI,EAAE,OAAO,KAAK;EAC1C,IAAIyC,IAAI,CAACzC,IAAI,KAAK,OAAO,IAAI0C,KAAK,CAAC1C,IAAI,KAAK,OAAO,EAAE;IACnD,OAAOyC,IAAI,CAACtC,MAAM,KAAKuC,KAAK,CAACvC,MAAM,IAAIqC,SAAS,CAACC,IAAI,CAACxC,KAAK,EAAEyC,KAAK,CAACzC,KAAK,CAAC;EAC3E;EACA,IAAIwC,IAAI,CAACzC,IAAI,KAAK,OAAO,IAAI0C,KAAK,CAAC1C,IAAI,KAAK,OAAO,EAAE;IACnD,OACEyC,IAAI,CAAChC,SAAS,KAAKiC,KAAK,CAACjC,SAAS,IAClCgC,IAAI,CAAC/B,KAAK,KAAKgC,KAAK,CAAChC,KAAK,IAC1BkC,QAAQ,CAACH,IAAI,CAAC5B,KAAK,EAAE6B,KAAK,CAAC7B,KAAK,CAAC,IACjC+B,QAAQ,CAACH,IAAI,CAAC3B,MAAM,EAAE4B,KAAK,CAAC5B,MAAM,CAAC;EAEvC;EACA,OAAO,KAAK;AACd,CAAC;AAED,MAAM+B,oBAAoB,GAAGA,CAACvB,IAAe,EAAEzB,MAAM,GAAG;EAAEE,KAAK,EAAE;AAAE,CAAC,EAAED,KAAK,GAAG,CAAC,KAAc;EAC3F,IAAIA,KAAK,GAAGV,SAAS,IAAIS,MAAM,CAACE,KAAK,IAAIV,SAAS,EAAE,OAAO,KAAK;EAChEQ,MAAM,CAACE,KAAK,IAAI,CAAC;EACjB,OACEuB,IAAI,CAACtB,IAAI,KAAK,OAAO,IAAK6C,oBAAoB,CAACvB,IAAI,CAACT,KAAK,EAAEhB,MAAM,EAAEC,KAAK,GAAG,CAAC,CAAC,IAAI+C,oBAAoB,CAACvB,IAAI,CAACR,MAAM,EAAEjB,MAAM,EAAEC,KAAK,GAAG,CAAC,CAAE;AAE1I,CAAC;AAED,MAAMgD,eAAe,GAAGA,CAACnB,KAAiB,EAAEJ,MAAc,EAAEwB,YAA2B,KAAwB;EAC7G,IAAIA,YAAY,KAAK,IAAI,IAAI,CAACpB,KAAK,CAAC1B,KAAK,CAACO,QAAQ,CAACuC,YAAY,CAAC,EAAE,OAAO,IAAI;EAC7E,MAAM9C,KAAK,GAAG0B,KAAK,CAAC1B,KAAK,CAACiC,MAAM,CAAEC,EAAE,IAAKA,EAAE,KAAKZ,MAAM,CAAC;EACvD,MAAME,KAAK,GAAGsB,YAAY,KAAK,IAAI,GAAG9C,KAAK,CAACC,MAAM,GAAGD,KAAK,CAACyB,OAAO,CAACqB,YAAY,CAAC;EAChF,IAAItB,KAAK,GAAG,CAAC,EAAE,OAAO,IAAI;EAC1BxB,KAAK,CAAC+C,MAAM,CAACvB,KAAK,EAAE,CAAC,EAAEF,MAAM,CAAC;EAC9B,IAAIiB,SAAS,CAACvC,KAAK,EAAE0B,KAAK,CAAC1B,KAAK,CAAC,EAAE,OAAO0B,KAAK;EAC/C,OAAO;IAAE,GAAGA,KAAK;IAAE1B,KAAK;IAAEE,MAAM,EAAEoB;EAAO,CAAC;AAC5C,CAAC;AAED,OAAO,MAAM0B,iBAAiB,GAAGA,CAACC,MAAmB,EAAE3B,MAAc,KAAkB;EACrF,MAAM4B,OAAO,GAAG9B,QAAQ,CAAC6B,MAAM,CAACjC,IAAI,EAAEM,MAAM,CAAC;EAC7C,IAAI,CAAC4B,OAAO,IAAIA,OAAO,CAACxB,KAAK,CAACxB,MAAM,KAAKoB,MAAM,IAAI,CAAC2B,MAAM,CAACjC,IAAI,EAAE,OAAOiC,MAAM;EAC9E,OAAO;IACLlC,OAAO,EAAE/B,oBAAoB;IAC7BgC,IAAI,EAAEY,SAAS,CAACqB,MAAM,CAACjC,IAAI,EAAEkC,OAAO,CAAC3B,IAAI,EAAGF,IAAI,IAAMA,IAAI,CAACtB,IAAI,KAAK,OAAO,GAAG;MAAE,GAAGsB,IAAI;MAAEnB,MAAM,EAAEoB;IAAO,CAAC,GAAGD,IAAK;EACnH,CAAC;AACH,CAAC;AAED,OAAO,MAAM8B,kBAAkB,GAAGA,CAACF,MAAmB,EAAE3B,MAAc,KAAcF,QAAQ,CAAC6B,MAAM,CAACjC,IAAI,EAAEM,MAAM,CAAC,EAAEI,KAAK,CAACxB,MAAM,KAAKoB,MAAM;AAE1I,OAAO,MAAM8B,eAAe,GAAGA,CAACH,MAAmB,EAAE3B,MAAc,KAAkB;EACnF,IAAI,CAAC2B,MAAM,CAACjC,IAAI,IAAI,CAACI,QAAQ,CAAC6B,MAAM,CAACjC,IAAI,EAAEM,MAAM,CAAC,EAAE,OAAO2B,MAAM;EACjE,OAAO;IAAElC,OAAO,EAAE/B,oBAAoB;IAAEgC,IAAI,EAAEgB,cAAc,CAACiB,MAAM,CAACjC,IAAI,EAAEM,MAAM;EAAE,CAAC;AACrF,CAAC;AAQD,OAAO,MAAM+B,YAAY,GAAGA,CAACJ,MAAmB,EAAEK,OAA4B,KAAkB;EAC9F,IAAI,CAAC7D,QAAQ,CAAC6D,OAAO,CAAChC,MAAM,CAAC,IAAIF,QAAQ,CAAC6B,MAAM,CAACjC,IAAI,EAAEsC,OAAO,CAAChC,MAAM,CAAC,EAAE,OAAO2B,MAAM;EACrF,IAAI,CAACA,MAAM,CAACjC,IAAI,EAAE;IAChB,OAAOsC,OAAO,CAACC,YAAY,KAAK,IAAI,GAAGrC,iBAAiB,CAAC,CAACoC,OAAO,CAAChC,MAAM,CAAC,CAAC,GAAG2B,MAAM;EACrF;EACA,IAAIK,OAAO,CAACC,YAAY,KAAK,IAAI,EAAE,OAAON,MAAM;EAChD,MAAMO,MAAM,GAAGpC,QAAQ,CAAC6B,MAAM,CAACjC,IAAI,EAAEsC,OAAO,CAACC,YAAY,CAAC;EAC1D,IAAI,CAACC,MAAM,EAAE,OAAOP,MAAM;EAC1B,MAAMvB,KAAK,GAAGmB,eAAe,CAACW,MAAM,CAAC9B,KAAK,EAAE4B,OAAO,CAAChC,MAAM,EAAEgC,OAAO,CAACR,YAAY,IAAI,IAAI,CAAC;EACzF,IAAI,CAACpB,KAAK,EAAE,OAAOuB,MAAM;EACzB,OAAO;IAAElC,OAAO,EAAE/B,oBAAoB;IAAEgC,IAAI,EAAEY,SAAS,CAACqB,MAAM,CAACjC,IAAI,EAAEwC,MAAM,CAACjC,IAAI,EAAE,MAAMG,KAAK;EAAE,CAAC;AAClG,CAAC;AAED,OAAO,MAAM+B,gBAAgB,GAAGA,CAACR,MAAmB,EAAES,MAAmB,KAAkB;EACzF,IAAI,CAACT,MAAM,CAACjC,IAAI,IAAI0C,MAAM,CAACpC,MAAM,KAAKoC,MAAM,CAACH,YAAY,EAAE,OAAON,MAAM;EACxE,MAAMU,MAAM,GAAGvC,QAAQ,CAAC6B,MAAM,CAACjC,IAAI,EAAE0C,MAAM,CAACpC,MAAM,CAAC;EACnD,MAAMkC,MAAM,GAAGpC,QAAQ,CAAC6B,MAAM,CAACjC,IAAI,EAAE0C,MAAM,CAACH,YAAY,CAAC;EACzD,IAAI,CAACI,MAAM,IAAI,CAACH,MAAM,EAAE,OAAOP,MAAM;EAErC,IAAIS,MAAM,CAAC3D,IAAI,KAAK,KAAK,IAAI4D,MAAM,CAACjC,KAAK,KAAK8B,MAAM,CAAC9B,KAAK,EAAE;IAC1D,MAAMA,KAAK,GAAGmB,eAAe,CAACc,MAAM,CAACjC,KAAK,EAAEgC,MAAM,CAACpC,MAAM,EAAEoC,MAAM,CAACZ,YAAY,CAAC;IAC/E,IAAI,CAACpB,KAAK,IAAIA,KAAK,KAAKiC,MAAM,CAACjC,KAAK,EAAE,OAAOuB,MAAM;IACnD,OAAO;MAAElC,OAAO,EAAE/B,oBAAoB;MAAEgC,IAAI,EAAEY,SAAS,CAACqB,MAAM,CAACjC,IAAI,EAAE2C,MAAM,CAACpC,IAAI,EAAE,MAAMG,KAAK;IAAE,CAAC;EAClG;EAEA,MAAMkC,iBAAiB,GAAG5B,cAAc,CAACiB,MAAM,CAACjC,IAAI,EAAE0C,MAAM,CAACpC,MAAM,CAAC;EACpE,IAAI,CAACsC,iBAAiB,EAAE,OAAOX,MAAM;EACrC,MAAMY,UAAU,GAAGzC,QAAQ,CAACwC,iBAAiB,EAAEF,MAAM,CAACH,YAAY,CAAC;EACnE,IAAI,CAACM,UAAU,EAAE,OAAOZ,MAAM;EAE9B,IAAIS,MAAM,CAAC3D,IAAI,KAAK,KAAK,EAAE;IACzB,MAAM2B,KAAK,GAAGmB,eAAe,CAACgB,UAAU,CAACnC,KAAK,EAAEgC,MAAM,CAACpC,MAAM,EAAEoC,MAAM,CAACZ,YAAY,CAAC;IACnF,IAAI,CAACpB,KAAK,EAAE,OAAOuB,MAAM;IACzB,OAAO;MAAElC,OAAO,EAAE/B,oBAAoB;MAAEgC,IAAI,EAAEY,SAAS,CAACgC,iBAAiB,EAAEC,UAAU,CAACtC,IAAI,EAAE,MAAMG,KAAK;IAAE,CAAC;EAC5G;EAEA,MAAMlB,SAAyB,GAAGkD,MAAM,CAACI,IAAI,KAAK,MAAM,IAAIJ,MAAM,CAACI,IAAI,KAAK,OAAO,GAAG,YAAY,GAAG,UAAU;EAC/G,MAAMC,SAAqB,GAAG;IAAEhE,IAAI,EAAE,OAAO;IAAEC,KAAK,EAAE,CAAC0D,MAAM,CAACpC,MAAM,CAAC;IAAEpB,MAAM,EAAEwD,MAAM,CAACpC;EAAO,CAAC;EAC9F,MAAM0C,SAAS,GAAGN,MAAM,CAACI,IAAI,KAAK,MAAM,IAAIJ,MAAM,CAACI,IAAI,KAAK,KAAK;EACjE,MAAMG,QAAQ,GAAGrC,SAAS,CAACgC,iBAAiB,EAAEC,UAAU,CAACtC,IAAI,EAAGF,IAAI,KAAM;IACxEtB,IAAI,EAAE,OAAO;IACbS,SAAS;IACTC,KAAK,EAAE,GAAG;IACVG,KAAK,EAAEoD,SAAS,GAAGD,SAAS,GAAG1C,IAAI;IACnCR,MAAM,EAAEmD,SAAS,GAAG3C,IAAI,GAAG0C;EAC7B,CAAC,CAAC,CAAC;EACH,IAAI,CAACnB,oBAAoB,CAACqB,QAAQ,CAAC,IAAItB,QAAQ,CAACsB,QAAQ,EAAEhB,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOiC,MAAM;EACrF,OAAO;IACLlC,OAAO,EAAE/B,oBAAoB;IAC7BgC,IAAI,EAAEiD;EACR,CAAC;AACH,CAAC;AAED,OAAO,MAAMC,oBAAoB,GAAGA,CAACjB,MAAmB,EAAEkB,kBAAqC,KAAkB;EAC/GrF,uBAAuB,CAACqF,kBAAkB,EAAE,eAAe,EAAEjF,mBAAmB,CAAC;EACjF,MAAMoD,WAAW,GAAG,IAAIrB,GAAG,CAACkD,kBAAkB,CAAC;EAC/C,MAAMnD,IAAI,GAAGiC,MAAM,CAACjC,IAAI,GAAGqB,aAAa,CAACY,MAAM,CAACjC,IAAI,EAAEsB,WAAW,CAAC,GAAG,IAAI;EACzE,MAAM8B,OAAO,GAAG,IAAInD,GAAG,CAAS,CAAC;EACjCoD,cAAc,CAACrD,IAAI,EAAEoD,OAAO,CAAC;EAC7B,MAAME,OAAO,GAAGH,kBAAkB,CAAClC,MAAM,CAAEX,MAAM,IAAK,CAAC8C,OAAO,CAAChE,GAAG,CAACkB,MAAM,CAAC,CAAC;EAC3E,IAAIgD,OAAO,CAACrE,MAAM,KAAK,CAAC,EAAE,OAAOe,IAAI,KAAKiC,MAAM,CAACjC,IAAI,GAAGiC,MAAM,GAAG;IAAElC,OAAO,EAAE/B,oBAAoB;IAAEgC;EAAK,CAAC;EACxG,IAAI,CAACA,IAAI,EAAE,OAAOE,iBAAiB,CAACoD,OAAO,CAAC;EAC5C,MAAMd,MAAM,GAAG7B,UAAU,CAACX,IAAI,CAAC;EAC/B,IAAI,CAACwC,MAAM,EAAE,OAAOtC,iBAAiB,CAACoD,OAAO,CAAC;EAC9C,MAAMpB,OAAO,GAAG9B,QAAQ,CAACJ,IAAI,EAAEwC,MAAM,CAACtD,MAAM,CAAC;EAC7C,IAAI,CAACgD,OAAO,EAAE,OAAOhC,iBAAiB,CAACoD,OAAO,CAAC;EAC/C,MAAM5C,KAAK,GAAG;IAAE,GAAGwB,OAAO,CAACxB,KAAK;IAAE1B,KAAK,EAAE,CAAC,GAAGkD,OAAO,CAACxB,KAAK,CAAC1B,KAAK,EAAE,GAAGsE,OAAO;EAAE,CAAC;EAC/E,OAAO;IAAEvD,OAAO,EAAE/B,oBAAoB;IAAEgC,IAAI,EAAEY,SAAS,CAACZ,IAAI,EAAEkC,OAAO,CAAC3B,IAAI,EAAE,MAAMG,KAAK;EAAE,CAAC;AAC5F,CAAC;AAED,MAAM2C,cAAc,GAAGA,CAAChD,IAAsB,EAAEkD,GAAgB,KAAW;EACzE,IAAI,CAAClD,IAAI,EAAE;EACX,IAAIA,IAAI,CAACtB,IAAI,KAAK,OAAO,EAAE;IACzBsB,IAAI,CAACrB,KAAK,CAACwE,OAAO,CAAErE,IAAI,IAAKoE,GAAG,CAAClE,GAAG,CAACF,IAAI,CAAC,CAAC;IAC3C;EACF;EACAkE,cAAc,CAAChD,IAAI,CAACT,KAAK,EAAE2D,GAAG,CAAC;EAC/BF,cAAc,CAAChD,IAAI,CAACR,MAAM,EAAE0D,GAAG,CAAC;AAClC,CAAC;AAED,OAAO,MAAME,gBAAgB,GAAGA,CAACxB,MAAmB,EAAE1B,IAAe,EAAEd,KAAa,KAAkB;EACpG,IAAI,CAACwC,MAAM,CAACjC,IAAI,IAAI,CAACN,MAAM,CAACC,QAAQ,CAACF,KAAK,CAAC,EAAE,OAAOwC,MAAM;EAC1D,IAAIO,MAAiB,GAAGP,MAAM,CAACjC,IAAI;EACnC,KAAK,MAAMc,OAAO,IAAIP,IAAI,EAAE;IAC1B,IAAIiC,MAAM,CAACzD,IAAI,KAAK,OAAO,EAAE,OAAOkD,MAAM;IAC1CO,MAAM,GAAGA,MAAM,CAAC1B,OAAO,CAAC;EAC1B;EACA,IAAI0B,MAAM,CAACzD,IAAI,KAAK,OAAO,EAAE,OAAOkD,MAAM;EAC1C,MAAMyB,SAAS,GAAGvC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGnD,eAAe,EAAEkD,IAAI,CAACwC,GAAG,CAAC1F,eAAe,EAAEwB,KAAK,CAAC,CAAC;EACjF,IAAIiE,SAAS,KAAKlB,MAAM,CAAC/C,KAAK,EAAE,OAAOwC,MAAM;EAC7C,OAAO;IACLlC,OAAO,EAAE/B,oBAAoB;IAC7BgC,IAAI,EAAEY,SAAS,CAACqB,MAAM,CAACjC,IAAI,EAAEO,IAAI,EAAGF,IAAI,IAAMA,IAAI,CAACtB,IAAI,KAAK,OAAO,GAAG;MAAE,GAAGsB,IAAI;MAAEZ,KAAK,EAAEiE;IAAU,CAAC,GAAGrD,IAAK;EAC7G,CAAC;AACH,CAAC;AAED,MAAMuD,SAAS,GAAIlB,MAAmB,IACpCA,MAAM,CAAC3D,IAAI,KAAK,KAAK,GACjB,OAAO2D,MAAM,CAACpC,MAAM,IAAIoC,MAAM,CAACH,YAAY,IAAIG,MAAM,CAACZ,YAAY,KAAK,IAAI,GAAG,MAAM,GAAG,UAAUY,MAAM,CAACZ,YAAY,EAAE,EAAE,GACxH,SAASY,MAAM,CAACpC,MAAM,IAAIoC,MAAM,CAACH,YAAY,IAAIG,MAAM,CAACI,IAAI,EAAE;AAEpE,OAAO,MAAMe,eAAe,GAAGA,CAACrC,IAAwB,EAAEC,KAAyB,KACjFD,IAAI,KAAKC,KAAK,IACb,CAAC,CAACD,IAAI,IACL,CAAC,CAACC,KAAK,IACPD,IAAI,CAACzC,IAAI,KAAK0C,KAAK,CAAC1C,IAAI,IACxByC,IAAI,CAAClB,MAAM,KAAKmB,KAAK,CAACnB,MAAM,IAC5BkB,IAAI,CAACe,YAAY,KAAKd,KAAK,CAACc,YAAY,KACvCf,IAAI,CAACzC,IAAI,KAAK,KAAK,IAAI0C,KAAK,CAAC1C,IAAI,KAAK,KAAK,GACxCyC,IAAI,CAACM,YAAY,KAAKL,KAAK,CAACK,YAAY,GACxCN,IAAI,CAACzC,IAAI,KAAK,OAAO,IAAI0C,KAAK,CAAC1C,IAAI,KAAK,OAAO,IAAIyC,IAAI,CAACsB,IAAI,KAAKrB,KAAK,CAACqB,IAAI,CAAE;AAErF,MAAMgB,YAAY,GAAGA,CAAChB,IAAe,EAAEiB,KAAsC,KAAc;EACzF,IAAIA,KAAK,KAAK,KAAK,EAAE,OAAO,KAAK;EACjC,MAAMvE,SAAS,GAAGsD,IAAI,KAAK,MAAM,IAAIA,IAAI,KAAK,OAAO,GAAG,YAAY,GAAG,UAAU;EACjF,OAAOiB,KAAK,KAAK,MAAM,IAAIA,KAAK,KAAKvE,SAAS;AAChD,CAAC;AAED,MAAMwE,aAAa,GAAGA,CAAC3D,IAAsB,EAAE4D,MAAoB,GAAG,EAAE,KAAmB;EACzF,IAAI,CAAC5D,IAAI,EAAE,OAAO4D,MAAM;EACxB,IAAI5D,IAAI,CAACtB,IAAI,KAAK,OAAO,EAAEkF,MAAM,CAAC3E,IAAI,CAACe,IAAI,CAAC,CAAC,KACxC;IACH2D,aAAa,CAAC3D,IAAI,CAACT,KAAK,EAAEqE,MAAM,CAAC;IACjCD,aAAa,CAAC3D,IAAI,CAACR,MAAM,EAAEoE,MAAM,CAAC;EACpC;EACA,OAAOA,MAAM;AACf,CAAC;AAED,MAAMC,UAAU,GAAGA,CAAC7D,IAAe,EAAEE,IAAe,KAAuB;EACzE,IAAI4D,OAAO,GAAG9D,IAAI;EAClB,KAAK,MAAMS,OAAO,IAAIP,IAAI,EAAE;IAC1B,IAAI4D,OAAO,CAACpF,IAAI,KAAK,OAAO,EAAE,OAAO,IAAI;IACzCoF,OAAO,GAAGA,OAAO,CAACrD,OAAO,CAAC;EAC5B;EACA,OAAOqD,OAAO;AAChB,CAAC;AAED,MAAMC,wBAAwB,GAAGA,CAACnC,MAAmB,EAAEU,MAAoB,EAAEJ,YAAoB,EAAEO,IAAe,KAAc;EAC9H,IAAI,CAACb,MAAM,CAACjC,IAAI,IAAI2C,MAAM,CAACjC,KAAK,CAAC1B,KAAK,CAACC,MAAM,KAAK,CAAC,IAAI0D,MAAM,CAACpC,IAAI,CAACtB,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK;EAC7F,MAAM6B,OAAO,GAAG6B,MAAM,CAACpC,IAAI,CAACoC,MAAM,CAACpC,IAAI,CAACtB,MAAM,GAAG,CAAC,CAAE;EACpD,MAAMoF,MAAM,GAAGH,UAAU,CAACjC,MAAM,CAACjC,IAAI,EAAE2C,MAAM,CAACpC,IAAI,CAAC+D,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EAChE,IAAI,CAACD,MAAM,IAAIA,MAAM,CAACtF,IAAI,KAAK,OAAO,IAAIsF,MAAM,CAAC5E,KAAK,KAAK,GAAG,EAAE,OAAO,KAAK;EAC5E,MAAMD,SAAyB,GAAGsD,IAAI,KAAK,MAAM,IAAIA,IAAI,KAAK,OAAO,GAAG,YAAY,GAAG,UAAU;EACjG,MAAMyB,WAAW,GAAGzB,IAAI,KAAK,MAAM,IAAIA,IAAI,KAAK,KAAK;EACrD,IAAIuB,MAAM,CAAC7E,SAAS,KAAKA,SAAS,IAAKsB,OAAO,KAAK,OAAO,KAAMyD,WAAW,EAAE,OAAO,KAAK;EACzF,MAAMC,OAAO,GAAGH,MAAM,CAACvD,OAAO,KAAK,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;EAChE,OAAO0D,OAAO,CAACzF,IAAI,KAAK,OAAO,IAAIyF,OAAO,CAACxF,KAAK,CAACO,QAAQ,CAACgD,YAAY,CAAC;AACzE,CAAC;AAED,MAAMkC,gBAAgB,GAAGA,CACvBpE,IAAe,EACfxB,KAAK,GAAG,CAAC,EACT6F,KAA0E,GAAG;EAC3E5F,KAAK,EAAE,CAAC;EACR6F,QAAQ,EAAE,CAAC;EACXC,SAAS,EAAE,IAAIC,GAAG,CAAC;AACrB,CAAC,KACE;EACHH,KAAK,CAAC5F,KAAK,IAAI,CAAC;EAChB4F,KAAK,CAACC,QAAQ,GAAGxD,IAAI,CAACwC,GAAG,CAACe,KAAK,CAACC,QAAQ,EAAE9F,KAAK,CAAC;EAChD,IAAIwB,IAAI,CAACtB,IAAI,KAAK,OAAO,EAAEsB,IAAI,CAACrB,KAAK,CAACwE,OAAO,CAAElD,MAAM,IAAKoE,KAAK,CAACE,SAAS,CAACE,GAAG,CAACxE,MAAM,EAAEzB,KAAK,CAAC,CAAC,CAAC,KACzF;IACH4F,gBAAgB,CAACpE,IAAI,CAACT,KAAK,EAAEf,KAAK,GAAG,CAAC,EAAE6F,KAAK,CAAC;IAC9CD,gBAAgB,CAACpE,IAAI,CAACR,MAAM,EAAEhB,KAAK,GAAG,CAAC,EAAE6F,KAAK,CAAC;EACjD;EACA,OAAOA,KAAK;AACd,CAAC;AAED,OAAO,MAAMK,mBAAmB,GAAGA,CAAC9C,MAAmB,EAAE3B,MAAc,EAAEgC,OAA+B,KAAwB;EAC9H,IAAI,CAACA,OAAO,CAAC0C,OAAO,IAAI,CAAC/C,MAAM,CAACjC,IAAI,EAAE,OAAO,EAAE;EAC/C,MAAM2C,MAAM,GAAGvC,QAAQ,CAAC6B,MAAM,CAACjC,IAAI,EAAEM,MAAM,CAAC;EAC5C,IAAI,CAACqC,MAAM,EAAE,OAAO,EAAE;EACtB,MAAMC,iBAAiB,GAAG5B,cAAc,CAACiB,MAAM,CAACjC,IAAI,EAAEM,MAAM,CAAC;EAC7D,MAAM2E,UAAU,GAAGrC,iBAAiB,GAAG6B,gBAAgB,CAAC7B,iBAAiB,CAAC,GAAG,IAAI;EACjF,MAAMsC,OAA0B,GAAG,EAAE;EACrC,MAAMC,IAAI,GAAG,IAAIlF,GAAG,CAAS,CAAC;EAC9B,MAAMZ,GAAG,GAAGA,CAACmD,MAAmC,EAAE4C,IAAI,GAAG,KAAK,KAAK;IACjE,MAAMlE,EAAE,GAAG0C,SAAS,CAACpB,MAAM,CAACE,MAAM,CAAC;IACnC,IAAI0C,IAAI,IAAID,IAAI,CAAC/F,GAAG,CAAC8B,EAAE,CAAC,EAAE;IAC1BiE,IAAI,CAAC9F,GAAG,CAAC6B,EAAE,CAAC;IACZgE,OAAO,CAAC5F,IAAI,CAAC;MAAE,GAAGkD,MAAM;MAAEtB;IAAG,CAAC,CAAC;EACjC,CAAC;EAED,KAAK,MAAMR,KAAK,IAAIsD,aAAa,CAAC/B,MAAM,CAACjC,IAAI,CAAC,EAAE;IAC9C,MAAMqF,SAAS,GAAG3E,KAAK,KAAKiC,MAAM,CAACjC,KAAK;IACxC,MAAM4E,SAAS,GAAG5E,KAAK,CAAC1B,KAAK,CAACiC,MAAM,CAAEC,EAAE,IAAKA,EAAE,KAAKZ,MAAM,CAAC;IAC3D,MAAMiC,YAAY,GAAG8C,SAAS,GAAGC,SAAS,CAAC,CAAC,CAAC,GAAG5E,KAAK,CAACxB,MAAM;IAC5D,IAAI,CAACqD,YAAY,EAAE;IACnB,KAAK,MAAMT,YAAY,IAAIwD,SAAS,EAAE;MACpC,MAAM5C,MAAmB,GAAG;QAAE3D,IAAI,EAAE,KAAK;QAAEuB,MAAM;QAAEiC,YAAY;QAAET;MAAa,CAAC;MAC/EzC,GAAG,CACD;QACEkG,IAAI,EAAE,KAAK;QACXhD,YAAY;QACZT,YAAY;QACZY;MACF,CAAC,EACD2C,SAAS,IAAI3E,KAAK,CAAC1B,KAAK,CAAC2D,MAAM,CAACnC,KAAK,GAAG,CAAC,CAAC,KAAKsB,YACjD,CAAC;IACH;IACA,IAAIuD,SAAS,EAAE;MACb,MAAM3C,MAAmB,GAAG;QAAE3D,IAAI,EAAE,KAAK;QAAEuB,MAAM;QAAEiC,YAAY;QAAET,YAAY,EAAE;MAAK,CAAC;MACrFzC,GAAG,CACD;QACEkG,IAAI,EAAE,KAAK;QACXhD,YAAY;QACZT,YAAY,EAAE,IAAI;QAClBY;MACF,CAAC,EACDC,MAAM,CAACnC,KAAK,KAAKE,KAAK,CAAC1B,KAAK,CAACC,MAAM,GAAG,CACxC,CAAC;IACH,CAAC,MAAM;MACLI,GAAG,CAAC;QACFkG,IAAI,EAAE,OAAO;QACbhD,YAAY;QACZG,MAAM,EAAE;UAAE3D,IAAI,EAAE,KAAK;UAAEuB,MAAM;UAAEiC,YAAY;UAAET,YAAY,EAAE;QAAK;MAClE,CAAC,CAAC;IACJ;IAEA,KAAK,MAAMgB,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAW;MAC9D,IAAI,CAACgB,YAAY,CAAChB,IAAI,EAAER,OAAO,CAACyB,KAAK,CAAC,EAAE;MACxC,MAAMrB,MAAmB,GAAG;QAAE3D,IAAI,EAAE,OAAO;QAAEuB,MAAM;QAAEiC,YAAY;QAAEO;MAAK,CAAC;MACzE,MAAM0C,WAAW,GAAGP,UAAU,EAAEL,SAAS,CAACa,GAAG,CAAClD,YAAY,CAAC;MAC3D,MAAMmD,aAAa,GACjB,CAACT,UAAU,IACXO,WAAW,KAAKG,SAAS,IACzBV,UAAU,CAACnG,KAAK,GAAG,CAAC,GAAGV,SAAS,IAChC+C,IAAI,CAACwC,GAAG,CAACsB,UAAU,CAACN,QAAQ,EAAEa,WAAW,GAAG,CAAC,CAAC,GAAGrH,SAAS;MAC5DkB,GAAG,CACD;QACEkG,IAAI,EAAE,OAAO;QACbhD,YAAY;QACZO,IAAI;QACJJ;MACF,CAAC,EACDgD,aAAa,IAAItB,wBAAwB,CAACnC,MAAM,EAAEU,MAAM,EAAEJ,YAAY,EAAEO,IAAI,CAC9E,CAAC;IACH;EACF;EACA,OAAOoC,OAAO;AAChB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/panes-layout.ts"],"sourcesContent":["import { assertUniqueStableUiIds, isStableUiId } from \"./stable-id\";\n\nexport const PANES_LAYOUT_VERSION = 2 as const;\nexport const PANES_MIN_RATIO = 0.08;\nexport const PANES_MAX_ID_LENGTH = 160;\n\nexport type PanesDirection = \"horizontal\" | \"vertical\";\nexport type PanesSide = \"left\" | \"right\" | \"top\" | \"bottom\";\nexport type PanesPathSegment = \"first\" | \"second\";\nexport type PanesPath = readonly PanesPathSegment[];\n\nexport type PanesGroup = {\n type: \"group\";\n items: string[];\n active: string;\n};\n\nexport type PanesSplit = {\n type: \"split\";\n direction: PanesDirection;\n ratio: number;\n first: PanesNode;\n second: PanesNode;\n};\n\nexport type PanesNode = PanesGroup | PanesSplit;\n\nexport type PanesLayout = {\n version: typeof PANES_LAYOUT_VERSION;\n root: PanesNode | null;\n};\n\nexport type PanesIntent =\n | {\n type: \"tab\";\n itemId: string;\n targetItemId: string;\n beforeItemId: string | null;\n }\n | {\n type: \"split\";\n itemId: string;\n targetItemId: string;\n side: PanesSide;\n };\n\nexport type PanesDropTarget = {\n id: string;\n kind: \"tab\" | \"group\" | \"split\";\n targetItemId: string;\n beforeItemId?: string | null;\n side?: PanesSide;\n intent: PanesIntent;\n};\n\nexport type PanesDropTargetOptions = {\n movable: boolean;\n split: false | PanesDirection | \"both\";\n};\n\nconst MAX_DEPTH = 12;\nconst MAX_NODES = 64;\n\ntype LocatedGroup = {\n group: PanesGroup;\n path: PanesPathSegment[];\n index: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => !!value && typeof value === \"object\" && !Array.isArray(value);\n\nconst isItemId = (value: unknown): value is string => isStableUiId(value, PANES_MAX_ID_LENGTH);\n\nconst parseNode = (value: unknown, usedItems: Set<string>, budget: { nodes: number }, depth = 0): PanesNode | null => {\n if (!isRecord(value) || depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return null;\n budget.nodes += 1;\n\n if (value.type === \"group\") {\n if (!Array.isArray(value.items) || value.items.length === 0 || !isItemId(value.active)) return null;\n const items: string[] = [];\n for (const item of value.items) {\n if (!isItemId(item) || usedItems.has(item)) return null;\n usedItems.add(item);\n items.push(item);\n }\n if (!items.includes(value.active)) return null;\n return { type: \"group\", items, active: value.active };\n }\n\n if (\n value.type !== \"split\" ||\n (value.direction !== \"horizontal\" && value.direction !== \"vertical\") ||\n typeof value.ratio !== \"number\" ||\n !Number.isFinite(value.ratio) ||\n value.ratio < PANES_MIN_RATIO ||\n value.ratio > 1 - PANES_MIN_RATIO\n ) {\n return null;\n }\n const first = parseNode(value.first, usedItems, budget, depth + 1);\n const second = parseNode(value.second, usedItems, budget, depth + 1);\n if (!first || !second) return null;\n return {\n type: \"split\",\n direction: value.direction,\n ratio: value.ratio,\n first,\n second,\n };\n};\n\nexport const parsePanesLayout = (value: unknown): PanesLayout | null => {\n if (!isRecord(value) || value.version !== PANES_LAYOUT_VERSION) return null;\n if (value.root === null) return { version: PANES_LAYOUT_VERSION, root: null };\n const root = parseNode(value.root, new Set<string>(), { nodes: 0 });\n return root ? { version: PANES_LAYOUT_VERSION, root } : null;\n};\n\nexport const createPanesLayout = (itemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(itemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n return {\n version: PANES_LAYOUT_VERSION,\n root: itemIds.length > 0 ? { type: \"group\", items: [...itemIds], active: itemIds[0]! } : null,\n };\n};\n\nconst findItem = (node: PanesNode | null, itemId: string, path: PanesPathSegment[] = []): LocatedGroup | null => {\n if (!node) return null;\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n return index >= 0 ? { group: node, path, index } : null;\n }\n return findItem(node.first, itemId, [...path, \"first\"]) ?? findItem(node.second, itemId, [...path, \"second\"]);\n};\n\nconst firstGroup = (node: PanesNode | null): PanesGroup | null => {\n if (!node) return null;\n return node.type === \"group\" ? node : firstGroup(node.first);\n};\n\nconst mapAtPath = (node: PanesNode, path: PanesPath, update: (node: PanesNode) => PanesNode): PanesNode => {\n const [segment, ...rest] = path;\n if (!segment) return update(node);\n if (node.type !== \"split\") return node;\n if (segment === \"first\") {\n const first = mapAtPath(node.first, rest, update);\n return first === node.first ? node : { ...node, first };\n }\n const second = mapAtPath(node.second, rest, update);\n return second === node.second ? node : { ...node, second };\n};\n\nconst removeFromNode = (node: PanesNode, itemId: string): PanesNode | null => {\n if (node.type === \"group\") {\n const index = node.items.indexOf(itemId);\n if (index < 0) return node;\n const items = node.items.filter((id) => id !== itemId);\n if (items.length === 0) return null;\n const active = node.active === itemId ? items[Math.min(index, items.length - 1)]! : node.active;\n return { ...node, items, active };\n }\n\n const first = removeFromNode(node.first, itemId);\n const second = removeFromNode(node.second, itemId);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst reconcileNode = (node: PanesNode, desiredOpen: ReadonlySet<string>): PanesNode | null => {\n if (node.type === \"group\") {\n const items = node.items.filter((itemId) => desiredOpen.has(itemId));\n if (items.length === 0) return null;\n if (sameItems(items, node.items)) return node;\n const active = items.includes(node.active) ? node.active : items[Math.min(node.items.indexOf(node.active), items.length - 1)]!;\n return { ...node, items, active };\n }\n const first = reconcileNode(node.first, desiredOpen);\n const second = reconcileNode(node.second, desiredOpen);\n if (!first) return second;\n if (!second) return first;\n if (first === node.first && second === node.second) return node;\n return { ...node, first, second };\n};\n\nconst sameItems = (left: readonly string[], right: readonly string[]): boolean =>\n left.length === right.length && left.every((item, index) => item === right[index]);\n\nconst sameNode = (left: PanesNode, right: PanesNode): boolean => {\n if (left.type !== right.type) return false;\n if (left.type === \"group\" && right.type === \"group\") {\n return left.active === right.active && sameItems(left.items, right.items);\n }\n if (left.type === \"split\" && right.type === \"split\") {\n return (\n left.direction === right.direction &&\n left.ratio === right.ratio &&\n sameNode(left.first, right.first) &&\n sameNode(left.second, right.second)\n );\n }\n return false;\n};\n\nconst isWithinLayoutLimits = (node: PanesNode, budget = { nodes: 0 }, depth = 0): boolean => {\n if (depth > MAX_DEPTH || budget.nodes >= MAX_NODES) return false;\n budget.nodes += 1;\n return (\n node.type === \"group\" || (isWithinLayoutLimits(node.first, budget, depth + 1) && isWithinLayoutLimits(node.second, budget, depth + 1))\n );\n};\n\nconst insertIntoGroup = (group: PanesGroup, itemId: string, beforeItemId: string | null): PanesGroup | null => {\n if (beforeItemId !== null && !group.items.includes(beforeItemId)) return null;\n const items = group.items.filter((id) => id !== itemId);\n const index = beforeItemId === null ? items.length : items.indexOf(beforeItemId);\n if (index < 0) return null;\n items.splice(index, 0, itemId);\n if (sameItems(items, group.items)) return group;\n return { ...group, items, active: itemId };\n};\n\nexport const activatePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n const located = findItem(layout.root, itemId);\n if (!located || located.group.active === itemId || !layout.root) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, located.path, (node) => (node.type === \"group\" ? { ...node, active: itemId } : node)),\n };\n};\n\nexport const isPanesItemVisible = (layout: PanesLayout, itemId: string): boolean => findItem(layout.root, itemId)?.group.active === itemId;\n\nexport const removePanesItem = (layout: PanesLayout, itemId: string): PanesLayout => {\n if (!layout.root || !findItem(layout.root, itemId)) return layout;\n return { version: PANES_LAYOUT_VERSION, root: removeFromNode(layout.root, itemId) };\n};\n\nexport type AddPanesItemOptions = {\n itemId: string;\n targetItemId: string | null;\n beforeItemId?: string | null;\n};\n\nexport const addPanesItem = (layout: PanesLayout, options: AddPanesItemOptions): PanesLayout => {\n if (!isItemId(options.itemId) || findItem(layout.root, options.itemId)) return layout;\n if (!layout.root) {\n return options.targetItemId === null ? createPanesLayout([options.itemId]) : layout;\n }\n if (options.targetItemId === null) return layout;\n const target = findItem(layout.root, options.targetItemId);\n if (!target) return layout;\n const group = insertIntoGroup(target.group, options.itemId, options.beforeItemId ?? null);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, target.path, () => group) };\n};\n\nexport const applyPanesIntent = (layout: PanesLayout, intent: PanesIntent): PanesLayout => {\n if (!layout.root || intent.itemId === intent.targetItemId) return layout;\n const source = findItem(layout.root, intent.itemId);\n const target = findItem(layout.root, intent.targetItemId);\n if (!source || !target) return layout;\n\n if (intent.type === \"tab\" && source.group === target.group) {\n const group = insertIntoGroup(source.group, intent.itemId, intent.beforeItemId);\n if (!group || group === source.group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(layout.root, source.path, () => group) };\n }\n\n const rootWithoutSource = removeFromNode(layout.root, intent.itemId);\n if (!rootWithoutSource) return layout;\n const nextTarget = findItem(rootWithoutSource, intent.targetItemId);\n if (!nextTarget) return layout;\n\n if (intent.type === \"tab\") {\n const group = insertIntoGroup(nextTarget.group, intent.itemId, intent.beforeItemId);\n if (!group) return layout;\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(rootWithoutSource, nextTarget.path, () => group) };\n }\n\n const direction: PanesDirection = intent.side === \"left\" || intent.side === \"right\" ? \"horizontal\" : \"vertical\";\n const itemGroup: PanesGroup = { type: \"group\", items: [intent.itemId], active: intent.itemId };\n const itemFirst = intent.side === \"left\" || intent.side === \"top\";\n const nextRoot = mapAtPath(rootWithoutSource, nextTarget.path, (node) => ({\n type: \"split\",\n direction,\n ratio: 0.5,\n first: itemFirst ? itemGroup : node,\n second: itemFirst ? node : itemGroup,\n }));\n if (!isWithinLayoutLimits(nextRoot) || sameNode(nextRoot, layout.root)) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: nextRoot,\n };\n};\n\nexport const reconcilePanesLayout = (layout: PanesLayout, desiredOpenItemIds: readonly string[]): PanesLayout => {\n assertUniqueStableUiIds(desiredOpenItemIds, \"Panes item id\", PANES_MAX_ID_LENGTH);\n const desiredOpen = new Set(desiredOpenItemIds);\n const root = layout.root ? reconcileNode(layout.root, desiredOpen) : null;\n const present = new Set<string>();\n collectPresent(root, present);\n const missing = desiredOpenItemIds.filter((itemId) => !present.has(itemId));\n if (missing.length === 0) return root === layout.root ? layout : { version: PANES_LAYOUT_VERSION, root };\n if (!root) return createPanesLayout(missing);\n const target = firstGroup(root);\n if (!target) return createPanesLayout(missing);\n const located = findItem(root, target.active);\n if (!located) return createPanesLayout(missing);\n const group = { ...located.group, items: [...located.group.items, ...missing] };\n return { version: PANES_LAYOUT_VERSION, root: mapAtPath(root, located.path, () => group) };\n};\n\nconst collectPresent = (node: PanesNode | null, ids: Set<string>): void => {\n if (!node) return;\n if (node.type === \"group\") {\n node.items.forEach((item) => ids.add(item));\n return;\n }\n collectPresent(node.first, ids);\n collectPresent(node.second, ids);\n};\n\nexport const resizePanesSplit = (layout: PanesLayout, path: PanesPath, ratio: number): PanesLayout => {\n if (!layout.root || !Number.isFinite(ratio)) return layout;\n let target: PanesNode = layout.root;\n for (const segment of path) {\n if (target.type !== \"split\") return layout;\n target = target[segment];\n }\n if (target.type !== \"split\") return layout;\n const nextRatio = Math.min(1 - PANES_MIN_RATIO, Math.max(PANES_MIN_RATIO, ratio));\n if (nextRatio === target.ratio) return layout;\n return {\n version: PANES_LAYOUT_VERSION,\n root: mapAtPath(layout.root, path, (node) => (node.type === \"split\" ? { ...node, ratio: nextRatio } : node)),\n };\n};\n\nconst intentKey = (intent: PanesIntent): string =>\n intent.type === \"tab\"\n ? `tab:${intent.itemId}:${intent.targetItemId}:${intent.beforeItemId === null ? \"end:\" : `before:${intent.beforeItemId}`}`\n : `split:${intent.itemId}:${intent.targetItemId}:${intent.side}`;\n\nexport const samePanesIntent = (left: PanesIntent | null, right: PanesIntent | null): boolean =>\n left === right ||\n (!!left &&\n !!right &&\n left.type === right.type &&\n left.itemId === right.itemId &&\n left.targetItemId === right.targetItemId &&\n (left.type === \"tab\" && right.type === \"tab\"\n ? left.beforeItemId === right.beforeItemId\n : left.type === \"split\" && right.type === \"split\" && left.side === right.side));\n\nconst canSplitSide = (side: PanesSide, split: PanesDropTargetOptions[\"split\"]): boolean => {\n if (split === false) return false;\n const direction = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n return split === \"both\" || split === direction;\n};\n\nconst collectGroups = (node: PanesNode | null, groups: PanesGroup[] = []): PanesGroup[] => {\n if (!node) return groups;\n if (node.type === \"group\") groups.push(node);\n else {\n collectGroups(node.first, groups);\n collectGroups(node.second, groups);\n }\n return groups;\n};\n\nconst nodeAtPath = (node: PanesNode, path: PanesPath): PanesNode | null => {\n let current = node;\n for (const segment of path) {\n if (current.type !== \"split\") return null;\n current = current[segment];\n }\n return current;\n};\n\nconst isExistingSplitPlacement = (layout: PanesLayout, source: LocatedGroup, targetItemId: string, side: PanesSide): boolean => {\n if (!layout.root || source.group.items.length !== 1 || source.path.length === 0) return false;\n const segment = source.path[source.path.length - 1]!;\n const parent = nodeAtPath(layout.root, source.path.slice(0, -1));\n if (!parent || parent.type !== \"split\" || parent.ratio !== 0.5) return false;\n const direction: PanesDirection = side === \"left\" || side === \"right\" ? \"horizontal\" : \"vertical\";\n const sourceFirst = side === \"left\" || side === \"top\";\n if (parent.direction !== direction || (segment === \"first\") !== sourceFirst) return false;\n const sibling = parent[segment === \"first\" ? \"second\" : \"first\"];\n return sibling.type === \"group\" && sibling.items.includes(targetItemId);\n};\n\nconst collectTreeStats = (\n node: PanesNode,\n depth = 0,\n stats: { nodes: number; maxDepth: number; itemDepth: Map<string, number> } = {\n nodes: 0,\n maxDepth: 0,\n itemDepth: new Map(),\n },\n) => {\n stats.nodes += 1;\n stats.maxDepth = Math.max(stats.maxDepth, depth);\n if (node.type === \"group\") node.items.forEach((itemId) => stats.itemDepth.set(itemId, depth));\n else {\n collectTreeStats(node.first, depth + 1, stats);\n collectTreeStats(node.second, depth + 1, stats);\n }\n return stats;\n};\n\nexport const getPanesDropTargets = (layout: PanesLayout, itemId: string, options: PanesDropTargetOptions): PanesDropTarget[] => {\n if (!options.movable || !layout.root) return [];\n const source = findItem(layout.root, itemId);\n if (!source) return [];\n const rootWithoutSource = removeFromNode(layout.root, itemId);\n const splitStats = rootWithoutSource ? collectTreeStats(rootWithoutSource) : null;\n const targets: PanesDropTarget[] = [];\n const seen = new Set<string>();\n const add = (target: Omit<PanesDropTarget, \"id\">, noop = false) => {\n const id = intentKey(target.intent);\n if (noop || seen.has(id)) return;\n seen.add(id);\n targets.push({ ...target, id });\n };\n\n for (const group of collectGroups(layout.root)) {\n const sameGroup = group === source.group;\n const remaining = group.items.filter((id) => id !== itemId);\n const targetItemId = sameGroup ? remaining[0] : group.active;\n if (!targetItemId) continue;\n for (const beforeItemId of remaining) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId,\n intent,\n },\n sameGroup && group.items[source.index + 1] === beforeItemId,\n );\n }\n if (sameGroup) {\n const intent: PanesIntent = { type: \"tab\", itemId, targetItemId, beforeItemId: null };\n add(\n {\n kind: \"tab\",\n targetItemId,\n beforeItemId: null,\n intent,\n },\n source.index === group.items.length - 1,\n );\n } else {\n add({\n kind: \"group\",\n targetItemId,\n intent: { type: \"tab\", itemId, targetItemId, beforeItemId: null },\n });\n }\n\n for (const side of [\"top\", \"right\", \"bottom\", \"left\"] as const) {\n if (!canSplitSide(side, options.split)) continue;\n const intent: PanesIntent = { type: \"split\", itemId, targetItemId, side };\n const targetDepth = splitStats?.itemDepth.get(targetItemId);\n const exceedsLimits =\n !splitStats ||\n targetDepth === undefined ||\n splitStats.nodes + 2 > MAX_NODES ||\n Math.max(splitStats.maxDepth, targetDepth + 1) > MAX_DEPTH;\n add(\n {\n kind: \"split\",\n targetItemId,\n side,\n intent,\n },\n exceedsLimits || isExistingSplitPlacement(layout, source, targetItemId, side),\n );\n }\n }\n return targets;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","onCleanup","selector","active","WeakMap","observeScrollFade","body","entry","get","update","mode","getAttribute","horizontal","overflow","scrollWidth","clientWidth","scrollHeight","clientHeight","rtl","getComputedStyle","direction","offset","scrollLeft","scrollTop","top","bottom","edges","undefined","setAttribute","hasAttribute","removeAttribute","resize","ResizeObserver","observe","disconnect","child","Array","from","children","mutations","MutationObserver","records","some","record","type","target","childList","subtree","characterData","attributes","attributeFilter","addEventListener","passive","users","stop","removeEventListener","set","delete","createScrollFade","element","enabled","installScrollFades","root","owned","Map","sync","next","Set","querySelectorAll","HTMLElement","matches","add","has","containsPort","node","Element","querySelector","addedNodes","removedNodes","values","clear"],"sources":["layout/scroll-fade.ts"],"sourcesContent":["import { createEffect, onCleanup } from \"solid-js\";\n\nconst selector = \"[data-scroll-fade-mode]\";\nconst active = new WeakMap<HTMLElement, { users: number; stop: () => void }>();\n\n/** Shared by hydrated components and the workspace's server-rendered scrollports. */\nfunction observeScrollFade(body: HTMLElement) {\n let entry = active.get(body);\n if (!entry) {\n const update = () => {\n const mode = body.getAttribute(\"data-scroll-fade-mode\");\n const horizontal = body.getAttribute(\"data-scroll-fade-axis\") === \"horizontal\";\n const overflow = horizontal ? body.scrollWidth - body.clientWidth : body.scrollHeight - body.clientHeight;\n // Horizontal RTL scrollLeft starts at zero on the right and becomes negative.\n const rtl = horizontal && getComputedStyle(body).direction === \"rtl\";\n const offset = horizontal ? (rtl ? overflow + body.scrollLeft : body.scrollLeft) : body.scrollTop;\n const top = mode === \"both\" && overflow > 1 && offset > 1;\n const bottom = !!mode && overflow > 1 && overflow - offset > 1;\n const edges = top && bottom ? \"both\" : top ? \"top\" : bottom ? \"bottom\" : undefined;\n if (edges) {\n if (body.getAttribute(\"data-scroll-fade\") !== edges) body.setAttribute(\"data-scroll-fade\", edges);\n } else if (body.hasAttribute(\"data-scroll-fade\")) body.removeAttribute(\"data-scroll-fade\");\n };\n const resize = new ResizeObserver(update);\n const observe = () => {\n resize.disconnect();\n resize.observe(body);\n for (const child of Array.from(body.children)) resize.observe(child);\n update();\n };\n const mutations = new MutationObserver((records) => {\n if (records.some((record) => record.type === \"childList\" && record.target === body)) observe();\n else update();\n });\n mutations.observe(body, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\", \"open\", \"data-scroll-fade-mode\", \"data-scroll-fade-axis\", \"dir\"],\n });\n body.addEventListener(\"scroll\", update, { passive: true });\n observe();\n entry = {\n users: 0,\n stop: () => {\n resize.disconnect();\n mutations.disconnect();\n body.removeEventListener(\"scroll\", update);\n body.removeAttribute(\"data-scroll-fade\");\n },\n };\n active.set(body, entry);\n }\n entry.users++;\n return () => {\n if (--entry.users === 0) {\n entry.stop();\n active.delete(body);\n }\n };\n}\n\nexport function createScrollFade(element: () => HTMLElement | undefined, enabled: () => boolean) {\n createEffect(() => {\n if (!enabled()) return;\n const body = element();\n if (body) onCleanup(observeScrollFade(body));\n });\n}\n\n/** Enrich only explicitly marked UI scrollports, including SSR and later navigation. */\nexport function installScrollFades(root: Document | HTMLElement) {\n const owned = new Map<HTMLElement, () => void>();\n const sync = () => {\n const next = new Set(Array.from(root.querySelectorAll<HTMLElement>(selector)));\n if (root instanceof HTMLElement && root.matches(selector)) next.add(root);\n for (const [element, stop] of owned)\n if (!next.has(element)) {\n stop();\n owned.delete(element);\n }\n for (const element of next) if (!owned.has(element)) owned.set(element, observeScrollFade(element));\n };\n const containsPort = (node: Node) => node instanceof Element && (node.matches(selector) || node.querySelector(selector));\n const mutations = new MutationObserver((records) => {\n if (\n records.some(\n (record) =>\n record.type === \"attributes\" ||\n Array.from(record.addedNodes).some(containsPort) ||\n Array.from(record.removedNodes).some(containsPort),\n )\n )\n sync();\n });\n mutations.observe(root, { childList: true, subtree: true, attributes: true, attributeFilter: [\"data-scroll-fade-mode\"] });\n sync();\n return () => {\n mutations.disconnect();\n for (const stop of owned.values()) stop();\n owned.clear();\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/scroll-fade.ts"],"sourcesContent":["import { createEffect, onCleanup } from \"solid-js\";\n\nconst selector = \"[data-scroll-fade-mode]\";\nconst active = new WeakMap<HTMLElement, { users: number; stop: () => void }>();\n\n/** Shared by hydrated components and the workspace's server-rendered scrollports. */\nfunction observeScrollFade(body: HTMLElement) {\n let entry = active.get(body);\n if (!entry) {\n const update = () => {\n const mode = body.getAttribute(\"data-scroll-fade-mode\");\n const horizontal = body.getAttribute(\"data-scroll-fade-axis\") === \"horizontal\";\n const overflow = horizontal ? body.scrollWidth - body.clientWidth : body.scrollHeight - body.clientHeight;\n // Horizontal RTL scrollLeft starts at zero on the right and becomes negative.\n const rtl = horizontal && getComputedStyle(body).direction === \"rtl\";\n const offset = horizontal ? (rtl ? overflow + body.scrollLeft : body.scrollLeft) : body.scrollTop;\n const top = mode === \"both\" && overflow > 1 && offset > 1;\n const bottom = !!mode && overflow > 1 && overflow - offset > 1;\n const edges = top && bottom ? \"both\" : top ? \"top\" : bottom ? \"bottom\" : undefined;\n if (edges) {\n if (body.getAttribute(\"data-scroll-fade\") !== edges) body.setAttribute(\"data-scroll-fade\", edges);\n } else if (body.hasAttribute(\"data-scroll-fade\")) body.removeAttribute(\"data-scroll-fade\");\n };\n const resize = new ResizeObserver(update);\n const observe = () => {\n resize.disconnect();\n resize.observe(body);\n for (const child of Array.from(body.children)) resize.observe(child);\n update();\n };\n const mutations = new MutationObserver((records) => {\n if (records.some((record) => record.type === \"childList\" && record.target === body)) observe();\n else update();\n });\n mutations.observe(body, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\", \"open\", \"data-scroll-fade-mode\", \"data-scroll-fade-axis\", \"dir\"],\n });\n body.addEventListener(\"scroll\", update, { passive: true });\n observe();\n entry = {\n users: 0,\n stop: () => {\n resize.disconnect();\n mutations.disconnect();\n body.removeEventListener(\"scroll\", update);\n body.removeAttribute(\"data-scroll-fade\");\n },\n };\n active.set(body, entry);\n }\n entry.users++;\n return () => {\n if (--entry.users === 0) {\n entry.stop();\n active.delete(body);\n }\n };\n}\n\nexport function createScrollFade(element: () => HTMLElement | undefined, enabled: () => boolean) {\n createEffect(() => {\n if (!enabled()) return;\n const body = element();\n if (body) onCleanup(observeScrollFade(body));\n });\n}\n\n/** Enrich only explicitly marked UI scrollports, including SSR and later navigation. */\nexport function installScrollFades(root: Document | HTMLElement) {\n const owned = new Map<HTMLElement, () => void>();\n const sync = () => {\n const next = new Set(Array.from(root.querySelectorAll<HTMLElement>(selector)));\n if (root instanceof HTMLElement && root.matches(selector)) next.add(root);\n for (const [element, stop] of owned)\n if (!next.has(element)) {\n stop();\n owned.delete(element);\n }\n for (const element of next) if (!owned.has(element)) owned.set(element, observeScrollFade(element));\n };\n const containsPort = (node: Node) => node instanceof Element && (node.matches(selector) || node.querySelector(selector));\n const mutations = new MutationObserver((records) => {\n if (\n records.some(\n (record) =>\n record.type === \"attributes\" ||\n Array.from(record.addedNodes).some(containsPort) ||\n Array.from(record.removedNodes).some(containsPort),\n )\n )\n sync();\n });\n mutations.observe(root, { childList: true, subtree: true, attributes: true, attributeFilter: [\"data-scroll-fade-mode\"] });\n sync();\n return () => {\n mutations.disconnect();\n for (const stop of owned.values()) stop();\n owned.clear();\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["STABLE_UI_ID","isStableUiId","value","maxLength","length","test","assertStableUiId","label","Error","assertUniqueStableUiIds","values","seen","Set","forEach","has","add"],"sources":["layout/stable-id.ts"],"sourcesContent":["const STABLE_UI_ID = /^[A-Za-z][A-Za-z0-9_-]*$/;\n\nexport const isStableUiId = (value: unknown, maxLength = 64): value is string =>\n typeof value === \"string\" && value.length > 0 && value.length <= maxLength && STABLE_UI_ID.test(value);\n\nexport const assertStableUiId = (value: string, label: string, maxLength = 64): string => {\n if (!isStableUiId(value, maxLength)) {\n throw new Error(`${label} must start with a letter and contain only letters, numbers, underscores, or hyphens.`);\n }\n return value;\n};\n\nexport const assertUniqueStableUiIds = (values: readonly string[], label: string, maxLength = 64): void => {\n const seen = new Set<string>();\n values.forEach((value) => {\n assertStableUiId(value, label, maxLength);\n if (seen.has(value)) throw new Error(`${label} must be unique; received duplicate id \"${value}\".`);\n seen.add(value);\n });\n};\n"],"mappings":"AAAA,MAAMA,YAAY,GAAG,0BAA0B;AAE/C,OAAO,MAAMC,YAAY,GAAGA,CAACC,KAAc,EAAEC,SAAS,GAAG,EAAE,KACzD,OAAOD,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACE,MAAM,GAAG,CAAC,IAAIF,KAAK,CAACE,MAAM,IAAID,SAAS,IAAIH,YAAY,CAACK,IAAI,CAACH,KAAK,CAAC;AAExG,OAAO,MAAMI,gBAAgB,GAAGA,CAACJ,KAAa,EAAEK,KAAa,EAAEJ,SAAS,GAAG,EAAE,KAAa;EACxF,IAAI,CAACF,YAAY,CAACC,KAAK,EAAEC,SAAS,CAAC,EAAE;IACnC,MAAM,IAAIK,KAAK,CAAC,GAAGD,KAAK,uFAAuF,CAAC;EAClH;EACA,OAAOL,KAAK;AACd,CAAC;AAED,OAAO,MAAMO,uBAAuB,GAAGA,CAACC,MAAyB,EAAEH,KAAa,EAAEJ,SAAS,GAAG,EAAE,KAAW;EACzG,MAAMQ,IAAI,GAAG,IAAIC,GAAG,CAAS,CAAC;EAC9BF,MAAM,CAACG,OAAO,CAAEX,KAAK,IAAK;IACxBI,gBAAgB,CAACJ,KAAK,EAAEK,KAAK,EAAEJ,SAAS,CAAC;IACzC,IAAIQ,IAAI,CAACG,GAAG,CAACZ,KAAK,CAAC,EAAE,MAAM,IAAIM,KAAK,CAAC,GAAGD,KAAK,2CAA2CL,KAAK,IAAI,CAAC;IAClGS,IAAI,CAACI,GAAG,CAACb,KAAK,CAAC;EACjB,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/stable-id.ts"],"sourcesContent":["const STABLE_UI_ID = /^[A-Za-z][A-Za-z0-9_-]*$/;\n\nexport const isStableUiId = (value: unknown, maxLength = 64): value is string =>\n typeof value === \"string\" && value.length > 0 && value.length <= maxLength && STABLE_UI_ID.test(value);\n\nexport const assertStableUiId = (value: string, label: string, maxLength = 64): string => {\n if (!isStableUiId(value, maxLength)) {\n throw new Error(`${label} must start with a letter and contain only letters, numbers, underscores, or hyphens.`);\n }\n return value;\n};\n\nexport const assertUniqueStableUiIds = (values: readonly string[], label: string, maxLength = 64): void => {\n const seen = new Set<string>();\n values.forEach((value) => {\n assertStableUiId(value, label, maxLength);\n if (seen.has(value)) throw new Error(`${label} must be unique; received duplicate id \"${value}\".`);\n seen.add(value);\n });\n};\n"],"mappings":"AAAA,MAAM,YAAY,GAAG,0BAA0B;AAE/C,OAAO,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,SAAS,GAAG,EAAE,KACzD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAExG,OAAO,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,SAAS,GAAG,EAAE,KAAa;EACxF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;IACnC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,uFAAuF,CAAC;EAClH;EACA,OAAO,KAAK;AACd,CAAC;AAED,OAAO,MAAM,uBAAuB,GAAG,CAAC,MAAyB,EAAE,KAAa,EAAE,SAAS,GAAG,EAAE,KAAW;EACzG,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC;EAC9B,MAAM,CAAC,OAAO,CAAE,KAAK,IAAK;IACxB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IACzC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,2CAA2C,KAAK,IAAI,CAAC;IAClG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;EACjB,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createSignal","on","Show","useUiMessages","initialsFor","name","parts","trim","split","filter","Boolean","length","slice","toUpperCase","at","Avatar","props","messages","failed","setFailed","label","unknownUser","fallback","fallbackContent","icon","_el$","_$getNextElement","_tmpl$","_$effect","_$className","className","class","src","defer","_$createComponent","when","_$memo","undefined","_el$2","_tmpl$2","_$insert","_p$","_v$","_v$2","size","_v$3","style","_v$4","alt","avatarLabel","e","t","_$setAttribute","a","_$style","o","children","_el$3","_tmpl$3","addEventListener","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","loading","i","n"],"sources":["surfaces/Avatar.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, on, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type AvatarProps = {\n name: string;\n src?: string | null;\n icon?: string;\n alt?: string;\n fallback?: string;\n size?: AvatarSize;\n loading?: \"eager\" | \"lazy\";\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nconst initialsFor = (name: string): string => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0]?.slice(0, 2).toUpperCase() ?? \"?\";\n return `${parts[0]?.[0] ?? \"\"}${parts.at(-1)?.[0] ?? \"\"}`.toUpperCase();\n};\n\nexport function Avatar(props: AvatarProps): JSX.Element {\n const messages = useUiMessages();\n const [failed, setFailed] = createSignal(false);\n const label = () => props.name.trim() || messages().unknownUser;\n // Derive initials from the given name, not from the accessible-name fallback:\n // an empty `name` must render \"?\" the way Cloud's avatar does, not \"UU\".\n const fallback = () => props.fallback ?? initialsFor(props.name);\n const fallbackContent = () => (props.icon ? <i class={props.icon} aria-hidden=\"true\" /> : fallback());\n const className = () => `k2b-avatar ${props.class ?? \"\"}`;\n\n createEffect(\n on(\n () => props.src,\n () => setFailed(false),\n { defer: true },\n ),\n );\n\n return (\n <Show\n when={!failed() ? props.src || undefined : undefined}\n fallback={\n <span\n class={className()}\n data-size={props.size ?? \"md\"}\n style={props.style}\n role=\"img\"\n aria-label={props.alt ?? messages().avatarLabel({ name: label() })}\n >\n {fallbackContent()}\n </span>\n }\n >\n {(src) => (\n <img\n src={src()}\n alt={props.alt ?? messages().avatarLabel({ name: label() })}\n class={className()}\n data-size={props.size ?? \"md\"}\n style={props.style}\n loading={props.loading ?? \"lazy\"}\n decoding=\"async\"\n onError={() => setFailed(true)}\n />\n )}\n </Show>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/Avatar.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, on, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type AvatarProps = {\n name: string;\n src?: string | null;\n icon?: string;\n alt?: string;\n fallback?: string;\n size?: AvatarSize;\n loading?: \"eager\" | \"lazy\";\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nconst initialsFor = (name: string): string => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0]?.slice(0, 2).toUpperCase() ?? \"?\";\n return `${parts[0]?.[0] ?? \"\"}${parts.at(-1)?.[0] ?? \"\"}`.toUpperCase();\n};\n\nexport function Avatar(props: AvatarProps): JSX.Element {\n const messages = useUiMessages();\n const [failed, setFailed] = createSignal(false);\n const label = () => props.name.trim() || messages().unknownUser;\n // Derive initials from the given name, not from the accessible-name fallback:\n // an empty `name` must render \"?\" the way Cloud's avatar does, not \"UU\".\n const fallback = () => props.fallback ?? initialsFor(props.name);\n const fallbackContent = () => (props.icon ? <i class={props.icon} aria-hidden=\"true\" /> : fallback());\n const className = () => `k2b-avatar ${props.class ?? \"\"}`;\n\n createEffect(\n on(\n () => props.src,\n () => setFailed(false),\n { defer: true },\n ),\n );\n\n return (\n <Show\n when={!failed() ? props.src || undefined : undefined}\n fallback={\n <span\n class={className()}\n data-size={props.size ?? \"md\"}\n style={props.style}\n role=\"img\"\n aria-label={props.alt ?? messages().avatarLabel({ name: label() })}\n >\n {fallbackContent()}\n </span>\n }\n >\n {(src) => (\n <img\n src={src()}\n alt={props.alt ?? messages().avatarLabel({ name: label() })}\n class={className()}\n data-size={props.size ?? \"md\"}\n style={props.style}\n loading={props.loading ?? \"lazy\"}\n decoding=\"async\"\n onError={() => setFailed(true)}\n />\n )}\n </Show>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,YAAY,EAAE,YAAY,EAAY,EAAE,EAAE,IAAI,QAAQ,UAAU;AACzE,SAAS,aAAa,QAAQ,kBAAkB;AAgBhD,MAAM,WAAW,GAAI,IAAY,IAAa;EAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;EACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,GAAG;EAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG;EACzE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;AACzE,CAAC;AAED,OAAO,SAAS,MAAM,CAAC,KAAkB,EAAe;EACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC/C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW;EAC/D;EACA;EACA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;EAChE,MAAM,eAAe,GAAG,MAAO,KAAK,CAAC,IAAI;IAAA;IAAA,iCAAa,KAAK,CAAC,IAAI;IAAA;EAAA,OAA0B,QAAQ,CAAC,CAAE;EACrG,MAAM,SAAS,GAAG,MAAM,cAAc,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;EAEzD,YAAY,CACV,EAAE,CACA,MAAM,KAAK,CAAC,GAAG,EACf,MAAM,SAAS,CAAC,KAAK,CAAC,EACtB;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EAED,yBACG,IAAI;IAAA,IACH,IAAI;MAAA,OAAE,gBAAC,MAAM,CAAC,CAAC,MAAG,KAAK,CAAC,GAAG,IAAI,SAAS,GAAG,SAAS;IAAA;IAAA,IACpD,QAAQ;MAAA;QAAA;QAAA,gBAQH,eAAe;QAAA;UAAA,UANT,SAAS,CAAC,CAAC;YAAA,OACP,KAAK,CAAC,IAAI,IAAI,IAAI;YAAA,OACtB,KAAK,CAAC,KAAK;YAAA,OAEN,KAAK,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;cAAE,IAAI,EAAE,KAAK,CAAC;YAAE,CAAC,CAAC;UAAA;UAAA;UAAA;UAAA;UAAA;QAAA;UAAA;UAAA;UAAA;UAAA;QAAA;QAAA;MAAA;IAAA;IAAA,UAMpE,GAAG;MAAA;MAAA,gCASQ,MAAM,SAAS,CAAC,IAAI,CAAC;MAAA;QAAA,WAPzB,GAAG,CAAC,CAAC;UAAA,OACL,KAAK,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;YAAE,IAAI,EAAE,KAAK,CAAC;UAAE,CAAC,CAAC;UAAA,OACpD,SAAS,CAAC,CAAC;UAAA,OACP,KAAK,CAAC,IAAI,IAAI,IAAI;UAAA,OACtB,KAAK,CAAC,KAAK;UAAA,OACT,KAAK,CAAC,OAAO,IAAI,MAAM;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;MAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;MAAA;MAAA;IAAA;EAInC;AAGP","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["For","Show","DescriptionList","props","columns","Math","max","min","_el$","_$getNextElement","_tmpl$","_$insert","_$createComponent","each","items","children","item","_el$2","_tmpl$2","_el$3","firstChild","_el$4","nextSibling","_el$5","_el$6","_co$","_$getNextMarker","term","description","when","action","_el$7","_tmpl$3","_$effect","_p$","_v$","class","_v$2","_v$3","layout","_v$4","size","_v$5","actionVisibility","e","_$className","t","_$setAttribute","a","o","i","undefined"],"sources":["surfaces/DescriptionList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\n\nexport type DescriptionListItem = {\n term: JSX.Element;\n description: JSX.Element;\n action?: JSX.Element;\n};\n\nexport type DescriptionListProps = {\n items: readonly DescriptionListItem[];\n columns?: 1 | 2 | 3;\n layout?: \"grid\" | \"rows\" | \"compact\";\n size?: \"sm\" | \"md\";\n actionVisibility?: \"always\" | \"progressive\";\n class?: string;\n};\n\n/** Semantic key-value content with predictable responsive density. */\nexport function DescriptionList(props: DescriptionListProps): JSX.Element {\n const columns = () => Math.max(1, Math.min(3, props.columns ?? 1));\n return (\n <dl\n class={`k2b-description-list ${props.class ?? \"\"}`}\n data-columns={columns()}\n data-layout={props.layout ?? \"grid\"}\n data-size={props.size ?? \"md\"}\n data-action-visibility={props.actionVisibility ?? \"always\"}\n >\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-description-list__item\">\n <dt>{item.term}</dt>\n <dd>{item.description}</dd>\n <Show when={item.action}>{(action) => <div class=\"k2b-description-list__action\">{action()}</div>}</Show>\n </div>\n )}\n </For>\n </dl>\n );\n}\n\nexport default DescriptionList;\n"],"mappings":";;;;;;;;;;;AAAA,SAASA,GAAG,EAAYC,IAAI,QAAQ,UAAU;AAiB9C;AACA,OAAO,SAASC,eAAeA,CAACC,KAA2B,EAAe;EACxE,MAAMC,OAAO,GAAGA,CAAA,KAAMC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEJ,KAAK,CAACC,OAAO,IAAI,CAAC,CAAC,CAAC;EAClE;IAAA,IAAAI,IAAA,GAAAC,gBAAA,CAAAC,MAAA;IAAAC,QAAA,CAAAH,IAAA,EAAAI,iBAAA,CAQKZ,GAAG;MAAA,IAACa,IAAIA,CAAA;QAAA,OAAEV,KAAK,CAACW,KAAK;MAAA;MAAAC,QAAA,EAClBC,IAAI;QAAA,IAAAC,KAAA,GAAAR,gBAAA,CAAAS,OAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAG,UAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAG,WAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAC,WAAA;UAAA,CAAAE,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAH,KAAA,CAAAD,WAAA;QAAAX,QAAA,CAAAQ,KAAA,QAEGH,IAAI,CAACW,IAAI;QAAAhB,QAAA,CAAAU,KAAA,QACTL,IAAI,CAACY,WAAW;QAAAjB,QAAA,CAAAM,KAAA,EAAAL,iBAAA,CACpBX,IAAI;UAAA,IAAC4B,IAAIA,CAAA;YAAA,OAAEb,IAAI,CAACc,MAAM;UAAA;UAAAf,QAAA,EAAIe,MAAM;YAAA,IAAAC,KAAA,GAAAtB,gBAAA,CAAAuB,OAAA;YAAArB,QAAA,CAAAoB,KAAA,EAAgDD,MAAM;YAAA,OAAAC,KAAA;UAAA;QAAS,IAAAP,KAAA,EAAAC,IAAA;QAAA,OAAAR,KAAA;MAAA;IAEnG;IAAAgB,QAAA,CAAAC,GAAA;MAAA,IAAAC,GAAA,GAbI,wBAAwBhC,KAAK,CAACiC,KAAK,IAAI,EAAE,EAAE;QAAAC,IAAA,GACpCjC,OAAO,CAAC,CAAC;QAAAkC,IAAA,GACVnC,KAAK,CAACoC,MAAM,IAAI,MAAM;QAAAC,IAAA,GACxBrC,KAAK,CAACsC,IAAI,IAAI,IAAI;QAAAC,IAAA,GACLvC,KAAK,CAACwC,gBAAgB,IAAI,QAAQ;MAAAR,GAAA,KAAAD,GAAA,CAAAU,CAAA,IAAAC,WAAA,CAAArC,IAAA,EAAA0B,GAAA,CAAAU,CAAA,GAAAT,GAAA;MAAAE,IAAA,KAAAH,GAAA,CAAAY,CAAA,IAAAC,cAAA,CAAAvC,IAAA,kBAAA0B,GAAA,CAAAY,CAAA,GAAAT,IAAA;MAAAC,IAAA,KAAAJ,GAAA,CAAAc,CAAA,IAAAD,cAAA,CAAAvC,IAAA,iBAAA0B,GAAA,CAAAc,CAAA,GAAAV,IAAA;MAAAE,IAAA,KAAAN,GAAA,CAAAe,CAAA,IAAAF,cAAA,CAAAvC,IAAA,eAAA0B,GAAA,CAAAe,CAAA,GAAAT,IAAA;MAAAE,IAAA,KAAAR,GAAA,CAAAgB,CAAA,IAAAH,cAAA,CAAAvC,IAAA,4BAAA0B,GAAA,CAAAgB,CAAA,GAAAR,IAAA;MAAA,OAAAR,GAAA;IAAA;MAAAU,CAAA,EAAAO,SAAA;MAAAL,CAAA,EAAAK,SAAA;MAAAH,CAAA,EAAAG,SAAA;MAAAF,CAAA,EAAAE,SAAA;MAAAD,CAAA,EAAAC;IAAA;IAAA,OAAA3C,IAAA;EAAA;AAahE;AAEA,eAAeN,eAAe","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/DescriptionList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\n\nexport type DescriptionListItem = {\n term: JSX.Element;\n description: JSX.Element;\n action?: JSX.Element;\n};\n\nexport type DescriptionListProps = {\n items: readonly DescriptionListItem[];\n columns?: 1 | 2 | 3;\n layout?: \"grid\" | \"rows\" | \"compact\";\n size?: \"sm\" | \"md\";\n actionVisibility?: \"always\" | \"progressive\";\n class?: string;\n};\n\n/** Semantic key-value content with predictable responsive density. */\nexport function DescriptionList(props: DescriptionListProps): JSX.Element {\n const columns = () => Math.max(1, Math.min(3, props.columns ?? 1));\n return (\n <dl\n class={`k2b-description-list ${props.class ?? \"\"}`}\n data-columns={columns()}\n data-layout={props.layout ?? \"grid\"}\n data-size={props.size ?? \"md\"}\n data-action-visibility={props.actionVisibility ?? \"always\"}\n >\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-description-list__item\">\n <dt>{item.term}</dt>\n <dd>{item.description}</dd>\n <Show when={item.action}>{(action) => <div class=\"k2b-description-list__action\">{action()}</div>}</Show>\n </div>\n )}\n </For>\n </dl>\n );\n}\n\nexport default DescriptionList;\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,GAAG,EAAY,IAAI,QAAQ,UAAU;AAiB9C;AACA,OAAO,SAAS,eAAe,CAAC,KAA2B,EAAe;EACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;EAClE;IAAA;IAAA,iCAQK,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK;MAAA;MAAA,UAClB,IAAI;QAAA;UAAA;UAAA;UAAA;UAAA;QAAA,sBAEG,IAAI,CAAC,IAAI;QAAA,sBACT,IAAI,CAAC,WAAW;QAAA,kCACpB,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,IAAI,CAAC,MAAM;UAAA;UAAA,UAAI,MAAM;YAAA;YAAA,gBAAgD,MAAM;YAAA;UAAA;QAAS;QAAA;MAAA;IAEnG;IAAA;MAAA,UAbI,wBAAwB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OACpC,OAAO,CAAC,CAAC;QAAA,OACV,KAAK,CAAC,MAAM,IAAI,MAAM;QAAA,OACxB,KAAK,CAAC,IAAI,IAAI,IAAI;QAAA,OACL,KAAK,CAAC,gBAAgB,IAAI,QAAQ;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAahE;AAEA,eAAe,eAAe","ignoreList":[]}
@@ -6,7 +6,9 @@ import { effect as _$effect } from "solid-js/web";
6
6
  import { getNextElement as _$getNextElement } from "solid-js/web";
7
7
  var _tmpl$ = /*#__PURE__*/_$template(`<div class=k2b-link-card__icon><i aria-hidden=true>`),
8
8
  _tmpl$2 = /*#__PURE__*/_$template(`<div class=k2b-link-card__copy><span class=k2b-link-card__title></span><p class=k2b-link-card__description>`),
9
- _tmpl$3 = /*#__PURE__*/_$template(`<i class="ti ti-chevron-right k2b-link-card__chevron"aria-hidden=true>`);
9
+ _tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-link-card__meta>`),
10
+ _tmpl$4 = /*#__PURE__*/_$template(`<i class="ti ti-chevron-right k2b-link-card__chevron"aria-hidden=true>`);
11
+ import { Show } from "solid-js";
10
12
  import { Paper } from "./Paper";
11
13
  export function LinkCard(props) {
12
14
  return _$createComponent(Paper, {
@@ -32,7 +34,16 @@ export function LinkCard(props) {
32
34
  _$insert(_el$4, () => props.title);
33
35
  _$insert(_el$5, () => props.description);
34
36
  return _el$3;
35
- })(), _$getNextElement(_tmpl$3)];
37
+ })(), _$createComponent(Show, {
38
+ get when() {
39
+ return props.meta;
40
+ },
41
+ get children() {
42
+ var _el$6 = _$getNextElement(_tmpl$3);
43
+ _$insert(_el$6, () => props.meta);
44
+ return _el$6;
45
+ }
46
+ }), _$getNextElement(_tmpl$4)];
36
47
  }
37
48
  });
38
49
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Paper","LinkCard","props","_$createComponent","as","href","data-color","color","interactive","children","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_$effect","_$className","icon","_el$3","_tmpl$2","_el$4","_el$5","nextSibling","_$insert","title","description","_tmpl$3"],"sources":["surfaces/LinkCard.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport { Paper } from \"./Paper\";\n\nexport type LinkCardColor = \"blue\" | \"emerald\" | \"violet\" | \"orange\" | \"red\" | \"amber\" | \"zinc\" | \"cyan\" | \"rose\";\n\nexport type LinkCardProps = {\n href: string;\n title: string;\n description: string;\n icon: string;\n color: LinkCardColor;\n};\n\nexport function LinkCard(props: LinkCardProps): JSX.Element {\n return (\n <Paper as=\"a\" href={props.href} class=\"k2b-link-card\" data-color={props.color} interactive>\n <div class=\"k2b-link-card__icon\">\n <i class={`${props.icon} k2b-link-card__glyph`} aria-hidden=\"true\" />\n </div>\n <div class=\"k2b-link-card__copy\">\n <span class=\"k2b-link-card__title\">{props.title}</span>\n <p class=\"k2b-link-card__description\">{props.description}</p>\n </div>\n <i class=\"ti ti-chevron-right k2b-link-card__chevron\" aria-hidden=\"true\" />\n </Paper>\n );\n}\n\nexport default LinkCard;\n"],"mappings":";;;;;;;;;AACA,SAASA,KAAK,QAAQ,SAAS;AAY/B,OAAO,SAASC,QAAQA,CAACC,KAAoB,EAAe;EAC1D,OAAAC,iBAAA,CACGH,KAAK;IAACI,EAAE;IAAA,IAAKC,IAAIA,CAAA;MAAA,OAAEH,KAAK,CAACG,IAAI;IAAA;IAAA;IAAA,kBAAAC,CAAA;MAAA,OAAoCJ,KAAK,CAACK,KAAK;IAAA;IAAEC,WAAW;IAAA,IAAAC,SAAA;MAAA;QAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;UAAAC,KAAA,GAAAH,IAAA,CAAAI,UAAA;QAAAC,QAAA,OAAAC,WAAA,CAAAH,KAAA,EAE5E,GAAGX,KAAK,CAACe,IAAI,uBAAuB;QAAA,OAAAP,IAAA;MAAA;QAAA,IAAAQ,KAAA,GAAAP,gBAAA,CAAAQ,OAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAJ,UAAA;UAAAO,KAAA,GAAAD,KAAA,CAAAE,WAAA;QAAAC,QAAA,CAAAH,KAAA,QAGVlB,KAAK,CAACsB,KAAK;QAAAD,QAAA,CAAAF,KAAA,QACRnB,KAAK,CAACuB,WAAW;QAAA,OAAAP,KAAA;MAAA,MAAAP,gBAAA,CAAAe,OAAA;IAAA;EAAA;AAKhE;AAEA,eAAezB,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/LinkCard.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { Paper } from \"./Paper\";\n\nexport type LinkCardColor = \"blue\" | \"emerald\" | \"violet\" | \"orange\" | \"red\" | \"amber\" | \"zinc\" | \"cyan\" | \"rose\";\n\nexport type LinkCardProps = {\n href: string;\n title: string;\n description: string;\n icon: string;\n /** Glyph color. Omit it to use the host application's accent. */\n color?: LinkCardColor;\n /** One trailing fact, such as a count or a badge. */\n meta?: JSX.Element;\n};\n\nexport function LinkCard(props: LinkCardProps): JSX.Element {\n return (\n <Paper as=\"a\" href={props.href} class=\"k2b-link-card\" data-color={props.color} interactive>\n <div class=\"k2b-link-card__icon\">\n <i class={`${props.icon} k2b-link-card__glyph`} aria-hidden=\"true\" />\n </div>\n <div class=\"k2b-link-card__copy\">\n <span class=\"k2b-link-card__title\">{props.title}</span>\n <p class=\"k2b-link-card__description\">{props.description}</p>\n </div>\n <Show when={props.meta}>\n <span class=\"k2b-link-card__meta\">{props.meta}</span>\n </Show>\n <i class=\"ti ti-chevron-right k2b-link-card__chevron\" aria-hidden=\"true\" />\n </Paper>\n );\n}\n\nexport default LinkCard;\n"],"mappings":";;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,KAAK,QAAQ,SAAS;AAe/B,OAAO,SAAS,QAAQ,CAAC,KAAoB,EAAe;EAC1D,yBACG,KAAK;IAAC,EAAE;IAAA,IAAK,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA;IAAA;MAAA,OAAoC,KAAK,CAAC,KAAK;IAAA;IAAE,WAAW;IAAA;MAAA;QAAA;UAAA;QAAA,kCAE5E,GAAG,KAAK,CAAC,IAAI,uBAAuB;QAAA;MAAA;QAAA;UAAA;UAAA;QAAA,sBAGV,KAAK,CAAC,KAAK;QAAA,sBACR,KAAK,CAAC,WAAW;QAAA;MAAA,wBAEzD,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA;UAAA;UAAA,sBACe,KAAK,CAAC,IAAI;UAAA;QAAA;MAAA;IAAA;EAAA;AAKrD;AAEA,eAAe,QAAQ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Show","NotFoundState","props","_el$","_$getNextElement","_tmpl$","_el$6","firstChild","_el$7","_co$2","_$getNextMarker","nextSibling","_el$2","_el$3","_el$4","_el$5","_co$","_el$8","_el$9","_co$3","_$insert","_$createComponent","when","code","fallback","icon","children","_el$0","_tmpl$2","_$effect","_$className","_el$1","_tmpl$3","title","description","_el$10","_tmpl$4","action","_el$11","_tmpl$5","_el$12","_el$13","label","_p$","_v$","href","_v$2","e","_$setAttribute","t","undefined"],"sources":["surfaces/NotFoundState.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\n\nexport type NotFoundStateAction = {\n label: string;\n href: string;\n icon?: string;\n};\n\nexport type NotFoundStateProps = {\n code?: string;\n title: string;\n description?: string;\n icon?: string;\n action?: NotFoundStateAction;\n};\n\nexport function NotFoundState(props: NotFoundStateProps): JSX.Element {\n return (\n <div class=\"k2b-not-found\">\n <Show\n when={props.code}\n fallback={<Show when={props.icon}>{(icon) => <i class={`${icon()} k2b-not-found__icon`} aria-hidden=\"true\" />}</Show>}\n >\n {(code) => <div class=\"k2b-not-found__code\">{code()}</div>}\n </Show>\n <div class=\"k2b-not-found__copy\">\n <h1>{props.title}</h1>\n <Show when={props.description}>{(description) => <p>{description()}</p>}</Show>\n </div>\n <Show when={props.action}>\n {(action) => (\n <a href={action().href} class=\"k2b-button\" data-size=\"sm\" data-variant=\"primary\">\n <i class={action().icon ?? \"ti ti-home\"} aria-hidden=\"true\" />\n <span>{action().label}</span>\n </a>\n )}\n </Show>\n </div>\n );\n}\n\nexport default NotFoundState;\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAmBA,IAAI,QAAQ,UAAU;AAgBzC,OAAO,SAASC,aAAaA,CAACC,KAAyB,EAAe;EACpE;IAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;MAAAC,KAAA,GAAAH,IAAA,CAAAI,UAAA;MAAA,CAAAC,KAAA,EAAAC,KAAA,IAAAC,eAAA,CAAAJ,KAAA,CAAAK,WAAA;MAAAC,KAAA,GAAAJ,KAAA,CAAAG,WAAA;MAAAE,KAAA,GAAAD,KAAA,CAAAL,UAAA;MAAAO,KAAA,GAAAD,KAAA,CAAAF,WAAA;MAAA,CAAAI,KAAA,EAAAC,IAAA,IAAAN,eAAA,CAAAI,KAAA,CAAAH,WAAA;MAAAM,KAAA,GAAAL,KAAA,CAAAD,WAAA;MAAA,CAAAO,KAAA,EAAAC,KAAA,IAAAT,eAAA,CAAAO,KAAA,CAAAN,WAAA;IAAAS,QAAA,CAAAjB,IAAA,EAAAkB,iBAAA,CAEKrB,IAAI;MAAA,IACHsB,IAAIA,CAAA;QAAA,OAAEpB,KAAK,CAACqB,IAAI;MAAA;MAAA,IAChBC,QAAQA,CAAA;QAAA,OAAAH,iBAAA,CAAGrB,IAAI;UAAA,IAACsB,IAAIA,CAAA;YAAA,OAAEpB,KAAK,CAACuB,IAAI;UAAA;UAAAC,QAAA,EAAID,IAAI;YAAA,IAAAE,KAAA,GAAAvB,gBAAA,CAAAwB,OAAA;YAAAC,QAAA,OAAAC,WAAA,CAAAH,KAAA,EAAe,GAAGF,IAAI,CAAC,CAAC,sBAAsB;YAAA,OAAAE,KAAA;UAAA;QAAuB;MAAA;MAAAD,QAAA,EAE3GH,IAAI;QAAA,IAAAQ,KAAA,GAAA3B,gBAAA,CAAA4B,OAAA;QAAAZ,QAAA,CAAAW,KAAA,EAAuCR,IAAI;QAAA,OAAAQ,KAAA;MAAA;IAAS,IAAAvB,KAAA,EAAAC,KAAA;IAAAW,QAAA,CAAAP,KAAA,QAGrDX,KAAK,CAAC+B,KAAK;IAAAb,QAAA,CAAAR,KAAA,EAAAS,iBAAA,CACfrB,IAAI;MAAA,IAACsB,IAAIA,CAAA;QAAA,OAAEpB,KAAK,CAACgC,WAAW;MAAA;MAAAR,QAAA,EAAIQ,WAAW;QAAA,IAAAC,MAAA,GAAA/B,gBAAA,CAAAgC,OAAA;QAAAhB,QAAA,CAAAe,MAAA,EAASD,WAAW;QAAA,OAAAC,MAAA;MAAA;IAAO,IAAApB,KAAA,EAAAC,IAAA;IAAAI,QAAA,CAAAjB,IAAA,EAAAkB,iBAAA,CAExErB,IAAI;MAAA,IAACsB,IAAIA,CAAA;QAAA,OAAEpB,KAAK,CAACmC,MAAM;MAAA;MAAAX,QAAA,EACpBW,MAAM;QAAA,IAAAC,MAAA,GAAAlC,gBAAA,CAAAmC,OAAA;UAAAC,MAAA,GAAAF,MAAA,CAAA/B,UAAA;UAAAkC,MAAA,GAAAD,MAAA,CAAA7B,WAAA;QAAAS,QAAA,CAAAqB,MAAA,QAGGJ,MAAM,CAAC,CAAC,CAACK,KAAK;QAAAb,QAAA,CAAAc,GAAA;UAAA,IAAAC,GAAA,GAFdP,MAAM,CAAC,CAAC,CAACQ,IAAI;YAAAC,IAAA,GACVT,MAAM,CAAC,CAAC,CAACZ,IAAI,IAAI,YAAY;UAAAmB,GAAA,KAAAD,GAAA,CAAAI,CAAA,IAAAC,cAAA,CAAAV,MAAA,UAAAK,GAAA,CAAAI,CAAA,GAAAH,GAAA;UAAAE,IAAA,KAAAH,GAAA,CAAAM,CAAA,IAAAnB,WAAA,CAAAU,MAAA,EAAAG,GAAA,CAAAM,CAAA,GAAAH,IAAA;UAAA,OAAAH,GAAA;QAAA;UAAAI,CAAA,EAAAG,SAAA;UAAAD,CAAA,EAAAC;QAAA;QAAA,OAAAZ,MAAA;MAAA;IAG1C,IAAApB,KAAA,EAAAC,KAAA;IAAA,OAAAhB,IAAA;EAAA;AAIT;AAEA,eAAeF,aAAa","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/NotFoundState.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\n\nexport type NotFoundStateAction = {\n label: string;\n href: string;\n icon?: string;\n};\n\nexport type NotFoundStateProps = {\n code?: string;\n title: string;\n description?: string;\n icon?: string;\n action?: NotFoundStateAction;\n};\n\nexport function NotFoundState(props: NotFoundStateProps): JSX.Element {\n return (\n <div class=\"k2b-not-found\">\n <Show\n when={props.code}\n fallback={<Show when={props.icon}>{(icon) => <i class={`${icon()} k2b-not-found__icon`} aria-hidden=\"true\" />}</Show>}\n >\n {(code) => <div class=\"k2b-not-found__code\">{code()}</div>}\n </Show>\n <div class=\"k2b-not-found__copy\">\n <h1>{props.title}</h1>\n <Show when={props.description}>{(description) => <p>{description()}</p>}</Show>\n </div>\n <Show when={props.action}>\n {(action) => (\n <a href={action().href} class=\"k2b-button\" data-size=\"sm\" data-variant=\"primary\">\n <i class={action().icon ?? \"ti ti-home\"} aria-hidden=\"true\" />\n <span>{action().label}</span>\n </a>\n )}\n </Show>\n </div>\n );\n}\n\nexport default NotFoundState;\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAgBzC,OAAO,SAAS,aAAa,CAAC,KAAyB,EAAe;EACpE;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,iCAEK,IAAI;MAAA,IACH,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,IAChB,QAAQ;QAAA,yBAAG,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,IAAI;UAAA;UAAA,UAAI,IAAI;YAAA;YAAA,kCAAe,GAAG,IAAI,CAAC,CAAC,sBAAsB;YAAA;UAAA;QAAuB;MAAA;MAAA,UAE3G,IAAI;QAAA;QAAA,gBAAuC,IAAI;QAAA;MAAA;IAAS;IAAA,sBAGrD,KAAK,CAAC,KAAK;IAAA,kCACf,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,WAAW;MAAA;MAAA,UAAI,WAAW;QAAA;QAAA,iBAAS,WAAW;QAAA;MAAA;IAAO;IAAA,iCAExE,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,MAAM;MAAA;MAAA,UACpB,MAAM;QAAA;UAAA;UAAA;QAAA,uBAGG,MAAM,CAAC,CAAC,CAAC,KAAK;QAAA;UAAA,UAFd,MAAM,CAAC,CAAC,CAAC,IAAI;YAAA,OACV,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,YAAY;UAAA;UAAA;UAAA;QAAA;UAAA;UAAA;QAAA;QAAA;MAAA;IAG1C;IAAA;EAAA;AAIT;AAEA,eAAe,aAAa","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["For","Show","splitProps","NOTICE_CARD_CLASSES","root","inner","icon","content","title","description","body","NOTICE_CARD_ICONS","neutral","info","success","warning","danger","NoticeCardComponent","props","local","articleProps","tone","_el$","_$getNextElement","_tmpl$2","_el$2","firstChild","_el$1","_el$10","_co$4","_$getNextMarker","nextSibling","_el$4","_el$5","_el$6","_co$","_el$7","_el$8","_co$2","_el$9","_el$0","_co$3","_$spread","_$mergeProps","class","data-tone","_$insert","_$createComponent","when","children","_el$3","_tmpl$","_$effect","_$className","_el$11","_tmpl$3","detail","_el$12","_el$13","_tmpl$4","bodyClass","_p$","_v$","_v$2","e","t","undefined","_$runHydrationEvents","NoticeGrid","columns","items","length","_el$14","each","item","_v$3","_v$4","_$setAttribute","NoticeCard","Object","assign","Grid"],"sources":["surfaces/NoticeCard.tsx"],"sourcesContent":["import { For, type JSX, Show, splitProps } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type NoticeTone = Extract<IntentTone, \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\">;\n\ntype NoticeCardContentProps =\n | { title: JSX.Element; detail?: JSX.Element; children?: JSX.Element }\n | { title?: never; detail?: never; children: JSX.Element };\n\nexport type NoticeCardProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"title\"> &\n NoticeCardContentProps & {\n tone?: NoticeTone;\n icon?: string | false;\n class?: string;\n bodyClass?: string;\n };\n\nexport const NOTICE_CARD_CLASSES = {\n root: \"k2b-notice-card\",\n inner: \"k2b-notice-card__inner\",\n icon: \"k2b-notice-card__icon\",\n content: \"k2b-notice-card__content\",\n title: \"k2b-notice-card__title\",\n description: \"k2b-notice-card__description\",\n body: \"k2b-notice-card__body\",\n} as const;\n\nexport const NOTICE_CARD_ICONS: Readonly<Record<NoticeTone, string>> = {\n neutral: \"ti ti-note\",\n info: \"ti ti-info-circle\",\n success: \"ti ti-circle-check\",\n warning: \"ti ti-alert-triangle\",\n danger: \"ti ti-alert-circle\",\n};\n\nfunction NoticeCardComponent(props: NoticeCardProps): JSX.Element {\n const [local, articleProps] = splitProps(props, [\"tone\", \"title\", \"detail\", \"children\", \"icon\", \"class\", \"bodyClass\"]);\n const tone = () => local.tone ?? \"warning\";\n return (\n <article {...articleProps} class={`${NOTICE_CARD_CLASSES.root} ${local.class ?? \"\"}`} data-tone={tone()}>\n <div class={NOTICE_CARD_CLASSES.inner}>\n <Show when={local.icon !== false}>\n <i\n class={`${typeof local.icon === \"string\" ? local.icon : NOTICE_CARD_ICONS[tone()]} ${NOTICE_CARD_CLASSES.icon}`}\n aria-hidden=\"true\"\n />\n </Show>\n <div class={NOTICE_CARD_CLASSES.content}>\n <Show when={local.title}>{(title) => <p class={NOTICE_CARD_CLASSES.title}>{title()}</p>}</Show>\n <Show when={local.detail}>{(detail) => <p class={NOTICE_CARD_CLASSES.description}>{detail()}</p>}</Show>\n <Show when={local.children}>{(body) => <div class={`${NOTICE_CARD_CLASSES.body} ${local.bodyClass ?? \"\"}`}>{body()}</div>}</Show>\n </div>\n </div>\n </article>\n );\n}\n\nexport type NoticeGridProps<T> = {\n items: readonly T[];\n children: (item: T) => JSX.Element;\n class?: string;\n};\n\nfunction NoticeGrid<T>(props: NoticeGridProps<T>): JSX.Element {\n const columns = () => (props.items.length <= 1 ? \"one\" : props.items.length === 2 ? \"two\" : \"three\");\n return (\n <Show when={props.items.length > 0}>\n <div class={`k2b-notice-grid ${props.class ?? \"\"}`} data-columns={columns()}>\n <For each={props.items}>{(item) => props.children(item)}</For>\n </div>\n </Show>\n );\n}\n\nexport const NoticeCard = Object.assign(NoticeCardComponent, { Grid: NoticeGrid });\nexport default NoticeCard;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/NoticeCard.tsx"],"sourcesContent":["import { For, type JSX, Show, splitProps } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type NoticeTone = Extract<IntentTone, \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\">;\n\ntype NoticeCardContentProps =\n | { title: JSX.Element; detail?: JSX.Element; children?: JSX.Element }\n | { title?: never; detail?: never; children: JSX.Element };\n\nexport type NoticeCardProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"title\"> &\n NoticeCardContentProps & {\n tone?: NoticeTone;\n icon?: string | false;\n class?: string;\n bodyClass?: string;\n };\n\nexport const NOTICE_CARD_CLASSES = {\n root: \"k2b-notice-card\",\n inner: \"k2b-notice-card__inner\",\n icon: \"k2b-notice-card__icon\",\n content: \"k2b-notice-card__content\",\n title: \"k2b-notice-card__title\",\n description: \"k2b-notice-card__description\",\n body: \"k2b-notice-card__body\",\n} as const;\n\nexport const NOTICE_CARD_ICONS: Readonly<Record<NoticeTone, string>> = {\n neutral: \"ti ti-note\",\n info: \"ti ti-info-circle\",\n success: \"ti ti-circle-check\",\n warning: \"ti ti-alert-triangle\",\n danger: \"ti ti-alert-circle\",\n};\n\nfunction NoticeCardComponent(props: NoticeCardProps): JSX.Element {\n const [local, articleProps] = splitProps(props, [\"tone\", \"title\", \"detail\", \"children\", \"icon\", \"class\", \"bodyClass\"]);\n const tone = () => local.tone ?? \"warning\";\n return (\n <article {...articleProps} class={`${NOTICE_CARD_CLASSES.root} ${local.class ?? \"\"}`} data-tone={tone()}>\n <div class={NOTICE_CARD_CLASSES.inner}>\n <Show when={local.icon !== false}>\n <i\n class={`${typeof local.icon === \"string\" ? local.icon : NOTICE_CARD_ICONS[tone()]} ${NOTICE_CARD_CLASSES.icon}`}\n aria-hidden=\"true\"\n />\n </Show>\n <div class={NOTICE_CARD_CLASSES.content}>\n <Show when={local.title}>{(title) => <p class={NOTICE_CARD_CLASSES.title}>{title()}</p>}</Show>\n <Show when={local.detail}>{(detail) => <p class={NOTICE_CARD_CLASSES.description}>{detail()}</p>}</Show>\n <Show when={local.children}>{(body) => <div class={`${NOTICE_CARD_CLASSES.body} ${local.bodyClass ?? \"\"}`}>{body()}</div>}</Show>\n </div>\n </div>\n </article>\n );\n}\n\nexport type NoticeGridProps<T> = {\n items: readonly T[];\n children: (item: T) => JSX.Element;\n class?: string;\n};\n\nfunction NoticeGrid<T>(props: NoticeGridProps<T>): JSX.Element {\n const columns = () => (props.items.length <= 1 ? \"one\" : props.items.length === 2 ? \"two\" : \"three\");\n return (\n <Show when={props.items.length > 0}>\n <div class={`k2b-notice-grid ${props.class ?? \"\"}`} data-columns={columns()}>\n <For each={props.items}>{(item) => props.children(item)}</For>\n </div>\n </Show>\n );\n}\n\nexport const NoticeCard = Object.assign(NoticeCardComponent, { Grid: NoticeGrid });\nexport default NoticeCard;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["splitProps","Dynamic","PaperElement","Paper","props","local","elementProps","className","class","trim","_$createComponent","_$mergeProps","component","as","_$memo","data-elevated","elevated","undefined","data-interactive","interactive","tabindex","tabIndex","children"],"sources":["surfaces/Paper.tsx"],"sourcesContent":["import { type JSX, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\n\nexport type PaperTag = \"div\" | \"section\" | \"article\" | \"a\";\n\ntype PaperOwnProps<T extends PaperTag> = {\n as?: T;\n children?: JSX.Element;\n class?: string;\n elevated?: boolean;\n interactive?: boolean;\n tabIndex?: number;\n};\n\nexport type PaperProps<T extends PaperTag = \"div\"> = PaperOwnProps<T> & Omit<JSX.IntrinsicElements[T], keyof PaperOwnProps<T>>;\n\nconst PaperElement = Dynamic as unknown as (props: Record<string, unknown>) => JSX.Element;\n\nexport function Paper<T extends PaperTag = \"div\">(props: PaperProps<T>): JSX.Element {\n const [local, elementProps] = splitProps(props, [\"as\", \"children\", \"class\", \"elevated\", \"interactive\", \"tabIndex\"]);\n const className = () => local.class?.trim();\n\n return (\n <PaperElement\n component={local.as ?? \"div\"}\n {...elementProps}\n class={className() ? `k2b-paper ${className()}` : \"k2b-paper\"}\n data-elevated={local.elevated ? \"true\" : undefined}\n data-interactive={local.interactive ? \"true\" : undefined}\n tabindex={local.tabIndex}\n >\n {local.children}\n </PaperElement>\n );\n}\n\nexport default Paper;\n"],"mappings":";;;AAAA,SAAmBA,UAAU,QAAQ,UAAU;AAC/C,SAASC,OAAO,QAAQ,cAAc;AAetC,MAAMC,YAAY,GAAGD,OAAqE;AAE1F,OAAO,SAASE,KAAKA,CAA6BC,KAAoB,EAAe;EACnF,MAAM,CAACC,KAAK,EAAEC,YAAY,CAAC,GAAGN,UAAU,CAACI,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;EACnH,MAAMG,SAAS,GAAGA,CAAA,KAAMF,KAAK,CAACG,KAAK,EAAEC,IAAI,CAAC,CAAC;EAE3C,OAAAC,iBAAA,CACGR,YAAY,EAAAS,YAAA;IAAA,IACXC,SAASA,CAAA;MAAA,OAAEP,KAAK,CAACQ,EAAE,IAAI,KAAK;IAAA;EAAA,GACxBP,YAAY;IAAA,aAAAE,CAAA;MAAA,OACTM,MAAA,SAAAP,SAAS,CAAC,CAAC,MAAG,aAAaA,SAAS,CAAC,CAAC,EAAE,GAAG,WAAW;IAAA;IAAA,qBAAAQ,CAAA;MAAA,OAC9CV,KAAK,CAACW,QAAQ,GAAG,MAAM,GAAGC,SAAS;IAAA;IAAA,wBAAAC,CAAA;MAAA,OAChCb,KAAK,CAACc,WAAW,GAAG,MAAM,GAAGF,SAAS;IAAA;IAAA,IACxDG,QAAQA,CAAA;MAAA,OAAEf,KAAK,CAACgB,QAAQ;IAAA;IAAA,IAAAC,SAAA;MAAA,OAEvBjB,KAAK,CAACiB,QAAQ;IAAA;EAAA;AAGrB;AAEA,eAAenB,KAAK","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/Paper.tsx"],"sourcesContent":["import { type JSX, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\n\nexport type PaperTag = \"div\" | \"section\" | \"article\" | \"a\";\n\ntype PaperOwnProps<T extends PaperTag> = {\n as?: T;\n children?: JSX.Element;\n class?: string;\n elevated?: boolean;\n interactive?: boolean;\n tabIndex?: number;\n};\n\nexport type PaperProps<T extends PaperTag = \"div\"> = PaperOwnProps<T> & Omit<JSX.IntrinsicElements[T], keyof PaperOwnProps<T>>;\n\nconst PaperElement = Dynamic as unknown as (props: Record<string, unknown>) => JSX.Element;\n\nexport function Paper<T extends PaperTag = \"div\">(props: PaperProps<T>): JSX.Element {\n const [local, elementProps] = splitProps(props, [\"as\", \"children\", \"class\", \"elevated\", \"interactive\", \"tabIndex\"]);\n const className = () => local.class?.trim();\n\n return (\n <PaperElement\n component={local.as ?? \"div\"}\n {...elementProps}\n class={className() ? `k2b-paper ${className()}` : \"k2b-paper\"}\n data-elevated={local.elevated ? \"true\" : undefined}\n data-interactive={local.interactive ? \"true\" : undefined}\n tabindex={local.tabIndex}\n >\n {local.children}\n </PaperElement>\n );\n}\n\nexport default Paper;\n"],"mappings":";;;AAAA,SAAmB,UAAU,QAAQ,UAAU;AAC/C,SAAS,OAAO,QAAQ,cAAc;AAetC,MAAM,YAAY,GAAG,OAAqE;AAE1F,OAAO,SAAS,KAAK,CAA6B,KAAoB,EAAe;EACnF,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;EACnH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EAE3C,yBACG,YAAY;IAAA,IACX,SAAS;MAAA,OAAE,KAAK,CAAC,EAAE,IAAI,KAAK;IAAA;EAAA,GACxB,YAAY;IAAA;MAAA,OACT,wBAAS,CAAC,CAAC,MAAG,aAAa,SAAS,CAAC,CAAC,EAAE,GAAG,WAAW;IAAA;IAAA;MAAA,OAC9C,KAAK,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS;IAAA;IAAA;MAAA,OAChC,KAAK,CAAC,WAAW,GAAG,MAAM,GAAG,SAAS;IAAA;IAAA,IACxD,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;IAAA;MAAA,OAEvB,KAAK,CAAC,QAAQ;IAAA;EAAA;AAGrB;AAEA,eAAe,KAAK","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Show","Dynamic","Paper","Placeholder","props","align","state","variant","icon","undefined","_$createComponent","component","surface","class","data-align","data-state","data-surface","data-variant","role","_$memo","aria-live","aria-busy","children","when","iconClass","_el$4","_$getNextElement","_tmpl$4","_el$5","firstChild","_$effect","_$className","title","_el$","_tmpl$","_$insert","description","_el$2","_tmpl$2","action","_el$3","_tmpl$3"],"sources":["surfaces/Placeholder.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport { Paper } from \"./Paper\";\n\nexport type PlaceholderAlign = \"center\" | \"left\";\nexport type PlaceholderSurface = \"none\" | \"paper\";\nexport type PlaceholderState = \"empty\" | \"loading\" | \"error\";\nexport type PlaceholderVariant = \"compact\" | \"panel\";\n\nexport type PlaceholderProps = {\n title?: JSX.Element;\n description?: JSX.Element;\n icon?: string;\n action?: JSX.Element;\n align?: PlaceholderAlign;\n surface?: PlaceholderSurface;\n state?: PlaceholderState;\n variant?: PlaceholderVariant;\n class?: string;\n};\n\nexport default function Placeholder(props: PlaceholderProps): JSX.Element {\n const align = () => props.align ?? \"center\";\n const state = () => props.state ?? \"empty\";\n const variant = () => props.variant ?? \"compact\";\n const icon = () => props.icon ?? (state() === \"loading\" ? \"ti ti-loader-2\" : state() === \"error\" ? \"ti ti-alert-circle\" : undefined);\n\n return (\n <Dynamic\n component={props.surface === \"paper\" ? Paper : \"div\"}\n class={`k2b-placeholder ${props.class ?? \"\"}`}\n data-align={align()}\n data-state={state()}\n data-surface={props.surface ?? \"none\"}\n data-variant={variant()}\n role={state() === \"error\" ? \"alert\" : state() === \"loading\" ? \"status\" : undefined}\n aria-live={state() === \"loading\" ? \"polite\" : undefined}\n aria-busy={state() === \"loading\" ? \"true\" : undefined}\n >\n <Show when={icon()}>\n {(iconClass) => (\n <span class=\"k2b-placeholder__icon\">\n <i class={iconClass()} aria-hidden=\"true\" />\n </span>\n )}\n </Show>\n <Show when={props.title}>\n <p class=\"k2b-placeholder__title\">{props.title}</p>\n </Show>\n <Show when={props.description}>\n <div class=\"k2b-placeholder__description\">{props.description}</div>\n </Show>\n <Show when={props.action}>\n <div class=\"k2b-placeholder__action\">{props.action}</div>\n </Show>\n </Dynamic>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/Placeholder.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport { Paper } from \"./Paper\";\n\nexport type PlaceholderAlign = \"center\" | \"left\";\nexport type PlaceholderSurface = \"none\" | \"paper\";\nexport type PlaceholderState = \"empty\" | \"loading\" | \"error\";\nexport type PlaceholderVariant = \"compact\" | \"panel\";\n\nexport type PlaceholderProps = {\n title?: JSX.Element;\n description?: JSX.Element;\n icon?: string;\n action?: JSX.Element;\n align?: PlaceholderAlign;\n surface?: PlaceholderSurface;\n state?: PlaceholderState;\n variant?: PlaceholderVariant;\n class?: string;\n};\n\nexport default function Placeholder(props: PlaceholderProps): JSX.Element {\n const align = () => props.align ?? \"center\";\n const state = () => props.state ?? \"empty\";\n const variant = () => props.variant ?? \"compact\";\n const icon = () => props.icon ?? (state() === \"loading\" ? \"ti ti-loader-2\" : state() === \"error\" ? \"ti ti-alert-circle\" : undefined);\n\n return (\n <Dynamic\n component={props.surface === \"paper\" ? Paper : \"div\"}\n class={`k2b-placeholder ${props.class ?? \"\"}`}\n data-align={align()}\n data-state={state()}\n data-surface={props.surface ?? \"none\"}\n data-variant={variant()}\n role={state() === \"error\" ? \"alert\" : state() === \"loading\" ? \"status\" : undefined}\n aria-live={state() === \"loading\" ? \"polite\" : undefined}\n aria-busy={state() === \"loading\" ? \"true\" : undefined}\n >\n <Show when={icon()}>\n {(iconClass) => (\n <span class=\"k2b-placeholder__icon\">\n <i class={iconClass()} aria-hidden=\"true\" />\n </span>\n )}\n </Show>\n <Show when={props.title}>\n <p class=\"k2b-placeholder__title\">{props.title}</p>\n </Show>\n <Show when={props.description}>\n <div class=\"k2b-placeholder__description\">{props.description}</div>\n </Show>\n <Show when={props.action}>\n <div class=\"k2b-placeholder__action\">{props.action}</div>\n </Show>\n </Dynamic>\n );\n}\n"],"mappings":";;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AACzC,SAAS,OAAO,QAAQ,cAAc;AACtC,SAAS,KAAK,QAAQ,SAAS;AAmB/B,eAAe,SAAS,WAAW,CAAC,KAAuB,EAAe;EACxE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,QAAQ;EAC3C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,OAAO;EAC1C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,IAAI,SAAS;EAChD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,gBAAgB,GAAG,KAAK,CAAC,CAAC,KAAK,OAAO,GAAG,oBAAoB,GAAG,SAAS,CAAC;EAEpI,yBACG,OAAO;IAAA,IACN,SAAS;MAAA,OAAE,KAAK,CAAC,OAAO,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK;IAAA;IAAA;MAAA,OAC7C,mBAAmB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA;MAAA,OACjC,KAAK,CAAC,CAAC;IAAA;IAAA;MAAA,OACP,KAAK,CAAC,CAAC;IAAA;IAAA;MAAA,OACL,KAAK,CAAC,OAAO,IAAI,MAAM;IAAA;IAAA;MAAA,OACvB,OAAO,CAAC,CAAC;IAAA;IAAA,IACvB,IAAI;MAAA,OAAE,kBAAK,CAAC,CAAC,KAAK,OAAO,MAAG,OAAO,GAAG,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,QAAQ,GAAG,SAAS;IAAA;IAAA;MAAA,OACvE,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,QAAQ,GAAG,SAAS;IAAA;IAAA;MAAA,OAC5C,KAAK,CAAC,CAAC,KAAK,SAAS,GAAG,MAAM,GAAG,SAAS;IAAA;IAAA;MAAA,0BAEpD,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,IAAI,CAAC,CAAC;QAAA;QAAA,UACd,SAAS;UAAA;YAAA;UAAA,kCAEG,SAAS,CAAC,CAAC;UAAA;QAAA;MAExB,sBAEF,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA;UAAA;UAAA,qBACc,KAAK,CAAC,KAAK;UAAA;QAAA;MAAA,sBAE/C,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,WAAW;QAAA;QAAA;UAAA;UAAA,sBACgB,KAAK,CAAC,WAAW;UAAA;QAAA;MAAA,sBAE7D,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,MAAM;QAAA;QAAA;UAAA;UAAA,sBACgB,KAAK,CAAC,MAAM;UAAA;QAAA;MAAA;IAAA;EAAA;AAI1D","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["clamp","value","Number","isFinite","Math","max","min","round","ProgressBar","props","percent","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_co$","_$getNextMarker","_$insert","_c$","_$memo","showValue","_el$6","_tmpl$2","_el$8","_el$9","_co$2","_el$7","_$effect","_p$","_v$","class","_v$2","size","_v$3","tone","_v$4","label","_v$5","_v$6","e","_$className","t","_$setAttribute","a","o","i","n","_$style","undefined"],"sources":["surfaces/ProgressBar.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type ProgressBarTone = Extract<IntentTone, \"info\" | \"success\" | \"danger\">;\n\nexport type ProgressBarProps = {\n value: number;\n size?: \"xs\" | \"sm\" | \"md\";\n tone?: ProgressBarTone;\n showValue?: boolean;\n label: string;\n class?: string;\n};\n\nconst clamp = (value: number) => (Number.isFinite(value) ? Math.max(0, Math.min(100, Math.round(value))) : 0);\n\nexport function ProgressBar(props: ProgressBarProps): JSX.Element {\n const percent = () => clamp(props.value);\n return (\n <div class={`k2b-progress ${props.class ?? \"\"}`} data-size={props.size ?? \"md\"} data-tone={props.tone ?? \"info\"}>\n <div\n class=\"k2b-progress__track\"\n role=\"progressbar\"\n aria-label={props.label}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={percent()}\n >\n <div class=\"k2b-progress__value\" style={`width: ${percent()}%`} />\n </div>\n {props.showValue ? <span class=\"k2b-progress__percent\">{percent()}%</span> : null}\n </div>\n );\n}\n\nexport default ProgressBar;\n"],"mappings":";;;;;;;;;;;AAcA,MAAMA,KAAK,GAAIC,KAAa,IAAMC,MAAM,CAACC,QAAQ,CAACF,KAAK,CAAC,GAAGG,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,GAAG,EAAEF,IAAI,CAACG,KAAK,CAACN,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE;AAE7G,OAAO,SAASO,WAAWA,CAACC,KAAuB,EAAe;EAChE,MAAMC,OAAO,GAAGA,CAAA,KAAMV,KAAK,CAACS,KAAK,CAACR,KAAK,CAAC;EACxC;IAAA,IAAAU,IAAA,GAAAC,gBAAA,CAAAC,MAAA;MAAAC,KAAA,GAAAH,IAAA,CAAAI,UAAA;MAAAC,KAAA,GAAAF,KAAA,CAAAC,UAAA;MAAAE,KAAA,GAAAH,KAAA,CAAAI,WAAA;MAAA,CAAAC,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAJ,KAAA,CAAAC,WAAA;IAAAI,QAAA,CAAAX,IAAA;MAAA,IAAAY,GAAA,GAAAC,MAAA,SAYKf,KAAK,CAACgB,SAAS;MAAA,aAAfF,GAAA;QAAA,IAAAG,KAAA,GAAAd,gBAAA,CAAAe,OAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAX,UAAA;UAAA,CAAAc,KAAA,EAAAC,KAAA,IAAAT,eAAA,CAAAO,KAAA,CAAAV,WAAA;UAAAa,KAAA,GAAAF,KAAA,CAAAX,WAAA;QAAAI,QAAA,CAAAI,KAAA,EAAuDhB,OAAO,EAAAmB,KAAA,EAAAC,KAAA;QAAA,OAAAJ,KAAA;MAAA,OAAc,IAAI;IAAA,MAAAP,KAAA,EAAAC,IAAA;IAAAY,QAAA,CAAAC,GAAA;MAAA,IAAAC,GAAA,GAXvE,gBAAgBzB,KAAK,CAAC0B,KAAK,IAAI,EAAE,EAAE;QAAAC,IAAA,GAAa3B,KAAK,CAAC4B,IAAI,IAAI,IAAI;QAAAC,IAAA,GAAa7B,KAAK,CAAC8B,IAAI,IAAI,MAAM;QAAAC,IAAA,GAI/F/B,KAAK,CAACgC,KAAK;QAAAC,IAAA,GAGRhC,OAAO,CAAC,CAAC;QAAAiC,IAAA,GAEgB,UAAUjC,OAAO,CAAC,CAAC,GAAG;MAAAwB,GAAA,KAAAD,GAAA,CAAAW,CAAA,IAAAC,WAAA,CAAAlC,IAAA,EAAAsB,GAAA,CAAAW,CAAA,GAAAV,GAAA;MAAAE,IAAA,KAAAH,GAAA,CAAAa,CAAA,IAAAC,cAAA,CAAApC,IAAA,eAAAsB,GAAA,CAAAa,CAAA,GAAAV,IAAA;MAAAE,IAAA,KAAAL,GAAA,CAAAe,CAAA,IAAAD,cAAA,CAAApC,IAAA,eAAAsB,GAAA,CAAAe,CAAA,GAAAV,IAAA;MAAAE,IAAA,KAAAP,GAAA,CAAAgB,CAAA,IAAAF,cAAA,CAAAjC,KAAA,gBAAAmB,GAAA,CAAAgB,CAAA,GAAAT,IAAA;MAAAE,IAAA,KAAAT,GAAA,CAAAiB,CAAA,IAAAH,cAAA,CAAAjC,KAAA,mBAAAmB,GAAA,CAAAiB,CAAA,GAAAR,IAAA;MAAAT,GAAA,CAAAkB,CAAA,GAAAC,OAAA,CAAApC,KAAA,EAAA2B,IAAA,EAAAV,GAAA,CAAAkB,CAAA;MAAA,OAAAlB,GAAA;IAAA;MAAAW,CAAA,EAAAS,SAAA;MAAAP,CAAA,EAAAO,SAAA;MAAAL,CAAA,EAAAK,SAAA;MAAAJ,CAAA,EAAAI,SAAA;MAAAH,CAAA,EAAAG,SAAA;MAAAF,CAAA,EAAAE;IAAA;IAAA,OAAA1C,IAAA;EAAA;AAKtE;AAEA,eAAeH,WAAW","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/ProgressBar.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type ProgressBarTone = Extract<IntentTone, \"info\" | \"success\" | \"danger\">;\n\nexport type ProgressBarProps = {\n value: number;\n size?: \"xs\" | \"sm\" | \"md\";\n tone?: ProgressBarTone;\n showValue?: boolean;\n label: string;\n class?: string;\n};\n\nconst clamp = (value: number) => (Number.isFinite(value) ? Math.max(0, Math.min(100, Math.round(value))) : 0);\n\nexport function ProgressBar(props: ProgressBarProps): JSX.Element {\n const percent = () => clamp(props.value);\n return (\n <div class={`k2b-progress ${props.class ?? \"\"}`} data-size={props.size ?? \"md\"} data-tone={props.tone ?? \"info\"}>\n <div\n class=\"k2b-progress__track\"\n role=\"progressbar\"\n aria-label={props.label}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={percent()}\n >\n <div class=\"k2b-progress__value\" style={`width: ${percent()}%`} />\n </div>\n {props.showValue ? <span class=\"k2b-progress__percent\">{percent()}%</span> : null}\n </div>\n );\n}\n\nexport default ProgressBar;\n"],"mappings":";;;;;;;;;;;AAcA,MAAM,KAAK,GAAI,KAAa,IAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE;AAE7G,OAAO,SAAS,WAAW,CAAC,KAAuB,EAAe;EAChE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;EACxC;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA,yBAYK,KAAK,CAAC,SAAS;MAAA,aAAf;QAAA;UAAA;UAAA;UAAA;QAAA,gBAAuD,OAAO;QAAA;MAAA,OAAc,IAAI;IAAA;IAAA;MAAA,UAXvE,gBAAgB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAAa,KAAK,CAAC,IAAI,IAAI,IAAI;QAAA,OAAa,KAAK,CAAC,IAAI,IAAI,MAAM;QAAA,OAI/F,KAAK,CAAC,KAAK;QAAA,OAGR,OAAO,CAAC,CAAC;QAAA,OAEgB,UAAU,OAAO,CAAC,CAAC,GAAG;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAKtE;AAEA,eAAe,WAAW","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Show","Chart","useStatGridSize","useStatGridSurface","Body","props","gridSize","size","accent","_el$","_$getNextElement","_tmpl$","_$insert","label","_$effect","_$setAttribute","_el$2","_tmpl$2","value","_p$","_v$","valueClass","_v$2","_v$3","title","e","_$className","t","a","undefined","_$createComponent","when","_$memo","trend","length","children","kind","style","height","data","Array","from","showLast","showMinMax","sub","_el$3","_tmpl$3","_el$4","firstChild","_el$5","_co$","_$getNextMarker","nextSibling","_el$6","_el$7","_co$2","_el$8","_tmpl$4","text","fallback","_el$9","_tmpl$5","_v$4","icon","_v$5","tone","_el$0","_tmpl$6","_el$1","_el$10","_el$11","_co$3","_v$6","_v$7","StatCell","surface","href","_el$12","_tmpl$7","_el$13","_tmpl$8","_el$14","_el$15","_el$16","_co$4","_v$8","_v$9"],"sources":["surfaces/StatCell.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport Chart from \"../content/Chart\";\nimport type { AccentColor } from \"../semantics\";\nimport { type StatGridSize, useStatGridSize, useStatGridSurface } from \"./StatGrid\";\n\nexport type StatCellTone = AccentColor;\n\nexport type StatCellAccent = {\n tone: StatCellTone;\n icon: string;\n text?: string;\n};\n\nexport type StatCellProps = {\n label: string;\n value: string | number | JSX.Element;\n sub?: string;\n valueClass?: string;\n accent?: StatCellAccent;\n href?: string;\n title?: string;\n trend?: readonly number[];\n size?: StatGridSize;\n};\n\nfunction Body(props: StatCellProps): JSX.Element {\n const gridSize = useStatGridSize();\n const size = () => props.size ?? gridSize;\n const accent = () => props.accent;\n return (\n <>\n <span class=\"k2b-stat-cell__label\" data-size={size()}>\n {props.label}\n </span>\n <span class={`k2b-stat-cell__value ${props.valueClass ?? \"\"}`} data-size={size()} title={props.title}>\n {props.value}\n </span>\n <Show when={props.trend && props.trend.length > 1}>\n <Chart\n kind=\"sparkline\"\n class=\"k2b-stat-cell__trend\"\n style={{ height: \"32px\" }}\n data={Array.from(props.trend ?? [])}\n showLast\n showMinMax\n />\n </Show>\n <Show when={props.sub || accent()}>\n <div class=\"k2b-stat-cell__support\">\n <Show when={props.sub}>{(sub) => <span class=\"k2b-stat-cell__sub\">{sub()}</span>}</Show>\n <Show when={accent()}>\n {(value) => (\n <Show\n when={value().text}\n fallback={<i class={`${value().icon} k2b-stat-cell__accent-icon`} data-tone={value().tone} aria-hidden=\"true\" />}\n >\n {(text) => (\n <span class=\"k2b-stat-cell__accent\" data-tone={value().tone}>\n <i class={value().icon} aria-hidden=\"true\" />\n {text()}\n </span>\n )}\n </Show>\n )}\n </Show>\n </div>\n </Show>\n </>\n );\n}\n\nexport function StatCell(props: StatCellProps): JSX.Element {\n const gridSize = useStatGridSize();\n const size = () => props.size ?? gridSize;\n const surface = useStatGridSurface();\n return (\n <Show\n when={props.href}\n fallback={\n <div class=\"k2b-stat-cell\" data-size={size()} data-surface={surface}>\n <Body {...props} />\n </div>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-stat-cell k2b-stat-cell--link\" data-size={size()} data-surface={surface}>\n <i class=\"ti ti-external-link k2b-stat-cell__link-icon\" aria-hidden=\"true\" />\n <Body {...props} />\n </a>\n )}\n </Show>\n );\n}\n\nexport default StatCell;\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAmBA,IAAI,QAAQ,UAAU;AACzC,OAAOC,KAAK,MAAM,kBAAkB;AAEpC,SAA4BC,eAAe,EAAEC,kBAAkB,QAAQ,YAAY;AAsBnF,SAASC,IAAIA,CAACC,KAAoB,EAAe;EAC/C,MAAMC,QAAQ,GAAGJ,eAAe,CAAC,CAAC;EAClC,MAAMK,IAAI,GAAGA,CAAA,KAAMF,KAAK,CAACE,IAAI,IAAID,QAAQ;EACzC,MAAME,MAAM,GAAGA,CAAA,KAAMH,KAAK,CAACG,MAAM;EACjC;IAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;IAAAC,QAAA,CAAAH,IAAA,QAGOJ,KAAK,CAACQ,KAAK;IAAAC,QAAA,OAAAC,cAAA,CAAAN,IAAA,eADgCF,IAAI,CAAC,CAAC;IAAA,OAAAE,IAAA;EAAA;IAAA,IAAAO,KAAA,GAAAN,gBAAA,CAAAO,OAAA;IAAAL,QAAA,CAAAI,KAAA,QAIjDX,KAAK,CAACa,KAAK;IAAAJ,QAAA,CAAAK,GAAA;MAAA,IAAAC,GAAA,GADD,wBAAwBf,KAAK,CAACgB,UAAU,IAAI,EAAE,EAAE;QAAAC,IAAA,GAAaf,IAAI,CAAC,CAAC;QAAAgB,IAAA,GAASlB,KAAK,CAACmB,KAAK;MAAAJ,GAAA,KAAAD,GAAA,CAAAM,CAAA,IAAAC,WAAA,CAAAV,KAAA,EAAAG,GAAA,CAAAM,CAAA,GAAAL,GAAA;MAAAE,IAAA,KAAAH,GAAA,CAAAQ,CAAA,IAAAZ,cAAA,CAAAC,KAAA,eAAAG,GAAA,CAAAQ,CAAA,GAAAL,IAAA;MAAAC,IAAA,KAAAJ,GAAA,CAAAS,CAAA,IAAAb,cAAA,CAAAC,KAAA,WAAAG,GAAA,CAAAS,CAAA,GAAAL,IAAA;MAAA,OAAAJ,GAAA;IAAA;MAAAM,CAAA,EAAAI,SAAA;MAAAF,CAAA,EAAAE,SAAA;MAAAD,CAAA,EAAAC;IAAA;IAAA,OAAAb,KAAA;EAAA,MAAAc,iBAAA,CAGnG9B,IAAI;IAAA,IAAC+B,IAAIA,CAAA;MAAA,OAAEC,MAAA,SAAA3B,KAAK,CAAC4B,KAAK,OAAI5B,KAAK,CAAC4B,KAAK,CAACC,MAAM,GAAG,CAAC;IAAA;IAAA,IAAAC,SAAA;MAAA,OAAAL,iBAAA,CAC9C7B,KAAK;QACJmC,IAAI;QAAA;QAEJC,KAAK,EAAE;UAAEC,MAAM,EAAE;QAAO,CAAC;QAAA,IACzBC,IAAIA,CAAA;UAAA,OAAEC,KAAK,CAACC,IAAI,CAACpC,KAAK,CAAC4B,KAAK,IAAI,EAAE,CAAC;QAAA;QACnCS,QAAQ;QACRC,UAAU;MAAA;IAAA;EAAA,IAAAb,iBAAA,CAGb9B,IAAI;IAAA,IAAC+B,IAAIA,CAAA;MAAA,OAAE1B,KAAK,CAACuC,GAAG,IAAIpC,MAAM,CAAC,CAAC;IAAA;IAAA,IAAA2B,SAAA;MAAA,IAAAU,KAAA,GAAAnC,gBAAA,CAAAoC,OAAA;QAAAC,KAAA,GAAAF,KAAA,CAAAG,UAAA;QAAA,CAAAC,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAJ,KAAA,CAAAK,WAAA;QAAAC,KAAA,GAAAJ,KAAA,CAAAG,WAAA;QAAA,CAAAE,KAAA,EAAAC,KAAA,IAAAJ,eAAA,CAAAE,KAAA,CAAAD,WAAA;MAAAxC,QAAA,CAAAiC,KAAA,EAAAf,iBAAA,CAE5B9B,IAAI;QAAA,IAAC+B,IAAIA,CAAA;UAAA,OAAE1B,KAAK,CAACuC,GAAG;QAAA;QAAAT,QAAA,EAAIS,GAAG;UAAA,IAAAY,KAAA,GAAA9C,gBAAA,CAAA+C,OAAA;UAAA7C,QAAA,CAAA4C,KAAA,EAAuCZ,GAAG;UAAA,OAAAY,KAAA;QAAA;MAAU,IAAAP,KAAA,EAAAC,IAAA;MAAAtC,QAAA,CAAAiC,KAAA,EAAAf,iBAAA,CAC/E9B,IAAI;QAAA,IAAC+B,IAAIA,CAAA;UAAA,OAAEvB,MAAM,CAAC,CAAC;QAAA;QAAA2B,QAAA,EAChBjB,KAAK,IAAAY,iBAAA,CACJ9B,IAAI;UAAA,IACH+B,IAAIA,CAAA;YAAA,OAAEb,KAAK,CAAC,CAAC,CAACwC,IAAI;UAAA;UAAA,IAClBC,QAAQA,CAAA;YAAA;cAAA,IAAAC,KAAA,GAAAlD,gBAAA,CAAAmD,OAAA;cAAA/C,QAAA,CAAAK,GAAA;gBAAA,IAAA2C,IAAA,GAAY,GAAG5C,KAAK,CAAC,CAAC,CAAC6C,IAAI,6BAA6B;kBAAAC,IAAA,GAAa9C,KAAK,CAAC,CAAC,CAAC+C,IAAI;gBAAAH,IAAA,KAAA3C,GAAA,CAAAM,CAAA,IAAAC,WAAA,CAAAkC,KAAA,EAAAzC,GAAA,CAAAM,CAAA,GAAAqC,IAAA;gBAAAE,IAAA,KAAA7C,GAAA,CAAAQ,CAAA,IAAAZ,cAAA,CAAA6C,KAAA,eAAAzC,GAAA,CAAAQ,CAAA,GAAAqC,IAAA;gBAAA,OAAA7C,GAAA;cAAA;gBAAAM,CAAA,EAAAI,SAAA;gBAAAF,CAAA,EAAAE;cAAA;cAAA,OAAA+B,KAAA;YAAA;UAAA;UAAAzB,QAAA,EAEvFuB,IAAI;YAAA,IAAAQ,KAAA,GAAAxD,gBAAA,CAAAyD,OAAA;cAAAC,KAAA,GAAAF,KAAA,CAAAlB,UAAA;cAAAqB,MAAA,GAAAD,KAAA,CAAAhB,WAAA;cAAA,CAAAkB,MAAA,EAAAC,KAAA,IAAApB,eAAA,CAAAkB,MAAA,CAAAjB,WAAA;YAAAxC,QAAA,CAAAsD,KAAA,EAGDR,IAAI,EAAAY,MAAA,EAAAC,KAAA;YAAAzD,QAAA,CAAAK,GAAA;cAAA,IAAAqD,IAAA,GAFwCtD,KAAK,CAAC,CAAC,CAAC+C,IAAI;gBAAAQ,IAAA,GAC/CvD,KAAK,CAAC,CAAC,CAAC6C,IAAI;cAAAS,IAAA,KAAArD,GAAA,CAAAM,CAAA,IAAAV,cAAA,CAAAmD,KAAA,eAAA/C,GAAA,CAAAM,CAAA,GAAA+C,IAAA;cAAAC,IAAA,KAAAtD,GAAA,CAAAQ,CAAA,IAAAD,WAAA,CAAA0C,KAAA,EAAAjD,GAAA,CAAAQ,CAAA,GAAA8C,IAAA;cAAA,OAAAtD,GAAA;YAAA;cAAAM,CAAA,EAAAI,SAAA;cAAAF,CAAA,EAAAE;YAAA;YAAA,OAAAqC,KAAA;UAAA;QAGzB;MAEJ,IAAAZ,KAAA,EAAAC,KAAA;MAAA,OAAAV,KAAA;IAAA;EAAA;AAMb;AAEA,OAAO,SAAS6B,QAAQA,CAACrE,KAAoB,EAAe;EAC1D,MAAMC,QAAQ,GAAGJ,eAAe,CAAC,CAAC;EAClC,MAAMK,IAAI,GAAGA,CAAA,KAAMF,KAAK,CAACE,IAAI,IAAID,QAAQ;EACzC,MAAMqE,OAAO,GAAGxE,kBAAkB,CAAC,CAAC;EACpC,OAAA2B,iBAAA,CACG9B,IAAI;IAAA,IACH+B,IAAIA,CAAA;MAAA,OAAE1B,KAAK,CAACuE,IAAI;IAAA;IAAA,IAChBjB,QAAQA,CAAA;MAAA;QAAA,IAAAkB,MAAA,GAAAnE,gBAAA,CAAAoE,OAAA;QAAA/D,cAAA,CAAA8D,MAAA,kBACsDF,OAAO;QAAA/D,QAAA,CAAAiE,MAAA,EAAA/C,iBAAA,CAChE1B,IAAI,EAAKC,KAAK;QAAAS,QAAA,OAAAC,cAAA,CAAA8D,MAAA,eADqBtE,IAAI,CAAC,CAAC;QAAA,OAAAsE,MAAA;MAAA;IAAA;IAAA1C,QAAA,EAK5CyC,IAAI;MAAA,IAAAG,MAAA,GAAArE,gBAAA,CAAAsE,OAAA;QAAAC,MAAA,GAAAF,MAAA,CAAA/B,UAAA;QAAAkC,MAAA,GAAAD,MAAA,CAAA7B,WAAA;QAAA,CAAA+B,MAAA,EAAAC,KAAA,IAAAjC,eAAA,CAAA+B,MAAA,CAAA9B,WAAA;MAAArC,cAAA,CAAAgE,MAAA,kBACwFJ,OAAO;MAAA/D,QAAA,CAAAmE,MAAA,EAAAjD,iBAAA,CAEhG1B,IAAI,EAAKC,KAAK,GAAA8E,MAAA,EAAAC,KAAA;MAAAtE,QAAA,CAAAK,GAAA;QAAA,IAAAkE,IAAA,GAFRT,IAAI,CAAC,CAAC;UAAAU,IAAA,GAAuD/E,IAAI,CAAC,CAAC;QAAA8E,IAAA,KAAAlE,GAAA,CAAAM,CAAA,IAAAV,cAAA,CAAAgE,MAAA,UAAA5D,GAAA,CAAAM,CAAA,GAAA4D,IAAA;QAAAC,IAAA,KAAAnE,GAAA,CAAAQ,CAAA,IAAAZ,cAAA,CAAAgE,MAAA,eAAA5D,GAAA,CAAAQ,CAAA,GAAA2D,IAAA;QAAA,OAAAnE,GAAA;MAAA;QAAAM,CAAA,EAAAI,SAAA;QAAAF,CAAA,EAAAE;MAAA;MAAA,OAAAkD,MAAA;IAAA;EAI7E;AAGP;AAEA,eAAeL,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/StatCell.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport Chart from \"../content/Chart\";\nimport type { AccentColor } from \"../semantics\";\nimport { type StatGridSize, useStatGridSize, useStatGridSurface } from \"./StatGrid\";\n\nexport type StatCellTone = AccentColor;\n\nexport type StatCellAccent = {\n tone: StatCellTone;\n icon: string;\n text?: string;\n};\n\nexport type StatCellProps = {\n label: string;\n value: string | number | JSX.Element;\n sub?: string;\n valueClass?: string;\n accent?: StatCellAccent;\n href?: string;\n title?: string;\n trend?: readonly number[];\n size?: StatGridSize;\n};\n\nfunction Body(props: StatCellProps): JSX.Element {\n const gridSize = useStatGridSize();\n const size = () => props.size ?? gridSize;\n const accent = () => props.accent;\n return (\n <>\n <span class=\"k2b-stat-cell__label\" data-size={size()}>\n {props.label}\n </span>\n <span class={`k2b-stat-cell__value ${props.valueClass ?? \"\"}`} data-size={size()} title={props.title}>\n {props.value}\n </span>\n <Show when={props.trend && props.trend.length > 1}>\n <Chart\n kind=\"sparkline\"\n class=\"k2b-stat-cell__trend\"\n style={{ height: \"32px\" }}\n data={Array.from(props.trend ?? [])}\n showLast\n showMinMax\n />\n </Show>\n <Show when={props.sub || accent()}>\n <div class=\"k2b-stat-cell__support\">\n <Show when={props.sub}>{(sub) => <span class=\"k2b-stat-cell__sub\">{sub()}</span>}</Show>\n <Show when={accent()}>\n {(value) => (\n <Show\n when={value().text}\n fallback={<i class={`${value().icon} k2b-stat-cell__accent-icon`} data-tone={value().tone} aria-hidden=\"true\" />}\n >\n {(text) => (\n <span class=\"k2b-stat-cell__accent\" data-tone={value().tone}>\n <i class={value().icon} aria-hidden=\"true\" />\n {text()}\n </span>\n )}\n </Show>\n )}\n </Show>\n </div>\n </Show>\n </>\n );\n}\n\nexport function StatCell(props: StatCellProps): JSX.Element {\n const gridSize = useStatGridSize();\n const size = () => props.size ?? gridSize;\n const surface = useStatGridSurface();\n return (\n <Show\n when={props.href}\n fallback={\n <div class=\"k2b-stat-cell\" data-size={size()} data-surface={surface}>\n <Body {...props} />\n </div>\n }\n >\n {(href) => (\n <a href={href()} class=\"k2b-stat-cell k2b-stat-cell--link\" data-size={size()} data-surface={surface}>\n <i class=\"ti ti-external-link k2b-stat-cell__link-icon\" aria-hidden=\"true\" />\n <Body {...props} />\n </a>\n )}\n </Show>\n );\n}\n\nexport default StatCell;\n"],"mappings":"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","ignoreList":[]}