@lavalogic/scoria 0.35.0 → 0.37.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 (555) hide show
  1. package/README.md +58 -58
  2. package/dist/Components/AccordionGroup.svelte +46 -42
  3. package/dist/Components/AccordionGroupButton.svelte +106 -106
  4. package/dist/Components/AccordionGroupButtonProps.d.ts +27 -8
  5. package/dist/Components/AccordionGroupProps.d.ts +10 -2
  6. package/dist/Components/Action.svelte +137 -139
  7. package/dist/Components/ActionProps.d.ts +23 -3
  8. package/dist/Components/AlertModal.svelte +176 -125
  9. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +1126 -0
  10. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte.d.ts +4 -0
  11. package/dist/Components/AppointmentCalendar/AppointmentCalendarProps.d.ts +92 -0
  12. package/dist/Components/AppointmentCalendar/AppointmentCalendarProps.js +12 -0
  13. package/dist/Components/Base/BaseModal.svelte +172 -0
  14. package/dist/Components/Base/BaseModal.svelte.d.ts +4 -0
  15. package/dist/Components/Base/BaseModalProps.d.ts +73 -0
  16. package/dist/Components/Base/BaseModalProps.js +1 -0
  17. package/dist/Components/Base/ContextWrapper.svelte +72 -50
  18. package/dist/Components/Base/ContextWrapper.svelte.d.ts +24 -5
  19. package/dist/Components/Base/ContextWrapperProps.d.ts +22 -0
  20. package/dist/Components/Base/Pagination.svelte +198 -190
  21. package/dist/Components/Base/Pagination.svelte.d.ts +12 -2
  22. package/dist/Components/Base/PaginationProps.d.ts +60 -3
  23. package/dist/Components/Base/Snippets.svelte +36 -29
  24. package/dist/Components/Base/Snippets.svelte.d.ts +5 -1
  25. package/dist/Components/BigRadioSet.svelte +39 -30
  26. package/dist/Components/BigRadioSetProps.d.ts +17 -1
  27. package/dist/Components/Bubble.svelte +110 -77
  28. package/dist/Components/Bubble.svelte.d.ts +23 -2
  29. package/dist/Components/BubbleProps.d.ts +55 -4
  30. package/dist/Components/Button.svelte +209 -197
  31. package/dist/Components/ButtonProps.d.ts +66 -1
  32. package/dist/Components/Checkbox.svelte +100 -72
  33. package/dist/Components/Checkbox.svelte.d.ts +1 -12
  34. package/dist/Components/CheckboxProps.d.ts +27 -0
  35. package/dist/Components/CheckboxProps.js +1 -0
  36. package/dist/Components/CollapsibleCard.svelte +114 -83
  37. package/dist/Components/CollapsibleCardProps.d.ts +22 -1
  38. package/dist/Components/Contexts/ContextMenu.svelte +178 -157
  39. package/dist/Components/Contexts/ContextMenu.svelte.d.ts +26 -0
  40. package/dist/Components/Contexts/ContextMenuDivider.svelte +19 -11
  41. package/dist/Components/Contexts/ContextMenuDivider.svelte.d.ts +9 -0
  42. package/dist/Components/Contexts/ContextMenuOption.svelte +66 -57
  43. package/dist/Components/Contexts/ContextMenuOption.svelte.d.ts +12 -1
  44. package/dist/Components/Contexts/ContextMenuOptionProps.d.ts +34 -2
  45. package/dist/Components/Contexts/Toast.svelte +88 -64
  46. package/dist/Components/Contexts/Toast.svelte.d.ts +14 -0
  47. package/dist/Components/Contexts/ToastContainer.svelte +68 -49
  48. package/dist/Components/Contexts/ToastContainer.svelte.d.ts +14 -0
  49. package/dist/Components/Contexts/ToastProps.d.ts +14 -1
  50. package/dist/Components/Contexts/Tooltip.svelte +47 -36
  51. package/dist/Components/Contexts/Tooltip.svelte.d.ts +10 -0
  52. package/dist/Components/DataMatrixIcon.svelte +113 -42
  53. package/dist/Components/DataMatrixIconProps.d.ts +73 -1
  54. package/dist/Components/DateInput.svelte +144 -109
  55. package/dist/Components/DateInput.svelte.d.ts +1 -1
  56. package/dist/Components/DateOnlyInputProps.d.ts +31 -5
  57. package/dist/Components/DatePicker.svelte +301 -313
  58. package/dist/Components/DatePickerProps.d.ts +18 -1
  59. package/dist/Components/DateTimeInputProps.d.ts +30 -5
  60. package/dist/Components/DesktopModal.svelte +90 -119
  61. package/dist/Components/DesktopModalProps.d.ts +5 -4
  62. package/dist/Components/Dial.svelte +213 -151
  63. package/dist/Components/DialProps.d.ts +74 -2
  64. package/dist/Components/DimensionInput.svelte +171 -185
  65. package/dist/Components/DimensionInput.svelte.d.ts +1 -1
  66. package/dist/Components/DimensionInputProps.d.ts +39 -4
  67. package/dist/Components/DragMenu/DragMenuHolder.svelte +119 -107
  68. package/dist/Components/DragMenu/DragMenuHolderProps.d.ts +30 -1
  69. package/dist/Components/DragMenu/DraggableCard.svelte +77 -41
  70. package/dist/Components/DragMenu/DraggableCardProps.d.ts +27 -1
  71. package/dist/Components/FileCard.svelte +24 -20
  72. package/dist/Components/FileCardProps.d.ts +17 -1
  73. package/dist/Components/FileUpload.svelte +236 -196
  74. package/dist/Components/FileUploadProps.d.ts +34 -4
  75. package/dist/Components/GridInput.svelte +201 -191
  76. package/dist/Components/GridInput.svelte.d.ts +5 -5
  77. package/dist/Components/GridInputProps.d.ts +4 -1
  78. package/dist/Components/GridInputSet.svelte +31 -24
  79. package/dist/Components/GridInputSet.svelte.d.ts +5 -5
  80. package/dist/Components/GridInputSetProps.d.ts +4 -2
  81. package/dist/Components/HorizontalTabGroup.svelte +81 -79
  82. package/dist/Components/HorizontalTabGroupButton.svelte +51 -103
  83. package/dist/Components/HorizontalTabGroupProps.d.ts +15 -2
  84. package/dist/Components/Icon.svelte +144 -103
  85. package/dist/Components/IconProps.d.ts +54 -6
  86. package/dist/Components/Icons.d.ts +8 -0
  87. package/dist/Components/Icons.js +591 -572
  88. package/dist/Components/LoadingAnimation.svelte +39 -39
  89. package/dist/Components/LoadingAnimation.svelte.d.ts +1 -3
  90. package/dist/Components/LoadingAnimationProps.d.ts +16 -0
  91. package/dist/Components/LoadingAnimationProps.js +1 -0
  92. package/dist/Components/LoadingModal.svelte +48 -50
  93. package/dist/Components/LoadingModal.svelte.d.ts +1 -4
  94. package/dist/Components/LoadingModalProps.d.ts +17 -0
  95. package/dist/Components/LoadingModalProps.js +1 -0
  96. package/dist/Components/LoadingOverlay.svelte +28 -30
  97. package/dist/Components/LoadingOverlay.svelte.d.ts +1 -5
  98. package/dist/Components/LoadingOverlayProps.d.ts +28 -0
  99. package/dist/Components/LoadingOverlayProps.js +1 -0
  100. package/dist/Components/Modal.svelte +250 -255
  101. package/dist/Components/Modal.svelte.d.ts +1 -25
  102. package/dist/Components/ModalProps.d.ts +65 -0
  103. package/dist/Components/ModalProps.js +1 -0
  104. package/dist/Components/MultiSelect.svelte +238 -226
  105. package/dist/Components/MultiSelectCommonProps.d.ts +33 -4
  106. package/dist/Components/MultiSelectPropsAsObject.d.ts +5 -0
  107. package/dist/Components/MultiSelectPropsAsPrimitive.d.ts +6 -0
  108. package/dist/Components/Nav/CallbackButtonWithIcon.d.ts +22 -1
  109. package/dist/Components/Nav/Nav.svelte +115 -110
  110. package/dist/Components/Nav/Nav.svelte.d.ts +23 -2
  111. package/dist/Components/Nav/NavProps.d.ts +50 -3
  112. package/dist/Components/Nav/NavServiceMenuList.svelte +44 -35
  113. package/dist/Components/Nav/NavServiceMenuListProps.d.ts +25 -1
  114. package/dist/Components/Nav/NavTab.svelte +62 -91
  115. package/dist/Components/Nav/NavTab.svelte.d.ts +23 -2
  116. package/dist/Components/Nav/NavTabProps.d.ts +16 -2
  117. package/dist/Components/Nav/ServiceMenuItem.svelte +101 -92
  118. package/dist/Components/Nav/ServicesNav.svelte +96 -70
  119. package/dist/Components/Nav/ServicesNav.svelte.d.ts +23 -2
  120. package/dist/Components/Nav/ServicesNavProps.d.ts +20 -4
  121. package/dist/Components/Nav/SideMenuItemProps.d.ts +16 -0
  122. package/dist/Components/NumberInput.svelte +155 -145
  123. package/dist/Components/NumberInputProps.d.ts +37 -0
  124. package/dist/Components/PageHeading.svelte +25 -36
  125. package/dist/Components/PageHeading.svelte.d.ts +1 -6
  126. package/dist/Components/PageHeadingProps.d.ts +23 -0
  127. package/dist/Components/PageHeadingProps.js +1 -0
  128. package/dist/Components/PasswordInput.svelte +85 -73
  129. package/dist/Components/PasswordInput.svelte.d.ts +2 -2
  130. package/dist/Components/PasswordInputProps.d.ts +21 -0
  131. package/dist/Components/PasswordInputProps.js +1 -0
  132. package/dist/Components/Portal.svelte +36 -25
  133. package/dist/Components/PortalProps.d.ts +20 -1
  134. package/dist/Components/ProgressBubble.svelte +129 -84
  135. package/dist/Components/ProgressBubbleProps.d.ts +23 -2
  136. package/dist/Components/QuerySelect.svelte +384 -440
  137. package/dist/Components/QuerySelect.svelte.d.ts +2 -29
  138. package/dist/Components/QuerySelectProps.d.ts +66 -0
  139. package/dist/Components/QuerySelectProps.js +1 -0
  140. package/dist/Components/SingleSelect.svelte +268 -290
  141. package/dist/Components/SingleSelectCommonProps.d.ts +43 -5
  142. package/dist/Components/SingleSelectPropsAsObject.d.ts +7 -0
  143. package/dist/Components/SingleSelectPropsAsPrimitive.d.ts +8 -0
  144. package/dist/Components/StepButton.svelte +70 -120
  145. package/dist/Components/StepForm.svelte +147 -147
  146. package/dist/Components/StepFormProps.d.ts +16 -2
  147. package/dist/Components/Switch.svelte +84 -47
  148. package/dist/Components/Switch.svelte.d.ts +1 -1
  149. package/dist/Components/SwitchProps.d.ts +46 -0
  150. package/dist/Components/Table/Body/HeightData.d.ts +1 -6
  151. package/dist/Components/Table/Body/HeightData.js +8 -0
  152. package/dist/Components/Table/Body/QuickSearchCell.svelte +697 -641
  153. package/dist/Components/Table/Body/QuickSearchCell.svelte.d.ts +12 -11
  154. package/dist/Components/Table/Body/QuickSearchCellProps.d.ts +6 -0
  155. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +68 -34
  156. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte.d.ts +24 -2
  157. package/dist/Components/Table/Body/Rows/ColumnHighlightProps.d.ts +3 -0
  158. package/dist/Components/Table/Body/Rows/ColumnList.svelte +66 -56
  159. package/dist/Components/Table/Body/Rows/ColumnList.svelte.d.ts +12 -11
  160. package/dist/Components/Table/Body/Rows/ColumnListProps.d.ts +1 -0
  161. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +515 -182
  162. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte.d.ts +12 -11
  163. package/dist/Components/Table/Body/Rows/ColumnListRowProps.d.ts +5 -0
  164. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +79 -49
  165. package/dist/Components/Table/Body/Rows/Columns/AccessorComponentProps.d.ts +12 -0
  166. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +203 -191
  167. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte.d.ts +12 -12
  168. package/dist/Components/Table/Body/Rows/Columns/ActionsColumn.d.ts +9 -0
  169. package/dist/Components/Table/Body/Rows/Columns/ActionsTableCell.d.ts +5 -0
  170. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +150 -115
  171. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte.d.ts +14 -13
  172. package/dist/Components/Table/Body/Rows/Columns/BubbleCellProps.d.ts +12 -0
  173. package/dist/Components/Table/Body/Rows/Columns/BubbleCellProps.js +1 -0
  174. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +149 -129
  175. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +149 -126
  176. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte.d.ts +12 -11
  177. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCellProps.d.ts +7 -0
  178. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +142 -108
  179. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte.d.ts +17 -11
  180. package/dist/Components/Table/Body/Rows/Columns/RowSelectionColumn.d.ts +8 -0
  181. package/dist/Components/Table/Body/Rows/Columns/RowSelectionTableCell.d.ts +5 -0
  182. package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +11 -0
  183. package/dist/Components/Table/Body/Rows/Columns/SelectTableCell.d.ts +11 -0
  184. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +87 -72
  185. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte.d.ts +11 -0
  186. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +148 -137
  187. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte.d.ts +13 -18
  188. package/dist/Components/Table/Body/Rows/Columns/TableCheckboxProps.d.ts +17 -0
  189. package/dist/Components/Table/Body/Rows/Columns/TableCheckboxProps.js +1 -0
  190. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +159 -144
  191. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte.d.ts +1 -7
  192. package/dist/Components/Table/Body/Rows/Columns/TableColumnProps.d.ts +16 -0
  193. package/dist/Components/Table/Body/Rows/Columns/TableColumnProps.js +1 -0
  194. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +279 -249
  195. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte.d.ts +12 -11
  196. package/dist/Components/Table/Body/Rows/Columns/TableDatePickerProps.d.ts +9 -0
  197. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +249 -370
  198. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte.d.ts +20 -12
  199. package/dist/Components/Table/Body/Rows/Columns/TableQueryCell.d.ts +8 -0
  200. package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +9 -0
  201. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +291 -354
  202. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte.d.ts +12 -11
  203. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelectProps.d.ts +8 -0
  204. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +201 -189
  205. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte.d.ts +2 -5
  206. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckboxProps.d.ts +14 -0
  207. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckboxProps.js +1 -0
  208. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +263 -325
  209. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte.d.ts +13 -12
  210. package/dist/Components/Table/Body/Rows/Columns/TableSelectProps.d.ts +6 -0
  211. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +230 -381
  212. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte.d.ts +12 -11
  213. package/dist/Components/Table/Body/Rows/Columns/TableTextInputProps.d.ts +6 -0
  214. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +187 -177
  215. package/dist/Components/Table/Body/Rows/Columns/_helpers/useAsyncEditable.svelte.d.ts +104 -0
  216. package/dist/Components/Table/Body/Rows/Columns/_helpers/useAsyncEditable.svelte.js +215 -0
  217. package/dist/Components/Table/Body/Rows/TableRow.svelte +331 -263
  218. package/dist/Components/Table/Body/Rows/TableRow.svelte.d.ts +2 -10
  219. package/dist/Components/Table/Body/Rows/TableRowProps.d.ts +11 -2
  220. package/dist/Components/Table/Body/TableBody.svelte +198 -81
  221. package/dist/Components/Table/Body/TableBody.svelte.d.ts +15 -22
  222. package/dist/Components/Table/Body/TableBodyProps.d.ts +9 -7
  223. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +18 -12
  224. package/dist/Components/Table/ColumnFactory.svelte.d.ts +43 -0
  225. package/dist/Components/Table/ColumnFactory.svelte.js +339 -0
  226. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +41 -39
  227. package/dist/Components/Table/Headers/HighlightAllHeader.svelte.d.ts +12 -11
  228. package/dist/Components/Table/Headers/SelectAllHeader.svelte +30 -28
  229. package/dist/Components/Table/Headers/SelectAllHeader.svelte.d.ts +12 -11
  230. package/dist/Components/Table/Headers/TableHead.svelte +434 -294
  231. package/dist/Components/Table/Headers/TableHead.svelte.d.ts +13 -16
  232. package/dist/Components/Table/Headers/TableHeadProps.d.ts +10 -0
  233. package/dist/Components/Table/Headers/TableHeadProps.js +1 -0
  234. package/dist/Components/Table/Misc/ColumnPanel.svelte +154 -96
  235. package/dist/Components/Table/Misc/ColumnPanel.svelte.d.ts +12 -11
  236. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +112 -99
  237. package/dist/Components/Table/Misc/ColumnPanelModal.svelte.d.ts +12 -11
  238. package/dist/Components/Table/Misc/ColumnPanelModalProps.d.ts +5 -0
  239. package/dist/Components/Table/Misc/FilterInput.svelte +545 -556
  240. package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -11
  241. package/dist/Components/Table/Misc/FilterPanel.svelte +409 -51
  242. package/dist/Components/Table/Misc/FilterPanel.svelte.d.ts +12 -11
  243. package/dist/Components/Table/Misc/FilterPanelModal.svelte +30 -77
  244. package/dist/Components/Table/Misc/FilterPanelModal.svelte.d.ts +2 -23
  245. package/dist/Components/Table/Misc/SidePanel.svelte +35 -32
  246. package/dist/Components/Table/Misc/SidePanel.svelte.d.ts +1 -7
  247. package/dist/Components/Table/Misc/SidePanelProps.d.ts +17 -0
  248. package/dist/Components/Table/Misc/SidePanelProps.js +1 -0
  249. package/dist/Components/Table/Misc/TableFooter.svelte +315 -306
  250. package/dist/Components/Table/Misc/TableFooter.svelte.d.ts +13 -14
  251. package/dist/Components/Table/Misc/TableFooterProps.d.ts +8 -0
  252. package/dist/Components/Table/Misc/TableFooterProps.js +1 -0
  253. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +126 -157
  254. package/dist/Components/Table/Misc/TableHorizontalBar.svelte.d.ts +12 -11
  255. package/dist/Components/Table/Misc/TableSidebar.svelte +158 -177
  256. package/dist/Components/Table/Misc/TableSidebar.svelte.d.ts +12 -11
  257. package/dist/Components/Table/Misc/ToolboxPanel.svelte +147 -81
  258. package/dist/Components/Table/Misc/ToolboxPanel.svelte.d.ts +12 -11
  259. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +107 -100
  260. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte.d.ts +12 -11
  261. package/dist/Components/Table/Misc/ToolboxPanelModalProps.d.ts +5 -0
  262. package/dist/Components/Table/Misc/numberDateFilterTypes.d.ts +7 -4
  263. package/dist/Components/Table/Misc/numberDateFilterTypes.js +8 -3
  264. package/dist/Components/Table/Misc/stringFilterTypes.d.ts +6 -4
  265. package/dist/Components/Table/Misc/stringFilterTypes.js +7 -3
  266. package/dist/Components/Table/NestedTable.svelte +132 -88
  267. package/dist/Components/Table/NestedTable.svelte.d.ts +2 -10
  268. package/dist/Components/Table/NestedTableProps.d.ts +25 -0
  269. package/dist/Components/Table/NestedTableProps.js +1 -0
  270. package/dist/Components/Table/SubApis.svelte.d.ts +23 -0
  271. package/dist/Components/Table/SubApis.svelte.js +359 -0
  272. package/dist/Components/Table/Table.svelte +694 -519
  273. package/dist/Components/Table/Table.svelte.d.ts +24 -1
  274. package/dist/Components/Table/TableHelpers.svelte.d.ts +58 -0
  275. package/dist/Components/Table/TableHelpers.svelte.js +88 -0
  276. package/dist/Components/Table/Types/Columns/Column.d.ts +10 -0
  277. package/dist/Components/Table/Types/Columns/ColumnPinningState.d.ts +12 -0
  278. package/dist/Components/Table/Types/Columns/ColumnSizingState.d.ts +8 -0
  279. package/dist/Components/Table/Types/Columns/ColumnType.d.ts +17 -0
  280. package/dist/Components/Table/Types/Columns/ColumnType.js +18 -1
  281. package/dist/Components/Table/Types/Columns/DateColumn.d.ts +6 -0
  282. package/dist/Components/Table/Types/Columns/DateTableCell.d.ts +7 -0
  283. package/dist/Components/Table/Types/Columns/Definitions/AccessorFn.d.ts +13 -0
  284. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +28 -3
  285. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.js +15 -0
  286. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.d.ts +10 -0
  287. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.js +11 -1
  288. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.d.ts +23 -2
  289. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js +9 -2
  290. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +21 -2
  291. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.js +8 -0
  292. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +29 -3
  293. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js +11 -0
  294. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.d.ts +23 -0
  295. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.js +8 -0
  296. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +31 -0
  297. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.js +17 -3
  298. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.d.ts +21 -2
  299. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.js +7 -0
  300. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +29 -1
  301. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +17 -3
  302. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +122 -11
  303. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.js +77 -11
  304. package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.d.ts +9 -0
  305. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.d.ts +41 -1
  306. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js +16 -0
  307. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.d.ts +19 -1
  308. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.js +12 -1
  309. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.d.ts +11 -0
  310. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.js +6 -3
  311. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.d.ts +19 -0
  312. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.js +25 -1
  313. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.d.ts +26 -0
  314. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.js +20 -5
  315. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +43 -7
  316. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.js +18 -3
  317. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.d.ts +19 -5
  318. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.js +16 -5
  319. package/dist/Components/Table/Types/Columns/Definitions/JSONColumnDefSet.d.ts +14 -0
  320. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +34 -2
  321. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +30 -7
  322. package/dist/Components/Table/Types/Columns/Definitions/ValidationFn.d.ts +17 -0
  323. package/dist/Components/Table/Types/Columns/DefsWrapper.d.ts +10 -0
  324. package/dist/Components/Table/Types/Columns/DisplayType.d.ts +13 -0
  325. package/dist/Components/Table/Types/Columns/DisplayType.js +14 -1
  326. package/dist/Components/Table/Types/Columns/ExpandColumn.d.ts +5 -0
  327. package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +7 -0
  328. package/dist/Components/Table/Types/Columns/JSONColumnPinningState.d.ts +6 -0
  329. package/dist/Components/Table/Types/Columns/ProgressBarColumn.d.ts +5 -0
  330. package/dist/Components/Table/Types/Columns/ProgressBarTableCell.d.ts +9 -0
  331. package/dist/Components/Table/Types/Columns/TableActionButton.d.ts +12 -0
  332. package/dist/Components/Table/Types/Columns/TableCell.d.ts +16 -2
  333. package/dist/Components/Table/Types/Columns/VisibilityState.d.ts +12 -0
  334. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.d.ts +173 -0
  335. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.js +241 -0
  336. package/dist/Components/Table/Types/Context/FilteringState.svelte.d.ts +166 -0
  337. package/dist/Components/Table/Types/Context/FilteringState.svelte.js +180 -0
  338. package/dist/Components/Table/Types/Context/FocusState.svelte.d.ts +316 -0
  339. package/dist/Components/Table/Types/Context/FocusState.svelte.js +751 -0
  340. package/dist/Components/Table/Types/Context/ITable.d.ts +10 -0
  341. package/dist/Components/Table/Types/Context/PreferencesState.svelte.d.ts +242 -0
  342. package/dist/Components/Table/Types/Context/PreferencesState.svelte.js +317 -0
  343. package/dist/Components/Table/Types/Context/ReadonlyRowModel.d.ts +14 -3
  344. package/dist/Components/Table/Types/Context/Row.d.ts +18 -0
  345. package/dist/Components/Table/Types/Context/RowModel.d.ts +11 -0
  346. package/dist/Components/Table/Types/Context/SelectionState.svelte.d.ts +260 -0
  347. package/dist/Components/Table/Types/Context/SelectionState.svelte.js +613 -0
  348. package/dist/Components/Table/Types/Context/SortingState.svelte.d.ts +112 -0
  349. package/dist/Components/Table/Types/Context/SortingState.svelte.js +272 -0
  350. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +547 -53
  351. package/dist/Components/Table/Types/Context/TableContext.svelte.js +959 -1259
  352. package/dist/Components/Table/Types/Context/TableInitOptions.d.ts +16 -0
  353. package/dist/Components/Table/Types/Context/TableSettings.d.ts +20 -0
  354. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.d.ts +167 -0
  355. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.js +226 -0
  356. package/dist/Components/Table/Types/Coordinates/CellCoordinates.d.ts +12 -0
  357. package/dist/Components/Table/Types/Coordinates/CellCoordinatesWithoutColumn.d.ts +5 -0
  358. package/dist/Components/Table/Types/Coordinates/ColumnIndices.d.ts +16 -2
  359. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.d.ts +143 -0
  360. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.js +454 -0
  361. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +21 -0
  362. package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +10 -0
  363. package/dist/Components/Table/Types/DataRepository/IRemoteDataRepository.d.ts +16 -0
  364. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.d.ts +87 -3
  365. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.js +112 -7
  366. package/dist/Components/Table/Types/DataRepository/SortingState.d.ts +12 -0
  367. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +87 -2
  368. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +74 -1
  369. package/dist/Components/Table/Types/ExpandedPanel.d.ts +9 -0
  370. package/dist/Components/Table/Types/ExpandedPanel.js +10 -1
  371. package/dist/Components/Table/Types/Filtering/ColumnFiltersState.d.ts +17 -0
  372. package/dist/Components/Table/Types/Filtering/CustomFilter.d.ts +21 -0
  373. package/dist/Components/Table/Types/Filtering/CustomFilterType.d.ts +5 -0
  374. package/dist/Components/Table/Types/Filtering/CustomFilterType.js +6 -1
  375. package/dist/Components/Table/Types/Filtering/CustomRemoteFilters.d.ts +6 -0
  376. package/dist/Components/Table/Types/Filtering/FilterFn.d.ts +28 -0
  377. package/dist/Components/Table/Types/Filtering/FilterMode.d.ts +7 -0
  378. package/dist/Components/Table/Types/Filtering/FilterType.d.ts +8 -0
  379. package/dist/Components/Table/Types/Filtering/FilterType.js +9 -1
  380. package/dist/Components/Table/Types/Filtering/FilterValueType.d.ts +11 -0
  381. package/dist/Components/Table/Types/Filtering/FilterValueType.js +12 -1
  382. package/dist/Components/Table/Types/Filtering/HasCustomFilterFunction.d.ts +23 -2
  383. package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.d.ts +19 -12
  384. package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.js +18 -14
  385. package/dist/Components/Table/Types/Filtering/StringFilterMode.d.ts +22 -15
  386. package/dist/Components/Table/Types/Filtering/StringFilterMode.js +22 -16
  387. package/dist/Components/Table/Types/Focus/MultiFocusEdge.d.ts +8 -0
  388. package/dist/Components/Table/Types/Focus/MultiFocusEdge.js +9 -1
  389. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.d.ts +22 -0
  390. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.js +22 -0
  391. package/dist/Components/Table/Types/Header.d.ts +8 -0
  392. package/dist/Components/Table/Types/HeaderGroup.d.ts +7 -0
  393. package/dist/Components/Table/Types/Layout/CellPinning.d.ts +1 -0
  394. package/dist/Components/Table/Types/Layout/CellPinning.js +8 -0
  395. package/dist/Components/Table/Types/OnChangeFn.d.ts +11 -0
  396. package/dist/Components/Table/Types/Pagination/PaginationState.d.ts +9 -0
  397. package/dist/Components/Table/Types/Pagination/PaginationType.d.ts +10 -0
  398. package/dist/Components/Table/Types/Pagination/PaginationType.js +11 -1
  399. package/dist/Components/Table/Types/Public/AnyEditEvent.d.ts +30 -0
  400. package/dist/Components/Table/Types/Public/AnyEditEvent.js +1 -0
  401. package/dist/Components/Table/Types/Public/BaseColumnOptions.d.ts +44 -0
  402. package/dist/Components/Table/Types/Public/BaseColumnOptions.js +1 -0
  403. package/dist/Components/Table/Types/Public/ColumnFactory.d.ts +35 -0
  404. package/dist/Components/Table/Types/Public/ColumnFactory.js +1 -0
  405. package/dist/Components/Table/Types/Public/ColumnOptions.d.ts +238 -0
  406. package/dist/Components/Table/Types/Public/ColumnOptions.js +1 -0
  407. package/dist/Components/Table/Types/Public/ColumnSpec.d.ts +39 -0
  408. package/dist/Components/Table/Types/Public/ColumnSpec.js +1 -0
  409. package/dist/Components/Table/Types/Public/CreateTableOptions.d.ts +87 -0
  410. package/dist/Components/Table/Types/Public/CreateTableOptions.js +1 -0
  411. package/dist/Components/Table/Types/Public/KeyConstraints.d.ts +42 -0
  412. package/dist/Components/Table/Types/Public/KeyConstraints.js +22 -0
  413. package/dist/Components/Table/Types/Public/RowSource.d.ts +87 -0
  414. package/dist/Components/Table/Types/Public/RowSource.js +1 -0
  415. package/dist/Components/Table/Types/Public/SelectionOptions.d.ts +26 -0
  416. package/dist/Components/Table/Types/Public/SelectionOptions.js +1 -0
  417. package/dist/Components/Table/Types/Public/Table.d.ts +39 -0
  418. package/dist/Components/Table/Types/Public/Table.js +1 -0
  419. package/dist/Components/Table/Types/Public/TableInitialState.d.ts +26 -0
  420. package/dist/Components/Table/Types/Public/TableInitialState.js +1 -0
  421. package/dist/Components/Table/Types/Public/TablePersistence.d.ts +38 -0
  422. package/dist/Components/Table/Types/Public/TablePersistence.js +1 -0
  423. package/dist/Components/Table/Types/Public/TableSubApis.d.ts +157 -0
  424. package/dist/Components/Table/Types/Public/TableSubApis.js +1 -0
  425. package/dist/Components/Table/Types/Public/index.d.ts +20 -0
  426. package/dist/Components/Table/Types/Public/index.js +8 -0
  427. package/dist/Components/Table/Types/Toolbar/ToolbarPosition.d.ts +4 -0
  428. package/dist/Components/Table/Types/Toolbar/ToolbarPosition.js +5 -1
  429. package/dist/Components/Table/createTable.svelte.d.ts +53 -0
  430. package/dist/Components/Table/createTable.svelte.js +269 -0
  431. package/dist/Components/Test/TestContextConsumer.svelte +13 -13
  432. package/dist/Components/TextArea.svelte +127 -108
  433. package/dist/Components/TextAreaProps.d.ts +37 -0
  434. package/dist/Components/TextInput.svelte +166 -147
  435. package/dist/Components/TextInputProps.d.ts +58 -1
  436. package/dist/Components/ThreeStateRadio.svelte +140 -143
  437. package/dist/Components/ThreeStateRadioProps.d.ts +29 -1
  438. package/dist/Components/Touch/BoolCard.svelte +45 -52
  439. package/dist/Components/Touch/BoolCard.svelte.d.ts +1 -10
  440. package/dist/Components/Touch/BoolCardProps.d.ts +21 -0
  441. package/dist/Components/Touch/BoolCardProps.js +1 -0
  442. package/dist/Components/Touch/DateModal.svelte +209 -217
  443. package/dist/Components/Touch/DateModal.svelte.d.ts +1 -17
  444. package/dist/Components/Touch/DateModalProps.d.ts +36 -0
  445. package/dist/Components/Touch/DateModalProps.js +1 -0
  446. package/dist/Components/Touch/EditCard.svelte +59 -52
  447. package/dist/Components/Touch/EditCardProps.d.ts +21 -0
  448. package/dist/Components/Touch/InfoCard.svelte +35 -28
  449. package/dist/Components/Touch/InfoCardProps.d.ts +9 -0
  450. package/dist/Components/Touch/InfoTextCard.svelte +28 -21
  451. package/dist/Components/Touch/InfoTextCardProps.d.ts +8 -0
  452. package/dist/Components/Touch/ModalExplanation.svelte +17 -20
  453. package/dist/Components/Touch/ModalExplanation.svelte.d.ts +1 -6
  454. package/dist/Components/Touch/ModalExplanationProps.d.ts +22 -0
  455. package/dist/Components/Touch/ModalExplanationProps.js +1 -0
  456. package/dist/Components/Touch/NumberKeyboard.svelte +225 -268
  457. package/dist/Components/Touch/NumberKeyboardProps.d.ts +19 -0
  458. package/dist/Components/Touch/NumberModal.svelte +79 -69
  459. package/dist/Components/Touch/NumberModalProps.d.ts +23 -1
  460. package/dist/Components/Touch/PlusMinusCard.svelte +48 -52
  461. package/dist/Components/Touch/PlusMinusCard.svelte.d.ts +1 -6
  462. package/dist/Components/Touch/PlusMinusCardProps.d.ts +18 -0
  463. package/dist/Components/Touch/PlusMinusCardProps.js +1 -0
  464. package/dist/Components/Touch/SelectModal.svelte +123 -105
  465. package/dist/Components/Touch/SelectModalProps.d.ts +22 -1
  466. package/dist/Components/Touch/SummaryCard.svelte +107 -65
  467. package/dist/Components/Touch/SummaryCardProps.d.ts +16 -3
  468. package/dist/Components/Touch/TextAreaModal.svelte +95 -86
  469. package/dist/Components/Touch/TextAreaModalProps.d.ts +21 -0
  470. package/dist/Components/Touch/TextModal.svelte +106 -123
  471. package/dist/Components/Touch/TextModalProps.d.ts +28 -1
  472. package/dist/Components/Touch/TouchCard.svelte +34 -72
  473. package/dist/Components/Touch/TouchCardProps.d.ts +21 -0
  474. package/dist/Components/Touch/TouchModal.svelte +265 -259
  475. package/dist/Components/Touch/TouchModalProps.d.ts +35 -1
  476. package/dist/Components/Touch/UtilityButton.svelte +116 -98
  477. package/dist/Components/Touch/UtilityButtonProps.d.ts +16 -0
  478. package/dist/Components/VerticalTabGroup.svelte +80 -102
  479. package/dist/Components/VerticalTabGroupButton.svelte +59 -98
  480. package/dist/Components/VerticalTabGroupProps.d.ts +15 -2
  481. package/dist/Contexts/AlertContext.svelte.d.ts +92 -8
  482. package/dist/Contexts/AlertContext.svelte.js +69 -6
  483. package/dist/Contexts/ContextMenuContext.svelte.d.ts +54 -8
  484. package/dist/Contexts/ContextMenuContext.svelte.js +48 -2
  485. package/dist/Contexts/TestContext.svelte.d.ts +27 -1
  486. package/dist/Contexts/TestContext.svelte.js +29 -1
  487. package/dist/Contexts/ToastContext.svelte.d.ts +29 -1
  488. package/dist/Contexts/ToastContext.svelte.js +93 -24
  489. package/dist/Contexts/TooltipContext.svelte.d.ts +68 -1
  490. package/dist/Contexts/TooltipContext.svelte.js +70 -7
  491. package/dist/Contexts/UntypedInputContext.svelte.d.ts +54 -5
  492. package/dist/Contexts/UntypedInputContext.svelte.js +87 -34
  493. package/dist/Delay/Delay.js +1 -1
  494. package/dist/Helpers/AsyncFlag.svelte.d.ts +39 -0
  495. package/dist/Helpers/AsyncFlag.svelte.js +72 -0
  496. package/dist/Helpers/Datamatrix.d.ts +19 -10
  497. package/dist/Helpers/Datamatrix.js +291 -2
  498. package/dist/Helpers/Helpers.svelte.d.ts +252 -17
  499. package/dist/Helpers/Helpers.svelte.js +271 -60
  500. package/dist/Helpers/INamed.d.ts +6 -0
  501. package/dist/Helpers/Storage.d.ts +67 -0
  502. package/dist/Helpers/Storage.js +138 -0
  503. package/dist/Helpers/dropdownPortal.d.ts +52 -0
  504. package/dist/Helpers/dropdownPortal.js +232 -0
  505. package/dist/Helpers/dropdownPortal.svelte.d.ts +2 -0
  506. package/dist/Helpers/dropdownPortal.svelte.js +5 -0
  507. package/dist/Helpers/memoiseByRow.d.ts +45 -0
  508. package/dist/Helpers/memoiseByRow.js +78 -0
  509. package/dist/Helpers/prefersReducedMotion.svelte.d.ts +27 -0
  510. package/dist/Helpers/prefersReducedMotion.svelte.js +18 -0
  511. package/dist/Helpers/useTooltip.svelte.d.ts +53 -0
  512. package/dist/Helpers/useTooltip.svelte.js +62 -0
  513. package/dist/Types/Examples/ExampleModal.svelte +35 -34
  514. package/dist/Types/Examples/ExampleSelectEnum.js +1 -1
  515. package/dist/Types/Internal/AsyncFlag.d.ts +7 -0
  516. package/dist/Types/Internal/AsyncFlag.js +1 -0
  517. package/dist/Types/Internal/BigRadioOption.d.ts +8 -0
  518. package/dist/Types/Internal/ButtonProp.d.ts +24 -2
  519. package/dist/Types/Internal/CallbackButton.d.ts +12 -0
  520. package/dist/Types/Internal/DateChange.d.ts +8 -0
  521. package/dist/Types/Internal/DatePickerType.d.ts +5 -0
  522. package/dist/Types/Internal/DatePickerType.js +6 -1
  523. package/dist/Types/Internal/IdentifiableToastMessage.d.ts +8 -0
  524. package/dist/Types/Internal/InputVariant.d.ts +5 -0
  525. package/dist/Types/Internal/InputVariant.js +6 -1
  526. package/dist/Types/Internal/Misc.d.ts +91 -0
  527. package/dist/Types/Internal/RefWrapper.d.ts +6 -0
  528. package/dist/Types/Internal/SelectOption.d.ts +8 -0
  529. package/dist/Types/Internal/Shape.d.ts +1 -0
  530. package/dist/Types/Internal/Shape.js +2 -1
  531. package/dist/Types/Internal/Side.d.ts +1 -0
  532. package/dist/Types/Internal/Side.js +2 -1
  533. package/dist/Types/Internal/Size.d.ts +5 -0
  534. package/dist/Types/Internal/Size.js +6 -1
  535. package/dist/Types/Internal/TabOption.d.ts +15 -5
  536. package/dist/Types/Internal/Ternary.d.ts +6 -0
  537. package/dist/Types/Internal/Ternary.js +7 -1
  538. package/dist/Types/Internal/ToastMessage.d.ts +28 -0
  539. package/dist/Types/Internal/Validity.d.ts +6 -0
  540. package/dist/Types/Internal/Validity.js +7 -1
  541. package/dist/Types/Internal/ValidityWrapper.d.ts +8 -0
  542. package/dist/Types/Internal/Variant.d.ts +5 -0
  543. package/dist/Types/Internal/Variant.js +6 -1
  544. package/dist/index.d.ts +27 -82
  545. package/dist/index.js +24 -62
  546. package/dist/scss/_basics.scss +12 -12
  547. package/dist/scss/_colours.scss +134 -134
  548. package/dist/scss/_mixins.scss +3300 -3016
  549. package/dist/scss/_motion.scss +57 -0
  550. package/dist/scss/_sizing.scss +85 -69
  551. package/dist/scss/_transitions.scss +8 -8
  552. package/dist/scss/colours.js +2 -2
  553. package/dist/scss/sizing.d.ts +9 -0
  554. package/dist/scss/sizing.js +10 -1
  555. package/package.json +6 -2
@@ -1,494 +1,686 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- module
6
- >
7
- import {
8
- ContextMenuContext,
9
- type IContextMenuOption,
10
- } from '../../Contexts/ContextMenuContext.svelte';
11
- import { devCatch, refWrapper } from '../../Helpers/Helpers.svelte';
12
- import type { RefWrapper } from '../../Types/Internal/RefWrapper.js';
13
- import { getContext, onMount, setContext, tick, untrack } from 'svelte';
14
- import LoadingOverlay from '../LoadingOverlay.svelte';
15
- import type { HeightData } from './Body/HeightData.js';
16
- import { shownPopup } from './Body/Rows/Columns/ActionsCell.svelte';
17
- import TableBody from './Body/TableBody.svelte';
18
- import TableHead from './Headers/TableHead.svelte';
19
- import TableFooter from './Misc/TableFooter.svelte';
20
- import TableHorizontalBar from './Misc/TableHorizontalBar.svelte';
21
- import TableSidebar from './Misc/TableSidebar.svelte';
22
- import { TableContext } from './Types/Context/TableContext.svelte';
23
- import type { Primitive } from './Types/Context/TableInitOptions.js';
24
- import { PaginationType } from './Types/Pagination/PaginationType.js';
25
- import { ToolbarPosition } from './Types/Toolbar/ToolbarPosition.js';
26
-
27
- declare global {
28
- interface HTMLElementEventMap {
29
- edit: CustomEvent<{
30
- selectAll: boolean;
31
- }>;
32
- }
33
- }
34
-
35
- export interface TableProps<T extends object, IdType extends Primitive> {
36
- readonly tableContext: TableContext<T, IdType>;
37
- nested?: boolean;
38
- }
39
-
40
- export const quickFilterContextIdentifier: symbol = Symbol();
41
-
42
- const openedQuickFilterSelect = refWrapper(null);
43
- </script>
44
-
45
- <script
46
- lang="ts"
47
- generics="T extends object,IdType extends Primitive"
48
- >
49
- const { nested = false, tableContext }: TableProps<T, IdType> = $props();
50
-
51
- // NOTE: known limitation. This is passed as a wrapper, and they should never require reassignment. It is deeply reactive
52
- // svelte-ignore state_referenced_locally
53
- setContext(TableContext.identifier, tableContext);
54
-
55
- const { openContextMenu: _openContextMenu } = getContext<ContextMenuContext>(
56
- ContextMenuContext.identifier
57
- );
58
-
59
- let ref: HTMLDivElement | undefined = $state();
60
- let unfocusRef: HTMLDivElement | undefined = $state();
61
-
62
- setContext(quickFilterContextIdentifier, openedQuickFilterSelect);
63
-
64
- $effect(() => {
65
- void tableContext.focusStart;
66
- void ref;
67
- untrack(() => {
68
- if (tableContext.focusStart && ref) {
69
- const { row, column: index } = tableContext.focusStart;
70
- let element = ref.querySelector(
71
- `#${tableContext.tableName}-cell-${row}-${tableContext.columnDefs[index].id}`
72
- ) as HTMLElement | undefined;
73
-
74
- if (element?.tabIndex == -1) {
75
- const td = element;
76
- element = td.querySelector('button') as HTMLElement | undefined;
77
- if (!element) {
78
- element = td.querySelector('input') as HTMLElement | undefined;
79
- }
80
- }
81
-
82
- element?.focus({ preventScroll: true });
83
- element?.scrollIntoView({
84
- behavior: 'instant',
85
- block: 'nearest',
86
- inline: 'nearest',
87
- });
88
- }
89
- });
90
- });
91
-
92
- $effect(() => {
93
- if (tableContext.focusEnd && ref) {
94
- const { row, column: index } = tableContext.focusEnd;
95
- const cell = ref.querySelector(
96
- `#${tableContext.tableName}-cell-${row}-${tableContext.columnDefs[index].id}`
97
- ) as HTMLElement | undefined;
98
-
99
- cell?.scrollIntoView({
100
- behavior: 'instant',
101
- block: 'nearest',
102
- inline: 'nearest',
103
- });
104
- }
105
- });
106
-
107
- function openContextMenu(e: MouseEvent) {
108
- e.stopPropagation();
109
-
110
- if (
111
- (e.target as HTMLElement).tagName === 'INPUT' ||
112
- (e.target as HTMLElement).closest('.select-wrapper') != null
113
- ) {
114
- return;
115
- }
116
-
117
- const clickedElement = document.activeElement?.id.split('-cell-')[1]?.split('-');
118
-
119
- if (clickedElement) {
120
- const [rowString, columnId] = clickedElement;
121
- const row = parseInt(rowString);
122
-
123
- if (
124
- !tableContext.focusedColumnIds.has(columnId) ||
125
- !tableContext.focusedRowIndices.has(row)
126
- ) {
127
- const columnIndex = tableContext.columnDefs.find((it) => it.id === columnId)?.index;
128
-
129
- if (columnIndex) {
130
- tableContext.moveFocus({
131
- column: columnIndex,
132
- row,
133
- id: columnId,
134
- });
135
- }
136
- }
137
- }
138
-
139
- // this may not exist in http contexts
140
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
141
- if (tableContext.allowCopy && window.Clipboard) {
142
- e.preventDefault();
143
-
144
- const options: Array<IContextMenuOption> = [
145
- {
146
- callback: () => {
147
- tableContext.copyDataToClipboard().catch(devCatch);
148
- },
149
- text: 'Copy Selection',
150
- },
151
- ];
152
-
153
- if (tableContext.hasHighlightedItems) {
154
- options.push({
155
- callback: () => {
156
- tableContext.copyHighlightedRowsToClipboard().catch(devCatch);
157
- },
158
- text: 'Copy Highlighted Rows',
159
- });
160
- }
161
-
162
- _openContextMenu(e, options).catch(devCatch);
163
- }
164
- }
165
-
166
- function handleClickOutside(e: MouseEvent) {
167
- const target = e.target as HTMLElement;
168
- if (target.isConnected) {
169
- if (target.closest('div.floating') == null && target.closest('div.stick-right') == null) {
170
- openedQuickFilterSelect.value = null;
171
- }
172
-
173
- if (target.closest('div.slot-wrapper') == null) {
174
- // svelte type gen/eslint miscommunication
175
- (shownPopup as RefWrapper<symbol | undefined>).value = undefined;
176
- }
177
- }
178
- }
179
-
180
- // nested table resizing
181
- let isResizing = $state(false);
182
- let remPxRatio = $state(0);
183
- const minNestedHeight = $derived(20 * remPxRatio);
184
-
185
- // HACK please figure this one out
186
- let nestedHeight = $derived(minNestedHeight);
187
-
188
- let tableRef: HTMLDivElement | undefined = undefined;
189
- let mousedDownEmptySpace = $state(false);
190
-
191
- onMount(() => {
192
- remPxRatio = parseFloat(getComputedStyle(document.documentElement).fontSize);
193
- });
194
-
195
- function addOverrideResizeHandler() {
196
- isResizing = true;
197
- window.addEventListener('mousemove', onResize);
198
- }
199
-
200
- function onResize(e: MouseEvent) {
201
- const sliderHeight = tableRef ? e.clientY - tableRef.getBoundingClientRect().top : 0;
202
- nestedHeight = Math.max(sliderHeight, minNestedHeight);
203
- }
204
-
205
- function removeOverrideResizeHandler() {
206
- isResizing = false;
207
- window.removeEventListener('mousemove', onResize);
208
- }
209
-
210
- const usesLoading = $derived(
211
- tableContext.paginationRepo &&
212
- tableContext.paginationRepo.paginationType === PaginationType.Remote
213
- );
214
-
215
- const shouldUnfocusRemote = $derived(
216
- usesLoading &&
217
- tableContext.paginationRepo?.isLoading === false &&
218
- tableContext.paginationRepo.paginationState.pageIndex !==
219
- tableContext.paginationRepo.previouslyViewedPage
220
- );
221
-
222
- const shouldUnfocusLocal = $derived(
223
- !usesLoading && tableContext.paginationRepo?.paginationState.pageIndex
224
- );
225
-
226
- $effect(() => {
227
- if ((shouldUnfocusRemote || shouldUnfocusLocal) && unfocusRef) {
228
- untrack(() => {
229
- tableContext.unfocus();
230
- });
231
- unfocusRef.scrollTop = 0;
232
- } else if (usesLoading && tableContext.paginationRepo?.isLoading === false) {
233
- // refocus same element after a reload
234
- // this does not break mutifocus
235
- untrack(() => {
236
- const fs = tableContext.focusStart;
237
- if (!fs) {
238
- return;
239
- }
240
- const idToFocusTo = `#${tableContext.tableName}-cell-${fs.row}-${fs.id}`;
241
-
242
- tick()
243
- .then(() => {
244
- if (idToFocusTo) {
245
- (document.querySelector(idToFocusTo) as HTMLTableCellElement | undefined)?.focus();
246
- }
247
- })
248
- .catch(devCatch);
249
- });
250
- }
251
- });
252
-
253
- const leftTotalSize = $derived(tableContext.table.getLeftTotalSize());
254
- const centreTotalSize = $derived(tableContext.table.getCenterTotalSize());
255
- const rightTotalSize = $derived(tableContext.table.getRightTotalSize());
256
-
257
- const leftColumns = $derived(tableContext.table.getLeftVisibleLeafColumns());
258
- const centreColumns = $derived(tableContext.table.getCenterVisibleLeafColumns());
259
- const rightColumns = $derived(tableContext.table.getRightVisibleLeafColumns());
260
-
261
- const appropriateSide = $derived.by(() => {
262
- if (leftColumns.length > 0) {
263
- return 'left';
264
- } else if (rightColumns.length != tableContext.columnDefs.length) {
265
- return 'centre';
266
- } else {
267
- return 'right';
268
- }
269
- });
270
-
271
- type SvelteTableElement = {
272
- rowHeights: RefWrapper<Array<number>>;
273
- };
274
-
275
- let leftTable: SvelteTableElement | undefined = $state();
276
- let centreTable: SvelteTableElement | undefined = $state();
277
- let rightTable: SvelteTableElement | undefined = $state();
278
-
279
- const totalRowSizes: Array<HeightData<T>> = $derived.by(() => {
280
- if (!leftTable || !centreTable || !rightTable) {
281
- return [];
282
- }
283
-
284
- // console.debug(`got refs for all tables`);
285
- const centre = centreTable.rowHeights.value;
286
- const right = rightTable.rowHeights.value;
287
-
288
- return leftTable.rowHeights.value.map((_leftHeight, index) => {
289
- const leftHeight = _leftHeight || 0;
290
- const centreHeight = centre[index] || 0;
291
- const rightHeight = right[index] || 0;
292
-
293
- const maxHeight = Math.max(leftHeight, centreHeight, rightHeight);
294
- const applyTo: HeightData<T>['applyTo'] = [];
295
-
296
- if (leftHeight < maxHeight) {
297
- // console.debug(`left (${leftHeight}) was lower than max (${maxHeight})`);
298
- applyTo.push('left');
299
- }
300
- if (centreHeight < maxHeight) {
301
- // console.debug(`centre (${centreHeight}) was lower than max (${maxHeight})`);
302
- applyTo.push('centre');
303
- }
304
- if (rightHeight < maxHeight) {
305
- // console.debug(`right (${rightHeight}) was lower than max (${maxHeight})`);
306
- applyTo.push('right');
307
- }
308
-
309
- return {
310
- index,
311
- applyTo,
312
- maxHeight,
313
- };
314
- });
315
- });
316
- </script>
317
-
318
- <svelte:window
319
- onmouseup={(e: MouseEvent) => {
320
- if (
321
- // if it's not a click on an item in the context menu
322
- !(e.target as HTMLElement | undefined)?.classList.contains('context-menu-item') &&
323
- // if it's outside the table or inside the empty space of the table
324
- (e.target === unfocusRef ||
325
- ((e.target as HTMLElement | undefined)?.closest('.table-wrapper') == null &&
326
- mousedDownEmptySpace))
327
- ) {
328
- tableContext.unfocus();
329
- }
330
- mousedDownEmptySpace = false;
331
-
332
- if (tableContext.isMousingDown) {
333
- tableContext.isMousingDown = false;
334
- }
335
-
336
- removeOverrideResizeHandler();
337
- }}
338
- onclick={(e: MouseEvent) => {
339
- handleClickOutside(e);
340
- }}
341
- onmousedown={(e: MouseEvent) => {
342
- mousedDownEmptySpace =
343
- e.target === unfocusRef || (e.target as HTMLElement).closest('.table-wrapper') == null;
344
- }}
345
- />
346
-
347
- <div
348
- class="grid"
349
- class:nested
350
- >
351
- {#if tableContext.dataRepo.isLoading}
352
- <LoadingOverlay
353
- absolute
354
- borderRadius="4px"
355
- message={tableContext.dataRepo.loadingMessage}
356
- />
357
- {/if}
358
-
359
- <div
360
- class="horizontal-bar"
361
- class:border={tableContext.toolbarPosition === ToolbarPosition.Top}
362
- >
363
- {#if tableContext.toolbarPosition === ToolbarPosition.Top}
364
- <TableHorizontalBar />
365
- {/if}
366
- </div>
367
-
368
- <div
369
- class="sidebar-wrapper sidebar-wrapper-left"
370
- class:nested
371
- style="--nested-height: {nestedHeight}px;"
372
- >
373
- {#if tableContext.toolbarPosition === ToolbarPosition.Left}
374
- <div class="sidebar toolbar-left">
375
- <TableSidebar />
376
- </div>
377
- {/if}
378
- </div>
379
- <div
380
- class="sidebar-wrapper sidebar-wrapper-right"
381
- class:nested
382
- style="--nested-height: {nestedHeight}px;"
383
- >
384
- {#if tableContext.toolbarPosition === ToolbarPosition.Right}
385
- <div class="sidebar toolbar-right">
386
- <TableSidebar />
387
- </div>
388
- {/if}
389
- </div>
390
-
391
- <div class="footer">
392
- {#if tableContext.displayFooter}
393
- <TableFooter />
394
- {/if}
395
- </div>
396
-
397
- <!-- svelte-ignore a11y_no_static_element_interactions -->
398
- <div
399
- bind:this={tableRef}
400
- class="datatable"
401
- class:nested
402
- class:compact={tableContext.isCompact}
403
- class:quick-filtering={tableContext.showQuickFiltering}
404
- onkeydown={tableContext.handleTdKeydown}
405
- >
406
- <div
407
- class="flex_table"
408
- bind:this={ref}
409
- class:nested
410
- >
411
- <div
412
- bind:this={unfocusRef}
413
- class="table-wrapper"
414
- oncontextmenu={openContextMenu}
415
- >
416
- <!-- {#if leftTotalSize > 0} -->
417
- <table
418
- class="datatable__table left"
419
- style="min-width: {leftTotalSize}px"
420
- >
421
- <TableHead
422
- showHighlight={leftTotalSize > 0}
423
- side="left"
424
- />
425
- <TableBody
426
- includeHighlight={appropriateSide == 'left'}
427
- columns={leftColumns}
428
- side="left"
429
- heights={totalRowSizes}
430
- bind:this={leftTable}
431
- />
432
- </table>
433
- <!-- {/if} -->
434
-
435
- <!-- {#if centreTotalSize > 0} -->
436
-
437
- <table
438
- class="datatable__table centre"
439
- style="min-width: {centreTotalSize}px"
440
- >
441
- <TableHead
442
- showHighlight={leftTotalSize == 0}
443
- side="centre"
444
- />
445
- <TableBody
446
- includeHighlight={appropriateSide == 'centre'}
447
- columns={centreColumns}
448
- side="centre"
449
- heights={totalRowSizes}
450
- bind:this={centreTable}
451
- />
452
- </table>
453
- <!-- {/if} -->
454
-
455
- <!-- {#if rightTotalSize > 0} -->
456
- <table
457
- class="datatable__table right"
458
- style="min-width: {rightTotalSize}px"
459
- >
460
- <TableHead
461
- showHighlight={false}
462
- side="right"
463
- />
464
- <TableBody
465
- includeHighlight={appropriateSide == 'right'}
466
- columns={rightColumns}
467
- side="right"
468
- heights={totalRowSizes}
469
- bind:this={rightTable}
470
- />
471
- </table>
472
- <!-- {/if} -->
473
- </div>
474
-
475
- <!-- TODO add filter callbacks -->
476
- </div>
477
-
478
- {#if nested}
479
- <!-- svelte-ignore a11y_no_static_element_interactions -->
480
- <div
481
- class:isResizing
482
- class="resizer"
483
- onmousedown={(e) => {
484
- e.preventDefault();
485
- addOverrideResizeHandler();
486
- }}
487
- ></div>
488
- {/if}
489
- </div>
490
- </div>
491
-
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ module
6
+ >
7
+ import {
8
+ ContextMenuContext,
9
+ type IContextMenuOption,
10
+ } from '../../Contexts/ContextMenuContext.svelte';
11
+ import { cssLength, devCatch, refWrapper } from '../../Helpers/Helpers.svelte';
12
+ import { getContext, onMount, setContext, tick, untrack } from 'svelte';
13
+ import LoadingOverlay from '../LoadingOverlay.svelte';
14
+ import TableBody from './Body/TableBody.svelte';
15
+ import TableHead from './Headers/TableHead.svelte';
16
+ import TableFooter from './Misc/TableFooter.svelte';
17
+ import TableHorizontalBar from './Misc/TableHorizontalBar.svelte';
18
+ import TableSidebar from './Misc/TableSidebar.svelte';
19
+ import { TableContext } from './Types/Context/TableContext.svelte';
20
+ import type { Primitive } from './Types/Context/TableInitOptions.js';
21
+ import { PaginationType } from './Types/Pagination/PaginationType.js';
22
+ import { ToolbarPosition } from './Types/Toolbar/ToolbarPosition.js';
23
+
24
+ declare global {
25
+ interface HTMLElementEventMap {
26
+ edit: CustomEvent<{
27
+ selectAll: boolean;
28
+ }>;
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Top-level orchestrator props. Accepts either:
34
+ *
35
+ * - `table`: the structured `Table` instance returned by `createTable(...)`.
36
+ * This is the consumer-facing form.
37
+ * - `tableContext`: the underlying `TableContext`. Used internally by
38
+ * `NestedTable` which constructs a context directly for each
39
+ * expansion. Not intended for consumer use.
40
+ *
41
+ * Exactly one of the two must be supplied; a runtime guard inside the
42
+ * component throws if both are missing. The reference passed in is
43
+ * captured at mount via `setContext` and should not be reassigned
44
+ * afterwards.
45
+ */
46
+ export interface TableProps<T extends object, IdType extends Primitive> {
47
+ readonly table?: { readonly _context: TableContext<T, IdType> };
48
+ readonly tableContext?: TableContext<T, IdType>;
49
+ nested?: boolean;
50
+ }
51
+
52
+ /**
53
+ * Symbol used to share the currently-open quick-filter select across
54
+ * every header in a single Table tree. Stored via `setContext` on
55
+ * the same component that hosts the Table tree so multiple
56
+ * independent tables on a page each own their own popup state.
57
+ */
58
+ export const quickFilterContextIdentifier: symbol = Symbol();
59
+
60
+ const openedQuickFilterSelect = refWrapper<symbol | null>(null);
61
+ </script>
62
+
63
+ <script
64
+ lang="ts"
65
+ generics="T extends object,IdType extends Primitive"
66
+ >
67
+ const { nested = false, table, tableContext: tableContextProp }: TableProps<T, IdType> = $props();
68
+
69
+ // Resolve the underlying TableContext from whichever prop the caller
70
+ // passed. Consumers pass `table` (the structured instance); the
71
+ // internal `NestedTable` passes `tableContext` directly. Exactly one
72
+ // must be present; throw cleanly otherwise so the failure mode is
73
+ // obvious rather than a downstream null-deref. Result is bound to a
74
+ // `tableContext` const so the existing 30+ references in this file
75
+ // keep resolving without per-site renames.
76
+ const tableContext: TableContext<T, IdType> = (() => {
77
+ const ctx = table?._context ?? tableContextProp;
78
+ if (!ctx) {
79
+ throw new Error(
80
+ 'scoria: <Table /> requires either a `table` prop (the structured instance returned by createTable) or a `tableContext` prop (used internally by NestedTable).'
81
+ );
82
+ }
83
+ return ctx;
84
+ })();
85
+
86
+ // NOTE: known limitation. This is passed as a wrapper, and they should never require reassignment. It is deeply reactive
87
+ setContext(TableContext.identifier, tableContext);
88
+
89
+ const { openContextMenu: _openContextMenu } = getContext<ContextMenuContext>(
90
+ ContextMenuContext.identifier
91
+ );
92
+
93
+ let ref: HTMLDivElement | undefined = $state();
94
+ let unfocusRef: HTMLDivElement | undefined = $state();
95
+
96
+ setContext(quickFilterContextIdentifier, openedQuickFilterSelect);
97
+
98
+ // Focus-restore on focusStart change. The query/focus DOM work runs
99
+ // inside `untrack` so a future selector tweak that reads reactive
100
+ // state (e.g. document.activeElement) does not retrigger this
101
+ // effect on every focus change.
102
+ $effect(() => {
103
+ void tableContext.focusStart;
104
+ void ref;
105
+ untrack(() => {
106
+ if (tableContext.focusStart && ref) {
107
+ const { row, column: index } = tableContext.focusStart;
108
+ let element = ref.querySelector(
109
+ `#${tableContext.tableName}-cell-${row}-${tableContext.columnDefs[index].id}`
110
+ ) as HTMLElement | undefined;
111
+
112
+ if (element?.tabIndex == -1) {
113
+ const td = element;
114
+ element = td.querySelector('button') as HTMLElement | undefined;
115
+ if (!element) {
116
+ element = td.querySelector('input') as HTMLElement | undefined;
117
+ }
118
+ }
119
+
120
+ element?.focus({ preventScroll: true });
121
+ element?.scrollIntoView({
122
+ behavior: 'instant',
123
+ block: 'nearest',
124
+ inline: 'nearest',
125
+ });
126
+ }
127
+ });
128
+ });
129
+
130
+ // Scroll-into-view on focusEnd change. The DOM work is wrapped in
131
+ // untrack so reading layout properties from the queried cell never
132
+ // silently re-establishes a reactive dependency.
133
+ $effect(() => {
134
+ void tableContext.focusEnd;
135
+ void ref;
136
+ untrack(() => {
137
+ if (tableContext.focusEnd && ref) {
138
+ const { row, column: index } = tableContext.focusEnd;
139
+ const cell = ref.querySelector(
140
+ `#${tableContext.tableName}-cell-${row}-${tableContext.columnDefs[index].id}`
141
+ ) as HTMLElement | undefined;
142
+
143
+ cell?.scrollIntoView({
144
+ behavior: 'instant',
145
+ block: 'nearest',
146
+ inline: 'nearest',
147
+ });
148
+ }
149
+ });
150
+ });
151
+
152
+ /**
153
+ * Routes a right-click into either a "focus the cell that was
154
+ * clicked" path (if the click landed on a cell other than the
155
+ * current focus) or a "show copy options" context menu (when the
156
+ * Table is configured with `allowCopy` and the platform exposes the
157
+ * Clipboard API).
158
+ */
159
+ function openContextMenu(e: MouseEvent) {
160
+ e.stopPropagation();
161
+
162
+ if (
163
+ (e.target as HTMLElement).tagName === 'INPUT' ||
164
+ (e.target as HTMLElement).closest('.select-wrapper') != null
165
+ ) {
166
+ return;
167
+ }
168
+
169
+ const clickedElement = document.activeElement?.id.split('-cell-')[1]?.split('-');
170
+
171
+ if (clickedElement) {
172
+ const [rowString, columnId] = clickedElement;
173
+ const row = parseInt(rowString);
174
+
175
+ if (
176
+ !tableContext.focusedColumnIds.has(columnId) ||
177
+ !tableContext.focusedRowIndices.has(row)
178
+ ) {
179
+ const columnIndex = tableContext.columnDefs.find((it) => it.id === columnId)?.index;
180
+
181
+ // Use `!= null` rather than a truthy check so a column at
182
+ // memory index 0 (the leftmost column) is not silently
183
+ // rejected. The previous truthy check broke right-click
184
+ // copy on the first column.
185
+ if (columnIndex != null) {
186
+ tableContext.moveFocus({
187
+ column: columnIndex,
188
+ row,
189
+ id: columnId,
190
+ });
191
+ }
192
+ }
193
+ }
194
+
195
+ // this may not exist in http contexts
196
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
197
+ if (tableContext.allowCopy && window.Clipboard) {
198
+ e.preventDefault();
199
+
200
+ const options: Array<IContextMenuOption> = [
201
+ {
202
+ callback: () => {
203
+ tableContext.copyDataToClipboard().catch(devCatch);
204
+ },
205
+ text: 'Copy Selection',
206
+ },
207
+ ];
208
+
209
+ if (tableContext.hasHighlightedItems) {
210
+ options.push({
211
+ callback: () => {
212
+ tableContext.copyHighlightedRowsToClipboard().catch(devCatch);
213
+ },
214
+ text: 'Copy Highlighted Rows',
215
+ });
216
+ }
217
+
218
+ _openContextMenu(e, options).catch(devCatch);
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Closes the quick-filter popup and the actions-cell popup whenever
224
+ * the user clicks somewhere that is not inside either floating UI.
225
+ */
226
+ function handleClickOutside(e: MouseEvent) {
227
+ const target = e.target as HTMLElement;
228
+ if (target.isConnected) {
229
+ // A click in a teleported Svelecte dropdown (see
230
+ // `Helpers/dropdownPortal.ts`) is a logical extension of
231
+ // the trigger inside the quick-filter popup, so it must
232
+ // not close either floating popover. The portal helper
233
+ // sets `data-scoria-portal-dropdown` on the dropdown
234
+ // while it is teleported to `document.body`.
235
+ const insidePortalDropdown = target.closest('[data-scoria-portal-dropdown]') != null;
236
+ if (
237
+ !insidePortalDropdown &&
238
+ target.closest('div.floating') == null &&
239
+ target.closest('div.stick-right') == null
240
+ ) {
241
+ openedQuickFilterSelect.value = null;
242
+ }
243
+
244
+ if (!insidePortalDropdown && target.closest('div.slot-wrapper') == null) {
245
+ tableContext.shownActionsPopup = undefined;
246
+ }
247
+ }
248
+ }
249
+
250
+ // nested table resizing
251
+ let isResizing = $state(false);
252
+ let remPxRatio = $state(0);
253
+ const minNestedHeight = $derived(20 * remPxRatio);
254
+
255
+ let nestedHeight = $state(0);
256
+ $effect.pre(() => {
257
+ if (!isResizing) {
258
+ nestedHeight = minNestedHeight;
259
+ }
260
+ });
261
+
262
+ let tableRef: HTMLDivElement | undefined = $state();
263
+ let mousedDownEmptySpace = $state(false);
264
+
265
+ onMount(() => {
266
+ remPxRatio = parseFloat(getComputedStyle(document.documentElement).fontSize);
267
+ });
268
+
269
+ $effect(() => {
270
+ if (!isResizing) {
271
+ return;
272
+ }
273
+ const onResize = (e: MouseEvent) => {
274
+ const sliderHeight = tableRef ? e.clientY - tableRef.getBoundingClientRect().top : 0;
275
+ nestedHeight = Math.max(sliderHeight, minNestedHeight);
276
+ };
277
+ window.addEventListener('mousemove', onResize);
278
+ return () => {
279
+ window.removeEventListener('mousemove', onResize);
280
+ };
281
+ });
282
+
283
+ function addOverrideResizeHandler() {
284
+ isResizing = true;
285
+ }
286
+
287
+ function removeOverrideResizeHandler() {
288
+ isResizing = false;
289
+ }
290
+
291
+ const usesLoading = $derived(
292
+ tableContext.paginationRepo &&
293
+ tableContext.paginationRepo.paginationType === PaginationType.Remote
294
+ );
295
+
296
+ const shouldUnfocusRemote = $derived(
297
+ usesLoading &&
298
+ tableContext.paginationRepo?.isLoading === false &&
299
+ tableContext.paginationRepo.paginationState.pageIndex !==
300
+ tableContext.paginationRepo.previouslyViewedPage
301
+ );
302
+
303
+ const shouldUnfocusLocal = $derived(
304
+ !usesLoading && tableContext.paginationRepo?.paginationState.pageIndex
305
+ );
306
+
307
+ $effect(() => {
308
+ if ((shouldUnfocusRemote || shouldUnfocusLocal) && unfocusRef) {
309
+ const el = unfocusRef;
310
+ untrack(() => {
311
+ tableContext.unfocus();
312
+ el.scrollTop = 0;
313
+ });
314
+ } else if (usesLoading && tableContext.paginationRepo?.isLoading === false) {
315
+ // refocus same element after a reload
316
+ // this does not break mutifocus
317
+ untrack(() => {
318
+ const fs = tableContext.focusStart;
319
+ if (!fs) {
320
+ return;
321
+ }
322
+ const idToFocusTo = `#${tableContext.tableName}-cell-${fs.row}-${fs.id}`;
323
+
324
+ tick()
325
+ .then(() => {
326
+ (document.querySelector(idToFocusTo) as HTMLElement | undefined)?.focus();
327
+ })
328
+ .catch(devCatch);
329
+ });
330
+ }
331
+ });
332
+
333
+ const leftColumns = $derived(tableContext.table.getLeftVisibleLeafColumns());
334
+ const centreColumns = $derived(tableContext.table.getCenterVisibleLeafColumns());
335
+ const rightColumns = $derived(tableContext.table.getRightVisibleLeafColumns());
336
+
337
+ const visibleColumns = $derived([...leftColumns, ...centreColumns, ...rightColumns]);
338
+
339
+ // CSS Grid template for the table.
340
+ //
341
+ // - First track is the highlight column (always present, fixed at
342
+ // 20px to match the existing visual).
343
+ // - Each other track uses one of two strategies based on the
344
+ // column's `userResized` flag:
345
+ // - `userResized = false` (default): `minmax(width, 1fr)`. The
346
+ // column flexes to share the row's remaining horizontal space
347
+ // so the grid fills the container, and it automatically takes
348
+ // back any space a sibling column gives up when shrunk - this
349
+ // means the table never ends up narrower than its container
350
+ // while any column is still in the flexible set.
351
+ // - `userResized = true`: `${width}px` (fixed). The column sits
352
+ // at exactly the size the user dragged it to, and dragging the
353
+ // handle again only changes this column - other user-resized
354
+ // columns keep their explicit widths and non-resized columns
355
+ // just adjust their flex share.
356
+ // - Pinned and centre columns use the same per-column rule so
357
+ // toggling a column's pin state does not change its width.
358
+ // - Sticky-cell offsets are read from `_columnRenderedWidths`
359
+ // (populated by TableHead's ResizeObserver), which gives
360
+ // accurate sticky positions in both states.
361
+ const colsTemplate = $derived.by(() => {
362
+ void tableContext.columnSizing;
363
+ const track = (col: { columnDef: { width: number; userResized: boolean } }) =>
364
+ col.columnDef.userResized
365
+ ? `${col.columnDef.width}px`
366
+ : `minmax(${col.columnDef.width}px, 1fr)`;
367
+ const tracks: Array<string> = ['20px'];
368
+ for (const col of leftColumns) {
369
+ tracks.push(track(col));
370
+ }
371
+ for (const col of centreColumns) {
372
+ tracks.push(track(col));
373
+ }
374
+ for (const col of rightColumns) {
375
+ tracks.push(track(col));
376
+ }
377
+ return tracks.join(' ');
378
+ });
379
+
380
+ // Total rendered width of the pinned-left and pinned-right column
381
+ // stacks. Driven by `_columnRenderedWidths` (populated by
382
+ // TableHead's ResizeObserver) so the values track actual layout,
383
+ // not the declared `columnDef.width`. Exposed to CSS via
384
+ // `--pinned-left` / `--pinned-right` on `.datatable`; the SCSS
385
+ // then uses them in `scroll-padding-left` / `scroll-padding-right`
386
+ // so that `scrollIntoView` (called by keyboard arrow navigation
387
+ // and tab focus restore) keeps the focused cell out from behind
388
+ // the pinned columns. The highlight column is always 20px and
389
+ // always pinned-left when present, so it is added to the left
390
+ // total unconditionally.
391
+ const totalPinnedLeftWidth = $derived.by(() => {
392
+ void tableContext._columnRenderedWidths.size;
393
+ let total = 20;
394
+ for (const col of leftColumns) {
395
+ total += tableContext._columnRenderedWidths.get(col.id) ?? col.columnDef.width;
396
+ }
397
+ return total;
398
+ });
399
+ const totalPinnedRightWidth = $derived.by(() => {
400
+ void tableContext._columnRenderedWidths.size;
401
+ let total = 0;
402
+ for (const col of rightColumns) {
403
+ total += tableContext._columnRenderedWidths.get(col.id) ?? col.columnDef.width;
404
+ }
405
+ return total;
406
+ });
407
+
408
+ // Phase 7.4 row virtualisation - wire the single scroll listener
409
+ // for the shared scroll container. The single grid container is
410
+ // the scroll host now (the previous three-table siblings have
411
+ // collapsed into one).
412
+ //
413
+ // The same handler also drives `hasScrolledPastHeader` /
414
+ // `hasContentBelowFooter`, which feed the CSS variables that
415
+ // gate the sticky-row drop shadows. The shadows only appear when
416
+ // there is actually content scrolled under the relevant sticky
417
+ // row, so a freshly mounted (or fully-in-viewport) table shows no
418
+ // shadows.
419
+ let hasScrolledPastHeader = $state(false);
420
+ let hasContentBelowFooter = $state(false);
421
+
422
+ // Measured rendered height of the sticky strip at the top of
423
+ // `.datatable` (header row + quick-filter row when active).
424
+ // Drives `scroll-padding-top` via `--sticky-top-height` on
425
+ // `.datatable`, so `scrollIntoView` (keyboard arrow navigation,
426
+ // focus restore) parks the focused cell below the actual strip
427
+ // even at sub-pixel rounding and any borders. Using `calc(var(--height) + 61px)`
428
+ // statically left a 1-2px gap that hid the top edge of the
429
+ // first visible body row when navigating to it.
430
+ let stickyTopHeight: number = $state(0);
431
+
432
+ function recomputeScrollShadows(): void {
433
+ if (!tableRef) {
434
+ hasScrolledPastHeader = false;
435
+ hasContentBelowFooter = false;
436
+ return;
437
+ }
438
+ // `.datatable` has `overflow-x: auto`. Per the CSS spec, when
439
+ // one overflow axis is non-visible the other axis becomes
440
+ // auto too, so `.datatable` is itself the vertical scroll
441
+ // container for the sticky header / footer when the table
442
+ // is constrained inside a fixed-height parent (the typical
443
+ // app shell). Detect that internal scroll directly.
444
+ const internalScrolledPast = tableRef.scrollTop > 0;
445
+ const internalContentBelow =
446
+ tableRef.scrollTop + tableRef.clientHeight < tableRef.scrollHeight - 1;
447
+ // Fall back to window-relative checks for the case where the
448
+ // table is not constrained and the page itself is the scroll
449
+ // container (e.g. a story with no wrapper height).
450
+ const rect = tableRef.getBoundingClientRect();
451
+ const windowScrolledPast = rect.top < 0;
452
+ const windowContentBelow = rect.bottom > window.innerHeight;
453
+ hasScrolledPastHeader = internalScrolledPast || windowScrolledPast;
454
+ hasContentBelowFooter = internalContentBelow || windowContentBelow;
455
+ }
456
+
457
+ $effect(() => {
458
+ void tableRef;
459
+ void unfocusRef;
460
+ const handler = (e: Event): void => {
461
+ const el = e.currentTarget as HTMLElement | null;
462
+ if (!el) {
463
+ return;
464
+ }
465
+ tableContext._virtualisation.registerScrollPosition(el.scrollTop, el.clientHeight);
466
+ // Internal scroll inside `.datatable` is the sticky-context
467
+ // for the header / footer in the constrained-height case,
468
+ // so the shadow flags need to refresh on every internal
469
+ // scroll, not just window scroll. Without this, scrolling
470
+ // the table body never flips `hasScrolledPastHeader` /
471
+ // `hasContentBelowFooter` and the shadows never appear.
472
+ recomputeScrollShadows();
473
+ };
474
+ const elements: Array<HTMLElement> = [];
475
+ if (tableRef) {
476
+ elements.push(tableRef);
477
+ }
478
+ if (unfocusRef && unfocusRef !== tableRef) {
479
+ elements.push(unfocusRef);
480
+ }
481
+ for (const el of elements) {
482
+ el.addEventListener('scroll', handler, { passive: true });
483
+ }
484
+ const primary = tableRef ?? unfocusRef;
485
+ if (primary) {
486
+ tableContext._virtualisation.registerScrollPosition(primary.scrollTop, primary.clientHeight);
487
+ }
488
+
489
+ // Window-level scroll + resize cover the case where the table
490
+ // is not constrained and the page itself scrolls instead.
491
+ // `recomputeScrollShadows` checks both internal and window-level
492
+ // scroll position so either path flips the shadow flags.
493
+ const onWindow = (): void => {
494
+ recomputeScrollShadows();
495
+ };
496
+ window.addEventListener('scroll', onWindow, { passive: true });
497
+ window.addEventListener('resize', onWindow, { passive: true });
498
+
499
+ // Content-height changes (rows added / removed, pagination
500
+ // turning the page, expand toggled) flip whether there is
501
+ // anything below the footer or above the header, so shadow
502
+ // flags need to re-evaluate any time the table's intrinsic
503
+ // height changes - not just on actual user scroll.
504
+ const ro =
505
+ typeof ResizeObserver === 'undefined'
506
+ ? null
507
+ : new ResizeObserver(() => {
508
+ recomputeScrollShadows();
509
+ });
510
+ if (ro && tableRef) {
511
+ ro.observe(tableRef);
512
+ }
513
+
514
+ // Measure the actual rendered height of the sticky strip
515
+ // (header row + quick-filter row when active) so
516
+ // `scroll-padding-top` matches it to the pixel. Static
517
+ // `calc(var(--height) + 61px)` ignored the header's
518
+ // border-bottom plus any sub-pixel rounding, leaving the
519
+ // first visible body row 1-2px behind the strip when
520
+ // `scrollIntoView` parked it at the top edge.
521
+ const measureStickyTop = (): void => {
522
+ if (!tableRef) {
523
+ return;
524
+ }
525
+ const headerRow = tableRef.querySelector('.datatable-row.header-row') as HTMLElement | null;
526
+ const filterRow = tableRef.querySelector(
527
+ '.datatable-row.quick-filter-row'
528
+ ) as HTMLElement | null;
529
+ stickyTopHeight = (headerRow?.offsetHeight ?? 0) + (filterRow?.offsetHeight ?? 0);
530
+ };
531
+ const stickyRo =
532
+ typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(measureStickyTop);
533
+ if (stickyRo && tableRef) {
534
+ // Observe the scroll host so any change inside (mode
535
+ // toggle, rows added, etc.) re-measures on the next frame.
536
+ stickyRo.observe(tableRef);
537
+ }
538
+ // Initial measurement so the very first focus / arrow-key
539
+ // navigation lands below the strip without waiting for the
540
+ // observer's first frame.
541
+ measureStickyTop();
542
+
543
+ recomputeScrollShadows();
544
+
545
+ return () => {
546
+ for (const el of elements) {
547
+ el.removeEventListener('scroll', handler);
548
+ }
549
+ window.removeEventListener('scroll', onWindow);
550
+ window.removeEventListener('resize', onWindow);
551
+ ro?.disconnect();
552
+ stickyRo?.disconnect();
553
+ };
554
+ });
555
+ </script>
556
+
557
+ <svelte:window
558
+ onmouseup={(e: MouseEvent) => {
559
+ if (
560
+ // if it's not a click on an item in the context menu
561
+ !(e.target as HTMLElement | undefined)?.classList.contains('context-menu-item') &&
562
+ // if it's outside the table or inside the empty space of the table
563
+ (e.target === unfocusRef ||
564
+ ((e.target as HTMLElement | undefined)?.closest('.table-wrapper') == null &&
565
+ mousedDownEmptySpace))
566
+ ) {
567
+ tableContext.unfocus();
568
+ }
569
+ mousedDownEmptySpace = false;
570
+
571
+ if (tableContext.isMousingDown) {
572
+ tableContext.isMousingDown = false;
573
+ }
574
+
575
+ removeOverrideResizeHandler();
576
+ }}
577
+ onclick={(e: MouseEvent) => {
578
+ handleClickOutside(e);
579
+ }}
580
+ onmousedown={(e: MouseEvent) => {
581
+ mousedDownEmptySpace =
582
+ e.target === unfocusRef || (e.target as HTMLElement).closest('.table-wrapper') == null;
583
+ }}
584
+ />
585
+
586
+ <div
587
+ class="grid"
588
+ class:nested
589
+ style="--show-top-shadow: {hasScrolledPastHeader
590
+ ? 1
591
+ : 0}; --show-bottom-shadow: {hasContentBelowFooter ? 1 : 0};"
592
+ >
593
+ {#if tableContext.dataRepo.isLoading}
594
+ <LoadingOverlay
595
+ absolute
596
+ borderRadius={cssLength('4px')}
597
+ message={tableContext.dataRepo.loadingMessage}
598
+ />
599
+ {/if}
600
+
601
+ <div
602
+ class="horizontal-bar"
603
+ class:border={tableContext.toolbarPosition === ToolbarPosition.Top}
604
+ >
605
+ {#if tableContext.toolbarPosition === ToolbarPosition.Top}
606
+ <TableHorizontalBar />
607
+ {/if}
608
+ </div>
609
+
610
+ <div
611
+ class="sidebar-wrapper sidebar-wrapper-left"
612
+ class:nested
613
+ style="--nested-height: {nestedHeight}px;"
614
+ >
615
+ {#if tableContext.toolbarPosition === ToolbarPosition.Left}
616
+ <div class="sidebar toolbar-left">
617
+ <TableSidebar />
618
+ </div>
619
+ {/if}
620
+ </div>
621
+ <div
622
+ class="sidebar-wrapper sidebar-wrapper-right"
623
+ class:nested
624
+ style="--nested-height: {nestedHeight}px;"
625
+ >
626
+ {#if tableContext.toolbarPosition === ToolbarPosition.Right}
627
+ <div class="sidebar toolbar-right">
628
+ <TableSidebar />
629
+ </div>
630
+ {/if}
631
+ </div>
632
+
633
+ <div class="footer">
634
+ {#if tableContext.displayFooter}
635
+ <TableFooter />
636
+ {/if}
637
+ </div>
638
+
639
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
640
+ <div
641
+ bind:this={tableRef}
642
+ class="datatable"
643
+ class:nested
644
+ class:compact={tableContext.isCompact}
645
+ class:quick-filtering={tableContext.showQuickFiltering}
646
+ onkeydown={tableContext.handleTdKeydown}
647
+ style="--pinned-left: {totalPinnedLeftWidth}px; --pinned-right: {totalPinnedRightWidth}px; --sticky-top-height: {stickyTopHeight}px;"
648
+ >
649
+ <div
650
+ class="flex_table"
651
+ bind:this={ref}
652
+ class:nested
653
+ >
654
+ <div
655
+ bind:this={unfocusRef}
656
+ class="table-wrapper"
657
+ oncontextmenu={openContextMenu}
658
+ >
659
+ <div
660
+ role="table"
661
+ class="datatable-grid"
662
+ style="--cols: {colsTemplate};"
663
+ >
664
+ <TableHead />
665
+ <TableBody />
666
+ </div>
667
+ </div>
668
+ </div>
669
+
670
+ {#if nested}
671
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
672
+ <div
673
+ class:isResizing
674
+ class="resizer"
675
+ onmousedown={(e) => {
676
+ e.preventDefault();
677
+ addOverrideResizeHandler();
678
+ }}
679
+ ></div>
680
+ {/if}
681
+ </div>
682
+ </div>
683
+
492
684
  <style>div.grid {
493
685
  border-radius: 4px;
494
686
  display: grid;
@@ -552,14 +744,6 @@ div.resizer.isResizing {
552
744
  opacity: 1;
553
745
  }
554
746
 
555
- .left {
556
- border-right: solid 2px #3a4952;
557
- }
558
-
559
- .right {
560
- border-left: solid 2px #3a4952;
561
- }
562
-
563
747
  div.sidebar-wrapper {
564
748
  display: flex;
565
749
  flex-flow: row nowrap;
@@ -604,7 +788,6 @@ div.sidebar-wrapper .sidebar.toolbar-right {
604
788
  position: relative;
605
789
  flex-grow: 2;
606
790
  max-height: 100%;
607
- scroll-padding-top: calc(3rem + 0px);
608
791
  }
609
792
 
610
793
  .datatable {
@@ -621,6 +804,9 @@ div.sidebar-wrapper .sidebar.toolbar-right {
621
804
  height: 100%;
622
805
  flex-grow: 1;
623
806
  --progress-bar-radius: 18px;
807
+ scroll-padding-top: var(--sticky-top-height, 0px);
808
+ scroll-padding-left: var(--pinned-left, 0px);
809
+ scroll-padding-right: var(--pinned-right, 0px);
624
810
  }
625
811
  .datatable.quick-filtering {
626
812
  --quick-filter-height: 3rem;
@@ -638,23 +824,12 @@ div.sidebar-wrapper .sidebar.toolbar-right {
638
824
  max-height: var(--nested-height, 20rem);
639
825
  }
640
826
 
641
- .datatable__table {
642
- table-layout: fixed;
643
- border-collapse: collapse;
644
- border-spacing: 0;
827
+ .datatable-grid {
828
+ display: flex;
829
+ flex-flow: column nowrap;
830
+ flex-grow: 2;
831
+ width: 100%;
645
832
  text-align: left;
646
- }
647
- .datatable__table.left {
648
- position: sticky;
649
- z-index: 2;
650
- left: 0;
651
- }
652
- .datatable__table.centre {
653
- z-index: 1;
654
- flex-grow: 10;
655
- }
656
- .datatable__table.right {
657
- position: sticky;
658
- z-index: 2;
659
- right: 0;
660
- }</style>
833
+ min-width: max-content;
834
+ isolation: isolate;
835
+ }</style>