@lavalogic/scoria 0.37.44 → 0.37.46

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 (239) hide show
  1. package/README.md +58 -58
  2. package/dist/Components/AccordionGroup.svelte +46 -46
  3. package/dist/Components/AccordionGroupButton.svelte +76 -76
  4. package/dist/Components/Action.svelte +136 -136
  5. package/dist/Components/ActionProps.d.ts +2 -6
  6. package/dist/Components/AlertModal.svelte +195 -183
  7. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +702 -702
  8. package/dist/Components/Base/BaseModal.svelte +125 -125
  9. package/dist/Components/Base/ContextWrapper.svelte +72 -72
  10. package/dist/Components/Base/Pagination.svelte +198 -198
  11. package/dist/Components/Base/Snippets.svelte +36 -36
  12. package/dist/Components/BigRadioSet.svelte +38 -38
  13. package/dist/Components/Bubble.svelte +101 -101
  14. package/dist/Components/Button.svelte +209 -209
  15. package/dist/Components/ButtonProps.d.ts +2 -6
  16. package/dist/Components/Checkbox.svelte +86 -86
  17. package/dist/Components/CollapsibleCard.svelte +78 -78
  18. package/dist/Components/Contexts/ContextMenu.svelte +164 -164
  19. package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
  20. package/dist/Components/Contexts/ContextMenuOption.svelte +60 -60
  21. package/dist/Components/Contexts/Toast.svelte +86 -83
  22. package/dist/Components/Contexts/Toast.svelte.d.ts +8 -5
  23. package/dist/Components/Contexts/ToastContainer.svelte +65 -65
  24. package/dist/Components/Contexts/Tooltip.svelte +37 -37
  25. package/dist/Components/DataMatrixIcon.svelte +112 -112
  26. package/dist/Components/DataMatrixIconProps.d.ts +3 -13
  27. package/dist/Components/DateInput.svelte +148 -148
  28. package/dist/Components/DatePicker.svelte +300 -300
  29. package/dist/Components/DesktopModal.svelte +90 -90
  30. package/dist/Components/Dial.svelte +204 -204
  31. package/dist/Components/DialProps.d.ts +1 -18
  32. package/dist/Components/DimensionInput.svelte +170 -170
  33. package/dist/Components/DragMenu/DragMenuHolder.svelte +119 -119
  34. package/dist/Components/DragMenu/DraggableCard.svelte +77 -77
  35. package/dist/Components/FileCard.svelte +24 -24
  36. package/dist/Components/FileUpload.svelte +236 -236
  37. package/dist/Components/GridInput.svelte +196 -200
  38. package/dist/Components/GridInputSet.svelte +29 -29
  39. package/dist/Components/HorizontalTabGroup.svelte +82 -82
  40. package/dist/Components/HorizontalTabGroupButton.svelte +44 -44
  41. package/dist/Components/Icon.svelte +128 -128
  42. package/dist/Components/IconProps.d.ts +2 -7
  43. package/dist/Components/Icons.js +357 -357
  44. package/dist/Components/LoadingAnimation.svelte +29 -29
  45. package/dist/Components/LoadingModal.svelte +45 -45
  46. package/dist/Components/LoadingOverlay.svelte +25 -25
  47. package/dist/Components/LoadingOverlayProps.d.ts +3 -7
  48. package/dist/Components/Modal.svelte +258 -258
  49. package/dist/Components/ModalProps.d.ts +0 -3
  50. package/dist/Components/MultiSelect.svelte +220 -220
  51. package/dist/Components/MultiSelectCommonProps.d.ts +6 -17
  52. package/dist/Components/Nav/Nav.svelte +110 -99
  53. package/dist/Components/Nav/NavProps.d.ts +4 -11
  54. package/dist/Components/Nav/NavServiceMenuList.svelte +43 -43
  55. package/dist/Components/Nav/NavTab.svelte +62 -62
  56. package/dist/Components/Nav/ServiceMenuItem.svelte +100 -100
  57. package/dist/Components/Nav/ServicesNav.svelte +80 -80
  58. package/dist/Components/NumberInput.svelte +157 -157
  59. package/dist/Components/PageHeading.svelte +25 -25
  60. package/dist/Components/PasswordInput.svelte +88 -88
  61. package/dist/Components/Portal.svelte +36 -36
  62. package/dist/Components/ProgressBubble.svelte +107 -108
  63. package/dist/Components/ProgressBubbleProps.d.ts +3 -3
  64. package/dist/Components/QuerySelect.svelte +366 -366
  65. package/dist/Components/QuerySelectProps.d.ts +4 -14
  66. package/dist/Components/SingleSelect.svelte +250 -250
  67. package/dist/Components/SingleSelectCommonProps.d.ts +3 -19
  68. package/dist/Components/StepButton.svelte +70 -70
  69. package/dist/Components/StepForm.svelte +140 -140
  70. package/dist/Components/Switch.svelte +69 -69
  71. package/dist/Components/Table/ARCHITECTURE.md +298 -0
  72. package/dist/Components/Table/Body/QuickSearchCell.svelte +683 -694
  73. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +51 -51
  74. package/dist/Components/Table/Body/Rows/ColumnList.svelte +59 -59
  75. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +456 -478
  76. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +79 -79
  77. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +185 -188
  78. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +124 -124
  79. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +120 -120
  80. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +230 -230
  81. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +105 -105
  82. package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +12 -9
  83. package/dist/Components/Table/Body/Rows/Columns/SelectTableCell.d.ts +5 -5
  84. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +87 -87
  85. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +126 -126
  86. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +159 -159
  87. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +246 -246
  88. package/dist/Components/Table/Body/Rows/Columns/TableDatePickerProps.d.ts +4 -4
  89. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +216 -216
  90. package/dist/Components/Table/Body/Rows/Columns/TableQueryCell.d.ts +6 -5
  91. package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +7 -6
  92. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +252 -257
  93. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +179 -179
  94. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +221 -229
  95. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte.d.ts +11 -11
  96. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +197 -197
  97. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +190 -190
  98. package/dist/Components/Table/Body/Rows/TableRow.svelte +290 -290
  99. package/dist/Components/Table/Body/TableBody.svelte +155 -155
  100. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +2 -3
  101. package/dist/Components/Table/ColumnFactory.svelte.d.ts +9 -11
  102. package/dist/Components/Table/ColumnFactory.svelte.js +110 -143
  103. package/dist/Components/Table/ColumnKindRegistry.d.ts +112 -0
  104. package/dist/Components/Table/ColumnKindRegistry.js +63 -0
  105. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +41 -41
  106. package/dist/Components/Table/Headers/SelectAllHeader.svelte +30 -30
  107. package/dist/Components/Table/Headers/TableHead.svelte +415 -413
  108. package/dist/Components/Table/Misc/ColumnPanel.svelte +94 -94
  109. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +112 -112
  110. package/dist/Components/Table/Misc/FilterInput.svelte +620 -644
  111. package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -12
  112. package/dist/Components/Table/Misc/FilterInputProps.d.ts +2 -2
  113. package/dist/Components/Table/Misc/FilterPanel.svelte +257 -257
  114. package/dist/Components/Table/Misc/FilterPanelModal.svelte +30 -30
  115. package/dist/Components/Table/Misc/SidePanel.svelte +35 -35
  116. package/dist/Components/Table/Misc/TableFooter.svelte +311 -311
  117. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +125 -125
  118. package/dist/Components/Table/Misc/TableSidebar.svelte +157 -157
  119. package/dist/Components/Table/Misc/ToolboxPanel.svelte +100 -100
  120. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +107 -107
  121. package/dist/Components/Table/NestedTable.svelte +130 -133
  122. package/dist/Components/Table/SubApis.svelte.d.ts +1 -5
  123. package/dist/Components/Table/SubApis.svelte.js +33 -32
  124. package/dist/Components/Table/Table.svelte +692 -745
  125. package/dist/Components/Table/TableHelpers.svelte.d.ts +6 -19
  126. package/dist/Components/Table/TableHelpers.svelte.js +6 -14
  127. package/dist/Components/Table/Types/Columns/Column.d.ts +2 -2
  128. package/dist/Components/Table/Types/Columns/DateColumn.d.ts +3 -3
  129. package/dist/Components/Table/Types/Columns/DateTableCell.d.ts +7 -7
  130. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +7 -8
  131. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.js +4 -5
  132. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.d.ts +11 -14
  133. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js +3 -4
  134. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +7 -11
  135. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.js +3 -3
  136. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +13 -18
  137. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js +4 -5
  138. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.d.ts +5 -5
  139. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.js +2 -2
  140. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +15 -12
  141. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.js +4 -5
  142. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.d.ts +8 -12
  143. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.js +3 -3
  144. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +6 -6
  145. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +3 -3
  146. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +49 -16
  147. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.js +27 -5
  148. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.d.ts +7 -7
  149. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js +4 -4
  150. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.d.ts +5 -5
  151. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.js +2 -2
  152. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.d.ts +5 -5
  153. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.js +2 -2
  154. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.d.ts +5 -5
  155. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.js +2 -2
  156. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.d.ts +5 -5
  157. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.js +2 -2
  158. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +11 -19
  159. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.js +4 -8
  160. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.d.ts +6 -7
  161. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.js +3 -4
  162. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +9 -9
  163. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +4 -4
  164. package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +5 -5
  165. package/dist/Components/Table/Types/Columns/ProgressBarTableCell.d.ts +6 -6
  166. package/dist/Components/Table/Types/Columns/TableCell.d.ts +7 -6
  167. package/dist/Components/Table/Types/Context/ClipboardState.svelte.d.ts +98 -0
  168. package/dist/Components/Table/Types/Context/ClipboardState.svelte.js +290 -0
  169. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.d.ts +17 -45
  170. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.js +17 -45
  171. package/dist/Components/Table/Types/Context/FilteringState.svelte.d.ts +9 -20
  172. package/dist/Components/Table/Types/Context/FilteringState.svelte.js +9 -20
  173. package/dist/Components/Table/Types/Context/FocusState.svelte.d.ts +23 -42
  174. package/dist/Components/Table/Types/Context/FocusState.svelte.js +32 -59
  175. package/dist/Components/Table/Types/Context/ITable.d.ts +5 -8
  176. package/dist/Components/Table/Types/Context/PreferencesState.svelte.d.ts +29 -56
  177. package/dist/Components/Table/Types/Context/PreferencesState.svelte.js +28 -55
  178. package/dist/Components/Table/Types/Context/QueryValuesState.svelte.d.ts +50 -0
  179. package/dist/Components/Table/Types/Context/QueryValuesState.svelte.js +62 -0
  180. package/dist/Components/Table/Types/Context/SelectionState.svelte.d.ts +17 -28
  181. package/dist/Components/Table/Types/Context/SelectionState.svelte.js +17 -28
  182. package/dist/Components/Table/Types/Context/SortingState.svelte.d.ts +15 -29
  183. package/dist/Components/Table/Types/Context/SortingState.svelte.js +17 -31
  184. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +212 -325
  185. package/dist/Components/Table/Types/Context/TableContext.svelte.js +292 -706
  186. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.d.ts +62 -79
  187. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.js +54 -73
  188. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.d.ts +16 -27
  189. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.js +16 -27
  190. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +12 -15
  191. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +15 -30
  192. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +16 -28
  193. package/dist/Components/Table/Types/Header.d.ts +4 -4
  194. package/dist/Components/Table/Types/HeaderGroup.d.ts +5 -5
  195. package/dist/Components/Table/Types/Public/index.d.ts +2 -4
  196. package/dist/Components/Table/Types/Public/index.js +2 -4
  197. package/dist/Components/Table/clipboardEscape.d.ts +32 -0
  198. package/dist/Components/Table/clipboardEscape.js +45 -0
  199. package/dist/Components/Table/createTable.svelte.d.ts +8 -18
  200. package/dist/Components/Table/createTable.svelte.js +19 -47
  201. package/dist/Components/Test/TestContextConsumer.svelte +13 -13
  202. package/dist/Components/TextArea.svelte +130 -130
  203. package/dist/Components/TextInput.svelte +176 -176
  204. package/dist/Components/ThreeStateRadio.svelte +131 -131
  205. package/dist/Components/Touch/BoolCard.svelte +45 -45
  206. package/dist/Components/Touch/DateModal.svelte +209 -209
  207. package/dist/Components/Touch/EditCard.svelte +59 -59
  208. package/dist/Components/Touch/InfoCard.svelte +31 -31
  209. package/dist/Components/Touch/InfoTextCard.svelte +28 -28
  210. package/dist/Components/Touch/ModalExplanation.svelte +17 -17
  211. package/dist/Components/Touch/NumberKeyboard.svelte +225 -225
  212. package/dist/Components/Touch/NumberModal.svelte +79 -79
  213. package/dist/Components/Touch/PlusMinusCard.svelte +46 -46
  214. package/dist/Components/Touch/SelectModal.svelte +123 -123
  215. package/dist/Components/Touch/SummaryCard.svelte +93 -93
  216. package/dist/Components/Touch/TextAreaModal.svelte +95 -95
  217. package/dist/Components/Touch/TextModal.svelte +106 -106
  218. package/dist/Components/Touch/TouchCard.svelte +33 -33
  219. package/dist/Components/Touch/TouchModal.svelte +274 -274
  220. package/dist/Components/Touch/UtilityButton.svelte +109 -109
  221. package/dist/Components/VerticalTabGroup.svelte +79 -79
  222. package/dist/Components/VerticalTabGroupButton.svelte +58 -58
  223. package/dist/Contexts/ToastContext.svelte.js +3 -4
  224. package/dist/Helpers/Datamatrix.d.ts +19 -19
  225. package/dist/Helpers/Datamatrix.js +291 -291
  226. package/dist/Helpers/Helpers.svelte.d.ts +47 -4
  227. package/dist/Helpers/Helpers.svelte.js +97 -4
  228. package/dist/Helpers/dropdownPortal.d.ts +26 -41
  229. package/dist/Helpers/dropdownPortal.js +62 -116
  230. package/dist/Types/Examples/ExampleModal.svelte +35 -35
  231. package/dist/index.d.ts +1 -2
  232. package/dist/index.js +1 -1
  233. package/dist/scss/_basics.scss +12 -12
  234. package/dist/scss/_colours.scss +134 -134
  235. package/dist/scss/_mixins.scss +3358 -3360
  236. package/dist/scss/_motion.scss +57 -57
  237. package/dist/scss/_sizing.scss +85 -85
  238. package/dist/scss/_transitions.scss +8 -8
  239. package/package.json +8 -6
@@ -1,26 +1,26 @@
1
1
  import type { Primitive } from '../Types/Context/TableInitOptions.js';
2
2
  import type { FilterInputProps } from './FilterInputProps.js';
3
- declare function $$render<T extends object, IdType extends Primitive, FilterValueType, FilterOptionsType>(): {
4
- props: FilterInputProps<T, FilterValueType, FilterOptionsType>;
3
+ declare function $$render<T extends object, IdType extends Primitive, FilterValueType>(): {
4
+ props: FilterInputProps<T, FilterValueType>;
5
5
  exports: {};
6
6
  bindings: "";
7
7
  slots: {};
8
8
  events: {};
9
9
  };
10
- declare class __sveltets_Render<T extends object, IdType extends Primitive, FilterValueType, FilterOptionsType> {
11
- props(): ReturnType<typeof $$render<T, IdType, FilterValueType, FilterOptionsType>>['props'];
12
- events(): ReturnType<typeof $$render<T, IdType, FilterValueType, FilterOptionsType>>['events'];
13
- slots(): ReturnType<typeof $$render<T, IdType, FilterValueType, FilterOptionsType>>['slots'];
10
+ declare class __sveltets_Render<T extends object, IdType extends Primitive, FilterValueType> {
11
+ props(): ReturnType<typeof $$render<T, IdType, FilterValueType>>['props'];
12
+ events(): ReturnType<typeof $$render<T, IdType, FilterValueType>>['events'];
13
+ slots(): ReturnType<typeof $$render<T, IdType, FilterValueType>>['slots'];
14
14
  bindings(): "";
15
15
  exports(): {};
16
16
  }
17
17
  interface $$IsomorphicComponent {
18
- new <T extends object, IdType extends Primitive, FilterValueType, FilterOptionsType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, IdType, FilterValueType, FilterOptionsType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, IdType, FilterValueType, FilterOptionsType>['props']>, ReturnType<__sveltets_Render<T, IdType, FilterValueType, FilterOptionsType>['events']>, ReturnType<__sveltets_Render<T, IdType, FilterValueType, FilterOptionsType>['slots']>> & {
19
- $$bindings?: ReturnType<__sveltets_Render<T, IdType, FilterValueType, FilterOptionsType>['bindings']>;
20
- } & ReturnType<__sveltets_Render<T, IdType, FilterValueType, FilterOptionsType>['exports']>;
21
- <T extends object, IdType extends Primitive, FilterValueType, FilterOptionsType>(internal: unknown, props: ReturnType<__sveltets_Render<T, IdType, FilterValueType, FilterOptionsType>['props']> & {}): ReturnType<__sveltets_Render<T, IdType, FilterValueType, FilterOptionsType>['exports']>;
22
- z_$$bindings?: ReturnType<__sveltets_Render<any, any, any, any>['bindings']>;
18
+ new <T extends object, IdType extends Primitive, FilterValueType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, IdType, FilterValueType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, IdType, FilterValueType>['props']>, ReturnType<__sveltets_Render<T, IdType, FilterValueType>['events']>, ReturnType<__sveltets_Render<T, IdType, FilterValueType>['slots']>> & {
19
+ $$bindings?: ReturnType<__sveltets_Render<T, IdType, FilterValueType>['bindings']>;
20
+ } & ReturnType<__sveltets_Render<T, IdType, FilterValueType>['exports']>;
21
+ <T extends object, IdType extends Primitive, FilterValueType>(internal: unknown, props: ReturnType<__sveltets_Render<T, IdType, FilterValueType>['props']> & {}): ReturnType<__sveltets_Render<T, IdType, FilterValueType>['exports']>;
22
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
23
23
  }
24
24
  declare const FilterInput: $$IsomorphicComponent;
25
- type FilterInput<T extends object, IdType extends Primitive, FilterValueType, FilterOptionsType> = InstanceType<typeof FilterInput<T, IdType, FilterValueType, FilterOptionsType>>;
25
+ type FilterInput<T extends object, IdType extends Primitive, FilterValueType> = InstanceType<typeof FilterInput<T, IdType, FilterValueType>>;
26
26
  export default FilterInput;
@@ -1,6 +1,6 @@
1
1
  import type { ColumnDef } from '../Types/Columns/Definitions/ColumnDef.svelte.js';
2
2
  import type { CustomRemoteFilters } from '../Types/Filtering/CustomRemoteFilters.js';
3
- export interface FilterInputProps<T extends object, FilterValueType, out FilterOptionsType> {
4
- def: ColumnDef<T, FilterValueType, FilterOptionsType>;
3
+ export interface FilterInputProps<T extends object, FilterValueType> {
4
+ def: ColumnDef<T, FilterValueType>;
5
5
  customFilters?: CustomRemoteFilters<FilterValueType> | undefined;
6
6
  }
@@ -1,259 +1,259 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="T extends object, IdType extends Primitive"
6
- >
7
- import Action from '../../Action.svelte';
8
- import Button from '../../Button.svelte';
9
- import TextInput from '../../TextInput.svelte';
10
- import { Colour, ColourSet } from '../../../scss/colours.js';
11
- import { Size } from '../../../Types/Internal/Size.js';
12
- import { Variant } from '../../../Types/Internal/Variant.js';
13
- import { SvelteSet } from 'svelte/reactivity';
14
- import { getContext } from 'svelte';
15
- import type { Primitive } from '../Types/Context/TableInitOptions.js';
16
- import type { ColumnDef } from '../Types/Columns/Definitions/ColumnDef.svelte.js';
17
- import { TableContext } from '../Types/Context/TableContext.svelte.js';
18
- import FilterInput from './FilterInput.svelte';
19
-
20
- const tableContext = getContext<TableContext<T, IdType>>(TableContext.identifier);
21
-
22
- /** Fallback group label used for any filterable column whose
23
- * `filterGroup` is undefined. Picked up by the same grouping +
24
- * collapse machinery as user-declared groups. */
25
- const FALLBACK_GROUP = 'Other';
26
-
27
- const defs = $derived(tableContext.columnDefs as Array<ColumnDef<T, unknown>>);
28
- const filterableDefs = $derived(defs.filter((d) => d.allowFiltering));
29
-
30
- /** User-typed substring filter for the column-header text. Empty
31
- * string is the "no filter" state. */
32
- let quickFindValue: string = $state('');
33
-
34
- /** Whether the Save Filter overflow menu is open. The chevron
35
- * toggles it; clicking anywhere else (via the window-level
36
- * listener below) closes it. */
37
- let saveMenuOpen: boolean = $state(false);
38
-
39
- /** Names of currently-collapsed groups. A name absent from this
40
- * set is rendered expanded. Reactive via `SvelteSet` so the panel
41
- * re-renders on toggle without manually re-assigning. */
42
- const collapsedGroups = new SvelteSet<string>();
43
-
44
- /** Filters the column-def list against `quickFindValue`. The match
45
- * is case-insensitive against the header text (for string
46
- * headers) and the column id as a fallback for Snippet headers. */
47
- const matchingDefs: Array<ColumnDef<T, unknown>> = $derived.by(() => {
48
- const q = quickFindValue.trim().toLowerCase();
49
- if (q.length === 0) {
50
- return filterableDefs;
51
- }
52
- return filterableDefs.filter((d) => {
53
- if (typeof d.header === 'string' && d.header.toLowerCase().includes(q)) {
54
- return true;
55
- }
56
- return d.id.toLowerCase().includes(q);
57
- });
58
- });
59
-
60
- /** Ordered list of group names. The first column-def each group
61
- * is seen on determines its position so groups appear in the
62
- * source-declaration order. The fallback "Other" group is
63
- * appended last so explicitly-named groups always lead. */
64
- const orderedGroupNames: Array<string> = $derived.by(() => {
65
- const seen = new Set<string>();
66
- const out: Array<string> = [];
67
- let sawFallback = false;
68
- for (const def of matchingDefs) {
69
- const name = def.filterGroup ?? FALLBACK_GROUP;
70
- if (name === FALLBACK_GROUP) {
71
- sawFallback = true;
72
- continue;
73
- }
74
- if (!seen.has(name)) {
75
- seen.add(name);
76
- out.push(name);
77
- }
78
- }
79
- if (sawFallback) {
80
- out.push(FALLBACK_GROUP);
81
- }
82
- return out;
83
- });
84
-
85
- /** Group name -> column-defs in that group, preserving declaration
86
- * order within the group. */
87
- const groupedDefs: Map<string, Array<ColumnDef<T, unknown>>> = $derived.by(() => {
88
- const map = new Map<string, Array<ColumnDef<T, unknown>>>();
89
- for (const def of matchingDefs) {
90
- const name = def.filterGroup ?? FALLBACK_GROUP;
91
- let bucket = map.get(name);
92
- if (!bucket) {
93
- bucket = [];
94
- map.set(name, bucket);
95
- }
96
- bucket.push(def);
97
- }
98
- return map;
99
- });
100
-
101
- function toggleGroup(name: string): void {
102
- if (collapsedGroups.has(name)) {
103
- collapsedGroups.delete(name);
104
- } else {
105
- collapsedGroups.add(name);
106
- }
107
- }
108
-
109
- function resetFilters(): void {
110
- tableContext.paginationRepo?.resetFilters();
111
- }
112
-
113
- /**
114
- * Placeholder for the future Save-Filter / preset workflow. For
115
- * now this just closes the overflow menu; consumers wire the real
116
- * persistence layer in a follow-up workorder. The chevron menu is
117
- * still useful today as a home for the Reset action and as the
118
- * insertion point for "Load Filter" / "Manage Filters" entries
119
- * once those land.
120
- */
121
- function saveFilter(): void {
122
- saveMenuOpen = false;
123
- if (typeof window !== 'undefined') {
124
- window.dispatchEvent(
125
- new CustomEvent('scoria:save-filter', {
126
- detail: { tableName: tableContext.tableName },
127
- })
128
- );
129
- }
130
- }
131
-
132
- function handleWindowClick(e: MouseEvent): void {
133
- if (!saveMenuOpen) {
134
- return;
135
- }
136
- const target = e.target as HTMLElement | null;
137
- if (target?.closest('.save-filter-cluster') == null) {
138
- saveMenuOpen = false;
139
- }
140
- }
141
-
142
- /**
143
- * No-op keydown handler used to override `TextInput`'s default
144
- * `passthrough` keydown (defined in `Helpers.svelte.ts`), which
145
- * blurs the focused input on every alphanumeric keypress so that
146
- * barcode-scanner buffers can flow into `UntypedInputContext`
147
- * instead. For a plain quick-find search field we want every key
148
- * to land in the input rather than the input blurring after the
149
- * first character. Returns immediately and lets the keystroke
150
- * continue to bubble so the side-panel's window-level Escape
151
- * handler still closes the panel.
152
- */
153
- function noopKeydown(_e: KeyboardEvent): void {
154
- // intentionally empty
155
- }
156
- </script>
157
-
158
- <svelte:window onclick={handleWindowClick} />
159
-
160
- <section class="side-panel-section">
161
- <header class="side-panel-header">
162
- <h2>Advanced Filter</h2>
163
- </header>
164
-
165
- <div class="toolbar">
166
- <div class="quick-find">
167
- <TextInput
168
- labelTop="Quick Find a Filter"
169
- placeholder="Filter…"
170
- bind:value={quickFindValue}
171
- rightIcon={{ name: 'search', size: Size.Medium }}
172
- onkeydown={noopKeydown}
173
- />
174
- </div>
175
-
176
- <div class="save-filter-cluster">
177
- <Button
178
- variant={Variant.Secondary}
179
- nowrap
180
- disabled
181
- size={Size.MediumSmall}
182
- onclick={saveFilter}>Save Filter</Button
183
- >
184
- <Action
185
- label="More save options"
186
- colourSet={ColourSet.Auxiliary}
187
- icon={{ name: 'chevron-down', size: Size.Medium }}
188
- onclick={() => {
189
- saveMenuOpen = !saveMenuOpen;
190
- }}
191
- />
192
- {#if saveMenuOpen}
193
- <div class="save-menu">
194
- <button
195
- type="button"
196
- class="save-menu-item"
197
- onclick={() => {
198
- saveMenuOpen = false;
199
- resetFilters();
200
- }}>Reset all filters</button
201
- >
202
- </div>
203
- {/if}
204
- </div>
205
- </div>
206
-
207
- <div class="side-panel-body">
208
- {#if filterableDefs.length === 0}
209
- <p class="empty">No filterable columns.</p>
210
- {:else if matchingDefs.length === 0}
211
- <p class="empty">
212
- No filters match &ldquo;{quickFindValue}&rdquo;.
213
- </p>
214
- {:else}
215
- <div class="groups">
216
- {#each orderedGroupNames as groupName (groupName)}
217
- {@const defsInGroup = groupedDefs.get(groupName) ?? []}
218
- {@const isCollapsed = collapsedGroups.has(groupName)}
219
- {#if defsInGroup.length > 0}
220
- <section
221
- class="group"
222
- class:collapsed={isCollapsed}
223
- >
224
- <header class="group-header">
225
- <h3>{groupName}</h3>
226
- <Action
227
- label={isCollapsed ? `Expand ${groupName}` : `Collapse ${groupName}`}
228
- colourSet={ColourSet.Auxiliary}
229
- icon={{
230
- name: isCollapsed ? 'circle-plus' : 'circle-minus',
231
- size: Size.Medium,
232
- colour: Colour['$ui-blue-9'],
233
- }}
234
- onclick={() => {
235
- toggleGroup(groupName);
236
- }}
237
- />
238
- </header>
239
- {#if !isCollapsed}
240
- <div class="group-body">
241
- {#each defsInGroup as def (def.id)}
242
- <FilterInput
243
- {def}
244
- customFilters={tableContext.remoteFilters}
245
- />
246
- {/each}
247
- </div>
248
- {/if}
249
- </section>
250
- {/if}
251
- {/each}
252
- </div>
253
- {/if}
254
- </div>
255
- </section>
256
-
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="T extends object, IdType extends Primitive"
6
+ >
7
+ import Action from '../../Action.svelte';
8
+ import Button from '../../Button.svelte';
9
+ import TextInput from '../../TextInput.svelte';
10
+ import { Colour, ColourSet } from '../../../scss/colours.js';
11
+ import { Size } from '../../../Types/Internal/Size.js';
12
+ import { Variant } from '../../../Types/Internal/Variant.js';
13
+ import { SvelteSet } from 'svelte/reactivity';
14
+ import { getContext } from 'svelte';
15
+ import type { Primitive } from '../Types/Context/TableInitOptions.js';
16
+ import type { ColumnDef } from '../Types/Columns/Definitions/ColumnDef.svelte.js';
17
+ import { TableContext } from '../Types/Context/TableContext.svelte.js';
18
+ import FilterInput from './FilterInput.svelte';
19
+
20
+ const tableContext = getContext<TableContext<T, IdType>>(TableContext.identifier);
21
+
22
+ /** Fallback group label used for any filterable column whose
23
+ * `filterGroup` is undefined. Picked up by the same grouping +
24
+ * collapse machinery as user-declared groups. */
25
+ const FALLBACK_GROUP = 'Other';
26
+
27
+ const defs = $derived(tableContext.columnDefs as Array<ColumnDef<T, unknown>>);
28
+ const filterableDefs = $derived(defs.filter((d) => d.allowFiltering));
29
+
30
+ /** User-typed substring filter for the column-header text. Empty
31
+ * string is the "no filter" state. */
32
+ let quickFindValue: string = $state('');
33
+
34
+ /** Whether the Save Filter overflow menu is open. The chevron
35
+ * toggles it; clicking anywhere else (via the window-level
36
+ * listener below) closes it. */
37
+ let saveMenuOpen: boolean = $state(false);
38
+
39
+ /** Names of currently-collapsed groups. A name absent from this
40
+ * set is rendered expanded. Reactive via `SvelteSet` so the panel
41
+ * re-renders on toggle without manually re-assigning. */
42
+ const collapsedGroups = new SvelteSet<string>();
43
+
44
+ /** Filters the column-def list against `quickFindValue`. The match
45
+ * is case-insensitive against the header text (for string
46
+ * headers) and the column id as a fallback for Snippet headers. */
47
+ const matchingDefs: Array<ColumnDef<T, unknown>> = $derived.by(() => {
48
+ const q = quickFindValue.trim().toLowerCase();
49
+ if (q.length === 0) {
50
+ return filterableDefs;
51
+ }
52
+ return filterableDefs.filter((d) => {
53
+ if (typeof d.header === 'string' && d.header.toLowerCase().includes(q)) {
54
+ return true;
55
+ }
56
+ return d.id.toLowerCase().includes(q);
57
+ });
58
+ });
59
+
60
+ /** Ordered list of group names. The first column-def each group
61
+ * is seen on determines its position so groups appear in the
62
+ * source-declaration order. The fallback "Other" group is
63
+ * appended last so explicitly-named groups always lead. */
64
+ const orderedGroupNames: Array<string> = $derived.by(() => {
65
+ const seen = new Set<string>();
66
+ const out: Array<string> = [];
67
+ let sawFallback = false;
68
+ for (const def of matchingDefs) {
69
+ const name = def.filterGroup ?? FALLBACK_GROUP;
70
+ if (name === FALLBACK_GROUP) {
71
+ sawFallback = true;
72
+ continue;
73
+ }
74
+ if (!seen.has(name)) {
75
+ seen.add(name);
76
+ out.push(name);
77
+ }
78
+ }
79
+ if (sawFallback) {
80
+ out.push(FALLBACK_GROUP);
81
+ }
82
+ return out;
83
+ });
84
+
85
+ /** Group name -> column-defs in that group, preserving declaration
86
+ * order within the group. */
87
+ const groupedDefs: Map<string, Array<ColumnDef<T, unknown>>> = $derived.by(() => {
88
+ const map = new Map<string, Array<ColumnDef<T, unknown>>>();
89
+ for (const def of matchingDefs) {
90
+ const name = def.filterGroup ?? FALLBACK_GROUP;
91
+ let bucket = map.get(name);
92
+ if (!bucket) {
93
+ bucket = [];
94
+ map.set(name, bucket);
95
+ }
96
+ bucket.push(def);
97
+ }
98
+ return map;
99
+ });
100
+
101
+ function toggleGroup(name: string): void {
102
+ if (collapsedGroups.has(name)) {
103
+ collapsedGroups.delete(name);
104
+ } else {
105
+ collapsedGroups.add(name);
106
+ }
107
+ }
108
+
109
+ function resetFilters(): void {
110
+ tableContext.paginationRepo?.resetFilters();
111
+ }
112
+
113
+ /**
114
+ * Placeholder for the future Save-Filter / preset workflow. For
115
+ * now this just closes the overflow menu; consumers wire the real
116
+ * persistence layer in a follow-up workorder. The chevron menu is
117
+ * still useful today as a home for the Reset action and as the
118
+ * insertion point for "Load Filter" / "Manage Filters" entries
119
+ * once those land.
120
+ */
121
+ function saveFilter(): void {
122
+ saveMenuOpen = false;
123
+ if (typeof window !== 'undefined') {
124
+ window.dispatchEvent(
125
+ new CustomEvent('scoria:save-filter', {
126
+ detail: { tableName: tableContext.tableName },
127
+ })
128
+ );
129
+ }
130
+ }
131
+
132
+ function handleWindowClick(e: MouseEvent): void {
133
+ if (!saveMenuOpen) {
134
+ return;
135
+ }
136
+ const target = e.target as HTMLElement | null;
137
+ if (target?.closest('.save-filter-cluster') == null) {
138
+ saveMenuOpen = false;
139
+ }
140
+ }
141
+
142
+ /**
143
+ * No-op keydown handler used to override `TextInput`'s default
144
+ * `passthrough` keydown (defined in `Helpers.svelte.ts`), which
145
+ * blurs the focused input on every alphanumeric keypress so that
146
+ * barcode-scanner buffers can flow into `UntypedInputContext`
147
+ * instead. For a plain quick-find search field we want every key
148
+ * to land in the input rather than the input blurring after the
149
+ * first character. Returns immediately and lets the keystroke
150
+ * continue to bubble so the side-panel's window-level Escape
151
+ * handler still closes the panel.
152
+ */
153
+ function noopKeydown(_e: KeyboardEvent): void {
154
+ // intentionally empty
155
+ }
156
+ </script>
157
+
158
+ <svelte:window onclick={handleWindowClick} />
159
+
160
+ <section class="side-panel-section">
161
+ <header class="side-panel-header">
162
+ <h2>Advanced Filter</h2>
163
+ </header>
164
+
165
+ <div class="toolbar">
166
+ <div class="quick-find">
167
+ <TextInput
168
+ labelTop="Quick Find a Filter"
169
+ placeholder="Filter…"
170
+ bind:value={quickFindValue}
171
+ rightIcon={{ name: 'search', size: Size.Medium }}
172
+ onkeydown={noopKeydown}
173
+ />
174
+ </div>
175
+
176
+ <div class="save-filter-cluster">
177
+ <Button
178
+ variant={Variant.Secondary}
179
+ nowrap
180
+ disabled
181
+ size={Size.MediumSmall}
182
+ onclick={saveFilter}>Save Filter</Button
183
+ >
184
+ <Action
185
+ label="More save options"
186
+ colourSet={ColourSet.Auxiliary}
187
+ icon={{ name: 'chevron-down', size: Size.Medium }}
188
+ onclick={() => {
189
+ saveMenuOpen = !saveMenuOpen;
190
+ }}
191
+ />
192
+ {#if saveMenuOpen}
193
+ <div class="save-menu">
194
+ <button
195
+ type="button"
196
+ class="save-menu-item"
197
+ onclick={() => {
198
+ saveMenuOpen = false;
199
+ resetFilters();
200
+ }}>Reset all filters</button
201
+ >
202
+ </div>
203
+ {/if}
204
+ </div>
205
+ </div>
206
+
207
+ <div class="side-panel-body">
208
+ {#if filterableDefs.length === 0}
209
+ <p class="empty">No filterable columns.</p>
210
+ {:else if matchingDefs.length === 0}
211
+ <p class="empty">
212
+ No filters match &ldquo;{quickFindValue}&rdquo;.
213
+ </p>
214
+ {:else}
215
+ <div class="groups">
216
+ {#each orderedGroupNames as groupName (groupName)}
217
+ {@const defsInGroup = groupedDefs.get(groupName) ?? []}
218
+ {@const isCollapsed = collapsedGroups.has(groupName)}
219
+ {#if defsInGroup.length > 0}
220
+ <section
221
+ class="group"
222
+ class:collapsed={isCollapsed}
223
+ >
224
+ <header class="group-header">
225
+ <h3>{groupName}</h3>
226
+ <Action
227
+ label={isCollapsed ? `Expand ${groupName}` : `Collapse ${groupName}`}
228
+ colourSet={ColourSet.Auxiliary}
229
+ icon={{
230
+ name: isCollapsed ? 'circle-plus' : 'circle-minus',
231
+ size: Size.Medium,
232
+ colour: Colour['$ui-blue-9'],
233
+ }}
234
+ onclick={() => {
235
+ toggleGroup(groupName);
236
+ }}
237
+ />
238
+ </header>
239
+ {#if !isCollapsed}
240
+ <div class="group-body">
241
+ {#each defsInGroup as def (def.id)}
242
+ <FilterInput
243
+ {def}
244
+ customFilters={tableContext.remoteFilters}
245
+ />
246
+ {/each}
247
+ </div>
248
+ {/if}
249
+ </section>
250
+ {/if}
251
+ {/each}
252
+ </div>
253
+ {/if}
254
+ </div>
255
+ </section>
256
+
257
257
  <style>.side-panel-section {
258
258
  display: flex;
259
259
  flex-flow: column nowrap;
@@ -413,4 +413,4 @@ p.empty {
413
413
  display: flex;
414
414
  flex-flow: column nowrap;
415
415
  gap: 0.5rem;
416
- }</style>
416
+ }</style>
@@ -1,32 +1,32 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- module
6
- >
7
- import TouchModal from '../../Touch/TouchModal.svelte';
8
- import FilterPanel from './FilterPanel.svelte';
9
-
10
- export interface FilterPanelModalProps {
11
- onclose?: () => void;
12
- }
13
- </script>
14
-
15
- <script lang="ts">
16
- const { onclose }: FilterPanelModalProps = $props();
17
- </script>
18
-
19
- <TouchModal
20
- width="800px"
21
- header="Filter by"
22
- onclose={() => onclose?.()}
23
- buttons={[{ label: 'Close', callback: () => onclose?.() }]}
24
- >
25
- <div class="flex">
26
- <FilterPanel />
27
- </div>
28
- </TouchModal>
29
-
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ module
6
+ >
7
+ import TouchModal from '../../Touch/TouchModal.svelte';
8
+ import FilterPanel from './FilterPanel.svelte';
9
+
10
+ export interface FilterPanelModalProps {
11
+ onclose?: () => void;
12
+ }
13
+ </script>
14
+
15
+ <script lang="ts">
16
+ const { onclose }: FilterPanelModalProps = $props();
17
+ </script>
18
+
19
+ <TouchModal
20
+ width="800px"
21
+ header="Filter by"
22
+ onclose={() => onclose?.()}
23
+ buttons={[{ label: 'Close', callback: () => onclose?.() }]}
24
+ >
25
+ <div class="flex">
26
+ <FilterPanel />
27
+ </div>
28
+ </TouchModal>
29
+
30
30
  <style>.flex {
31
31
  display: flex;
32
32
  flex-flow: column nowrap;
@@ -34,4 +34,4 @@
34
34
  width: 100%;
35
35
  flex: 1;
36
36
  overflow: hidden;
37
- }</style>
37
+ }</style>