@k2b/ui 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/dist/browser/actions/Button.js.map +1 -1
  2. package/dist/browser/actions/ContextMenu.js.map +1 -1
  3. package/dist/browser/actions/CopyButton.js.map +1 -1
  4. package/dist/browser/actions/Disclosure.js.map +1 -1
  5. package/dist/browser/actions/Dropdown.js.map +1 -1
  6. package/dist/browser/actions/FilterChip.js.map +1 -1
  7. package/dist/browser/actions/RemoveButton.js.map +1 -1
  8. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  9. package/dist/browser/actions/SplitButton.js.map +1 -1
  10. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  11. package/dist/browser/actions/Tabs.js.map +1 -1
  12. package/dist/browser/actions/Toolbar.js.map +1 -1
  13. package/dist/browser/actions/index.js.map +1 -1
  14. package/dist/browser/chat/ChatComposer.js.map +1 -1
  15. package/dist/browser/chat/ChatContextPopup.js.map +1 -1
  16. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  17. package/dist/browser/chat/ChatRoot.js.map +1 -1
  18. package/dist/browser/chat/ChatTasks.js +1 -1
  19. package/dist/browser/chat/ChatTasks.js.map +1 -1
  20. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  21. package/dist/browser/chat/chat-behavior.js.map +1 -1
  22. package/dist/browser/chat/composer-document.js.map +1 -1
  23. package/dist/browser/chat/index.js.map +1 -1
  24. package/dist/browser/content/Calendar.js.map +1 -1
  25. package/dist/browser/content/Chart.js.map +1 -1
  26. package/dist/browser/content/ChartExplorer.js.map +1 -1
  27. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  28. package/dist/browser/content/ChartFilterControls.js +1 -1
  29. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  30. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  31. package/dist/browser/content/CodeDisplay.js.map +1 -1
  32. package/dist/browser/content/DataTable.js.map +1 -1
  33. package/dist/browser/content/Docs.js.map +1 -1
  34. package/dist/browser/content/FileBrowser.js.map +1 -1
  35. package/dist/browser/content/FileGrid.js.map +1 -1
  36. package/dist/browser/content/FileTree.js.map +1 -1
  37. package/dist/browser/content/FileView.js.map +1 -1
  38. package/dist/browser/content/Lightbox.js.map +1 -1
  39. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  40. package/dist/browser/content/MarkdownView.js.map +1 -1
  41. package/dist/browser/content/Pagination.js.map +1 -1
  42. package/dist/browser/content/PdfPreview.js.map +1 -1
  43. package/dist/browser/content/RangePicker.js.map +1 -1
  44. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  45. package/dist/browser/content/calendar-event-layout.js.map +1 -1
  46. package/dist/browser/content/calendar-pointer.js.map +1 -1
  47. package/dist/browser/content/chart-cursor.js.map +1 -1
  48. package/dist/browser/content/chart-explorer.js.map +1 -1
  49. package/dist/browser/content/chart-inspection.js.map +1 -1
  50. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  51. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  52. package/dist/browser/content/chart-snapshot.js.map +1 -1
  53. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  54. package/dist/browser/content/chart-svg.js.map +1 -1
  55. package/dist/browser/content/code-highlight.js.map +1 -1
  56. package/dist/browser/content/collection-selection.js.map +1 -1
  57. package/dist/browser/content/delimited-preferences.js.map +1 -1
  58. package/dist/browser/content/file-tree.js.map +1 -1
  59. package/dist/browser/content/file-view-preview.js.map +1 -1
  60. package/dist/browser/content/index.js.map +1 -1
  61. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  62. package/dist/browser/feedback/Tooltip.js.map +1 -1
  63. package/dist/browser/feedback/dialog-core.js.map +1 -1
  64. package/dist/browser/feedback/index.js.map +1 -1
  65. package/dist/browser/feedback/prompts.js.map +1 -1
  66. package/dist/browser/feedback/toast.js.map +1 -1
  67. package/dist/browser/feedback/tooltip-position.js.map +1 -1
  68. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  69. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  70. package/dist/browser/inputs/Checkbox.js.map +1 -1
  71. package/dist/browser/inputs/CheckboxCard.js.map +1 -1
  72. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  73. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  74. package/dist/browser/inputs/Combobox.js.map +1 -1
  75. package/dist/browser/inputs/DatePicker.js.map +1 -1
  76. package/dist/browser/inputs/FileInputs.js.map +1 -1
  77. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  78. package/dist/browser/inputs/NumberInput.js.map +1 -1
  79. package/dist/browser/inputs/Select.js.map +1 -1
  80. package/dist/browser/inputs/SelectChip.js.map +1 -1
  81. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  82. package/dist/browser/inputs/Switch.js.map +1 -1
  83. package/dist/browser/inputs/TagEditor.js.map +1 -1
  84. package/dist/browser/inputs/TagsInput.js.map +1 -1
  85. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  86. package/dist/browser/inputs/TextInput.js.map +1 -1
  87. package/dist/browser/inputs/choice.js.map +1 -1
  88. package/dist/browser/inputs/completion/behaviors.js.map +1 -1
  89. package/dist/browser/inputs/completion/engine.js.map +1 -1
  90. package/dist/browser/inputs/completion/index.js.map +1 -1
  91. package/dist/browser/inputs/completion/overlay.js.map +1 -1
  92. package/dist/browser/inputs/date-picker.js.map +1 -1
  93. package/dist/browser/inputs/editor-dom.js.map +1 -1
  94. package/dist/browser/inputs/field-contract.js.map +1 -1
  95. package/dist/browser/inputs/icon-options.js.map +1 -1
  96. package/dist/browser/inputs/image-crop.js.map +1 -1
  97. package/dist/browser/inputs/index.js.map +1 -1
  98. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  99. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  100. package/dist/browser/inputs/markdown/actions.js.map +1 -1
  101. package/dist/browser/inputs/markdown/active-formats.js.map +1 -1
  102. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  103. package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
  104. package/dist/browser/internal/color.js.map +1 -1
  105. package/dist/browser/internal/field.js.map +1 -1
  106. package/dist/browser/internal/portal.js.map +1 -1
  107. package/dist/browser/intl/Format.js.map +1 -1
  108. package/dist/browser/intl/index.js.map +1 -1
  109. package/dist/browser/intl/locale.js.map +1 -1
  110. package/dist/browser/intl/messages.js.map +1 -1
  111. package/dist/browser/layout/AppOverview.js.map +1 -1
  112. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  113. package/dist/browser/layout/BottomSheet.js.map +1 -1
  114. package/dist/browser/layout/DataPanel.js.map +1 -1
  115. package/dist/browser/layout/DetailPanel.js.map +1 -1
  116. package/dist/browser/layout/Discussion.js.map +1 -1
  117. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  118. package/dist/browser/layout/Navigation.js.map +1 -1
  119. package/dist/browser/layout/PanelDialog.js.map +1 -1
  120. package/dist/browser/layout/PanelHeader.js.map +1 -1
  121. package/dist/browser/layout/Panes.js.map +1 -1
  122. package/dist/browser/layout/PullToRefresh.js.map +1 -1
  123. package/dist/browser/layout/ScrollArea.js.map +1 -1
  124. package/dist/browser/layout/Settings.js.map +1 -1
  125. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  126. package/dist/browser/layout/SettingsModal.js.map +1 -1
  127. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  128. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  129. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  130. package/dist/browser/layout/floating-window-geometry.js.map +1 -1
  131. package/dist/browser/layout/index.js.map +1 -1
  132. package/dist/browser/layout/navigation-model.js.map +1 -1
  133. package/dist/browser/layout/panes-layout.js.map +1 -1
  134. package/dist/browser/layout/scroll-fade.js.map +1 -1
  135. package/dist/browser/layout/stable-id.js.map +1 -1
  136. package/dist/browser/surfaces/Avatar.js.map +1 -1
  137. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  138. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  139. package/dist/browser/surfaces/NotFoundState.js.map +1 -1
  140. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  141. package/dist/browser/surfaces/Paper.js.map +1 -1
  142. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  143. package/dist/browser/surfaces/ProgressBar.js.map +1 -1
  144. package/dist/browser/surfaces/StatCell.js.map +1 -1
  145. package/dist/browser/surfaces/StatGrid.js.map +1 -1
  146. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  147. package/dist/browser/surfaces/Tag.js.map +1 -1
  148. package/dist/browser/surfaces/index.js.map +1 -1
  149. package/dist/browser/widgets/Widget.js.map +1 -1
  150. package/dist/browser/widgets/WidgetHero.js.map +1 -1
  151. package/dist/browser/widgets/WidgetList.js.map +1 -1
  152. package/dist/browser/widgets/WidgetPills.js.map +1 -1
  153. package/dist/browser/widgets/WidgetStat.js.map +1 -1
  154. package/dist/browser/widgets/WidgetStatus.js.map +1 -1
  155. package/dist/ssr/actions/Button.js +5 -4
  156. package/dist/ssr/actions/Button.js.map +1 -1
  157. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  158. package/dist/ssr/actions/CopyButton.js +2 -1
  159. package/dist/ssr/actions/CopyButton.js.map +1 -1
  160. package/dist/ssr/actions/Disclosure.js.map +1 -1
  161. package/dist/ssr/actions/Dropdown.js +7 -6
  162. package/dist/ssr/actions/Dropdown.js.map +1 -1
  163. package/dist/ssr/actions/FilterChip.js +5 -4
  164. package/dist/ssr/actions/FilterChip.js.map +1 -1
  165. package/dist/ssr/actions/RemoveButton.js +1 -0
  166. package/dist/ssr/actions/RemoveButton.js.map +1 -1
  167. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  168. package/dist/ssr/actions/SplitButton.js +1 -0
  169. package/dist/ssr/actions/SplitButton.js.map +1 -1
  170. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  171. package/dist/ssr/actions/Tabs.js.map +1 -1
  172. package/dist/ssr/actions/Toolbar.js.map +1 -1
  173. package/dist/ssr/actions/index.js.map +1 -1
  174. package/dist/ssr/chat/ChatComposer.js +6 -5
  175. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  176. package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
  177. package/dist/ssr/chat/ChatPrimitives.js +6 -5
  178. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  179. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  180. package/dist/ssr/chat/ChatTasks.js +1 -1
  181. package/dist/ssr/chat/ChatTasks.js.map +1 -1
  182. package/dist/ssr/chat/ChatTimeline.js +5 -4
  183. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  184. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  185. package/dist/ssr/chat/composer-document.js.map +1 -1
  186. package/dist/ssr/chat/index.js.map +1 -1
  187. package/dist/ssr/content/Calendar.js +2 -1
  188. package/dist/ssr/content/Calendar.js.map +1 -1
  189. package/dist/ssr/content/Chart.js.map +1 -1
  190. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  191. package/dist/ssr/content/ChartExplorerControls.js +5 -4
  192. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  193. package/dist/ssr/content/ChartFilterControls.js +3 -2
  194. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  195. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  196. package/dist/ssr/content/CodeDisplay.js.map +1 -1
  197. package/dist/ssr/content/DataTable.js +1 -0
  198. package/dist/ssr/content/DataTable.js.map +1 -1
  199. package/dist/ssr/content/Docs.js +1 -0
  200. package/dist/ssr/content/Docs.js.map +1 -1
  201. package/dist/ssr/content/FileBrowser.js +2 -1
  202. package/dist/ssr/content/FileBrowser.js.map +1 -1
  203. package/dist/ssr/content/FileGrid.js.map +1 -1
  204. package/dist/ssr/content/FileTree.js +2 -1
  205. package/dist/ssr/content/FileTree.js.map +1 -1
  206. package/dist/ssr/content/FileView.js +5 -4
  207. package/dist/ssr/content/FileView.js.map +1 -1
  208. package/dist/ssr/content/Lightbox.js +2 -1
  209. package/dist/ssr/content/Lightbox.js.map +1 -1
  210. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  211. package/dist/ssr/content/MarkdownView.js.map +1 -1
  212. package/dist/ssr/content/Pagination.js +2 -1
  213. package/dist/ssr/content/Pagination.js.map +1 -1
  214. package/dist/ssr/content/PdfPreview.js.map +1 -1
  215. package/dist/ssr/content/RangePicker.js.map +1 -1
  216. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  217. package/dist/ssr/content/calendar-event-layout.js.map +1 -1
  218. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  219. package/dist/ssr/content/chart-cursor.js.map +1 -1
  220. package/dist/ssr/content/chart-explorer.js.map +1 -1
  221. package/dist/ssr/content/chart-inspection.js.map +1 -1
  222. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  223. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  224. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  225. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  226. package/dist/ssr/content/chart-svg.js.map +1 -1
  227. package/dist/ssr/content/code-highlight.js.map +1 -1
  228. package/dist/ssr/content/collection-selection.js.map +1 -1
  229. package/dist/ssr/content/delimited-preferences.js.map +1 -1
  230. package/dist/ssr/content/file-tree.js.map +1 -1
  231. package/dist/ssr/content/file-view-preview.js.map +1 -1
  232. package/dist/ssr/content/index.js.map +1 -1
  233. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  234. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  235. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  236. package/dist/ssr/feedback/index.js.map +1 -1
  237. package/dist/ssr/feedback/prompts.js +3 -2
  238. package/dist/ssr/feedback/prompts.js.map +1 -1
  239. package/dist/ssr/feedback/toast.js.map +1 -1
  240. package/dist/ssr/feedback/tooltip-position.js.map +1 -1
  241. package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
  242. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  243. package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
  244. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  245. package/dist/ssr/inputs/Checkbox.js +1 -0
  246. package/dist/ssr/inputs/Checkbox.js.map +1 -1
  247. package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
  248. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  249. package/dist/ssr/inputs/ChoiceInputs.js +1 -0
  250. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  251. package/dist/ssr/inputs/Combobox.js +2 -1
  252. package/dist/ssr/inputs/Combobox.js.map +1 -1
  253. package/dist/ssr/inputs/DatePicker.js +4 -3
  254. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  255. package/dist/ssr/inputs/FileInputs.js +2 -1
  256. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  257. package/dist/ssr/inputs/MultiSelectInput.js +4 -3
  258. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  259. package/dist/ssr/inputs/NumberInput.js +2 -1
  260. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  261. package/dist/ssr/inputs/Select.js +4 -3
  262. package/dist/ssr/inputs/Select.js.map +1 -1
  263. package/dist/ssr/inputs/SelectChip.js +3 -2
  264. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  265. package/dist/ssr/inputs/SpecialInputs.js +1 -0
  266. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  267. package/dist/ssr/inputs/Switch.js.map +1 -1
  268. package/dist/ssr/inputs/TagEditor.js +3 -2
  269. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  270. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  271. package/dist/ssr/inputs/TemplateEditor.js +1 -0
  272. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  273. package/dist/ssr/inputs/TextInput.js +4 -3
  274. package/dist/ssr/inputs/TextInput.js.map +1 -1
  275. package/dist/ssr/inputs/choice.js.map +1 -1
  276. package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
  277. package/dist/ssr/inputs/completion/engine.js.map +1 -1
  278. package/dist/ssr/inputs/completion/index.js.map +1 -1
  279. package/dist/ssr/inputs/completion/overlay.js.map +1 -1
  280. package/dist/ssr/inputs/date-picker.js.map +1 -1
  281. package/dist/ssr/inputs/editor-dom.js.map +1 -1
  282. package/dist/ssr/inputs/field-contract.js.map +1 -1
  283. package/dist/ssr/inputs/icon-options.js.map +1 -1
  284. package/dist/ssr/inputs/image-crop.js.map +1 -1
  285. package/dist/ssr/inputs/index.js.map +1 -1
  286. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  287. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  288. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  289. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  290. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
  291. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  292. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  293. package/dist/ssr/internal/color.js.map +1 -1
  294. package/dist/ssr/internal/field.js.map +1 -1
  295. package/dist/ssr/internal/portal.js.map +1 -1
  296. package/dist/ssr/intl/Format.js.map +1 -1
  297. package/dist/ssr/intl/index.js.map +1 -1
  298. package/dist/ssr/intl/locale.js.map +1 -1
  299. package/dist/ssr/intl/messages.js.map +1 -1
  300. package/dist/ssr/layout/AppOverview.js +2 -1
  301. package/dist/ssr/layout/AppOverview.js.map +1 -1
  302. package/dist/ssr/layout/AppWorkspace.js +7 -6
  303. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  304. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  305. package/dist/ssr/layout/DataPanel.js +1 -0
  306. package/dist/ssr/layout/DataPanel.js.map +1 -1
  307. package/dist/ssr/layout/DetailPanel.js +1 -0
  308. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  309. package/dist/ssr/layout/Discussion.js +3 -2
  310. package/dist/ssr/layout/Discussion.js.map +1 -1
  311. package/dist/ssr/layout/FloatingWindow.js +1 -0
  312. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  313. package/dist/ssr/layout/Navigation.js +3 -2
  314. package/dist/ssr/layout/Navigation.js.map +1 -1
  315. package/dist/ssr/layout/PanelDialog.js +1 -0
  316. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  317. package/dist/ssr/layout/PanelHeader.js.map +1 -1
  318. package/dist/ssr/layout/Panes.js.map +1 -1
  319. package/dist/ssr/layout/PullToRefresh.js.map +1 -1
  320. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  321. package/dist/ssr/layout/Settings.js +2 -1
  322. package/dist/ssr/layout/Settings.js.map +1 -1
  323. package/dist/ssr/layout/SettingsCollection.js +1 -0
  324. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  325. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  326. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  327. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  328. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  329. package/dist/ssr/layout/floating-window-geometry.js.map +1 -1
  330. package/dist/ssr/layout/index.js.map +1 -1
  331. package/dist/ssr/layout/navigation-model.js.map +1 -1
  332. package/dist/ssr/layout/panes-layout.js.map +1 -1
  333. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  334. package/dist/ssr/layout/stable-id.js.map +1 -1
  335. package/dist/ssr/surfaces/Avatar.js +2 -1
  336. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  337. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  338. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  339. package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
  340. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  341. package/dist/ssr/surfaces/Paper.js +2 -1
  342. package/dist/ssr/surfaces/Paper.js.map +1 -1
  343. package/dist/ssr/surfaces/Placeholder.js +2 -1
  344. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  345. package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
  346. package/dist/ssr/surfaces/StatCell.js +2 -1
  347. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  348. package/dist/ssr/surfaces/StatGrid.js +1 -0
  349. package/dist/ssr/surfaces/StatGrid.js.map +1 -1
  350. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  351. package/dist/ssr/surfaces/Tag.js.map +1 -1
  352. package/dist/ssr/surfaces/index.js.map +1 -1
  353. package/dist/ssr/widgets/Widget.js +1 -0
  354. package/dist/ssr/widgets/Widget.js.map +1 -1
  355. package/dist/ssr/widgets/WidgetHero.js.map +1 -1
  356. package/dist/ssr/widgets/WidgetList.js.map +1 -1
  357. package/dist/ssr/widgets/WidgetPills.js.map +1 -1
  358. package/dist/ssr/widgets/WidgetStat.js +1 -0
  359. package/dist/ssr/widgets/WidgetStat.js.map +1 -1
  360. package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
  361. package/dist/styles.css +1 -1
  362. package/dist/types/actions/SpotlightSearch.d.ts +1 -1
  363. package/dist/types/feedback/prompts.d.ts +2 -2
  364. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","useContext","Dynamic","useLocale","useUiMessages","PanelHeader","Paper","Placeholder","DataTablePanelContext","defaultRender","value","locale","messages","undefined","Date","toLocaleString","yes","no","String","JSON","stringify","renderColumnPart","part","col","rowInteractiveSelector","join","isNestedRowControl","event","target","Element","closest","currentTarget","scrollbarMetrics","viewportSize","contentSize","scrollOffset","overflow","offset","size","Math","min","max","DataTableRoot","props","hoveredColumn","setHoveredColumn","scrollbars","setScrollbars","x","y","scrollbarEnhanced","setScrollbarEnhanced","scrolling","setScrolling","panel","tableRef","scrollRef","loadMoreRef","scrollingTimeout","scrollbarDragOffset","hasMore","loadingMore","onLoadMore","loadMoreRequested","previousRowsLength","rows","length","previousLoadingMore","previousHasMore","rowId","row","getRowId","isInteractive","selection","onRowClick","onRowDoubleClick","shouldHoverRows","hoverRows","shouldRenderLoadMoreSentinel","labelledBy","ariaLabelledBy","hasHeading","headingId","surface","class","cellContentClass","tableClass","trim","columnHighlighted","index","highlightColumns","setHoveredColumnIfEnabled","isNearBottom","scrollTop","clientHeight","scrollHeight","maybeLoadMore","error","syncScrollbars","clientWidth","scrollWidth","scrollLeft","revealScrollbars","clearTimeout","setTimeout","onScroll","scrollFromPointer","axis","track","metrics","rect","getBoundingClientRect","trackSize","height","width","pointerOffset","clientY","top","clientX","left","available","thumbOffset","maxScroll","startScrollbarDrag","preventDefault","setPointerCapture","pointerId","valueOf","columnAlignments","alignments","Map","columns","align","set","id","alignAttr","get","sortKeyOf","sortable","sortLinkFor","key","sortHref","active","sort","direction","href","ariaSortFor","renderHeader","renderHeaderDefault","title","_el$","_$getNextElement","_tmpl$","_$insert","header","_$createComponent","when","subtitle","children","_el$2","_tmpl$2","_el$3","_tmpl$3","_$effect","_$setAttribute","_el$4","_tmpl$4","_el$5","firstChild","_el$7","_el$8","_co$","_$getNextMarker","nextSibling","_el$6","_p$","_v$","_v$2","_v$3","_v$4","e","t","a","_$className","o","renderValueDefault","renderCellDefault","onRowKeyDown","keyDown","select","rowClass","IntersectionObserver","observer","entries","some","entry","isIntersecting","root","rootMargin","observe","disconnect","ResizeObserver","rowsLength","nextHasMore","nextLoadingMore","queueMicrotask","fallback","description","_$memo","noColumns","component","data-surface","data-has-footer","footer","data-overflow-x","data-overflow-y","data-scrollbar-enhanced","data-scrolling","onMouseLeave","_el$9","_tmpl$7","_el$0","_el$1","_el$10","_el$11","_el$14","_el$15","_co$2","_el$17","_el$18","_co$3","addEventListener","_ref$","_$use","_ref$2","each","_el$19","_tmpl$8","_c$","render","_v$12","headerClass","_v$13","_v$14","_v$15","_el$20","_tmpl$9","_el$21","empty","noRecords","isSelected","selected","has","selectedRowId","_el$22","_tmpl$0","$$keydown","$$contextmenu","onRowContextMenu","$$dblclick","$$click","markFocused","element","register","_el$23","_tmpl$1","_el$24","_c$2","renderCell","v","_v$22","cellClass","_v$23","_v$24","verticalAlign","_v$25","_v$26","i","_v$16","_v$17","_v$18","_v$19","_v$20","_v$21","focused","n","_$runHydrationEvents","fillHeight","_el$12","_tmpl$5","_el$13","_el$25","_tmpl$10","_el$26","values","_el$27","_tmpl$11","_c$3","_v$27","_v$28","_el$16","_tmpl$6","_ref$3","_v$5","ariaLabel","dataTable","_v$6","_v$7","density","_v$8","_v$9","_v$0","scrollPreserveKey","_v$1","_v$10","_v$11","stickyHeader","s","h","r","_el$28","_tmpl$12","_el$29","releasePointerCapture","$$pointerup","$$pointermove","hasPointerCapture","$$pointerdown","_v$29","_v$30","_v$31","_$setStyleProperty","DataTablePanel","setHasHeading","context","registerHeading","Provider","as","DataTableHeader","_el$30","_tmpl$13","_el$31","_tmpl$14","actions","DataTableControls","_el$32","DataTablePanelFooter","_el$33","_tmpl$15","DataTable","Panel","Header","Controls","Footer","_$delegateEvents"],"sources":["content/DataTable.tsx"],"sourcesContent":["import {\n type Accessor,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n onCleanup,\n onMount,\n Show,\n useContext,\n} from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { PanelHeader } from \"../layout/PanelHeader\";\nimport { Paper } from \"../surfaces/Paper\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport type { CollectionSelection } from \"./collection-selection\";\n\nexport type DataTableColumn<T> = {\n id: string;\n header: JSX.Element | ((ctx: { col: DataTableColumn<T> }) => JSX.Element);\n subtitle?: JSX.Element | ((ctx: { col: DataTableColumn<T> }) => JSX.Element);\n value?: keyof T | ((row: T) => unknown);\n class?: string;\n headerClass?: string;\n cellClass?: string;\n /** Defaults to right for numeric values and left for everything else. */\n align?: \"left\" | \"center\" | \"right\";\n /**\n * Marks the column sortable. Pass a string when the server's sort key\n * differs from the column id — they often do, because one column can show a\n * rate while another sorts by the absolute count behind it.\n */\n sortable?: boolean | string;\n};\n\nexport type DataTableSort = { key: string; direction: \"asc\" | \"desc\" };\n\nexport type DataTableRenderCell<T> = (ctx: {\n row: T;\n col: DataTableColumn<T>;\n value: unknown;\n render: (value: unknown) => JSX.Element;\n}) => JSX.Element;\n\nexport type DataTableRenderHeader<T> = (ctx: { col: DataTableColumn<T>; render: () => JSX.Element }) => JSX.Element;\n\nexport type DataTableFooter<T> = {\n values?: Record<string, unknown>;\n renderCell?: (ctx: { col: DataTableColumn<T>; value: unknown; render: (value: unknown) => JSX.Element }) => JSX.Element;\n};\n\nexport type DataTableProps<T> = {\n rows: readonly T[];\n columns: readonly DataTableColumn<T>[];\n /** Accessible name for a standalone table region. Defaults to \"Data table\". */\n ariaLabel?: string;\n /** ID of a visible heading that labels the table region. Takes precedence over ariaLabel. */\n ariaLabelledBy?: string;\n getRowId?: (row: T) => string;\n /** Current server-side ordering, or null when the default applies. */\n sort?: DataTableSort | null;\n /**\n * Link target for a sortable header. Link-based because every admin table is\n * server-rendered: sorting is a query change, not client state.\n */\n sortHref?: (next: DataTableSort) => string;\n selectedRowId?: string | null;\n /** Optional multi-selection shared with another collection view. Requires getRowId. */\n selection?: CollectionSelection;\n rowClass?: string | ((row: T) => string | undefined);\n hoverRows?: boolean;\n onRowClick?: (row: T) => void;\n onRowDoubleClick?: (row: T) => void;\n onRowContextMenu?: (row: T) => void;\n renderCell?: DataTableRenderCell<T>;\n renderHeader?: DataTableRenderHeader<T>;\n footer?: DataTableFooter<T>;\n hasMore?: boolean;\n loadingMore?: boolean;\n onLoadMore?: () => void;\n empty?: JSX.Element;\n density?: \"compact\" | \"normal\";\n stickyHeader?: boolean;\n highlightColumns?: boolean;\n verticalAlign?: \"top\" | \"middle\" | \"bottom\";\n cellContentClass?: string;\n fillHeight?: boolean;\n /** Visual frame for a standalone table. Defaults preserve the legacy class-based behavior. */\n surface?: \"paper\" | \"plain\";\n class?: string;\n /** Additional classes for the table element. Core table geometry is always retained. */\n tableClass?: string;\n scrollPreserveKey?: string | false;\n};\n\nexport type DataTablePanelProps = {\n children: JSX.Element;\n class?: string;\n};\n\nexport type DataTableHeaderProps = {\n title: string;\n subtitle?: string;\n children?: JSX.Element;\n as?: \"h1\" | \"h2\" | \"h3\";\n size?: \"sm\" | \"md\";\n class?: string;\n};\n\nexport type DataTableControlsProps = {\n children: JSX.Element;\n class?: string;\n};\n\nexport type DataTablePanelFooterProps = {\n children: JSX.Element;\n class?: string;\n};\n\ntype DataTablePanelContextValue = {\n headingId: string;\n hasHeading: Accessor<boolean>;\n registerHeading: () => void;\n};\n\nconst DataTablePanelContext = createContext<DataTablePanelContextValue>();\n\nconst defaultRender = (value: unknown, locale: string, messages: ReturnType<ReturnType<typeof useUiMessages>>): JSX.Element => {\n if (value === null || value === undefined || value === \"\") return \"—\";\n if (value instanceof Date) return value.toLocaleString(locale);\n if (typeof value === \"boolean\") return value ? messages.yes : messages.no;\n if (typeof value === \"number\" || typeof value === \"bigint\") return String(value);\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n};\n\nconst renderColumnPart = <T,>(\n part: DataTableColumn<T>[\"header\"] | DataTableColumn<T>[\"subtitle\"],\n col: DataTableColumn<T>,\n): JSX.Element => {\n if (typeof part === \"function\") return part({ col });\n return part;\n};\n\nconst rowInteractiveSelector = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"label\",\n \"select\",\n \"textarea\",\n \"summary\",\n \"[contenteditable]\",\n \"[role='button']\",\n \"[role='checkbox']\",\n \"[role='link']\",\n \"[role='menuitem']\",\n \"[role='option']\",\n \"[role='radio']\",\n \"[role='switch']\",\n \"[role='tab']\",\n \"[tabindex]\",\n].join(\",\");\n\nconst isNestedRowControl = (event: Event): boolean =>\n event.target instanceof Element && event.target.closest(rowInteractiveSelector) !== event.currentTarget;\n\ntype DataTableScrollbarAxis = \"x\" | \"y\";\ntype DataTableScrollbarMetrics = { overflow: boolean; offset: number; size: number };\n\nconst scrollbarMetrics = (viewportSize: number, contentSize: number, scrollOffset: number): DataTableScrollbarMetrics => {\n if (viewportSize <= 0 || contentSize <= viewportSize + 1) return { overflow: false, offset: 0, size: 0 };\n const size = Math.min(viewportSize, Math.max(24, (viewportSize * viewportSize) / contentSize));\n const offset = (scrollOffset / (contentSize - viewportSize)) * (viewportSize - size);\n return { overflow: true, offset, size };\n};\n\nfunction DataTableRoot<T>(props: DataTableProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const [hoveredColumn, setHoveredColumn] = createSignal<number | null>(null);\n const [scrollbars, setScrollbars] = createSignal<Record<DataTableScrollbarAxis, DataTableScrollbarMetrics>>({\n x: { overflow: false, offset: 0, size: 0 },\n y: { overflow: false, offset: 0, size: 0 },\n });\n const [scrollbarEnhanced, setScrollbarEnhanced] = createSignal(false);\n const [scrolling, setScrolling] = createSignal(false);\n const panel = useContext(DataTablePanelContext);\n let tableRef: HTMLTableElement | undefined;\n let scrollRef: HTMLDivElement | undefined;\n let loadMoreRef: HTMLDivElement | undefined;\n let scrollingTimeout: ReturnType<typeof setTimeout> | undefined;\n let scrollbarDragOffset = 0;\n let hasMore = false;\n let loadingMore = false;\n let onLoadMore: (() => void) | undefined;\n let loadMoreRequested = false;\n let previousRowsLength = props.rows.length;\n let previousLoadingMore = !!props.loadingMore;\n let previousHasMore = !!props.hasMore;\n const rowId = (row: T) => props.getRowId?.(row);\n const isInteractive = () => !!props.selection || !!props.onRowClick || !!props.onRowDoubleClick;\n const shouldHoverRows = () => props.hoverRows ?? isInteractive();\n const shouldRenderLoadMoreSentinel = () => !!props.onLoadMore;\n const labelledBy = () => props.ariaLabelledBy ?? (panel?.hasHeading() ? panel.headingId : undefined);\n const surface = () => props.surface ?? (props.class ? \"plain\" : \"paper\");\n const cellContentClass = () => props.cellContentClass ?? \"k2b-data-table__cell-text\";\n const tableClass = () => `k2b-data-table ${props.tableClass ?? \"\"}`.trim();\n const columnHighlighted = (index: number) =>\n props.highlightColumns !== false && shouldHoverRows() && hoveredColumn() === index ? \"true\" : undefined;\n const setHoveredColumnIfEnabled = (index: number) => {\n if (shouldHoverRows()) setHoveredColumn(index);\n };\n\n const isNearBottom = () => {\n if (!scrollRef) return false;\n return scrollRef.scrollTop + scrollRef.clientHeight >= scrollRef.scrollHeight - 240;\n };\n\n const maybeLoadMore = () => {\n if (!hasMore || loadingMore || loadMoreRequested || !onLoadMore) return;\n if (!isNearBottom()) return;\n loadMoreRequested = true;\n try {\n onLoadMore();\n } catch (error) {\n loadMoreRequested = false;\n throw error;\n }\n };\n\n const syncScrollbars = () => {\n if (!scrollRef) return;\n setScrollbars({\n x: scrollbarMetrics(scrollRef.clientWidth, scrollRef.scrollWidth, scrollRef.scrollLeft),\n y: scrollbarMetrics(scrollRef.clientHeight, scrollRef.scrollHeight, scrollRef.scrollTop),\n });\n };\n\n const revealScrollbars = () => {\n setScrolling(true);\n if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);\n scrollingTimeout = setTimeout(() => {\n setScrolling(false);\n scrollingTimeout = undefined;\n }, 700);\n };\n\n const onScroll = () => {\n syncScrollbars();\n revealScrollbars();\n maybeLoadMore();\n };\n\n const scrollFromPointer = (event: PointerEvent & { currentTarget: HTMLDivElement }, axis: DataTableScrollbarAxis) => {\n if (!scrollRef) return;\n const track = event.currentTarget;\n const metrics = scrollbars()[axis];\n const rect = track.getBoundingClientRect();\n const trackSize = axis === \"y\" ? rect.height : rect.width;\n const pointerOffset = axis === \"y\" ? event.clientY - rect.top : event.clientX - rect.left;\n const available = Math.max(1, trackSize - metrics.size);\n const thumbOffset = Math.min(available, Math.max(0, pointerOffset - scrollbarDragOffset));\n const maxScroll = axis === \"y\" ? scrollRef.scrollHeight - scrollRef.clientHeight : scrollRef.scrollWidth - scrollRef.clientWidth;\n if (axis === \"y\") scrollRef.scrollTop = (thumbOffset / available) * maxScroll;\n else scrollRef.scrollLeft = (thumbOffset / available) * maxScroll;\n syncScrollbars();\n revealScrollbars();\n };\n\n const startScrollbarDrag = (event: PointerEvent & { currentTarget: HTMLDivElement }, axis: DataTableScrollbarAxis) => {\n event.preventDefault();\n const metrics = scrollbars()[axis];\n const rect = event.currentTarget.getBoundingClientRect();\n const pointerOffset = axis === \"y\" ? event.clientY - rect.top : event.clientX - rect.left;\n scrollbarDragOffset =\n event.target === event.currentTarget ? metrics.size / 2 : Math.min(metrics.size, Math.max(0, pointerOffset - metrics.offset));\n event.currentTarget.setPointerCapture(event.pointerId);\n scrollFromPointer(event, axis);\n };\n\n const valueOf = (row: T, col: DataTableColumn<T>) => {\n if (typeof col.value === \"function\") return col.value(row);\n if (col.value) return row[col.value];\n return undefined;\n };\n\n const columnAlignments = createMemo(() => {\n const alignments = new Map<string, NonNullable<DataTableColumn<T>[\"align\"]>>();\n for (const col of props.columns) {\n if (col.align) {\n alignments.set(col.id, col.align);\n continue;\n }\n let align: NonNullable<DataTableColumn<T>[\"align\"]> = \"left\";\n for (const row of props.rows) {\n const value = valueOf(row, col);\n if (value === null || value === undefined || value === \"\") continue;\n align = typeof value === \"number\" || typeof value === \"bigint\" ? \"right\" : \"left\";\n break;\n }\n alignments.set(col.id, align);\n }\n return alignments;\n });\n\n /** `data-align` mirrors Cloud's `text-left/center/right` on the same cell. */\n const alignAttr = (col: DataTableColumn<T>) => {\n const align = columnAlignments().get(col.id) ?? \"left\";\n return align === \"left\" ? undefined : align;\n };\n\n const sortKeyOf = (col: DataTableColumn<T>): string | null =>\n col.sortable === true ? col.id : typeof col.sortable === \"string\" ? col.sortable : null;\n\n /**\n * Sorting is a link, not a handler: these tables are server-rendered, so the\n * order belongs in the URL. Clicking the active column flips its direction.\n */\n const sortLinkFor = (col: DataTableColumn<T>): { href: string; active: boolean; direction: \"asc\" | \"desc\" } | null => {\n const key = sortKeyOf(col);\n if (!key || !props.sortHref) return null;\n const active = props.sort?.key === key;\n const direction: \"asc\" | \"desc\" = active && props.sort?.direction === \"desc\" ? \"asc\" : \"desc\";\n return { href: props.sortHref({ key, direction }), active, direction };\n };\n\n /** Only a sortable column carries a sort state; the rest carry none at all. */\n const ariaSortFor = (col: DataTableColumn<T>): \"ascending\" | \"descending\" | \"none\" | undefined => {\n const key = sortKeyOf(col);\n if (!key || (!props.sortHref && !props.renderHeader)) return undefined;\n if (props.sort?.key !== key) return \"none\";\n return props.sort?.direction === \"asc\" ? \"ascending\" : \"descending\";\n };\n\n const renderHeaderDefault = (col: DataTableColumn<T>): JSX.Element => {\n const sort = sortLinkFor(col);\n const title = (\n <>\n <span class=\"k2b-data-table__header-title\">{renderColumnPart(col.header, col)}</span>\n <Show when={col.subtitle !== undefined}>\n <span class=\"k2b-data-table__header-subtitle\">{renderColumnPart(col.subtitle, col)}</span>\n </Show>\n </>\n );\n\n if (!sort)\n return (\n <div class=\"k2b-data-table__header-content\" data-align={alignAttr(col)}>\n {title}\n </div>\n );\n\n return (\n <a href={sort.href} class=\"k2b-data-table__header-content k2b-data-table__sort\" data-align={alignAttr(col)}>\n <span class=\"k2b-data-table__header-line\">\n {title}\n {/* Inactive columns keep a dimmed marker so the row reads as sortable. */}\n <i\n class={`k2b-data-table__sort-icon ti ${props.sort?.direction === \"asc\" && sort.active ? \"ti-arrow-up\" : \"ti-arrow-down\"}`}\n data-active={sort.active ? \"true\" : undefined}\n aria-hidden=\"true\"\n />\n </span>\n </a>\n );\n };\n\n const renderValueDefault = (value: unknown) => defaultRender(value, locale(), messages());\n const renderCellDefault = (row: T, col: DataTableColumn<T>) => renderValueDefault(valueOf(row, col));\n\n const onRowKeyDown = (event: KeyboardEvent, row: T) => {\n if (!isInteractive()) return;\n if (isNestedRowControl(event)) return;\n const id = rowId(row);\n if (id !== undefined && props.selection?.keyDown(event, id)) return;\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n (props.selection ? props.onRowDoubleClick : (props.onRowClick ?? props.onRowDoubleClick))?.(row);\n };\n\n const onRowClick = (event: MouseEvent, row: T) => {\n if (isNestedRowControl(event)) return;\n const id = rowId(row);\n if (id !== undefined) props.selection?.select(id, event);\n props.onRowClick?.(row);\n };\n\n const onRowDoubleClick = (event: MouseEvent, row: T) => {\n if (isNestedRowControl(event)) return;\n props.onRowDoubleClick?.(row);\n };\n\n const rowClass = (row: T) => {\n if (typeof props.rowClass === \"function\") return props.rowClass(row) ?? \"\";\n return props.rowClass ?? \"\";\n };\n\n onMount(() => {\n if (typeof IntersectionObserver === \"undefined\" || !scrollRef || !loadMoreRef) return;\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) maybeLoadMore();\n },\n { root: scrollRef, rootMargin: \"240px\" },\n );\n observer.observe(loadMoreRef);\n onCleanup(() => observer.disconnect());\n });\n\n onMount(() => {\n setScrollbarEnhanced(true);\n syncScrollbars();\n const observer = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(syncScrollbars);\n if (scrollRef) observer?.observe(scrollRef);\n if (tableRef) observer?.observe(tableRef);\n onCleanup(() => {\n observer?.disconnect();\n if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);\n });\n });\n\n createEffect(() => {\n const rowsLength = props.rows.length;\n const nextHasMore = !!props.hasMore;\n const nextLoadingMore = !!props.loadingMore;\n if (rowsLength !== previousRowsLength || (previousLoadingMore && !nextLoadingMore) || (!previousHasMore && nextHasMore)) {\n loadMoreRequested = false;\n }\n previousRowsLength = rowsLength;\n previousLoadingMore = nextLoadingMore;\n previousHasMore = nextHasMore;\n hasMore = nextHasMore;\n loadingMore = nextLoadingMore;\n onLoadMore = props.onLoadMore;\n maybeLoadMore();\n queueMicrotask(syncScrollbars);\n });\n\n return (\n <Show when={props.columns.length > 0} fallback={<Placeholder surface=\"paper\" description={<>{messages().noColumns}</>} />}>\n <Dynamic\n component={surface() === \"paper\" ? Paper : \"div\"}\n class={`k2b-table-shell ${props.class ?? \"\"}`}\n data-surface={surface()}\n data-has-footer={props.footer ? \"true\" : undefined}\n data-overflow-x={scrollbars().x.overflow ? \"true\" : undefined}\n data-overflow-y={scrollbars().y.overflow ? \"true\" : undefined}\n data-scrollbar-enhanced={scrollbarEnhanced() ? \"true\" : undefined}\n data-scrolling={scrolling() ? \"true\" : undefined}\n onMouseLeave={() => setHoveredColumn(null)}\n >\n <div\n ref={scrollRef}\n role=\"region\"\n aria-label={labelledBy() ? undefined : (props.ariaLabel ?? messages().dataTable)}\n aria-labelledby={labelledBy()}\n tabIndex={0}\n class=\"k2b-table-wrap\"\n data-density={props.density === \"compact\" ? \"compact\" : undefined}\n data-has-footer={props.footer ? \"true\" : undefined}\n data-surface={surface()}\n data-scroll-preserve={props.scrollPreserveKey || undefined}\n onScroll={onScroll}\n >\n <table ref={tableRef} class={tableClass()} data-fill={props.fillHeight ? \"true\" : undefined}>\n <thead class=\"k2b-data-table__head\" data-sticky={props.stickyHeader === false ? undefined : \"true\"}>\n <tr class=\"k2b-data-table__head-row\">\n <For each={props.columns}>\n {(col, index) => (\n <th\n scope=\"col\"\n class={`${col.headerClass ?? \"\"} ${col.class ?? \"\"}`}\n data-align={alignAttr(col)}\n data-highlighted={columnHighlighted(index())}\n aria-sort={ariaSortFor(col)}\n onMouseEnter={() => setHoveredColumnIfEnabled(index())}\n >\n {props.renderHeader ? props.renderHeader({ col, render: () => renderHeaderDefault(col) }) : renderHeaderDefault(col)}\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody>\n <Show\n when={props.rows.length > 0}\n fallback={\n <tr>\n <td class=\"k2b-data-table__empty\" colspan={props.columns.length}>\n <Placeholder description={<>{props.empty ?? messages().noRecords}</>} />\n </td>\n </tr>\n }\n >\n <For each={props.rows}>\n {(row) => {\n const id = () => rowId(row);\n const isSelected = () =>\n props.selection ? props.selection.selected().has(id() ?? \"\") : props.selectedRowId && id() === props.selectedRowId;\n return (\n <tr\n ref={(element) => {\n const key = id();\n if (key !== undefined) props.selection?.register(key, element);\n }}\n class={`k2b-data-table__row ${rowClass(row)}`}\n data-hover={shouldHoverRows() ? \"true\" : undefined}\n data-clickable={shouldHoverRows() && isInteractive() ? \"true\" : undefined}\n data-selected={isSelected() ? \"true\" : undefined}\n aria-selected={props.selection ? !!isSelected() : undefined}\n tabIndex={props.selection ? (props.selection.focused() === id() ? 0 : -1) : isInteractive() ? 0 : undefined}\n onFocus={() => {\n const key = id();\n if (key !== undefined) props.selection?.markFocused(key);\n }}\n onClick={(event) => onRowClick(event, row)}\n onDblClick={(event) => onRowDoubleClick(event, row)}\n onContextMenu={() => props.onRowContextMenu?.(row)}\n onKeyDown={(e) => onRowKeyDown(e, row)}\n >\n <For each={props.columns}>\n {(col, index) => {\n const value = () => valueOf(row, col);\n return (\n <td\n class={`${col.cellClass ?? \"\"} ${col.class ?? \"\"}`}\n data-align={alignAttr(col)}\n data-valign={props.verticalAlign && props.verticalAlign !== \"middle\" ? props.verticalAlign : undefined}\n data-highlighted={columnHighlighted(index())}\n onMouseEnter={() => setHoveredColumnIfEnabled(index())}\n >\n <div class={cellContentClass()}>\n {props.renderCell\n ? props.renderCell({\n row,\n col,\n value: value(),\n render: (v) => renderCellDefault(row, { ...col, value: () => v }),\n })\n : renderValueDefault(value())}\n </div>\n </td>\n );\n }}\n </For>\n </tr>\n );\n }}\n </For>\n <Show when={props.fillHeight}>\n <tr aria-hidden=\"true\">\n <td class=\"k2b-data-table__fill\" colspan={props.columns.length} />\n </tr>\n </Show>\n </Show>\n </tbody>\n <Show when={props.footer}>\n {(footer) => (\n <tfoot class=\"k2b-data-table__foot\" data-sticky=\"true\">\n <tr class=\"k2b-data-table__foot-row\">\n <For each={props.columns}>\n {(col, index) => {\n const value = () => footer().values?.[col.id];\n return (\n <td\n class=\"k2b-data-table__footer-cell\"\n data-align={alignAttr(col)}\n data-highlighted={columnHighlighted(index())}\n onMouseEnter={() => setHoveredColumnIfEnabled(index())}\n >\n {footer().renderCell\n ? footer().renderCell!({ col, value: value(), render: renderValueDefault })\n : renderValueDefault(value())}\n </td>\n );\n }}\n </For>\n </tr>\n </tfoot>\n )}\n </Show>\n </table>\n <Show when={shouldRenderLoadMoreSentinel()}>\n <div ref={loadMoreRef} class=\"k2b-data-table__sentinel\" aria-hidden=\"true\" />\n </Show>\n </div>\n <For each={[\"y\", \"x\"] as const}>\n {(axis) => (\n <div\n class=\"k2b-data-table__scrollbar\"\n data-axis={axis}\n data-overflow={scrollbars()[axis].overflow ? \"true\" : undefined}\n aria-hidden=\"true\"\n onPointerDown={(event) => startScrollbarDrag(event, axis)}\n onPointerMove={(event) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) scrollFromPointer(event, axis);\n }}\n onPointerUp={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n onPointerCancel={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n >\n <span\n style={{\n \"--k2b-data-table-scroll-offset\": `${scrollbars()[axis].offset}px`,\n \"--k2b-data-table-scroll-size\": `${scrollbars()[axis].size}px`,\n }}\n />\n </div>\n )}\n </For>\n </Dynamic>\n </Show>\n );\n}\n\nconst DataTablePanel = (props: DataTablePanelProps): JSX.Element => {\n const headingId = `k2b-data-table-${createUniqueId()}-heading`;\n const [hasHeading, setHasHeading] = createSignal(false);\n const context: DataTablePanelContextValue = {\n headingId,\n hasHeading,\n registerHeading: () => setHasHeading(true),\n };\n\n return (\n <DataTablePanelContext.Provider value={context}>\n <Paper as=\"section\" class={`k2b-data-panel ${props.class ?? \"\"}`}>\n {props.children}\n </Paper>\n </DataTablePanelContext.Provider>\n );\n};\n\nconst DataTableHeader = (props: DataTableHeaderProps): JSX.Element => {\n const panel = useContext(DataTablePanelContext);\n panel?.registerHeading();\n\n return (\n <div class={`k2b-data-panel__header ${props.class ?? \"\"}`}>\n <PanelHeader\n title={<span id={panel?.headingId}>{props.title}</span>}\n subtitle={props.subtitle}\n actions={props.children}\n as={props.as}\n size={props.size}\n />\n </div>\n );\n};\n\nconst DataTableControls = (props: DataTableControlsProps): JSX.Element => (\n <div class={`k2b-data-panel__controls ${props.class ?? \"\"}`}>{props.children}</div>\n);\n\nconst DataTablePanelFooter = (props: DataTablePanelFooterProps): JSX.Element => (\n <footer class={`k2b-data-panel__footer ${props.class ?? \"\"}`}>{props.children}</footer>\n);\n\ntype DataTableComponent = {\n <T>(props: DataTableProps<T>): JSX.Element;\n Panel: (props: DataTablePanelProps) => JSX.Element;\n Header: (props: DataTableHeaderProps) => JSX.Element;\n Controls: (props: DataTableControlsProps) => JSX.Element;\n Footer: (props: DataTablePanelFooterProps) => JSX.Element;\n};\n\nconst DataTable = DataTableRoot as DataTableComponent;\nDataTable.Panel = DataTablePanel;\nDataTable.Header = DataTableHeader;\nDataTable.Controls = DataTableControls;\nDataTable.Footer = DataTablePanelFooter;\n\nexport default DataTable;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAEEA,aAAa,EACbC,YAAY,EACZC,UAAU,EACVC,YAAY,EACZC,cAAc,EACdC,GAAG,EAEHC,SAAS,EACTC,OAAO,EACPC,IAAI,EACJC,UAAU,QACL,UAAU;AACjB,SAASC,OAAO,QAAQ,cAAc;AACtC,SAASC,SAAS,QAAQ,gBAAgB;AAC1C,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,KAAK,QAAQ,mBAAmB;AACzC,OAAOC,WAAW,MAAM,yBAAyB;AA+GjD,MAAMC,qBAAqB,GAAGhB,aAAa,CAA6B,CAAC;AAEzE,MAAMiB,aAAa,GAAGA,CAACC,KAAc,EAAEC,MAAc,EAAEC,QAAsD,KAAkB;EAC7H,IAAIF,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKG,SAAS,IAAIH,KAAK,KAAK,EAAE,EAAE,OAAO,GAAG;EACrE,IAAIA,KAAK,YAAYI,IAAI,EAAE,OAAOJ,KAAK,CAACK,cAAc,CAACJ,MAAM,CAAC;EAC9D,IAAI,OAAOD,KAAK,KAAK,SAAS,EAAE,OAAOA,KAAK,GAAGE,QAAQ,CAACI,GAAG,GAAGJ,QAAQ,CAACK,EAAE;EACzE,IAAI,OAAOP,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAOQ,MAAM,CAACR,KAAK,CAAC;EAChF,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAOA,KAAK;EAC3C,OAAOS,IAAI,CAACC,SAAS,CAACV,KAAK,CAAC;AAC9B,CAAC;AAED,MAAMW,gBAAgB,GAAGA,CACvBC,IAAmE,EACnEC,GAAuB,KACP;EAChB,IAAI,OAAOD,IAAI,KAAK,UAAU,EAAE,OAAOA,IAAI,CAAC;IAAEC;EAAI,CAAC,CAAC;EACpD,OAAOD,IAAI;AACb,CAAC;AAED,MAAME,sBAAsB,GAAG,CAC7B,SAAS,EACT,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,YAAY,CACb,CAACC,IAAI,CAAC,GAAG,CAAC;AAEX,MAAMC,kBAAkB,GAAIC,KAAY,IACtCA,KAAK,CAACC,MAAM,YAAYC,OAAO,IAAIF,KAAK,CAACC,MAAM,CAACE,OAAO,CAACN,sBAAsB,CAAC,KAAKG,KAAK,CAACI,aAAa;AAKzG,MAAMC,gBAAgB,GAAGA,CAACC,YAAoB,EAAEC,WAAmB,EAAEC,YAAoB,KAAgC;EACvH,IAAIF,YAAY,IAAI,CAAC,IAAIC,WAAW,IAAID,YAAY,GAAG,CAAC,EAAE,OAAO;IAAEG,QAAQ,EAAE,KAAK;IAAEC,MAAM,EAAE,CAAC;IAAEC,IAAI,EAAE;EAAE,CAAC;EACxG,MAAMA,IAAI,GAAGC,IAAI,CAACC,GAAG,CAACP,YAAY,EAAEM,IAAI,CAACE,GAAG,CAAC,EAAE,EAAGR,YAAY,GAAGA,YAAY,GAAIC,WAAW,CAAC,CAAC;EAC9F,MAAMG,MAAM,GAAIF,YAAY,IAAID,WAAW,GAAGD,YAAY,CAAC,IAAKA,YAAY,GAAGK,IAAI,CAAC;EACpF,OAAO;IAAEF,QAAQ,EAAE,IAAI;IAAEC,MAAM;IAAEC;EAAK,CAAC;AACzC,CAAC;AAED,SAASI,aAAaA,CAAIC,KAAwB,EAAE;EAClD,MAAM/B,QAAQ,GAAGR,aAAa,CAAC,CAAC;EAChC,MAAMO,MAAM,GAAGR,SAAS,CAAC,CAAC;EAC1B,MAAM,CAACyC,aAAa,EAAEC,gBAAgB,CAAC,GAAGlD,YAAY,CAAgB,IAAI,CAAC;EAC3E,MAAM,CAACmD,UAAU,EAAEC,aAAa,CAAC,GAAGpD,YAAY,CAA4D;IAC1GqD,CAAC,EAAE;MAAEZ,QAAQ,EAAE,KAAK;MAAEC,MAAM,EAAE,CAAC;MAAEC,IAAI,EAAE;IAAE,CAAC;IAC1CW,CAAC,EAAE;MAAEb,QAAQ,EAAE,KAAK;MAAEC,MAAM,EAAE,CAAC;MAAEC,IAAI,EAAE;IAAE;EAC3C,CAAC,CAAC;EACF,MAAM,CAACY,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGxD,YAAY,CAAC,KAAK,CAAC;EACrE,MAAM,CAACyD,SAAS,EAAEC,YAAY,CAAC,GAAG1D,YAAY,CAAC,KAAK,CAAC;EACrD,MAAM2D,KAAK,GAAGrD,UAAU,CAACO,qBAAqB,CAAC;EAC/C,IAAI+C,QAAsC;EAC1C,IAAIC,SAAqC;EACzC,IAAIC,WAAuC;EAC3C,IAAIC,gBAA2D;EAC/D,IAAIC,mBAAmB,GAAG,CAAC;EAC3B,IAAIC,OAAO,GAAG,KAAK;EACnB,IAAIC,WAAW,GAAG,KAAK;EACvB,IAAIC,UAAoC;EACxC,IAAIC,iBAAiB,GAAG,KAAK;EAC7B,IAAIC,kBAAkB,GAAGrB,KAAK,CAACsB,IAAI,CAACC,MAAM;EAC1C,IAAIC,mBAAmB,GAAG,CAAC,CAACxB,KAAK,CAACkB,WAAW;EAC7C,IAAIO,eAAe,GAAG,CAAC,CAACzB,KAAK,CAACiB,OAAO;EACrC,MAAMS,KAAK,GAAIC,GAAM,IAAK3B,KAAK,CAAC4B,QAAQ,GAAGD,GAAG,CAAC;EAC/C,MAAME,aAAa,GAAGA,CAAA,KAAM,CAAC,CAAC7B,KAAK,CAAC8B,SAAS,IAAI,CAAC,CAAC9B,KAAK,CAAC+B,UAAU,IAAI,CAAC,CAAC/B,KAAK,CAACgC,gBAAgB;EAC/F,MAAMC,eAAe,GAAGA,CAAA,KAAMjC,KAAK,CAACkC,SAAS,IAAIL,aAAa,CAAC,CAAC;EAChE,MAAMM,4BAA4B,GAAGA,CAAA,KAAM,CAAC,CAACnC,KAAK,CAACmB,UAAU;EAC7D,MAAMiB,UAAU,GAAGA,CAAA,KAAMpC,KAAK,CAACqC,cAAc,KAAK1B,KAAK,EAAE2B,UAAU,CAAC,CAAC,GAAG3B,KAAK,CAAC4B,SAAS,GAAGrE,SAAS,CAAC;EACpG,MAAMsE,OAAO,GAAGA,CAAA,KAAMxC,KAAK,CAACwC,OAAO,KAAKxC,KAAK,CAACyC,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;EACxE,MAAMC,gBAAgB,GAAGA,CAAA,KAAM1C,KAAK,CAAC0C,gBAAgB,IAAI,2BAA2B;EACpF,MAAMC,UAAU,GAAGA,CAAA,KAAM,kBAAkB3C,KAAK,CAAC2C,UAAU,IAAI,EAAE,EAAE,CAACC,IAAI,CAAC,CAAC;EAC1E,MAAMC,iBAAiB,GAAIC,KAAa,IACtC9C,KAAK,CAAC+C,gBAAgB,KAAK,KAAK,IAAId,eAAe,CAAC,CAAC,IAAIhC,aAAa,CAAC,CAAC,KAAK6C,KAAK,GAAG,MAAM,GAAG5E,SAAS;EACzG,MAAM8E,yBAAyB,GAAIF,KAAa,IAAK;IACnD,IAAIb,eAAe,CAAC,CAAC,EAAE/B,gBAAgB,CAAC4C,KAAK,CAAC;EAChD,CAAC;EAED,MAAMG,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAI,CAACpC,SAAS,EAAE,OAAO,KAAK;IAC5B,OAAOA,SAAS,CAACqC,SAAS,GAAGrC,SAAS,CAACsC,YAAY,IAAItC,SAAS,CAACuC,YAAY,GAAG,GAAG;EACrF,CAAC;EAED,MAAMC,aAAa,GAAGA,CAAA,KAAM;IAC1B,IAAI,CAACpC,OAAO,IAAIC,WAAW,IAAIE,iBAAiB,IAAI,CAACD,UAAU,EAAE;IACjE,IAAI,CAAC8B,YAAY,CAAC,CAAC,EAAE;IACrB7B,iBAAiB,GAAG,IAAI;IACxB,IAAI;MACFD,UAAU,CAAC,CAAC;IACd,CAAC,CAAC,OAAOmC,KAAK,EAAE;MACdlC,iBAAiB,GAAG,KAAK;MACzB,MAAMkC,KAAK;IACb;EACF,CAAC;EAED,MAAMC,cAAc,GAAGA,CAAA,KAAM;IAC3B,IAAI,CAAC1C,SAAS,EAAE;IAChBT,aAAa,CAAC;MACZC,CAAC,EAAEhB,gBAAgB,CAACwB,SAAS,CAAC2C,WAAW,EAAE3C,SAAS,CAAC4C,WAAW,EAAE5C,SAAS,CAAC6C,UAAU,CAAC;MACvFpD,CAAC,EAAEjB,gBAAgB,CAACwB,SAAS,CAACsC,YAAY,EAAEtC,SAAS,CAACuC,YAAY,EAAEvC,SAAS,CAACqC,SAAS;IACzF,CAAC,CAAC;EACJ,CAAC;EAED,MAAMS,gBAAgB,GAAGA,CAAA,KAAM;IAC7BjD,YAAY,CAAC,IAAI,CAAC;IAClB,IAAIK,gBAAgB,KAAK7C,SAAS,EAAE0F,YAAY,CAAC7C,gBAAgB,CAAC;IAClEA,gBAAgB,GAAG8C,UAAU,CAAC,MAAM;MAClCnD,YAAY,CAAC,KAAK,CAAC;MACnBK,gBAAgB,GAAG7C,SAAS;IAC9B,CAAC,EAAE,GAAG,CAAC;EACT,CAAC;EAED,MAAM4F,QAAQ,GAAGA,CAAA,KAAM;IACrBP,cAAc,CAAC,CAAC;IAChBI,gBAAgB,CAAC,CAAC;IAClBN,aAAa,CAAC,CAAC;EACjB,CAAC;EAED,MAAMU,iBAAiB,GAAGA,CAAC/E,KAAuD,EAAEgF,IAA4B,KAAK;IACnH,IAAI,CAACnD,SAAS,EAAE;IAChB,MAAMoD,KAAK,GAAGjF,KAAK,CAACI,aAAa;IACjC,MAAM8E,OAAO,GAAG/D,UAAU,CAAC,CAAC,CAAC6D,IAAI,CAAC;IAClC,MAAMG,IAAI,GAAGF,KAAK,CAACG,qBAAqB,CAAC,CAAC;IAC1C,MAAMC,SAAS,GAAGL,IAAI,KAAK,GAAG,GAAGG,IAAI,CAACG,MAAM,GAAGH,IAAI,CAACI,KAAK;IACzD,MAAMC,aAAa,GAAGR,IAAI,KAAK,GAAG,GAAGhF,KAAK,CAACyF,OAAO,GAAGN,IAAI,CAACO,GAAG,GAAG1F,KAAK,CAAC2F,OAAO,GAAGR,IAAI,CAACS,IAAI;IACzF,MAAMC,SAAS,GAAGjF,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEuE,SAAS,GAAGH,OAAO,CAACvE,IAAI,CAAC;IACvD,MAAMmF,WAAW,GAAGlF,IAAI,CAACC,GAAG,CAACgF,SAAS,EAAEjF,IAAI,CAACE,GAAG,CAAC,CAAC,EAAE0E,aAAa,GAAGxD,mBAAmB,CAAC,CAAC;IACzF,MAAM+D,SAAS,GAAGf,IAAI,KAAK,GAAG,GAAGnD,SAAS,CAACuC,YAAY,GAAGvC,SAAS,CAACsC,YAAY,GAAGtC,SAAS,CAAC4C,WAAW,GAAG5C,SAAS,CAAC2C,WAAW;IAChI,IAAIQ,IAAI,KAAK,GAAG,EAAEnD,SAAS,CAACqC,SAAS,GAAI4B,WAAW,GAAGD,SAAS,GAAIE,SAAS,CAAC,KACzElE,SAAS,CAAC6C,UAAU,GAAIoB,WAAW,GAAGD,SAAS,GAAIE,SAAS;IACjExB,cAAc,CAAC,CAAC;IAChBI,gBAAgB,CAAC,CAAC;EACpB,CAAC;EAED,MAAMqB,kBAAkB,GAAGA,CAAChG,KAAuD,EAAEgF,IAA4B,KAAK;IACpHhF,KAAK,CAACiG,cAAc,CAAC,CAAC;IACtB,MAAMf,OAAO,GAAG/D,UAAU,CAAC,CAAC,CAAC6D,IAAI,CAAC;IAClC,MAAMG,IAAI,GAAGnF,KAAK,CAACI,aAAa,CAACgF,qBAAqB,CAAC,CAAC;IACxD,MAAMI,aAAa,GAAGR,IAAI,KAAK,GAAG,GAAGhF,KAAK,CAACyF,OAAO,GAAGN,IAAI,CAACO,GAAG,GAAG1F,KAAK,CAAC2F,OAAO,GAAGR,IAAI,CAACS,IAAI;IACzF5D,mBAAmB,GACjBhC,KAAK,CAACC,MAAM,KAAKD,KAAK,CAACI,aAAa,GAAG8E,OAAO,CAACvE,IAAI,GAAG,CAAC,GAAGC,IAAI,CAACC,GAAG,CAACqE,OAAO,CAACvE,IAAI,EAAEC,IAAI,CAACE,GAAG,CAAC,CAAC,EAAE0E,aAAa,GAAGN,OAAO,CAACxE,MAAM,CAAC,CAAC;IAC/HV,KAAK,CAACI,aAAa,CAAC8F,iBAAiB,CAAClG,KAAK,CAACmG,SAAS,CAAC;IACtDpB,iBAAiB,CAAC/E,KAAK,EAAEgF,IAAI,CAAC;EAChC,CAAC;EAED,MAAMoB,OAAO,GAAGA,CAACzD,GAAM,EAAE/C,GAAuB,KAAK;IACnD,IAAI,OAAOA,GAAG,CAACb,KAAK,KAAK,UAAU,EAAE,OAAOa,GAAG,CAACb,KAAK,CAAC4D,GAAG,CAAC;IAC1D,IAAI/C,GAAG,CAACb,KAAK,EAAE,OAAO4D,GAAG,CAAC/C,GAAG,CAACb,KAAK,CAAC;IACpC,OAAOG,SAAS;EAClB,CAAC;EAED,MAAMmH,gBAAgB,GAAGtI,UAAU,CAAC,MAAM;IACxC,MAAMuI,UAAU,GAAG,IAAIC,GAAG,CAAmD,CAAC;IAC9E,KAAK,MAAM3G,GAAG,IAAIoB,KAAK,CAACwF,OAAO,EAAE;MAC/B,IAAI5G,GAAG,CAAC6G,KAAK,EAAE;QACbH,UAAU,CAACI,GAAG,CAAC9G,GAAG,CAAC+G,EAAE,EAAE/G,GAAG,CAAC6G,KAAK,CAAC;QACjC;MACF;MACA,IAAIA,KAA+C,GAAG,MAAM;MAC5D,KAAK,MAAM9D,GAAG,IAAI3B,KAAK,CAACsB,IAAI,EAAE;QAC5B,MAAMvD,KAAK,GAAGqH,OAAO,CAACzD,GAAG,EAAE/C,GAAG,CAAC;QAC/B,IAAIb,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKG,SAAS,IAAIH,KAAK,KAAK,EAAE,EAAE;QAC3D0H,KAAK,GAAG,OAAO1H,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM;QACjF;MACF;MACAuH,UAAU,CAACI,GAAG,CAAC9G,GAAG,CAAC+G,EAAE,EAAEF,KAAK,CAAC;IAC/B;IACA,OAAOH,UAAU;EACnB,CAAC,CAAC;;EAEF;EACA,MAAMM,SAAS,GAAIhH,GAAuB,IAAK;IAC7C,MAAM6G,KAAK,GAAGJ,gBAAgB,CAAC,CAAC,CAACQ,GAAG,CAACjH,GAAG,CAAC+G,EAAE,CAAC,IAAI,MAAM;IACtD,OAAOF,KAAK,KAAK,MAAM,GAAGvH,SAAS,GAAGuH,KAAK;EAC7C,CAAC;EAED,MAAMK,SAAS,GAAIlH,GAAuB,IACxCA,GAAG,CAACmH,QAAQ,KAAK,IAAI,GAAGnH,GAAG,CAAC+G,EAAE,GAAG,OAAO/G,GAAG,CAACmH,QAAQ,KAAK,QAAQ,GAAGnH,GAAG,CAACmH,QAAQ,GAAG,IAAI;;EAEzF;AACF;AACA;AACA;EACE,MAAMC,WAAW,GAAIpH,GAAuB,IAA0E;IACpH,MAAMqH,GAAG,GAAGH,SAAS,CAAClH,GAAG,CAAC;IAC1B,IAAI,CAACqH,GAAG,IAAI,CAACjG,KAAK,CAACkG,QAAQ,EAAE,OAAO,IAAI;IACxC,MAAMC,MAAM,GAAGnG,KAAK,CAACoG,IAAI,EAAEH,GAAG,KAAKA,GAAG;IACtC,MAAMI,SAAyB,GAAGF,MAAM,IAAInG,KAAK,CAACoG,IAAI,EAAEC,SAAS,KAAK,MAAM,GAAG,KAAK,GAAG,MAAM;IAC7F,OAAO;MAAEC,IAAI,EAAEtG,KAAK,CAACkG,QAAQ,CAAC;QAAED,GAAG;QAAEI;MAAU,CAAC,CAAC;MAAEF,MAAM;MAAEE;IAAU,CAAC;EACxE,CAAC;;EAED;EACA,MAAME,WAAW,GAAI3H,GAAuB,IAAsD;IAChG,MAAMqH,GAAG,GAAGH,SAAS,CAAClH,GAAG,CAAC;IAC1B,IAAI,CAACqH,GAAG,IAAK,CAACjG,KAAK,CAACkG,QAAQ,IAAI,CAAClG,KAAK,CAACwG,YAAa,EAAE,OAAOtI,SAAS;IACtE,IAAI8B,KAAK,CAACoG,IAAI,EAAEH,GAAG,KAAKA,GAAG,EAAE,OAAO,MAAM;IAC1C,OAAOjG,KAAK,CAACoG,IAAI,EAAEC,SAAS,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;EACrE,CAAC;EAED,MAAMI,mBAAmB,GAAI7H,GAAuB,IAAkB;IACpE,MAAMwH,IAAI,GAAGJ,WAAW,CAACpH,GAAG,CAAC;IAC7B,MAAM8H,KAAK;MAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;MAAAC,QAAA,CAAAH,IAAA,QAEqCjI,gBAAgB,CAACE,GAAG,CAACmI,MAAM,EAAEnI,GAAG,CAAC;MAAA,OAAA+H,IAAA;IAAA,MAAAK,iBAAA,CAC5E3J,IAAI;MAAA,IAAC4J,IAAIA,CAAA;QAAA,OAAErI,GAAG,CAACsI,QAAQ,KAAKhJ,SAAS;MAAA;MAAA,IAAAiJ,SAAA;QAAA,IAAAC,KAAA,GAAAR,gBAAA,CAAAS,OAAA;QAAAP,QAAA,CAAAM,KAAA,QACW1I,gBAAgB,CAACE,GAAG,CAACsI,QAAQ,EAAEtI,GAAG,CAAC;QAAA,OAAAwI,KAAA;MAAA;IAAA,GAGvF;IAED,IAAI,CAAChB,IAAI,EACP;MAAA,IAAAkB,KAAA,GAAAV,gBAAA,CAAAW,OAAA;MAAAT,QAAA,CAAAQ,KAAA,EAEKZ,KAAK;MAAAc,QAAA,OAAAC,cAAA,CAAAH,KAAA,gBADgD1B,SAAS,CAAChH,GAAG,CAAC;MAAA,OAAA0I,KAAA;IAAA;IAK1E;MAAA,IAAAI,KAAA,GAAAd,gBAAA,CAAAe,OAAA;QAAAC,KAAA,GAAAF,KAAA,CAAAG,UAAA;QAAAC,KAAA,GAAAF,KAAA,CAAAC,UAAA;QAAA,CAAAE,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAH,KAAA,CAAAI,WAAA;QAAAC,KAAA,GAAAJ,KAAA,CAAAG,WAAA;MAAApB,QAAA,CAAAc,KAAA,EAGOlB,KAAK,EAAAqB,KAAA,EAAAC,IAAA;MAAAR,QAAA,CAAAY,GAAA;QAAA,IAAAC,GAAA,GAFDjC,IAAI,CAACE,IAAI;UAAAgC,IAAA,GAA0E1C,SAAS,CAAChH,GAAG,CAAC;UAAA2J,IAAA,GAK7F,gCAAgCvI,KAAK,CAACoG,IAAI,EAAEC,SAAS,KAAK,KAAK,IAAID,IAAI,CAACD,MAAM,GAAG,aAAa,GAAG,eAAe,EAAE;UAAAqC,IAAA,GAC5GpC,IAAI,CAACD,MAAM,GAAG,MAAM,GAAGjI,SAAS;QAAAmK,GAAA,KAAAD,GAAA,CAAAK,CAAA,IAAAhB,cAAA,CAAAC,KAAA,UAAAU,GAAA,CAAAK,CAAA,GAAAJ,GAAA;QAAAC,IAAA,KAAAF,GAAA,CAAAM,CAAA,IAAAjB,cAAA,CAAAC,KAAA,gBAAAU,GAAA,CAAAM,CAAA,GAAAJ,IAAA;QAAAC,IAAA,KAAAH,GAAA,CAAAO,CAAA,IAAAC,WAAA,CAAAT,KAAA,EAAAC,GAAA,CAAAO,CAAA,GAAAJ,IAAA;QAAAC,IAAA,KAAAJ,GAAA,CAAAS,CAAA,IAAApB,cAAA,CAAAU,KAAA,iBAAAC,GAAA,CAAAS,CAAA,GAAAL,IAAA;QAAA,OAAAJ,GAAA;MAAA;QAAAK,CAAA,EAAAvK,SAAA;QAAAwK,CAAA,EAAAxK,SAAA;QAAAyK,CAAA,EAAAzK,SAAA;QAAA2K,CAAA,EAAA3K;MAAA;MAAA,OAAAwJ,KAAA;IAAA;EAMvD,CAAC;EAED,MAAMoB,kBAAkB,GAAI/K,KAAc,IAAKD,aAAa,CAACC,KAAK,EAAEC,MAAM,CAAC,CAAC,EAAEC,QAAQ,CAAC,CAAC,CAAC;EACzF,MAAM8K,iBAAiB,GAAGA,CAACpH,GAAM,EAAE/C,GAAuB,KAAKkK,kBAAkB,CAAC1D,OAAO,CAACzD,GAAG,EAAE/C,GAAG,CAAC,CAAC;EAEpG,MAAMoK,YAAY,GAAGA,CAAChK,KAAoB,EAAE2C,GAAM,KAAK;IACrD,IAAI,CAACE,aAAa,CAAC,CAAC,EAAE;IACtB,IAAI9C,kBAAkB,CAACC,KAAK,CAAC,EAAE;IAC/B,MAAM2G,EAAE,GAAGjE,KAAK,CAACC,GAAG,CAAC;IACrB,IAAIgE,EAAE,KAAKzH,SAAS,IAAI8B,KAAK,CAAC8B,SAAS,EAAEmH,OAAO,CAACjK,KAAK,EAAE2G,EAAE,CAAC,EAAE;IAC7D,IAAI3G,KAAK,CAACiH,GAAG,KAAK,OAAO,IAAIjH,KAAK,CAACiH,GAAG,KAAK,GAAG,EAAE;IAChDjH,KAAK,CAACiG,cAAc,CAAC,CAAC;IACtB,CAACjF,KAAK,CAAC8B,SAAS,GAAG9B,KAAK,CAACgC,gBAAgB,GAAIhC,KAAK,CAAC+B,UAAU,IAAI/B,KAAK,CAACgC,gBAAiB,IAAIL,GAAG,CAAC;EAClG,CAAC;EAED,MAAMI,UAAU,GAAGA,CAAC/C,KAAiB,EAAE2C,GAAM,KAAK;IAChD,IAAI5C,kBAAkB,CAACC,KAAK,CAAC,EAAE;IAC/B,MAAM2G,EAAE,GAAGjE,KAAK,CAACC,GAAG,CAAC;IACrB,IAAIgE,EAAE,KAAKzH,SAAS,EAAE8B,KAAK,CAAC8B,SAAS,EAAEoH,MAAM,CAACvD,EAAE,EAAE3G,KAAK,CAAC;IACxDgB,KAAK,CAAC+B,UAAU,GAAGJ,GAAG,CAAC;EACzB,CAAC;EAED,MAAMK,gBAAgB,GAAGA,CAAChD,KAAiB,EAAE2C,GAAM,KAAK;IACtD,IAAI5C,kBAAkB,CAACC,KAAK,CAAC,EAAE;IAC/BgB,KAAK,CAACgC,gBAAgB,GAAGL,GAAG,CAAC;EAC/B,CAAC;EAED,MAAMwH,QAAQ,GAAIxH,GAAM,IAAK;IAC3B,IAAI,OAAO3B,KAAK,CAACmJ,QAAQ,KAAK,UAAU,EAAE,OAAOnJ,KAAK,CAACmJ,QAAQ,CAACxH,GAAG,CAAC,IAAI,EAAE;IAC1E,OAAO3B,KAAK,CAACmJ,QAAQ,IAAI,EAAE;EAC7B,CAAC;EAED/L,OAAO,CAAC,MAAM;IACZ,IAAI,OAAOgM,oBAAoB,KAAK,WAAW,IAAI,CAACvI,SAAS,IAAI,CAACC,WAAW,EAAE;IAC/E,MAAMuI,QAAQ,GAAG,IAAID,oBAAoB,CACtCE,OAAO,IAAK;MACX,IAAIA,OAAO,CAACC,IAAI,CAAEC,KAAK,IAAKA,KAAK,CAACC,cAAc,CAAC,EAAEpG,aAAa,CAAC,CAAC;IACpE,CAAC,EACD;MAAEqG,IAAI,EAAE7I,SAAS;MAAE8I,UAAU,EAAE;IAAQ,CACzC,CAAC;IACDN,QAAQ,CAACO,OAAO,CAAC9I,WAAW,CAAC;IAC7B3D,SAAS,CAAC,MAAMkM,QAAQ,CAACQ,UAAU,CAAC,CAAC,CAAC;EACxC,CAAC,CAAC;EAEFzM,OAAO,CAAC,MAAM;IACZoD,oBAAoB,CAAC,IAAI,CAAC;IAC1B+C,cAAc,CAAC,CAAC;IAChB,MAAM8F,QAAQ,GAAG,OAAOS,cAAc,KAAK,WAAW,GAAG,IAAI,GAAG,IAAIA,cAAc,CAACvG,cAAc,CAAC;IAClG,IAAI1C,SAAS,EAAEwI,QAAQ,EAAEO,OAAO,CAAC/I,SAAS,CAAC;IAC3C,IAAID,QAAQ,EAAEyI,QAAQ,EAAEO,OAAO,CAAChJ,QAAQ,CAAC;IACzCzD,SAAS,CAAC,MAAM;MACdkM,QAAQ,EAAEQ,UAAU,CAAC,CAAC;MACtB,IAAI9I,gBAAgB,KAAK7C,SAAS,EAAE0F,YAAY,CAAC7C,gBAAgB,CAAC;IACpE,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFjE,YAAY,CAAC,MAAM;IACjB,MAAMiN,UAAU,GAAG/J,KAAK,CAACsB,IAAI,CAACC,MAAM;IACpC,MAAMyI,WAAW,GAAG,CAAC,CAAChK,KAAK,CAACiB,OAAO;IACnC,MAAMgJ,eAAe,GAAG,CAAC,CAACjK,KAAK,CAACkB,WAAW;IAC3C,IAAI6I,UAAU,KAAK1I,kBAAkB,IAAKG,mBAAmB,IAAI,CAACyI,eAAgB,IAAK,CAACxI,eAAe,IAAIuI,WAAY,EAAE;MACvH5I,iBAAiB,GAAG,KAAK;IAC3B;IACAC,kBAAkB,GAAG0I,UAAU;IAC/BvI,mBAAmB,GAAGyI,eAAe;IACrCxI,eAAe,GAAGuI,WAAW;IAC7B/I,OAAO,GAAG+I,WAAW;IACrB9I,WAAW,GAAG+I,eAAe;IAC7B9I,UAAU,GAAGnB,KAAK,CAACmB,UAAU;IAC7BkC,aAAa,CAAC,CAAC;IACf6G,cAAc,CAAC3G,cAAc,CAAC;EAChC,CAAC,CAAC;EAEF,OAAAyD,iBAAA,CACG3J,IAAI;IAAA,IAAC4J,IAAIA,CAAA;MAAA,OAAEjH,KAAK,CAACwF,OAAO,CAACjE,MAAM,GAAG,CAAC;IAAA;IAAA,IAAE4I,QAAQA,CAAA;MAAA,OAAAnD,iBAAA,CAAGpJ,WAAW;QAAC4E,OAAO;QAAA,IAAS4H,WAAWA,CAAA;UAAA,OAAAC,MAAA,OAAKpM,QAAQ,CAAC,CAAC,CAACqM,SAAS;QAAA;MAAA;IAAA;IAAA,IAAAnD,SAAA;MAAA,OAAAH,iBAAA,CAC9GzJ,OAAO;QAAA,IACNgN,SAASA,CAAA;UAAA,OAAE/H,OAAO,CAAC,CAAC,KAAK,OAAO,GAAG7E,KAAK,GAAG,KAAK;QAAA;QAAA,aAAA8E,CAAA;UAAA,OACzC,mBAAmBzC,KAAK,CAACyC,KAAK,IAAI,EAAE,EAAE;QAAA;QAAA,oBAAA+H,CAAA;UAAA,OAC/BhI,OAAO,CAAC,CAAC;QAAA;QAAA,uBAAAiI,CAAA;UAAA,OACNzK,KAAK,CAAC0K,MAAM,GAAG,MAAM,GAAGxM,SAAS;QAAA;QAAA,uBAAAyM,CAAA;UAAA,OACjCxK,UAAU,CAAC,CAAC,CAACE,CAAC,CAACZ,QAAQ,GAAG,MAAM,GAAGvB,SAAS;QAAA;QAAA,uBAAA0M,CAAA;UAAA,OAC5CzK,UAAU,CAAC,CAAC,CAACG,CAAC,CAACb,QAAQ,GAAG,MAAM,GAAGvB,SAAS;QAAA;QAAA,+BAAA2M,CAAA;UAAA,OACpCtK,iBAAiB,CAAC,CAAC,GAAG,MAAM,GAAGrC,SAAS;QAAA;QAAA,sBAAA4M,CAAA;UAAA,OACjDrK,SAAS,CAAC,CAAC,GAAG,MAAM,GAAGvC,SAAS;QAAA;QAChD6M,YAAY,EAAEA,CAAA,KAAM7K,gBAAgB,CAAC,IAAI,CAAC;QAAA,IAAAiH,SAAA;UAAA;YAAA,IAAA6D,KAAA,GAAApE,gBAAA,CAAAqE,OAAA;cAAAC,KAAA,GAAAF,KAAA,CAAAnD,UAAA;cAAAsD,KAAA,GAAAD,KAAA,CAAArD,UAAA;cAAAuD,MAAA,GAAAD,KAAA,CAAAtD,UAAA;cAAAwD,MAAA,GAAAF,KAAA,CAAAjD,WAAA;cAAAoD,MAAA,GAAAD,MAAA,CAAAnD,WAAA;cAAA,CAAAqD,MAAA,EAAAC,KAAA,IAAAvD,eAAA,CAAAqD,MAAA,CAAApD,WAAA;cAAAuD,MAAA,GAAAP,KAAA,CAAAhD,WAAA;cAAA,CAAAwD,MAAA,EAAAC,KAAA,IAAA1D,eAAA,CAAAwD,MAAA,CAAAvD,WAAA;YAAA8C,KAAA,CAAAY,gBAAA,WAa9B9H,QAAQ;YAAA,IAAA+H,KAAA,GAVbhL,SAAS;YAAA,OAAAgL,KAAA,kBAAAC,KAAA,CAAAD,KAAA,EAAAb,KAAA,IAATnK,SAAS,GAAAmK,KAAA;YAAA,IAAAe,MAAA,GAYFnL,QAAQ;YAAA,OAAAmL,MAAA,kBAAAD,KAAA,CAAAC,MAAA,EAAAb,KAAA,IAARtK,QAAQ,GAAAsK,KAAA;YAAApE,QAAA,CAAAsE,MAAA,EAAApE,iBAAA,CAGb9J,GAAG;cAAA,IAAC8O,IAAIA,CAAA;gBAAA,OAAEhM,KAAK,CAACwF,OAAO;cAAA;cAAA2B,QAAA,EACrBA,CAACvI,GAAG,EAAEkE,KAAK;gBAAA,IAAAmJ,MAAA,GAAArF,gBAAA,CAAAsF,OAAA;gBAAAD,MAAA,CAAAL,gBAAA,eAOM,MAAM5I,yBAAyB,CAACF,KAAK,CAAC,CAAC,CAAC;gBAAAgE,QAAA,CAAAmF,MAAA;kBAAA,IAAAE,GAAA,GAAA9B,MAAA,SAErDrK,KAAK,CAACwG,YAAY;kBAAA,aAAlB2F,GAAA,KAAqBnM,KAAK,CAACwG,YAAY,CAAC;oBAAE5H,GAAG;oBAAEwN,MAAM,EAAEA,CAAA,KAAM3F,mBAAmB,CAAC7H,GAAG;kBAAE,CAAC,CAAC,GAAG6H,mBAAmB,CAAC7H,GAAG,CAAC;gBAAA;gBAAA4I,QAAA,CAAAY,GAAA;kBAAA,IAAAiE,KAAA,GAN7G,GAAGzN,GAAG,CAAC0N,WAAW,IAAI,EAAE,IAAI1N,GAAG,CAAC6D,KAAK,IAAI,EAAE,EAAE;oBAAA8J,KAAA,GACxC3G,SAAS,CAAChH,GAAG,CAAC;oBAAA4N,KAAA,GACR3J,iBAAiB,CAACC,KAAK,CAAC,CAAC,CAAC;oBAAA2J,KAAA,GACjClG,WAAW,CAAC3H,GAAG,CAAC;kBAAAyN,KAAA,KAAAjE,GAAA,CAAAK,CAAA,IAAAG,WAAA,CAAAqD,MAAA,EAAA7D,GAAA,CAAAK,CAAA,GAAA4D,KAAA;kBAAAE,KAAA,KAAAnE,GAAA,CAAAM,CAAA,IAAAjB,cAAA,CAAAwE,MAAA,gBAAA7D,GAAA,CAAAM,CAAA,GAAA6D,KAAA;kBAAAC,KAAA,KAAApE,GAAA,CAAAO,CAAA,IAAAlB,cAAA,CAAAwE,MAAA,sBAAA7D,GAAA,CAAAO,CAAA,GAAA6D,KAAA;kBAAAC,KAAA,KAAArE,GAAA,CAAAS,CAAA,IAAApB,cAAA,CAAAwE,MAAA,eAAA7D,GAAA,CAAAS,CAAA,GAAA4D,KAAA;kBAAA,OAAArE,GAAA;gBAAA;kBAAAK,CAAA,EAAAvK,SAAA;kBAAAwK,CAAA,EAAAxK,SAAA;kBAAAyK,CAAA,EAAAzK,SAAA;kBAAA2K,CAAA,EAAA3K;gBAAA;gBAAA,OAAA+N,MAAA;cAAA;YAK9B;YAAAnF,QAAA,CAAAuE,MAAA,EAAArE,iBAAA,CAKJ3J,IAAI;cAAA,IACH4J,IAAIA,CAAA;gBAAA,OAAEjH,KAAK,CAACsB,IAAI,CAACC,MAAM,GAAG,CAAC;cAAA;cAAA,IAC3B4I,QAAQA,CAAA;gBAAA;kBAAA,IAAAuC,MAAA,GAAA9F,gBAAA,CAAA+F,OAAA;oBAAAC,MAAA,GAAAF,MAAA,CAAA7E,UAAA;kBAAAf,QAAA,CAAA8F,MAAA,EAAA5F,iBAAA,CAGDpJ,WAAW;oBAAA,IAACwM,WAAWA,CAAA;sBAAA,OAAAC,MAAA,OAAKrK,KAAK,CAAC6M,KAAK,IAAI5O,QAAQ,CAAC,CAAC,CAAC6O,SAAS;oBAAA;kBAAA;kBAAAtF,QAAA,OAAAC,cAAA,CAAAmF,MAAA,aADvB5M,KAAK,CAACwF,OAAO,CAACjE,MAAM;kBAAA,OAAAmL,MAAA;gBAAA;cAAA;cAAA,IAAAvF,SAAA;gBAAA,QAAAH,iBAAA,CAMlE9J,GAAG;kBAAA,IAAC8O,IAAIA,CAAA;oBAAA,OAAEhM,KAAK,CAACsB,IAAI;kBAAA;kBAAA6F,QAAA,EACjBxF,GAAG,IAAK;oBACR,MAAMgE,EAAE,GAAGA,CAAA,KAAMjE,KAAK,CAACC,GAAG,CAAC;oBAC3B,MAAMoL,UAAU,GAAGA,CAAA,KACjB/M,KAAK,CAAC8B,SAAS,GAAG9B,KAAK,CAAC8B,SAAS,CAACkL,QAAQ,CAAC,CAAC,CAACC,GAAG,CAACtH,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG3F,KAAK,CAACkN,aAAa,IAAIvH,EAAE,CAAC,CAAC,KAAK3F,KAAK,CAACkN,aAAa;oBACpH;sBAAA,IAAAC,MAAA,GAAAvG,gBAAA,CAAAwG,OAAA;sBAAAD,MAAA,CAAAE,SAAA,GAmBgB5E,CAAC,IAAKO,YAAY,CAACP,CAAC,EAAE9G,GAAG,CAAC;sBAAAwL,MAAA,CAAAG,aAAA,GADvB,MAAMtN,KAAK,CAACuN,gBAAgB,GAAG5L,GAAG,CAAC;sBAAAwL,MAAA,CAAAK,UAAA,GADrCxO,KAAK,IAAKgD,gBAAgB,CAAChD,KAAK,EAAE2C,GAAG,CAAC;sBAAAwL,MAAA,CAAAM,OAAA,GADzCzO,KAAK,IAAK+C,UAAU,CAAC/C,KAAK,EAAE2C,GAAG,CAAC;sBAAAwL,MAAA,CAAAvB,gBAAA,UAJjC,MAAM;wBACb,MAAM3F,GAAG,GAAGN,EAAE,CAAC,CAAC;wBAChB,IAAIM,GAAG,KAAK/H,SAAS,EAAE8B,KAAK,CAAC8B,SAAS,EAAE4L,WAAW,CAACzH,GAAG,CAAC;sBAC1D,CAAC;sBAAA6F,KAAA,CAbK6B,OAAO,IAAK;wBAChB,MAAM1H,GAAG,GAAGN,EAAE,CAAC,CAAC;wBAChB,IAAIM,GAAG,KAAK/H,SAAS,EAAE8B,KAAK,CAAC8B,SAAS,EAAE8L,QAAQ,CAAC3H,GAAG,EAAE0H,OAAO,CAAC;sBAChE,CAAC,EAAAR,MAAA;sBAAArG,QAAA,CAAAqG,MAAA,EAAAnG,iBAAA,CAgBA9J,GAAG;wBAAA,IAAC8O,IAAIA,CAAA;0BAAA,OAAEhM,KAAK,CAACwF,OAAO;wBAAA;wBAAA2B,QAAA,EACrBA,CAACvI,GAAG,EAAEkE,KAAK,KAAK;0BACf,MAAM/E,KAAK,GAAGA,CAAA,KAAMqH,OAAO,CAACzD,GAAG,EAAE/C,GAAG,CAAC;0BACrC;4BAAA,IAAAiP,MAAA,GAAAjH,gBAAA,CAAAkH,OAAA;8BAAAC,MAAA,GAAAF,MAAA,CAAAhG,UAAA;4BAAAgG,MAAA,CAAAjC,gBAAA,eAMkB,MAAM5I,yBAAyB,CAACF,KAAK,CAAC,CAAC,CAAC;4BAAAgE,QAAA,CAAAiH,MAAA;8BAAA,IAAAC,IAAA,GAAA3D,MAAA,SAGnDrK,KAAK,CAACiO,UAAU;8BAAA,aAAhBD,IAAA,KACGhO,KAAK,CAACiO,UAAU,CAAC;gCACftM,GAAG;gCACH/C,GAAG;gCACHb,KAAK,EAAEA,KAAK,CAAC,CAAC;gCACdqO,MAAM,EAAG8B,CAAC,IAAKnF,iBAAiB,CAACpH,GAAG,EAAE;kCAAE,GAAG/C,GAAG;kCAAEb,KAAK,EAAEA,CAAA,KAAMmQ;gCAAE,CAAC;8BAClE,CAAC,CAAC,GACFpF,kBAAkB,CAAC/K,KAAK,CAAC,CAAC,CAAC;4BAAA;4BAAAyJ,QAAA,CAAAY,GAAA;8BAAA,IAAA+F,KAAA,GAd1B,GAAGvP,GAAG,CAACwP,SAAS,IAAI,EAAE,IAAIxP,GAAG,CAAC6D,KAAK,IAAI,EAAE,EAAE;gCAAA4L,KAAA,GACtCzI,SAAS,CAAChH,GAAG,CAAC;gCAAA0P,KAAA,GACbtO,KAAK,CAACuO,aAAa,IAAIvO,KAAK,CAACuO,aAAa,KAAK,QAAQ,GAAGvO,KAAK,CAACuO,aAAa,GAAGrQ,SAAS;gCAAAsQ,KAAA,GACpF3L,iBAAiB,CAACC,KAAK,CAAC,CAAC,CAAC;gCAAA2L,KAAA,GAGhC/L,gBAAgB,CAAC,CAAC;8BAAAyL,KAAA,KAAA/F,GAAA,CAAAK,CAAA,IAAAG,WAAA,CAAAiF,MAAA,EAAAzF,GAAA,CAAAK,CAAA,GAAA0F,KAAA;8BAAAE,KAAA,KAAAjG,GAAA,CAAAM,CAAA,IAAAjB,cAAA,CAAAoG,MAAA,gBAAAzF,GAAA,CAAAM,CAAA,GAAA2F,KAAA;8BAAAC,KAAA,KAAAlG,GAAA,CAAAO,CAAA,IAAAlB,cAAA,CAAAoG,MAAA,iBAAAzF,GAAA,CAAAO,CAAA,GAAA2F,KAAA;8BAAAE,KAAA,KAAApG,GAAA,CAAAS,CAAA,IAAApB,cAAA,CAAAoG,MAAA,sBAAAzF,GAAA,CAAAS,CAAA,GAAA2F,KAAA;8BAAAC,KAAA,KAAArG,GAAA,CAAAsG,CAAA,IAAA9F,WAAA,CAAAmF,MAAA,EAAA3F,GAAA,CAAAsG,CAAA,GAAAD,KAAA;8BAAA,OAAArG,GAAA;4BAAA;8BAAAK,CAAA,EAAAvK,SAAA;8BAAAwK,CAAA,EAAAxK,SAAA;8BAAAyK,CAAA,EAAAzK,SAAA;8BAAA2K,CAAA,EAAA3K,SAAA;8BAAAwQ,CAAA,EAAAxQ;4BAAA;4BAAA,OAAA2P,MAAA;0BAAA;wBAYpC;sBAAC;sBAAArG,QAAA,CAAAY,GAAA;wBAAA,IAAAuG,KAAA,GAtCI,uBAAuBxF,QAAQ,CAACxH,GAAG,CAAC,EAAE;0BAAAiN,KAAA,GACjC3M,eAAe,CAAC,CAAC,GAAG,MAAM,GAAG/D,SAAS;0BAAA2Q,KAAA,GAClC5M,eAAe,CAAC,CAAC,IAAIJ,aAAa,CAAC,CAAC,GAAG,MAAM,GAAG3D,SAAS;0BAAA4Q,KAAA,GAC1D/B,UAAU,CAAC,CAAC,GAAG,MAAM,GAAG7O,SAAS;0BAAA6Q,KAAA,GACjC/O,KAAK,CAAC8B,SAAS,GAAG,CAAC,CAACiL,UAAU,CAAC,CAAC,GAAG7O,SAAS;0BAAA8Q,KAAA,GACjDhP,KAAK,CAAC8B,SAAS,GAAI9B,KAAK,CAAC8B,SAAS,CAACmN,OAAO,CAAC,CAAC,KAAKtJ,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAI9D,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG3D,SAAS;wBAAAyQ,KAAA,KAAAvG,GAAA,CAAAK,CAAA,IAAAG,WAAA,CAAAuE,MAAA,EAAA/E,GAAA,CAAAK,CAAA,GAAAkG,KAAA;wBAAAC,KAAA,KAAAxG,GAAA,CAAAM,CAAA,IAAAjB,cAAA,CAAA0F,MAAA,gBAAA/E,GAAA,CAAAM,CAAA,GAAAkG,KAAA;wBAAAC,KAAA,KAAAzG,GAAA,CAAAO,CAAA,IAAAlB,cAAA,CAAA0F,MAAA,oBAAA/E,GAAA,CAAAO,CAAA,GAAAkG,KAAA;wBAAAC,KAAA,KAAA1G,GAAA,CAAAS,CAAA,IAAApB,cAAA,CAAA0F,MAAA,mBAAA/E,GAAA,CAAAS,CAAA,GAAAiG,KAAA;wBAAAC,KAAA,KAAA3G,GAAA,CAAAsG,CAAA,IAAAjH,cAAA,CAAA0F,MAAA,mBAAA/E,GAAA,CAAAsG,CAAA,GAAAK,KAAA;wBAAAC,KAAA,KAAA5G,GAAA,CAAA8G,CAAA,IAAAzH,cAAA,CAAA0F,MAAA,cAAA/E,GAAA,CAAA8G,CAAA,GAAAF,KAAA;wBAAA,OAAA5G,GAAA;sBAAA;wBAAAK,CAAA,EAAAvK,SAAA;wBAAAwK,CAAA,EAAAxK,SAAA;wBAAAyK,CAAA,EAAAzK,SAAA;wBAAA2K,CAAA,EAAA3K,SAAA;wBAAAwQ,CAAA,EAAAxQ,SAAA;wBAAAgR,CAAA,EAAAhR;sBAAA;sBAAAiR,oBAAA;sBAAA,OAAAhC,MAAA;oBAAA;kBAqCjH;gBAAC,IAAAnG,iBAAA,CAEF3J,IAAI;kBAAA,IAAC4J,IAAIA,CAAA;oBAAA,OAAEjH,KAAK,CAACoP,UAAU;kBAAA;kBAAA,IAAAjI,SAAA;oBAAA,IAAAkI,MAAA,GAAAzI,gBAAA,CAAA0I,OAAA;sBAAAC,MAAA,GAAAF,MAAA,CAAAxH,UAAA;oBAAAL,QAAA,OAAAC,cAAA,CAAA8H,MAAA,aAEkBvP,KAAK,CAACwF,OAAO,CAACjE,MAAM;oBAAA,OAAA8N,MAAA;kBAAA;gBAAA;cAAA;YAAA;YAAAvI,QAAA,CAAAoE,KAAA,EAAAlE,iBAAA,CAKrE3J,IAAI;cAAA,IAAC4J,IAAIA,CAAA;gBAAA,OAAEjH,KAAK,CAAC0K,MAAM;cAAA;cAAAvD,QAAA,EACpBuD,MAAM;gBAAA,IAAA8E,MAAA,GAAA5I,gBAAA,CAAA6I,QAAA;kBAAAC,MAAA,GAAAF,MAAA,CAAA3H,UAAA;gBAAAf,QAAA,CAAA4I,MAAA,EAAA1I,iBAAA,CAGD9J,GAAG;kBAAA,IAAC8O,IAAIA,CAAA;oBAAA,OAAEhM,KAAK,CAACwF,OAAO;kBAAA;kBAAA2B,QAAA,EACrBA,CAACvI,GAAG,EAAEkE,KAAK,KAAK;oBACf,MAAM/E,KAAK,GAAGA,CAAA,KAAM2M,MAAM,CAAC,CAAC,CAACiF,MAAM,GAAG/Q,GAAG,CAAC+G,EAAE,CAAC;oBAC7C;sBAAA,IAAAiK,MAAA,GAAAhJ,gBAAA,CAAAiJ,QAAA;sBAAAD,MAAA,CAAAhE,gBAAA,eAKkB,MAAM5I,yBAAyB,CAACF,KAAK,CAAC,CAAC,CAAC;sBAAAgE,QAAA,CAAA8I,MAAA;wBAAA,IAAAE,IAAA,GAAAzF,MAAA,SAErDK,MAAM,CAAC,CAAC,CAACuD,UAAU;wBAAA,aAAnB6B,IAAA,KACGpF,MAAM,CAAC,CAAC,CAACuD,UAAU,CAAE;0BAAErP,GAAG;0BAAEb,KAAK,EAAEA,KAAK,CAAC,CAAC;0BAAEqO,MAAM,EAAEtD;wBAAmB,CAAC,CAAC,GACzEA,kBAAkB,CAAC/K,KAAK,CAAC,CAAC,CAAC;sBAAA;sBAAAyJ,QAAA,CAAAY,GAAA;wBAAA,IAAA2H,KAAA,GANnBnK,SAAS,CAAChH,GAAG,CAAC;0BAAAoR,KAAA,GACRnN,iBAAiB,CAACC,KAAK,CAAC,CAAC,CAAC;wBAAAiN,KAAA,KAAA3H,GAAA,CAAAK,CAAA,IAAAhB,cAAA,CAAAmI,MAAA,gBAAAxH,GAAA,CAAAK,CAAA,GAAAsH,KAAA;wBAAAC,KAAA,KAAA5H,GAAA,CAAAM,CAAA,IAAAjB,cAAA,CAAAmI,MAAA,sBAAAxH,GAAA,CAAAM,CAAA,GAAAsH,KAAA;wBAAA,OAAA5H,GAAA;sBAAA;wBAAAK,CAAA,EAAAvK,SAAA;wBAAAwK,CAAA,EAAAxK;sBAAA;sBAAA,OAAA0R,MAAA;oBAAA;kBAQlD;gBAAC;gBAAA,OAAAJ,MAAA;cAAA;YAIR,IAAAjE,MAAA,EAAAC,KAAA;YAAA1E,QAAA,CAAAkE,KAAA,EAAAhE,iBAAA,CAGJ3J,IAAI;cAAA,IAAC4J,IAAIA,CAAA;gBAAA,OAAE9E,4BAA4B,CAAC,CAAC;cAAA;cAAA,IAAAgF,SAAA;gBAAA,IAAA8I,MAAA,GAAArJ,gBAAA,CAAAsJ,OAAA;gBAAA,IAAAC,MAAA,GAC9BrP,WAAW;gBAAA,OAAAqP,MAAA,kBAAArE,KAAA,CAAAqE,MAAA,EAAAF,MAAA,IAAXnP,WAAW,GAAAmP,MAAA;gBAAA,OAAAA,MAAA;cAAA;YAAA,IAAAvE,MAAA,EAAAC,KAAA;YAAAnE,QAAA,CAAAY,GAAA;cAAA,IAAAgI,IAAA,GAjIXhO,UAAU,CAAC,CAAC,GAAGlE,SAAS,GAAI8B,KAAK,CAACqQ,SAAS,IAAIpS,QAAQ,CAAC,CAAC,CAACqS,SAAU;gBAAAC,IAAA,GAC/DnO,UAAU,CAAC,CAAC;gBAAAoO,IAAA,GAGfxQ,KAAK,CAACyQ,OAAO,KAAK,SAAS,GAAG,SAAS,GAAGvS,SAAS;gBAAAwS,IAAA,GAChD1Q,KAAK,CAAC0K,MAAM,GAAG,MAAM,GAAGxM,SAAS;gBAAAyS,IAAA,GACpCnO,OAAO,CAAC,CAAC;gBAAAoO,IAAA,GACD5Q,KAAK,CAAC6Q,iBAAiB,IAAI3S,SAAS;gBAAA4S,IAAA,GAG7BnO,UAAU,CAAC,CAAC;gBAAAoO,KAAA,GAAa/Q,KAAK,CAACoP,UAAU,GAAG,MAAM,GAAGlR,SAAS;gBAAA8S,KAAA,GACxChR,KAAK,CAACiR,YAAY,KAAK,KAAK,GAAG/S,SAAS,GAAG,MAAM;cAAAkS,IAAA,KAAAhI,GAAA,CAAAK,CAAA,IAAAhB,cAAA,CAAAuD,KAAA,gBAAA5C,GAAA,CAAAK,CAAA,GAAA2H,IAAA;cAAAG,IAAA,KAAAnI,GAAA,CAAAM,CAAA,IAAAjB,cAAA,CAAAuD,KAAA,qBAAA5C,GAAA,CAAAM,CAAA,GAAA6H,IAAA;cAAAC,IAAA,KAAApI,GAAA,CAAAO,CAAA,IAAAlB,cAAA,CAAAuD,KAAA,kBAAA5C,GAAA,CAAAO,CAAA,GAAA6H,IAAA;cAAAE,IAAA,KAAAtI,GAAA,CAAAS,CAAA,IAAApB,cAAA,CAAAuD,KAAA,qBAAA5C,GAAA,CAAAS,CAAA,GAAA6H,IAAA;cAAAC,IAAA,KAAAvI,GAAA,CAAAsG,CAAA,IAAAjH,cAAA,CAAAuD,KAAA,kBAAA5C,GAAA,CAAAsG,CAAA,GAAAiC,IAAA;cAAAC,IAAA,KAAAxI,GAAA,CAAA8G,CAAA,IAAAzH,cAAA,CAAAuD,KAAA,0BAAA5C,GAAA,CAAA8G,CAAA,GAAA0B,IAAA;cAAAE,IAAA,KAAA1I,GAAA,CAAA8I,CAAA,IAAAtI,WAAA,CAAAsC,KAAA,EAAA9C,GAAA,CAAA8I,CAAA,GAAAJ,IAAA;cAAAC,KAAA,KAAA3I,GAAA,CAAA+I,CAAA,IAAA1J,cAAA,CAAAyD,KAAA,eAAA9C,GAAA,CAAA+I,CAAA,GAAAJ,KAAA;cAAAC,KAAA,KAAA5I,GAAA,CAAAgJ,CAAA,IAAA3J,cAAA,CAAA0D,KAAA,iBAAA/C,GAAA,CAAAgJ,CAAA,GAAAJ,KAAA;cAAA,OAAA5I,GAAA;YAAA;cAAAK,CAAA,EAAAvK,SAAA;cAAAwK,CAAA,EAAAxK,SAAA;cAAAyK,CAAA,EAAAzK,SAAA;cAAA2K,CAAA,EAAA3K,SAAA;cAAAwQ,CAAA,EAAAxQ,SAAA;cAAAgR,CAAA,EAAAhR,SAAA;cAAAgT,CAAA,EAAAhT,SAAA;cAAAiT,CAAA,EAAAjT,SAAA;cAAAkT,CAAA,EAAAlT;YAAA;YAAA,OAAA8M,KAAA;UAAA,MAAAhE,iBAAA,CAyHrG9J,GAAG;YAAC8O,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YAAA7E,QAAA,EACjBnD,IAAI;cAAA,IAAAqN,MAAA,GAAAzK,gBAAA,CAAA0K,QAAA;gBAAAC,MAAA,GAAAF,MAAA,CAAAxJ,UAAA;cAAAwJ,MAAA,CAAAzF,gBAAA,kBAWgB5M,KAAK,IAAKA,KAAK,CAACI,aAAa,CAACoS,qBAAqB,CAACxS,KAAK,CAACmG,SAAS,CAAC;cAAAkM,MAAA,CAAAI,WAAA,GADxEzS,KAAK,IAAKA,KAAK,CAACI,aAAa,CAACoS,qBAAqB,CAACxS,KAAK,CAACmG,SAAS,CAAC;cAAAkM,MAAA,CAAAK,aAAA,GAHlE1S,KAAK,IAAK;gBACxB,IAAIA,KAAK,CAACI,aAAa,CAACuS,iBAAiB,CAAC3S,KAAK,CAACmG,SAAS,CAAC,EAAEpB,iBAAiB,CAAC/E,KAAK,EAAEgF,IAAI,CAAC;cAC5F,CAAC;cAAAqN,MAAA,CAAAO,aAAA,GAHe5S,KAAK,IAAKgG,kBAAkB,CAAChG,KAAK,EAAEgF,IAAI,CAAC;cAAAyD,cAAA,CAAA4J,MAAA,eAH9CrN,IAAI;cAAAwD,QAAA,CAAAY,GAAA;gBAAA,IAAAyJ,KAAA,GACA1R,UAAU,CAAC,CAAC,CAAC6D,IAAI,CAAC,CAACvE,QAAQ,GAAG,MAAM,GAAGvB,SAAS;kBAAA4T,KAAA,GAWzB,GAAG3R,UAAU,CAAC,CAAC,CAAC6D,IAAI,CAAC,CAACtE,MAAM,IAAI;kBAAAqS,KAAA,GAClC,GAAG5R,UAAU,CAAC,CAAC,CAAC6D,IAAI,CAAC,CAACrE,IAAI,IAAI;gBAAAkS,KAAA,KAAAzJ,GAAA,CAAAK,CAAA,IAAAhB,cAAA,CAAA4J,MAAA,mBAAAjJ,GAAA,CAAAK,CAAA,GAAAoJ,KAAA;gBAAAC,KAAA,KAAA1J,GAAA,CAAAM,CAAA,IAAAsJ,kBAAA,CAAAT,MAAA,oCAAAnJ,GAAA,CAAAM,CAAA,GAAAoJ,KAAA;gBAAAC,KAAA,KAAA3J,GAAA,CAAAO,CAAA,IAAAqJ,kBAAA,CAAAT,MAAA,kCAAAnJ,GAAA,CAAAO,CAAA,GAAAoJ,KAAA;gBAAA,OAAA3J,GAAA;cAAA;gBAAAK,CAAA,EAAAvK,SAAA;gBAAAwK,CAAA,EAAAxK,SAAA;gBAAAyK,CAAA,EAAAzK;cAAA;cAAAiR,oBAAA;cAAA,OAAAkC,MAAA;YAAA;UAIrE;QAAA;MAAA;IAAA;EAAA;AAKX;AAEA,MAAMY,cAAc,GAAIjS,KAA0B,IAAkB;EAClE,MAAMuC,SAAS,GAAG,kBAAkBtF,cAAc,CAAC,CAAC,UAAU;EAC9D,MAAM,CAACqF,UAAU,EAAE4P,aAAa,CAAC,GAAGlV,YAAY,CAAC,KAAK,CAAC;EACvD,MAAMmV,OAAmC,GAAG;IAC1C5P,SAAS;IACTD,UAAU;IACV8P,eAAe,EAAEA,CAAA,KAAMF,aAAa,CAAC,IAAI;EAC3C,CAAC;EAED,OAAAlL,iBAAA,CACGnJ,qBAAqB,CAACwU,QAAQ;IAACtU,KAAK,EAAEoU,OAAO;IAAA,IAAAhL,SAAA;MAAA,OAAAH,iBAAA,CAC3CrJ,KAAK;QAAC2U,EAAE;QAAA,aAAA7P,CAAA;UAAA,OAAkB,kBAAkBzC,KAAK,CAACyC,KAAK,IAAI,EAAE,EAAE;QAAA;QAAA,IAAA0E,SAAA;UAAA,OAC7DnH,KAAK,CAACmH,QAAQ;QAAA;MAAA;IAAA;EAAA;AAIvB,CAAC;AAED,MAAMoL,eAAe,GAAIvS,KAA2B,IAAkB;EACpE,MAAMW,KAAK,GAAGrD,UAAU,CAACO,qBAAqB,CAAC;EAC/C8C,KAAK,EAAEyR,eAAe,CAAC,CAAC;EAExB;IAAA,IAAAI,MAAA,GAAA5L,gBAAA,CAAA6L,QAAA;IAAA3L,QAAA,CAAA0L,MAAA,EAAAxL,iBAAA,CAEKtJ,WAAW;MAAA,IACVgJ,KAAKA,CAAA;QAAA;UAAA,IAAAgM,MAAA,GAAA9L,gBAAA,CAAA+L,QAAA;UAAA7L,QAAA,CAAA4L,MAAA,QAA+B1S,KAAK,CAAC0G,KAAK;UAAAc,QAAA,OAAAC,cAAA,CAAAiL,MAAA,QAA9B/R,KAAK,EAAE4B,SAAS;UAAA,OAAAmQ,MAAA;QAAA;MAAA;MAAA,IACjCxL,QAAQA,CAAA;QAAA,OAAElH,KAAK,CAACkH,QAAQ;MAAA;MAAA,IACxB0L,OAAOA,CAAA;QAAA,OAAE5S,KAAK,CAACmH,QAAQ;MAAA;MAAA,IACvBmL,EAAEA,CAAA;QAAA,OAAEtS,KAAK,CAACsS,EAAE;MAAA;MAAA,IACZ3S,IAAIA,CAAA;QAAA,OAAEK,KAAK,CAACL,IAAI;MAAA;IAAA;IAAA6H,QAAA,OAAAoB,WAAA,CAAA4J,MAAA,EANR,0BAA0BxS,KAAK,CAACyC,KAAK,IAAI,EAAE,EAAE;IAAA,OAAA+P,MAAA;EAAA;AAU7D,CAAC;AAED,MAAMK,iBAAiB,GAAI7S,KAA6B;EAAA,IAAA8S,MAAA,GAAAlM,gBAAA,CAAA6L,QAAA;EAAA3L,QAAA,CAAAgM,MAAA,QACQ9S,KAAK,CAACmH,QAAQ;EAAAK,QAAA,OAAAoB,WAAA,CAAAkK,MAAA,EAAhE,4BAA4B9S,KAAK,CAACyC,KAAK,IAAI,EAAE,EAAE;EAAA,OAAAqQ,MAAA;AAAA,IAC5D;AAED,MAAMC,oBAAoB,GAAI/S,KAAgC;EAAA,IAAAgT,MAAA,GAAApM,gBAAA,CAAAqM,QAAA;EAAAnM,QAAA,CAAAkM,MAAA,QACGhT,KAAK,CAACmH,QAAQ;EAAAK,QAAA,OAAAoB,WAAA,CAAAoK,MAAA,EAA9D,0BAA0BhT,KAAK,CAACyC,KAAK,IAAI,EAAE,EAAE;EAAA,OAAAuQ,MAAA;AAAA,IAC7D;AAUD,MAAME,SAAS,GAAGnT,aAAmC;AACrDmT,SAAS,CAACC,KAAK,GAAGlB,cAAc;AAChCiB,SAAS,CAACE,MAAM,GAAGb,eAAe;AAClCW,SAAS,CAACG,QAAQ,GAAGR,iBAAiB;AACtCK,SAAS,CAACI,MAAM,GAAGP,oBAAoB;AAEvC,eAAeG,SAAS;AAACK,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/DataTable.tsx"],"sourcesContent":["import {\n type Accessor,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n onCleanup,\n onMount,\n Show,\n useContext,\n} from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { PanelHeader } from \"../layout/PanelHeader\";\nimport { Paper } from \"../surfaces/Paper\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport type { CollectionSelection } from \"./collection-selection\";\n\nexport type DataTableColumn<T> = {\n id: string;\n header: JSX.Element | ((ctx: { col: DataTableColumn<T> }) => JSX.Element);\n subtitle?: JSX.Element | ((ctx: { col: DataTableColumn<T> }) => JSX.Element);\n value?: keyof T | ((row: T) => unknown);\n class?: string;\n headerClass?: string;\n cellClass?: string;\n /** Defaults to right for numeric values and left for everything else. */\n align?: \"left\" | \"center\" | \"right\";\n /**\n * Marks the column sortable. Pass a string when the server's sort key\n * differs from the column id — they often do, because one column can show a\n * rate while another sorts by the absolute count behind it.\n */\n sortable?: boolean | string;\n};\n\nexport type DataTableSort = { key: string; direction: \"asc\" | \"desc\" };\n\nexport type DataTableRenderCell<T> = (ctx: {\n row: T;\n col: DataTableColumn<T>;\n value: unknown;\n render: (value: unknown) => JSX.Element;\n}) => JSX.Element;\n\nexport type DataTableRenderHeader<T> = (ctx: { col: DataTableColumn<T>; render: () => JSX.Element }) => JSX.Element;\n\nexport type DataTableFooter<T> = {\n values?: Record<string, unknown>;\n renderCell?: (ctx: { col: DataTableColumn<T>; value: unknown; render: (value: unknown) => JSX.Element }) => JSX.Element;\n};\n\nexport type DataTableProps<T> = {\n rows: readonly T[];\n columns: readonly DataTableColumn<T>[];\n /** Accessible name for a standalone table region. Defaults to \"Data table\". */\n ariaLabel?: string;\n /** ID of a visible heading that labels the table region. Takes precedence over ariaLabel. */\n ariaLabelledBy?: string;\n getRowId?: (row: T) => string;\n /** Current server-side ordering, or null when the default applies. */\n sort?: DataTableSort | null;\n /**\n * Link target for a sortable header. Link-based because every admin table is\n * server-rendered: sorting is a query change, not client state.\n */\n sortHref?: (next: DataTableSort) => string;\n selectedRowId?: string | null;\n /** Optional multi-selection shared with another collection view. Requires getRowId. */\n selection?: CollectionSelection;\n rowClass?: string | ((row: T) => string | undefined);\n hoverRows?: boolean;\n onRowClick?: (row: T) => void;\n onRowDoubleClick?: (row: T) => void;\n onRowContextMenu?: (row: T) => void;\n renderCell?: DataTableRenderCell<T>;\n renderHeader?: DataTableRenderHeader<T>;\n footer?: DataTableFooter<T>;\n hasMore?: boolean;\n loadingMore?: boolean;\n onLoadMore?: () => void;\n empty?: JSX.Element;\n density?: \"compact\" | \"normal\";\n stickyHeader?: boolean;\n highlightColumns?: boolean;\n verticalAlign?: \"top\" | \"middle\" | \"bottom\";\n cellContentClass?: string;\n fillHeight?: boolean;\n /** Visual frame for a standalone table. Defaults preserve the legacy class-based behavior. */\n surface?: \"paper\" | \"plain\";\n class?: string;\n /** Additional classes for the table element. Core table geometry is always retained. */\n tableClass?: string;\n scrollPreserveKey?: string | false;\n};\n\nexport type DataTablePanelProps = {\n children: JSX.Element;\n class?: string;\n};\n\nexport type DataTableHeaderProps = {\n title: string;\n subtitle?: string;\n children?: JSX.Element;\n as?: \"h1\" | \"h2\" | \"h3\";\n size?: \"sm\" | \"md\";\n class?: string;\n};\n\nexport type DataTableControlsProps = {\n children: JSX.Element;\n class?: string;\n};\n\nexport type DataTablePanelFooterProps = {\n children: JSX.Element;\n class?: string;\n};\n\ntype DataTablePanelContextValue = {\n headingId: string;\n hasHeading: Accessor<boolean>;\n registerHeading: () => void;\n};\n\nconst DataTablePanelContext = createContext<DataTablePanelContextValue>();\n\nconst defaultRender = (value: unknown, locale: string, messages: ReturnType<ReturnType<typeof useUiMessages>>): JSX.Element => {\n if (value === null || value === undefined || value === \"\") return \"—\";\n if (value instanceof Date) return value.toLocaleString(locale);\n if (typeof value === \"boolean\") return value ? messages.yes : messages.no;\n if (typeof value === \"number\" || typeof value === \"bigint\") return String(value);\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n};\n\nconst renderColumnPart = <T,>(\n part: DataTableColumn<T>[\"header\"] | DataTableColumn<T>[\"subtitle\"],\n col: DataTableColumn<T>,\n): JSX.Element => {\n if (typeof part === \"function\") return part({ col });\n return part;\n};\n\nconst rowInteractiveSelector = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"label\",\n \"select\",\n \"textarea\",\n \"summary\",\n \"[contenteditable]\",\n \"[role='button']\",\n \"[role='checkbox']\",\n \"[role='link']\",\n \"[role='menuitem']\",\n \"[role='option']\",\n \"[role='radio']\",\n \"[role='switch']\",\n \"[role='tab']\",\n \"[tabindex]\",\n].join(\",\");\n\nconst isNestedRowControl = (event: Event): boolean =>\n event.target instanceof Element && event.target.closest(rowInteractiveSelector) !== event.currentTarget;\n\ntype DataTableScrollbarAxis = \"x\" | \"y\";\ntype DataTableScrollbarMetrics = { overflow: boolean; offset: number; size: number };\n\nconst scrollbarMetrics = (viewportSize: number, contentSize: number, scrollOffset: number): DataTableScrollbarMetrics => {\n if (viewportSize <= 0 || contentSize <= viewportSize + 1) return { overflow: false, offset: 0, size: 0 };\n const size = Math.min(viewportSize, Math.max(24, (viewportSize * viewportSize) / contentSize));\n const offset = (scrollOffset / (contentSize - viewportSize)) * (viewportSize - size);\n return { overflow: true, offset, size };\n};\n\nfunction DataTableRoot<T>(props: DataTableProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const [hoveredColumn, setHoveredColumn] = createSignal<number | null>(null);\n const [scrollbars, setScrollbars] = createSignal<Record<DataTableScrollbarAxis, DataTableScrollbarMetrics>>({\n x: { overflow: false, offset: 0, size: 0 },\n y: { overflow: false, offset: 0, size: 0 },\n });\n const [scrollbarEnhanced, setScrollbarEnhanced] = createSignal(false);\n const [scrolling, setScrolling] = createSignal(false);\n const panel = useContext(DataTablePanelContext);\n let tableRef: HTMLTableElement | undefined;\n let scrollRef: HTMLDivElement | undefined;\n let loadMoreRef: HTMLDivElement | undefined;\n let scrollingTimeout: ReturnType<typeof setTimeout> | undefined;\n let scrollbarDragOffset = 0;\n let hasMore = false;\n let loadingMore = false;\n let onLoadMore: (() => void) | undefined;\n let loadMoreRequested = false;\n let previousRowsLength = props.rows.length;\n let previousLoadingMore = !!props.loadingMore;\n let previousHasMore = !!props.hasMore;\n const rowId = (row: T) => props.getRowId?.(row);\n const isInteractive = () => !!props.selection || !!props.onRowClick || !!props.onRowDoubleClick;\n const shouldHoverRows = () => props.hoverRows ?? isInteractive();\n const shouldRenderLoadMoreSentinel = () => !!props.onLoadMore;\n const labelledBy = () => props.ariaLabelledBy ?? (panel?.hasHeading() ? panel.headingId : undefined);\n const surface = () => props.surface ?? (props.class ? \"plain\" : \"paper\");\n const cellContentClass = () => props.cellContentClass ?? \"k2b-data-table__cell-text\";\n const tableClass = () => `k2b-data-table ${props.tableClass ?? \"\"}`.trim();\n const columnHighlighted = (index: number) =>\n props.highlightColumns !== false && shouldHoverRows() && hoveredColumn() === index ? \"true\" : undefined;\n const setHoveredColumnIfEnabled = (index: number) => {\n if (shouldHoverRows()) setHoveredColumn(index);\n };\n\n const isNearBottom = () => {\n if (!scrollRef) return false;\n return scrollRef.scrollTop + scrollRef.clientHeight >= scrollRef.scrollHeight - 240;\n };\n\n const maybeLoadMore = () => {\n if (!hasMore || loadingMore || loadMoreRequested || !onLoadMore) return;\n if (!isNearBottom()) return;\n loadMoreRequested = true;\n try {\n onLoadMore();\n } catch (error) {\n loadMoreRequested = false;\n throw error;\n }\n };\n\n const syncScrollbars = () => {\n if (!scrollRef) return;\n setScrollbars({\n x: scrollbarMetrics(scrollRef.clientWidth, scrollRef.scrollWidth, scrollRef.scrollLeft),\n y: scrollbarMetrics(scrollRef.clientHeight, scrollRef.scrollHeight, scrollRef.scrollTop),\n });\n };\n\n const revealScrollbars = () => {\n setScrolling(true);\n if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);\n scrollingTimeout = setTimeout(() => {\n setScrolling(false);\n scrollingTimeout = undefined;\n }, 700);\n };\n\n const onScroll = () => {\n syncScrollbars();\n revealScrollbars();\n maybeLoadMore();\n };\n\n const scrollFromPointer = (event: PointerEvent & { currentTarget: HTMLDivElement }, axis: DataTableScrollbarAxis) => {\n if (!scrollRef) return;\n const track = event.currentTarget;\n const metrics = scrollbars()[axis];\n const rect = track.getBoundingClientRect();\n const trackSize = axis === \"y\" ? rect.height : rect.width;\n const pointerOffset = axis === \"y\" ? event.clientY - rect.top : event.clientX - rect.left;\n const available = Math.max(1, trackSize - metrics.size);\n const thumbOffset = Math.min(available, Math.max(0, pointerOffset - scrollbarDragOffset));\n const maxScroll = axis === \"y\" ? scrollRef.scrollHeight - scrollRef.clientHeight : scrollRef.scrollWidth - scrollRef.clientWidth;\n if (axis === \"y\") scrollRef.scrollTop = (thumbOffset / available) * maxScroll;\n else scrollRef.scrollLeft = (thumbOffset / available) * maxScroll;\n syncScrollbars();\n revealScrollbars();\n };\n\n const startScrollbarDrag = (event: PointerEvent & { currentTarget: HTMLDivElement }, axis: DataTableScrollbarAxis) => {\n event.preventDefault();\n const metrics = scrollbars()[axis];\n const rect = event.currentTarget.getBoundingClientRect();\n const pointerOffset = axis === \"y\" ? event.clientY - rect.top : event.clientX - rect.left;\n scrollbarDragOffset =\n event.target === event.currentTarget ? metrics.size / 2 : Math.min(metrics.size, Math.max(0, pointerOffset - metrics.offset));\n event.currentTarget.setPointerCapture(event.pointerId);\n scrollFromPointer(event, axis);\n };\n\n const valueOf = (row: T, col: DataTableColumn<T>) => {\n if (typeof col.value === \"function\") return col.value(row);\n if (col.value) return row[col.value];\n return undefined;\n };\n\n const columnAlignments = createMemo(() => {\n const alignments = new Map<string, NonNullable<DataTableColumn<T>[\"align\"]>>();\n for (const col of props.columns) {\n if (col.align) {\n alignments.set(col.id, col.align);\n continue;\n }\n let align: NonNullable<DataTableColumn<T>[\"align\"]> = \"left\";\n for (const row of props.rows) {\n const value = valueOf(row, col);\n if (value === null || value === undefined || value === \"\") continue;\n align = typeof value === \"number\" || typeof value === \"bigint\" ? \"right\" : \"left\";\n break;\n }\n alignments.set(col.id, align);\n }\n return alignments;\n });\n\n /** `data-align` mirrors Cloud's `text-left/center/right` on the same cell. */\n const alignAttr = (col: DataTableColumn<T>) => {\n const align = columnAlignments().get(col.id) ?? \"left\";\n return align === \"left\" ? undefined : align;\n };\n\n const sortKeyOf = (col: DataTableColumn<T>): string | null =>\n col.sortable === true ? col.id : typeof col.sortable === \"string\" ? col.sortable : null;\n\n /**\n * Sorting is a link, not a handler: these tables are server-rendered, so the\n * order belongs in the URL. Clicking the active column flips its direction.\n */\n const sortLinkFor = (col: DataTableColumn<T>): { href: string; active: boolean; direction: \"asc\" | \"desc\" } | null => {\n const key = sortKeyOf(col);\n if (!key || !props.sortHref) return null;\n const active = props.sort?.key === key;\n const direction: \"asc\" | \"desc\" = active && props.sort?.direction === \"desc\" ? \"asc\" : \"desc\";\n return { href: props.sortHref({ key, direction }), active, direction };\n };\n\n /** Only a sortable column carries a sort state; the rest carry none at all. */\n const ariaSortFor = (col: DataTableColumn<T>): \"ascending\" | \"descending\" | \"none\" | undefined => {\n const key = sortKeyOf(col);\n if (!key || (!props.sortHref && !props.renderHeader)) return undefined;\n if (props.sort?.key !== key) return \"none\";\n return props.sort?.direction === \"asc\" ? \"ascending\" : \"descending\";\n };\n\n const renderHeaderDefault = (col: DataTableColumn<T>): JSX.Element => {\n const sort = sortLinkFor(col);\n const title = (\n <>\n <span class=\"k2b-data-table__header-title\">{renderColumnPart(col.header, col)}</span>\n <Show when={col.subtitle !== undefined}>\n <span class=\"k2b-data-table__header-subtitle\">{renderColumnPart(col.subtitle, col)}</span>\n </Show>\n </>\n );\n\n if (!sort)\n return (\n <div class=\"k2b-data-table__header-content\" data-align={alignAttr(col)}>\n {title}\n </div>\n );\n\n return (\n <a href={sort.href} class=\"k2b-data-table__header-content k2b-data-table__sort\" data-align={alignAttr(col)}>\n <span class=\"k2b-data-table__header-line\">\n {title}\n {/* Inactive columns keep a dimmed marker so the row reads as sortable. */}\n <i\n class={`k2b-data-table__sort-icon ti ${props.sort?.direction === \"asc\" && sort.active ? \"ti-arrow-up\" : \"ti-arrow-down\"}`}\n data-active={sort.active ? \"true\" : undefined}\n aria-hidden=\"true\"\n />\n </span>\n </a>\n );\n };\n\n const renderValueDefault = (value: unknown) => defaultRender(value, locale(), messages());\n const renderCellDefault = (row: T, col: DataTableColumn<T>) => renderValueDefault(valueOf(row, col));\n\n const onRowKeyDown = (event: KeyboardEvent, row: T) => {\n if (!isInteractive()) return;\n if (isNestedRowControl(event)) return;\n const id = rowId(row);\n if (id !== undefined && props.selection?.keyDown(event, id)) return;\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n (props.selection ? props.onRowDoubleClick : (props.onRowClick ?? props.onRowDoubleClick))?.(row);\n };\n\n const onRowClick = (event: MouseEvent, row: T) => {\n if (isNestedRowControl(event)) return;\n const id = rowId(row);\n if (id !== undefined) props.selection?.select(id, event);\n props.onRowClick?.(row);\n };\n\n const onRowDoubleClick = (event: MouseEvent, row: T) => {\n if (isNestedRowControl(event)) return;\n props.onRowDoubleClick?.(row);\n };\n\n const rowClass = (row: T) => {\n if (typeof props.rowClass === \"function\") return props.rowClass(row) ?? \"\";\n return props.rowClass ?? \"\";\n };\n\n onMount(() => {\n if (typeof IntersectionObserver === \"undefined\" || !scrollRef || !loadMoreRef) return;\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) maybeLoadMore();\n },\n { root: scrollRef, rootMargin: \"240px\" },\n );\n observer.observe(loadMoreRef);\n onCleanup(() => observer.disconnect());\n });\n\n onMount(() => {\n setScrollbarEnhanced(true);\n syncScrollbars();\n const observer = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(syncScrollbars);\n if (scrollRef) observer?.observe(scrollRef);\n if (tableRef) observer?.observe(tableRef);\n onCleanup(() => {\n observer?.disconnect();\n if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);\n });\n });\n\n createEffect(() => {\n const rowsLength = props.rows.length;\n const nextHasMore = !!props.hasMore;\n const nextLoadingMore = !!props.loadingMore;\n if (rowsLength !== previousRowsLength || (previousLoadingMore && !nextLoadingMore) || (!previousHasMore && nextHasMore)) {\n loadMoreRequested = false;\n }\n previousRowsLength = rowsLength;\n previousLoadingMore = nextLoadingMore;\n previousHasMore = nextHasMore;\n hasMore = nextHasMore;\n loadingMore = nextLoadingMore;\n onLoadMore = props.onLoadMore;\n maybeLoadMore();\n queueMicrotask(syncScrollbars);\n });\n\n return (\n <Show when={props.columns.length > 0} fallback={<Placeholder surface=\"paper\" description={<>{messages().noColumns}</>} />}>\n <Dynamic\n component={surface() === \"paper\" ? Paper : \"div\"}\n class={`k2b-table-shell ${props.class ?? \"\"}`}\n data-surface={surface()}\n data-has-footer={props.footer ? \"true\" : undefined}\n data-overflow-x={scrollbars().x.overflow ? \"true\" : undefined}\n data-overflow-y={scrollbars().y.overflow ? \"true\" : undefined}\n data-scrollbar-enhanced={scrollbarEnhanced() ? \"true\" : undefined}\n data-scrolling={scrolling() ? \"true\" : undefined}\n onMouseLeave={() => setHoveredColumn(null)}\n >\n <div\n ref={scrollRef}\n role=\"region\"\n aria-label={labelledBy() ? undefined : (props.ariaLabel ?? messages().dataTable)}\n aria-labelledby={labelledBy()}\n tabIndex={0}\n class=\"k2b-table-wrap\"\n data-density={props.density === \"compact\" ? \"compact\" : undefined}\n data-has-footer={props.footer ? \"true\" : undefined}\n data-surface={surface()}\n data-scroll-preserve={props.scrollPreserveKey || undefined}\n onScroll={onScroll}\n >\n <table ref={tableRef} class={tableClass()} data-fill={props.fillHeight ? \"true\" : undefined}>\n <thead class=\"k2b-data-table__head\" data-sticky={props.stickyHeader === false ? undefined : \"true\"}>\n <tr class=\"k2b-data-table__head-row\">\n <For each={props.columns}>\n {(col, index) => (\n <th\n scope=\"col\"\n class={`${col.headerClass ?? \"\"} ${col.class ?? \"\"}`}\n data-align={alignAttr(col)}\n data-highlighted={columnHighlighted(index())}\n aria-sort={ariaSortFor(col)}\n onMouseEnter={() => setHoveredColumnIfEnabled(index())}\n >\n {props.renderHeader ? props.renderHeader({ col, render: () => renderHeaderDefault(col) }) : renderHeaderDefault(col)}\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody>\n <Show\n when={props.rows.length > 0}\n fallback={\n <tr>\n <td class=\"k2b-data-table__empty\" colspan={props.columns.length}>\n <Placeholder description={<>{props.empty ?? messages().noRecords}</>} />\n </td>\n </tr>\n }\n >\n <For each={props.rows}>\n {(row) => {\n const id = () => rowId(row);\n const isSelected = () =>\n props.selection ? props.selection.selected().has(id() ?? \"\") : props.selectedRowId && id() === props.selectedRowId;\n return (\n <tr\n ref={(element) => {\n const key = id();\n if (key !== undefined) props.selection?.register(key, element);\n }}\n class={`k2b-data-table__row ${rowClass(row)}`}\n data-hover={shouldHoverRows() ? \"true\" : undefined}\n data-clickable={shouldHoverRows() && isInteractive() ? \"true\" : undefined}\n data-selected={isSelected() ? \"true\" : undefined}\n aria-selected={props.selection ? !!isSelected() : undefined}\n tabIndex={props.selection ? (props.selection.focused() === id() ? 0 : -1) : isInteractive() ? 0 : undefined}\n onFocus={() => {\n const key = id();\n if (key !== undefined) props.selection?.markFocused(key);\n }}\n onClick={(event) => onRowClick(event, row)}\n onDblClick={(event) => onRowDoubleClick(event, row)}\n onContextMenu={() => props.onRowContextMenu?.(row)}\n onKeyDown={(e) => onRowKeyDown(e, row)}\n >\n <For each={props.columns}>\n {(col, index) => {\n const value = () => valueOf(row, col);\n return (\n <td\n class={`${col.cellClass ?? \"\"} ${col.class ?? \"\"}`}\n data-align={alignAttr(col)}\n data-valign={props.verticalAlign && props.verticalAlign !== \"middle\" ? props.verticalAlign : undefined}\n data-highlighted={columnHighlighted(index())}\n onMouseEnter={() => setHoveredColumnIfEnabled(index())}\n >\n <div class={cellContentClass()}>\n {props.renderCell\n ? props.renderCell({\n row,\n col,\n value: value(),\n render: (v) => renderCellDefault(row, { ...col, value: () => v }),\n })\n : renderValueDefault(value())}\n </div>\n </td>\n );\n }}\n </For>\n </tr>\n );\n }}\n </For>\n <Show when={props.fillHeight}>\n <tr aria-hidden=\"true\">\n <td class=\"k2b-data-table__fill\" colspan={props.columns.length} />\n </tr>\n </Show>\n </Show>\n </tbody>\n <Show when={props.footer}>\n {(footer) => (\n <tfoot class=\"k2b-data-table__foot\" data-sticky=\"true\">\n <tr class=\"k2b-data-table__foot-row\">\n <For each={props.columns}>\n {(col, index) => {\n const value = () => footer().values?.[col.id];\n return (\n <td\n class=\"k2b-data-table__footer-cell\"\n data-align={alignAttr(col)}\n data-highlighted={columnHighlighted(index())}\n onMouseEnter={() => setHoveredColumnIfEnabled(index())}\n >\n {footer().renderCell\n ? footer().renderCell!({ col, value: value(), render: renderValueDefault })\n : renderValueDefault(value())}\n </td>\n );\n }}\n </For>\n </tr>\n </tfoot>\n )}\n </Show>\n </table>\n <Show when={shouldRenderLoadMoreSentinel()}>\n <div ref={loadMoreRef} class=\"k2b-data-table__sentinel\" aria-hidden=\"true\" />\n </Show>\n </div>\n <For each={[\"y\", \"x\"] as const}>\n {(axis) => (\n <div\n class=\"k2b-data-table__scrollbar\"\n data-axis={axis}\n data-overflow={scrollbars()[axis].overflow ? \"true\" : undefined}\n aria-hidden=\"true\"\n onPointerDown={(event) => startScrollbarDrag(event, axis)}\n onPointerMove={(event) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) scrollFromPointer(event, axis);\n }}\n onPointerUp={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n onPointerCancel={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n >\n <span\n style={{\n \"--k2b-data-table-scroll-offset\": `${scrollbars()[axis].offset}px`,\n \"--k2b-data-table-scroll-size\": `${scrollbars()[axis].size}px`,\n }}\n />\n </div>\n )}\n </For>\n </Dynamic>\n </Show>\n );\n}\n\nconst DataTablePanel = (props: DataTablePanelProps): JSX.Element => {\n const headingId = `k2b-data-table-${createUniqueId()}-heading`;\n const [hasHeading, setHasHeading] = createSignal(false);\n const context: DataTablePanelContextValue = {\n headingId,\n hasHeading,\n registerHeading: () => setHasHeading(true),\n };\n\n return (\n <DataTablePanelContext.Provider value={context}>\n <Paper as=\"section\" class={`k2b-data-panel ${props.class ?? \"\"}`}>\n {props.children}\n </Paper>\n </DataTablePanelContext.Provider>\n );\n};\n\nconst DataTableHeader = (props: DataTableHeaderProps): JSX.Element => {\n const panel = useContext(DataTablePanelContext);\n panel?.registerHeading();\n\n return (\n <div class={`k2b-data-panel__header ${props.class ?? \"\"}`}>\n <PanelHeader\n title={<span id={panel?.headingId}>{props.title}</span>}\n subtitle={props.subtitle}\n actions={props.children}\n as={props.as}\n size={props.size}\n />\n </div>\n );\n};\n\nconst DataTableControls = (props: DataTableControlsProps): JSX.Element => (\n <div class={`k2b-data-panel__controls ${props.class ?? \"\"}`}>{props.children}</div>\n);\n\nconst DataTablePanelFooter = (props: DataTablePanelFooterProps): JSX.Element => (\n <footer class={`k2b-data-panel__footer ${props.class ?? \"\"}`}>{props.children}</footer>\n);\n\ntype DataTableComponent = {\n <T>(props: DataTableProps<T>): JSX.Element;\n Panel: (props: DataTablePanelProps) => JSX.Element;\n Header: (props: DataTableHeaderProps) => JSX.Element;\n Controls: (props: DataTableControlsProps) => JSX.Element;\n Footer: (props: DataTablePanelFooterProps) => JSX.Element;\n};\n\nconst DataTable = DataTableRoot as DataTableComponent;\nDataTable.Panel = DataTablePanel;\nDataTable.Header = DataTableHeader;\nDataTable.Controls = DataTableControls;\nDataTable.Footer = DataTablePanelFooter;\n\nexport default DataTable;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["For","Show","CopyButton","useUiMessages","highlightCodeDisplayLines","DocPage","props","_el$","_$getNextElement","_tmpl$","_$insert","children","_$effect","_$className","class","DocLead","_el$2","_tmpl$2","DocSection","_el$3","_tmpl$3","_el$4","firstChild","_el$6","_el$7","_co$","_$getNextMarker","nextSibling","_el$5","_el$8","_el$9","_co$2","_$createComponent","when","eyebrow","_el$0","_tmpl$4","title","DocInlineCode","_el$1","_tmpl$5","DocCode","messages","code","format","lineNumbers","hasHeader","Boolean","copy","lines","formatted","highlight","split","map","line","language","_el$10","_tmpl$7","_el$18","_el$19","_co$5","_el$16","_el$17","_el$11","_tmpl$6","_el$12","_el$13","_co$3","_el$14","_el$15","_co$4","_el$20","_tmpl$8","text","copyText","each","index","_el$21","_tmpl$0","_el$24","_el$25","_co$6","_el$23","_el$22","_tmpl$9","_$setProperty","_$setAttribute","undefined","_p$","_v$","_v$2","_v$3","codeLabel","e","t","a","DocConceptGrid","_el$26","_tmpl$1","items","item","_el$27","_tmpl$10","_el$28","_el$29","_el$30","_el$31","icon","DocRows","_el$32","_tmpl$11","_el$33","_tmpl$12","_el$36","_el$37","_co$7","_el$34","_el$35","fallback","_tmpl$13","_el$39","_tmpl$14","DocNote","variant","_el$40","_tmpl$15","_el$41","_el$42"],"sources":["content/Docs.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport CopyButton from \"../actions/CopyButton\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { CodeDisplayLanguage } from \"./CodeDisplay\";\nimport { highlightCodeDisplayLines } from \"./code-highlight\";\n\nexport type DocCodeHighlighter = (code: string) => string;\n\nexport type DocCodeProps = {\n code: string;\n title?: string;\n language?: CodeDisplayLanguage;\n highlight?: DocCodeHighlighter;\n format?: (code: string) => string;\n copy?: boolean;\n copyText?: string;\n lineNumbers?: boolean;\n class?: string;\n};\n\nexport type DocNoteVariant = \"info\" | \"tip\" | \"warning\";\n\nexport type DocRow = {\n title: string;\n icon?: string;\n text: JSX.Element;\n};\n\nexport type DocConcept = {\n title: string;\n icon: string;\n text: JSX.Element;\n};\n\nexport const DocPage = (props: { children: JSX.Element; class?: string }) => (\n <div class={`k2b-content-docs ${props.class ?? \"\"}`}>{props.children}</div>\n);\n\nexport const DocLead = (props: { children: JSX.Element }) => <p class=\"k2b-content-doc-lead\">{props.children}</p>;\n\nexport const DocSection = (props: { title: string; eyebrow?: string; children: JSX.Element }) => (\n <section class=\"k2b-content-doc-section\">\n <div>\n <Show when={props.eyebrow}>{(eyebrow) => <p class=\"k2b-content-doc-eyebrow\">{eyebrow()}</p>}</Show>\n <h2 class=\"k2b-content-doc-title\">{props.title}</h2>\n </div>\n {props.children}\n </section>\n);\n\nexport const DocInlineCode = (props: { children: JSX.Element }) => <code class=\"k2b-content-doc-inline-code\">{props.children}</code>;\n\nexport const DocCode = (props: DocCodeProps) => {\n const messages = useUiMessages();\n const code = () => props.format?.(props.code) ?? props.code;\n const lineNumbers = () => props.lineNumbers ?? false;\n const hasHeader = () => Boolean(props.title || props.copy);\n const lines = () => {\n const formatted = code();\n if (props.highlight) return formatted.split(\"\\n\").map((line) => props.highlight?.(line || \" \") ?? \"\");\n return highlightCodeDisplayLines(formatted, props.language ?? \"text\");\n };\n\n return (\n <div class={`k2b-content-doc-code ${props.class ?? \"\"}`}>\n <Show when={hasHeader()}>\n <div class=\"k2b-content-doc-code__header\">\n <Show when={props.title}>{(title) => <p class=\"k2b-content-doc-code__title\">{title()}</p>}</Show>\n <Show when={props.copy}>\n <CopyButton text={props.copyText ?? code()} />\n </Show>\n </div>\n </Show>\n <div\n class=\"k2b-content-doc-code__body\"\n data-header={hasHeader() ? \"true\" : undefined}\n tabIndex={0}\n role=\"region\"\n aria-label={props.title ? messages().codeLabel({ title: props.title }) : messages().code}\n >\n <div class=\"k2b-content-doc-code__lines\">\n <For each={lines()}>\n {(line, index) => (\n <div class=\"k2b-content-doc-code__line\" data-numbered={lineNumbers() ? \"true\" : undefined}>\n <Show when={lineNumbers()}>\n <span class=\"k2b-content-doc-code__number\">{index() + 1}</span>\n </Show>\n <code innerHTML={line || \" \"} />\n </div>\n )}\n </For>\n </div>\n </div>\n </div>\n );\n};\n\nexport const DocConceptGrid = (props: { items: DocConcept[] }) => (\n <div class=\"k2b-content-doc-concepts\">\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-content-doc-concept\">\n <i class={`ti ${item.icon} k2b-content-doc-icon`} aria-hidden=\"true\" />\n <div>\n <p class=\"k2b-content-doc-item-title\">{item.title}</p>\n <p class=\"k2b-content-doc-item-text\">{item.text}</p>\n </div>\n </div>\n )}\n </For>\n </div>\n);\n\nexport const DocRows = (props: { items: DocRow[] }) => (\n <div class=\"k2b-content-doc-rows\">\n <For each={props.items}>\n {(item) => (\n <article class=\"k2b-content-doc-row\">\n <Show when={item.icon} fallback={<span aria-hidden=\"true\" />}>\n {(icon) => <i class={`ti ${icon()} k2b-content-doc-icon`} aria-hidden=\"true\" />}\n </Show>\n <p class=\"k2b-content-doc-item-title\">{item.title}</p>\n <div class=\"k2b-content-doc-item-text\">{item.text}</div>\n </article>\n )}\n </For>\n </div>\n);\n\nexport const DocNote = (props: { title: string; variant?: DocNoteVariant; children: JSX.Element }) => {\n const variant = () => props.variant ?? \"info\";\n return (\n <aside class=\"k2b-content-doc-note\" data-variant={variant()}>\n <p class=\"k2b-content-doc-note__title\">{props.title}</p>\n <div class=\"k2b-content-doc-note__body\">{props.children}</div>\n </aside>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,GAAG,EAAYC,IAAI,QAAQ,UAAU;AAC9C,OAAOC,UAAU,MAAM,uBAAuB;AAC9C,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,SAASC,yBAAyB,QAAQ,kBAAkB;AA8B5D,OAAO,MAAMC,OAAO,GAAIC,KAAgD;EAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;EAAAC,QAAA,CAAAH,IAAA,QAChBD,KAAK,CAACK,QAAQ;EAAAC,QAAA,OAAAC,WAAA,CAAAN,IAAA,EAAxD,oBAAoBD,KAAK,CAACQ,KAAK,IAAI,EAAE,EAAE;EAAA,OAAAP,IAAA;AAAA,IACpD;AAED,OAAO,MAAMQ,OAAO,GAAIT,KAAgC;EAAA,IAAAU,KAAA,GAAAR,gBAAA,CAAAS,OAAA;EAAAP,QAAA,CAAAM,KAAA,QAAsCV,KAAK,CAACK,QAAQ;EAAA,OAAAK,KAAA;AAAA,IAAK;AAEjH,OAAO,MAAME,UAAU,GAAIZ,KAAiE;EAAA,IAAAa,KAAA,GAAAX,gBAAA,CAAAY,OAAA;IAAAC,KAAA,GAAAF,KAAA,CAAAG,UAAA;IAAAC,KAAA,GAAAF,KAAA,CAAAC,UAAA;IAAA,CAAAE,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAH,KAAA,CAAAI,WAAA;IAAAC,KAAA,GAAAJ,KAAA,CAAAG,WAAA;IAAAE,KAAA,GAAAR,KAAA,CAAAM,WAAA;IAAA,CAAAG,KAAA,EAAAC,KAAA,IAAAL,eAAA,CAAAG,KAAA,CAAAF,WAAA;EAAAjB,QAAA,CAAAW,KAAA,EAAAW,iBAAA,CAGrF/B,IAAI;IAAA,IAACgC,IAAIA,CAAA;MAAA,OAAE3B,KAAK,CAAC4B,OAAO;IAAA;IAAAvB,QAAA,EAAIuB,OAAO;MAAA,IAAAC,KAAA,GAAA3B,gBAAA,CAAA4B,OAAA;MAAA1B,QAAA,CAAAyB,KAAA,EAAyCD,OAAO;MAAA,OAAAC,KAAA;IAAA;EAAO,IAAAX,KAAA,EAAAC,IAAA;EAAAf,QAAA,CAAAkB,KAAA,QACxDtB,KAAK,CAAC+B,KAAK;EAAA3B,QAAA,CAAAS,KAAA,QAE/Cb,KAAK,CAACK,QAAQ,EAAAmB,KAAA,EAAAC,KAAA;EAAA,OAAAZ,KAAA;AAAA,IAElB;AAED,OAAO,MAAMmB,aAAa,GAAIhC,KAAgC;EAAA,IAAAiC,KAAA,GAAA/B,gBAAA,CAAAgC,OAAA;EAAA9B,QAAA,CAAA6B,KAAA,QAAgDjC,KAAK,CAACK,QAAQ;EAAA,OAAA4B,KAAA;AAAA,IAAQ;AAEpI,OAAO,MAAME,OAAO,GAAInC,KAAmB,IAAK;EAC9C,MAAMoC,QAAQ,GAAGvC,aAAa,CAAC,CAAC;EAChC,MAAMwC,IAAI,GAAGA,CAAA,KAAMrC,KAAK,CAACsC,MAAM,GAAGtC,KAAK,CAACqC,IAAI,CAAC,IAAIrC,KAAK,CAACqC,IAAI;EAC3D,MAAME,WAAW,GAAGA,CAAA,KAAMvC,KAAK,CAACuC,WAAW,IAAI,KAAK;EACpD,MAAMC,SAAS,GAAGA,CAAA,KAAMC,OAAO,CAACzC,KAAK,CAAC+B,KAAK,IAAI/B,KAAK,CAAC0C,IAAI,CAAC;EAC1D,MAAMC,KAAK,GAAGA,CAAA,KAAM;IAClB,MAAMC,SAAS,GAAGP,IAAI,CAAC,CAAC;IACxB,IAAIrC,KAAK,CAAC6C,SAAS,EAAE,OAAOD,SAAS,CAACE,KAAK,CAAC,IAAI,CAAC,CAACC,GAAG,CAAEC,IAAI,IAAKhD,KAAK,CAAC6C,SAAS,GAAGG,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;IACrG,OAAOlD,yBAAyB,CAAC8C,SAAS,EAAE5C,KAAK,CAACiD,QAAQ,IAAI,MAAM,CAAC;EACvE,CAAC;EAED;IAAA,IAAAC,MAAA,GAAAhD,gBAAA,CAAAiD,OAAA;MAAAC,MAAA,GAAAF,MAAA,CAAAlC,UAAA;MAAA,CAAAqC,MAAA,EAAAC,KAAA,IAAAlC,eAAA,CAAAgC,MAAA,CAAA/B,WAAA;MAAAkC,MAAA,GAAAF,MAAA,CAAAhC,WAAA;MAAAmC,MAAA,GAAAD,MAAA,CAAAvC,UAAA;IAAAZ,QAAA,CAAA8C,MAAA,EAAAxB,iBAAA,CAEK/B,IAAI;MAAA,IAACgC,IAAIA,CAAA;QAAA,OAAEa,SAAS,CAAC,CAAC;MAAA;MAAA,IAAAnC,SAAA;QAAA,IAAAoD,MAAA,GAAAvD,gBAAA,CAAAwD,OAAA;UAAAC,MAAA,GAAAF,MAAA,CAAAzC,UAAA;UAAA,CAAA4C,MAAA,EAAAC,KAAA,IAAAzC,eAAA,CAAAuC,MAAA,CAAAtC,WAAA;UAAAyC,MAAA,GAAAF,MAAA,CAAAvC,WAAA;UAAA,CAAA0C,MAAA,EAAAC,KAAA,IAAA5C,eAAA,CAAA0C,MAAA,CAAAzC,WAAA;QAAAjB,QAAA,CAAAqD,MAAA,EAAA/B,iBAAA,CAElB/B,IAAI;UAAA,IAACgC,IAAIA,CAAA;YAAA,OAAE3B,KAAK,CAAC+B,KAAK;UAAA;UAAA1B,QAAA,EAAI0B,KAAK;YAAA,IAAAkC,MAAA,GAAA/D,gBAAA,CAAAgE,OAAA;YAAA9D,QAAA,CAAA6D,MAAA,EAA6ClC,KAAK;YAAA,OAAAkC,MAAA;UAAA;QAAO,IAAAL,MAAA,EAAAC,KAAA;QAAAzD,QAAA,CAAAqD,MAAA,EAAA/B,iBAAA,CACxF/B,IAAI;UAAA,IAACgC,IAAIA,CAAA;YAAA,OAAE3B,KAAK,CAAC0C,IAAI;UAAA;UAAA,IAAArC,SAAA;YAAA,OAAAqB,iBAAA,CACnB9B,UAAU;cAAA,IAACuE,IAAIA,CAAA;gBAAA,OAAEnE,KAAK,CAACoE,QAAQ,IAAI/B,IAAI,CAAC,CAAC;cAAA;YAAA;UAAA;QAAA,IAAA0B,MAAA,EAAAC,KAAA;QAAA,OAAAP,MAAA;MAAA;IAAA,IAAAJ,MAAA,EAAAC,KAAA;IAAAlD,QAAA,CAAAoD,MAAA,EAAA9B,iBAAA,CAY3ChC,GAAG;MAAA,IAAC2E,IAAIA,CAAA;QAAA,OAAE1B,KAAK,CAAC,CAAC;MAAA;MAAAtC,QAAA,EACfA,CAAC2C,IAAI,EAAEsB,KAAK;QAAA,IAAAC,MAAA,GAAArE,gBAAA,CAAAsE,OAAA;UAAAC,MAAA,GAAAF,MAAA,CAAAvD,UAAA;UAAA,CAAA0D,MAAA,EAAAC,KAAA,IAAAvD,eAAA,CAAAqD,MAAA,CAAApD,WAAA;UAAAuD,MAAA,GAAAF,MAAA,CAAArD,WAAA;QAAAjB,QAAA,CAAAmE,MAAA,EAAA7C,iBAAA,CAER/B,IAAI;UAAA,IAACgC,IAAIA,CAAA;YAAA,OAAEY,WAAW,CAAC,CAAC;UAAA;UAAA,IAAAlC,SAAA;YAAA,IAAAwE,MAAA,GAAA3E,gBAAA,CAAA4E,OAAA;YAAA1E,QAAA,CAAAyE,MAAA,QACqBP,KAAK,CAAC,CAAC,GAAG,CAAC;YAAA,OAAAO,MAAA;UAAA;QAAA,IAAAH,MAAA,EAAAC,KAAA;QAAAI,aAAA,CAAAH,MAAA,eAExC5B,IAAI,IAAI,GAAG;QAAA1C,QAAA,OAAA0E,cAAA,CAAAT,MAAA,mBAJyBhC,WAAW,CAAC,CAAC,GAAG,MAAM,GAAG0C,SAAS;QAAA,OAAAV,MAAA;MAAA;IAM1F;IAAAjE,QAAA,CAAA4E,GAAA;MAAA,IAAAC,GAAA,GAzBG,wBAAwBnF,KAAK,CAACQ,KAAK,IAAI,EAAE,EAAE;QAAA4E,IAAA,GAWtC5C,SAAS,CAAC,CAAC,GAAG,MAAM,GAAGyC,SAAS;QAAAI,IAAA,GAGjCrF,KAAK,CAAC+B,KAAK,GAAGK,QAAQ,CAAC,CAAC,CAACkD,SAAS,CAAC;UAAEvD,KAAK,EAAE/B,KAAK,CAAC+B;QAAM,CAAC,CAAC,GAAGK,QAAQ,CAAC,CAAC,CAACC,IAAI;MAAA8C,GAAA,KAAAD,GAAA,CAAAK,CAAA,IAAAhF,WAAA,CAAA2C,MAAA,EAAAgC,GAAA,CAAAK,CAAA,GAAAJ,GAAA;MAAAC,IAAA,KAAAF,GAAA,CAAAM,CAAA,IAAAR,cAAA,CAAAzB,MAAA,iBAAA2B,GAAA,CAAAM,CAAA,GAAAJ,IAAA;MAAAC,IAAA,KAAAH,GAAA,CAAAO,CAAA,IAAAT,cAAA,CAAAzB,MAAA,gBAAA2B,GAAA,CAAAO,CAAA,GAAAJ,IAAA;MAAA,OAAAH,GAAA;IAAA;MAAAK,CAAA,EAAAN,SAAA;MAAAO,CAAA,EAAAP,SAAA;MAAAQ,CAAA,EAAAR;IAAA;IAAA,OAAA/B,MAAA;EAAA;AAiBhG,CAAC;AAED,OAAO,MAAMwC,cAAc,GAAI1F,KAA8B;EAAA,IAAA2F,MAAA,GAAAzF,gBAAA,CAAA0F,OAAA;EAAAxF,QAAA,CAAAuF,MAAA,EAAAjE,iBAAA,CAExDhC,GAAG;IAAA,IAAC2E,IAAIA,CAAA;MAAA,OAAErE,KAAK,CAAC6F,KAAK;IAAA;IAAAxF,QAAA,EAClByF,IAAI;MAAA,IAAAC,MAAA,GAAA7F,gBAAA,CAAA8F,QAAA;QAAAC,MAAA,GAAAF,MAAA,CAAA/E,UAAA;QAAAkF,MAAA,GAAAD,MAAA,CAAA5E,WAAA;QAAA8E,MAAA,GAAAD,MAAA,CAAAlF,UAAA;QAAAoF,MAAA,GAAAD,MAAA,CAAA9E,WAAA;MAAAjB,QAAA,CAAA+F,MAAA,QAIuCL,IAAI,CAAC/D,KAAK;MAAA3B,QAAA,CAAAgG,MAAA,QACXN,IAAI,CAAC3B,IAAI;MAAA7D,QAAA,OAAAC,WAAA,CAAA0F,MAAA,EAHvC,MAAMH,IAAI,CAACO,IAAI,uBAAuB;MAAA,OAAAN,MAAA;IAAA;EAMnD;EAAA,OAAAJ,MAAA;AAAA,IAGN;AAED,OAAO,MAAMW,OAAO,GAAItG,KAA0B;EAAA,IAAAuG,MAAA,GAAArG,gBAAA,CAAAsG,QAAA;EAAApG,QAAA,CAAAmG,MAAA,EAAA7E,iBAAA,CAE7ChC,GAAG;IAAA,IAAC2E,IAAIA,CAAA;MAAA,OAAErE,KAAK,CAAC6F,KAAK;IAAA;IAAAxF,QAAA,EAClByF,IAAI;MAAA,IAAAW,MAAA,GAAAvG,gBAAA,CAAAwG,QAAA;QAAAC,MAAA,GAAAF,MAAA,CAAAzF,UAAA;QAAA,CAAA4F,MAAA,EAAAC,KAAA,IAAAzF,eAAA,CAAAuF,MAAA,CAAAtF,WAAA;QAAAyF,MAAA,GAAAF,MAAA,CAAAvF,WAAA;QAAA0F,MAAA,GAAAD,MAAA,CAAAzF,WAAA;MAAAjB,QAAA,CAAAqG,MAAA,EAAA/E,iBAAA,CAED/B,IAAI;QAAA,IAACgC,IAAIA,CAAA;UAAA,OAAEmE,IAAI,CAACO,IAAI;QAAA;QAAA,IAAEW,QAAQA,CAAA;UAAA,OAAA9G,gBAAA,CAAA+G,QAAA;QAAA;QAAA5G,QAAA,EAC3BgG,IAAI;UAAA,IAAAa,MAAA,GAAAhH,gBAAA,CAAAiH,QAAA;UAAA7G,QAAA,OAAAC,WAAA,CAAA2G,MAAA,EAAe,MAAMb,IAAI,CAAC,CAAC,uBAAuB;UAAA,OAAAa,MAAA;QAAA;MAAuB,IAAAN,MAAA,EAAAC,KAAA;MAAAzG,QAAA,CAAA0G,MAAA,QAE1ChB,IAAI,CAAC/D,KAAK;MAAA3B,QAAA,CAAA2G,MAAA,QACTjB,IAAI,CAAC3B,IAAI;MAAA,OAAAsC,MAAA;IAAA;EAEpD;EAAA,OAAAF,MAAA;AAAA,IAGN;AAED,OAAO,MAAMa,OAAO,GAAIpH,KAAyE,IAAK;EACpG,MAAMqH,OAAO,GAAGA,CAAA,KAAMrH,KAAK,CAACqH,OAAO,IAAI,MAAM;EAC7C;IAAA,IAAAC,MAAA,GAAApH,gBAAA,CAAAqH,QAAA;MAAAC,MAAA,GAAAF,MAAA,CAAAtG,UAAA;MAAAyG,MAAA,GAAAD,MAAA,CAAAnG,WAAA;IAAAjB,QAAA,CAAAoH,MAAA,QAE4CxH,KAAK,CAAC+B,KAAK;IAAA3B,QAAA,CAAAqH,MAAA,QACVzH,KAAK,CAACK,QAAQ;IAAAC,QAAA,OAAA0E,cAAA,CAAAsC,MAAA,kBAFPD,OAAO,CAAC,CAAC;IAAA,OAAAC,MAAA;EAAA;AAK/D,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/Docs.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport CopyButton from \"../actions/CopyButton\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { CodeDisplayLanguage } from \"./CodeDisplay\";\nimport { highlightCodeDisplayLines } from \"./code-highlight\";\n\nexport type DocCodeHighlighter = (code: string) => string;\n\nexport type DocCodeProps = {\n code: string;\n title?: string;\n language?: CodeDisplayLanguage;\n highlight?: DocCodeHighlighter;\n format?: (code: string) => string;\n copy?: boolean;\n copyText?: string;\n lineNumbers?: boolean;\n class?: string;\n};\n\nexport type DocNoteVariant = \"info\" | \"tip\" | \"warning\";\n\nexport type DocRow = {\n title: string;\n icon?: string;\n text: JSX.Element;\n};\n\nexport type DocConcept = {\n title: string;\n icon: string;\n text: JSX.Element;\n};\n\nexport const DocPage = (props: { children: JSX.Element; class?: string }) => (\n <div class={`k2b-content-docs ${props.class ?? \"\"}`}>{props.children}</div>\n);\n\nexport const DocLead = (props: { children: JSX.Element }) => <p class=\"k2b-content-doc-lead\">{props.children}</p>;\n\nexport const DocSection = (props: { title: string; eyebrow?: string; children: JSX.Element }) => (\n <section class=\"k2b-content-doc-section\">\n <div>\n <Show when={props.eyebrow}>{(eyebrow) => <p class=\"k2b-content-doc-eyebrow\">{eyebrow()}</p>}</Show>\n <h2 class=\"k2b-content-doc-title\">{props.title}</h2>\n </div>\n {props.children}\n </section>\n);\n\nexport const DocInlineCode = (props: { children: JSX.Element }) => <code class=\"k2b-content-doc-inline-code\">{props.children}</code>;\n\nexport const DocCode = (props: DocCodeProps) => {\n const messages = useUiMessages();\n const code = () => props.format?.(props.code) ?? props.code;\n const lineNumbers = () => props.lineNumbers ?? false;\n const hasHeader = () => Boolean(props.title || props.copy);\n const lines = () => {\n const formatted = code();\n if (props.highlight) return formatted.split(\"\\n\").map((line) => props.highlight?.(line || \" \") ?? \"\");\n return highlightCodeDisplayLines(formatted, props.language ?? \"text\");\n };\n\n return (\n <div class={`k2b-content-doc-code ${props.class ?? \"\"}`}>\n <Show when={hasHeader()}>\n <div class=\"k2b-content-doc-code__header\">\n <Show when={props.title}>{(title) => <p class=\"k2b-content-doc-code__title\">{title()}</p>}</Show>\n <Show when={props.copy}>\n <CopyButton text={props.copyText ?? code()} />\n </Show>\n </div>\n </Show>\n <div\n class=\"k2b-content-doc-code__body\"\n data-header={hasHeader() ? \"true\" : undefined}\n tabIndex={0}\n role=\"region\"\n aria-label={props.title ? messages().codeLabel({ title: props.title }) : messages().code}\n >\n <div class=\"k2b-content-doc-code__lines\">\n <For each={lines()}>\n {(line, index) => (\n <div class=\"k2b-content-doc-code__line\" data-numbered={lineNumbers() ? \"true\" : undefined}>\n <Show when={lineNumbers()}>\n <span class=\"k2b-content-doc-code__number\">{index() + 1}</span>\n </Show>\n <code innerHTML={line || \" \"} />\n </div>\n )}\n </For>\n </div>\n </div>\n </div>\n );\n};\n\nexport const DocConceptGrid = (props: { items: DocConcept[] }) => (\n <div class=\"k2b-content-doc-concepts\">\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-content-doc-concept\">\n <i class={`ti ${item.icon} k2b-content-doc-icon`} aria-hidden=\"true\" />\n <div>\n <p class=\"k2b-content-doc-item-title\">{item.title}</p>\n <p class=\"k2b-content-doc-item-text\">{item.text}</p>\n </div>\n </div>\n )}\n </For>\n </div>\n);\n\nexport const DocRows = (props: { items: DocRow[] }) => (\n <div class=\"k2b-content-doc-rows\">\n <For each={props.items}>\n {(item) => (\n <article class=\"k2b-content-doc-row\">\n <Show when={item.icon} fallback={<span aria-hidden=\"true\" />}>\n {(icon) => <i class={`ti ${icon()} k2b-content-doc-icon`} aria-hidden=\"true\" />}\n </Show>\n <p class=\"k2b-content-doc-item-title\">{item.title}</p>\n <div class=\"k2b-content-doc-item-text\">{item.text}</div>\n </article>\n )}\n </For>\n </div>\n);\n\nexport const DocNote = (props: { title: string; variant?: DocNoteVariant; children: JSX.Element }) => {\n const variant = () => props.variant ?? \"info\";\n return (\n <aside class=\"k2b-content-doc-note\" data-variant={variant()}>\n <p class=\"k2b-content-doc-note__title\">{props.title}</p>\n <div class=\"k2b-content-doc-note__body\">{props.children}</div>\n </aside>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createZip","downloadFileFromContent","mutation","createEffect","createMemo","createResource","createSignal","Match","onCleanup","Show","Switch","untrack","Dropdown","dialogCore","prompts","resolveUiMessages","useUiMessages","PanelDialog","panelDialogOptions","Placeholder","FileTree","FileView","parentOf","path","index","lastIndexOf","slice","FileBrowserPanel","props","messages","entries","refetch","source","list","selectedPath","setSelectedPath","initialPath","selectedDirty","setSelectedDirty","pendingFolders","setPendingFolders","uploadInputRef","uploadDir","previousRefreshKey","refreshKey","refreshPreview","undefined","registerRefresh","unregister","Promise","all","next","onSelectedPathChange","Object","is","allEntries","loaded","real","Set","map","entry","filter","has","kind","selectedEntry","find","fileMutation","create","work","onSuccess","onError","error","message","pathMutable","loading","readOnly","isReadOnly","pathWritable","Boolean","write","run","mutate","canLeaveCurrent","nextPath","current","confirmed","confirmDiscard","confirm","discardUnsavedFile","title","discardChanges","variant","selectPath","removeFile","remove","folders","candidate","startsWith","selected","renameFile","nextName","target","rename","createFile","dirPath","name","prompt","newFileName","newFile","trim","includes","createFolder","newFolderName","newFolder","pickUpload","click","onUploadPicked","input","files","Array","from","value","length","upload","baseName","filesBehind","some","prefix","moveEntry","targetDir","destBase","file","contentBytes","content","read","encoding","TextEncoder","encode","Uint8Array","atob","char","charCodeAt","downloadEntry","isFolder","href","downloadHref","anchor","document","createElement","download","mediaType","Error","folderEmpty","zipEntries","filename","downloadFailed","treeActions","dir","move","addMenuItems","icon","label","action","uploadFiles","_el$","_$getNextElement","_tmpl$3","_el$2","firstChild","_el$3","_el$4","_el$7","nextSibling","_el$8","_co$","_$getNextMarker","_el$0","_el$1","_co$2","_el$9","_el$10","_el$11","_co$3","_$insert","_$createComponent","when","children","Root","position","items","addFileFolderUpload","Trigger","appearance","add","_tmpl$","_el$6","_tmpl$2","_$memo","loadingFiles","failedLoadFiles","description","String","onSelect","actions","noFiles","spaceEmpty","addEventListener","event","currentTarget","_ref$","_$use","fallback","selectFile","pickFileFromTree","folderSelected","chooseFileToPreview","previewPreferencesKey","size","load","revision","refresh","renderers","onDirtyChange","save","_$effect","_p$","_v$","class","_v$2","e","_$className","t","_$setAttribute","openFileBrowser","options","open","close","Header","subtitle","Body"],"sources":["content/FileBrowser.tsx"],"sourcesContent":["/**\n * FileBrowser — FileTree + FileView over a FileSource adapter. One dialog\n * serves every file surface (conversation VFS, skills, later the Files app):\n * the source decides the capabilities, optional methods enable the matching\n * UI (write → edit/save, remove → delete, rename → rename, upload → upload).\n * Fixed-height IDE-style layout: both panes scroll, the shell never jumps.\n */\nimport { createZip, downloadFileFromContent } from \"@k2b/stdlib/browser\";\nimport { mutation } from \"@k2b/stdlib/solid\";\nimport { createEffect, createMemo, createResource, createSignal, Match, onCleanup, Show, Switch, untrack } from \"solid-js\";\nimport Dropdown from \"../actions/Dropdown\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { prompts } from \"../feedback/prompts\";\nimport { resolveUiMessages, useUiMessages } from \"../intl/messages\";\nimport PanelDialog, { panelDialogOptions } from \"../layout/PanelDialog\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport FileTree, { type FileTreeEntry } from \"./FileTree\";\nimport FileView, { type FileViewContent, type FileViewRenderer } from \"./FileView\";\n\nexport type FileSource = {\n previewPreferencesKey?: string;\n list(): Promise<FileTreeEntry[]>;\n read(path: string): Promise<FileViewContent>;\n write?(path: string, content: string, encoding?: \"utf8\" | \"base64\"): Promise<void>;\n remove?(path: string): Promise<void>;\n rename?(from: string, to: string): Promise<void>;\n upload?(dirPath: string, files: File[]): Promise<void>;\n downloadHref?(path: string): string | null;\n /** Paths matching this predicate stay read-only even when the source can write (e.g. /input). */\n isReadOnly?(path: string): boolean;\n};\n\nexport type FileBrowserPanelProps = {\n source: FileSource;\n /** Hide every mutating affordance while retaining file selection and downloads. */\n readOnly?: boolean;\n /** Refetch entries when this host-controlled value changes. */\n refreshKey?: unknown;\n /** Preselect a file once entries are loaded. */\n initialPath?: string;\n /** Mirrors file selection into route state when the host needs durable navigation. */\n onSelectedPathChange?: (path: string | null) => void;\n /** Per-instance preview extensions forwarded to FileView. */\n renderers?: readonly FileViewRenderer[];\n /** Optional host copy/policy for leaving an unsaved file. */\n confirmDiscard?: (path: string, nextPath: string | null) => boolean | Promise<boolean>;\n /** Fixed shell height — the panes scroll inside it. */\n class?: string;\n /** Optional imperative refresh used by realtime owners that must await the visible update. */\n registerRefresh?: (refresh: () => Promise<void>) => void | (() => void);\n};\n\nconst parentOf = (path: string): string => {\n const index = path.lastIndexOf(\"/\");\n return index <= 0 ? \"/\" : path.slice(0, index);\n};\n\nexport function FileBrowserPanel(props: FileBrowserPanelProps) {\n const messages = useUiMessages();\n // FileSource is an imperative adapter. Its methods may read host signals,\n // but refreshes stay owned by this component (`refetch` / `refreshKey`);\n // tracking those implementation details can otherwise feed a write back\n // into its own list request indefinitely.\n const [entries, { refetch }] = createResource(async () => untrack(() => props.source.list()));\n const [selectedPath, setSelectedPath] = createSignal<string | null>(props.initialPath ?? null);\n const [selectedDirty, setSelectedDirty] = createSignal(false);\n // Folders exist implicitly through file paths — freshly created (still empty)\n // ones live here until their first file makes them real.\n const [pendingFolders, setPendingFolders] = createSignal<string[]>([]);\n let uploadInputRef: HTMLInputElement | undefined;\n let uploadDir = \"/\";\n let previousRefreshKey = props.refreshKey;\n let refreshPreview = async (): Promise<void> => undefined;\n\n createEffect(() => {\n if (!props.registerRefresh) return;\n const unregister = props.registerRefresh(async () => {\n await Promise.all([refetch(), refreshPreview()]);\n });\n if (unregister) onCleanup(unregister);\n });\n\n createEffect(() => {\n const next = props.initialPath ?? null;\n if (!selectedDirty() && next !== selectedPath()) setSelectedPath(next);\n });\n createEffect(() => props.onSelectedPathChange?.(selectedPath()));\n createEffect(() => {\n const refreshKey = props.refreshKey;\n if (Object.is(refreshKey, previousRefreshKey)) return;\n previousRefreshKey = refreshKey;\n void refetch();\n });\n\n const allEntries = createMemo<FileTreeEntry[]>(() => {\n const loaded = entries() ?? [];\n const real = new Set(loaded.map((entry) => entry.path));\n return [\n ...loaded,\n ...pendingFolders()\n .filter((path) => !real.has(path))\n .map((path) => ({ path, kind: \"folder\" as const })),\n ];\n });\n const selectedEntry = createMemo(() => allEntries().find((entry) => entry.path === selectedPath()) ?? null);\n const fileMutation = mutation.create<void, () => Promise<void>>({\n mutation: (work) => work(),\n onSuccess: () => void refetch(),\n onError: (error) => void prompts.error(error.message),\n });\n const pathMutable = (path: string) => !fileMutation.loading() && !props.readOnly && !props.source.isReadOnly?.(path);\n const pathWritable = (path: string) => pathMutable(path) && Boolean(props.source.write);\n const run = (work: () => Promise<void>) => void fileMutation.mutate(work);\n const canLeaveCurrent = async (nextPath: string | null): Promise<boolean> => {\n const current = selectedPath();\n if (nextPath === current || !selectedDirty() || !current) return true;\n if (selectedDirty() && current) {\n const confirmed = props.confirmDiscard\n ? await props.confirmDiscard(current, nextPath)\n : await prompts.confirm(messages().discardUnsavedFile, {\n title: messages().discardChanges,\n variant: \"danger\",\n });\n if (!confirmed) return false;\n }\n return true;\n };\n const selectPath = async (nextPath: string | null) => {\n if (!(await canLeaveCurrent(nextPath))) return;\n setSelectedDirty(false);\n setSelectedPath(nextPath);\n };\n\n const removeFile = (path: string) =>\n run(async () => {\n const confirmed = await prompts.confirm(`Delete ${path}?`, { title: \"Delete file\", variant: \"danger\" });\n if (!confirmed) return;\n await props.source.remove!(path);\n setPendingFolders((folders) => folders.filter((candidate) => candidate !== path && !candidate.startsWith(`${path}/`)));\n const selected = selectedPath();\n if (selected === path || selected?.startsWith(`${path}/`)) setSelectedPath(null);\n });\n\n const renameFile = (path: string, nextName: string) =>\n run(async () => {\n const target = `${parentOf(path) === \"/\" ? \"\" : parentOf(path)}/${nextName}`;\n await props.source.rename!(path, target);\n if (selectedPath() === path) setSelectedPath(target);\n });\n\n const createFile = (dirPath: string) =>\n run(async () => {\n const name = await prompts.prompt(messages().newFileName, \"\", { title: messages().newFile });\n if (!name || typeof name !== \"string\" || !name.trim() || name.includes(\"/\")) return;\n const path = `${dirPath === \"/\" ? \"\" : dirPath}/${name.trim()}`;\n if (!(await canLeaveCurrent(path))) return;\n await props.source.write!(path, \"\");\n setSelectedDirty(false);\n setSelectedPath(path);\n });\n\n const createFolder = (dirPath: string) =>\n void (async () => {\n const name = await prompts.prompt(messages().newFolderName, \"\", { title: messages().newFolder });\n if (!name || typeof name !== \"string\" || !name.trim() || name.includes(\"/\")) return;\n const path = `${dirPath === \"/\" ? \"\" : dirPath}/${name.trim()}`;\n setPendingFolders((folders) => [...folders, path]);\n })();\n\n const pickUpload = (dirPath: string) => {\n uploadDir = dirPath;\n uploadInputRef?.click();\n };\n\n const onUploadPicked = (input: HTMLInputElement) => {\n const files = Array.from(input.files ?? []);\n input.value = \"\";\n if (files.length > 0) run(() => props.source.upload!(uploadDir, files));\n };\n\n const baseName = (path: string) => path.slice(path.lastIndexOf(\"/\") + 1);\n\n /** Concrete file paths behind an entry: the file itself, or everything under a folder. */\n const filesBehind = (path: string): string[] => {\n const list = entries() ?? [];\n if (list.some((entry) => entry.path === path && entry.kind !== \"folder\")) return [path];\n const prefix = `${path}/`;\n return list.filter((entry) => entry.path.startsWith(prefix) && entry.kind !== \"folder\").map((entry) => entry.path);\n };\n\n /** Move a file OR a whole folder subtree (per-file renames preserve the structure). */\n const moveEntry = (path: string, targetDir: string) =>\n run(async () => {\n const destBase = `${targetDir === \"/\" ? \"\" : targetDir}/${baseName(path)}`;\n const files = filesBehind(path);\n if (files.length === 0) {\n // Still-empty pending folder — relocating it is a purely local affair.\n setPendingFolders((folders) => folders.map((candidate) => (candidate === path ? destBase : candidate)));\n return;\n }\n for (const file of files) {\n await props.source.rename!(file, `${destBase}${file.slice(path.length)}`);\n }\n const selected = selectedPath();\n if (selected && (selected === path || selected.startsWith(`${path}/`))) {\n setSelectedPath(`${destBase}${selected.slice(path.length)}`);\n }\n });\n\n const contentBytes = async (path: string): Promise<Uint8Array> => {\n const content = await props.source.read(path);\n return content.encoding === \"utf8\"\n ? new TextEncoder().encode(content.content)\n : Uint8Array.from(atob(content.content), (char) => char.charCodeAt(0));\n };\n\n const downloadEntry = (path: string, isFolder: boolean) =>\n void (async () => {\n try {\n if (!isFolder) {\n const href = props.source.downloadHref?.(path);\n if (href) {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n anchor.download = baseName(path);\n anchor.click();\n return;\n }\n const content = await props.source.read(path);\n downloadFileFromContent(await contentBytes(path), baseName(path), content.mediaType || \"application/octet-stream\");\n return;\n }\n const files = filesBehind(path);\n if (files.length === 0) throw new Error(messages().folderEmpty);\n const zipEntries = await Promise.all(\n files.map(async (file) => ({ filename: file.slice(path.length + 1), source: await contentBytes(file) })),\n );\n downloadFileFromContent(await createZip(zipEntries), `${baseName(path) || \"files\"}.zip`, \"application/zip\");\n } catch (error) {\n void prompts.error(error instanceof Error ? error.message : messages().downloadFailed);\n }\n })();\n\n const treeActions = () => ({\n ...(!props.readOnly && props.source.rename\n ? { rename: (path: string, next: string) => (pathMutable(path) ? renameFile(path, next) : undefined) }\n : {}),\n ...(!props.readOnly && props.source.remove ? { remove: (path: string) => (pathMutable(path) ? removeFile(path) : undefined) } : {}),\n ...(!props.readOnly && props.source.write ? { createFile: (dir: string) => (pathWritable(dir) ? createFile(dir) : undefined) } : {}),\n ...(!props.readOnly && props.source.write\n ? { createFolder: (dir: string) => (pathWritable(dir) ? createFolder(dir) : undefined) }\n : {}),\n ...(!props.readOnly && props.source.rename\n ? { move: (path: string, dir: string) => (pathMutable(path) && pathMutable(dir) ? moveEntry(path, dir) : undefined) }\n : {}),\n download: (path: string, isFolder: boolean) => downloadEntry(path, isFolder),\n });\n\n const addMenuItems = () => [\n ...(pathWritable(\"/\") ? [{ icon: \"ti ti-file-plus\", label: messages().newFile, action: () => createFile(\"/\") }] : []),\n ...(pathWritable(\"/\") ? [{ icon: \"ti ti-folder-plus\", label: messages().newFolder, action: () => createFolder(\"/\") }] : []),\n ...(pathMutable(\"/\") && props.source.upload\n ? [{ icon: \"ti ti-upload\", label: messages().uploadFiles, action: () => pickUpload(\"/\") }]\n : []),\n ];\n\n return (\n <div class={`k2b-content-file-browser ${props.class ?? \"\"}`} data-default-height={props.class ? undefined : \"true\"}>\n <div class=\"k2b-content-file-browser__sidebar\">\n <div class=\"k2b-content-file-browser__header\">\n <p class=\"k2b-content-file-browser__title\">{messages().files}</p>\n <Show when={addMenuItems().length > 0}>\n <Dropdown.Root position=\"bottom-left\" items={addMenuItems()} label={messages().addFileFolderUpload}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-content-file-browser__add\"\n label={messages().addFileFolderUpload}\n title={messages().add}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{messages().addFileFolderUpload}</span>\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n </div>\n <Switch>\n <Match when={entries.loading && entries() === undefined}>\n <Placeholder icon=\"ti ti-loader-2\" title={messages().loadingFiles} />\n </Match>\n <Match when={entries.error}>\n <Placeholder\n icon=\"ti ti-alert-circle\"\n title={messages().failedLoadFiles}\n description={String(entries.error?.message ?? entries.error ?? \"\")}\n />\n </Match>\n <Match when={allEntries().length > 0}>\n <FileTree\n class=\"k2b-content-file-browser__tree\"\n entries={allEntries()}\n selectedPath={selectedPath()}\n onSelect={(entry) => void selectPath(entry.path)}\n actions={treeActions()}\n />\n </Match>\n <Match when={true}>\n <Placeholder icon=\"ti ti-folder-open\" title={messages().noFiles} description={messages().spaceEmpty} />\n </Match>\n </Switch>\n <input\n ref={uploadInputRef}\n type=\"file\"\n multiple\n class=\"k2b-content-file-browser__upload\"\n onChange={(event) => onUploadPicked(event.currentTarget)}\n />\n </div>\n\n <Switch fallback={<Placeholder icon=\"ti ti-file\" title={messages().selectFile} description={messages().pickFileFromTree} />}>\n <Match when={selectedEntry()?.kind === \"folder\"}>\n <Placeholder icon=\"ti ti-folder\" title={messages().folderSelected} description={messages().chooseFileToPreview} />\n </Match>\n <Match when={selectedEntry()}>\n {(entry) => (\n <FileView\n previewPreferencesKey={props.source.previewPreferencesKey}\n file={{ path: entry().path, mediaType: entry().mediaType, size: entry().size }}\n load={() => props.source.read(entry().path)}\n revision={props.refreshKey}\n registerRefresh={(refresh) => {\n refreshPreview = refresh;\n return () => {\n refreshPreview = async () => undefined;\n };\n }}\n renderers={props.renderers}\n onDirtyChange={setSelectedDirty}\n save={\n pathWritable(entry().path)\n ? async (content) => {\n await props.source.write!(entry().path, content);\n await refetch();\n }\n : undefined\n }\n downloadHref={props.source.downloadHref?.(entry().path) ?? null}\n />\n )}\n </Match>\n </Switch>\n </div>\n );\n}\n\n/** Open the file browser as a dialog. Returns when the dialog closes. */\nexport const openFileBrowser = (options: { source: FileSource; title?: string; subtitle?: string; icon?: string }): Promise<void> => {\n const messages = resolveUiMessages();\n return dialogCore.open<void>(\n (close) => (\n <PanelDialog>\n <PanelDialog.Header\n title={options.title ?? messages.files}\n subtitle={options.subtitle}\n icon={options.icon ?? \"ti ti-folder\"}\n close={() => close()}\n />\n <PanelDialog.Body>\n <FileBrowserPanel source={options.source} />\n </PanelDialog.Body>\n </PanelDialog>\n ),\n panelDialogOptions,\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/FileBrowser.tsx"],"sourcesContent":["/**\n * FileBrowser — FileTree + FileView over a FileSource adapter. One dialog\n * serves every file surface (conversation VFS, skills, later the Files app):\n * the source decides the capabilities, optional methods enable the matching\n * UI (write → edit/save, remove → delete, rename → rename, upload → upload).\n * Fixed-height IDE-style layout: both panes scroll, the shell never jumps.\n */\nimport { createZip, downloadFileFromContent } from \"@k2b/stdlib/browser\";\nimport { mutation } from \"@k2b/stdlib/solid\";\nimport { createEffect, createMemo, createResource, createSignal, Match, onCleanup, Show, Switch, untrack } from \"solid-js\";\nimport Dropdown from \"../actions/Dropdown\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { prompts } from \"../feedback/prompts\";\nimport { resolveUiMessages, useUiMessages } from \"../intl/messages\";\nimport PanelDialog, { panelDialogOptions } from \"../layout/PanelDialog\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport FileTree, { type FileTreeEntry } from \"./FileTree\";\nimport FileView, { type FileViewContent, type FileViewRenderer } from \"./FileView\";\n\nexport type FileSource = {\n previewPreferencesKey?: string;\n list(): Promise<FileTreeEntry[]>;\n read(path: string): Promise<FileViewContent>;\n write?(path: string, content: string, encoding?: \"utf8\" | \"base64\"): Promise<void>;\n remove?(path: string): Promise<void>;\n rename?(from: string, to: string): Promise<void>;\n upload?(dirPath: string, files: File[]): Promise<void>;\n downloadHref?(path: string): string | null;\n /** Paths matching this predicate stay read-only even when the source can write (e.g. /input). */\n isReadOnly?(path: string): boolean;\n};\n\nexport type FileBrowserPanelProps = {\n source: FileSource;\n /** Hide every mutating affordance while retaining file selection and downloads. */\n readOnly?: boolean;\n /** Refetch entries when this host-controlled value changes. */\n refreshKey?: unknown;\n /** Preselect a file once entries are loaded. */\n initialPath?: string;\n /** Mirrors file selection into route state when the host needs durable navigation. */\n onSelectedPathChange?: (path: string | null) => void;\n /** Per-instance preview extensions forwarded to FileView. */\n renderers?: readonly FileViewRenderer[];\n /** Optional host copy/policy for leaving an unsaved file. */\n confirmDiscard?: (path: string, nextPath: string | null) => boolean | Promise<boolean>;\n /** Fixed shell height — the panes scroll inside it. */\n class?: string;\n /** Optional imperative refresh used by realtime owners that must await the visible update. */\n registerRefresh?: (refresh: () => Promise<void>) => void | (() => void);\n};\n\nconst parentOf = (path: string): string => {\n const index = path.lastIndexOf(\"/\");\n return index <= 0 ? \"/\" : path.slice(0, index);\n};\n\nexport function FileBrowserPanel(props: FileBrowserPanelProps) {\n const messages = useUiMessages();\n // FileSource is an imperative adapter. Its methods may read host signals,\n // but refreshes stay owned by this component (`refetch` / `refreshKey`);\n // tracking those implementation details can otherwise feed a write back\n // into its own list request indefinitely.\n const [entries, { refetch }] = createResource(async () => untrack(() => props.source.list()));\n const [selectedPath, setSelectedPath] = createSignal<string | null>(props.initialPath ?? null);\n const [selectedDirty, setSelectedDirty] = createSignal(false);\n // Folders exist implicitly through file paths — freshly created (still empty)\n // ones live here until their first file makes them real.\n const [pendingFolders, setPendingFolders] = createSignal<string[]>([]);\n let uploadInputRef: HTMLInputElement | undefined;\n let uploadDir = \"/\";\n let previousRefreshKey = props.refreshKey;\n let refreshPreview = async (): Promise<void> => undefined;\n\n createEffect(() => {\n if (!props.registerRefresh) return;\n const unregister = props.registerRefresh(async () => {\n await Promise.all([refetch(), refreshPreview()]);\n });\n if (unregister) onCleanup(unregister);\n });\n\n createEffect(() => {\n const next = props.initialPath ?? null;\n if (!selectedDirty() && next !== selectedPath()) setSelectedPath(next);\n });\n createEffect(() => props.onSelectedPathChange?.(selectedPath()));\n createEffect(() => {\n const refreshKey = props.refreshKey;\n if (Object.is(refreshKey, previousRefreshKey)) return;\n previousRefreshKey = refreshKey;\n void refetch();\n });\n\n const allEntries = createMemo<FileTreeEntry[]>(() => {\n const loaded = entries() ?? [];\n const real = new Set(loaded.map((entry) => entry.path));\n return [\n ...loaded,\n ...pendingFolders()\n .filter((path) => !real.has(path))\n .map((path) => ({ path, kind: \"folder\" as const })),\n ];\n });\n const selectedEntry = createMemo(() => allEntries().find((entry) => entry.path === selectedPath()) ?? null);\n const fileMutation = mutation.create<void, () => Promise<void>>({\n mutation: (work) => work(),\n onSuccess: () => void refetch(),\n onError: (error) => void prompts.error(error.message),\n });\n const pathMutable = (path: string) => !fileMutation.loading() && !props.readOnly && !props.source.isReadOnly?.(path);\n const pathWritable = (path: string) => pathMutable(path) && Boolean(props.source.write);\n const run = (work: () => Promise<void>) => void fileMutation.mutate(work);\n const canLeaveCurrent = async (nextPath: string | null): Promise<boolean> => {\n const current = selectedPath();\n if (nextPath === current || !selectedDirty() || !current) return true;\n if (selectedDirty() && current) {\n const confirmed = props.confirmDiscard\n ? await props.confirmDiscard(current, nextPath)\n : await prompts.confirm(messages().discardUnsavedFile, {\n title: messages().discardChanges,\n variant: \"danger\",\n });\n if (!confirmed) return false;\n }\n return true;\n };\n const selectPath = async (nextPath: string | null) => {\n if (!(await canLeaveCurrent(nextPath))) return;\n setSelectedDirty(false);\n setSelectedPath(nextPath);\n };\n\n const removeFile = (path: string) =>\n run(async () => {\n const confirmed = await prompts.confirm(`Delete ${path}?`, { title: \"Delete file\", variant: \"danger\" });\n if (!confirmed) return;\n await props.source.remove!(path);\n setPendingFolders((folders) => folders.filter((candidate) => candidate !== path && !candidate.startsWith(`${path}/`)));\n const selected = selectedPath();\n if (selected === path || selected?.startsWith(`${path}/`)) setSelectedPath(null);\n });\n\n const renameFile = (path: string, nextName: string) =>\n run(async () => {\n const target = `${parentOf(path) === \"/\" ? \"\" : parentOf(path)}/${nextName}`;\n await props.source.rename!(path, target);\n if (selectedPath() === path) setSelectedPath(target);\n });\n\n const createFile = (dirPath: string) =>\n run(async () => {\n const name = await prompts.prompt(messages().newFileName, \"\", { title: messages().newFile });\n if (!name || typeof name !== \"string\" || !name.trim() || name.includes(\"/\")) return;\n const path = `${dirPath === \"/\" ? \"\" : dirPath}/${name.trim()}`;\n if (!(await canLeaveCurrent(path))) return;\n await props.source.write!(path, \"\");\n setSelectedDirty(false);\n setSelectedPath(path);\n });\n\n const createFolder = (dirPath: string) =>\n void (async () => {\n const name = await prompts.prompt(messages().newFolderName, \"\", { title: messages().newFolder });\n if (!name || typeof name !== \"string\" || !name.trim() || name.includes(\"/\")) return;\n const path = `${dirPath === \"/\" ? \"\" : dirPath}/${name.trim()}`;\n setPendingFolders((folders) => [...folders, path]);\n })();\n\n const pickUpload = (dirPath: string) => {\n uploadDir = dirPath;\n uploadInputRef?.click();\n };\n\n const onUploadPicked = (input: HTMLInputElement) => {\n const files = Array.from(input.files ?? []);\n input.value = \"\";\n if (files.length > 0) run(() => props.source.upload!(uploadDir, files));\n };\n\n const baseName = (path: string) => path.slice(path.lastIndexOf(\"/\") + 1);\n\n /** Concrete file paths behind an entry: the file itself, or everything under a folder. */\n const filesBehind = (path: string): string[] => {\n const list = entries() ?? [];\n if (list.some((entry) => entry.path === path && entry.kind !== \"folder\")) return [path];\n const prefix = `${path}/`;\n return list.filter((entry) => entry.path.startsWith(prefix) && entry.kind !== \"folder\").map((entry) => entry.path);\n };\n\n /** Move a file OR a whole folder subtree (per-file renames preserve the structure). */\n const moveEntry = (path: string, targetDir: string) =>\n run(async () => {\n const destBase = `${targetDir === \"/\" ? \"\" : targetDir}/${baseName(path)}`;\n const files = filesBehind(path);\n if (files.length === 0) {\n // Still-empty pending folder — relocating it is a purely local affair.\n setPendingFolders((folders) => folders.map((candidate) => (candidate === path ? destBase : candidate)));\n return;\n }\n for (const file of files) {\n await props.source.rename!(file, `${destBase}${file.slice(path.length)}`);\n }\n const selected = selectedPath();\n if (selected && (selected === path || selected.startsWith(`${path}/`))) {\n setSelectedPath(`${destBase}${selected.slice(path.length)}`);\n }\n });\n\n const contentBytes = async (path: string): Promise<Uint8Array> => {\n const content = await props.source.read(path);\n return content.encoding === \"utf8\"\n ? new TextEncoder().encode(content.content)\n : Uint8Array.from(atob(content.content), (char) => char.charCodeAt(0));\n };\n\n const downloadEntry = (path: string, isFolder: boolean) =>\n void (async () => {\n try {\n if (!isFolder) {\n const href = props.source.downloadHref?.(path);\n if (href) {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n anchor.download = baseName(path);\n anchor.click();\n return;\n }\n const content = await props.source.read(path);\n downloadFileFromContent(await contentBytes(path), baseName(path), content.mediaType || \"application/octet-stream\");\n return;\n }\n const files = filesBehind(path);\n if (files.length === 0) throw new Error(messages().folderEmpty);\n const zipEntries = await Promise.all(\n files.map(async (file) => ({ filename: file.slice(path.length + 1), source: await contentBytes(file) })),\n );\n downloadFileFromContent(await createZip(zipEntries), `${baseName(path) || \"files\"}.zip`, \"application/zip\");\n } catch (error) {\n void prompts.error(error instanceof Error ? error.message : messages().downloadFailed);\n }\n })();\n\n const treeActions = () => ({\n ...(!props.readOnly && props.source.rename\n ? { rename: (path: string, next: string) => (pathMutable(path) ? renameFile(path, next) : undefined) }\n : {}),\n ...(!props.readOnly && props.source.remove ? { remove: (path: string) => (pathMutable(path) ? removeFile(path) : undefined) } : {}),\n ...(!props.readOnly && props.source.write ? { createFile: (dir: string) => (pathWritable(dir) ? createFile(dir) : undefined) } : {}),\n ...(!props.readOnly && props.source.write\n ? { createFolder: (dir: string) => (pathWritable(dir) ? createFolder(dir) : undefined) }\n : {}),\n ...(!props.readOnly && props.source.rename\n ? { move: (path: string, dir: string) => (pathMutable(path) && pathMutable(dir) ? moveEntry(path, dir) : undefined) }\n : {}),\n download: (path: string, isFolder: boolean) => downloadEntry(path, isFolder),\n });\n\n const addMenuItems = () => [\n ...(pathWritable(\"/\") ? [{ icon: \"ti ti-file-plus\", label: messages().newFile, action: () => createFile(\"/\") }] : []),\n ...(pathWritable(\"/\") ? [{ icon: \"ti ti-folder-plus\", label: messages().newFolder, action: () => createFolder(\"/\") }] : []),\n ...(pathMutable(\"/\") && props.source.upload\n ? [{ icon: \"ti ti-upload\", label: messages().uploadFiles, action: () => pickUpload(\"/\") }]\n : []),\n ];\n\n return (\n <div class={`k2b-content-file-browser ${props.class ?? \"\"}`} data-default-height={props.class ? undefined : \"true\"}>\n <div class=\"k2b-content-file-browser__sidebar\">\n <div class=\"k2b-content-file-browser__header\">\n <p class=\"k2b-content-file-browser__title\">{messages().files}</p>\n <Show when={addMenuItems().length > 0}>\n <Dropdown.Root position=\"bottom-left\" items={addMenuItems()} label={messages().addFileFolderUpload}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-content-file-browser__add\"\n label={messages().addFileFolderUpload}\n title={messages().add}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{messages().addFileFolderUpload}</span>\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n </div>\n <Switch>\n <Match when={entries.loading && entries() === undefined}>\n <Placeholder icon=\"ti ti-loader-2\" title={messages().loadingFiles} />\n </Match>\n <Match when={entries.error}>\n <Placeholder\n icon=\"ti ti-alert-circle\"\n title={messages().failedLoadFiles}\n description={String(entries.error?.message ?? entries.error ?? \"\")}\n />\n </Match>\n <Match when={allEntries().length > 0}>\n <FileTree\n class=\"k2b-content-file-browser__tree\"\n entries={allEntries()}\n selectedPath={selectedPath()}\n onSelect={(entry) => void selectPath(entry.path)}\n actions={treeActions()}\n />\n </Match>\n <Match when={true}>\n <Placeholder icon=\"ti ti-folder-open\" title={messages().noFiles} description={messages().spaceEmpty} />\n </Match>\n </Switch>\n <input\n ref={uploadInputRef}\n type=\"file\"\n multiple\n class=\"k2b-content-file-browser__upload\"\n onChange={(event) => onUploadPicked(event.currentTarget)}\n />\n </div>\n\n <Switch fallback={<Placeholder icon=\"ti ti-file\" title={messages().selectFile} description={messages().pickFileFromTree} />}>\n <Match when={selectedEntry()?.kind === \"folder\"}>\n <Placeholder icon=\"ti ti-folder\" title={messages().folderSelected} description={messages().chooseFileToPreview} />\n </Match>\n <Match when={selectedEntry()}>\n {(entry) => (\n <FileView\n previewPreferencesKey={props.source.previewPreferencesKey}\n file={{ path: entry().path, mediaType: entry().mediaType, size: entry().size }}\n load={() => props.source.read(entry().path)}\n revision={props.refreshKey}\n registerRefresh={(refresh) => {\n refreshPreview = refresh;\n return () => {\n refreshPreview = async () => undefined;\n };\n }}\n renderers={props.renderers}\n onDirtyChange={setSelectedDirty}\n save={\n pathWritable(entry().path)\n ? async (content) => {\n await props.source.write!(entry().path, content);\n await refetch();\n }\n : undefined\n }\n downloadHref={props.source.downloadHref?.(entry().path) ?? null}\n />\n )}\n </Match>\n </Switch>\n </div>\n );\n}\n\n/** Open the file browser as a dialog. Returns when the dialog closes. */\nexport const openFileBrowser = (options: { source: FileSource; title?: string; subtitle?: string; icon?: string }): Promise<void> => {\n const messages = resolveUiMessages();\n return dialogCore.open<void>(\n (close) => (\n <PanelDialog>\n <PanelDialog.Header\n title={options.title ?? messages.files}\n subtitle={options.subtitle}\n icon={options.icon ?? \"ti ti-folder\"}\n close={() => close()}\n />\n <PanelDialog.Body>\n <FileBrowserPanel source={options.source} />\n </PanelDialog.Body>\n </PanelDialog>\n ),\n panelDialogOptions,\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["For","FileGrid","props","grid","columns","Math","max","getComputedStyle","gridTemplateColumns","split","length","nested","event","target","Element","closest","_el$","_$getNextElement","_tmpl$","_ref$","_$use","_$insert","_$createComponent","each","rows","children","row","id","getRowId","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_el$5","nextSibling","_el$6","_el$7","element","selection","register","_$spread","_$mergeProps","itemProps","aria-selected","selected","has","tabIndex","focused","onFocus","markFocused","select","onRowClick","onOpen","onContextMenu","keyDown","key","preventDefault","renderPreview","renderLabel","renderMeta","renderActions","_$runHydrationEvents","_$effect","_p$","_v$","class","_v$2","size","_v$3","label","e","_$className","t","_$setAttribute","a","undefined"],"sources":["content/FileGrid.tsx"],"sourcesContent":["import { For, type JSX } from \"solid-js\";\nimport type { CollectionSelection } from \"./collection-selection\";\n\nexport type FileGridProps<T> = {\n rows: readonly T[];\n getRowId: (row: T) => string;\n selection: CollectionSelection;\n label: string;\n size?: \"sm\" | \"md\" | \"lg\";\n renderPreview: (row: T) => JSX.Element;\n renderLabel: (row: T) => JSX.Element;\n renderMeta?: (row: T) => JSX.Element;\n renderActions?: (row: T) => JSX.Element;\n onRowClick?: (row: T) => void;\n onOpen: (row: T) => void;\n onContextMenu?: (row: T) => void;\n /** Extra attributes for one tile, for example drag-and-drop handlers or data attributes the host styles. */\n itemProps?: (row: T) => JSX.HTMLAttributes<HTMLDivElement>;\n class?: string;\n};\n\n/** File presentation only; the host owns data, menus, leases and permissions. */\nexport function FileGrid<T>(props: FileGridProps<T>) {\n let grid: HTMLDivElement | undefined;\n const columns = () => (grid ? Math.max(1, getComputedStyle(grid).gridTemplateColumns.split(\" \").length) : 1);\n const nested = (event: Event) =>\n event.target instanceof Element &&\n !!event.target.closest(\"button,a,input,label,select,textarea,summary,[contenteditable],[role=button],[role=menu]\");\n return (\n <div\n ref={grid}\n class={`k2b-file-grid ${props.class ?? \"\"}`}\n data-size={props.size ?? \"md\"}\n role=\"grid\"\n aria-label={props.label}\n aria-multiselectable=\"true\"\n >\n <For each={props.rows}>\n {(row) => {\n const id = () => props.getRowId(row);\n return (\n <div role=\"row\" class=\"k2b-file-grid__row\">\n <div\n {...props.itemProps?.(row)}\n role=\"gridcell\"\n class=\"k2b-file-grid__item\"\n aria-selected={props.selection.selected().has(id())}\n ref={(element) => props.selection.register(id(), element)}\n tabIndex={props.selection.focused() === id() ? 0 : -1}\n onFocus={() => props.selection.markFocused(id())}\n onClick={(event) => {\n if (!nested(event)) {\n props.selection.select(id(), event);\n props.onRowClick?.(row);\n }\n }}\n onDblClick={(event) => {\n if (!nested(event)) props.onOpen(row);\n }}\n onContextMenu={() => props.onContextMenu?.(row)}\n onKeyDown={(event) => {\n if (nested(event)) return;\n if (props.selection.keyDown(event, id(), columns())) return;\n if (event.key === \"Enter\") {\n event.preventDefault();\n props.onOpen(row);\n }\n }}\n >\n <div class=\"k2b-file-grid__preview\">{props.renderPreview(row)}</div>\n <div class=\"k2b-file-grid__name\">{props.renderLabel(row)}</div>\n <div class=\"k2b-file-grid__meta\">{props.renderMeta?.(row)}</div>\n <div class=\"k2b-file-grid__actions\">{props.renderActions?.(row)}</div>\n </div>\n </div>\n );\n }}\n </For>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/FileGrid.tsx"],"sourcesContent":["import { For, type JSX } from \"solid-js\";\nimport type { CollectionSelection } from \"./collection-selection\";\n\nexport type FileGridProps<T> = {\n rows: readonly T[];\n getRowId: (row: T) => string;\n selection: CollectionSelection;\n label: string;\n size?: \"sm\" | \"md\" | \"lg\";\n renderPreview: (row: T) => JSX.Element;\n renderLabel: (row: T) => JSX.Element;\n renderMeta?: (row: T) => JSX.Element;\n renderActions?: (row: T) => JSX.Element;\n onRowClick?: (row: T) => void;\n onOpen: (row: T) => void;\n onContextMenu?: (row: T) => void;\n /** Extra attributes for one tile, for example drag-and-drop handlers or data attributes the host styles. */\n itemProps?: (row: T) => JSX.HTMLAttributes<HTMLDivElement>;\n class?: string;\n};\n\n/** File presentation only; the host owns data, menus, leases and permissions. */\nexport function FileGrid<T>(props: FileGridProps<T>) {\n let grid: HTMLDivElement | undefined;\n const columns = () => (grid ? Math.max(1, getComputedStyle(grid).gridTemplateColumns.split(\" \").length) : 1);\n const nested = (event: Event) =>\n event.target instanceof Element &&\n !!event.target.closest(\"button,a,input,label,select,textarea,summary,[contenteditable],[role=button],[role=menu]\");\n return (\n <div\n ref={grid}\n class={`k2b-file-grid ${props.class ?? \"\"}`}\n data-size={props.size ?? \"md\"}\n role=\"grid\"\n aria-label={props.label}\n aria-multiselectable=\"true\"\n >\n <For each={props.rows}>\n {(row) => {\n const id = () => props.getRowId(row);\n return (\n <div role=\"row\" class=\"k2b-file-grid__row\">\n <div\n {...props.itemProps?.(row)}\n role=\"gridcell\"\n class=\"k2b-file-grid__item\"\n aria-selected={props.selection.selected().has(id())}\n ref={(element) => props.selection.register(id(), element)}\n tabIndex={props.selection.focused() === id() ? 0 : -1}\n onFocus={() => props.selection.markFocused(id())}\n onClick={(event) => {\n if (!nested(event)) {\n props.selection.select(id(), event);\n props.onRowClick?.(row);\n }\n }}\n onDblClick={(event) => {\n if (!nested(event)) props.onOpen(row);\n }}\n onContextMenu={() => props.onContextMenu?.(row)}\n onKeyDown={(event) => {\n if (nested(event)) return;\n if (props.selection.keyDown(event, id(), columns())) return;\n if (event.key === \"Enter\") {\n event.preventDefault();\n props.onOpen(row);\n }\n }}\n >\n <div class=\"k2b-file-grid__preview\">{props.renderPreview(row)}</div>\n <div class=\"k2b-file-grid__name\">{props.renderLabel(row)}</div>\n <div class=\"k2b-file-grid__meta\">{props.renderMeta?.(row)}</div>\n <div class=\"k2b-file-grid__actions\">{props.renderActions?.(row)}</div>\n </div>\n </div>\n );\n }}\n </For>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,GAAG,QAAkB,UAAU;AAqBxC;AACA,OAAO,SAAS,QAAQ,CAAI,KAAuB,EAAE;EACnD,IAAI,IAAgC;EACpC,MAAM,OAAO,GAAG,MAAO,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAE;EAC5G,MAAM,MAAM,GAAI,KAAY,IAC1B,KAAK,CAAC,MAAM,YAAY,OAAO,IAC/B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,0FAA0F,CAAC;EACpH;IAAA;IAAA,YAES,IAAI;IAAA,mDAAJ,IAAI;IAAA,iCAOR,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,UACjB,GAAG,IAAK;QACR,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACpC;UAAA;YAAA;YAAA;YAAA;YAAA;YAAA;UAAA,MAOY,OAAO,IAAK,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC;UAAA,mCAJrD,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;YAAA,QACrB,UAAU;YAAA,SACT,qBAAqB;YAAA;cAAA,OACZ,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAAA;YAAA,IAEnD,QAAQ;cAAA,OAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAAA;YAAA,WAC5C,MAAM,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;YAAA,WACtC,KAAK,IAAK;cAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAClB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;gBACnC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;cACzB;YACF,CAAC;YAAA,cACY,KAAK,IAAK;cACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YACvC,CAAC;YAAA,iBACc,MAAM,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;YAAA,aACnC,KAAK,IAAK;cACpB,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;cACnB,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE;cACrD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;gBACzB,KAAK,CAAC,cAAc,CAAC,CAAC;gBACtB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;cACnB;YACF;UAAC;UAAA,sBAEoC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC;UAAA,sBAC3B,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;UAAA,sBACtB,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;UAAA,sBACpB,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;UAAA;UAAA;QAAA;MAIvE;IAAC;IAAA;MAAA,UA7CI,iBAAiB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAChC,KAAK,CAAC,IAAI,IAAI,IAAI;QAAA,OAEjB,KAAK,CAAC,KAAK;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AA8C7B","ignoreList":[]}