@lavalogic/scoria 0.35.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/README.md +58 -58
  2. package/dist/Components/AccordionGroup.svelte +46 -42
  3. package/dist/Components/AccordionGroupButton.svelte +106 -106
  4. package/dist/Components/AccordionGroupButtonProps.d.ts +27 -8
  5. package/dist/Components/AccordionGroupProps.d.ts +10 -2
  6. package/dist/Components/Action.svelte +137 -139
  7. package/dist/Components/ActionProps.d.ts +23 -3
  8. package/dist/Components/AlertModal.svelte +176 -125
  9. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +1126 -0
  10. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte.d.ts +4 -0
  11. package/dist/Components/AppointmentCalendar/AppointmentCalendarProps.d.ts +92 -0
  12. package/dist/Components/AppointmentCalendar/AppointmentCalendarProps.js +12 -0
  13. package/dist/Components/Base/BaseModal.svelte +172 -0
  14. package/dist/Components/Base/BaseModal.svelte.d.ts +4 -0
  15. package/dist/Components/Base/BaseModalProps.d.ts +73 -0
  16. package/dist/Components/Base/BaseModalProps.js +1 -0
  17. package/dist/Components/Base/ContextWrapper.svelte +72 -50
  18. package/dist/Components/Base/ContextWrapper.svelte.d.ts +24 -5
  19. package/dist/Components/Base/ContextWrapperProps.d.ts +22 -0
  20. package/dist/Components/Base/Pagination.svelte +198 -190
  21. package/dist/Components/Base/Pagination.svelte.d.ts +12 -2
  22. package/dist/Components/Base/PaginationProps.d.ts +60 -3
  23. package/dist/Components/Base/Snippets.svelte +36 -29
  24. package/dist/Components/Base/Snippets.svelte.d.ts +5 -1
  25. package/dist/Components/BigRadioSet.svelte +39 -30
  26. package/dist/Components/BigRadioSetProps.d.ts +17 -1
  27. package/dist/Components/Bubble.svelte +110 -77
  28. package/dist/Components/Bubble.svelte.d.ts +23 -2
  29. package/dist/Components/BubbleProps.d.ts +55 -4
  30. package/dist/Components/Button.svelte +209 -197
  31. package/dist/Components/ButtonProps.d.ts +66 -1
  32. package/dist/Components/Checkbox.svelte +100 -72
  33. package/dist/Components/Checkbox.svelte.d.ts +1 -12
  34. package/dist/Components/CheckboxProps.d.ts +27 -0
  35. package/dist/Components/CheckboxProps.js +1 -0
  36. package/dist/Components/CollapsibleCard.svelte +114 -83
  37. package/dist/Components/CollapsibleCardProps.d.ts +22 -1
  38. package/dist/Components/Contexts/ContextMenu.svelte +178 -157
  39. package/dist/Components/Contexts/ContextMenu.svelte.d.ts +26 -0
  40. package/dist/Components/Contexts/ContextMenuDivider.svelte +19 -11
  41. package/dist/Components/Contexts/ContextMenuDivider.svelte.d.ts +9 -0
  42. package/dist/Components/Contexts/ContextMenuOption.svelte +66 -57
  43. package/dist/Components/Contexts/ContextMenuOption.svelte.d.ts +12 -1
  44. package/dist/Components/Contexts/ContextMenuOptionProps.d.ts +34 -2
  45. package/dist/Components/Contexts/Toast.svelte +88 -64
  46. package/dist/Components/Contexts/Toast.svelte.d.ts +14 -0
  47. package/dist/Components/Contexts/ToastContainer.svelte +68 -49
  48. package/dist/Components/Contexts/ToastContainer.svelte.d.ts +14 -0
  49. package/dist/Components/Contexts/ToastProps.d.ts +14 -1
  50. package/dist/Components/Contexts/Tooltip.svelte +47 -36
  51. package/dist/Components/Contexts/Tooltip.svelte.d.ts +10 -0
  52. package/dist/Components/DataMatrixIcon.svelte +113 -42
  53. package/dist/Components/DataMatrixIconProps.d.ts +73 -1
  54. package/dist/Components/DateInput.svelte +144 -109
  55. package/dist/Components/DateInput.svelte.d.ts +1 -1
  56. package/dist/Components/DateOnlyInputProps.d.ts +31 -5
  57. package/dist/Components/DatePicker.svelte +301 -313
  58. package/dist/Components/DatePickerProps.d.ts +18 -1
  59. package/dist/Components/DateTimeInputProps.d.ts +30 -5
  60. package/dist/Components/DesktopModal.svelte +90 -119
  61. package/dist/Components/DesktopModalProps.d.ts +5 -4
  62. package/dist/Components/Dial.svelte +213 -151
  63. package/dist/Components/DialProps.d.ts +74 -2
  64. package/dist/Components/DimensionInput.svelte +171 -185
  65. package/dist/Components/DimensionInput.svelte.d.ts +1 -1
  66. package/dist/Components/DimensionInputProps.d.ts +39 -4
  67. package/dist/Components/DragMenu/DragMenuHolder.svelte +119 -107
  68. package/dist/Components/DragMenu/DragMenuHolderProps.d.ts +30 -1
  69. package/dist/Components/DragMenu/DraggableCard.svelte +77 -41
  70. package/dist/Components/DragMenu/DraggableCardProps.d.ts +27 -1
  71. package/dist/Components/FileCard.svelte +24 -20
  72. package/dist/Components/FileCardProps.d.ts +17 -1
  73. package/dist/Components/FileUpload.svelte +236 -196
  74. package/dist/Components/FileUploadProps.d.ts +34 -4
  75. package/dist/Components/GridInput.svelte +201 -191
  76. package/dist/Components/GridInput.svelte.d.ts +5 -5
  77. package/dist/Components/GridInputProps.d.ts +4 -1
  78. package/dist/Components/GridInputSet.svelte +31 -24
  79. package/dist/Components/GridInputSet.svelte.d.ts +5 -5
  80. package/dist/Components/GridInputSetProps.d.ts +4 -2
  81. package/dist/Components/HorizontalTabGroup.svelte +81 -79
  82. package/dist/Components/HorizontalTabGroupButton.svelte +51 -103
  83. package/dist/Components/HorizontalTabGroupProps.d.ts +15 -2
  84. package/dist/Components/Icon.svelte +144 -103
  85. package/dist/Components/IconProps.d.ts +54 -6
  86. package/dist/Components/Icons.d.ts +8 -0
  87. package/dist/Components/Icons.js +591 -572
  88. package/dist/Components/LoadingAnimation.svelte +39 -39
  89. package/dist/Components/LoadingAnimation.svelte.d.ts +1 -3
  90. package/dist/Components/LoadingAnimationProps.d.ts +16 -0
  91. package/dist/Components/LoadingAnimationProps.js +1 -0
  92. package/dist/Components/LoadingModal.svelte +48 -50
  93. package/dist/Components/LoadingModal.svelte.d.ts +1 -4
  94. package/dist/Components/LoadingModalProps.d.ts +17 -0
  95. package/dist/Components/LoadingModalProps.js +1 -0
  96. package/dist/Components/LoadingOverlay.svelte +28 -30
  97. package/dist/Components/LoadingOverlay.svelte.d.ts +1 -5
  98. package/dist/Components/LoadingOverlayProps.d.ts +28 -0
  99. package/dist/Components/LoadingOverlayProps.js +1 -0
  100. package/dist/Components/Modal.svelte +250 -255
  101. package/dist/Components/Modal.svelte.d.ts +1 -25
  102. package/dist/Components/ModalProps.d.ts +65 -0
  103. package/dist/Components/ModalProps.js +1 -0
  104. package/dist/Components/MultiSelect.svelte +238 -226
  105. package/dist/Components/MultiSelectCommonProps.d.ts +33 -4
  106. package/dist/Components/MultiSelectPropsAsObject.d.ts +5 -0
  107. package/dist/Components/MultiSelectPropsAsPrimitive.d.ts +6 -0
  108. package/dist/Components/Nav/CallbackButtonWithIcon.d.ts +22 -1
  109. package/dist/Components/Nav/Nav.svelte +115 -110
  110. package/dist/Components/Nav/Nav.svelte.d.ts +23 -2
  111. package/dist/Components/Nav/NavProps.d.ts +50 -3
  112. package/dist/Components/Nav/NavServiceMenuList.svelte +44 -35
  113. package/dist/Components/Nav/NavServiceMenuListProps.d.ts +25 -1
  114. package/dist/Components/Nav/NavTab.svelte +62 -91
  115. package/dist/Components/Nav/NavTab.svelte.d.ts +23 -2
  116. package/dist/Components/Nav/NavTabProps.d.ts +16 -2
  117. package/dist/Components/Nav/ServiceMenuItem.svelte +101 -92
  118. package/dist/Components/Nav/ServicesNav.svelte +96 -70
  119. package/dist/Components/Nav/ServicesNav.svelte.d.ts +23 -2
  120. package/dist/Components/Nav/ServicesNavProps.d.ts +20 -4
  121. package/dist/Components/Nav/SideMenuItemProps.d.ts +16 -0
  122. package/dist/Components/NumberInput.svelte +155 -145
  123. package/dist/Components/NumberInputProps.d.ts +37 -0
  124. package/dist/Components/PageHeading.svelte +25 -36
  125. package/dist/Components/PageHeading.svelte.d.ts +1 -6
  126. package/dist/Components/PageHeadingProps.d.ts +23 -0
  127. package/dist/Components/PageHeadingProps.js +1 -0
  128. package/dist/Components/PasswordInput.svelte +85 -73
  129. package/dist/Components/PasswordInput.svelte.d.ts +2 -2
  130. package/dist/Components/PasswordInputProps.d.ts +21 -0
  131. package/dist/Components/PasswordInputProps.js +1 -0
  132. package/dist/Components/Portal.svelte +36 -25
  133. package/dist/Components/PortalProps.d.ts +20 -1
  134. package/dist/Components/ProgressBubble.svelte +129 -84
  135. package/dist/Components/ProgressBubbleProps.d.ts +23 -2
  136. package/dist/Components/QuerySelect.svelte +384 -440
  137. package/dist/Components/QuerySelect.svelte.d.ts +2 -29
  138. package/dist/Components/QuerySelectProps.d.ts +66 -0
  139. package/dist/Components/QuerySelectProps.js +1 -0
  140. package/dist/Components/SingleSelect.svelte +268 -290
  141. package/dist/Components/SingleSelectCommonProps.d.ts +43 -5
  142. package/dist/Components/SingleSelectPropsAsObject.d.ts +7 -0
  143. package/dist/Components/SingleSelectPropsAsPrimitive.d.ts +8 -0
  144. package/dist/Components/StepButton.svelte +70 -120
  145. package/dist/Components/StepForm.svelte +147 -147
  146. package/dist/Components/StepFormProps.d.ts +16 -2
  147. package/dist/Components/Switch.svelte +84 -47
  148. package/dist/Components/Switch.svelte.d.ts +1 -1
  149. package/dist/Components/SwitchProps.d.ts +46 -0
  150. package/dist/Components/Table/Body/HeightData.d.ts +1 -6
  151. package/dist/Components/Table/Body/HeightData.js +8 -0
  152. package/dist/Components/Table/Body/QuickSearchCell.svelte +697 -641
  153. package/dist/Components/Table/Body/QuickSearchCell.svelte.d.ts +12 -11
  154. package/dist/Components/Table/Body/QuickSearchCellProps.d.ts +6 -0
  155. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +68 -34
  156. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte.d.ts +24 -2
  157. package/dist/Components/Table/Body/Rows/ColumnHighlightProps.d.ts +3 -0
  158. package/dist/Components/Table/Body/Rows/ColumnList.svelte +66 -56
  159. package/dist/Components/Table/Body/Rows/ColumnList.svelte.d.ts +12 -11
  160. package/dist/Components/Table/Body/Rows/ColumnListProps.d.ts +1 -0
  161. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +515 -182
  162. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte.d.ts +12 -11
  163. package/dist/Components/Table/Body/Rows/ColumnListRowProps.d.ts +5 -0
  164. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +79 -49
  165. package/dist/Components/Table/Body/Rows/Columns/AccessorComponentProps.d.ts +12 -0
  166. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +203 -191
  167. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte.d.ts +12 -12
  168. package/dist/Components/Table/Body/Rows/Columns/ActionsColumn.d.ts +9 -0
  169. package/dist/Components/Table/Body/Rows/Columns/ActionsTableCell.d.ts +5 -0
  170. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +150 -115
  171. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte.d.ts +14 -13
  172. package/dist/Components/Table/Body/Rows/Columns/BubbleCellProps.d.ts +12 -0
  173. package/dist/Components/Table/Body/Rows/Columns/BubbleCellProps.js +1 -0
  174. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +149 -129
  175. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +149 -126
  176. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte.d.ts +12 -11
  177. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCellProps.d.ts +7 -0
  178. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +142 -108
  179. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte.d.ts +17 -11
  180. package/dist/Components/Table/Body/Rows/Columns/RowSelectionColumn.d.ts +8 -0
  181. package/dist/Components/Table/Body/Rows/Columns/RowSelectionTableCell.d.ts +5 -0
  182. package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +11 -0
  183. package/dist/Components/Table/Body/Rows/Columns/SelectTableCell.d.ts +11 -0
  184. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +87 -72
  185. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte.d.ts +11 -0
  186. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +148 -137
  187. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte.d.ts +13 -18
  188. package/dist/Components/Table/Body/Rows/Columns/TableCheckboxProps.d.ts +17 -0
  189. package/dist/Components/Table/Body/Rows/Columns/TableCheckboxProps.js +1 -0
  190. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +159 -144
  191. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte.d.ts +1 -7
  192. package/dist/Components/Table/Body/Rows/Columns/TableColumnProps.d.ts +16 -0
  193. package/dist/Components/Table/Body/Rows/Columns/TableColumnProps.js +1 -0
  194. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +279 -249
  195. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte.d.ts +12 -11
  196. package/dist/Components/Table/Body/Rows/Columns/TableDatePickerProps.d.ts +9 -0
  197. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +249 -370
  198. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte.d.ts +20 -12
  199. package/dist/Components/Table/Body/Rows/Columns/TableQueryCell.d.ts +8 -0
  200. package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +9 -0
  201. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +291 -354
  202. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte.d.ts +12 -11
  203. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelectProps.d.ts +8 -0
  204. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +201 -189
  205. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte.d.ts +2 -5
  206. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckboxProps.d.ts +14 -0
  207. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckboxProps.js +1 -0
  208. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +263 -325
  209. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte.d.ts +13 -12
  210. package/dist/Components/Table/Body/Rows/Columns/TableSelectProps.d.ts +6 -0
  211. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +230 -381
  212. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte.d.ts +12 -11
  213. package/dist/Components/Table/Body/Rows/Columns/TableTextInputProps.d.ts +6 -0
  214. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +187 -177
  215. package/dist/Components/Table/Body/Rows/Columns/_helpers/useAsyncEditable.svelte.d.ts +104 -0
  216. package/dist/Components/Table/Body/Rows/Columns/_helpers/useAsyncEditable.svelte.js +215 -0
  217. package/dist/Components/Table/Body/Rows/TableRow.svelte +331 -263
  218. package/dist/Components/Table/Body/Rows/TableRow.svelte.d.ts +2 -10
  219. package/dist/Components/Table/Body/Rows/TableRowProps.d.ts +11 -2
  220. package/dist/Components/Table/Body/TableBody.svelte +198 -81
  221. package/dist/Components/Table/Body/TableBody.svelte.d.ts +15 -22
  222. package/dist/Components/Table/Body/TableBodyProps.d.ts +9 -7
  223. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +18 -12
  224. package/dist/Components/Table/ColumnFactory.svelte.d.ts +43 -0
  225. package/dist/Components/Table/ColumnFactory.svelte.js +339 -0
  226. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +41 -39
  227. package/dist/Components/Table/Headers/HighlightAllHeader.svelte.d.ts +12 -11
  228. package/dist/Components/Table/Headers/SelectAllHeader.svelte +30 -28
  229. package/dist/Components/Table/Headers/SelectAllHeader.svelte.d.ts +12 -11
  230. package/dist/Components/Table/Headers/TableHead.svelte +434 -294
  231. package/dist/Components/Table/Headers/TableHead.svelte.d.ts +13 -16
  232. package/dist/Components/Table/Headers/TableHeadProps.d.ts +10 -0
  233. package/dist/Components/Table/Headers/TableHeadProps.js +1 -0
  234. package/dist/Components/Table/Misc/ColumnPanel.svelte +154 -96
  235. package/dist/Components/Table/Misc/ColumnPanel.svelte.d.ts +12 -11
  236. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +112 -99
  237. package/dist/Components/Table/Misc/ColumnPanelModal.svelte.d.ts +12 -11
  238. package/dist/Components/Table/Misc/ColumnPanelModalProps.d.ts +5 -0
  239. package/dist/Components/Table/Misc/FilterInput.svelte +545 -556
  240. package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -11
  241. package/dist/Components/Table/Misc/FilterPanel.svelte +409 -51
  242. package/dist/Components/Table/Misc/FilterPanel.svelte.d.ts +12 -11
  243. package/dist/Components/Table/Misc/FilterPanelModal.svelte +30 -77
  244. package/dist/Components/Table/Misc/FilterPanelModal.svelte.d.ts +2 -23
  245. package/dist/Components/Table/Misc/SidePanel.svelte +35 -32
  246. package/dist/Components/Table/Misc/SidePanel.svelte.d.ts +1 -7
  247. package/dist/Components/Table/Misc/SidePanelProps.d.ts +17 -0
  248. package/dist/Components/Table/Misc/SidePanelProps.js +1 -0
  249. package/dist/Components/Table/Misc/TableFooter.svelte +315 -306
  250. package/dist/Components/Table/Misc/TableFooter.svelte.d.ts +13 -14
  251. package/dist/Components/Table/Misc/TableFooterProps.d.ts +8 -0
  252. package/dist/Components/Table/Misc/TableFooterProps.js +1 -0
  253. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +126 -157
  254. package/dist/Components/Table/Misc/TableHorizontalBar.svelte.d.ts +12 -11
  255. package/dist/Components/Table/Misc/TableSidebar.svelte +158 -177
  256. package/dist/Components/Table/Misc/TableSidebar.svelte.d.ts +12 -11
  257. package/dist/Components/Table/Misc/ToolboxPanel.svelte +147 -81
  258. package/dist/Components/Table/Misc/ToolboxPanel.svelte.d.ts +12 -11
  259. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +107 -100
  260. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte.d.ts +12 -11
  261. package/dist/Components/Table/Misc/ToolboxPanelModalProps.d.ts +5 -0
  262. package/dist/Components/Table/Misc/numberDateFilterTypes.d.ts +7 -4
  263. package/dist/Components/Table/Misc/numberDateFilterTypes.js +8 -3
  264. package/dist/Components/Table/Misc/stringFilterTypes.d.ts +6 -4
  265. package/dist/Components/Table/Misc/stringFilterTypes.js +7 -3
  266. package/dist/Components/Table/NestedTable.svelte +132 -88
  267. package/dist/Components/Table/NestedTable.svelte.d.ts +2 -10
  268. package/dist/Components/Table/NestedTableProps.d.ts +25 -0
  269. package/dist/Components/Table/NestedTableProps.js +1 -0
  270. package/dist/Components/Table/SubApis.svelte.d.ts +23 -0
  271. package/dist/Components/Table/SubApis.svelte.js +359 -0
  272. package/dist/Components/Table/Table.svelte +694 -519
  273. package/dist/Components/Table/Table.svelte.d.ts +24 -1
  274. package/dist/Components/Table/TableHelpers.svelte.d.ts +58 -0
  275. package/dist/Components/Table/TableHelpers.svelte.js +88 -0
  276. package/dist/Components/Table/Types/Columns/Column.d.ts +10 -0
  277. package/dist/Components/Table/Types/Columns/ColumnPinningState.d.ts +12 -0
  278. package/dist/Components/Table/Types/Columns/ColumnSizingState.d.ts +8 -0
  279. package/dist/Components/Table/Types/Columns/ColumnType.d.ts +17 -0
  280. package/dist/Components/Table/Types/Columns/ColumnType.js +18 -1
  281. package/dist/Components/Table/Types/Columns/DateColumn.d.ts +6 -0
  282. package/dist/Components/Table/Types/Columns/DateTableCell.d.ts +7 -0
  283. package/dist/Components/Table/Types/Columns/Definitions/AccessorFn.d.ts +13 -0
  284. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +28 -3
  285. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.js +15 -0
  286. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.d.ts +10 -0
  287. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.js +11 -1
  288. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.d.ts +23 -2
  289. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js +9 -2
  290. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +21 -2
  291. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.js +8 -0
  292. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +29 -3
  293. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js +11 -0
  294. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.d.ts +23 -0
  295. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.js +8 -0
  296. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +31 -0
  297. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.js +17 -3
  298. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.d.ts +21 -2
  299. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.js +7 -0
  300. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +29 -1
  301. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +17 -3
  302. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +122 -11
  303. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.js +77 -11
  304. package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.d.ts +9 -0
  305. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.d.ts +41 -1
  306. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js +16 -0
  307. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.d.ts +19 -1
  308. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.js +12 -1
  309. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.d.ts +11 -0
  310. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.js +6 -3
  311. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.d.ts +19 -0
  312. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.js +25 -1
  313. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.d.ts +26 -0
  314. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.js +20 -5
  315. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +43 -7
  316. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.js +18 -3
  317. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.d.ts +19 -5
  318. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.js +16 -5
  319. package/dist/Components/Table/Types/Columns/Definitions/JSONColumnDefSet.d.ts +14 -0
  320. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +34 -2
  321. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +30 -7
  322. package/dist/Components/Table/Types/Columns/Definitions/ValidationFn.d.ts +17 -0
  323. package/dist/Components/Table/Types/Columns/DefsWrapper.d.ts +10 -0
  324. package/dist/Components/Table/Types/Columns/DisplayType.d.ts +13 -0
  325. package/dist/Components/Table/Types/Columns/DisplayType.js +14 -1
  326. package/dist/Components/Table/Types/Columns/ExpandColumn.d.ts +5 -0
  327. package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +7 -0
  328. package/dist/Components/Table/Types/Columns/JSONColumnPinningState.d.ts +6 -0
  329. package/dist/Components/Table/Types/Columns/ProgressBarColumn.d.ts +5 -0
  330. package/dist/Components/Table/Types/Columns/ProgressBarTableCell.d.ts +9 -0
  331. package/dist/Components/Table/Types/Columns/TableActionButton.d.ts +12 -0
  332. package/dist/Components/Table/Types/Columns/TableCell.d.ts +16 -2
  333. package/dist/Components/Table/Types/Columns/VisibilityState.d.ts +12 -0
  334. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.d.ts +173 -0
  335. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.js +241 -0
  336. package/dist/Components/Table/Types/Context/FilteringState.svelte.d.ts +166 -0
  337. package/dist/Components/Table/Types/Context/FilteringState.svelte.js +180 -0
  338. package/dist/Components/Table/Types/Context/FocusState.svelte.d.ts +316 -0
  339. package/dist/Components/Table/Types/Context/FocusState.svelte.js +751 -0
  340. package/dist/Components/Table/Types/Context/ITable.d.ts +10 -0
  341. package/dist/Components/Table/Types/Context/PreferencesState.svelte.d.ts +242 -0
  342. package/dist/Components/Table/Types/Context/PreferencesState.svelte.js +317 -0
  343. package/dist/Components/Table/Types/Context/ReadonlyRowModel.d.ts +14 -3
  344. package/dist/Components/Table/Types/Context/Row.d.ts +18 -0
  345. package/dist/Components/Table/Types/Context/RowModel.d.ts +11 -0
  346. package/dist/Components/Table/Types/Context/SelectionState.svelte.d.ts +260 -0
  347. package/dist/Components/Table/Types/Context/SelectionState.svelte.js +613 -0
  348. package/dist/Components/Table/Types/Context/SortingState.svelte.d.ts +112 -0
  349. package/dist/Components/Table/Types/Context/SortingState.svelte.js +272 -0
  350. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +547 -53
  351. package/dist/Components/Table/Types/Context/TableContext.svelte.js +959 -1259
  352. package/dist/Components/Table/Types/Context/TableInitOptions.d.ts +16 -0
  353. package/dist/Components/Table/Types/Context/TableSettings.d.ts +20 -0
  354. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.d.ts +167 -0
  355. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.js +226 -0
  356. package/dist/Components/Table/Types/Coordinates/CellCoordinates.d.ts +12 -0
  357. package/dist/Components/Table/Types/Coordinates/CellCoordinatesWithoutColumn.d.ts +5 -0
  358. package/dist/Components/Table/Types/Coordinates/ColumnIndices.d.ts +16 -2
  359. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.d.ts +143 -0
  360. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.js +454 -0
  361. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +21 -0
  362. package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +10 -0
  363. package/dist/Components/Table/Types/DataRepository/IRemoteDataRepository.d.ts +16 -0
  364. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.d.ts +87 -3
  365. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.js +112 -7
  366. package/dist/Components/Table/Types/DataRepository/SortingState.d.ts +12 -0
  367. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +87 -2
  368. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +74 -1
  369. package/dist/Components/Table/Types/ExpandedPanel.d.ts +9 -0
  370. package/dist/Components/Table/Types/ExpandedPanel.js +10 -1
  371. package/dist/Components/Table/Types/Filtering/ColumnFiltersState.d.ts +17 -0
  372. package/dist/Components/Table/Types/Filtering/CustomFilter.d.ts +21 -0
  373. package/dist/Components/Table/Types/Filtering/CustomFilterType.d.ts +5 -0
  374. package/dist/Components/Table/Types/Filtering/CustomFilterType.js +6 -1
  375. package/dist/Components/Table/Types/Filtering/CustomRemoteFilters.d.ts +6 -0
  376. package/dist/Components/Table/Types/Filtering/FilterFn.d.ts +28 -0
  377. package/dist/Components/Table/Types/Filtering/FilterMode.d.ts +7 -0
  378. package/dist/Components/Table/Types/Filtering/FilterType.d.ts +8 -0
  379. package/dist/Components/Table/Types/Filtering/FilterType.js +9 -1
  380. package/dist/Components/Table/Types/Filtering/FilterValueType.d.ts +11 -0
  381. package/dist/Components/Table/Types/Filtering/FilterValueType.js +12 -1
  382. package/dist/Components/Table/Types/Filtering/HasCustomFilterFunction.d.ts +23 -2
  383. package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.d.ts +19 -12
  384. package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.js +18 -14
  385. package/dist/Components/Table/Types/Filtering/StringFilterMode.d.ts +22 -15
  386. package/dist/Components/Table/Types/Filtering/StringFilterMode.js +22 -16
  387. package/dist/Components/Table/Types/Focus/MultiFocusEdge.d.ts +8 -0
  388. package/dist/Components/Table/Types/Focus/MultiFocusEdge.js +9 -1
  389. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.d.ts +22 -0
  390. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.js +22 -0
  391. package/dist/Components/Table/Types/Header.d.ts +8 -0
  392. package/dist/Components/Table/Types/HeaderGroup.d.ts +7 -0
  393. package/dist/Components/Table/Types/Layout/CellPinning.d.ts +1 -0
  394. package/dist/Components/Table/Types/Layout/CellPinning.js +8 -0
  395. package/dist/Components/Table/Types/OnChangeFn.d.ts +11 -0
  396. package/dist/Components/Table/Types/Pagination/PaginationState.d.ts +9 -0
  397. package/dist/Components/Table/Types/Pagination/PaginationType.d.ts +10 -0
  398. package/dist/Components/Table/Types/Pagination/PaginationType.js +11 -1
  399. package/dist/Components/Table/Types/Public/AnyEditEvent.d.ts +30 -0
  400. package/dist/Components/Table/Types/Public/AnyEditEvent.js +1 -0
  401. package/dist/Components/Table/Types/Public/BaseColumnOptions.d.ts +44 -0
  402. package/dist/Components/Table/Types/Public/BaseColumnOptions.js +1 -0
  403. package/dist/Components/Table/Types/Public/ColumnFactory.d.ts +35 -0
  404. package/dist/Components/Table/Types/Public/ColumnFactory.js +1 -0
  405. package/dist/Components/Table/Types/Public/ColumnOptions.d.ts +238 -0
  406. package/dist/Components/Table/Types/Public/ColumnOptions.js +1 -0
  407. package/dist/Components/Table/Types/Public/ColumnSpec.d.ts +39 -0
  408. package/dist/Components/Table/Types/Public/ColumnSpec.js +1 -0
  409. package/dist/Components/Table/Types/Public/CreateTableOptions.d.ts +87 -0
  410. package/dist/Components/Table/Types/Public/CreateTableOptions.js +1 -0
  411. package/dist/Components/Table/Types/Public/KeyConstraints.d.ts +42 -0
  412. package/dist/Components/Table/Types/Public/KeyConstraints.js +22 -0
  413. package/dist/Components/Table/Types/Public/RowSource.d.ts +87 -0
  414. package/dist/Components/Table/Types/Public/RowSource.js +1 -0
  415. package/dist/Components/Table/Types/Public/SelectionOptions.d.ts +26 -0
  416. package/dist/Components/Table/Types/Public/SelectionOptions.js +1 -0
  417. package/dist/Components/Table/Types/Public/Table.d.ts +39 -0
  418. package/dist/Components/Table/Types/Public/Table.js +1 -0
  419. package/dist/Components/Table/Types/Public/TableInitialState.d.ts +26 -0
  420. package/dist/Components/Table/Types/Public/TableInitialState.js +1 -0
  421. package/dist/Components/Table/Types/Public/TablePersistence.d.ts +38 -0
  422. package/dist/Components/Table/Types/Public/TablePersistence.js +1 -0
  423. package/dist/Components/Table/Types/Public/TableSubApis.d.ts +157 -0
  424. package/dist/Components/Table/Types/Public/TableSubApis.js +1 -0
  425. package/dist/Components/Table/Types/Public/index.d.ts +20 -0
  426. package/dist/Components/Table/Types/Public/index.js +8 -0
  427. package/dist/Components/Table/Types/Toolbar/ToolbarPosition.d.ts +4 -0
  428. package/dist/Components/Table/Types/Toolbar/ToolbarPosition.js +5 -1
  429. package/dist/Components/Table/createTable.svelte.d.ts +53 -0
  430. package/dist/Components/Table/createTable.svelte.js +269 -0
  431. package/dist/Components/Test/TestContextConsumer.svelte +13 -13
  432. package/dist/Components/TextArea.svelte +127 -108
  433. package/dist/Components/TextAreaProps.d.ts +37 -0
  434. package/dist/Components/TextInput.svelte +166 -147
  435. package/dist/Components/TextInputProps.d.ts +58 -1
  436. package/dist/Components/ThreeStateRadio.svelte +140 -143
  437. package/dist/Components/ThreeStateRadioProps.d.ts +29 -1
  438. package/dist/Components/Touch/BoolCard.svelte +45 -52
  439. package/dist/Components/Touch/BoolCard.svelte.d.ts +1 -10
  440. package/dist/Components/Touch/BoolCardProps.d.ts +21 -0
  441. package/dist/Components/Touch/BoolCardProps.js +1 -0
  442. package/dist/Components/Touch/DateModal.svelte +209 -217
  443. package/dist/Components/Touch/DateModal.svelte.d.ts +1 -17
  444. package/dist/Components/Touch/DateModalProps.d.ts +36 -0
  445. package/dist/Components/Touch/DateModalProps.js +1 -0
  446. package/dist/Components/Touch/EditCard.svelte +59 -52
  447. package/dist/Components/Touch/EditCardProps.d.ts +21 -0
  448. package/dist/Components/Touch/InfoCard.svelte +35 -28
  449. package/dist/Components/Touch/InfoCardProps.d.ts +9 -0
  450. package/dist/Components/Touch/InfoTextCard.svelte +28 -21
  451. package/dist/Components/Touch/InfoTextCardProps.d.ts +8 -0
  452. package/dist/Components/Touch/ModalExplanation.svelte +17 -20
  453. package/dist/Components/Touch/ModalExplanation.svelte.d.ts +1 -6
  454. package/dist/Components/Touch/ModalExplanationProps.d.ts +22 -0
  455. package/dist/Components/Touch/ModalExplanationProps.js +1 -0
  456. package/dist/Components/Touch/NumberKeyboard.svelte +225 -268
  457. package/dist/Components/Touch/NumberKeyboardProps.d.ts +19 -0
  458. package/dist/Components/Touch/NumberModal.svelte +79 -69
  459. package/dist/Components/Touch/NumberModalProps.d.ts +23 -1
  460. package/dist/Components/Touch/PlusMinusCard.svelte +48 -52
  461. package/dist/Components/Touch/PlusMinusCard.svelte.d.ts +1 -6
  462. package/dist/Components/Touch/PlusMinusCardProps.d.ts +18 -0
  463. package/dist/Components/Touch/PlusMinusCardProps.js +1 -0
  464. package/dist/Components/Touch/SelectModal.svelte +123 -105
  465. package/dist/Components/Touch/SelectModalProps.d.ts +22 -1
  466. package/dist/Components/Touch/SummaryCard.svelte +107 -65
  467. package/dist/Components/Touch/SummaryCardProps.d.ts +16 -3
  468. package/dist/Components/Touch/TextAreaModal.svelte +95 -86
  469. package/dist/Components/Touch/TextAreaModalProps.d.ts +21 -0
  470. package/dist/Components/Touch/TextModal.svelte +106 -123
  471. package/dist/Components/Touch/TextModalProps.d.ts +28 -1
  472. package/dist/Components/Touch/TouchCard.svelte +34 -72
  473. package/dist/Components/Touch/TouchCardProps.d.ts +21 -0
  474. package/dist/Components/Touch/TouchModal.svelte +265 -259
  475. package/dist/Components/Touch/TouchModalProps.d.ts +35 -1
  476. package/dist/Components/Touch/UtilityButton.svelte +116 -98
  477. package/dist/Components/Touch/UtilityButtonProps.d.ts +16 -0
  478. package/dist/Components/VerticalTabGroup.svelte +80 -102
  479. package/dist/Components/VerticalTabGroupButton.svelte +59 -98
  480. package/dist/Components/VerticalTabGroupProps.d.ts +15 -2
  481. package/dist/Contexts/AlertContext.svelte.d.ts +92 -8
  482. package/dist/Contexts/AlertContext.svelte.js +69 -6
  483. package/dist/Contexts/ContextMenuContext.svelte.d.ts +54 -8
  484. package/dist/Contexts/ContextMenuContext.svelte.js +48 -2
  485. package/dist/Contexts/TestContext.svelte.d.ts +27 -1
  486. package/dist/Contexts/TestContext.svelte.js +29 -1
  487. package/dist/Contexts/ToastContext.svelte.d.ts +29 -1
  488. package/dist/Contexts/ToastContext.svelte.js +93 -24
  489. package/dist/Contexts/TooltipContext.svelte.d.ts +68 -1
  490. package/dist/Contexts/TooltipContext.svelte.js +70 -7
  491. package/dist/Contexts/UntypedInputContext.svelte.d.ts +54 -5
  492. package/dist/Contexts/UntypedInputContext.svelte.js +87 -34
  493. package/dist/Delay/Delay.js +1 -1
  494. package/dist/Helpers/AsyncFlag.svelte.d.ts +39 -0
  495. package/dist/Helpers/AsyncFlag.svelte.js +72 -0
  496. package/dist/Helpers/Datamatrix.d.ts +19 -10
  497. package/dist/Helpers/Datamatrix.js +291 -2
  498. package/dist/Helpers/Helpers.svelte.d.ts +252 -17
  499. package/dist/Helpers/Helpers.svelte.js +271 -60
  500. package/dist/Helpers/INamed.d.ts +6 -0
  501. package/dist/Helpers/Storage.d.ts +67 -0
  502. package/dist/Helpers/Storage.js +138 -0
  503. package/dist/Helpers/dropdownPortal.d.ts +52 -0
  504. package/dist/Helpers/dropdownPortal.js +232 -0
  505. package/dist/Helpers/dropdownPortal.svelte.d.ts +2 -0
  506. package/dist/Helpers/dropdownPortal.svelte.js +5 -0
  507. package/dist/Helpers/memoiseByRow.d.ts +45 -0
  508. package/dist/Helpers/memoiseByRow.js +78 -0
  509. package/dist/Helpers/prefersReducedMotion.svelte.d.ts +27 -0
  510. package/dist/Helpers/prefersReducedMotion.svelte.js +18 -0
  511. package/dist/Helpers/useTooltip.svelte.d.ts +53 -0
  512. package/dist/Helpers/useTooltip.svelte.js +62 -0
  513. package/dist/Types/Examples/ExampleModal.svelte +35 -34
  514. package/dist/Types/Examples/ExampleSelectEnum.js +1 -1
  515. package/dist/Types/Internal/AsyncFlag.d.ts +7 -0
  516. package/dist/Types/Internal/AsyncFlag.js +1 -0
  517. package/dist/Types/Internal/BigRadioOption.d.ts +8 -0
  518. package/dist/Types/Internal/ButtonProp.d.ts +24 -2
  519. package/dist/Types/Internal/CallbackButton.d.ts +12 -0
  520. package/dist/Types/Internal/DateChange.d.ts +8 -0
  521. package/dist/Types/Internal/DatePickerType.d.ts +5 -0
  522. package/dist/Types/Internal/DatePickerType.js +6 -1
  523. package/dist/Types/Internal/IdentifiableToastMessage.d.ts +8 -0
  524. package/dist/Types/Internal/InputVariant.d.ts +5 -0
  525. package/dist/Types/Internal/InputVariant.js +6 -1
  526. package/dist/Types/Internal/Misc.d.ts +91 -0
  527. package/dist/Types/Internal/RefWrapper.d.ts +6 -0
  528. package/dist/Types/Internal/SelectOption.d.ts +8 -0
  529. package/dist/Types/Internal/Shape.d.ts +1 -0
  530. package/dist/Types/Internal/Shape.js +2 -1
  531. package/dist/Types/Internal/Side.d.ts +1 -0
  532. package/dist/Types/Internal/Side.js +2 -1
  533. package/dist/Types/Internal/Size.d.ts +5 -0
  534. package/dist/Types/Internal/Size.js +6 -1
  535. package/dist/Types/Internal/TabOption.d.ts +15 -5
  536. package/dist/Types/Internal/Ternary.d.ts +6 -0
  537. package/dist/Types/Internal/Ternary.js +7 -1
  538. package/dist/Types/Internal/ToastMessage.d.ts +28 -0
  539. package/dist/Types/Internal/Validity.d.ts +6 -0
  540. package/dist/Types/Internal/Validity.js +7 -1
  541. package/dist/Types/Internal/ValidityWrapper.d.ts +8 -0
  542. package/dist/Types/Internal/Variant.d.ts +5 -0
  543. package/dist/Types/Internal/Variant.js +6 -1
  544. package/dist/index.d.ts +27 -82
  545. package/dist/index.js +24 -62
  546. package/dist/scss/_basics.scss +12 -12
  547. package/dist/scss/_colours.scss +134 -134
  548. package/dist/scss/_mixins.scss +3300 -3016
  549. package/dist/scss/_motion.scss +57 -0
  550. package/dist/scss/_sizing.scss +85 -69
  551. package/dist/scss/_transitions.scss +8 -8
  552. package/dist/scss/colours.js +2 -2
  553. package/dist/scss/sizing.d.ts +9 -0
  554. package/dist/scss/sizing.js +10 -1
  555. package/package.json +6 -2
@@ -1,558 +1,547 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="T extends object, FilterValueType, FilterOptionsType"
6
- >
7
- import { dev } from '$app/environment';
8
- import Button from '../../Button.svelte';
9
- import MultiSelect from '../../MultiSelect.svelte';
10
- import NumberInput from '../../NumberInput.svelte';
11
- import QuerySelect from '../../QuerySelect.svelte';
12
- import SingleSelect from '../../SingleSelect.svelte';
13
- import TextInput from '../../TextInput.svelte';
14
- import DateModal from '../../Touch/DateModal.svelte';
15
- import { devCatch, hasQuery, isDateTuple, isNumericArray } from '../../../Helpers/Helpers.svelte.js';
16
- import type { SelectOption } from '../../../Types/Internal/SelectOption.js';
17
- import { getContext, onMount, untrack } from 'svelte';
18
- import { CheckboxDef } from '../Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js';
19
- import { DateInputDef } from '../Types/Columns/Definitions/Accessors/DateInputDef.svelte.js';
20
- import { NumberInputDef } from '../Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js';
21
- import { SelectDef } from '../Types/Columns/Definitions/Accessors/SelectDef.svelte.js';
22
- import { TableContext } from '../Types/Context/TableContext.svelte.js';
23
- import { CustomFilterType } from '../Types/Filtering/CustomFilterType.js';
24
- import { NumberDateFilterMode } from '../Types/Filtering/NumberDateFilterMode.js';
25
- import { StringFilterMode } from '../Types/Filtering/StringFilterMode.js';
26
- import type { FilterInputProps } from './FilterInputProps.js';
27
- import { numberDateFilterTypes } from './numberDateFilterTypes.js';
28
- import { stringFilterTypes } from './stringFilterTypes.js';
29
-
30
- const tableContext = getContext<TableContext<T, never>>(TableContext.identifier);
31
-
32
- const { def, customFilters }: FilterInputProps<T, FilterValueType, FilterOptionsType> = $props();
33
-
34
- const customFilter = $derived(customFilters?.get(def.id));
35
-
36
- const isRemoteSelect = $derived(customFilter?.type === CustomFilterType.Select);
37
-
38
- let value: /*SelectOption<unknown> |*/ unknown /*| null | undefined*/ = $state(null);
39
- let valueMin: number | null = $state(null);
40
- let valueMax: number | null = $state(null);
41
-
42
- let selectedOptions: Array<SelectOption<unknown>> = $state([]);
43
- let lastQueryOptions: Array<SelectOption<unknown>> = $state([]);
44
-
45
- const isNumeric = $derived(
46
- def instanceof NumberInputDef || customFilter?.type === CustomFilterType.Number
47
- );
48
-
49
- const hasFilterFn = $derived(!!def.filterFn && typeof def.filterFn === 'function');
50
-
51
- // const hasAcceptableColumnType = $derived(
52
- // (def instanceof AccessorDef && searchableTypes.has(def.accessorType)) ||
53
- // (def instanceof AbstractDisplayDef && searchableTypes.has(def.displayType))
54
- // );
55
-
56
- const isSearchable = $derived(
57
- def.allowFiltering && (hasFilterFn || customFilters?.has(def.id) == true)
58
- // ((hasFilterFn && hasAcceptableColumnType) || customFilters?.has(def.id) == true) // removed hasAcceptableColumnType due to it being redundant
59
- );
60
-
61
- const isSelect = $derived(
62
- def instanceof SelectDef || customFilter?.type === CustomFilterType.Select
63
- );
64
-
65
- const options = $derived(isSelect ? (def.getOptions?.() ?? customFilter?.options ?? []) : []);
66
-
67
- let optionsPromise: Array<SelectOption<unknown>> | Promise<Array<SelectOption<unknown>>> = $state(
68
- [] as Array<SelectOption<unknown>> | Promise<Array<SelectOption<unknown>>>
69
- );
70
-
71
- onMount(() => {
72
- retryOptionsPromise();
73
- });
74
-
75
- function retryOptionsPromise() {
76
- optionsPromise = def instanceof SelectDef ? def.getOptions() : [];
77
- }
78
-
79
- // function isNumber(def: ColumnDef<T>): def is INumberInputColumnAccessorDef<T> {
80
- // return 'type' in def && def.type === 'Number';
81
- // }
82
-
83
- const filteringStateValue = $derived(
84
- tableContext.paginationRepo?.filtering.find((it) => it.id === def.id)?.value
85
- );
86
-
87
- $effect(() => {
88
- if (isRemoteSelect && !tableContext.paginationRepo?.filtering) {
89
- return;
90
- }
91
- void filteringStateValue;
92
- if (def.debug) {
93
- console.debug(
94
- `${def.id}: `,
95
- 'FILTER INPUT: filtering state value:',
96
- $state.snapshot(filteringStateValue)
97
- );
98
- }
99
-
100
- if (hasQuery(customFilter)) {
101
- if (def.debug) {
102
- console.debug(`${def.id}: `, 'has query');
103
- }
104
-
105
- untrack(async () => {
106
- try {
107
- // as unknown as string | number | undefined;
108
-
109
- if (filteringStateValue != undefined) {
110
- if (def.debug) {
111
- console.debug(`${def.id}: query values:`, tableContext.dataRepo.__queryValues);
112
- }
113
- const x = await tableContext.dataRepo.__queryValues.get(customFilter.id);
114
-
115
- if (def.debug) {
116
- console.debug(`${def.id}: value:`, $state.snapshot(x));
117
- }
118
- value = (x ?? null) as SelectOption<unknown> | null;
119
- } else if (def.debug) {
120
- console.debug(
121
- `${def.id}: filtering state value was undefined`,
122
- $state.snapshot(tableContext.paginationRepo?.filtering)
123
- );
124
- }
125
- } catch (e) {
126
- console.warn(e);
127
- value = null;
128
- }
129
- }).catch(devCatch);
130
- } else if (isSelect) {
131
- if (def.debug) {
132
- console.debug(`${def.id}: is select (not query)`);
133
- }
134
- untrack(async () => {
135
- try {
136
- const opts = await options;
137
- if (def.debug) {
138
- console.debug(`${def.id}: possible options:`, $state.snapshot(options));
139
- }
140
- const x = opts.filter((it) => {
141
- if (it.value != null && (typeof it.value == 'string' || typeof it.value == 'number')) {
142
- return (filteringStateValue as Array<unknown> | undefined)?.includes(it.value);
143
- }
144
- return false;
145
- });
146
- if (def.debug) {
147
- console.debug(`${def.id}: selected options:`, x);
148
- }
149
- selectedOptions = x;
150
- } catch (e) {
151
- if (dev || def.debug) {
152
- console.debug(`${def.id}: `, e);
153
- }
154
- }
155
- }).catch(devCatch);
156
- } else if (isNumeric) {
157
- if (
158
- selectedNumberFilterType?.value === NumberDateFilterMode.Between &&
159
- tableContext.paginationRepo?.filtering
160
- ) {
161
- if (filteringStateValue != undefined) {
162
- const [min, max] = filteringStateValue as [number, number | undefined];
163
- value = min;
164
- valueMin = min;
165
- valueMax = max ?? null;
166
- } else {
167
- value = valueMin = valueMax = null;
168
- }
169
- } else if (tableContext.paginationRepo?.filtering) {
170
- if (filteringStateValue != undefined) {
171
- const [min] = filteringStateValue as [number, number | undefined];
172
- value = min;
173
- valueMin = min;
174
- valueMax = min;
175
- } else {
176
- value = valueMin = valueMax = null;
177
- }
178
- }
179
- } else if (tableContext.paginationRepo?.filtering) {
180
- if (
181
- filteringStateValue == null ||
182
- typeof filteringStateValue == 'string' ||
183
- typeof filteringStateValue == 'number'
184
- ) {
185
- value = filteringStateValue;
186
- } else if (typeof filteringStateValue !== 'boolean') {
187
- console.warn('unknown value type:', $state.snapshot(filteringStateValue));
188
- value = filteringStateValue as string; // HACK attempt to keep production running
189
- }
190
- }
191
- });
192
-
193
- onMount(() => {
194
- const filterOption =
195
- tableContext.paginationRepo?.filtering &&
196
- tableContext.paginationRepo.filtering.find((it) => it.id === def.id);
197
-
198
- if (filterOption) {
199
- if (isNumericArray(filterOption.value)) {
200
- [valueMin, valueMax] = filterOption.value;
201
- if (valueMax == undefined) {
202
- valueMax = valueMin;
203
- } else if (valueMin == undefined) {
204
- valueMin = valueMax;
205
- }
206
- } else if (!hasQuery(customFilter)) {
207
- const gotValue = filterOption.value;
208
- if (gotValue == null || typeof gotValue == 'string' || typeof gotValue == 'number') {
209
- value = gotValue;
210
- } else if (typeof filteringStateValue !== 'boolean') {
211
- console.warn('unknown value type:', $state.snapshot(gotValue));
212
- value = gotValue as string; // HACK attempt to keep production running
213
- }
214
- }
215
- }
216
-
217
- // selectedNumberFilterType =
218
- // (filterMode as NumberDateFilterMode | undefined) ?? NumberDateFilterMode.In;
219
- // selectedStringFilterType =
220
- // (filterMode as StringFilterMode | undefined) ?? StringFilterMode.Contains;
221
- });
222
-
223
- const filterMode = $derived(tableContext.paginationRepo?.filterModes.get(def.id));
224
- const selectedNumberFilterType: SelectOption<NumberDateFilterMode> | null = $derived.by(() => {
225
- const value = (filterMode as NumberDateFilterMode | undefined) ?? NumberDateFilterMode.In;
226
- return numberDateFilterTypes.find((it) => it.value === value) ?? null;
227
- });
228
- const selectedStringFilterType: SelectOption<StringFilterMode> | null = $derived.by(() => {
229
- const value = (filterMode as StringFilterMode | undefined) ?? StringFilterMode.Contains;
230
- return stringFilterTypes.find((it) => it.value === value) ?? null;
231
- });
232
-
233
- // let selectedNumberFilterType: NumberDateFilterMode = $state(NumberDateFilterMode.In);
234
- // let selectedStringFilterType: StringFilterMode = $state(StringFilterMode.Contains);
235
-
236
- const inputId: string = $derived(`${tableContext.tableName}-${def.id}-filter-type`);
237
-
238
- let showFromDateModal = $state(false);
239
- let showToDateModal = $state(false);
240
-
241
- function generateOnChangeObject(label: string) {
242
- return (newValue: SelectOption<unknown> | null) => {
243
- tableContext.paginationRepo?.filterBy(def.id, newValue?.value ?? null);
244
- tableContext.dataRepo.__queryValues.set(label, newValue ?? null);
245
- value = newValue ?? null;
246
- };
247
- }
248
-
249
- function generateOnChangePrimitive(label: string) {
250
- return (newValue: SelectOption<unknown> | null) => {
251
- tableContext.paginationRepo?.filterBy(def.id, newValue?.value ?? null);
252
- tableContext.dataRepo.__queryValues.set(label, newValue?.value ?? null);
253
- value = newValue?.value ?? null;
254
- };
255
- }
256
- </script>
257
-
258
- {#if isSearchable}
259
- <!-- TODO remove this check once datePicker is supported -->
260
- {#if def instanceof DateInputDef || def instanceof CheckboxDef}
261
- <label for={inputId}>{def.header}</label>
262
- {/if}
263
- <div class="row">
264
- {#if def instanceof DateInputDef}
265
- {@const dateValues =
266
- tableContext.paginationRepo?.filtering.find((it) => it.id === def.id)?.value ?? []}
267
- {#if isDateTuple(dateValues)}
268
- {@const [fromDate, toDate] = dateValues}
269
- <div class="spaced-around">
270
- <Button
271
- onclick={() => {
272
- showFromDateModal = true;
273
- }}>From {fromDate?.toLocaleDateString() ?? 'Any Date'}</Button
274
- >
275
-
276
- <Button
277
- onclick={() => {
278
- showToDateModal = true;
279
- }}>To {toDate?.toLocaleDateString() ?? 'Any Date'}</Button
280
- >
281
- </div>
282
-
283
- {#if showFromDateModal}
284
- <DateModal
285
- header="Edit Date From"
286
- value={fromDate}
287
- cancelEditing={() => {
288
- showFromDateModal = false;
289
- }}
290
- confirm={(e) => {
291
- tableContext.paginationRepo?.filterBy(def.id, [e, toDate]);
292
- showFromDateModal = false;
293
- }}
294
- />
295
- {/if}
296
-
297
- {#if showToDateModal}
298
- <DateModal
299
- inclusive
300
- header="Edit Date To"
301
- value={toDate}
302
- cancelEditing={() => {
303
- showToDateModal = false;
304
- }}
305
- confirm={(e) => {
306
- tableContext.paginationRepo?.filterBy(def.id, [fromDate, e]);
307
- showToDateModal = false;
308
- }}
309
- />
310
- {/if}
311
- {/if}
312
- {:else if def instanceof SelectDef && !isRemoteSelect}
313
- <div class="maxwidth">
314
- {#await optionsPromise then options}
315
- <MultiSelect
316
- label={customFilter?.id ??
317
- customFilter?.label ??
318
- customFilter?.objectName ??
319
- customFilter?.queryKey ??
320
- def.id}
321
- labelProp="label"
322
- valueProp="value"
323
- name={customFilter?.objectName ?? 'Item'}
324
- {options}
325
- valueAsObject={false}
326
- onchange={(e: Array<SelectOption<unknown>>) => {
327
- tableContext.paginationRepo?.filterBy(
328
- def.id,
329
- e.map((it) => it.value)
330
- );
331
- }}
332
- selectedValues={selectedOptions}
333
- collapseSelection
334
- />
335
- {:catch e}
336
- <span>Error retrieving options: {e.message}</span>
337
- <Button
338
- onclick={() => {
339
- retryOptionsPromise();
340
- }}>Retry</Button
341
- >
342
- {/await}
343
- </div>
344
- {:else if customFilter && isRemoteSelect}
345
- <div class="contents">
346
- {#await options then options}
347
- {#if hasQuery(customFilter)}
348
- {#if customFilter.valueAsObject !== true}
349
- {@const label = customFilter.id}
350
-
351
- <!-- TODO: multiselect -->
352
-
353
- <QuerySelect
354
- valueAsObject={false}
355
- {label}
356
- clearable
357
- name={customFilter.objectName ?? 'Item'}
358
- valueProp="value"
359
- labelProp="label"
360
- value={value as string | number | null}
361
- query={customFilter.query}
362
- bind:options={lastQueryOptions}
363
- onchange={generateOnChangePrimitive(label)}
364
- />
365
- {:else}
366
- {@const label = customFilter.id}
367
-
368
- <!-- TODO: multiselect -->
369
-
370
- <QuerySelect
371
- valueAsObject={true}
372
- {label}
373
- clearable
374
- name={customFilter.objectName ?? 'Item'}
375
- valueProp="value"
376
- labelProp="label"
377
- value={value as null}
378
- query={customFilter.query}
379
- bind:options={lastQueryOptions}
380
- onchange={generateOnChangeObject(label)}
381
- />
382
- {/if}
383
- {:else}
384
- <MultiSelect
385
- label={customFilter.id}
386
- labelProp="label"
387
- valueProp="value"
388
- name={customFilter.objectName ?? 'Item'}
389
- {options}
390
- valueAsObject={false}
391
- onchange={(e: Array<SelectOption<unknown>>) => {
392
- tableContext.paginationRepo?.filterBy(
393
- def.id,
394
- e.map((it) => it.value)
395
- );
396
- }}
397
- selectedValues={selectedOptions}
398
- collapseSelection
399
- />
400
- {/if}
401
- {/await}
402
- </div>
403
- {:else if def instanceof CheckboxDef}
404
- <div class="inner-row">
405
- <label>
406
- <input
407
- value={false}
408
- type="radio"
409
- bind:group={value}
410
- onchange={() => {
411
- tableContext.paginationRepo?.filterBy(def.id, value);
412
- }}
413
- />
414
- No
415
- </label>
416
- <label>
417
- <input
418
- value={undefined}
419
- type="radio"
420
- bind:group={value}
421
- onchange={() => {
422
- tableContext.paginationRepo?.filterBy(def.id, value);
423
- }}
424
- />
425
- Any
426
- </label>
427
- <label>
428
- <input
429
- value={true}
430
- type="radio"
431
- bind:group={value}
432
- onchange={() => {
433
- tableContext.paginationRepo?.filterBy(def.id, value);
434
- }}
435
- />
436
- Yes
437
- </label>
438
- </div>
439
- {:else if isNumeric}
440
- {@const label = typeof def.header === 'string' ? def.header : undefined}
441
- <div class="left">
442
- <SingleSelect
443
- {label}
444
- name="Filter Type"
445
- options={numberDateFilterTypes}
446
- labelProp="label"
447
- valueProp="value"
448
- valueAsObject
449
- value={selectedNumberFilterType}
450
- onchange={(newValue: SelectOption<NumberDateFilterMode> | null) => {
451
- const oldFilterType = selectedNumberFilterType;
452
-
453
- const newFilterType = newValue?.value ?? NumberDateFilterMode.In;
454
- tableContext.paginationRepo?.setFilterMode(def.id, newFilterType);
455
-
456
- if (selectedNumberFilterType?.value !== oldFilterType?.value) {
457
- if (oldFilterType?.value === NumberDateFilterMode.Between) {
458
- valueMax = null;
459
- tableContext.paginationRepo?.filterBy(def.id, [valueMin, valueMin]);
460
- }
461
-
462
- if (newFilterType === NumberDateFilterMode.In) {
463
- tableContext.paginationRepo?.filterBy(def.id, [value]);
464
- }
465
-
466
- // TODO what about the other modes?
467
- }
468
- }}
469
- onkeydown={(e: KeyboardEvent) => {
470
- e.stopPropagation();
471
- }}
472
- />
473
- </div>
474
- <div class="right">
475
- {#if selectedNumberFilterType?.value === NumberDateFilterMode.Between}
476
- <NumberInput
477
- id={inputId}
478
- bind:value={valueMin}
479
- oninput={() => {
480
- tableContext.paginationRepo?.filterBy(def.id, [valueMin, valueMax]);
481
- }}
482
- onkeydown={(e: KeyboardEvent) => {
483
- e.stopPropagation();
484
- }}
485
- />
486
- <span>and</span>
487
- <NumberInput
488
- id={inputId}
489
- bind:value={valueMax}
490
- oninput={() => {
491
- tableContext.paginationRepo?.filterBy(def.id, [valueMin, valueMax]);
492
- }}
493
- onkeydown={(e: KeyboardEvent) => {
494
- e.stopPropagation();
495
- }}
496
- />
497
- {:else if value == null || typeof value == 'string'}
498
- <TextInput
499
- id={inputId}
500
- bind:value
501
- oninput={() => {
502
- tableContext.paginationRepo?.filterBy(def.id, [value]);
503
- }}
504
- onkeydown={(e: KeyboardEvent) => {
505
- e.stopPropagation();
506
- }}
507
- />
508
- {:else if dev}
509
- error: {value?.toString()}
510
- <!-- eslint-disable-next-line svelte/no-at-debug-tags -->
511
- {@debug value}
512
- {/if}
513
- </div>
514
- {:else}
515
- {@const label = typeof def.header === 'string' ? def.header : undefined}
516
- <div class="left">
517
- <SingleSelect
518
- name="Filter Type"
519
- valueAsObject
520
- {label}
521
- options={stringFilterTypes}
522
- labelProp="label"
523
- valueProp="value"
524
- value={selectedStringFilterType}
525
- onchange={(newValue: SelectOption<StringFilterMode> | null) => {
526
- const filterType = newValue?.value ?? StringFilterMode.Contains;
527
- tableContext.paginationRepo?.setFilterMode(def.id, filterType);
528
- }}
529
- onkeydown={(e: KeyboardEvent) => {
530
- e.stopPropagation();
531
- }}
532
- />
533
- </div>
534
- <div class="right">
535
- {#if value == null || typeof value == 'string'}
536
- <TextInput
537
- id={inputId}
538
- bind:value
539
- oninput={() => {
540
- tableContext.paginationRepo?.filterBy(def.id, value);
541
- }}
542
- onkeydown={(e: KeyboardEvent) => {
543
- e.stopPropagation();
544
- }}
545
- />
546
- {:else if dev}
547
- error: {value?.toString()}
548
- <!-- eslint-disable-next-line svelte/no-at-debug-tags -->
549
- {@debug value}
550
- {/if}
551
- </div>
552
- {/if}
553
- </div>
554
- {/if}
555
-
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="T extends object, IdType extends Primitive, FilterValueType, FilterOptionsType"
6
+ >
7
+ import { dev } from '$app/environment';
8
+ import Button from '../../Button.svelte';
9
+ import MultiSelect from '../../MultiSelect.svelte';
10
+ import NumberInput from '../../NumberInput.svelte';
11
+ import QuerySelect from '../../QuerySelect.svelte';
12
+ import SingleSelect from '../../SingleSelect.svelte';
13
+ import TextInput from '../../TextInput.svelte';
14
+ import DateModal from '../../Touch/DateModal.svelte';
15
+ import { hasQuery } from '../TableHelpers.svelte.js';
16
+ import { devCatch, isDateTuple, isNumericArray } from '../../../Helpers/Helpers.svelte.js';
17
+ import type { SelectOption } from '../../../Types/Internal/SelectOption.js';
18
+ import { getContext, onMount, untrack } from 'svelte';
19
+ import { CheckboxDef } from '../Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js';
20
+ import { DateInputDef } from '../Types/Columns/Definitions/Accessors/DateInputDef.svelte.js';
21
+ import { NumberInputDef } from '../Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js';
22
+ import { SelectDef } from '../Types/Columns/Definitions/Accessors/SelectDef.svelte.js';
23
+ import { TableContext } from '../Types/Context/TableContext.svelte.js';
24
+ import type { Primitive } from '../Types/Context/TableInitOptions.js';
25
+ import { CustomFilterType } from '../Types/Filtering/CustomFilterType.js';
26
+ import { NumberDateFilterMode } from '../Types/Filtering/NumberDateFilterMode.js';
27
+ import { StringFilterMode } from '../Types/Filtering/StringFilterMode.js';
28
+ import type { FilterInputProps } from './FilterInputProps.js';
29
+ import { numberDateFilterTypes } from './numberDateFilterTypes.js';
30
+ import { stringFilterTypes } from './stringFilterTypes.js';
31
+
32
+ const tableContext = getContext<TableContext<T, IdType>>(TableContext.identifier);
33
+
34
+ const { def, customFilters }: FilterInputProps<T, FilterValueType, FilterOptionsType> = $props();
35
+
36
+ const customFilter = $derived(customFilters?.get(def.id));
37
+
38
+ const isRemoteSelect = $derived(customFilter?.type === CustomFilterType.Select);
39
+
40
+ let value: unknown = $state(null);
41
+ let valueMin: number | null = $state(null);
42
+ let valueMax: number | null = $state(null);
43
+
44
+ let selectedOptions: Array<SelectOption<unknown>> = $state([]);
45
+ let lastQueryOptions: Array<SelectOption<unknown>> = $state([]);
46
+
47
+ const isNumeric = $derived(
48
+ def instanceof NumberInputDef || customFilter?.type === CustomFilterType.Number
49
+ );
50
+
51
+ const hasFilterFn = $derived(!!def.filterFn && typeof def.filterFn === 'function');
52
+
53
+ const isSearchable = $derived(
54
+ def.allowFiltering && (hasFilterFn || customFilters?.has(def.id) == true)
55
+ );
56
+
57
+ const isSelect = $derived(
58
+ def instanceof SelectDef || customFilter?.type === CustomFilterType.Select
59
+ );
60
+
61
+ const options = $derived(isSelect ? (def.getOptions?.() ?? customFilter?.options ?? []) : []);
62
+
63
+ let optionsPromise: Array<SelectOption<unknown>> | Promise<Array<SelectOption<unknown>>> = $state(
64
+ [] as Array<SelectOption<unknown>> | Promise<Array<SelectOption<unknown>>>
65
+ );
66
+
67
+ onMount(() => {
68
+ retryOptionsPromise();
69
+ });
70
+
71
+ function retryOptionsPromise() {
72
+ optionsPromise = def instanceof SelectDef ? def.getOptions() : [];
73
+ }
74
+
75
+ const filteringStateValue = $derived(
76
+ tableContext.paginationRepo?.filtering.find((it) => it.id === def.id)?.value
77
+ );
78
+
79
+ $effect(() => {
80
+ if (isRemoteSelect && !tableContext.paginationRepo?.filtering) {
81
+ return;
82
+ }
83
+ void filteringStateValue;
84
+ if (def.debug) {
85
+ console.debug(
86
+ `${def.id}: `,
87
+ 'FILTER INPUT: filtering state value:',
88
+ $state.snapshot(filteringStateValue)
89
+ );
90
+ }
91
+
92
+ if (hasQuery(customFilter)) {
93
+ if (def.debug) {
94
+ console.debug(`${def.id}: `, 'has query');
95
+ }
96
+
97
+ untrack(async () => {
98
+ try {
99
+ // as unknown as string | number | undefined;
100
+
101
+ if (filteringStateValue != undefined) {
102
+ if (def.debug) {
103
+ console.debug(`${def.id}: query values:`, tableContext.dataRepo.__queryValues);
104
+ }
105
+ const x = await tableContext.dataRepo.__queryValues.get(customFilter.id);
106
+
107
+ if (def.debug) {
108
+ console.debug(`${def.id}: value:`, $state.snapshot(x));
109
+ }
110
+ value = (x ?? null) as SelectOption<unknown> | null;
111
+ } else if (def.debug) {
112
+ console.debug(
113
+ `${def.id}: filtering state value was undefined`,
114
+ $state.snapshot(tableContext.paginationRepo?.filtering)
115
+ );
116
+ }
117
+ } catch (e) {
118
+ console.warn(e);
119
+ value = null;
120
+ }
121
+ }).catch(devCatch);
122
+ } else if (isSelect) {
123
+ if (def.debug) {
124
+ console.debug(`${def.id}: is select (not query)`);
125
+ }
126
+ untrack(async () => {
127
+ try {
128
+ const opts = await options;
129
+ if (def.debug) {
130
+ console.debug(`${def.id}: possible options:`, $state.snapshot(options));
131
+ }
132
+ const x = opts.filter((it) => {
133
+ if (it.value != null && (typeof it.value == 'string' || typeof it.value == 'number')) {
134
+ return (filteringStateValue as Array<unknown> | undefined)?.includes(it.value);
135
+ }
136
+ return false;
137
+ });
138
+ if (def.debug) {
139
+ console.debug(`${def.id}: selected options:`, x);
140
+ }
141
+ selectedOptions = x;
142
+ } catch (e) {
143
+ if (dev || def.debug) {
144
+ console.debug(`${def.id}: `, e);
145
+ }
146
+ }
147
+ }).catch(devCatch);
148
+ } else if (isNumeric) {
149
+ if (
150
+ selectedNumberFilterType?.value === NumberDateFilterMode.Between &&
151
+ tableContext.paginationRepo?.filtering
152
+ ) {
153
+ if (filteringStateValue != undefined) {
154
+ const [min, max] = filteringStateValue as [number, number | undefined];
155
+ value = min;
156
+ valueMin = min;
157
+ valueMax = max ?? null;
158
+ } else {
159
+ value = valueMin = valueMax = null;
160
+ }
161
+ } else if (tableContext.paginationRepo?.filtering) {
162
+ if (filteringStateValue != undefined) {
163
+ const [min] = filteringStateValue as [number, number | undefined];
164
+ value = min;
165
+ valueMin = min;
166
+ valueMax = min;
167
+ } else {
168
+ value = valueMin = valueMax = null;
169
+ }
170
+ }
171
+ } else if (tableContext.paginationRepo?.filtering) {
172
+ if (
173
+ filteringStateValue == null ||
174
+ typeof filteringStateValue == 'string' ||
175
+ typeof filteringStateValue == 'number'
176
+ ) {
177
+ value = filteringStateValue;
178
+ } else if (typeof filteringStateValue !== 'boolean') {
179
+ console.warn('unknown value type:', $state.snapshot(filteringStateValue));
180
+ value = filteringStateValue as string; // HACK attempt to keep production running
181
+ }
182
+ }
183
+ });
184
+
185
+ onMount(() => {
186
+ const filterOption =
187
+ tableContext.paginationRepo?.filtering &&
188
+ tableContext.paginationRepo.filtering.find((it) => it.id === def.id);
189
+
190
+ if (filterOption) {
191
+ if (isNumericArray(filterOption.value)) {
192
+ [valueMin, valueMax] = filterOption.value;
193
+ if (valueMax == undefined) {
194
+ valueMax = valueMin;
195
+ } else if (valueMin == undefined) {
196
+ valueMin = valueMax;
197
+ }
198
+ } else if (!hasQuery(customFilter)) {
199
+ const gotValue = filterOption.value;
200
+ if (gotValue == null || typeof gotValue == 'string' || typeof gotValue == 'number') {
201
+ value = gotValue;
202
+ } else if (typeof filteringStateValue !== 'boolean') {
203
+ console.warn('unknown value type:', $state.snapshot(gotValue));
204
+ value = gotValue as string; // HACK attempt to keep production running
205
+ }
206
+ }
207
+ }
208
+ });
209
+
210
+ const filterMode = $derived(tableContext.paginationRepo?.filterModes.get(def.id));
211
+ const selectedNumberFilterType: SelectOption<NumberDateFilterMode> | null = $derived.by(() => {
212
+ const value = (filterMode as NumberDateFilterMode | undefined) ?? NumberDateFilterMode.In;
213
+ return numberDateFilterTypes.find((it) => it.value === value) ?? null;
214
+ });
215
+ const selectedStringFilterType: SelectOption<StringFilterMode> | null = $derived.by(() => {
216
+ const value = (filterMode as StringFilterMode | undefined) ?? StringFilterMode.Contains;
217
+ return stringFilterTypes.find((it) => it.value === value) ?? null;
218
+ });
219
+
220
+ const inputId: string = $derived(`${tableContext.tableName}-${def.id}-filter-type`);
221
+
222
+ let showFromDateModal = $state(false);
223
+ let showToDateModal = $state(false);
224
+
225
+ function generateOnChangeObject(label: string) {
226
+ return (newValue: SelectOption<unknown> | null) => {
227
+ tableContext.paginationRepo?.filterBy(def.id, newValue?.value ?? null);
228
+ tableContext.dataRepo.__queryValues.set(label, newValue ?? null);
229
+ value = newValue ?? null;
230
+ };
231
+ }
232
+
233
+ function generateOnChangePrimitive(label: string) {
234
+ // Phase 7.6: AsPrimitive QuerySelect now hands us the primitive
235
+ // directly. The previous code typed this as `SelectOption<unknown>`
236
+ // and read `.value` off it; with the discriminated typing the
237
+ // primitive flows straight through.
238
+ return (newValue: unknown) => {
239
+ tableContext.paginationRepo?.filterBy(def.id, newValue ?? null);
240
+ tableContext.dataRepo.__queryValues.set(label, newValue ?? null);
241
+ value = newValue ?? null;
242
+ };
243
+ }
244
+ </script>
245
+
246
+ {#if isSearchable}
247
+ <!-- TODO remove this check once datePicker is supported -->
248
+ {#if def instanceof DateInputDef || def instanceof CheckboxDef}
249
+ <label for={inputId}>{def.header}</label>
250
+ {/if}
251
+ <div class="row">
252
+ {#if def instanceof DateInputDef}
253
+ {@const dateValues =
254
+ tableContext.paginationRepo?.filtering.find((it) => it.id === def.id)?.value ?? []}
255
+ {#if isDateTuple(dateValues)}
256
+ {@const [fromDate, toDate] = dateValues}
257
+ <div class="spaced-around">
258
+ <Button
259
+ onclick={() => {
260
+ showFromDateModal = true;
261
+ }}>From {fromDate?.toLocaleDateString() ?? 'Any Date'}</Button
262
+ >
263
+
264
+ <Button
265
+ onclick={() => {
266
+ showToDateModal = true;
267
+ }}>To {toDate?.toLocaleDateString() ?? 'Any Date'}</Button
268
+ >
269
+ </div>
270
+
271
+ {#if showFromDateModal}
272
+ <DateModal
273
+ header="Edit Date From"
274
+ value={fromDate}
275
+ cancelEditing={() => {
276
+ showFromDateModal = false;
277
+ }}
278
+ confirm={(e) => {
279
+ tableContext.paginationRepo?.filterBy(def.id, [e, toDate]);
280
+ showFromDateModal = false;
281
+ }}
282
+ />
283
+ {/if}
284
+
285
+ {#if showToDateModal}
286
+ <DateModal
287
+ inclusive
288
+ header="Edit Date To"
289
+ value={toDate}
290
+ cancelEditing={() => {
291
+ showToDateModal = false;
292
+ }}
293
+ confirm={(e) => {
294
+ tableContext.paginationRepo?.filterBy(def.id, [fromDate, e]);
295
+ showToDateModal = false;
296
+ }}
297
+ />
298
+ {/if}
299
+ {/if}
300
+ {:else if def instanceof SelectDef && !isRemoteSelect}
301
+ <div class="maxwidth">
302
+ {#await optionsPromise then options}
303
+ {@const selectedPrimitives = selectedOptions
304
+ .map((it) => it.value)
305
+ .filter((v): v is string | number => typeof v === 'string' || typeof v === 'number')}
306
+ <MultiSelect
307
+ label={customFilter?.id ??
308
+ customFilter?.label ??
309
+ customFilter?.objectName ??
310
+ customFilter?.queryKey ??
311
+ def.id}
312
+ labelProp="label"
313
+ valueProp="value"
314
+ name={customFilter?.objectName ?? 'Item'}
315
+ {options}
316
+ valueAsObject={false}
317
+ onchange={(e: Array<unknown>) => {
318
+ // Phase 7.6: `valueAsObject={false}` returns
319
+ // primitives directly.
320
+ tableContext.paginationRepo?.filterBy(def.id, e);
321
+ }}
322
+ selectedValues={selectedPrimitives}
323
+ collapseSelection
324
+ />
325
+ {:catch e}
326
+ <span>Error retrieving options: {e.message}</span>
327
+ <Button
328
+ onclick={() => {
329
+ retryOptionsPromise();
330
+ }}>Retry</Button
331
+ >
332
+ {/await}
333
+ </div>
334
+ {:else if customFilter && isRemoteSelect}
335
+ <div class="contents">
336
+ {#await options then options}
337
+ {#if hasQuery(customFilter)}
338
+ {#if customFilter.valueAsObject !== true}
339
+ {@const label = customFilter.id}
340
+
341
+ <!-- TODO: multiselect -->
342
+
343
+ <QuerySelect
344
+ valueAsObject={false}
345
+ {label}
346
+ clearable
347
+ name={customFilter.objectName ?? 'Item'}
348
+ valueProp={'value' as never}
349
+ labelProp={'label' as never}
350
+ value={value as never}
351
+ query={customFilter.query}
352
+ bind:options={lastQueryOptions as never}
353
+ onchange={generateOnChangePrimitive(label)}
354
+ />
355
+ {:else}
356
+ {@const label = customFilter.id}
357
+
358
+ <!-- TODO: multiselect -->
359
+
360
+ <QuerySelect
361
+ valueAsObject={true}
362
+ {label}
363
+ clearable
364
+ name={customFilter.objectName ?? 'Item'}
365
+ valueProp="value"
366
+ labelProp="label"
367
+ value={value as null}
368
+ query={customFilter.query}
369
+ bind:options={lastQueryOptions}
370
+ onchange={generateOnChangeObject(label)}
371
+ />
372
+ {/if}
373
+ {:else}
374
+ <MultiSelect
375
+ label={customFilter.id}
376
+ labelProp="label"
377
+ valueProp="value"
378
+ name={customFilter.objectName ?? 'Item'}
379
+ {options}
380
+ valueAsObject={false}
381
+ onchange={(e: Array<unknown>) => {
382
+ // Phase 7.6: `valueAsObject={false}` returns
383
+ // primitives directly.
384
+ tableContext.paginationRepo?.filterBy(def.id, e);
385
+ }}
386
+ selectedValues={selectedOptions}
387
+ collapseSelection
388
+ />
389
+ {/if}
390
+ {/await}
391
+ </div>
392
+ {:else if def instanceof CheckboxDef}
393
+ <div class="inner-row">
394
+ <label>
395
+ <input
396
+ value={false}
397
+ type="radio"
398
+ bind:group={value}
399
+ onchange={() => {
400
+ tableContext.paginationRepo?.filterBy(def.id, value);
401
+ }}
402
+ />
403
+ No
404
+ </label>
405
+ <label>
406
+ <input
407
+ value={undefined}
408
+ type="radio"
409
+ bind:group={value}
410
+ onchange={() => {
411
+ tableContext.paginationRepo?.filterBy(def.id, value);
412
+ }}
413
+ />
414
+ Any
415
+ </label>
416
+ <label>
417
+ <input
418
+ value={true}
419
+ type="radio"
420
+ bind:group={value}
421
+ onchange={() => {
422
+ tableContext.paginationRepo?.filterBy(def.id, value);
423
+ }}
424
+ />
425
+ Yes
426
+ </label>
427
+ </div>
428
+ {:else if isNumeric}
429
+ {@const label = typeof def.header === 'string' ? def.header : undefined}
430
+ <div class="left">
431
+ <SingleSelect
432
+ {label}
433
+ name="Filter Type"
434
+ options={numberDateFilterTypes}
435
+ labelProp="label"
436
+ valueProp="value"
437
+ valueAsObject
438
+ value={selectedNumberFilterType}
439
+ onchange={(newValue: SelectOption<NumberDateFilterMode> | null) => {
440
+ const oldFilterType = selectedNumberFilterType;
441
+
442
+ const newFilterType = newValue?.value ?? NumberDateFilterMode.In;
443
+ tableContext.paginationRepo?.setFilterMode(def.id, newFilterType);
444
+
445
+ if (selectedNumberFilterType?.value !== oldFilterType?.value) {
446
+ if (oldFilterType?.value === NumberDateFilterMode.Between) {
447
+ valueMax = null;
448
+ tableContext.paginationRepo?.filterBy(def.id, [valueMin, valueMin]);
449
+ }
450
+
451
+ if (newFilterType === NumberDateFilterMode.In) {
452
+ tableContext.paginationRepo?.filterBy(def.id, [value]);
453
+ }
454
+
455
+ // TODO what about the other modes?
456
+ }
457
+ }}
458
+ onkeydown={(e: KeyboardEvent) => {
459
+ e.stopPropagation();
460
+ }}
461
+ />
462
+ </div>
463
+ <div class="right">
464
+ {#if selectedNumberFilterType?.value === NumberDateFilterMode.Between}
465
+ <NumberInput
466
+ id={inputId}
467
+ bind:value={valueMin}
468
+ oninput={() => {
469
+ tableContext.paginationRepo?.filterBy(def.id, [valueMin, valueMax]);
470
+ }}
471
+ onkeydown={(e: KeyboardEvent) => {
472
+ e.stopPropagation();
473
+ }}
474
+ />
475
+ <span>and</span>
476
+ <NumberInput
477
+ id={inputId}
478
+ bind:value={valueMax}
479
+ oninput={() => {
480
+ tableContext.paginationRepo?.filterBy(def.id, [valueMin, valueMax]);
481
+ }}
482
+ onkeydown={(e: KeyboardEvent) => {
483
+ e.stopPropagation();
484
+ }}
485
+ />
486
+ {:else if value == null || typeof value == 'string'}
487
+ <TextInput
488
+ id={inputId}
489
+ bind:value
490
+ oninput={() => {
491
+ tableContext.paginationRepo?.filterBy(def.id, [value]);
492
+ }}
493
+ onkeydown={(e: KeyboardEvent) => {
494
+ e.stopPropagation();
495
+ }}
496
+ />
497
+ {:else if dev}
498
+ error: {value?.toString()}
499
+ <!-- eslint-disable-next-line svelte/no-at-debug-tags -->
500
+ {@debug value}
501
+ {/if}
502
+ </div>
503
+ {:else}
504
+ {@const label = typeof def.header === 'string' ? def.header : undefined}
505
+ <div class="left">
506
+ <SingleSelect
507
+ name="Filter Type"
508
+ valueAsObject
509
+ {label}
510
+ options={stringFilterTypes}
511
+ labelProp="label"
512
+ valueProp="value"
513
+ value={selectedStringFilterType}
514
+ onchange={(newValue: SelectOption<StringFilterMode> | null) => {
515
+ const filterType = newValue?.value ?? StringFilterMode.Contains;
516
+ tableContext.paginationRepo?.setFilterMode(def.id, filterType);
517
+ }}
518
+ onkeydown={(e: KeyboardEvent) => {
519
+ e.stopPropagation();
520
+ }}
521
+ />
522
+ </div>
523
+ <div class="right">
524
+ {#if value == null || typeof value == 'string'}
525
+ <TextInput
526
+ id={inputId}
527
+ bind:value
528
+ oninput={() => {
529
+ tableContext.paginationRepo?.filterBy(def.id, value);
530
+ }}
531
+ onkeydown={(e: KeyboardEvent) => {
532
+ e.stopPropagation();
533
+ }}
534
+ />
535
+ {:else if dev}
536
+ error: {value?.toString()}
537
+ <!-- eslint-disable-next-line svelte/no-at-debug-tags -->
538
+ {@debug value}
539
+ {/if}
540
+ </div>
541
+ {/if}
542
+ </div>
543
+ {/if}
544
+
556
545
  <style>.contents {
557
546
  display: contents;
558
547
  --input-width: 100%;
@@ -623,4 +612,4 @@
623
612
  .inner-row label input {
624
613
  cursor: pointer;
625
614
  width: 2rem;
626
- }</style>
615
+ }</style>