@k2b/ui 0.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +343 -0
  3. package/dist/.build-complete +0 -0
  4. package/dist/browser/actions/Button.js +236 -0
  5. package/dist/browser/actions/Button.js.map +1 -0
  6. package/dist/browser/actions/ContextMenu.js +199 -0
  7. package/dist/browser/actions/ContextMenu.js.map +1 -0
  8. package/dist/browser/actions/CopyButton.js +97 -0
  9. package/dist/browser/actions/CopyButton.js.map +1 -0
  10. package/dist/browser/actions/Disclosure.js +83 -0
  11. package/dist/browser/actions/Disclosure.js.map +1 -0
  12. package/dist/browser/actions/Dropdown.js +669 -0
  13. package/dist/browser/actions/Dropdown.js.map +1 -0
  14. package/dist/browser/actions/FilterChip.js +149 -0
  15. package/dist/browser/actions/FilterChip.js.map +1 -0
  16. package/dist/browser/actions/RemoveButton.js +47 -0
  17. package/dist/browser/actions/RemoveButton.js.map +1 -0
  18. package/dist/browser/actions/SegmentedControl.js +138 -0
  19. package/dist/browser/actions/SegmentedControl.js.map +1 -0
  20. package/dist/browser/actions/SplitButton.js +76 -0
  21. package/dist/browser/actions/SplitButton.js.map +1 -0
  22. package/dist/browser/actions/SpotlightSearch.js +87 -0
  23. package/dist/browser/actions/SpotlightSearch.js.map +1 -0
  24. package/dist/browser/actions/Tabs.js +185 -0
  25. package/dist/browser/actions/Tabs.js.map +1 -0
  26. package/dist/browser/actions/Toolbar.js +87 -0
  27. package/dist/browser/actions/Toolbar.js.map +1 -0
  28. package/dist/browser/actions/index.js +13 -0
  29. package/dist/browser/actions/index.js.map +1 -0
  30. package/dist/browser/chat/ChatComposer.js +760 -0
  31. package/dist/browser/chat/ChatComposer.js.map +1 -0
  32. package/dist/browser/chat/ChatPrimitives.js +688 -0
  33. package/dist/browser/chat/ChatPrimitives.js.map +1 -0
  34. package/dist/browser/chat/ChatRoot.js +27 -0
  35. package/dist/browser/chat/ChatRoot.js.map +1 -0
  36. package/dist/browser/chat/ChatTimeline.js +404 -0
  37. package/dist/browser/chat/ChatTimeline.js.map +1 -0
  38. package/dist/browser/chat/chat-behavior.js +53 -0
  39. package/dist/browser/chat/chat-behavior.js.map +1 -0
  40. package/dist/browser/chat/index.js +17 -0
  41. package/dist/browser/chat/index.js.map +1 -0
  42. package/dist/browser/chat/types.js +2 -0
  43. package/dist/browser/chat/types.js.map +1 -0
  44. package/dist/browser/content/Calendar.js +2168 -0
  45. package/dist/browser/content/Calendar.js.map +1 -0
  46. package/dist/browser/content/Chart.js +680 -0
  47. package/dist/browser/content/Chart.js.map +1 -0
  48. package/dist/browser/content/CodeDisplay.js +104 -0
  49. package/dist/browser/content/CodeDisplay.js.map +1 -0
  50. package/dist/browser/content/DataTable.js +724 -0
  51. package/dist/browser/content/DataTable.js.map +1 -0
  52. package/dist/browser/content/Docs.js +227 -0
  53. package/dist/browser/content/Docs.js.map +1 -0
  54. package/dist/browser/content/FileBrowser.js +462 -0
  55. package/dist/browser/content/FileBrowser.js.map +1 -0
  56. package/dist/browser/content/FileTree.js +453 -0
  57. package/dist/browser/content/FileTree.js.map +1 -0
  58. package/dist/browser/content/FileView.js +842 -0
  59. package/dist/browser/content/FileView.js.map +1 -0
  60. package/dist/browser/content/Lightbox.js +285 -0
  61. package/dist/browser/content/Lightbox.js.map +1 -0
  62. package/dist/browser/content/LogEntriesTable.js +139 -0
  63. package/dist/browser/content/LogEntriesTable.js.map +1 -0
  64. package/dist/browser/content/MarkdownView.js +138 -0
  65. package/dist/browser/content/MarkdownView.js.map +1 -0
  66. package/dist/browser/content/Pagination.js +182 -0
  67. package/dist/browser/content/Pagination.js.map +1 -0
  68. package/dist/browser/content/PdfPreview.js +204 -0
  69. package/dist/browser/content/PdfPreview.js.map +1 -0
  70. package/dist/browser/content/RangePicker.js +83 -0
  71. package/dist/browser/content/RangePicker.js.map +1 -0
  72. package/dist/browser/content/StructuredDataPreview.js +194 -0
  73. package/dist/browser/content/StructuredDataPreview.js.map +1 -0
  74. package/dist/browser/content/calendar-event-layout.js +92 -0
  75. package/dist/browser/content/calendar-event-layout.js.map +1 -0
  76. package/dist/browser/content/calendar-pointer.js +114 -0
  77. package/dist/browser/content/calendar-pointer.js.map +1 -0
  78. package/dist/browser/content/chart-map-viewport.js +33 -0
  79. package/dist/browser/content/chart-map-viewport.js.map +1 -0
  80. package/dist/browser/content/chart-state-timeline.js +124 -0
  81. package/dist/browser/content/chart-state-timeline.js.map +1 -0
  82. package/dist/browser/content/code-highlight.js +144 -0
  83. package/dist/browser/content/code-highlight.js.map +1 -0
  84. package/dist/browser/content/file-tree.js +93 -0
  85. package/dist/browser/content/file-tree.js.map +1 -0
  86. package/dist/browser/content/file-view-preview.js +112 -0
  87. package/dist/browser/content/file-view-preview.js.map +1 -0
  88. package/dist/browser/content/index.js +16 -0
  89. package/dist/browser/content/index.js.map +1 -0
  90. package/dist/browser/feedback/InlineGuidance.js +46 -0
  91. package/dist/browser/feedback/InlineGuidance.js.map +1 -0
  92. package/dist/browser/feedback/Tooltip.js +189 -0
  93. package/dist/browser/feedback/Tooltip.js.map +1 -0
  94. package/dist/browser/feedback/dialog-core.js +207 -0
  95. package/dist/browser/feedback/dialog-core.js.map +1 -0
  96. package/dist/browser/feedback/index.js +6 -0
  97. package/dist/browser/feedback/index.js.map +1 -0
  98. package/dist/browser/feedback/prompts.js +991 -0
  99. package/dist/browser/feedback/prompts.js.map +1 -0
  100. package/dist/browser/feedback/toast.js +271 -0
  101. package/dist/browser/feedback/toast.js.map +1 -0
  102. package/dist/browser/feedback/tooltip-position.js +25 -0
  103. package/dist/browser/feedback/tooltip-position.js.map +1 -0
  104. package/dist/browser/index.js +11 -0
  105. package/dist/browser/index.js.map +1 -0
  106. package/dist/browser/inputs/AutocompleteEditor.js +610 -0
  107. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -0
  108. package/dist/browser/inputs/AutocompleteSelect.js +632 -0
  109. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -0
  110. package/dist/browser/inputs/Checkbox.js +137 -0
  111. package/dist/browser/inputs/Checkbox.js.map +1 -0
  112. package/dist/browser/inputs/CheckboxCard.js +130 -0
  113. package/dist/browser/inputs/CheckboxCard.js.map +1 -0
  114. package/dist/browser/inputs/ChoiceGroups.js +174 -0
  115. package/dist/browser/inputs/ChoiceGroups.js.map +1 -0
  116. package/dist/browser/inputs/ChoiceInputs.js +400 -0
  117. package/dist/browser/inputs/ChoiceInputs.js.map +1 -0
  118. package/dist/browser/inputs/Combobox.js +274 -0
  119. package/dist/browser/inputs/Combobox.js.map +1 -0
  120. package/dist/browser/inputs/DatePicker.js +923 -0
  121. package/dist/browser/inputs/DatePicker.js.map +1 -0
  122. package/dist/browser/inputs/FileInputs.js +736 -0
  123. package/dist/browser/inputs/FileInputs.js.map +1 -0
  124. package/dist/browser/inputs/MultiSelectInput.js +565 -0
  125. package/dist/browser/inputs/MultiSelectInput.js.map +1 -0
  126. package/dist/browser/inputs/NumberInput.js +288 -0
  127. package/dist/browser/inputs/NumberInput.js.map +1 -0
  128. package/dist/browser/inputs/Select.js +507 -0
  129. package/dist/browser/inputs/Select.js.map +1 -0
  130. package/dist/browser/inputs/SelectChip.js +151 -0
  131. package/dist/browser/inputs/SelectChip.js.map +1 -0
  132. package/dist/browser/inputs/SpecialInputs.js +117 -0
  133. package/dist/browser/inputs/SpecialInputs.js.map +1 -0
  134. package/dist/browser/inputs/Switch.js +117 -0
  135. package/dist/browser/inputs/Switch.js.map +1 -0
  136. package/dist/browser/inputs/TagEditor.js +358 -0
  137. package/dist/browser/inputs/TagEditor.js.map +1 -0
  138. package/dist/browser/inputs/TagsInput.js +195 -0
  139. package/dist/browser/inputs/TagsInput.js.map +1 -0
  140. package/dist/browser/inputs/TemplateEditor.js +190 -0
  141. package/dist/browser/inputs/TemplateEditor.js.map +1 -0
  142. package/dist/browser/inputs/TextInput.js +318 -0
  143. package/dist/browser/inputs/TextInput.js.map +1 -0
  144. package/dist/browser/inputs/choice.js +188 -0
  145. package/dist/browser/inputs/choice.js.map +1 -0
  146. package/dist/browser/inputs/completion/behaviors.js +108 -0
  147. package/dist/browser/inputs/completion/behaviors.js.map +1 -0
  148. package/dist/browser/inputs/completion/engine.js +103 -0
  149. package/dist/browser/inputs/completion/engine.js.map +1 -0
  150. package/dist/browser/inputs/completion/index.js +4 -0
  151. package/dist/browser/inputs/completion/index.js.map +1 -0
  152. package/dist/browser/inputs/completion/overlay.js +25 -0
  153. package/dist/browser/inputs/completion/overlay.js.map +1 -0
  154. package/dist/browser/inputs/date-picker.js +123 -0
  155. package/dist/browser/inputs/date-picker.js.map +1 -0
  156. package/dist/browser/inputs/editor-dom.js +26 -0
  157. package/dist/browser/inputs/editor-dom.js.map +1 -0
  158. package/dist/browser/inputs/field-contract.js +9 -0
  159. package/dist/browser/inputs/field-contract.js.map +1 -0
  160. package/dist/browser/inputs/icon-options.js +46 -0
  161. package/dist/browser/inputs/icon-options.js.map +1 -0
  162. package/dist/browser/inputs/image-crop.js +145 -0
  163. package/dist/browser/inputs/image-crop.js.map +1 -0
  164. package/dist/browser/inputs/index.js +23 -0
  165. package/dist/browser/inputs/index.js.map +1 -0
  166. package/dist/browser/inputs/markdown/MarkdownEditor.js +725 -0
  167. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -0
  168. package/dist/browser/inputs/markdown/Toolbar.js +172 -0
  169. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -0
  170. package/dist/browser/inputs/markdown/actions.js +140 -0
  171. package/dist/browser/inputs/markdown/actions.js.map +1 -0
  172. package/dist/browser/inputs/markdown/active-formats.js +36 -0
  173. package/dist/browser/inputs/markdown/active-formats.js.map +1 -0
  174. package/dist/browser/inputs/markdown/behaviors.js +63 -0
  175. package/dist/browser/inputs/markdown/behaviors.js.map +1 -0
  176. package/dist/browser/inputs/markdown/code-zone.js +8 -0
  177. package/dist/browser/inputs/markdown/code-zone.js.map +1 -0
  178. package/dist/browser/internal/color.js +18 -0
  179. package/dist/browser/internal/color.js.map +1 -0
  180. package/dist/browser/internal/field.js +158 -0
  181. package/dist/browser/internal/field.js.map +1 -0
  182. package/dist/browser/internal/portal.js +17 -0
  183. package/dist/browser/internal/portal.js.map +1 -0
  184. package/dist/browser/intl/Format.js +273 -0
  185. package/dist/browser/intl/Format.js.map +1 -0
  186. package/dist/browser/intl/index.js +3 -0
  187. package/dist/browser/intl/index.js.map +1 -0
  188. package/dist/browser/intl/locale.js +63 -0
  189. package/dist/browser/intl/locale.js.map +1 -0
  190. package/dist/browser/intl/messages.js +753 -0
  191. package/dist/browser/intl/messages.js.map +1 -0
  192. package/dist/browser/layout/AppOverview.js +151 -0
  193. package/dist/browser/layout/AppOverview.js.map +1 -0
  194. package/dist/browser/layout/AppWorkspace.js +1502 -0
  195. package/dist/browser/layout/AppWorkspace.js.map +1 -0
  196. package/dist/browser/layout/DataPanel.js +122 -0
  197. package/dist/browser/layout/DataPanel.js.map +1 -0
  198. package/dist/browser/layout/DetailPanel.js +484 -0
  199. package/dist/browser/layout/DetailPanel.js.map +1 -0
  200. package/dist/browser/layout/Discussion.js +511 -0
  201. package/dist/browser/layout/Discussion.js.map +1 -0
  202. package/dist/browser/layout/FloatingWindow.js +332 -0
  203. package/dist/browser/layout/FloatingWindow.js.map +1 -0
  204. package/dist/browser/layout/PanelDialog.js +236 -0
  205. package/dist/browser/layout/PanelDialog.js.map +1 -0
  206. package/dist/browser/layout/PanelHeader.js +91 -0
  207. package/dist/browser/layout/PanelHeader.js.map +1 -0
  208. package/dist/browser/layout/Panes.js +978 -0
  209. package/dist/browser/layout/Panes.js.map +1 -0
  210. package/dist/browser/layout/ScrollArea.js +29 -0
  211. package/dist/browser/layout/ScrollArea.js.map +1 -0
  212. package/dist/browser/layout/Settings.js +381 -0
  213. package/dist/browser/layout/Settings.js.map +1 -0
  214. package/dist/browser/layout/SettingsCollection.js +212 -0
  215. package/dist/browser/layout/SettingsCollection.js.map +1 -0
  216. package/dist/browser/layout/SettingsModal.js +281 -0
  217. package/dist/browser/layout/SettingsModal.js.map +1 -0
  218. package/dist/browser/layout/app-workspace-controller.js +419 -0
  219. package/dist/browser/layout/app-workspace-controller.js.map +1 -0
  220. package/dist/browser/layout/app-workspace-state.js +125 -0
  221. package/dist/browser/layout/app-workspace-state.js.map +1 -0
  222. package/dist/browser/layout/floating-window-geometry.js +15 -0
  223. package/dist/browser/layout/floating-window-geometry.js.map +1 -0
  224. package/dist/browser/layout/index.js +17 -0
  225. package/dist/browser/layout/index.js.map +1 -0
  226. package/dist/browser/layout/panes-layout.js +436 -0
  227. package/dist/browser/layout/panes-layout.js.map +1 -0
  228. package/dist/browser/layout/stable-id.js +17 -0
  229. package/dist/browser/layout/stable-id.js.map +1 -0
  230. package/dist/browser/semantics.js +2 -0
  231. package/dist/browser/semantics.js.map +1 -0
  232. package/dist/browser/surfaces/Avatar.js +97 -0
  233. package/dist/browser/surfaces/Avatar.js.map +1 -0
  234. package/dist/browser/surfaces/DescriptionList.js +66 -0
  235. package/dist/browser/surfaces/DescriptionList.js.map +1 -0
  236. package/dist/browser/surfaces/LinkCard.js +40 -0
  237. package/dist/browser/surfaces/LinkCard.js.map +1 -0
  238. package/dist/browser/surfaces/NotFoundState.js +85 -0
  239. package/dist/browser/surfaces/NotFoundState.js.map +1 -0
  240. package/dist/browser/surfaces/NoticeCard.js +145 -0
  241. package/dist/browser/surfaces/NoticeCard.js.map +1 -0
  242. package/dist/browser/surfaces/Paper.js +33 -0
  243. package/dist/browser/surfaces/Paper.js.map +1 -0
  244. package/dist/browser/surfaces/Placeholder.js +90 -0
  245. package/dist/browser/surfaces/Placeholder.js.map +1 -0
  246. package/dist/browser/surfaces/ProgressBar.js +58 -0
  247. package/dist/browser/surfaces/ProgressBar.js.map +1 -0
  248. package/dist/browser/surfaces/StatCell.js +172 -0
  249. package/dist/browser/surfaces/StatCell.js.map +1 -0
  250. package/dist/browser/surfaces/StatGrid.js +80 -0
  251. package/dist/browser/surfaces/StatGrid.js.map +1 -0
  252. package/dist/browser/surfaces/StatusBadge.js +70 -0
  253. package/dist/browser/surfaces/StatusBadge.js.map +1 -0
  254. package/dist/browser/surfaces/Tag.js +94 -0
  255. package/dist/browser/surfaces/Tag.js.map +1 -0
  256. package/dist/browser/surfaces/index.js +13 -0
  257. package/dist/browser/surfaces/index.js.map +1 -0
  258. package/dist/browser/widgets/Widget.js +89 -0
  259. package/dist/browser/widgets/Widget.js.map +1 -0
  260. package/dist/browser/widgets/WidgetHero.js +47 -0
  261. package/dist/browser/widgets/WidgetHero.js.map +1 -0
  262. package/dist/browser/widgets/WidgetList.js +125 -0
  263. package/dist/browser/widgets/WidgetList.js.map +1 -0
  264. package/dist/browser/widgets/WidgetPills.js +78 -0
  265. package/dist/browser/widgets/WidgetPills.js.map +1 -0
  266. package/dist/browser/widgets/WidgetStat.js +114 -0
  267. package/dist/browser/widgets/WidgetStat.js.map +1 -0
  268. package/dist/browser/widgets/WidgetStatus.js +54 -0
  269. package/dist/browser/widgets/WidgetStatus.js.map +1 -0
  270. package/dist/browser/widgets/index.js +7 -0
  271. package/dist/browser/widgets/index.js.map +1 -0
  272. package/dist/global.css +3 -0
  273. package/dist/licenses/ibm-plex-mono.txt +93 -0
  274. package/dist/licenses/ibm-plex-sans.txt +93 -0
  275. package/dist/licenses/tabler-icons.txt +21 -0
  276. package/dist/plex.css +1 -0
  277. package/dist/ssr/actions/Button.js +203 -0
  278. package/dist/ssr/actions/Button.js.map +1 -0
  279. package/dist/ssr/actions/ContextMenu.js +128 -0
  280. package/dist/ssr/actions/ContextMenu.js.map +1 -0
  281. package/dist/ssr/actions/CopyButton.js +79 -0
  282. package/dist/ssr/actions/CopyButton.js.map +1 -0
  283. package/dist/ssr/actions/Disclosure.js +26 -0
  284. package/dist/ssr/actions/Disclosure.js.map +1 -0
  285. package/dist/ssr/actions/Dropdown.js +443 -0
  286. package/dist/ssr/actions/Dropdown.js.map +1 -0
  287. package/dist/ssr/actions/FilterChip.js +132 -0
  288. package/dist/ssr/actions/FilterChip.js.map +1 -0
  289. package/dist/ssr/actions/RemoveButton.js +45 -0
  290. package/dist/ssr/actions/RemoveButton.js.map +1 -0
  291. package/dist/ssr/actions/SegmentedControl.js +57 -0
  292. package/dist/ssr/actions/SegmentedControl.js.map +1 -0
  293. package/dist/ssr/actions/SplitButton.js +74 -0
  294. package/dist/ssr/actions/SplitButton.js.map +1 -0
  295. package/dist/ssr/actions/SpotlightSearch.js +38 -0
  296. package/dist/ssr/actions/SpotlightSearch.js.map +1 -0
  297. package/dist/ssr/actions/Tabs.js +91 -0
  298. package/dist/ssr/actions/Tabs.js.map +1 -0
  299. package/dist/ssr/actions/Toolbar.js +33 -0
  300. package/dist/ssr/actions/Toolbar.js.map +1 -0
  301. package/dist/ssr/actions/index.js +13 -0
  302. package/dist/ssr/actions/index.js.map +1 -0
  303. package/dist/ssr/chat/ChatComposer.js +392 -0
  304. package/dist/ssr/chat/ChatComposer.js.map +1 -0
  305. package/dist/ssr/chat/ChatPrimitives.js +377 -0
  306. package/dist/ssr/chat/ChatPrimitives.js.map +1 -0
  307. package/dist/ssr/chat/ChatRoot.js +10 -0
  308. package/dist/ssr/chat/ChatRoot.js.map +1 -0
  309. package/dist/ssr/chat/ChatTimeline.js +301 -0
  310. package/dist/ssr/chat/ChatTimeline.js.map +1 -0
  311. package/dist/ssr/chat/chat-behavior.js +53 -0
  312. package/dist/ssr/chat/chat-behavior.js.map +1 -0
  313. package/dist/ssr/chat/index.js +17 -0
  314. package/dist/ssr/chat/index.js.map +1 -0
  315. package/dist/ssr/chat/types.js +2 -0
  316. package/dist/ssr/chat/types.js.map +1 -0
  317. package/dist/ssr/content/Calendar.js +1542 -0
  318. package/dist/ssr/content/Calendar.js.map +1 -0
  319. package/dist/ssr/content/Chart.js +552 -0
  320. package/dist/ssr/content/Chart.js.map +1 -0
  321. package/dist/ssr/content/CodeDisplay.js +55 -0
  322. package/dist/ssr/content/CodeDisplay.js.map +1 -0
  323. package/dist/ssr/content/DataTable.js +470 -0
  324. package/dist/ssr/content/DataTable.js.map +1 -0
  325. package/dist/ssr/content/Docs.js +108 -0
  326. package/dist/ssr/content/Docs.js.map +1 -0
  327. package/dist/ssr/content/FileBrowser.js +422 -0
  328. package/dist/ssr/content/FileBrowser.js.map +1 -0
  329. package/dist/ssr/content/FileTree.js +299 -0
  330. package/dist/ssr/content/FileTree.js.map +1 -0
  331. package/dist/ssr/content/FileView.js +612 -0
  332. package/dist/ssr/content/FileView.js.map +1 -0
  333. package/dist/ssr/content/Lightbox.js +164 -0
  334. package/dist/ssr/content/Lightbox.js.map +1 -0
  335. package/dist/ssr/content/LogEntriesTable.js +106 -0
  336. package/dist/ssr/content/LogEntriesTable.js.map +1 -0
  337. package/dist/ssr/content/MarkdownView.js +119 -0
  338. package/dist/ssr/content/MarkdownView.js.map +1 -0
  339. package/dist/ssr/content/Pagination.js +141 -0
  340. package/dist/ssr/content/Pagination.js.map +1 -0
  341. package/dist/ssr/content/PdfPreview.js +126 -0
  342. package/dist/ssr/content/PdfPreview.js.map +1 -0
  343. package/dist/ssr/content/RangePicker.js +35 -0
  344. package/dist/ssr/content/RangePicker.js.map +1 -0
  345. package/dist/ssr/content/StructuredDataPreview.js +127 -0
  346. package/dist/ssr/content/StructuredDataPreview.js.map +1 -0
  347. package/dist/ssr/content/calendar-event-layout.js +92 -0
  348. package/dist/ssr/content/calendar-event-layout.js.map +1 -0
  349. package/dist/ssr/content/calendar-pointer.js +114 -0
  350. package/dist/ssr/content/calendar-pointer.js.map +1 -0
  351. package/dist/ssr/content/chart-map-viewport.js +33 -0
  352. package/dist/ssr/content/chart-map-viewport.js.map +1 -0
  353. package/dist/ssr/content/chart-state-timeline.js +124 -0
  354. package/dist/ssr/content/chart-state-timeline.js.map +1 -0
  355. package/dist/ssr/content/code-highlight.js +144 -0
  356. package/dist/ssr/content/code-highlight.js.map +1 -0
  357. package/dist/ssr/content/file-tree.js +93 -0
  358. package/dist/ssr/content/file-tree.js.map +1 -0
  359. package/dist/ssr/content/file-view-preview.js +112 -0
  360. package/dist/ssr/content/file-view-preview.js.map +1 -0
  361. package/dist/ssr/content/index.js +16 -0
  362. package/dist/ssr/content/index.js.map +1 -0
  363. package/dist/ssr/feedback/InlineGuidance.js +26 -0
  364. package/dist/ssr/feedback/InlineGuidance.js.map +1 -0
  365. package/dist/ssr/feedback/Tooltip.js +156 -0
  366. package/dist/ssr/feedback/Tooltip.js.map +1 -0
  367. package/dist/ssr/feedback/dialog-core.js +207 -0
  368. package/dist/ssr/feedback/dialog-core.js.map +1 -0
  369. package/dist/ssr/feedback/index.js +6 -0
  370. package/dist/ssr/feedback/index.js.map +1 -0
  371. package/dist/ssr/feedback/prompts.js +703 -0
  372. package/dist/ssr/feedback/prompts.js.map +1 -0
  373. package/dist/ssr/feedback/toast.js +271 -0
  374. package/dist/ssr/feedback/toast.js.map +1 -0
  375. package/dist/ssr/feedback/tooltip-position.js +25 -0
  376. package/dist/ssr/feedback/tooltip-position.js.map +1 -0
  377. package/dist/ssr/index.js +11 -0
  378. package/dist/ssr/index.js.map +1 -0
  379. package/dist/ssr/inputs/AutocompleteEditor.js +463 -0
  380. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -0
  381. package/dist/ssr/inputs/AutocompleteSelect.js +420 -0
  382. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -0
  383. package/dist/ssr/inputs/Checkbox.js +75 -0
  384. package/dist/ssr/inputs/Checkbox.js.map +1 -0
  385. package/dist/ssr/inputs/CheckboxCard.js +69 -0
  386. package/dist/ssr/inputs/CheckboxCard.js.map +1 -0
  387. package/dist/ssr/inputs/ChoiceGroups.js +101 -0
  388. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -0
  389. package/dist/ssr/inputs/ChoiceInputs.js +250 -0
  390. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -0
  391. package/dist/ssr/inputs/Combobox.js +177 -0
  392. package/dist/ssr/inputs/Combobox.js.map +1 -0
  393. package/dist/ssr/inputs/DatePicker.js +629 -0
  394. package/dist/ssr/inputs/DatePicker.js.map +1 -0
  395. package/dist/ssr/inputs/FileInputs.js +543 -0
  396. package/dist/ssr/inputs/FileInputs.js.map +1 -0
  397. package/dist/ssr/inputs/MultiSelectInput.js +347 -0
  398. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -0
  399. package/dist/ssr/inputs/NumberInput.js +177 -0
  400. package/dist/ssr/inputs/NumberInput.js.map +1 -0
  401. package/dist/ssr/inputs/Select.js +308 -0
  402. package/dist/ssr/inputs/Select.js.map +1 -0
  403. package/dist/ssr/inputs/SelectChip.js +129 -0
  404. package/dist/ssr/inputs/SelectChip.js.map +1 -0
  405. package/dist/ssr/inputs/SpecialInputs.js +116 -0
  406. package/dist/ssr/inputs/SpecialInputs.js.map +1 -0
  407. package/dist/ssr/inputs/Switch.js +62 -0
  408. package/dist/ssr/inputs/Switch.js.map +1 -0
  409. package/dist/ssr/inputs/TagEditor.js +280 -0
  410. package/dist/ssr/inputs/TagEditor.js.map +1 -0
  411. package/dist/ssr/inputs/TagsInput.js +122 -0
  412. package/dist/ssr/inputs/TagsInput.js.map +1 -0
  413. package/dist/ssr/inputs/TemplateEditor.js +164 -0
  414. package/dist/ssr/inputs/TemplateEditor.js.map +1 -0
  415. package/dist/ssr/inputs/TextInput.js +211 -0
  416. package/dist/ssr/inputs/TextInput.js.map +1 -0
  417. package/dist/ssr/inputs/choice.js +188 -0
  418. package/dist/ssr/inputs/choice.js.map +1 -0
  419. package/dist/ssr/inputs/completion/behaviors.js +108 -0
  420. package/dist/ssr/inputs/completion/behaviors.js.map +1 -0
  421. package/dist/ssr/inputs/completion/engine.js +103 -0
  422. package/dist/ssr/inputs/completion/engine.js.map +1 -0
  423. package/dist/ssr/inputs/completion/index.js +4 -0
  424. package/dist/ssr/inputs/completion/index.js.map +1 -0
  425. package/dist/ssr/inputs/completion/overlay.js +25 -0
  426. package/dist/ssr/inputs/completion/overlay.js.map +1 -0
  427. package/dist/ssr/inputs/date-picker.js +123 -0
  428. package/dist/ssr/inputs/date-picker.js.map +1 -0
  429. package/dist/ssr/inputs/editor-dom.js +26 -0
  430. package/dist/ssr/inputs/editor-dom.js.map +1 -0
  431. package/dist/ssr/inputs/field-contract.js +9 -0
  432. package/dist/ssr/inputs/field-contract.js.map +1 -0
  433. package/dist/ssr/inputs/icon-options.js +46 -0
  434. package/dist/ssr/inputs/icon-options.js.map +1 -0
  435. package/dist/ssr/inputs/image-crop.js +145 -0
  436. package/dist/ssr/inputs/image-crop.js.map +1 -0
  437. package/dist/ssr/inputs/index.js +23 -0
  438. package/dist/ssr/inputs/index.js.map +1 -0
  439. package/dist/ssr/inputs/markdown/MarkdownEditor.js +516 -0
  440. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -0
  441. package/dist/ssr/inputs/markdown/Toolbar.js +115 -0
  442. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -0
  443. package/dist/ssr/inputs/markdown/actions.js +140 -0
  444. package/dist/ssr/inputs/markdown/actions.js.map +1 -0
  445. package/dist/ssr/inputs/markdown/active-formats.js +36 -0
  446. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -0
  447. package/dist/ssr/inputs/markdown/behaviors.js +63 -0
  448. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -0
  449. package/dist/ssr/inputs/markdown/code-zone.js +8 -0
  450. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -0
  451. package/dist/ssr/internal/color.js +18 -0
  452. package/dist/ssr/internal/color.js.map +1 -0
  453. package/dist/ssr/internal/field.js +90 -0
  454. package/dist/ssr/internal/field.js.map +1 -0
  455. package/dist/ssr/internal/portal.js +17 -0
  456. package/dist/ssr/internal/portal.js.map +1 -0
  457. package/dist/ssr/intl/Format.js +192 -0
  458. package/dist/ssr/intl/Format.js.map +1 -0
  459. package/dist/ssr/intl/index.js +3 -0
  460. package/dist/ssr/intl/index.js.map +1 -0
  461. package/dist/ssr/intl/locale.js +63 -0
  462. package/dist/ssr/intl/locale.js.map +1 -0
  463. package/dist/ssr/intl/messages.js +753 -0
  464. package/dist/ssr/intl/messages.js.map +1 -0
  465. package/dist/ssr/layout/AppOverview.js +85 -0
  466. package/dist/ssr/layout/AppOverview.js.map +1 -0
  467. package/dist/ssr/layout/AppWorkspace.js +976 -0
  468. package/dist/ssr/layout/AppWorkspace.js.map +1 -0
  469. package/dist/ssr/layout/DataPanel.js +101 -0
  470. package/dist/ssr/layout/DataPanel.js.map +1 -0
  471. package/dist/ssr/layout/DetailPanel.js +284 -0
  472. package/dist/ssr/layout/DetailPanel.js.map +1 -0
  473. package/dist/ssr/layout/Discussion.js +319 -0
  474. package/dist/ssr/layout/Discussion.js.map +1 -0
  475. package/dist/ssr/layout/FloatingWindow.js +259 -0
  476. package/dist/ssr/layout/FloatingWindow.js.map +1 -0
  477. package/dist/ssr/layout/PanelDialog.js +136 -0
  478. package/dist/ssr/layout/PanelDialog.js.map +1 -0
  479. package/dist/ssr/layout/PanelHeader.js +45 -0
  480. package/dist/ssr/layout/PanelHeader.js.map +1 -0
  481. package/dist/ssr/layout/Panes.js +678 -0
  482. package/dist/ssr/layout/Panes.js.map +1 -0
  483. package/dist/ssr/layout/ScrollArea.js +18 -0
  484. package/dist/ssr/layout/ScrollArea.js.map +1 -0
  485. package/dist/ssr/layout/Settings.js +219 -0
  486. package/dist/ssr/layout/Settings.js.map +1 -0
  487. package/dist/ssr/layout/SettingsCollection.js +150 -0
  488. package/dist/ssr/layout/SettingsCollection.js.map +1 -0
  489. package/dist/ssr/layout/SettingsModal.js +156 -0
  490. package/dist/ssr/layout/SettingsModal.js.map +1 -0
  491. package/dist/ssr/layout/app-workspace-controller.js +419 -0
  492. package/dist/ssr/layout/app-workspace-controller.js.map +1 -0
  493. package/dist/ssr/layout/app-workspace-state.js +125 -0
  494. package/dist/ssr/layout/app-workspace-state.js.map +1 -0
  495. package/dist/ssr/layout/floating-window-geometry.js +15 -0
  496. package/dist/ssr/layout/floating-window-geometry.js.map +1 -0
  497. package/dist/ssr/layout/index.js +17 -0
  498. package/dist/ssr/layout/index.js.map +1 -0
  499. package/dist/ssr/layout/panes-layout.js +436 -0
  500. package/dist/ssr/layout/panes-layout.js.map +1 -0
  501. package/dist/ssr/layout/stable-id.js +17 -0
  502. package/dist/ssr/layout/stable-id.js.map +1 -0
  503. package/dist/ssr/semantics.js +2 -0
  504. package/dist/ssr/semantics.js.map +1 -0
  505. package/dist/ssr/surfaces/Avatar.js +43 -0
  506. package/dist/ssr/surfaces/Avatar.js.map +1 -0
  507. package/dist/ssr/surfaces/DescriptionList.js +25 -0
  508. package/dist/ssr/surfaces/DescriptionList.js.map +1 -0
  509. package/dist/ssr/surfaces/LinkCard.js +25 -0
  510. package/dist/ssr/surfaces/LinkCard.js.map +1 -0
  511. package/dist/ssr/surfaces/NotFoundState.js +38 -0
  512. package/dist/ssr/surfaces/NotFoundState.js.map +1 -0
  513. package/dist/ssr/surfaces/NoticeCard.js +83 -0
  514. package/dist/ssr/surfaces/NoticeCard.js.map +1 -0
  515. package/dist/ssr/surfaces/Paper.js +32 -0
  516. package/dist/ssr/surfaces/Paper.js.map +1 -0
  517. package/dist/ssr/surfaces/Placeholder.js +76 -0
  518. package/dist/ssr/surfaces/Placeholder.js.map +1 -0
  519. package/dist/ssr/surfaces/ProgressBar.js +13 -0
  520. package/dist/ssr/surfaces/ProgressBar.js.map +1 -0
  521. package/dist/ssr/surfaces/StatCell.js +80 -0
  522. package/dist/ssr/surfaces/StatCell.js.map +1 -0
  523. package/dist/ssr/surfaces/StatGrid.js +62 -0
  524. package/dist/ssr/surfaces/StatGrid.js.map +1 -0
  525. package/dist/ssr/surfaces/StatusBadge.js +38 -0
  526. package/dist/ssr/surfaces/StatusBadge.js.map +1 -0
  527. package/dist/ssr/surfaces/Tag.js +32 -0
  528. package/dist/ssr/surfaces/Tag.js.map +1 -0
  529. package/dist/ssr/surfaces/index.js +13 -0
  530. package/dist/ssr/surfaces/index.js.map +1 -0
  531. package/dist/ssr/widgets/Widget.js +54 -0
  532. package/dist/ssr/widgets/Widget.js.map +1 -0
  533. package/dist/ssr/widgets/WidgetHero.js +23 -0
  534. package/dist/ssr/widgets/WidgetHero.js.map +1 -0
  535. package/dist/ssr/widgets/WidgetList.js +73 -0
  536. package/dist/ssr/widgets/WidgetList.js.map +1 -0
  537. package/dist/ssr/widgets/WidgetPills.js +40 -0
  538. package/dist/ssr/widgets/WidgetPills.js.map +1 -0
  539. package/dist/ssr/widgets/WidgetStat.js +45 -0
  540. package/dist/ssr/widgets/WidgetStat.js.map +1 -0
  541. package/dist/ssr/widgets/WidgetStatus.js +23 -0
  542. package/dist/ssr/widgets/WidgetStatus.js.map +1 -0
  543. package/dist/ssr/widgets/index.js +7 -0
  544. package/dist/ssr/widgets/index.js.map +1 -0
  545. package/dist/styles.css +1 -0
  546. package/dist/tabler-icons-q30jt7jk.woff2 +0 -0
  547. package/dist/tabler.css +4 -0
  548. package/package.json +77 -0
@@ -0,0 +1,470 @@
1
+ import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
2
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
3
+ import { createComponent as _$createComponent } from "solid-js/web";
4
+ import { ssr as _$ssr } from "solid-js/web";
5
+ import { escape as _$escape } from "solid-js/web";
6
+ var _tmpl$ = ["<span class=\"k2b-data-table__header-title\">", "</span>"],
7
+ _tmpl$2 = ["<span class=\"k2b-data-table__header-subtitle\">", "</span>"],
8
+ _tmpl$3 = ["<div class=\"k2b-data-table__header-content\"", ">", "</div>"],
9
+ _tmpl$4 = ["<a", " class=\"k2b-data-table__header-content k2b-data-table__sort\"", "><span class=\"k2b-data-table__header-line\">", "<i class=\"", "\"", " aria-hidden=\"true\"></i></span></a>"],
10
+ _tmpl$5 = ["<tr aria-hidden=\"true\"><td class=\"k2b-data-table__fill\"", "></td></tr>"],
11
+ _tmpl$6 = "<div class=\"k2b-data-table__sentinel\" aria-hidden=\"true\"></div>",
12
+ _tmpl$7 = ["<div role=\"region\"", " tabindex=\"0\" class=\"k2b-table-wrap\"", "><table", "><thead class=\"k2b-data-table__head\"", "><tr class=\"k2b-data-table__head-row\">", "</tr></thead><tbody>", "</tbody>", "</table>", "</div>"],
13
+ _tmpl$8 = ["<th scope=\"col\" class=\"", "\"", ">", "</th>"],
14
+ _tmpl$9 = ["<tr><td class=\"k2b-data-table__empty\"", ">", "</td></tr>"],
15
+ _tmpl$0 = ["<tr class=\"", "\"", ">", "</tr>"],
16
+ _tmpl$1 = ["<td class=\"", "\"", "><div", ">", "</div></td>"],
17
+ _tmpl$10 = ["<tfoot class=\"k2b-data-table__foot\" data-sticky=\"true\"><tr class=\"k2b-data-table__foot-row\">", "</tr></tfoot>"],
18
+ _tmpl$11 = ["<td class=\"k2b-data-table__footer-cell\"", ">", "</td>"],
19
+ _tmpl$12 = ["<div class=\"k2b-data-table__scrollbar\"", " aria-hidden=\"true\"><span style=\"", "\"></span></div>"],
20
+ _tmpl$13 = ["<div class=\"", "\">", "</div>"],
21
+ _tmpl$14 = ["<span", ">", "</span>"],
22
+ _tmpl$15 = ["<footer class=\"", "\">", "</footer>"];
23
+ import { createContext, createEffect, createMemo, createSignal, createUniqueId, For, onCleanup, onMount, Show, useContext } from "solid-js";
24
+ import { Dynamic } from "solid-js/web";
25
+ import { useUiMessages } from "../intl/messages";
26
+ import { useLocale } from "../intl/locale";
27
+ import { PanelHeader } from "../layout/PanelHeader";
28
+ import { Paper } from "../surfaces/Paper";
29
+ import Placeholder from "../surfaces/Placeholder";
30
+ const DataTablePanelContext = createContext();
31
+ const defaultRender = (value, locale, messages) => {
32
+ if (value === null || value === undefined || value === "") return "—";
33
+ if (value instanceof Date) return value.toLocaleString(locale);
34
+ if (typeof value === "boolean") return value ? messages.yes : messages.no;
35
+ if (typeof value === "number" || typeof value === "bigint") return String(value);
36
+ if (typeof value === "string") return value;
37
+ return JSON.stringify(value);
38
+ };
39
+ const renderColumnPart = (part, col) => {
40
+ if (typeof part === "function") return part({
41
+ col
42
+ });
43
+ return part;
44
+ };
45
+ const rowInteractiveSelector = ["a[href]", "button", "input", "select", "textarea", "summary", "[contenteditable]", "[role='button']", "[role='checkbox']", "[role='link']", "[role='menuitem']", "[role='option']", "[role='radio']", "[role='switch']", "[role='tab']", "[tabindex]"].join(",");
46
+ const isNestedRowControl = event => event.target instanceof Element && event.target.closest(rowInteractiveSelector) !== event.currentTarget;
47
+ const scrollbarMetrics = (viewportSize, contentSize, scrollOffset) => {
48
+ if (viewportSize <= 0 || contentSize <= viewportSize + 1) return {
49
+ overflow: false,
50
+ offset: 0,
51
+ size: 0
52
+ };
53
+ const size = Math.min(viewportSize, Math.max(24, viewportSize * viewportSize / contentSize));
54
+ const offset = scrollOffset / (contentSize - viewportSize) * (viewportSize - size);
55
+ return {
56
+ overflow: true,
57
+ offset,
58
+ size
59
+ };
60
+ };
61
+ function DataTableRoot(props) {
62
+ const messages = useUiMessages();
63
+ const locale = useLocale();
64
+ const [hoveredColumn, setHoveredColumn] = createSignal(null);
65
+ const [scrollbars, setScrollbars] = createSignal({
66
+ x: {
67
+ overflow: false,
68
+ offset: 0,
69
+ size: 0
70
+ },
71
+ y: {
72
+ overflow: false,
73
+ offset: 0,
74
+ size: 0
75
+ }
76
+ });
77
+ const [scrollbarEnhanced, setScrollbarEnhanced] = createSignal(false);
78
+ const [scrolling, setScrolling] = createSignal(false);
79
+ const panel = useContext(DataTablePanelContext);
80
+ let tableRef;
81
+ let scrollRef;
82
+ let loadMoreRef;
83
+ let scrollingTimeout;
84
+ let scrollbarDragOffset = 0;
85
+ let hasMore = false;
86
+ let loadingMore = false;
87
+ let onLoadMore;
88
+ let loadMoreRequested = false;
89
+ let previousRowsLength = props.rows.length;
90
+ let previousLoadingMore = !!props.loadingMore;
91
+ let previousHasMore = !!props.hasMore;
92
+ const rowId = row => props.getRowId?.(row);
93
+ const isInteractive = () => !!props.onRowClick || !!props.onRowDoubleClick;
94
+ const shouldHoverRows = () => props.hoverRows ?? isInteractive();
95
+ const shouldRenderLoadMoreSentinel = () => !!props.onLoadMore;
96
+ const labelledBy = () => props.ariaLabelledBy ?? (panel?.hasHeading() ? panel.headingId : undefined);
97
+ const surface = () => props.surface ?? (props.class ? "plain" : "paper");
98
+ const cellContentClass = () => props.cellContentClass ?? "k2b-data-table__cell-text";
99
+ const tableClass = () => `k2b-data-table ${props.tableClass ?? ""}`.trim();
100
+ const columnHighlighted = index => props.highlightColumns !== false && shouldHoverRows() && hoveredColumn() === index ? "true" : undefined;
101
+ const setHoveredColumnIfEnabled = index => {
102
+ if (shouldHoverRows()) setHoveredColumn(index);
103
+ };
104
+ const isNearBottom = () => {
105
+ if (!scrollRef) return false;
106
+ return scrollRef.scrollTop + scrollRef.clientHeight >= scrollRef.scrollHeight - 240;
107
+ };
108
+ const maybeLoadMore = () => {
109
+ if (!hasMore || loadingMore || loadMoreRequested || !onLoadMore) return;
110
+ if (!isNearBottom()) return;
111
+ loadMoreRequested = true;
112
+ try {
113
+ onLoadMore();
114
+ } catch (error) {
115
+ loadMoreRequested = false;
116
+ throw error;
117
+ }
118
+ };
119
+ const syncScrollbars = () => {
120
+ if (!scrollRef) return;
121
+ setScrollbars({
122
+ x: scrollbarMetrics(scrollRef.clientWidth, scrollRef.scrollWidth, scrollRef.scrollLeft),
123
+ y: scrollbarMetrics(scrollRef.clientHeight, scrollRef.scrollHeight, scrollRef.scrollTop)
124
+ });
125
+ };
126
+ const revealScrollbars = () => {
127
+ setScrolling(true);
128
+ if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);
129
+ scrollingTimeout = setTimeout(() => {
130
+ setScrolling(false);
131
+ scrollingTimeout = undefined;
132
+ }, 700);
133
+ };
134
+ const onScroll = () => {
135
+ syncScrollbars();
136
+ revealScrollbars();
137
+ maybeLoadMore();
138
+ };
139
+ const scrollFromPointer = (event, axis) => {
140
+ if (!scrollRef) return;
141
+ const track = event.currentTarget;
142
+ const metrics = scrollbars()[axis];
143
+ const rect = track.getBoundingClientRect();
144
+ const trackSize = axis === "y" ? rect.height : rect.width;
145
+ const pointerOffset = axis === "y" ? event.clientY - rect.top : event.clientX - rect.left;
146
+ const available = Math.max(1, trackSize - metrics.size);
147
+ const thumbOffset = Math.min(available, Math.max(0, pointerOffset - scrollbarDragOffset));
148
+ const maxScroll = axis === "y" ? scrollRef.scrollHeight - scrollRef.clientHeight : scrollRef.scrollWidth - scrollRef.clientWidth;
149
+ if (axis === "y") scrollRef.scrollTop = thumbOffset / available * maxScroll;else scrollRef.scrollLeft = thumbOffset / available * maxScroll;
150
+ syncScrollbars();
151
+ revealScrollbars();
152
+ };
153
+ const startScrollbarDrag = (event, axis) => {
154
+ event.preventDefault();
155
+ const metrics = scrollbars()[axis];
156
+ const rect = event.currentTarget.getBoundingClientRect();
157
+ const pointerOffset = axis === "y" ? event.clientY - rect.top : event.clientX - rect.left;
158
+ scrollbarDragOffset = event.target === event.currentTarget ? metrics.size / 2 : Math.min(metrics.size, Math.max(0, pointerOffset - metrics.offset));
159
+ event.currentTarget.setPointerCapture(event.pointerId);
160
+ scrollFromPointer(event, axis);
161
+ };
162
+ const valueOf = (row, col) => {
163
+ if (typeof col.value === "function") return col.value(row);
164
+ if (col.value) return row[col.value];
165
+ return undefined;
166
+ };
167
+ const columnAlignments = createMemo(() => {
168
+ const alignments = new Map();
169
+ for (const col of props.columns) {
170
+ if (col.align) {
171
+ alignments.set(col.id, col.align);
172
+ continue;
173
+ }
174
+ let align = "left";
175
+ for (const row of props.rows) {
176
+ const value = valueOf(row, col);
177
+ if (value === null || value === undefined || value === "") continue;
178
+ align = typeof value === "number" || typeof value === "bigint" ? "right" : "left";
179
+ break;
180
+ }
181
+ alignments.set(col.id, align);
182
+ }
183
+ return alignments;
184
+ });
185
+
186
+ /** `data-align` mirrors Cloud's `text-left/center/right` on the same cell. */
187
+ const alignAttr = col => {
188
+ const align = columnAlignments().get(col.id) ?? "left";
189
+ return align === "left" ? undefined : align;
190
+ };
191
+ const sortKeyOf = col => col.sortable === true ? col.id : typeof col.sortable === "string" ? col.sortable : null;
192
+
193
+ /**
194
+ * Sorting is a link, not a handler: these tables are server-rendered, so the
195
+ * order belongs in the URL. Clicking the active column flips its direction.
196
+ */
197
+ const sortLinkFor = col => {
198
+ const key = sortKeyOf(col);
199
+ if (!key || !props.sortHref) return null;
200
+ const active = props.sort?.key === key;
201
+ const direction = active && props.sort?.direction === "desc" ? "asc" : "desc";
202
+ return {
203
+ href: props.sortHref({
204
+ key,
205
+ direction
206
+ }),
207
+ active,
208
+ direction
209
+ };
210
+ };
211
+
212
+ /** Only a sortable column carries a sort state; the rest carry none at all. */
213
+ const ariaSortFor = col => {
214
+ const sort = sortLinkFor(col);
215
+ if (!sort) return undefined;
216
+ if (!sort.active) return "none";
217
+ return props.sort?.direction === "asc" ? "ascending" : "descending";
218
+ };
219
+ const renderHeaderDefault = col => {
220
+ const sort = sortLinkFor(col);
221
+ const title = [_$ssr(_tmpl$, _$escape(renderColumnPart(col.header, col))), _$createComponent(Show, {
222
+ get when() {
223
+ return col.subtitle !== undefined;
224
+ },
225
+ get children() {
226
+ return _$ssr(_tmpl$2, _$escape(renderColumnPart(col.subtitle, col)));
227
+ }
228
+ })];
229
+ if (!sort) return _$ssr(_tmpl$3, _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false), _$escape(title));
230
+ return _$ssr(_tmpl$4, _$ssrAttribute("href", _$escape(sort.href, true), false), _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false), _$escape(title), `k2b-data-table__sort-icon ti ${props.sort?.direction === "asc" && sort.active ? "ti-arrow-up" : "ti-arrow-down"}`, _$ssrAttribute("data-active", sort.active ? "true" : _$escape(undefined, true), false));
231
+ };
232
+ const renderValueDefault = value => defaultRender(value, locale(), messages());
233
+ const renderCellDefault = (row, col) => renderValueDefault(valueOf(row, col));
234
+ const onRowKeyDown = (event, row) => {
235
+ if (!isInteractive()) return;
236
+ if (isNestedRowControl(event)) return;
237
+ if (event.key !== "Enter" && event.key !== " ") return;
238
+ event.preventDefault();
239
+ (props.onRowClick ?? props.onRowDoubleClick)?.(row);
240
+ };
241
+ const onRowClick = (event, row) => {
242
+ if (isNestedRowControl(event)) return;
243
+ props.onRowClick?.(row);
244
+ };
245
+ const onRowDoubleClick = (event, row) => {
246
+ if (isNestedRowControl(event)) return;
247
+ props.onRowDoubleClick?.(row);
248
+ };
249
+ const rowClass = row => {
250
+ if (typeof props.rowClass === "function") return props.rowClass(row) ?? "";
251
+ return props.rowClass ?? "";
252
+ };
253
+ onMount(() => {
254
+ if (typeof IntersectionObserver === "undefined" || !scrollRef || !loadMoreRef) return;
255
+ const observer = new IntersectionObserver(entries => {
256
+ if (entries.some(entry => entry.isIntersecting)) maybeLoadMore();
257
+ }, {
258
+ root: scrollRef,
259
+ rootMargin: "240px"
260
+ });
261
+ observer.observe(loadMoreRef);
262
+ onCleanup(() => observer.disconnect());
263
+ });
264
+ onMount(() => {
265
+ setScrollbarEnhanced(true);
266
+ syncScrollbars();
267
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(syncScrollbars);
268
+ if (scrollRef) observer?.observe(scrollRef);
269
+ if (tableRef) observer?.observe(tableRef);
270
+ onCleanup(() => {
271
+ observer?.disconnect();
272
+ if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);
273
+ });
274
+ });
275
+ createEffect(() => {
276
+ const rowsLength = props.rows.length;
277
+ const nextHasMore = !!props.hasMore;
278
+ const nextLoadingMore = !!props.loadingMore;
279
+ if (rowsLength !== previousRowsLength || previousLoadingMore && !nextLoadingMore || !previousHasMore && nextHasMore) {
280
+ loadMoreRequested = false;
281
+ }
282
+ previousRowsLength = rowsLength;
283
+ previousLoadingMore = nextLoadingMore;
284
+ previousHasMore = nextHasMore;
285
+ hasMore = nextHasMore;
286
+ loadingMore = nextLoadingMore;
287
+ onLoadMore = props.onLoadMore;
288
+ maybeLoadMore();
289
+ queueMicrotask(syncScrollbars);
290
+ });
291
+ return _$createComponent(Show, {
292
+ get when() {
293
+ return props.columns.length > 0;
294
+ },
295
+ get fallback() {
296
+ return _$createComponent(Placeholder, {
297
+ surface: "paper",
298
+ get description() {
299
+ return messages().noColumns;
300
+ }
301
+ });
302
+ },
303
+ get children() {
304
+ return _$createComponent(Dynamic, {
305
+ get component() {
306
+ return surface() === "paper" ? Paper : "div";
307
+ },
308
+ get ["class"]() {
309
+ return `k2b-table-shell ${props.class ?? ""}`;
310
+ },
311
+ get ["data-surface"]() {
312
+ return surface();
313
+ },
314
+ get ["data-has-footer"]() {
315
+ return props.footer ? "true" : undefined;
316
+ },
317
+ get ["data-overflow-x"]() {
318
+ return scrollbars().x.overflow ? "true" : undefined;
319
+ },
320
+ get ["data-overflow-y"]() {
321
+ return scrollbars().y.overflow ? "true" : undefined;
322
+ },
323
+ get ["data-scrollbar-enhanced"]() {
324
+ return scrollbarEnhanced() ? "true" : undefined;
325
+ },
326
+ get ["data-scrolling"]() {
327
+ return scrolling() ? "true" : undefined;
328
+ },
329
+ onMouseLeave: () => setHoveredColumn(null),
330
+ get children() {
331
+ return [_$ssr(_tmpl$7, _$ssrAttribute("aria-label", labelledBy() ? _$escape(undefined, true) : _$escape(props.ariaLabel ?? messages().dataTable, true), false) + _$ssrAttribute("aria-labelledby", _$escape(labelledBy(), true), false), _$ssrAttribute("data-density", props.density === "compact" ? "compact" : _$escape(undefined, true), false) + _$ssrAttribute("data-has-footer", props.footer ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-surface", _$escape(surface(), true), false) + _$ssrAttribute("data-scroll-preserve", _$escape(props.scrollPreserveKey || undefined, true), false), _$ssrAttribute("class", _$escape(tableClass(), true), false) + _$ssrAttribute("data-fill", props.fillHeight ? "true" : _$escape(undefined, true), false), _$ssrAttribute("data-sticky", props.stickyHeader === false ? _$escape(undefined, true) : "true", false), _$escape(_$createComponent(For, {
332
+ get each() {
333
+ return props.columns;
334
+ },
335
+ children: (col, index) => _$ssr(_tmpl$8, `${_$escape(col.headerClass ?? "", true)} ${_$escape(col.class ?? "", true)}`, _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false) + _$ssrAttribute("data-highlighted", _$escape(columnHighlighted(index()), true), false) + _$ssrAttribute("aria-sort", _$escape(ariaSortFor(col), true), false), props.renderHeader ? _$escape(props.renderHeader({
336
+ col,
337
+ render: () => renderHeaderDefault(col)
338
+ })) : _$escape(renderHeaderDefault(col)))
339
+ })), _$escape(_$createComponent(Show, {
340
+ get when() {
341
+ return props.rows.length > 0;
342
+ },
343
+ get fallback() {
344
+ return _$ssr(_tmpl$9, _$ssrAttribute("colspan", _$escape(props.columns.length, true), false), _$escape(_$createComponent(Placeholder, {
345
+ get description() {
346
+ return props.empty ?? messages().noRecords;
347
+ }
348
+ })));
349
+ },
350
+ get children() {
351
+ return [_$createComponent(For, {
352
+ get each() {
353
+ return props.rows;
354
+ },
355
+ children: row => {
356
+ const id = () => rowId(row);
357
+ const isSelected = () => props.selectedRowId && id() === props.selectedRowId;
358
+ return _$ssr(_tmpl$0, `k2b-data-table__row ${_$escape(rowClass(row), true)}`, _$ssrAttribute("data-hover", shouldHoverRows() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-clickable", shouldHoverRows() && isInteractive() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-selected", isSelected() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("tabindex", isInteractive() ? 0 : _$escape(undefined, true), false), _$escape(_$createComponent(For, {
359
+ get each() {
360
+ return props.columns;
361
+ },
362
+ children: (col, index) => {
363
+ const value = () => valueOf(row, col);
364
+ return _$ssr(_tmpl$1, `${_$escape(col.cellClass ?? "", true)} ${_$escape(col.class ?? "", true)}`, _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false) + _$ssrAttribute("data-valign", props.verticalAlign && props.verticalAlign !== "middle" ? _$escape(props.verticalAlign, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-highlighted", _$escape(columnHighlighted(index()), true), false), _$ssrAttribute("class", _$escape(cellContentClass(), true), false), props.renderCell ? _$escape(props.renderCell({
365
+ row,
366
+ col,
367
+ value: value(),
368
+ render: v => renderCellDefault(row, {
369
+ ...col,
370
+ value: () => v
371
+ })
372
+ })) : _$escape(renderValueDefault(value())));
373
+ }
374
+ })));
375
+ }
376
+ }), _$createComponent(Show, {
377
+ get when() {
378
+ return props.fillHeight;
379
+ },
380
+ get children() {
381
+ return _$ssr(_tmpl$5, _$ssrAttribute("colspan", _$escape(props.columns.length, true), false));
382
+ }
383
+ })];
384
+ }
385
+ })), _$escape(_$createComponent(Show, {
386
+ get when() {
387
+ return props.footer;
388
+ },
389
+ children: footer => _$ssr(_tmpl$10, _$escape(_$createComponent(For, {
390
+ get each() {
391
+ return props.columns;
392
+ },
393
+ children: (col, index) => {
394
+ const value = () => footer().values?.[col.id];
395
+ return _$ssr(_tmpl$11, _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false) + _$ssrAttribute("data-highlighted", _$escape(columnHighlighted(index()), true), false), footer().renderCell ? _$escape(footer().renderCell({
396
+ col,
397
+ value: value(),
398
+ render: renderValueDefault
399
+ })) : _$escape(renderValueDefault(value())));
400
+ }
401
+ })))
402
+ })), _$escape(_$createComponent(Show, {
403
+ get when() {
404
+ return shouldRenderLoadMoreSentinel();
405
+ },
406
+ get children() {
407
+ return _$ssr(_tmpl$6);
408
+ }
409
+ }))), _$createComponent(For, {
410
+ each: ["y", "x"],
411
+ children: axis => _$ssr(_tmpl$12, _$ssrAttribute("data-axis", _$escape(axis, true), false) + _$ssrAttribute("data-overflow", scrollbars()[axis].overflow ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("--k2b-data-table-scroll-offset:", `${_$escape(scrollbars()[axis].offset, true)}px`) + _$ssrStyleProperty(";--k2b-data-table-scroll-size:", `${_$escape(scrollbars()[axis].size, true)}px`))
412
+ })];
413
+ }
414
+ });
415
+ }
416
+ });
417
+ }
418
+ const DataTablePanel = props => {
419
+ const headingId = `k2b-data-table-${createUniqueId()}-heading`;
420
+ const [hasHeading, setHasHeading] = createSignal(false);
421
+ const context = {
422
+ headingId,
423
+ hasHeading,
424
+ registerHeading: () => setHasHeading(true)
425
+ };
426
+ return _$createComponent(DataTablePanelContext.Provider, {
427
+ value: context,
428
+ get children() {
429
+ return _$createComponent(Paper, {
430
+ as: "section",
431
+ get ["class"]() {
432
+ return `k2b-data-panel ${props.class ?? ""}`;
433
+ },
434
+ get children() {
435
+ return props.children;
436
+ }
437
+ });
438
+ }
439
+ });
440
+ };
441
+ const DataTableHeader = props => {
442
+ const panel = useContext(DataTablePanelContext);
443
+ panel?.registerHeading();
444
+ return _$ssr(_tmpl$13, `k2b-data-panel__header ${_$escape(props.class ?? "", true)}`, _$escape(_$createComponent(PanelHeader, {
445
+ get title() {
446
+ return _$ssr(_tmpl$14, _$ssrAttribute("id", _$escape(panel?.headingId, true), false), _$escape(props.title));
447
+ },
448
+ get subtitle() {
449
+ return props.subtitle;
450
+ },
451
+ get actions() {
452
+ return props.children;
453
+ },
454
+ get as() {
455
+ return props.as;
456
+ },
457
+ get size() {
458
+ return props.size;
459
+ }
460
+ })));
461
+ };
462
+ const DataTableControls = props => _$ssr(_tmpl$13, `k2b-data-panel__controls ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
463
+ const DataTablePanelFooter = props => _$ssr(_tmpl$15, `k2b-data-panel__footer ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
464
+ const DataTable = DataTableRoot;
465
+ DataTable.Panel = DataTablePanel;
466
+ DataTable.Header = DataTableHeader;
467
+ DataTable.Controls = DataTableControls;
468
+ DataTable.Footer = DataTablePanelFooter;
469
+ export default DataTable;
470
+ //# sourceMappingURL=DataTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","useContext","Dynamic","useUiMessages","useLocale","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","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","renderHeaderDefault","title","_$ssr","_tmpl$","_$escape","header","_$createComponent","when","subtitle","children","_tmpl$2","_tmpl$3","_$ssrAttribute","_tmpl$4","renderValueDefault","renderCellDefault","onRowKeyDown","rowClass","IntersectionObserver","observer","entries","some","entry","isIntersecting","root","rootMargin","observe","disconnect","ResizeObserver","rowsLength","nextHasMore","nextLoadingMore","queueMicrotask","fallback","description","noColumns","component","data-surface","data-has-footer","footer","data-overflow-x","data-overflow-y","data-scrollbar-enhanced","data-scrolling","onMouseLeave","_tmpl$7","ariaLabel","dataTable","density","scrollPreserveKey","fillHeight","stickyHeader","each","_tmpl$8","headerClass","renderHeader","render","_tmpl$9","empty","noRecords","isSelected","selectedRowId","_tmpl$0","_tmpl$1","cellClass","verticalAlign","renderCell","v","_tmpl$5","_tmpl$10","values","_tmpl$11","_tmpl$6","_tmpl$12","_$ssrStyleProperty","DataTablePanel","setHasHeading","context","registerHeading","Provider","as","DataTableHeader","_tmpl$13","_tmpl$14","actions","DataTableControls","DataTablePanelFooter","_tmpl$15","DataTable","Panel","Header","Controls","Footer"],"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 { useUiMessages } from \"../intl/messages\";\nimport { useLocale } from \"../intl/locale\";\nimport { PanelHeader } from \"../layout/PanelHeader\";\nimport { Paper } from \"../surfaces/Paper\";\nimport Placeholder from \"../surfaces/Placeholder\";\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 rowClass?: string | ((row: T) => string | undefined);\n hoverRows?: boolean;\n onRowClick?: (row: T) => void;\n onRowDoubleClick?: (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 \"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.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 sort = sortLinkFor(col);\n if (!sort) return undefined;\n if (!sort.active) 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 if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n (props.onRowClick ?? props.onRowDoubleClick)?.(row);\n };\n\n const onRowClick = (event: MouseEvent, row: T) => {\n if (isNestedRowControl(event)) return;\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 = () => props.selectedRowId && id() === props.selectedRowId;\n return (\n <tr\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 tabIndex={isInteractive() ? 0 : undefined}\n onClick={(event) => onRowClick(event, row)}\n onDblClick={(event) => onRowDoubleClick(event, 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":[]}