@lavalogic/scoria 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/README.md +58 -0
  2. package/dist/Components/Action.svelte +258 -0
  3. package/dist/Components/Action.svelte.d.ts +30 -0
  4. package/dist/Components/AlertModal.svelte +373 -0
  5. package/dist/Components/AlertModal.svelte.d.ts +3 -0
  6. package/dist/Components/BigRadioSet.svelte +88 -0
  7. package/dist/Components/BigRadioSet.svelte.d.ts +30 -0
  8. package/dist/Components/Bubble.svelte +115 -0
  9. package/dist/Components/Bubble.svelte.d.ts +21 -0
  10. package/dist/Components/Button.svelte +540 -0
  11. package/dist/Components/Button.svelte.d.ts +32 -0
  12. package/dist/Components/Checkbox.svelte +168 -0
  13. package/dist/Components/Checkbox.svelte.d.ts +15 -0
  14. package/dist/Components/CollapsibleCard.svelte +136 -0
  15. package/dist/Components/CollapsibleCard.svelte.d.ts +11 -0
  16. package/dist/Components/Contexts/ContextMenu.svelte +73 -0
  17. package/dist/Components/Contexts/ContextMenu.svelte.d.ts +3 -0
  18. package/dist/Components/Contexts/ContextMenuDivider.svelte +11 -0
  19. package/dist/Components/Contexts/ContextMenuDivider.svelte.d.ts +6 -0
  20. package/dist/Components/Contexts/ContextMenuOption.svelte +65 -0
  21. package/dist/Components/Contexts/ContextMenuOption.svelte.d.ts +10 -0
  22. package/dist/Components/Contexts/Toast.svelte +89 -0
  23. package/dist/Components/Contexts/Toast.svelte.d.ts +8 -0
  24. package/dist/Components/Contexts/ToastContainer.svelte +54 -0
  25. package/dist/Components/Contexts/ToastContainer.svelte.d.ts +3 -0
  26. package/dist/Components/Contexts/Tooltip.svelte +116 -0
  27. package/dist/Components/Contexts/Tooltip.svelte.d.ts +3 -0
  28. package/dist/Components/DataMatrixIcon.svelte +58 -0
  29. package/dist/Components/DataMatrixIcon.svelte.d.ts +9 -0
  30. package/dist/Components/DateInput.svelte +356 -0
  31. package/dist/Components/DateInput.svelte.d.ts +24 -0
  32. package/dist/Components/DatePicker.svelte +346 -0
  33. package/dist/Components/DatePicker.svelte.d.ts +11 -0
  34. package/dist/Components/DesktopModal.svelte +235 -0
  35. package/dist/Components/DesktopModal.svelte.d.ts +23 -0
  36. package/dist/Components/Dial.svelte +219 -0
  37. package/dist/Components/Dial.svelte.d.ts +37 -0
  38. package/dist/Components/DimensionInput.svelte +486 -0
  39. package/dist/Components/DimensionInput.svelte.d.ts +32 -0
  40. package/dist/Components/FileCard.svelte +32 -0
  41. package/dist/Components/FileCard.svelte.d.ts +7 -0
  42. package/dist/Components/FileUpload.svelte +413 -0
  43. package/dist/Components/FileUpload.svelte.d.ts +27 -0
  44. package/dist/Components/GridInput.svelte +187 -0
  45. package/dist/Components/GridInput.svelte.d.ts +30 -0
  46. package/dist/Components/GridInputSet.svelte +37 -0
  47. package/dist/Components/GridInputSet.svelte.d.ts +30 -0
  48. package/dist/Components/HorizontalTabGroup.svelte +81 -0
  49. package/dist/Components/HorizontalTabGroup.svelte.d.ts +34 -0
  50. package/dist/Components/HorizontalTabGroupButton.svelte +85 -0
  51. package/dist/Components/HorizontalTabGroupButton.svelte.d.ts +29 -0
  52. package/dist/Components/Icon.svelte +1412 -0
  53. package/dist/Components/Icon.svelte.d.ts +887 -0
  54. package/dist/Components/LoadingAnimation.svelte +129 -0
  55. package/dist/Components/LoadingAnimation.svelte.d.ts +6 -0
  56. package/dist/Components/LoadingModal.svelte +316 -0
  57. package/dist/Components/LoadingModal.svelte.d.ts +7 -0
  58. package/dist/Components/LoadingOverlay.svelte +58 -0
  59. package/dist/Components/LoadingOverlay.svelte.d.ts +8 -0
  60. package/dist/Components/Modal.svelte +577 -0
  61. package/dist/Components/Modal.svelte.d.ts +31 -0
  62. package/dist/Components/MultiSelect.svelte +412 -0
  63. package/dist/Components/MultiSelect.svelte.d.ts +49 -0
  64. package/dist/Components/NumberInput.svelte +407 -0
  65. package/dist/Components/NumberInput.svelte.d.ts +32 -0
  66. package/dist/Components/PasswordInput.svelte +324 -0
  67. package/dist/Components/PasswordInput.svelte.d.ts +18 -0
  68. package/dist/Components/Portal.svelte +31 -0
  69. package/dist/Components/Portal.svelte.d.ts +8 -0
  70. package/dist/Components/ProgressBubble.svelte +134 -0
  71. package/dist/Components/ProgressBubble.svelte.d.ts +8 -0
  72. package/dist/Components/QuerySelect.svelte +556 -0
  73. package/dist/Components/QuerySelect.svelte.d.ts +52 -0
  74. package/dist/Components/SingleSelect.svelte +480 -0
  75. package/dist/Components/SingleSelect.svelte.d.ts +61 -0
  76. package/dist/Components/Switch.svelte +151 -0
  77. package/dist/Components/Switch.svelte.d.ts +12 -0
  78. package/dist/Components/Table/Body/QuickSearchCell.svelte +527 -0
  79. package/dist/Components/Table/Body/QuickSearchCell.svelte.d.ts +30 -0
  80. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +67 -0
  81. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte.d.ts +8 -0
  82. package/dist/Components/Table/Body/Rows/ColumnList.svelte +67 -0
  83. package/dist/Components/Table/Body/Rows/ColumnList.svelte.d.ts +27 -0
  84. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +187 -0
  85. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte.d.ts +28 -0
  86. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +305 -0
  87. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte.d.ts +29 -0
  88. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +171 -0
  89. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte.d.ts +28 -0
  90. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +149 -0
  91. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte.d.ts +31 -0
  92. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +156 -0
  93. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte.d.ts +31 -0
  94. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +161 -0
  95. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte.d.ts +28 -0
  96. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +62 -0
  97. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte.d.ts +30 -0
  98. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +155 -0
  99. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte.d.ts +30 -0
  100. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +140 -0
  101. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte.d.ts +31 -0
  102. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +290 -0
  103. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte.d.ts +28 -0
  104. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +359 -0
  105. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte.d.ts +28 -0
  106. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +331 -0
  107. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte.d.ts +28 -0
  108. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +157 -0
  109. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte.d.ts +30 -0
  110. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +354 -0
  111. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte.d.ts +28 -0
  112. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +375 -0
  113. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte.d.ts +28 -0
  114. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +227 -0
  115. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte.d.ts +33 -0
  116. package/dist/Components/Table/Body/Rows/TableRow.svelte +201 -0
  117. package/dist/Components/Table/Body/Rows/TableRow.svelte.d.ts +30 -0
  118. package/dist/Components/Table/Body/TableBody.svelte +74 -0
  119. package/dist/Components/Table/Body/TableBody.svelte.d.ts +27 -0
  120. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDef.svelte.d.ts +7 -0
  121. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDef.svelte.js +139 -0
  122. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +52 -0
  123. package/dist/Components/Table/Headers/HighlightAllHeader.svelte.d.ts +24 -0
  124. package/dist/Components/Table/Headers/SelectAllHeader.svelte +62 -0
  125. package/dist/Components/Table/Headers/SelectAllHeader.svelte.d.ts +24 -0
  126. package/dist/Components/Table/Headers/TableHead.svelte +366 -0
  127. package/dist/Components/Table/Headers/TableHead.svelte.d.ts +29 -0
  128. package/dist/Components/Table/Misc/ColumnPanel.svelte +96 -0
  129. package/dist/Components/Table/Misc/ColumnPanel.svelte.d.ts +24 -0
  130. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +137 -0
  131. package/dist/Components/Table/Misc/ColumnPanelModal.svelte.d.ts +27 -0
  132. package/dist/Components/Table/Misc/FilterInput.svelte +635 -0
  133. package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +45 -0
  134. package/dist/Components/Table/Misc/FilterPanel.svelte +49 -0
  135. package/dist/Components/Table/Misc/FilterPanel.svelte.d.ts +24 -0
  136. package/dist/Components/Table/Misc/FilterPanelModal.svelte +74 -0
  137. package/dist/Components/Table/Misc/FilterPanelModal.svelte.d.ts +27 -0
  138. package/dist/Components/Table/Misc/SidePanel.svelte +51 -0
  139. package/dist/Components/Table/Misc/SidePanel.svelte.d.ts +10 -0
  140. package/dist/Components/Table/Misc/TableFooter.svelte +364 -0
  141. package/dist/Components/Table/Misc/TableFooter.svelte.d.ts +27 -0
  142. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +171 -0
  143. package/dist/Components/Table/Misc/TableHorizontalBar.svelte.d.ts +24 -0
  144. package/dist/Components/Table/Misc/TableSidebar.svelte +186 -0
  145. package/dist/Components/Table/Misc/TableSidebar.svelte.d.ts +24 -0
  146. package/dist/Components/Table/Misc/ToolboxPanel.svelte +84 -0
  147. package/dist/Components/Table/Misc/ToolboxPanel.svelte.d.ts +24 -0
  148. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +108 -0
  149. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte.d.ts +27 -0
  150. package/dist/Components/Table/NestedTable.svelte +86 -0
  151. package/dist/Components/Table/NestedTable.svelte.d.ts +34 -0
  152. package/dist/Components/Table/Table.svelte +555 -0
  153. package/dist/Components/Table/Table.svelte.d.ts +37 -0
  154. package/dist/Components/Table/Types/Columns/AbstractDisplayDef.svelte.d.ts +19 -0
  155. package/dist/Components/Table/Types/Columns/AbstractDisplayDef.svelte.js +10 -0
  156. package/dist/Components/Table/Types/Columns/Column.d.ts +10 -0
  157. package/dist/Components/Table/Types/Columns/Column.js +1 -0
  158. package/dist/Components/Table/Types/Columns/ColumnDefPreset.d.ts +11 -0
  159. package/dist/Components/Table/Types/Columns/ColumnDefPreset.js +1 -0
  160. package/dist/Components/Table/Types/Columns/ColumnPinningState.d.ts +4 -0
  161. package/dist/Components/Table/Types/Columns/ColumnPinningState.js +1 -0
  162. package/dist/Components/Table/Types/Columns/ColumnSizingState.d.ts +1 -0
  163. package/dist/Components/Table/Types/Columns/ColumnSizingState.js +1 -0
  164. package/dist/Components/Table/Types/Columns/ColumnType.d.ts +9 -0
  165. package/dist/Components/Table/Types/Columns/ColumnType.js +10 -0
  166. package/dist/Components/Table/Types/Columns/DateColumn.d.ts +10 -0
  167. package/dist/Components/Table/Types/Columns/DateColumn.js +1 -0
  168. package/dist/Components/Table/Types/Columns/DateTableCell.d.ts +8 -0
  169. package/dist/Components/Table/Types/Columns/DateTableCell.js +1 -0
  170. package/dist/Components/Table/Types/Columns/Definitions/AccessorFn.d.ts +1 -0
  171. package/dist/Components/Table/Types/Columns/Definitions/AccessorFn.js +1 -0
  172. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +10 -0
  173. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.js +5 -0
  174. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.d.ts +8 -0
  175. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.js +9 -0
  176. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.d.ts +9 -0
  177. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.js +8 -0
  178. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +11 -0
  179. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.js +10 -0
  180. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +14 -0
  181. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js +13 -0
  182. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.d.ts +15 -0
  183. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.js +12 -0
  184. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +18 -0
  185. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.js +16 -0
  186. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.d.ts +9 -0
  187. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.js +8 -0
  188. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +16 -0
  189. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +19 -0
  190. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +52 -0
  191. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.js +77 -0
  192. package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.d.ts +11 -0
  193. package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.js +1 -0
  194. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.d.ts +11 -0
  195. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.js +10 -0
  196. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.d.ts +8 -0
  197. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.js +8 -0
  198. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.d.ts +11 -0
  199. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.js +10 -0
  200. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.d.ts +11 -0
  201. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.js +11 -0
  202. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +21 -0
  203. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.js +18 -0
  204. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.d.ts +6 -0
  205. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.js +5 -0
  206. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +7 -0
  207. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +15 -0
  208. package/dist/Components/Table/Types/Columns/Definitions/ValidationFn.d.ts +3 -0
  209. package/dist/Components/Table/Types/Columns/Definitions/ValidationFn.js +1 -0
  210. package/dist/Components/Table/Types/Columns/DefsWrapper.d.ts +6 -0
  211. package/dist/Components/Table/Types/Columns/DefsWrapper.js +1 -0
  212. package/dist/Components/Table/Types/Columns/DisplayType.d.ts +7 -0
  213. package/dist/Components/Table/Types/Columns/DisplayType.js +8 -0
  214. package/dist/Components/Table/Types/Columns/ExpandColumn.d.ts +10 -0
  215. package/dist/Components/Table/Types/Columns/ExpandColumn.js +1 -0
  216. package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +8 -0
  217. package/dist/Components/Table/Types/Columns/ExpandTableCell.js +1 -0
  218. package/dist/Components/Table/Types/Columns/ProgressBarColumn.d.ts +10 -0
  219. package/dist/Components/Table/Types/Columns/ProgressBarColumn.js +1 -0
  220. package/dist/Components/Table/Types/Columns/ProgressBarTableCell.d.ts +8 -0
  221. package/dist/Components/Table/Types/Columns/ProgressBarTableCell.js +1 -0
  222. package/dist/Components/Table/Types/Columns/TableActionButton.d.ts +8 -0
  223. package/dist/Components/Table/Types/Columns/TableActionButton.js +1 -0
  224. package/dist/Components/Table/Types/Columns/TableCell.d.ts +8 -0
  225. package/dist/Components/Table/Types/Columns/TableCell.js +1 -0
  226. package/dist/Components/Table/Types/Columns/VisibilityState.d.ts +1 -0
  227. package/dist/Components/Table/Types/Columns/VisibilityState.js +1 -0
  228. package/dist/Components/Table/Types/Context/ReadonlyRowModel.d.ts +6 -0
  229. package/dist/Components/Table/Types/Context/ReadonlyRowModel.js +1 -0
  230. package/dist/Components/Table/Types/Context/Row.d.ts +10 -0
  231. package/dist/Components/Table/Types/Context/Row.js +1 -0
  232. package/dist/Components/Table/Types/Context/RowModel.d.ts +5 -0
  233. package/dist/Components/Table/Types/Context/RowModel.js +1 -0
  234. package/dist/Components/Table/Types/Context/Table.d.ts +33 -0
  235. package/dist/Components/Table/Types/Context/Table.js +1 -0
  236. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +232 -0
  237. package/dist/Components/Table/Types/Context/TableContext.svelte.js +2317 -0
  238. package/dist/Components/Table/Types/Context/TableInitOptions.d.ts +14 -0
  239. package/dist/Components/Table/Types/Context/TableInitOptions.js +1 -0
  240. package/dist/Components/Table/Types/Context/TableSettings.d.ts +8 -0
  241. package/dist/Components/Table/Types/Context/TableSettings.js +1 -0
  242. package/dist/Components/Table/Types/Coordinates/CellCoordinates.d.ts +5 -0
  243. package/dist/Components/Table/Types/Coordinates/CellCoordinates.js +1 -0
  244. package/dist/Components/Table/Types/Coordinates/CellCoordinatesWithoutColumn.d.ts +2 -0
  245. package/dist/Components/Table/Types/Coordinates/CellCoordinatesWithoutColumn.js +1 -0
  246. package/dist/Components/Table/Types/DataRepository/DataRepository.d.ts +40 -0
  247. package/dist/Components/Table/Types/DataRepository/DataRepository.js +1 -0
  248. package/dist/Components/Table/Types/DataRepository/LocalDataRepository.d.ts +24 -0
  249. package/dist/Components/Table/Types/DataRepository/LocalDataRepository.js +1 -0
  250. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.d.ts +55 -0
  251. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.js +311 -0
  252. package/dist/Components/Table/Types/DataRepository/RemoteDataRepository.d.ts +19 -0
  253. package/dist/Components/Table/Types/DataRepository/RemoteDataRepository.js +1 -0
  254. package/dist/Components/Table/Types/DataRepository/RemoteTableDataRepository.svelte.d.ts +92 -0
  255. package/dist/Components/Table/Types/DataRepository/RemoteTableDataRepository.svelte.js +521 -0
  256. package/dist/Components/Table/Types/DataRepository/SortingState.d.ts +5 -0
  257. package/dist/Components/Table/Types/DataRepository/SortingState.js +1 -0
  258. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +47 -0
  259. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +75 -0
  260. package/dist/Components/Table/Types/ExpandedPanel.d.ts +6 -0
  261. package/dist/Components/Table/Types/ExpandedPanel.js +7 -0
  262. package/dist/Components/Table/Types/Filtering/ColumnFiltersState.d.ts +5 -0
  263. package/dist/Components/Table/Types/Filtering/ColumnFiltersState.js +1 -0
  264. package/dist/Components/Table/Types/Filtering/CustomFilter.d.ts +12 -0
  265. package/dist/Components/Table/Types/Filtering/CustomFilter.js +1 -0
  266. package/dist/Components/Table/Types/Filtering/CustomFilterType.d.ts +6 -0
  267. package/dist/Components/Table/Types/Filtering/CustomFilterType.js +7 -0
  268. package/dist/Components/Table/Types/Filtering/CustomFlterFn.d.ts +2 -0
  269. package/dist/Components/Table/Types/Filtering/CustomFlterFn.js +1 -0
  270. package/dist/Components/Table/Types/Filtering/CustomProxyFIlter.d.ts +10 -0
  271. package/dist/Components/Table/Types/Filtering/CustomProxyFIlter.js +1 -0
  272. package/dist/Components/Table/Types/Filtering/CustomRemoteFilters.d.ts +3 -0
  273. package/dist/Components/Table/Types/Filtering/CustomRemoteFilters.js +1 -0
  274. package/dist/Components/Table/Types/Filtering/FilterFn.d.ts +9 -0
  275. package/dist/Components/Table/Types/Filtering/FilterFn.js +1 -0
  276. package/dist/Components/Table/Types/Filtering/FilterMode.d.ts +3 -0
  277. package/dist/Components/Table/Types/Filtering/FilterMode.js +1 -0
  278. package/dist/Components/Table/Types/Filtering/FilterType.d.ts +4 -0
  279. package/dist/Components/Table/Types/Filtering/FilterType.js +5 -0
  280. package/dist/Components/Table/Types/Filtering/HasCustomFilterFunction.d.ts +3 -0
  281. package/dist/Components/Table/Types/Filtering/HasCustomFilterFunction.js +1 -0
  282. package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.d.ts +13 -0
  283. package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.js +14 -0
  284. package/dist/Components/Table/Types/Filtering/StringFilterMode.d.ts +15 -0
  285. package/dist/Components/Table/Types/Filtering/StringFilterMode.js +16 -0
  286. package/dist/Components/Table/Types/Focus/MultiFocusEdge.d.ts +10 -0
  287. package/dist/Components/Table/Types/Focus/MultiFocusEdge.js +11 -0
  288. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.d.ts +40 -0
  289. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.js +174 -0
  290. package/dist/Components/Table/Types/Header.d.ts +9 -0
  291. package/dist/Components/Table/Types/Header.js +1 -0
  292. package/dist/Components/Table/Types/HeaderGroup.d.ts +5 -0
  293. package/dist/Components/Table/Types/HeaderGroup.js +1 -0
  294. package/dist/Components/Table/Types/OnChangeFn.d.ts +3 -0
  295. package/dist/Components/Table/Types/OnChangeFn.js +1 -0
  296. package/dist/Components/Table/Types/Pagination/PaginationState.d.ts +4 -0
  297. package/dist/Components/Table/Types/Pagination/PaginationState.js +1 -0
  298. package/dist/Components/Table/Types/Pagination/PaginationType.d.ts +5 -0
  299. package/dist/Components/Table/Types/Pagination/PaginationType.js +6 -0
  300. package/dist/Components/Table/Types/Toolbar/ToolbarPosition.d.ts +6 -0
  301. package/dist/Components/Table/Types/Toolbar/ToolbarPosition.js +7 -0
  302. package/dist/Components/TextArea.svelte +349 -0
  303. package/dist/Components/TextArea.svelte.d.ts +29 -0
  304. package/dist/Components/TextInput.svelte +407 -0
  305. package/dist/Components/TextInput.svelte.d.ts +34 -0
  306. package/dist/Components/ThreeStateRadio.svelte +202 -0
  307. package/dist/Components/ThreeStateRadio.svelte.d.ts +16 -0
  308. package/dist/Components/Touch/BoolCard.svelte +180 -0
  309. package/dist/Components/Touch/BoolCard.svelte.d.ts +13 -0
  310. package/dist/Components/Touch/DateModal.svelte +256 -0
  311. package/dist/Components/Touch/DateModal.svelte.d.ts +22 -0
  312. package/dist/Components/Touch/EditCard.svelte +223 -0
  313. package/dist/Components/Touch/EditCard.svelte.d.ts +15 -0
  314. package/dist/Components/Touch/InfoCard.svelte +82 -0
  315. package/dist/Components/Touch/InfoCard.svelte.d.ts +11 -0
  316. package/dist/Components/Touch/InfoTextCard.svelte +55 -0
  317. package/dist/Components/Touch/InfoTextCard.svelte.d.ts +10 -0
  318. package/dist/Components/Touch/ModalExplanation.svelte +27 -0
  319. package/dist/Components/Touch/ModalExplanation.svelte.d.ts +9 -0
  320. package/dist/Components/Touch/NumberKeyboard.svelte +299 -0
  321. package/dist/Components/Touch/NumberKeyboard.svelte.d.ts +14 -0
  322. package/dist/Components/Touch/NumberModal.svelte +336 -0
  323. package/dist/Components/Touch/NumberModal.svelte.d.ts +18 -0
  324. package/dist/Components/Touch/PlusMinusCard.svelte +94 -0
  325. package/dist/Components/Touch/PlusMinusCard.svelte.d.ts +9 -0
  326. package/dist/Components/Touch/SelectModal.svelte +351 -0
  327. package/dist/Components/Touch/SelectModal.svelte.d.ts +11 -0
  328. package/dist/Components/Touch/SummaryCard.svelte +348 -0
  329. package/dist/Components/Touch/SummaryCard.svelte.d.ts +18 -0
  330. package/dist/Components/Touch/TextAreaModal.svelte +330 -0
  331. package/dist/Components/Touch/TextAreaModal.svelte.d.ts +15 -0
  332. package/dist/Components/Touch/TextModal.svelte +377 -0
  333. package/dist/Components/Touch/TextModal.svelte.d.ts +22 -0
  334. package/dist/Components/Touch/TouchCard.svelte +169 -0
  335. package/dist/Components/Touch/TouchCard.svelte.d.ts +9 -0
  336. package/dist/Components/Touch/TouchModal.svelte +516 -0
  337. package/dist/Components/Touch/TouchModal.svelte.d.ts +34 -0
  338. package/dist/Components/Touch/UtilityButton.svelte +192 -0
  339. package/dist/Components/Touch/UtilityButton.svelte.d.ts +23 -0
  340. package/dist/Components/VerticalTabGroup.svelte +129 -0
  341. package/dist/Components/VerticalTabGroup.svelte.d.ts +12 -0
  342. package/dist/Components/VerticalTabGroupButton.svelte +108 -0
  343. package/dist/Components/VerticalTabGroupButton.svelte.d.ts +8 -0
  344. package/dist/Contexts/AlertContext.svelte.d.ts +46 -0
  345. package/dist/Contexts/AlertContext.svelte.js +118 -0
  346. package/dist/Contexts/ContextMenuContext.svelte.d.ts +22 -0
  347. package/dist/Contexts/ContextMenuContext.svelte.js +45 -0
  348. package/dist/Contexts/ToastContext.svelte.d.ts +9 -0
  349. package/dist/Contexts/ToastContext.svelte.js +82 -0
  350. package/dist/Contexts/TooltipContext.svelte.d.ts +31 -0
  351. package/dist/Contexts/TooltipContext.svelte.js +78 -0
  352. package/dist/Contexts/UntypedInputContext.svelte.d.ts +13 -0
  353. package/dist/Contexts/UntypedInputContext.svelte.js +78 -0
  354. package/dist/Delay/Delay.d.ts +3 -0
  355. package/dist/Delay/Delay.js +4 -0
  356. package/dist/Helpers/Datamatrix.d.ts +11 -0
  357. package/dist/Helpers/Datamatrix.js +2 -0
  358. package/dist/Helpers/Helpers.svelte.d.ts +102 -0
  359. package/dist/Helpers/Helpers.svelte.js +490 -0
  360. package/dist/Helpers/INamed.d.ts +3 -0
  361. package/dist/Helpers/INamed.js +1 -0
  362. package/dist/Helpers/skata.d.ts +1 -0
  363. package/dist/Helpers/skata.js +1 -0
  364. package/dist/Types/Examples/ExampleItem.d.ts +15 -0
  365. package/dist/Types/Examples/ExampleItem.js +1 -0
  366. package/dist/Types/Examples/ExampleModal.svelte +38 -0
  367. package/dist/Types/Examples/ExampleModal.svelte.d.ts +5 -0
  368. package/dist/Types/Examples/ExampleSelectEnum.d.ts +6 -0
  369. package/dist/Types/Examples/ExampleSelectEnum.js +7 -0
  370. package/dist/Types/Internal/ApplicationIdentifier.d.ts +37 -0
  371. package/dist/Types/Internal/ApplicationIdentifier.js +2080 -0
  372. package/dist/Types/Internal/AttributeOperation.d.ts +30 -0
  373. package/dist/Types/Internal/AttributeOperation.js +33 -0
  374. package/dist/Types/Internal/BigRadioOption.d.ts +5 -0
  375. package/dist/Types/Internal/BigRadioOption.js +1 -0
  376. package/dist/Types/Internal/ButtonProp.d.ts +11 -0
  377. package/dist/Types/Internal/ButtonProp.js +1 -0
  378. package/dist/Types/Internal/CallbackButton.d.ts +10 -0
  379. package/dist/Types/Internal/CallbackButton.js +1 -0
  380. package/dist/Types/Internal/DateChange.d.ts +5 -0
  381. package/dist/Types/Internal/DateChange.js +1 -0
  382. package/dist/Types/Internal/DatePickerType.d.ts +8 -0
  383. package/dist/Types/Internal/DatePickerType.js +9 -0
  384. package/dist/Types/Internal/FloService.d.ts +7 -0
  385. package/dist/Types/Internal/FloService.js +30 -0
  386. package/dist/Types/Internal/GridItem.d.ts +4 -0
  387. package/dist/Types/Internal/GridItem.js +1 -0
  388. package/dist/Types/Internal/GridMultiSelectItem.d.ts +4 -0
  389. package/dist/Types/Internal/GridMultiSelectItem.js +1 -0
  390. package/dist/Types/Internal/GridMultiSelectItemAsObject.d.ts +5 -0
  391. package/dist/Types/Internal/GridMultiSelectItemAsObject.js +1 -0
  392. package/dist/Types/Internal/GridMultiSelectItemAsPrimitive.d.ts +5 -0
  393. package/dist/Types/Internal/GridMultiSelectItemAsPrimitive.js +1 -0
  394. package/dist/Types/Internal/GridNumberItem.d.ts +4 -0
  395. package/dist/Types/Internal/GridNumberItem.js +1 -0
  396. package/dist/Types/Internal/GridSelectItem.d.ts +12 -0
  397. package/dist/Types/Internal/GridSelectItem.js +1 -0
  398. package/dist/Types/Internal/GridSingleSelectItem.d.ts +5 -0
  399. package/dist/Types/Internal/GridSingleSelectItem.js +1 -0
  400. package/dist/Types/Internal/GridSingleSelectItemAsObject.d.ts +5 -0
  401. package/dist/Types/Internal/GridSingleSelectItemAsObject.js +1 -0
  402. package/dist/Types/Internal/GridSingleSelectItemAsPrimitive.d.ts +5 -0
  403. package/dist/Types/Internal/GridSingleSelectItemAsPrimitive.js +1 -0
  404. package/dist/Types/Internal/GridStringItem.d.ts +9 -0
  405. package/dist/Types/Internal/GridStringItem.js +1 -0
  406. package/dist/Types/Internal/GridTextItem.d.ts +4 -0
  407. package/dist/Types/Internal/GridTextItem.js +1 -0
  408. package/dist/Types/Internal/IdentifiableToastMessage.d.ts +5 -0
  409. package/dist/Types/Internal/IdentifiableToastMessage.js +1 -0
  410. package/dist/Types/Internal/InputVariant.d.ts +6 -0
  411. package/dist/Types/Internal/InputVariant.js +7 -0
  412. package/dist/Types/Internal/Misc.d.ts +271 -0
  413. package/dist/Types/Internal/Misc.js +129 -0
  414. package/dist/Types/Internal/RefWrapper.d.ts +3 -0
  415. package/dist/Types/Internal/RefWrapper.js +1 -0
  416. package/dist/Types/Internal/SelectOption.d.ts +4 -0
  417. package/dist/Types/Internal/SelectOption.js +1 -0
  418. package/dist/Types/Internal/Shape.d.ts +4 -0
  419. package/dist/Types/Internal/Shape.js +5 -0
  420. package/dist/Types/Internal/Side.d.ts +6 -0
  421. package/dist/Types/Internal/Side.js +7 -0
  422. package/dist/Types/Internal/Size.d.ts +13 -0
  423. package/dist/Types/Internal/Size.js +14 -0
  424. package/dist/Types/Internal/TabOption.d.ts +12 -0
  425. package/dist/Types/Internal/TabOption.js +1 -0
  426. package/dist/Types/Internal/Ternary.d.ts +5 -0
  427. package/dist/Types/Internal/Ternary.js +6 -0
  428. package/dist/Types/Internal/ToastMessage.d.ts +10 -0
  429. package/dist/Types/Internal/ToastMessage.js +1 -0
  430. package/dist/Types/Internal/Validity.d.ts +7 -0
  431. package/dist/Types/Internal/Validity.js +8 -0
  432. package/dist/Types/Internal/ValidityWrapper.d.ts +5 -0
  433. package/dist/Types/Internal/ValidityWrapper.js +1 -0
  434. package/dist/Types/Internal/Variant.d.ts +10 -0
  435. package/dist/Types/Internal/Variant.js +11 -0
  436. package/dist/Types/Requests/IFillablePodLineDateRequestBody.d.ts +11 -0
  437. package/dist/Types/Requests/IFillablePodLineDateRequestBody.js +10 -0
  438. package/dist/Types/Requests/IRequiredPodLineDateRequestBody.d.ts +12 -0
  439. package/dist/Types/Requests/IRequiredPodLineDateRequestBody.js +8 -0
  440. package/dist/Types/Requests/IValidatedPodLineDateRequestBody.d.ts +14 -0
  441. package/dist/Types/Requests/IValidatedPodLineDateRequestBody.js +10 -0
  442. package/dist/Types/Responses/AddressType.d.ts +3 -0
  443. package/dist/Types/Responses/AddressType.js +2 -0
  444. package/dist/Types/Responses/IAddress.d.ts +39 -0
  445. package/dist/Types/Responses/IAddress.js +30 -0
  446. package/dist/Types/Responses/IBaseAddress.d.ts +17 -0
  447. package/dist/Types/Responses/IBaseAddress.js +15 -0
  448. package/dist/Types/Responses/ICountry.d.ts +16 -0
  449. package/dist/Types/Responses/ICountry.js +1 -0
  450. package/dist/Types/Responses/IDBEntry.d.ts +13 -0
  451. package/dist/Types/Responses/IDBEntry.js +12 -0
  452. package/dist/Types/Responses/IErrorResponse.d.ts +10 -0
  453. package/dist/Types/Responses/IErrorResponse.js +1 -0
  454. package/dist/Types/Responses/ILabelPrinter.d.ts +4 -0
  455. package/dist/Types/Responses/ILabelPrinter.js +1 -0
  456. package/dist/Types/Responses/ILaserPrinter.d.ts +4 -0
  457. package/dist/Types/Responses/ILaserPrinter.js +1 -0
  458. package/dist/Types/Responses/ILoginResponse.d.ts +8 -0
  459. package/dist/Types/Responses/ILoginResponse.js +1 -0
  460. package/dist/Types/Responses/IPaginatedPayload.d.ts +5 -0
  461. package/dist/Types/Responses/IPaginatedPayload.js +1 -0
  462. package/dist/Types/Responses/IPaginatedResponse.d.ts +5 -0
  463. package/dist/Types/Responses/IPaginatedResponse.js +1 -0
  464. package/dist/Types/Responses/IPagination.d.ts +9 -0
  465. package/dist/Types/Responses/IPagination.js +1 -0
  466. package/dist/Types/Responses/IPayload.d.ts +3 -0
  467. package/dist/Types/Responses/IPayload.js +1 -0
  468. package/dist/Types/Responses/IPrinter.d.ts +11 -0
  469. package/dist/Types/Responses/IPrinter.js +1 -0
  470. package/dist/Types/Responses/IProcessTypeSelectionMethodOutboundType.d.ts +18 -0
  471. package/dist/Types/Responses/IProcessTypeSelectionMethodOutboundType.js +12 -0
  472. package/dist/Types/Responses/IProcessTypeSelectionMethodWarehouseCustomer.d.ts +20 -0
  473. package/dist/Types/Responses/IProcessTypeSelectionMethodWarehouseCustomer.js +14 -0
  474. package/dist/Types/Responses/IProcessTypeSelectionMethodWarehouseCustomerType.d.ts +20 -0
  475. package/dist/Types/Responses/IProcessTypeSelectionMethodWarehouseCustomerType.js +14 -0
  476. package/dist/Types/Responses/IProductCategory.d.ts +19 -0
  477. package/dist/Types/Responses/IProductCategory.js +13 -0
  478. package/dist/Types/Responses/IProductCategoryDetails.d.ts +33 -0
  479. package/dist/Types/Responses/IProductCategoryDetails.js +13 -0
  480. package/dist/Types/Responses/IProductIgnoreOnAllocationOutboundType.d.ts +17 -0
  481. package/dist/Types/Responses/IProductIgnoreOnAllocationOutboundType.js +11 -0
  482. package/dist/Types/Responses/IProductLocation.d.ts +23 -0
  483. package/dist/Types/Responses/IProductLocation.js +17 -0
  484. package/dist/Types/Responses/IResponse.d.ts +8 -0
  485. package/dist/Types/Responses/IResponse.js +1 -0
  486. package/dist/Types/Responses/IStockSortationMethodCustomer.d.ts +18 -0
  487. package/dist/Types/Responses/IStockSortationMethodCustomer.js +12 -0
  488. package/dist/Types/Responses/Pods/IAttributeTypeWithAI.d.ts +8 -0
  489. package/dist/Types/Responses/Pods/IAttributeTypeWithAI.js +1 -0
  490. package/dist/Types/Responses/Pods/IBatchType.d.ts +5 -0
  491. package/dist/Types/Responses/Pods/IBatchType.js +1 -0
  492. package/dist/Types/Responses/Pods/IDateType.d.ts +6 -0
  493. package/dist/Types/Responses/Pods/IDateType.js +1 -0
  494. package/dist/Types/Responses/Pods/IFillablePodLineAttribute.d.ts +10 -0
  495. package/dist/Types/Responses/Pods/IFillablePodLineAttribute.js +9 -0
  496. package/dist/Types/Responses/Pods/IFillablePodLineBatch.d.ts +18 -0
  497. package/dist/Types/Responses/Pods/IFillablePodLineBatch.js +12 -0
  498. package/dist/Types/Responses/Pods/IFillablePodLineDate.d.ts +19 -0
  499. package/dist/Types/Responses/Pods/IFillablePodLineDate.js +13 -0
  500. package/dist/Types/Responses/Pods/IFillablePodLinePurchaseOrder.d.ts +18 -0
  501. package/dist/Types/Responses/Pods/IFillablePodLinePurchaseOrder.js +12 -0
  502. package/dist/Types/Responses/Pods/IFillablePodLineSerial.d.ts +18 -0
  503. package/dist/Types/Responses/Pods/IFillablePodLineSerial.js +12 -0
  504. package/dist/Types/Responses/Pods/IFillablePodLineTag.d.ts +18 -0
  505. package/dist/Types/Responses/Pods/IFillablePodLineTag.js +12 -0
  506. package/dist/Types/Responses/Pods/IPurchaseOrderType.d.ts +5 -0
  507. package/dist/Types/Responses/Pods/IPurchaseOrderType.js +1 -0
  508. package/dist/Types/Responses/Pods/IRequiredOrValidatedAttribute.d.ts +5 -0
  509. package/dist/Types/Responses/Pods/IRequiredOrValidatedAttribute.js +7 -0
  510. package/dist/Types/Responses/Pods/IRequiredPodLineBatch.d.ts +16 -0
  511. package/dist/Types/Responses/Pods/IRequiredPodLineBatch.js +8 -0
  512. package/dist/Types/Responses/Pods/IRequiredPodLineDate.d.ts +17 -0
  513. package/dist/Types/Responses/Pods/IRequiredPodLineDate.js +8 -0
  514. package/dist/Types/Responses/Pods/IRequiredPodLinePurchaseOrder.d.ts +19 -0
  515. package/dist/Types/Responses/Pods/IRequiredPodLinePurchaseOrder.js +8 -0
  516. package/dist/Types/Responses/Pods/IRequiredPodLineSerial.d.ts +19 -0
  517. package/dist/Types/Responses/Pods/IRequiredPodLineSerial.js +8 -0
  518. package/dist/Types/Responses/Pods/IRequiredPodLineTag.d.ts +19 -0
  519. package/dist/Types/Responses/Pods/IRequiredPodLineTag.js +8 -0
  520. package/dist/Types/Responses/Pods/ISerialType.d.ts +6 -0
  521. package/dist/Types/Responses/Pods/ISerialType.js +1 -0
  522. package/dist/Types/Responses/Pods/ITagType.d.ts +6 -0
  523. package/dist/Types/Responses/Pods/ITagType.js +1 -0
  524. package/dist/Types/Responses/Pods/IValidatedPodLineAttribute.d.ts +13 -0
  525. package/dist/Types/Responses/Pods/IValidatedPodLineAttribute.js +10 -0
  526. package/dist/Types/Responses/Pods/IValidatedPodLineBatch.d.ts +17 -0
  527. package/dist/Types/Responses/Pods/IValidatedPodLineBatch.js +10 -0
  528. package/dist/Types/Responses/Pods/IValidatedPodLineDate.d.ts +19 -0
  529. package/dist/Types/Responses/Pods/IValidatedPodLineDate.js +10 -0
  530. package/dist/Types/Responses/Pods/IValidatedPodLinePurchaseOrder.d.ts +20 -0
  531. package/dist/Types/Responses/Pods/IValidatedPodLinePurchaseOrder.js +10 -0
  532. package/dist/Types/Responses/Pods/IValidatedPodLineSerial.d.ts +20 -0
  533. package/dist/Types/Responses/Pods/IValidatedPodLineSerial.js +10 -0
  534. package/dist/Types/Responses/Pods/IValidatedPodLineTag.d.ts +20 -0
  535. package/dist/Types/Responses/Pods/IValidatedPodLineTag.js +10 -0
  536. package/dist/Types/Responses/Products/IAttributeRule.d.ts +34 -0
  537. package/dist/Types/Responses/Products/IAttributeRule.js +28 -0
  538. package/dist/Types/Responses/Products/IBarcode.d.ts +18 -0
  539. package/dist/Types/Responses/Products/IBarcode.js +12 -0
  540. package/dist/Types/Responses/Products/IBatchRule.d.ts +36 -0
  541. package/dist/Types/Responses/Products/IBatchRule.js +9 -0
  542. package/dist/Types/Responses/Products/ICustomerRule.d.ts +23 -0
  543. package/dist/Types/Responses/Products/ICustomerRule.js +17 -0
  544. package/dist/Types/Responses/Products/IDateRule.d.ts +36 -0
  545. package/dist/Types/Responses/Products/IDateRule.js +9 -0
  546. package/dist/Types/Responses/Products/IPrice.d.ts +19 -0
  547. package/dist/Types/Responses/Products/IPrice.js +12 -0
  548. package/dist/Types/Responses/Products/IProduct.d.ts +436 -0
  549. package/dist/Types/Responses/Products/IProduct.js +77 -0
  550. package/dist/Types/Responses/Products/IProductKit.d.ts +24 -0
  551. package/dist/Types/Responses/Products/IProductKit.js +18 -0
  552. package/dist/Types/Responses/Products/IProductKitMatrix.d.ts +13 -0
  553. package/dist/Types/Responses/Products/IProductKitMatrix.js +1 -0
  554. package/dist/Types/Responses/Products/IProductSupplier.d.ts +18 -0
  555. package/dist/Types/Responses/Products/IProductSupplier.js +12 -0
  556. package/dist/Types/Responses/Products/IProductTag.d.ts +33 -0
  557. package/dist/Types/Responses/Products/IProductTag.js +14 -0
  558. package/dist/Types/Responses/Products/IProductTagType.d.ts +18 -0
  559. package/dist/Types/Responses/Products/IProductTagType.js +12 -0
  560. package/dist/Types/Responses/Products/IProductUnitOfMeasure.d.ts +97 -0
  561. package/dist/Types/Responses/Products/IProductUnitOfMeasure.js +35 -0
  562. package/dist/Types/Responses/Products/IProductUnitOfMeasurePrice.d.ts +36 -0
  563. package/dist/Types/Responses/Products/IProductUnitOfMeasurePrice.js +17 -0
  564. package/dist/Types/Responses/Products/IPurchaseOrderRule.d.ts +36 -0
  565. package/dist/Types/Responses/Products/IPurchaseOrderRule.js +9 -0
  566. package/dist/Types/Responses/Products/ISerialRule.d.ts +36 -0
  567. package/dist/Types/Responses/Products/ISerialRule.js +9 -0
  568. package/dist/Types/Responses/Products/ITagRule.d.ts +36 -0
  569. package/dist/Types/Responses/Products/ITagRule.js +9 -0
  570. package/dist/Types/Responses/Products/IUnitOfMeasure.d.ts +18 -0
  571. package/dist/Types/Responses/Products/IUnitOfMeasure.js +12 -0
  572. package/dist/index.d.ts +1 -0
  573. package/dist/index.js +2 -0
  574. package/dist/scss/basics.scss +12 -0
  575. package/dist/scss/colours.d.ts +94 -0
  576. package/dist/scss/colours.js +138 -0
  577. package/dist/scss/colours.scss +134 -0
  578. package/dist/scss/mixins.scss +2778 -0
  579. package/dist/scss/sizing.scss +72 -0
  580. package/dist/scss/transitions.scss +8 -0
  581. package/package.json +92 -0
@@ -0,0 +1,2317 @@
1
+ import { browser, dev } from '$app/environment';
2
+ import { SvelteMap, SvelteSet } from 'svelte/reactivity';
3
+ import { ColumnType } from '../Columns/ColumnType.js';
4
+ import { ToolbarPosition } from '../Toolbar/ToolbarPosition.js';
5
+ import { RowSelectionDef } from '../Columns/Definitions/RowSelection/RowSelectionDef.svelte.js';
6
+ import { tick } from 'svelte';
7
+ import { PaginationType } from '../Pagination/PaginationType.js';
8
+ import { getCanvasContext } from '../../../../Helpers/Helpers.svelte.js';
9
+ import { AccessorDef } from '../Columns/Definitions/Accessors/AccessorDef.svelte.js';
10
+ import { NumberInputDef } from '../Columns/Definitions/Accessors/NumberInputDef.svelte.js';
11
+ import { SelectDef } from '../Columns/Definitions/Accessors/SelectDef.svelte.js';
12
+ import { TextInputDef } from '../Columns/Definitions/Accessors/TextInputDef.js';
13
+ import { CheckboxDef } from '../Columns/Definitions/Accessors/CheckboxDef.js';
14
+ import { DateInputDef } from '../Columns/Definitions/Accessors/DateInputDef.svelte.js';
15
+ import { ProgressBarDef } from '../Columns/Definitions/Display/ProgressBarDef.svelte.js';
16
+ import { DisplayDef } from '../Columns/Definitions/Display/DisplayDef.js';
17
+ const SORTING_ICON_WIDTH = 24;
18
+ const InternalSymbol = Symbol();
19
+ export class TableContext {
20
+ defaultColumnDefs;
21
+ tableName;
22
+ allowCopy;
23
+ enableResize;
24
+ allowColumnReordering;
25
+ allowQuickFiltering;
26
+ allowAdvancedFiltering;
27
+ toolbarPosition;
28
+ displayFooter;
29
+ selectionExtractor;
30
+ getUserId;
31
+ _onEditCell;
32
+ static identifier = Symbol();
33
+ static init(defaultColumnDefs, tableName, dataRepo, options) {
34
+ const context = new this(InternalSymbol, defaultColumnDefs, tableName, dataRepo, options.allowCopy ?? true, options.enableResize ?? true, options.allowColumnReordering ?? true, options.allowQuickFiltering ?? true, options.allowAdvancedFiltering ?? true, options.toolbar ?? ToolbarPosition.Right, options.displayFooter ?? true, options.selectionExtractor, options.getUserId, options.onEditCell);
35
+ return context;
36
+ }
37
+ // #region constructor
38
+ constructor(INTERNAL_ONLY, defaultColumnDefs, tableName, dataRepo, allowCopy, enableResize, allowColumnReordering, allowQuickFiltering, allowAdvancedFiltering, toolbarPosition, displayFooter, selectionExtractor, getUserId, _onEditCell = async () => {
39
+ if (dev) {
40
+ throw new Error('Cannot edit immutable table');
41
+ }
42
+ }) {
43
+ this.defaultColumnDefs = defaultColumnDefs;
44
+ this.tableName = tableName;
45
+ this.allowCopy = allowCopy;
46
+ this.enableResize = enableResize;
47
+ this.allowColumnReordering = allowColumnReordering;
48
+ this.allowQuickFiltering = allowQuickFiltering;
49
+ this.allowAdvancedFiltering = allowAdvancedFiltering;
50
+ this.toolbarPosition = toolbarPosition;
51
+ this.displayFooter = displayFooter;
52
+ this.selectionExtractor = selectionExtractor;
53
+ this.getUserId = getUserId;
54
+ this._onEditCell = _onEditCell;
55
+ if (INTERNAL_ONLY != InternalSymbol) {
56
+ throw new Error('This class may only be instantiated through the static init() method');
57
+ }
58
+ this.dataRepo = dataRepo;
59
+ // this.dataRepo.forceRefresh = this.forceVisibilityUpdate;
60
+ if (defaultColumnDefs.remoteFilters) {
61
+ this.remoteFilters = defaultColumnDefs.remoteFilters;
62
+ }
63
+ if (hasPagination(dataRepo)) {
64
+ this.paginationRepo = dataRepo;
65
+ // this.tableOptions.onSortingChange = dataRepo.updateSorting;
66
+ // this.tableOptions.manualSorting = dataRepo.manualSorting;
67
+ }
68
+ this.userId = $derived(getUserId());
69
+ if (browser) {
70
+ this._getUserDefaults();
71
+ const removeInvalidPresets = () => {
72
+ if (dev) {
73
+ console.warn('invalid presets');
74
+ }
75
+ localStorage.removeItem(`${this.userId}-${tableName}-presets`);
76
+ localStorage.removeItem(`${this.userId}-${tableName}-selected-preset-name`);
77
+ const visibilityState = {};
78
+ this.columnDefs.forEach((def) => {
79
+ if (def.defaultHidden || def.columnType === ColumnType.FilterOnly) {
80
+ visibilityState[def.id] = false;
81
+ }
82
+ });
83
+ const defaultPreset = {
84
+ name: 'default',
85
+ columnDefs: this.columnDefs,
86
+ sortingState: [],
87
+ visibilityState,
88
+ columnPinningState: {}
89
+ };
90
+ this.selectedPreset = defaultPreset;
91
+ this.columnVisibility = visibilityState;
92
+ this.columnPresets = [...this.columnPresets, defaultPreset];
93
+ };
94
+ this.setupDefaultColumnDefs()
95
+ .then(() => {
96
+ if (this.allowColumnReordering) {
97
+ const savedPresets = localStorage.getItem(`${this.userId}-${tableName}-presets`);
98
+ if (savedPresets) {
99
+ const presets = JSON.parse(savedPresets);
100
+ if (presets[0] && areDefsEquivalent(this.columnDefs, presets[0].columnDefs)) {
101
+ return this.reassignDefsToPresets(presets).then(() => presets);
102
+ }
103
+ }
104
+ }
105
+ throw new Error('Invalid Presets');
106
+ })
107
+ .then((presets) => {
108
+ const savedPresetName = localStorage.getItem(`${this.userId}-${tableName}-selected-preset-name`);
109
+ if (savedPresetName) {
110
+ const preset = presets.find((it) => it.name === savedPresetName);
111
+ if (preset && areDefsEquivalent(this.columnDefs, preset.columnDefs)) {
112
+ this.columnDefs = preset.columnDefs;
113
+ if (preset.visibilityState) {
114
+ this.columnVisibility = preset.visibilityState;
115
+ }
116
+ if (preset.columnPinningState) {
117
+ this.columnPinning = preset.columnPinningState;
118
+ }
119
+ this.selectedPreset = preset;
120
+ }
121
+ else {
122
+ localStorage.removeItem(`${this.userId}-${tableName}-selected-preset-name`);
123
+ this.selectedPreset = presets[0];
124
+ if (presets[0].visibilityState) {
125
+ this.columnVisibility = presets[0].visibilityState;
126
+ }
127
+ }
128
+ this.columnPresets = presets;
129
+ return;
130
+ }
131
+ })
132
+ .catch(() => {
133
+ removeInvalidPresets();
134
+ });
135
+ }
136
+ }
137
+ // #endregion
138
+ // #region stores
139
+ userId;
140
+ isSelectable = $derived(this.columnDefs.some((it) => it.id.includes('is-selectable-')));
141
+ __queryValues = new SvelteMap();
142
+ _paginationRepo = $state();
143
+ get paginationRepo() {
144
+ return this._paginationRepo;
145
+ }
146
+ set paginationRepo(v) {
147
+ this._paginationRepo = v;
148
+ }
149
+ _showQuickFiltering = $state(false);
150
+ get showQuickFiltering() {
151
+ return this._showQuickFiltering;
152
+ }
153
+ set showQuickFiltering(v) {
154
+ this._showQuickFiltering = this.allowQuickFiltering && v;
155
+ }
156
+ _dataRepo = $state();
157
+ get dataRepo() {
158
+ return this._dataRepo;
159
+ }
160
+ set dataRepo(v) {
161
+ this._dataRepo = v;
162
+ }
163
+ _remoteFilters = $state();
164
+ get remoteFilters() {
165
+ return this._remoteFilters;
166
+ }
167
+ set remoteFilters(v) {
168
+ this._remoteFilters = v;
169
+ }
170
+ _showSelectedOnly = $state(false);
171
+ get showSelectedOnly() {
172
+ return this._showSelectedOnly;
173
+ }
174
+ set showSelectedOnly(v) {
175
+ this._showSelectedOnly = v;
176
+ }
177
+ _dateFilter = $derived(this.paginationRepo?.dateFilter);
178
+ get dateFilter() {
179
+ return this._dateFilter;
180
+ }
181
+ _numberFilter = $derived(this.paginationRepo?.numberFilter);
182
+ get numberFilter() {
183
+ return this._numberFilter;
184
+ }
185
+ _selectFilter = $derived(this.paginationRepo?.selectFilter);
186
+ get selectFilter() {
187
+ return this._selectFilter;
188
+ }
189
+ _boolFilter = $derived(this.paginationRepo?.boolFilter);
190
+ get boolFilter() {
191
+ return this._boolFilter;
192
+ }
193
+ _stringFilter = $derived(this.paginationRepo?.stringFilter);
194
+ get stringFilter() {
195
+ return this._stringFilter;
196
+ }
197
+ _limitFooter = $state(false);
198
+ get limitFooter() {
199
+ return this._limitFooter;
200
+ }
201
+ set limitFooter(v) {
202
+ this._limitFooter = v;
203
+ }
204
+ _dragTarget = $state(null);
205
+ get dragTarget() {
206
+ return this._dragTarget;
207
+ }
208
+ set dragTarget(v) {
209
+ this._dragTarget = v;
210
+ }
211
+ _columnDefs = $state([]);
212
+ get columnDefs() {
213
+ return this._columnDefs;
214
+ }
215
+ set columnDefs(v) {
216
+ // if (this._columnDefs.length > 0 && v != this._columnDefs) {
217
+ // debugger;
218
+ // }
219
+ this._columnDefs = v;
220
+ // this causes an error...?
221
+ // this.table = createTable(this.tableOptions);
222
+ }
223
+ _columnPresets = $state([]);
224
+ get columnPresets() {
225
+ return this._columnPresets;
226
+ }
227
+ set columnPresets(v) {
228
+ this._columnPresets = v;
229
+ }
230
+ //FIXME why was this allowed to be undefined?
231
+ _selectedPreset = $state();
232
+ get selectedPreset() {
233
+ return this._selectedPreset;
234
+ }
235
+ set selectedPreset(v) {
236
+ this._selectedPreset = v;
237
+ }
238
+ _focusedRowIndexIds = $state(new SvelteSet());
239
+ get focusedRowIndexIds() {
240
+ return this._focusedRowIndexIds;
241
+ }
242
+ set focusedRowIndexIds(v) {
243
+ this._focusedRowIndexIds = v;
244
+ }
245
+ _highlightedItems = $state(new SvelteMap());
246
+ get highlightedItems() {
247
+ return this._highlightedItems;
248
+ }
249
+ _focusedColumnIds = $state(new SvelteSet());
250
+ get focusedColumnIds() {
251
+ return this._focusedColumnIds;
252
+ }
253
+ set focusedColumnIds(v) {
254
+ this._focusedColumnIds = v;
255
+ }
256
+ _isMousingDown = $state(false);
257
+ get isMousingDown() {
258
+ return this._isMousingDown;
259
+ }
260
+ set isMousingDown(v) {
261
+ this._isMousingDown = v;
262
+ }
263
+ _focusStart = $state(null);
264
+ get focusStart() {
265
+ return this._focusStart;
266
+ }
267
+ set focusStart(v) {
268
+ this._focusStart = v;
269
+ this._recalculateFocusedElements();
270
+ }
271
+ _focusStartIsBeingEdited = $state(false);
272
+ get focusStartIsBeingEdited() {
273
+ return this._focusStartIsBeingEdited;
274
+ }
275
+ set focusStartIsBeingEdited(v) {
276
+ this._focusStartIsBeingEdited = v;
277
+ }
278
+ _focusEnd = $state(null);
279
+ get focusEnd() {
280
+ return this._focusEnd;
281
+ }
282
+ set focusEnd(v) {
283
+ this._focusEnd = v;
284
+ this._recalculateFocusedElements();
285
+ }
286
+ _singleClickEditing = $state(false);
287
+ get singleClickEditing() {
288
+ return this._singleClickEditing;
289
+ }
290
+ set singleClickEditing(v) {
291
+ this._singleClickEditing = v;
292
+ }
293
+ _changeColourOnHover = $state(true);
294
+ get changeColourOnHover() {
295
+ return this._changeColourOnHover;
296
+ }
297
+ set changeColourOnHover(v) {
298
+ this._changeColourOnHover = v;
299
+ }
300
+ _isCompact = $state(true);
301
+ get isCompact() {
302
+ return this._isCompact;
303
+ }
304
+ set isCompact(v) {
305
+ this._isCompact = v;
306
+ }
307
+ _alternateRowColours = $state(false);
308
+ get alternateRowColours() {
309
+ return this._alternateRowColours;
310
+ }
311
+ set alternateRowColours(v) {
312
+ this._alternateRowColours = v;
313
+ }
314
+ _copyWithHeaders = $state(true);
315
+ get copyWithHeaders() {
316
+ return this._copyWithHeaders;
317
+ }
318
+ set copyWithHeaders(v) {
319
+ this._copyWithHeaders = v;
320
+ }
321
+ _commaSeparatedCopy = $state(false);
322
+ get commaSeparatedCopy() {
323
+ return this._commaSeparatedCopy;
324
+ }
325
+ set commaSeparatedCopy(v) {
326
+ this._commaSeparatedCopy = v;
327
+ }
328
+ _columnSizing = $state({});
329
+ get columnSizing() {
330
+ return this._columnSizing;
331
+ }
332
+ set columnSizing(v) {
333
+ this._columnSizing = v;
334
+ }
335
+ _columnPinning = $state({});
336
+ get columnPinning() {
337
+ return this._columnPinning;
338
+ }
339
+ set columnPinning(v) {
340
+ this._columnPinning = v;
341
+ }
342
+ _columnVisibility = $state({});
343
+ get columnVisibility() {
344
+ return this._columnVisibility;
345
+ }
346
+ set columnVisibility(v) {
347
+ this._columnVisibility = v;
348
+ }
349
+ _openModalCoordinates = $state(null);
350
+ get openModalCoordinates() {
351
+ return this._openModalCoordinates;
352
+ }
353
+ set openModalCoordinates(v) {
354
+ this._openModalCoordinates = v;
355
+ }
356
+ _allSelectedInCurrentPage = $derived.by(() => {
357
+ if (!this.dataRepo || this.selectedItems.size === 0) {
358
+ return Promise.resolve(false);
359
+ }
360
+ const pageStartIndex = this.paginationRepo ? this.paginationRepo.pageStartIndex : 0;
361
+ const pageEndIndexExclusive = this.paginationRepo
362
+ ? Math.min(this.paginationRepo.pageEndIndexExclusive, this.sortedData.length)
363
+ : this.sortedData.length;
364
+ if (pageStartIndex == undefined || pageEndIndexExclusive == undefined) {
365
+ return Promise.resolve(false);
366
+ }
367
+ const selectableMethod = this.columnDefs.find((it) => it instanceof RowSelectionDef)?.isSelectable;
368
+ return this.allSelectedBySelectableMethod(pageStartIndex, pageEndIndexExclusive, selectableMethod);
369
+ });
370
+ get allSelectedInCurrentPage() {
371
+ return this._allSelectedInCurrentPage;
372
+ }
373
+ async allSelectedBySelectableMethod(pageStartIndex, pageEndIndexExclusive, selectableMethod) {
374
+ if (!this.dataRepo) {
375
+ return Promise.resolve(false);
376
+ }
377
+ if (selectableMethod) {
378
+ for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
379
+ const item = this.sortedData[index];
380
+ if ((await selectableMethod(item, index)) &&
381
+ !this.selectedItems.has(this.selectionExtractor(item))) {
382
+ return Promise.resolve(false);
383
+ }
384
+ }
385
+ }
386
+ else {
387
+ for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
388
+ const item = this.sortedData[index];
389
+ if (!this.selectedItems.has(this.selectionExtractor(item))) {
390
+ return Promise.resolve(false);
391
+ }
392
+ }
393
+ }
394
+ return Promise.resolve(true);
395
+ }
396
+ async _areAllHighlighted(pageStartIndex, pageEndIndexExclusive) {
397
+ if (!this.dataRepo) {
398
+ return Promise.resolve(false);
399
+ }
400
+ for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
401
+ const item = this.sortedData[index];
402
+ if (!this.highlightedItems.has(this.selectionExtractor(item))) {
403
+ return Promise.resolve(false);
404
+ }
405
+ }
406
+ return Promise.resolve(true);
407
+ }
408
+ _allHighlighted = $derived.by(() => {
409
+ if (!this.dataRepo || this.highlightedItems.size === 0) {
410
+ return Promise.resolve(false);
411
+ }
412
+ const pageStartIndex = this.paginationRepo ? this.paginationRepo.pageStartIndex : 0;
413
+ const pageEndIndexExclusive = this.paginationRepo
414
+ ? Math.min(this.paginationRepo.pageEndIndexExclusive, this.sortedData.length)
415
+ : this.sortedData.length;
416
+ if (pageStartIndex == undefined || pageEndIndexExclusive == undefined) {
417
+ return Promise.resolve(false);
418
+ }
419
+ return this._areAllHighlighted(pageStartIndex, pageEndIndexExclusive);
420
+ });
421
+ get allHighlighted() {
422
+ return this._allHighlighted;
423
+ }
424
+ // private _allHighlighted: boolean = $derived.by(() => {
425
+ // if (!this.dataRepo || this.highlightedItems.size === 0) {
426
+ // return false;
427
+ // }
428
+ // const pageStartIndex = this.paginationRepo ? this.paginationRepo.pageStartIndex : 0;
429
+ // const pageEndIndexExclusive = this.paginationRepo
430
+ // ? Math.min(this.paginationRepo.pageEndIndexExclusive, this.sortedData.length)
431
+ // : this.sortedData.length;
432
+ // if (pageStartIndex == undefined || pageEndIndexExclusive == undefined) {
433
+ // return false;
434
+ // }
435
+ // for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
436
+ // if (!this.highlightedItems.has(index)) {
437
+ // return false;
438
+ // }
439
+ // }
440
+ // return true;
441
+ // });
442
+ // public get allHighlighted(): boolean {
443
+ // return this._allHighlighted;
444
+ // }
445
+ _hasHighlightedItems = $derived(this.highlightedItems.size > 0);
446
+ get hasHighlightedItems() {
447
+ return this._hasHighlightedItems;
448
+ }
449
+ //type of entries depends on the value extractor in the column def
450
+ _selectedItems = $state(new SvelteMap());
451
+ get selectedItems() {
452
+ return this._selectedItems;
453
+ }
454
+ set selectedItems(v) {
455
+ this._selectedItems = v;
456
+ }
457
+ // HACK this is lazily loaded. it will not be used before initialisation.
458
+ // public getSelectedItemsAsObjects = (): T[] => {
459
+ // if (!this.selectionExtractor) {
460
+ // throw new Error("No selection extractor was supplied.")
461
+ // };
462
+ // return this.sortedData.filter((item) => {
463
+ // return this._selectedIdentifiers.has(this.selectionExtractor(item));
464
+ // }) ?? []
465
+ // }
466
+ // public get selectedItemsAsObjects(): T[] {
467
+ // return this._selectedItemsAsObjects;
468
+ // }
469
+ _invalidValues = $state(new SvelteMap());
470
+ get invalidValues() {
471
+ return this._invalidValues;
472
+ }
473
+ set invalidValues(v) {
474
+ this._invalidValues = v;
475
+ }
476
+ _hasInvalidSelectedItems = $state(false);
477
+ get hasInvalidSelectedItems() {
478
+ return this._hasInvalidSelectedItems;
479
+ }
480
+ set hasInvalidSelectedItems(v) {
481
+ this._hasInvalidSelectedItems = v;
482
+ }
483
+ columnDefsById = $derived(new Map(this.columnDefs.map((it) => [it.id, it])));
484
+ getSortingFn = (id, desc) => {
485
+ if (this.dataRepo?.data.length == 0) {
486
+ return undefined;
487
+ }
488
+ const def = this.columnDefsById?.get(id);
489
+ if (!def) {
490
+ return undefined;
491
+ }
492
+ if (def instanceof DisplayDef ||
493
+ def instanceof TextInputDef ||
494
+ def instanceof NumberInputDef ||
495
+ def instanceof DateInputDef) {
496
+ return comparableSortingFn(id, desc);
497
+ }
498
+ if (def instanceof CheckboxDef) {
499
+ return checkboxSortingFn(id, desc);
500
+ }
501
+ if (def instanceof SelectDef) {
502
+ return def.sortingFn ?? comparableSortingFn(id, desc);
503
+ }
504
+ if (def instanceof ProgressBarDef) {
505
+ return progressSortingFn(id, desc);
506
+ }
507
+ // if (dev) {
508
+ // console.warn('Unhandled def type ' + id, def);
509
+ // }
510
+ return comparableSortingFn(id, desc);
511
+ };
512
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
513
+ originalRowIndices = $derived(new Map((this.dataRepo?.data ?? []).map((item, index) => [item, index])));
514
+ sortedData = $derived.by(() => {
515
+ if (this.paginationRepo?.paginationType == PaginationType.Local) {
516
+ const state = this.dataRepo?.sorting ?? [];
517
+ const sortedData = this.showSelectedOnly
518
+ ? // FIXME this will show the selected items by order of insertion to the selectedItems map.
519
+ [...this.selectedItems.values()]
520
+ : (this.dataRepo?.data.concat() ?? []);
521
+ sortedData.sort((a, b) => {
522
+ const end = state.length;
523
+ for (let i = 0; i < end; i++) {
524
+ const { id, desc } = state[i];
525
+ const sortingFn = this.getSortingFn(id, desc);
526
+ if (sortingFn) {
527
+ const result = sortingFn(a, b);
528
+ if (result != 0) {
529
+ return result;
530
+ }
531
+ }
532
+ else {
533
+ console.warn('no sorting fn found for ' + id);
534
+ }
535
+ }
536
+ return 0;
537
+ });
538
+ return sortedData;
539
+ }
540
+ return this.dataRepo?.data ?? [];
541
+ });
542
+ sortedRowModel = $derived.by(() => {
543
+ const rows = this.sortedData.map((item, index) => {
544
+ const unsortedIndex = this.originalRowIndices.get(item) ?? index;
545
+ const row = {
546
+ getValue: (key) => this.columnDefsById.get(key).accessorFn?.(item, unsortedIndex) ?? item[key],
547
+ original: item,
548
+ index,
549
+ id: index.toString(),
550
+ getLeftVisibleCells: () => leftVisibleCells,
551
+ getRightVisibleCells: () => rightVisibleCells,
552
+ getCenterVisibleCells: () => centerVisibleCells
553
+ };
554
+ const makeRow = (def) => {
555
+ const isVisible = $derived(this.columnVisibility[def.id] != false);
556
+ const isSorted = $derived.by(() => {
557
+ const sortState = this.paginationRepo?.sorting.find((it) => it.id == def.id);
558
+ if (!sortState) {
559
+ return 'none';
560
+ }
561
+ if (sortState.desc) {
562
+ return 'desc';
563
+ }
564
+ return 'asc';
565
+ });
566
+ return {
567
+ column: {
568
+ columnDef: def,
569
+ getCanSort: () => def.enableSorting,
570
+ getIsResizing: () => def.isResizing,
571
+ getIsSorted: () => isSorted,
572
+ getIsVisible: () => isVisible,
573
+ getToggleSortingHandler: () => def.enableSorting ? this.getToggleSortingHandler(def) : undefined,
574
+ id: def.id
575
+ },
576
+ id: `${index}_${def.id}`,
577
+ row: row,
578
+ getValue: () => def.accessorFn?.(item, index) ?? item[def.id] // TODO
579
+ };
580
+ };
581
+ const makeCellFromId = (columnId) => {
582
+ const def = this.columnDefsById.get(columnId);
583
+ return makeRow(def);
584
+ };
585
+ const leftVisibleCells = $derived(this.columnPinning.left?.map(makeCellFromId) ?? []);
586
+ const rightVisibleCells = $derived(this.columnPinning.right?.map(makeCellFromId) ?? []);
587
+ const centerVisibleCells = $derived(this.columnDefs
588
+ .filter((it) => !(this.columnPinning.left?.includes(it.id) ||
589
+ this.columnPinning.right?.includes(it.id)))
590
+ .map(makeRow));
591
+ return row;
592
+ });
593
+ return {
594
+ rows,
595
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
596
+ rowsById: new Map(rows.map((it, index) => [index.toString(), it])) //FIXME should this be by sorted id or by original id?
597
+ };
598
+ });
599
+ _currentPageData = $derived(this.dataRepo?.paginationType == PaginationType.Local
600
+ ? this.sortedData.slice(this.dataRepo.pageStartIndex, this.dataRepo.pageEndIndexExclusive)
601
+ : (this.sortedData ?? []));
602
+ paginationRowModel = $derived.by(() => {
603
+ const sortedData = this._currentPageData;
604
+ const rows = sortedData.map((item, index) => {
605
+ const row = {
606
+ getValue: (key) => this.columnDefsById.get(key).accessorFn?.(item, index) ?? item[key],
607
+ original: item,
608
+ index,
609
+ id: index.toString(),
610
+ getLeftVisibleCells: () => leftVisibleCells,
611
+ getRightVisibleCells: () => rightVisibleCells,
612
+ getCenterVisibleCells: () => centerVisibleCells
613
+ };
614
+ const makeRow = (def) => {
615
+ const isSorted = $derived.by(() => {
616
+ const sortState = this.paginationRepo?.sorting.find((it) => it.id == def.id);
617
+ if (!sortState) {
618
+ return 'none';
619
+ }
620
+ if (sortState.desc) {
621
+ return 'desc';
622
+ }
623
+ return 'asc';
624
+ });
625
+ const isVisible = $derived(this.columnVisibility[def.id] != false);
626
+ return {
627
+ column: {
628
+ columnDef: def,
629
+ getCanSort: () => def.enableSorting,
630
+ getIsResizing: () => def.isResizing,
631
+ getIsSorted: () => isSorted,
632
+ getIsVisible: () => isVisible,
633
+ getToggleSortingHandler: () => def.enableSorting ? this.getToggleSortingHandler(def) : undefined,
634
+ id: def.id
635
+ },
636
+ id: `${index}_${def.id}`,
637
+ row: row,
638
+ getValue: () => def.accessorFn?.(item, index) ?? item[def.id] // TODO
639
+ };
640
+ };
641
+ const makeCellFromId = (columnId) => {
642
+ const def = this.columnDefsById.get(columnId);
643
+ return makeRow(def);
644
+ };
645
+ const leftVisibleCells = $derived(this.columnPinning.left?.map(makeCellFromId) ?? []);
646
+ const rightVisibleCells = $derived(this.columnPinning.right?.map(makeCellFromId) ?? []);
647
+ const centerVisibleCells = $derived(this.columnDefs
648
+ .filter((it) => !(this.columnPinning.left?.includes(it.id) ||
649
+ this.columnPinning.right?.includes(it.id)))
650
+ .map(makeRow));
651
+ return row;
652
+ });
653
+ return {
654
+ rows,
655
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
656
+ rowsById: new Map(rows.map((it, index) => [index.toString(), it])) //FIXME should this be by sorted id or by original id?
657
+ };
658
+ });
659
+ get currentPageData() {
660
+ return this._currentPageData;
661
+ }
662
+ // #endregion
663
+ // #region public methods
664
+ selectionContains = (item) => {
665
+ if (!this.selectionExtractor) {
666
+ throw new Error('No selection extractor was supplied');
667
+ }
668
+ if (!this.isSelectable) {
669
+ return true;
670
+ }
671
+ return this.selectedItems.has(this.selectionExtractor(item));
672
+ };
673
+ // public readonly HACK__reselectItem = (item: T) => {
674
+ // if (!this.selectionExtractor) {
675
+ // throw new Error('No selection extractor was supplied');
676
+ // }
677
+ // if (!this.isSelectable) {
678
+ // return true;
679
+ // }
680
+ // const key = this.selectionExtractor(item);
681
+ // if (this.selectedItems.has(key)) {
682
+ // this.selectedItems.delete(key);
683
+ // this.selectedItems.set(key, item);
684
+ // } else {
685
+ // this.selectedItems.set(key, item);
686
+ // this.selectedItems.delete(key);
687
+ // }
688
+ // };
689
+ addInvalidValue = (item) => {
690
+ this.invalidValues.set(this.selectionExtractor(item), item);
691
+ };
692
+ removeInvalidValue = (item) => {
693
+ this.invalidValues.delete(this.selectionExtractor(item));
694
+ };
695
+ setOpenModalCoordinates = (coordinates) => {
696
+ this.openModalCoordinates = coordinates ? { ...coordinates } : null;
697
+ };
698
+ toggleHighlightedRow = (item) => {
699
+ const key = this.selectionExtractor(item);
700
+ if (this.highlightedItems.has(key)) {
701
+ this.highlightedItems.delete(key);
702
+ }
703
+ else {
704
+ this.highlightedItems.set(key, item);
705
+ }
706
+ };
707
+ // public readonly toggleHighlightedRow = (rowIndex: number) => {
708
+ // if (this.highlightedRowIndexIds.has(rowIndex)) {
709
+ // this.highlightedRowIndexIds.delete(rowIndex);
710
+ // } else {
711
+ // this.highlightedRowIndexIds.add(rowIndex);
712
+ // }
713
+ // };
714
+ resetHighlightedRows = () => {
715
+ this.highlightedItems.clear();
716
+ };
717
+ toggleSelected = (item, selected) => {
718
+ const key = this.selectionExtractor(item);
719
+ if (selected) {
720
+ this.selectedItems.set(key, item);
721
+ }
722
+ else {
723
+ this.selectedItems.delete(key);
724
+ }
725
+ this.recalculateAllSelectedInCurrentPage();
726
+ };
727
+ setSelectionMap = (set) => {
728
+ this.selectedItems = set;
729
+ };
730
+ updateSelectedItems = async () => {
731
+ if (!this.dataRepo) {
732
+ return;
733
+ }
734
+ const pageStartIndex = this.paginationRepo ? this.paginationRepo.pageStartIndex : 0;
735
+ const pageEndIndexExclusive = this.paginationRepo
736
+ ? Math.min(this.paginationRepo.pageEndIndexExclusive, this.sortedData.length)
737
+ : this.sortedData.length;
738
+ const selectableMethod = this.columnDefs.find((it) => it instanceof RowSelectionDef)?.isSelectable;
739
+ if (selectableMethod) {
740
+ for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
741
+ const item = this.sortedData[index];
742
+ if (await selectableMethod(item, index)) {
743
+ const key = this.selectionExtractor(item);
744
+ if (this.selectedItems.has(key)) {
745
+ //replace selected item with newer version of the same identity
746
+ this.selectedItems.set(key, item);
747
+ }
748
+ }
749
+ }
750
+ }
751
+ else {
752
+ for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
753
+ const item = this.sortedData[index];
754
+ const key = this.selectionExtractor(item);
755
+ if (this.selectedItems.has(key)) {
756
+ //replace selected item with newer version of the same identity
757
+ this.selectedItems.set(key, item);
758
+ }
759
+ }
760
+ }
761
+ this.recalculateAllSelectedInCurrentPage();
762
+ };
763
+ resetSelectedItems = () => {
764
+ for (const key of this.selectedItems.keys()) {
765
+ this.selectedItems.delete(key);
766
+ }
767
+ this.recalculateAllSelectedInCurrentPage();
768
+ };
769
+ recalculateAllSelectedInCurrentPage = () => {
770
+ tick().then(() => {
771
+ this.allSelectedInCurrentPage?.then(() => {
772
+ this.hasInvalidSelectedItems = [...this.selectedItems.keys()].some((key) => this._invalidValues.has(key));
773
+ });
774
+ });
775
+ };
776
+ onSelectAllInCurrentPage = async () => {
777
+ if (!this.dataRepo) {
778
+ return;
779
+ }
780
+ if (await this.allSelectedInCurrentPage) {
781
+ // this.resetSelectedItems();
782
+ const pageStartIndex = this.paginationRepo ? this.paginationRepo.pageStartIndex : 0;
783
+ const pageEndIndexExclusive = this.paginationRepo
784
+ ? Math.min(this.paginationRepo.pageEndIndexExclusive, this.sortedData.length)
785
+ : this.sortedData.length;
786
+ for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
787
+ const item = this.sortedData[index];
788
+ this.selectedItems.delete(this.selectionExtractor(item));
789
+ }
790
+ }
791
+ else {
792
+ // this.resetSelectedItems();
793
+ // const selectedItems = new SvelteSet<number>();
794
+ const pageStartIndex = this.paginationRepo ? this.paginationRepo.pageStartIndex : 0;
795
+ const pageEndIndexExclusive = this.paginationRepo
796
+ ? Math.min(this.paginationRepo.pageEndIndexExclusive, this.sortedData.length)
797
+ : this.sortedData.length;
798
+ const selectableMethod = this.columnDefs.find((it) => it instanceof RowSelectionDef)?.isSelectable;
799
+ if (selectableMethod) {
800
+ for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
801
+ const item = this.sortedData[index];
802
+ if (await selectableMethod(item, index)) {
803
+ this.selectedItems.set(this.selectionExtractor(item), item);
804
+ }
805
+ }
806
+ }
807
+ else {
808
+ for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
809
+ const item = this.sortedData[index];
810
+ this.selectedItems.set(this.selectionExtractor(item), item);
811
+ }
812
+ }
813
+ }
814
+ this.recalculateAllSelectedInCurrentPage();
815
+ };
816
+ onHighlightAll = () => {
817
+ if (!this.dataRepo) {
818
+ return;
819
+ }
820
+ this.allHighlighted.then((areAllHighlighted) => {
821
+ if (areAllHighlighted) {
822
+ this.highlightedItems.clear();
823
+ }
824
+ else {
825
+ this._currentPageData.forEach((item) => {
826
+ this.highlightedItems.set(this.selectionExtractor(item), item);
827
+ });
828
+ }
829
+ });
830
+ };
831
+ onEditCell = async (item, coords, value) => {
832
+ const oldKey = this.selectionExtractor?.(item);
833
+ const wasSelected = oldKey != null && this.selectedItems.has(oldKey);
834
+ // debugger;
835
+ if (wasSelected) {
836
+ this.selectedItems.delete(oldKey);
837
+ }
838
+ await this._onEditCell(item, coords, value);
839
+ if (wasSelected && this.isSelectable) {
840
+ const newKey = this.selectionExtractor?.(item);
841
+ if (newKey) {
842
+ this.selectedItems.set(newKey, item);
843
+ }
844
+ this.recalculateAllSelectedInCurrentPage();
845
+ }
846
+ };
847
+ handleTdKeydown = (e) => {
848
+ e.stopPropagation();
849
+ if (e.key.toLocaleUpperCase() === 'F' && e.ctrlKey && this.allowQuickFiltering) {
850
+ e.preventDefault();
851
+ this.toggleQuickFiltering();
852
+ }
853
+ else if (e.key === 'Escape') {
854
+ e.preventDefault();
855
+ this.focusStartIsBeingEdited = false;
856
+ }
857
+ else if (e.key === 'Tab') {
858
+ //allow regular operation in side panels
859
+ const target = e.target;
860
+ if (target?.closest('.side-panel') != null ||
861
+ target?.attributes.getNamedItem('data-type')?.value === 'quicksearch') {
862
+ return;
863
+ }
864
+ e.preventDefault();
865
+ if (e.getModifierState('Shift')) {
866
+ this.tabBackward();
867
+ }
868
+ else {
869
+ this.tabForward();
870
+ }
871
+ }
872
+ if (e.target.tagName === 'INPUT' &&
873
+ e.target.attributes.getNamedItem('type')?.value !== 'checkbox') {
874
+ return;
875
+ }
876
+ switch (e.key) {
877
+ case 'Enter':
878
+ case 'F2':
879
+ if (!e.target?.classList?.contains('editable')) {
880
+ if (dev) {
881
+ console.log('not editable. cancelling...');
882
+ }
883
+ break;
884
+ }
885
+ e.preventDefault();
886
+ e.stopPropagation();
887
+ e.target?.dispatchEvent(new CustomEvent('edit', { detail: { selectAll: e.key === 'Enter' } }));
888
+ // focusStartIsBeingEdited.set(true);
889
+ break;
890
+ case 'ArrowUp': {
891
+ e.preventDefault();
892
+ if (e.getModifierState('Control')) {
893
+ if (e.getModifierState('Shift')) {
894
+ if (!this.allowCopy) {
895
+ return;
896
+ }
897
+ this.focusToTop();
898
+ }
899
+ else {
900
+ this.moveToTop();
901
+ }
902
+ }
903
+ else if (e.getModifierState('Shift')) {
904
+ if (!this.allowCopy) {
905
+ return;
906
+ }
907
+ this.moveFocusUp();
908
+ }
909
+ else {
910
+ this.setFocusUp();
911
+ }
912
+ return;
913
+ }
914
+ case 'ArrowDown': {
915
+ e.preventDefault();
916
+ if (e.getModifierState('Control')) {
917
+ if (e.getModifierState('Shift')) {
918
+ if (!this.allowCopy) {
919
+ return;
920
+ }
921
+ this.focusToBottom();
922
+ }
923
+ else {
924
+ this.moveToBottom();
925
+ }
926
+ }
927
+ else if (e.getModifierState('Shift')) {
928
+ if (!this.allowCopy) {
929
+ return;
930
+ }
931
+ this.moveFocusDown();
932
+ }
933
+ else {
934
+ this.setFocusDown();
935
+ }
936
+ return;
937
+ }
938
+ // TODO add ctrl-home and ctrl-end as ways to get to top-left/bottom-right
939
+ case 'ArrowLeft':
940
+ case 'Home': {
941
+ e.preventDefault();
942
+ if (e.getModifierState('Control') || e.key === 'Home') {
943
+ if (e.getModifierState('Shift')) {
944
+ if (!this.allowCopy) {
945
+ return;
946
+ }
947
+ this.focusToStart();
948
+ }
949
+ else {
950
+ this.moveToStart();
951
+ }
952
+ //these two at the bottom shouldn't happen on a home press
953
+ }
954
+ else if (e.getModifierState('Shift') && this.allowCopy && e.key === 'ArrowLeft') {
955
+ this.moveFocusLeft();
956
+ }
957
+ else if (e.key === 'ArrowLeft') {
958
+ this.setFocusLeft();
959
+ }
960
+ return;
961
+ }
962
+ case 'ArrowRight':
963
+ case 'End': {
964
+ e.preventDefault();
965
+ if (e.getModifierState('Control') || e.key === 'End') {
966
+ if (e.getModifierState('Shift')) {
967
+ if (!this.allowCopy) {
968
+ return;
969
+ }
970
+ this.focusToEnd();
971
+ }
972
+ else {
973
+ this.moveToEnd();
974
+ }
975
+ }
976
+ else if (e.getModifierState('Shift') && this.allowCopy && e.key === 'ArrowRight') {
977
+ this.moveFocusRight();
978
+ }
979
+ else if (e.key === 'ArrowRight') {
980
+ this.setFocusRight();
981
+ }
982
+ }
983
+ }
984
+ if (this.allowCopy) {
985
+ switch (e.key) {
986
+ case 'a': {
987
+ if (e.ctrlKey) {
988
+ e.preventDefault();
989
+ this.moveToTop();
990
+ this.moveToStart();
991
+ this.focusToBottom();
992
+ this.focusToEnd();
993
+ }
994
+ break;
995
+ }
996
+ case 'c':
997
+ case 'C':
998
+ if (e.getModifierState('Control')) {
999
+ e.preventDefault();
1000
+ if (this.allowCopy) {
1001
+ this.copyDataToClipboard();
1002
+ }
1003
+ }
1004
+ break;
1005
+ }
1006
+ }
1007
+ };
1008
+ toggleQuickFiltering = () => {
1009
+ if (this.allowQuickFiltering) {
1010
+ const fs = this.focusStart;
1011
+ const idToFocusTo = fs &&
1012
+ (this.showQuickFiltering
1013
+ ? `#${this.tableName}-cell-${fs.row}-${fs.id}`
1014
+ : `#${this.tableName}-cell-quicksearch-${fs.id}`);
1015
+ this.showQuickFiltering = !this.showQuickFiltering;
1016
+ tick().then(() => {
1017
+ if (idToFocusTo && browser) {
1018
+ document.querySelector(idToFocusTo)?.focus();
1019
+ }
1020
+ });
1021
+ }
1022
+ };
1023
+ setColumnPinning = (updater) => {
1024
+ if (!this.allowColumnReordering) {
1025
+ return;
1026
+ }
1027
+ this.columnPinning = updater(this.columnPinning);
1028
+ };
1029
+ updateFilters = $state();
1030
+ updateVisibility = (stateOrCallback) => {
1031
+ if (typeof stateOrCallback == 'function') {
1032
+ this.columnVisibility = stateOrCallback(this.columnVisibility);
1033
+ }
1034
+ else {
1035
+ this.columnVisibility = stateOrCallback;
1036
+ }
1037
+ // this.forceVisibilityUpdate();
1038
+ };
1039
+ updateColumnSizing = (stateOrCallback) => {
1040
+ if (typeof stateOrCallback == 'function') {
1041
+ this.columnSizing = stateOrCallback(this.columnSizing);
1042
+ }
1043
+ else {
1044
+ this.columnSizing = stateOrCallback;
1045
+ }
1046
+ };
1047
+ table = $derived(generateTableOptions(this));
1048
+ // private _rowModel = $derived<RowModel<T> | undefined>(this.dataRepo?.data && this.table.rowModel);
1049
+ // public get rowModel() {
1050
+ // return this._rowModel;
1051
+ // }
1052
+ lastPage = $derived(this.dataRepo?.lastPage ?? 0);
1053
+ measureHeaderWidth = (columnDef) => {
1054
+ const label = columnDef.header;
1055
+ if (typeof label === 'string' && browser) {
1056
+ const extraWidth = columnDef.enableSorting ? SORTING_ICON_WIDTH : 0;
1057
+ const canvasContext = getCanvasContext();
1058
+ if (canvasContext) {
1059
+ const headerWidth = Math.ceil(extraWidth + canvasContext.measureText(`pad${label}pad`).width);
1060
+ if (this.allowQuickFiltering && columnDef instanceof AccessorDef) {
1061
+ if (columnDef instanceof NumberInputDef) {
1062
+ return Math.max(headerWidth, Math.ceil(extraWidth + canvasContext.measureText(`Lorem Ipsum Dolor`).width)
1063
+ // HACK this is correct for quick filtering between min and max but it may be too large for a minimum.
1064
+ // Math.ceil(extraWidth + ctx.measureText(`Lorem Ipsum Dolor Sit Amet`).width)
1065
+ );
1066
+ }
1067
+ return Math.max(headerWidth, Math.ceil(extraWidth + canvasContext.measureText(`Lorem Ipsum Dolor`).width));
1068
+ }
1069
+ return headerWidth;
1070
+ }
1071
+ }
1072
+ return 0;
1073
+ };
1074
+ autoResize = async (columnDef) => {
1075
+ if (!browser) {
1076
+ return;
1077
+ }
1078
+ const ctx = getCanvasContext();
1079
+ const currentPageContents = this.currentPageData;
1080
+ const colId = columnDef.id;
1081
+ if (!colId) {
1082
+ return;
1083
+ }
1084
+ let maxWidth = 0;
1085
+ if (columnDef.accessorFn) {
1086
+ for (let i = currentPageContents.length - 1; i > -1; i--) {
1087
+ const row = currentPageContents[i];
1088
+ const label = ((await columnDef.accessorFn?.(row, i)) ?? Promise.resolve())?.toString() ?? '';
1089
+ const currentWidth = ctx.measureText(label).width;
1090
+ maxWidth = Math.max(maxWidth, currentWidth);
1091
+ }
1092
+ }
1093
+ else {
1094
+ const currentWidth = columnDef.width ??
1095
+ ctx.measureText(
1096
+ // TODO
1097
+ (typeof columnDef.header == 'string' ? columnDef.header : 'TODO') ?? '-').width;
1098
+ maxWidth = Math.max(maxWidth, currentWidth);
1099
+ }
1100
+ this.columnSizing[colId] = maxWidth + 32; //standard extra cell padding
1101
+ };
1102
+ reorderColumn = (dropTarget) => {
1103
+ if (!this.allowColumnReordering) {
1104
+ return;
1105
+ }
1106
+ if (!this.dragTarget || !dropTarget) {
1107
+ return;
1108
+ }
1109
+ const newDefs = this.columnDefs.concat();
1110
+ newDefs
1111
+ .sort((a, b) => a.index - b.index)
1112
+ .forEach((element, index) => {
1113
+ element.index = index;
1114
+ });
1115
+ const originalIndex = newDefs.findIndex((it) => it.id === this.dragTarget?.id);
1116
+ if (originalIndex === -1) {
1117
+ if (dev) {
1118
+ alert("couldn't find target's original index");
1119
+ }
1120
+ return newDefs;
1121
+ }
1122
+ newDefs.splice(originalIndex, 1);
1123
+ const isDraggedToFirst = dropTarget.id === `${this.tableName}-column-settings-top-anchor` ||
1124
+ dropTarget.id === `${this.tableName}-header-anchor`;
1125
+ if (isDraggedToFirst) {
1126
+ this.dragTarget.index = -9999;
1127
+ newDefs.push(this.dragTarget);
1128
+ }
1129
+ else {
1130
+ const dropTargetIndex = targetIsLI(dropTarget)
1131
+ ? newDefs.findIndex((col) => `${this.tableName}-column-settings-${col.id}` === dropTarget.id)
1132
+ : newDefs.findIndex((col) => `${this.tableName}-header-${col.id}` === dropTarget.id);
1133
+ if (dropTargetIndex === -1) {
1134
+ newDefs.push(this.dragTarget);
1135
+ newDefs.sort((a, b) => a.index - b.index);
1136
+ return;
1137
+ }
1138
+ // this will require changes if you want to swap two
1139
+ // for (let i = newColumns.length - 1; i > dropTargetIndex; i--) {
1140
+ // newColumns[i].index += 1;
1141
+ // }
1142
+ if (originalIndex > dropTargetIndex && !targetIsLI(dropTarget)) {
1143
+ newDefs[dropTargetIndex].index += 1;
1144
+ this.dragTarget.index = newDefs[dropTargetIndex].index - 1;
1145
+ newDefs.push(this.dragTarget);
1146
+ }
1147
+ else {
1148
+ this.dragTarget.index = newDefs[dropTargetIndex].index; // + 1
1149
+ newDefs.push(this.dragTarget);
1150
+ }
1151
+ }
1152
+ newDefs
1153
+ .sort((a, b) => a.index - b.index)
1154
+ .forEach((element, index) => {
1155
+ element.index = index;
1156
+ });
1157
+ this.dragTarget = null;
1158
+ this._setNewPinningState();
1159
+ this.updateDefsBasedOnPinning();
1160
+ this.unfocus();
1161
+ this.columnDefs = newDefs;
1162
+ // this.forceVisibilityUpdate();
1163
+ };
1164
+ copyHighlightedRowsToClipboard = async () => {
1165
+ if (!navigator.clipboard) {
1166
+ alert('cannot copy in an insecure connection');
1167
+ return;
1168
+ }
1169
+ return this._performRowCopy(await this.getHighlightedRowData());
1170
+ };
1171
+ copyDataToClipboard = async () => {
1172
+ if (!navigator.clipboard) {
1173
+ alert('cannot copy in an insecure connection');
1174
+ return;
1175
+ }
1176
+ return this._performRowCopy(await this.getFocusElementData());
1177
+ };
1178
+ _performRowCopy = async ({ items, indicesByItem, focusedElementData, affectedColumns }) => {
1179
+ const focusedColumnIds = affectedColumns.map((it) => encapsulate(typeof it.header === 'string' ? it.header : it.id));
1180
+ const value = await (async () => {
1181
+ const selectColumns = new Map();
1182
+ for (let i = affectedColumns.length - 1; i > -1; i--) {
1183
+ const col = affectedColumns[i];
1184
+ if (col instanceof SelectDef) {
1185
+ const item = items[i];
1186
+ selectColumns.set(i, await col.getOptions(item, indicesByItem.get(item)));
1187
+ }
1188
+ }
1189
+ const separator = this.commaSeparatedCopy ? ',' : '\t';
1190
+ const shouldCopyHeaders = this.copyWithHeaders &&
1191
+ (focusedElementData.length !== 1 || focusedElementData[0].length !== 1);
1192
+ // transform to TSV
1193
+ if (focusedElementData.length === 1 && focusedElementData[0].length === 1) {
1194
+ if (selectColumns.has(0)) {
1195
+ const columnOptions = selectColumns.get(0);
1196
+ const value = columnOptions.find((it) => it.value === focusedElementData[0][0])?.label ??
1197
+ focusedElementData[0][0]?.toString() ??
1198
+ '';
1199
+ return value;
1200
+ }
1201
+ else {
1202
+ const value = focusedElementData[0][0]?.toString().trim() ?? '';
1203
+ return value;
1204
+ }
1205
+ }
1206
+ return `${shouldCopyHeaders ? `${focusedColumnIds.join(separator)}\n` : ''}${focusedElementData
1207
+ .map((it) => it
1208
+ .map((toCopy, i) => {
1209
+ if (toCopy instanceof Date) {
1210
+ return toCopy.toLocaleDateString();
1211
+ }
1212
+ if (selectColumns.has(i)) {
1213
+ const columnOptions = selectColumns.get(i);
1214
+ const value = columnOptions.find((it) => it.value === toCopy)?.label ??
1215
+ toCopy?.toString() ??
1216
+ '';
1217
+ return encapsulate(value);
1218
+ }
1219
+ else {
1220
+ const value = toCopy?.toString().trim() ?? '';
1221
+ return encapsulate(value);
1222
+ }
1223
+ })
1224
+ .join(separator))
1225
+ .join('\n')}`;
1226
+ })();
1227
+ navigator.clipboard.writeText(value ?? '');
1228
+ };
1229
+ startFocus = (coords) => {
1230
+ this.isMousingDown = true;
1231
+ this.moveFocus(coords);
1232
+ };
1233
+ moveFocus = (coords, startEditing = false) => {
1234
+ this.focusStart = { ...coords };
1235
+ this.focusEnd = { ...coords };
1236
+ if (startEditing) {
1237
+ tick().then(() => {
1238
+ this.focusStartIsBeingEdited = true;
1239
+ });
1240
+ }
1241
+ };
1242
+ unfocus = () => {
1243
+ this.focusStartIsBeingEdited = false;
1244
+ this.focusStart = null;
1245
+ this.focusEnd = null;
1246
+ };
1247
+ focusToTop = () => {
1248
+ if (!this.allowCopy) {
1249
+ return;
1250
+ }
1251
+ this._moveFocusEndRow(-Infinity);
1252
+ };
1253
+ focusToBottom = () => {
1254
+ if (!this.allowCopy) {
1255
+ return;
1256
+ }
1257
+ this._moveFocusEndRow(Infinity);
1258
+ };
1259
+ moveToBottom = () => {
1260
+ this._moveFocusRow(Infinity);
1261
+ };
1262
+ moveToTop = () => {
1263
+ this._moveFocusRow(-Infinity);
1264
+ };
1265
+ moveFocusUp = () => {
1266
+ if (!this.allowCopy) {
1267
+ return;
1268
+ }
1269
+ this._moveFocusEndRow(-1);
1270
+ };
1271
+ setFocusUp = () => {
1272
+ this._moveFocusRow(-1);
1273
+ };
1274
+ tabForward = () => {
1275
+ if (!this.allowCopy) {
1276
+ return;
1277
+ }
1278
+ const defs = this.columnDefs;
1279
+ const visibility = this.columnVisibility;
1280
+ const indexBounds = defs.length;
1281
+ const rowBounds = this.sortedData.length;
1282
+ if (!this.focusStart || !rowBounds) {
1283
+ return;
1284
+ }
1285
+ let { column: index, row } = this.focusStart;
1286
+ ++index;
1287
+ while (row < rowBounds) {
1288
+ while (index < indexBounds) {
1289
+ const newId = defs[index].id;
1290
+ if (newId && visibility[newId] !== false) {
1291
+ this.moveFocus({ id: newId, row, column: index }, this.focusStartIsBeingEdited);
1292
+ return;
1293
+ }
1294
+ ++index;
1295
+ }
1296
+ index = 0;
1297
+ ++row;
1298
+ }
1299
+ };
1300
+ tabBackward = () => {
1301
+ if (!this.allowCopy) {
1302
+ return;
1303
+ }
1304
+ const maxIndexRight = this.columnDefs.length - 1;
1305
+ const defs = this.columnDefs;
1306
+ const visibility = this.columnVisibility;
1307
+ if (!this.focusStart) {
1308
+ return;
1309
+ }
1310
+ let { column: index, row } = this.focusStart;
1311
+ --index;
1312
+ while (row > -1) {
1313
+ while (index > -1) {
1314
+ const newId = defs[index].id;
1315
+ if (newId && visibility[newId] !== false) {
1316
+ this.moveFocus({ id: newId, row, column: index }, this.focusStartIsBeingEdited);
1317
+ return;
1318
+ }
1319
+ --index;
1320
+ }
1321
+ index = maxIndexRight;
1322
+ --row;
1323
+ }
1324
+ };
1325
+ focusToStart = () => {
1326
+ if (!this.allowCopy) {
1327
+ return;
1328
+ }
1329
+ if (!this.focusEnd) {
1330
+ return null;
1331
+ }
1332
+ const visibility = this.columnVisibility;
1333
+ const columnDefs = this.columnDefs;
1334
+ const currentIndex = this.focusEnd.column;
1335
+ let index = 0;
1336
+ while (index < currentIndex) {
1337
+ const newId = columnDefs[index].id;
1338
+ if (newId && visibility[newId] !== false) {
1339
+ this.focusEnd = { ...this.focusEnd, column: index };
1340
+ return;
1341
+ }
1342
+ ++index;
1343
+ }
1344
+ };
1345
+ moveToStart = () => {
1346
+ if (!this.focusStart)
1347
+ return;
1348
+ const visibility = this.columnVisibility;
1349
+ const columnDefs = this.columnDefs;
1350
+ const current = this.focusStart.column;
1351
+ let index = 0;
1352
+ while (index < current) {
1353
+ const newId = columnDefs[index].id;
1354
+ if (newId && visibility[newId] !== false) {
1355
+ this.moveFocus({ ...this.focusStart, id: newId, column: index });
1356
+ return;
1357
+ }
1358
+ ++index;
1359
+ }
1360
+ //otherwise return without doing anything
1361
+ };
1362
+ focusToEnd = () => {
1363
+ if (!this.allowCopy) {
1364
+ return;
1365
+ }
1366
+ if (!this.focusEnd)
1367
+ return null;
1368
+ const current = this.focusEnd;
1369
+ const visibility = this.columnVisibility;
1370
+ const columnDefs = this.columnDefs;
1371
+ const currentIndex = current.column;
1372
+ let index = columnDefs.length - 1;
1373
+ while (index > currentIndex) {
1374
+ const newId = columnDefs[index].id;
1375
+ if (newId && visibility[newId] !== false) {
1376
+ this.focusEnd = { ...this.focusEnd, column: index };
1377
+ return;
1378
+ }
1379
+ --index;
1380
+ }
1381
+ this.focusEnd = current;
1382
+ };
1383
+ moveToEnd = () => {
1384
+ if (!this.focusStart)
1385
+ return;
1386
+ const visibility = this.columnVisibility;
1387
+ const columnDefs = this.columnDefs;
1388
+ const current = this.focusStart.column;
1389
+ let index = columnDefs.length - 1;
1390
+ while (index > current) {
1391
+ const newId = columnDefs[index].id;
1392
+ if (newId && visibility[newId] !== false) {
1393
+ this.moveFocus({ ...this.focusStart, id: newId, column: index });
1394
+ return;
1395
+ }
1396
+ --index;
1397
+ }
1398
+ //otherwise return without doing anything
1399
+ };
1400
+ moveFocusDown = () => {
1401
+ if (!this.allowCopy) {
1402
+ return;
1403
+ }
1404
+ this._moveFocusEndRow(1);
1405
+ };
1406
+ setFocusDown = () => {
1407
+ this._moveFocusRow(1);
1408
+ };
1409
+ moveFocusLeft = () => {
1410
+ if (!this.allowCopy) {
1411
+ return;
1412
+ }
1413
+ if (this.focusEnd != null) {
1414
+ const visibility = this.columnVisibility;
1415
+ let index = this.focusEnd.column - 1;
1416
+ while (index > -1) {
1417
+ const newId = this.columnDefs[index].id;
1418
+ if (newId && visibility[newId] !== false) {
1419
+ this.focusEnd = { ...this.focusEnd, column: index };
1420
+ return;
1421
+ }
1422
+ --index;
1423
+ }
1424
+ }
1425
+ };
1426
+ setFocusLeft = () => {
1427
+ if (!this.focusStart)
1428
+ return;
1429
+ if (this.focusStart != null) {
1430
+ const visibility = this.columnVisibility;
1431
+ const columnDefs = this.columnDefs;
1432
+ let index = this.focusStart.column - 1;
1433
+ while (index > -1) {
1434
+ const newId = columnDefs[index].id;
1435
+ if (newId && visibility[newId] !== false) {
1436
+ this.moveFocus({ ...this.focusStart, id: newId, column: index });
1437
+ return;
1438
+ }
1439
+ --index;
1440
+ }
1441
+ //otherwise return without doing anything
1442
+ }
1443
+ };
1444
+ moveFocusRight = () => {
1445
+ if (!this.allowCopy) {
1446
+ return;
1447
+ }
1448
+ if (this.focusEnd != null) {
1449
+ const visibility = this.columnVisibility;
1450
+ const columnDefs = this.columnDefs;
1451
+ const upperBounds = columnDefs.length;
1452
+ let index = this.focusEnd.column + 1;
1453
+ while (index < upperBounds) {
1454
+ const newId = columnDefs[index].id;
1455
+ if (newId && visibility[newId] !== false) {
1456
+ this.focusEnd = { ...this.focusEnd, column: index };
1457
+ return;
1458
+ }
1459
+ ++index;
1460
+ }
1461
+ }
1462
+ };
1463
+ setFocusRight = () => {
1464
+ if (!this.focusStart)
1465
+ return;
1466
+ if (this.focusStart != null) {
1467
+ const visibility = this.columnVisibility;
1468
+ const columnDefs = this.columnDefs;
1469
+ const upperBounds = columnDefs.length;
1470
+ let index = this.focusStart.column + 1;
1471
+ while (index < upperBounds) {
1472
+ const newId = columnDefs[index].id;
1473
+ if (newId && visibility[newId] !== false) {
1474
+ this.moveFocus({ ...this.focusStart, id: newId, column: index });
1475
+ return;
1476
+ }
1477
+ ++index;
1478
+ }
1479
+ //otherwise return without doing anything
1480
+ }
1481
+ };
1482
+ endFocus = (coords) => {
1483
+ if (this.isMousingDown) {
1484
+ this.isMousingDown = false;
1485
+ if (!this.allowCopy) {
1486
+ return;
1487
+ }
1488
+ this.focusEnd = { ...coords };
1489
+ }
1490
+ };
1491
+ setIsCompact = (value) => {
1492
+ this.isCompact = value;
1493
+ this._updateLocalStorageSettings();
1494
+ };
1495
+ setAlternateRowColours = (value) => {
1496
+ this.alternateRowColours = value;
1497
+ this._updateLocalStorageSettings();
1498
+ };
1499
+ setSingleClickEditing = (value) => {
1500
+ this.singleClickEditing = value;
1501
+ this._updateLocalStorageSettings();
1502
+ };
1503
+ setChangeColourOnHover = (value) => {
1504
+ this.changeColourOnHover = value;
1505
+ this._updateLocalStorageSettings();
1506
+ };
1507
+ setCopyWithHeaders = (value) => {
1508
+ if (this.allowCopy) {
1509
+ this.copyWithHeaders = value;
1510
+ this._updateLocalStorageSettings();
1511
+ }
1512
+ };
1513
+ setCommaSeparatedCopy = (value) => {
1514
+ if (this.allowCopy) {
1515
+ this.commaSeparatedCopy = value;
1516
+ this._updateLocalStorageSettings();
1517
+ }
1518
+ };
1519
+ // /**
1520
+ // * HACK no idea why but this is necessary in order to fix columns that start out as invisibile
1521
+ // */
1522
+ // public readonly forceVisibilityUpdate = () => {
1523
+ // // alert('force visibility update');
1524
+ // if (browser) {
1525
+ // tick().then(() => {
1526
+ // this.showSelectedOnly = !this.showSelectedOnly;
1527
+ // this.showSelectedOnly = !this.showSelectedOnly;
1528
+ // // this.columnDefs = this.columnDefs.concat();
1529
+ // });
1530
+ // }
1531
+ // };
1532
+ setSelectedPreset = (preset) => {
1533
+ this.columnDefs = preset.columnDefs;
1534
+ if (preset.sortingState) {
1535
+ if (!this.paginationRepo?.updateSorting && dev) {
1536
+ alert('no sorting state found');
1537
+ }
1538
+ this.paginationRepo?.updateSorting?.(preset.sortingState);
1539
+ }
1540
+ if (preset.visibilityState) {
1541
+ this.columnVisibility = preset.visibilityState;
1542
+ }
1543
+ if (preset.columnPinningState) {
1544
+ this.columnPinning = preset.columnPinningState;
1545
+ }
1546
+ this.selectedPreset = preset;
1547
+ localStorage.setItem(`${this.userId}-${this.tableName}-selected-preset-name`, preset.name);
1548
+ };
1549
+ saveColumnPreset = (name) => {
1550
+ if (!name) {
1551
+ return;
1552
+ }
1553
+ const visibilityState = this.columnVisibility;
1554
+ const columnPinningState = this.columnPinning;
1555
+ const columnDefs = this.columnDefs;
1556
+ const sortingState = (this.paginationRepo && this.paginationRepo.sorting) || [];
1557
+ const newPreset = { columnDefs, name, visibilityState, columnPinningState, sortingState };
1558
+ const lowercasePresetname = name.toLocaleLowerCase();
1559
+ const indexToReplace = this.columnPresets.findIndex((oldPreset) => oldPreset.name.toLocaleLowerCase() === lowercasePresetname);
1560
+ const newPresets = this.columnPresets.concat();
1561
+ if (indexToReplace > -1) {
1562
+ newPresets[indexToReplace] = newPreset;
1563
+ }
1564
+ else {
1565
+ newPresets.push(newPreset);
1566
+ }
1567
+ this.columnPresets = newPresets;
1568
+ const stringified = JSON.stringify(newPresets);
1569
+ localStorage.setItem(`${this.userId}-${this.tableName}-presets`, stringified);
1570
+ this.setSelectedPreset(newPreset);
1571
+ };
1572
+ /**
1573
+ * This listener should be added and removed based on isMousingDown
1574
+ */
1575
+ setFocusEnd = (coords) => {
1576
+ if (!this.allowCopy) {
1577
+ return;
1578
+ }
1579
+ this.focusEnd = coords;
1580
+ };
1581
+ // #region private methods
1582
+ columnDefReturnsTextValue = (it) => {
1583
+ if (!this.dataRepo) {
1584
+ return false;
1585
+ }
1586
+ return ('index' in it &&
1587
+ this.columnVisibility[it.id] !== false &&
1588
+ (it.columnType === undefined ||
1589
+ it.columnType === 'Accessor' ||
1590
+ //only include it if it returns some kind of tangible value instead of a custom component
1591
+ ('accessorFn' in it && typeof it.accessorFn?.(this.sortedData[0], 0) != 'function')));
1592
+ };
1593
+ _updateLocalStorageSettings() {
1594
+ const isCompact = this.isCompact;
1595
+ const singleClickEditing = this.singleClickEditing;
1596
+ const alternateRowColours = this.alternateRowColours;
1597
+ const copyWithHeaders = this.copyWithHeaders;
1598
+ const commaSeparatedCopy = this.commaSeparatedCopy;
1599
+ const changeColourOnHover = this.changeColourOnHover;
1600
+ const settingsObject = {
1601
+ isCompact,
1602
+ singleClickEditing,
1603
+ alternateRowColours,
1604
+ changeColourOnHover,
1605
+ copyWithHeaders,
1606
+ commaSeparatedCopy
1607
+ };
1608
+ localStorage.setItem(`${this.userId}-${this.tableName}-settings`, JSON.stringify(settingsObject));
1609
+ }
1610
+ _moveFocusEndRow(offset) {
1611
+ if (!this.allowCopy) {
1612
+ return;
1613
+ }
1614
+ if (!this.focusEnd) {
1615
+ if (dev) {
1616
+ console.warn('no current found');
1617
+ }
1618
+ return;
1619
+ }
1620
+ const rows = this.paginationRowModel.rows;
1621
+ const endRowIndex = rows.findIndex((row) => row.index === this.focusEnd.row);
1622
+ this.focusEnd = {
1623
+ ...this.focusEnd,
1624
+ row: rows[Math.max(Math.min(endRowIndex + offset, rows.length - 1), 0)].index
1625
+ };
1626
+ }
1627
+ _moveFocusRow(offset) {
1628
+ if (!this.focusStart) {
1629
+ if (dev) {
1630
+ console.warn('no this.focusStart found');
1631
+ }
1632
+ return null;
1633
+ }
1634
+ const newEndRowIndex = (() => {
1635
+ const rows = this.paginationRowModel.rows;
1636
+ const endRowIndex = rows.findIndex((row) => row.index === this.focusStart.row);
1637
+ return rows[Math.max(Math.min(endRowIndex + offset, rows.length - 1), 0)].index;
1638
+ })();
1639
+ this.moveFocus({ ...this.focusStart, row: newEndRowIndex });
1640
+ }
1641
+ _recalculateFocusedElements() {
1642
+ if (!this.focusStart || !this.focusEnd) {
1643
+ this.focusedRowIndexIds = new SvelteSet();
1644
+ this.focusedColumnIds = new SvelteSet();
1645
+ return;
1646
+ }
1647
+ const { row: startRowIndexId, column: startColumnIndex } = this.focusStart;
1648
+ const { row: endRowIndexId, column: endColumnIndex } = this.focusEnd;
1649
+ const model = this.sortedRowModel;
1650
+ const startRowIndex = model?.rows.findIndex((row) => row.index === startRowIndexId) ?? -1;
1651
+ const endRowIndex = model?.rows.findIndex((row) => row.index === endRowIndexId) ?? -1;
1652
+ if (!model || startRowIndex == -1 || endRowIndex == -1) {
1653
+ return;
1654
+ }
1655
+ const minRowIndex = Math.min(startRowIndex, endRowIndex);
1656
+ const maxRowIndex = Math.max(startRowIndex, endRowIndex);
1657
+ const minColumnIndex = Math.min(startColumnIndex, endColumnIndex);
1658
+ const maxColumnIndex = Math.max(startColumnIndex, endColumnIndex);
1659
+ const affectedColumns = new SvelteSet();
1660
+ const visibility = this.columnVisibility;
1661
+ this.columnDefs
1662
+ .filter((it) => 'index' in it &&
1663
+ visibility[it.id] !== false &&
1664
+ // TODO handle pinning behaviour
1665
+ // !columnPinning.left?.includes(it.id) &&
1666
+ // !columnPinning.right?.includes(it.id) &&
1667
+ // (!('columnType' in it) || it.columnType === undefined || it.columnType === 'Accessor') &&
1668
+ it.index >= minColumnIndex &&
1669
+ it.index <= maxColumnIndex)
1670
+ .forEach((it) => affectedColumns.add(it.id));
1671
+ const indeces = new SvelteSet();
1672
+ for (let i = minRowIndex; i <= maxRowIndex; i++) {
1673
+ indeces.add(parseInt(model.rows[i].id));
1674
+ }
1675
+ this.focusedRowIndexIds = indeces;
1676
+ this.focusedColumnIds = affectedColumns;
1677
+ }
1678
+ async getHighlightedRowData() {
1679
+ if (!this.dataRepo) {
1680
+ throw new Error('No data found');
1681
+ }
1682
+ const affectedColumns = this.columnDefs.filter(this.columnDefReturnsTextValue);
1683
+ const indices = new Map();
1684
+ const selectedRows = [...this.highlightedItems.values()];
1685
+ for (const item of selectedRows) {
1686
+ const rowIndex = this.sortedData.indexOf(item);
1687
+ if (rowIndex == -1) {
1688
+ // eslint-disable-next-line no-debugger
1689
+ debugger;
1690
+ }
1691
+ indices.set(item, rowIndex);
1692
+ }
1693
+ // TODO somewhere between here and the ending of the copy functionality, we end up with issues where instead of it using the accessor fn, it tries to pick up the select option, and ends up using the value ("1", etc)
1694
+ const selectedCells = [];
1695
+ const rowLength = selectedRows.length;
1696
+ for (let rowIndex = 0; rowIndex < rowLength; rowIndex++) {
1697
+ const item = selectedRows[rowIndex];
1698
+ const key = this.selectionExtractor?.(item);
1699
+ selectedCells[rowIndex] = [];
1700
+ const targetRow = selectedCells[rowIndex];
1701
+ const colLength = affectedColumns.length;
1702
+ for (let colIndex = 0; colIndex < colLength; colIndex++) {
1703
+ const col = affectedColumns[colIndex];
1704
+ if (col instanceof RowSelectionDef) {
1705
+ targetRow.push(key !== undefined && this.selectedItems.has(key) ? 'true' : 'false');
1706
+ continue;
1707
+ }
1708
+ const x = 'accessorFn' in col && (await col.accessorFn?.(item, this.sortedData.indexOf(item)));
1709
+ if (x && typeof x === 'string') {
1710
+ targetRow.push(x);
1711
+ continue;
1712
+ }
1713
+ if (x && Array.isArray(x) && typeof x[0] === 'string') {
1714
+ targetRow.push(x.join(', '));
1715
+ continue;
1716
+ }
1717
+ const toCopy = col.id && col.id in item ? item[col.id] : null;
1718
+ const y = toCopy && typeof toCopy === 'object' && toCopy instanceof Date
1719
+ ? toCopy.toLocaleDateString()
1720
+ : (toCopy?.toString() ?? '');
1721
+ targetRow.push(y);
1722
+ }
1723
+ }
1724
+ return {
1725
+ items: selectedRows,
1726
+ indicesByItem: indices,
1727
+ focusedElementData: selectedCells,
1728
+ affectedColumns
1729
+ };
1730
+ }
1731
+ async getFocusElementData() {
1732
+ if (this.focusStart && this.focusEnd) {
1733
+ const { row: startRowIndexId, column: startColumnIndex } = this.focusStart;
1734
+ const { row: endRowIndexId, column: endColumnIndex } = this.focusEnd;
1735
+ const model = this.sortedRowModel;
1736
+ const startRowIndex = model?.rows.findIndex((row) => row.index === startRowIndexId) ?? -1;
1737
+ const endRowIndex = model?.rows.findIndex((row) => row.index === endRowIndexId) ?? -1;
1738
+ if (!this.dataRepo || startRowIndex == -1 || endRowIndex == -1) {
1739
+ if (dev) {
1740
+ console.warn('was missing one of the two indices');
1741
+ // eslint-disable-next-line no-debugger
1742
+ debugger;
1743
+ }
1744
+ throw new Error(`copy was missing one of the two indices. First: ${startRowIndex}, second: ${endRowIndex}`);
1745
+ }
1746
+ const minRowIndex = Math.min(startRowIndex, endRowIndex);
1747
+ const maxRowIndex = Math.max(startRowIndex, endRowIndex);
1748
+ const minColumnIndex = Math.min(startColumnIndex, endColumnIndex);
1749
+ const maxColumnIndex = Math.max(startColumnIndex, endColumnIndex);
1750
+ const affectedColumns = this.columnDefs.filter((it) => {
1751
+ return (it.index >= minColumnIndex &&
1752
+ it.index <= maxColumnIndex &&
1753
+ this.columnDefReturnsTextValue(it));
1754
+ });
1755
+ const selectedRows = [];
1756
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
1757
+ const indices = new Map();
1758
+ for (let i = minRowIndex; i <= maxRowIndex; i++) {
1759
+ const itemIndex = model.rows[i].index;
1760
+ const item = this.sortedData[itemIndex];
1761
+ selectedRows.push(item);
1762
+ indices.set(item, itemIndex);
1763
+ }
1764
+ // TODO somewhere between here and the ending of the copy functionality, we end up with issues where instead of it using the accessor fn, it tries to pick up the select option, and ends up using the value ("1", etc)
1765
+ const selectedCells = [];
1766
+ const rowLength = selectedRows.length;
1767
+ for (let rowIndex = 0; rowIndex < rowLength; rowIndex++) {
1768
+ const item = selectedRows[rowIndex];
1769
+ const key = this.selectionExtractor?.(item);
1770
+ selectedCells[rowIndex] = [];
1771
+ const targetRow = selectedCells[rowIndex];
1772
+ const colLength = affectedColumns.length;
1773
+ for (let colIndex = 0; colIndex < colLength; colIndex++) {
1774
+ const col = affectedColumns[colIndex];
1775
+ if (col.columnType === ColumnType.RowSelect) {
1776
+ targetRow.push(key !== undefined && this.selectedItems.has(key) ? 'true' : 'false');
1777
+ continue;
1778
+ }
1779
+ const x = 'accessorFn' in col && (await col.accessorFn?.(item, this.sortedData.indexOf(item)));
1780
+ if (x && typeof x === 'string') {
1781
+ targetRow.push(x);
1782
+ continue;
1783
+ }
1784
+ if (x && Array.isArray(x) && typeof x[0] === 'string') {
1785
+ targetRow.push(x.join(', '));
1786
+ continue;
1787
+ }
1788
+ const toCopy = col.id && col.id in item ? item[col.id] : null;
1789
+ const y = toCopy && typeof toCopy === 'object' && toCopy instanceof Date
1790
+ ? toCopy.toLocaleDateString()
1791
+ : (toCopy?.toString() ?? '');
1792
+ targetRow.push(y);
1793
+ }
1794
+ }
1795
+ return {
1796
+ items: selectedRows,
1797
+ indicesByItem: indices,
1798
+ focusedElementData: selectedCells,
1799
+ affectedColumns
1800
+ };
1801
+ }
1802
+ return { items: [], indicesByItem: new Map(), focusedElementData: [], affectedColumns: [] };
1803
+ }
1804
+ updateDefsBasedOnPinning = () => {
1805
+ const leftDefs = [];
1806
+ const midDefs = [];
1807
+ const rightDefs = [];
1808
+ this.columnDefs.forEach((def) => {
1809
+ if (this.columnPinning.left?.includes(def.id)) {
1810
+ leftDefs.push(def);
1811
+ }
1812
+ else if (this.columnPinning.right?.includes(def.id)) {
1813
+ rightDefs.push(def);
1814
+ }
1815
+ else {
1816
+ midDefs.push(def);
1817
+ }
1818
+ });
1819
+ leftDefs.sort((a, b) => a.index - b.index);
1820
+ midDefs.sort((a, b) => a.index - b.index);
1821
+ rightDefs.sort((a, b) => a.index - b.index);
1822
+ const allDefs = leftDefs.concat(midDefs, rightDefs);
1823
+ allDefs.forEach((def, index) => {
1824
+ def.index = index;
1825
+ });
1826
+ return allDefs;
1827
+ };
1828
+ assertNoDuplicateIds() {
1829
+ const foundIds = new Set();
1830
+ this.defaultColumnDefs.defs.forEach((def) => {
1831
+ if (foundIds.has(def.id)) {
1832
+ throw new Error(`Duplicate Column Definition ID ${def.id} in table ${this.tableName}`);
1833
+ }
1834
+ foundIds.add(def.id);
1835
+ });
1836
+ }
1837
+ async setupDefaultColumnDefs() {
1838
+ // const helper = createColumnHelper<T>();
1839
+ this.assertNoDuplicateIds();
1840
+ const adjustedDefsPromises = this.defaultColumnDefs.defs.map(async (def) => {
1841
+ // extra width for when filtering between values
1842
+ const needsExtraWidth = this.allowQuickFiltering && 'type' in def && def.type === 'Number';
1843
+ const hasNoText = !needsExtraWidth &&
1844
+ (def.columnType === ColumnType.Expand || def.columnType === ColumnType.RowSelect);
1845
+ if (def instanceof AccessorDef) {
1846
+ // if (hasNoDefaultAccessor(temporary)) {
1847
+ // temporary.accessorKey = def.id as string & keyof T;
1848
+ // }
1849
+ if (!('minSize' in def) || !def.minSize) {
1850
+ if (typeof def.header === 'string') {
1851
+ const minWidth = this.measureHeaderWidth(def);
1852
+ def.minSize = minWidth;
1853
+ def.width = Math.max(def.width, minWidth);
1854
+ }
1855
+ else {
1856
+ def.minSize = 120;
1857
+ }
1858
+ }
1859
+ // code smell...
1860
+ if (def instanceof TextInputDef) {
1861
+ def.filterFn = this.stringFilter;
1862
+ }
1863
+ else if (def instanceof NumberInputDef) {
1864
+ def.filterFn = this.numberFilter;
1865
+ }
1866
+ else if (def instanceof SelectDef) {
1867
+ def.filterFn = this.selectFilter;
1868
+ }
1869
+ else if (def instanceof CheckboxDef) {
1870
+ def.filterFn = this.boolFilter;
1871
+ }
1872
+ else if (def instanceof DateInputDef) {
1873
+ def.filterFn = this.dateFilter;
1874
+ }
1875
+ }
1876
+ return def;
1877
+ });
1878
+ const adjustedDefs = (await Promise.all(adjustedDefsPromises))
1879
+ .sort((a, b) => a.index - b.index)
1880
+ .map((def, index) => {
1881
+ def.index = index;
1882
+ return def;
1883
+ });
1884
+ this.columnDefs = adjustedDefs;
1885
+ return adjustedDefs;
1886
+ }
1887
+ _getUserDefaults() {
1888
+ const savedSettings = localStorage.getItem(`${this.userId}-${this.tableName}-settings`);
1889
+ if (savedSettings) {
1890
+ const saved = JSON.parse(savedSettings);
1891
+ this.singleClickEditing = saved.singleClickEditing ?? true;
1892
+ if (saved.alternateRowColours) {
1893
+ this.alternateRowColours = true;
1894
+ }
1895
+ if (saved.commaSeparatedCopy) {
1896
+ this.commaSeparatedCopy = true;
1897
+ }
1898
+ // these are true by default so we only want to alter them if the user wants them disabled
1899
+ if (saved.isCompact === false) {
1900
+ this.isCompact = false;
1901
+ }
1902
+ if (saved.copyWithHeaders === false) {
1903
+ this.copyWithHeaders = false;
1904
+ }
1905
+ if (saved.changeColourOnHover === false) {
1906
+ this.changeColourOnHover = false;
1907
+ }
1908
+ }
1909
+ else {
1910
+ this.singleClickEditing = true;
1911
+ }
1912
+ }
1913
+ _setNewPinningState() {
1914
+ this.columnPinning = {
1915
+ left: this.columnPinning.left &&
1916
+ this.columnDefs
1917
+ .filter((col) => this.columnPinning.left?.includes(col.id))
1918
+ .map((col) => col.id),
1919
+ right: this.columnPinning.right &&
1920
+ this.columnDefs
1921
+ .filter((col) => this.columnPinning.right?.includes(col.id))
1922
+ .map((col) => col.id)
1923
+ }; // TODO
1924
+ }
1925
+ getToggleSortingHandler = (def) => (e) => {
1926
+ this.paginationRepo?.updateSorting?.((state) => {
1927
+ const newState = state.concat();
1928
+ const index = newState.findIndex((it) => it.id === def.id);
1929
+ if (index > -1) {
1930
+ const found = newState[index];
1931
+ if (found.desc) {
1932
+ newState.splice(index, 1);
1933
+ }
1934
+ else {
1935
+ newState[index] = { ...newState[index], desc: true };
1936
+ }
1937
+ }
1938
+ else {
1939
+ newState.push({
1940
+ desc: false,
1941
+ id: def.id
1942
+ });
1943
+ }
1944
+ return newState;
1945
+ });
1946
+ };
1947
+ async reassignDefsToPresets(presets) {
1948
+ const adjustedDefs = this.columnDefs;
1949
+ const asMap = columnDefsToMap(adjustedDefs);
1950
+ console.log('reassigning presets');
1951
+ presets.forEach((preset) => {
1952
+ preset.columnDefs.forEach((def, index) => {
1953
+ const realDef = def.columnType == ColumnType.RowSelect || def.columnType == ColumnType.Actions
1954
+ ? adjustedDefs.find((it) => it.columnType === def.columnType)
1955
+ : asMap.get(def.id);
1956
+ if (!realDef) {
1957
+ throw new Error('Could not find equivalent column def:', { cause: def });
1958
+ }
1959
+ preset.columnDefs[index] = realDef;
1960
+ });
1961
+ });
1962
+ }
1963
+ }
1964
+ // #region static functions
1965
+ function areDefsEquivalent(newColumnDefs, oldColumnDefs) {
1966
+ const defKeys = newColumnDefs.map((def) => def.id);
1967
+ const presetKeys = oldColumnDefs.map((def) => def.id);
1968
+ if (defKeys.length !== presetKeys.length) {
1969
+ return false;
1970
+ }
1971
+ return newColumnDefs.every((newDef) => {
1972
+ if (newDef.columnType == ColumnType.RowSelect || newDef.columnType == ColumnType.Actions) {
1973
+ return true;
1974
+ }
1975
+ const oldDef = oldColumnDefs.find((d) => d.id === newDef.id);
1976
+ if (oldDef === undefined ||
1977
+ newDef.header !== oldDef.header ||
1978
+ newDef.columnType !== oldDef.columnType
1979
+ // ||
1980
+ // newDef.defaultHidden !== oldDef.defaultHidden ||
1981
+ // newDef.enableHiding !== oldDef.enableHiding ||
1982
+ // newDef.enablePinning !== oldDef.enablePinning ||
1983
+ // newDef.enableResizing !== oldDef.enableResizing
1984
+ ) {
1985
+ return false;
1986
+ }
1987
+ return true;
1988
+ });
1989
+ }
1990
+ function columnDefsToMap(defs) {
1991
+ const map = new Map();
1992
+ defs.forEach((def) => {
1993
+ map.set(def.id, def);
1994
+ });
1995
+ return map;
1996
+ }
1997
+ function targetIsLI(target) {
1998
+ return target.id.includes('-column-settings-');
1999
+ }
2000
+ export function isSearchable(def) {
2001
+ return def instanceof AccessorDef || (!!def.filterFn && typeof def.filterFn == 'function');
2002
+ }
2003
+ function hasPagination(repository) {
2004
+ return 'setPage' in repository;
2005
+ }
2006
+ function encapsulate(value) {
2007
+ return `"${value.replace(/[\n]/gm, ' ').replace(/["]/g, '""')}"`;
2008
+ }
2009
+ function generateTableOptions(contextObj) {
2010
+ const _pageCount = $derived(contextObj.paginationRepo?.lastPage ?? 1);
2011
+ const _prm = $derived.by(() => {
2012
+ return contextObj.dataRepo?.paginationType === PaginationType.Local
2013
+ ? contextObj.paginationRowModel // TODO getPaginationRowModel()
2014
+ : undefined;
2015
+ });
2016
+ const _pagination = $derived.by(() => {
2017
+ void contextObj.paginationRepo?.paginationState?.pageSize;
2018
+ void contextObj.paginationRepo?.paginationState?.pageIndex;
2019
+ return contextObj.paginationRepo?.paginationState;
2020
+ });
2021
+ // TODO
2022
+ function todo(fnName) {
2023
+ return () => {
2024
+ throw new Error('TODO ' + fnName);
2025
+ };
2026
+ }
2027
+ // const leftSizePx = $derived.by(() => {
2028
+ // if (contextObj.columnPinning.left?.length) {
2029
+ // return contextObj.columnDefs.reduce((total, current) => {
2030
+ // if (contextObj.columnPinning.left!.includes(current.id)) {
2031
+ // return total + contextObj.measureHeaderWidth(current);
2032
+ // }
2033
+ // return total;
2034
+ // }, 0);
2035
+ // }
2036
+ // return 0;
2037
+ // });
2038
+ // const rightSizePx = $derived.by(() => {
2039
+ // if (contextObj.columnPinning.right?.length) {
2040
+ // return contextObj.columnDefs.reduce((total, current) => {
2041
+ // if (contextObj.columnPinning.right!.includes(current.id)) {
2042
+ // return total + contextObj.measureHeaderWidth(current);
2043
+ // }
2044
+ // return total;
2045
+ // }, 0);
2046
+ // }
2047
+ // return 0;
2048
+ // });
2049
+ // const centerSizePx = $derived.by(() => {
2050
+ // if (contextObj.columnPinning.right?.length) {
2051
+ // return contextObj.columnDefs.reduce((total, current) => {
2052
+ // if (
2053
+ // contextObj.columnPinning.left?.includes(current.id) ||
2054
+ // contextObj.columnPinning.right?.includes(current.id)
2055
+ // ) {
2056
+ // return total;
2057
+ // }
2058
+ // return total + contextObj.measureHeaderWidth(current);
2059
+ // }, 0);
2060
+ // }
2061
+ // return 0;
2062
+ // });
2063
+ const makeHeader = (def) => {
2064
+ // const size = $derived(contextObj.measureHeaderWidth(def));
2065
+ const isVisible = $derived(contextObj.columnVisibility[def.id] != false);
2066
+ const isSorted = $derived.by(() => {
2067
+ const sortState = contextObj.paginationRepo?.sorting.find((it) => it.id == def.id);
2068
+ if (!sortState) {
2069
+ return 'none';
2070
+ }
2071
+ if (sortState.desc) {
2072
+ return 'desc';
2073
+ }
2074
+ return 'asc';
2075
+ });
2076
+ let originalWidth = 0;
2077
+ let mouseStartingPoint = 0;
2078
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2079
+ function addOverrideResizeHandler(e) {
2080
+ originalWidth = def.width;
2081
+ mouseStartingPoint = e.clientX;
2082
+ def.isResizing = true;
2083
+ window.addEventListener('mousemove', onResize);
2084
+ window.addEventListener('mouseup', removeOverrideResizeHandler);
2085
+ }
2086
+ function onResize(e) {
2087
+ def.width = originalWidth - (mouseStartingPoint - e.clientX);
2088
+ }
2089
+ function removeOverrideResizeHandler(e) {
2090
+ def.isResizing = false;
2091
+ window.removeEventListener('mousemove', onResize);
2092
+ }
2093
+ return {
2094
+ id: def.id,
2095
+ colSpan: 1,
2096
+ column: {
2097
+ id: def.id,
2098
+ getIsResizing: () => def.isResizing,
2099
+ columnDef: def,
2100
+ getCanSort: () => def.enableSorting,
2101
+ getToggleSortingHandler: () => def.enableSorting ? contextObj.getToggleSortingHandler(def) : undefined,
2102
+ getIsSorted: () => isSorted,
2103
+ getIsVisible: () => isVisible
2104
+ },
2105
+ getResizeHandler: () => {
2106
+ return (e) => {
2107
+ addOverrideResizeHandler(e);
2108
+ };
2109
+ },
2110
+ isPlaceholder: false,
2111
+ getSize: () => def.width
2112
+ };
2113
+ };
2114
+ const leftHeaderGroups = $derived.by(() => {
2115
+ const headers = contextObj.columnDefs
2116
+ .filter((it) => contextObj.columnVisibility[it.id] != false &&
2117
+ contextObj.columnPinning.left?.includes(it.id))
2118
+ .map(makeHeader);
2119
+ return [
2120
+ {
2121
+ depth: 0,
2122
+ id: 'left_0',
2123
+ headers
2124
+ }
2125
+ ];
2126
+ });
2127
+ const rightHeaderGroups = $derived.by(() => {
2128
+ const headers = contextObj.columnDefs
2129
+ .filter((it) => contextObj.columnVisibility[it.id] != false &&
2130
+ contextObj.columnPinning.right?.includes(it.id))
2131
+ .map(makeHeader);
2132
+ return [
2133
+ {
2134
+ depth: 0,
2135
+ id: 'right_0',
2136
+ headers
2137
+ }
2138
+ ];
2139
+ });
2140
+ const centerHeaderGroups = $derived.by(() => {
2141
+ const headers = contextObj.columnDefs
2142
+ .filter((it) => contextObj.columnVisibility[it.id] != false &&
2143
+ !(contextObj.columnPinning.left?.includes(it.id) ||
2144
+ contextObj.columnPinning.right?.includes(it.id)))
2145
+ .map(makeHeader);
2146
+ return [
2147
+ {
2148
+ depth: 0,
2149
+ id: 'center_0',
2150
+ headers
2151
+ }
2152
+ ];
2153
+ });
2154
+ const leftSizePx = $derived(leftHeaderGroups.reduce((total, grp) => total + grp.headers.reduce((total, header) => total + header.getSize(), 0), 0));
2155
+ const centerSizePx = $derived(centerHeaderGroups.reduce((total, grp) => total + grp.headers.reduce((total, header) => total + header.getSize(), 0), 0));
2156
+ const rightSizePx = $derived(rightHeaderGroups.reduce((total, grp) => total + grp.headers.reduce((total, header) => total + header.getSize(), 0), 0));
2157
+ const leftVisibleLeafColumns = $derived(leftHeaderGroups.flatMap((grp) => grp.headers.map((it) => it.column)));
2158
+ const rightVisibleLeafColumns = $derived(rightHeaderGroups.flatMap((grp) => grp.headers.map((it) => it.column)));
2159
+ const centerVisibleLeafColumns = $derived(centerHeaderGroups.flatMap((grp) => grp.headers.map((it) => it.column)));
2160
+ return {
2161
+ getLeftTotalSize: () => leftSizePx,
2162
+ getCenterTotalSize: () => centerSizePx,
2163
+ getRightTotalSize: () => rightSizePx,
2164
+ getLeftHeaderGroups: () => leftHeaderGroups,
2165
+ getRightHeaderGroups: () => rightHeaderGroups,
2166
+ getCenterHeaderGroups: () => centerHeaderGroups,
2167
+ getLeftVisibleLeafColumns: () => leftVisibleLeafColumns,
2168
+ getRightVisibleLeafColumns: () => rightVisibleLeafColumns,
2169
+ getCenterVisibleLeafColumns: () => centerVisibleLeafColumns,
2170
+ // manualPagination: true,
2171
+ get data() {
2172
+ return contextObj.sortedData;
2173
+ },
2174
+ get columns() {
2175
+ return contextObj.columnDefs;
2176
+ },
2177
+ get columnSizing() {
2178
+ return contextObj.columnSizing;
2179
+ },
2180
+ get columnVisibility() {
2181
+ return contextObj.columnVisibility;
2182
+ },
2183
+ get sorting() {
2184
+ return contextObj.paginationRepo?.sorting;
2185
+ },
2186
+ get pagination() {
2187
+ return _pagination;
2188
+ },
2189
+ get columnPinning() {
2190
+ return contextObj.columnPinning;
2191
+ },
2192
+ get columnFilters() {
2193
+ return contextObj.paginationRepo?.filtering;
2194
+ },
2195
+ get enableMultiSort() {
2196
+ return true;
2197
+ },
2198
+ get onColumnVisibilityChange() {
2199
+ return contextObj.updateVisibility;
2200
+ },
2201
+ get onColumnSizingChange() {
2202
+ return contextObj.updateColumnSizing;
2203
+ },
2204
+ get onColumnFiltersChange() {
2205
+ return contextObj.updateFilters;
2206
+ }
2207
+ // get pageCount() {
2208
+ // return _pageCount;
2209
+ // }
2210
+ };
2211
+ }
2212
+ function checkboxSortingFn(id, desc) {
2213
+ return desc
2214
+ ? (a, b) => {
2215
+ if (a[id] && !b[id]) {
2216
+ return 1;
2217
+ }
2218
+ if (!a[id] && b[id]) {
2219
+ return -1;
2220
+ }
2221
+ return 0;
2222
+ }
2223
+ : (a, b) => {
2224
+ if (a[id] && !b[id]) {
2225
+ return -1;
2226
+ }
2227
+ if (!a[id] && b[id]) {
2228
+ return 1;
2229
+ }
2230
+ return 0;
2231
+ };
2232
+ }
2233
+ function comparableSortingFn(id, desc) {
2234
+ return desc
2235
+ ? (a, b) => {
2236
+ if (a[id] == undefined && b[id] != undefined) {
2237
+ return 1;
2238
+ }
2239
+ if (b[id] == undefined && a[id] != undefined) {
2240
+ return -1;
2241
+ }
2242
+ if (a[id] < b[id]) {
2243
+ return 1;
2244
+ }
2245
+ if (a[id] > b[id]) {
2246
+ return -1;
2247
+ }
2248
+ return 0;
2249
+ }
2250
+ : (a, b) => {
2251
+ if (a[id] == undefined && b[id] != undefined) {
2252
+ return 1;
2253
+ }
2254
+ if (b[id] == undefined && a[id] != undefined) {
2255
+ return -1;
2256
+ }
2257
+ if (a[id] < b[id]) {
2258
+ return -1;
2259
+ }
2260
+ if (a[id] > b[id]) {
2261
+ return 1;
2262
+ }
2263
+ return 0;
2264
+ };
2265
+ }
2266
+ function progressSortingFn(id, desc) {
2267
+ return desc
2268
+ ? (a, b) => {
2269
+ const [minA, maxA] = a[id];
2270
+ const [minB, maxB] = b[id];
2271
+ if (minA == undefined || maxA == undefined || maxA == 0) {
2272
+ if (maxB != undefined && maxB != 0) {
2273
+ return 1;
2274
+ }
2275
+ else {
2276
+ return 0;
2277
+ }
2278
+ }
2279
+ if (minB == undefined || maxB == undefined || maxB == 0) {
2280
+ return -1;
2281
+ }
2282
+ const valueA = minA / maxA;
2283
+ const valueB = minB / maxB;
2284
+ if (valueA < valueB) {
2285
+ return 1;
2286
+ }
2287
+ if (valueB < valueA) {
2288
+ return -1;
2289
+ }
2290
+ return 0;
2291
+ }
2292
+ : (a, b) => {
2293
+ const [minA, maxA] = a[id];
2294
+ const [minB, maxB] = b[id];
2295
+ if (minA == undefined || maxA == undefined || maxA == 0) {
2296
+ if (maxB != undefined && maxB != 0) {
2297
+ return -1;
2298
+ }
2299
+ else {
2300
+ return 0;
2301
+ }
2302
+ }
2303
+ if (minB == undefined || maxB == undefined || maxB == 0) {
2304
+ return 1;
2305
+ }
2306
+ const valueA = minA / maxA;
2307
+ const valueB = minB / maxB;
2308
+ if (valueA < valueB) {
2309
+ return -1;
2310
+ }
2311
+ if (valueB < valueA) {
2312
+ return 1;
2313
+ }
2314
+ return 0;
2315
+ };
2316
+ }
2317
+ // #endregion