@lavalogic/scoria 0.37.44 → 0.37.45

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 (237) 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 +83 -83
  22. package/dist/Components/Contexts/ToastContainer.svelte +65 -65
  23. package/dist/Components/Contexts/Tooltip.svelte +37 -37
  24. package/dist/Components/DataMatrixIcon.svelte +112 -112
  25. package/dist/Components/DataMatrixIconProps.d.ts +3 -13
  26. package/dist/Components/DateInput.svelte +148 -148
  27. package/dist/Components/DatePicker.svelte +300 -300
  28. package/dist/Components/DesktopModal.svelte +90 -90
  29. package/dist/Components/Dial.svelte +204 -204
  30. package/dist/Components/DialProps.d.ts +1 -18
  31. package/dist/Components/DimensionInput.svelte +170 -170
  32. package/dist/Components/DragMenu/DragMenuHolder.svelte +119 -119
  33. package/dist/Components/DragMenu/DraggableCard.svelte +77 -77
  34. package/dist/Components/FileCard.svelte +24 -24
  35. package/dist/Components/FileUpload.svelte +236 -236
  36. package/dist/Components/GridInput.svelte +196 -200
  37. package/dist/Components/GridInputSet.svelte +29 -29
  38. package/dist/Components/HorizontalTabGroup.svelte +82 -82
  39. package/dist/Components/HorizontalTabGroupButton.svelte +44 -44
  40. package/dist/Components/Icon.svelte +128 -128
  41. package/dist/Components/IconProps.d.ts +2 -7
  42. package/dist/Components/Icons.js +357 -357
  43. package/dist/Components/LoadingAnimation.svelte +29 -29
  44. package/dist/Components/LoadingModal.svelte +45 -45
  45. package/dist/Components/LoadingOverlay.svelte +25 -25
  46. package/dist/Components/LoadingOverlayProps.d.ts +3 -7
  47. package/dist/Components/Modal.svelte +258 -258
  48. package/dist/Components/ModalProps.d.ts +0 -3
  49. package/dist/Components/MultiSelect.svelte +220 -220
  50. package/dist/Components/MultiSelectCommonProps.d.ts +6 -17
  51. package/dist/Components/Nav/Nav.svelte +99 -99
  52. package/dist/Components/Nav/NavProps.d.ts +4 -11
  53. package/dist/Components/Nav/NavServiceMenuList.svelte +43 -43
  54. package/dist/Components/Nav/NavTab.svelte +62 -62
  55. package/dist/Components/Nav/ServiceMenuItem.svelte +100 -100
  56. package/dist/Components/Nav/ServicesNav.svelte +80 -80
  57. package/dist/Components/NumberInput.svelte +157 -157
  58. package/dist/Components/PageHeading.svelte +25 -25
  59. package/dist/Components/PasswordInput.svelte +88 -88
  60. package/dist/Components/Portal.svelte +36 -36
  61. package/dist/Components/ProgressBubble.svelte +107 -108
  62. package/dist/Components/ProgressBubbleProps.d.ts +3 -3
  63. package/dist/Components/QuerySelect.svelte +366 -366
  64. package/dist/Components/QuerySelectProps.d.ts +4 -14
  65. package/dist/Components/SingleSelect.svelte +250 -250
  66. package/dist/Components/SingleSelectCommonProps.d.ts +3 -19
  67. package/dist/Components/StepButton.svelte +70 -70
  68. package/dist/Components/StepForm.svelte +140 -140
  69. package/dist/Components/Switch.svelte +69 -69
  70. package/dist/Components/Table/ARCHITECTURE.md +298 -0
  71. package/dist/Components/Table/Body/QuickSearchCell.svelte +679 -694
  72. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +51 -51
  73. package/dist/Components/Table/Body/Rows/ColumnList.svelte +59 -59
  74. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +456 -478
  75. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +79 -79
  76. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +185 -188
  77. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +124 -124
  78. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +120 -120
  79. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +230 -230
  80. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +105 -105
  81. package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +12 -9
  82. package/dist/Components/Table/Body/Rows/Columns/SelectTableCell.d.ts +5 -5
  83. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +87 -87
  84. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +126 -126
  85. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +159 -159
  86. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +246 -246
  87. package/dist/Components/Table/Body/Rows/Columns/TableDatePickerProps.d.ts +4 -4
  88. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +216 -216
  89. package/dist/Components/Table/Body/Rows/Columns/TableQueryCell.d.ts +6 -5
  90. package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +7 -6
  91. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +252 -257
  92. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +179 -179
  93. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +221 -229
  94. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte.d.ts +11 -11
  95. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +197 -197
  96. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +190 -190
  97. package/dist/Components/Table/Body/Rows/TableRow.svelte +290 -290
  98. package/dist/Components/Table/Body/TableBody.svelte +155 -155
  99. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +2 -3
  100. package/dist/Components/Table/ColumnFactory.svelte.d.ts +9 -11
  101. package/dist/Components/Table/ColumnFactory.svelte.js +101 -118
  102. package/dist/Components/Table/ColumnKindRegistry.d.ts +112 -0
  103. package/dist/Components/Table/ColumnKindRegistry.js +63 -0
  104. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +41 -41
  105. package/dist/Components/Table/Headers/SelectAllHeader.svelte +30 -30
  106. package/dist/Components/Table/Headers/TableHead.svelte +415 -413
  107. package/dist/Components/Table/Misc/ColumnPanel.svelte +94 -94
  108. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +112 -112
  109. package/dist/Components/Table/Misc/FilterInput.svelte +620 -644
  110. package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -12
  111. package/dist/Components/Table/Misc/FilterInputProps.d.ts +2 -2
  112. package/dist/Components/Table/Misc/FilterPanel.svelte +257 -257
  113. package/dist/Components/Table/Misc/FilterPanelModal.svelte +30 -30
  114. package/dist/Components/Table/Misc/SidePanel.svelte +35 -35
  115. package/dist/Components/Table/Misc/TableFooter.svelte +311 -311
  116. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +125 -125
  117. package/dist/Components/Table/Misc/TableSidebar.svelte +157 -157
  118. package/dist/Components/Table/Misc/ToolboxPanel.svelte +100 -100
  119. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +107 -107
  120. package/dist/Components/Table/NestedTable.svelte +130 -133
  121. package/dist/Components/Table/SubApis.svelte.d.ts +1 -5
  122. package/dist/Components/Table/SubApis.svelte.js +33 -32
  123. package/dist/Components/Table/Table.svelte +692 -745
  124. package/dist/Components/Table/TableHelpers.svelte.d.ts +6 -19
  125. package/dist/Components/Table/TableHelpers.svelte.js +6 -14
  126. package/dist/Components/Table/Types/Columns/Column.d.ts +2 -2
  127. package/dist/Components/Table/Types/Columns/DateColumn.d.ts +3 -3
  128. package/dist/Components/Table/Types/Columns/DateTableCell.d.ts +7 -7
  129. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +7 -8
  130. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.js +4 -5
  131. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.d.ts +11 -14
  132. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js +3 -4
  133. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +7 -11
  134. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.js +3 -3
  135. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +13 -18
  136. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js +4 -5
  137. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.d.ts +5 -5
  138. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.js +2 -2
  139. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +15 -12
  140. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.js +4 -5
  141. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.d.ts +8 -12
  142. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.js +3 -3
  143. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +6 -6
  144. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +3 -3
  145. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +49 -16
  146. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.js +27 -5
  147. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.d.ts +7 -7
  148. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js +4 -4
  149. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.d.ts +5 -5
  150. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.js +2 -2
  151. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.d.ts +5 -5
  152. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.js +2 -2
  153. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.d.ts +5 -5
  154. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.js +2 -2
  155. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.d.ts +5 -5
  156. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.js +2 -2
  157. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +11 -19
  158. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.js +4 -8
  159. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.d.ts +6 -7
  160. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.js +3 -4
  161. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +9 -9
  162. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +4 -4
  163. package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +5 -5
  164. package/dist/Components/Table/Types/Columns/ProgressBarTableCell.d.ts +6 -6
  165. package/dist/Components/Table/Types/Columns/TableCell.d.ts +7 -6
  166. package/dist/Components/Table/Types/Context/ClipboardState.svelte.d.ts +98 -0
  167. package/dist/Components/Table/Types/Context/ClipboardState.svelte.js +290 -0
  168. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.d.ts +17 -45
  169. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.js +17 -45
  170. package/dist/Components/Table/Types/Context/FilteringState.svelte.d.ts +9 -20
  171. package/dist/Components/Table/Types/Context/FilteringState.svelte.js +9 -20
  172. package/dist/Components/Table/Types/Context/FocusState.svelte.d.ts +23 -42
  173. package/dist/Components/Table/Types/Context/FocusState.svelte.js +32 -59
  174. package/dist/Components/Table/Types/Context/ITable.d.ts +5 -8
  175. package/dist/Components/Table/Types/Context/PreferencesState.svelte.d.ts +29 -56
  176. package/dist/Components/Table/Types/Context/PreferencesState.svelte.js +28 -55
  177. package/dist/Components/Table/Types/Context/QueryValuesState.svelte.d.ts +50 -0
  178. package/dist/Components/Table/Types/Context/QueryValuesState.svelte.js +62 -0
  179. package/dist/Components/Table/Types/Context/SelectionState.svelte.d.ts +17 -28
  180. package/dist/Components/Table/Types/Context/SelectionState.svelte.js +17 -28
  181. package/dist/Components/Table/Types/Context/SortingState.svelte.d.ts +15 -29
  182. package/dist/Components/Table/Types/Context/SortingState.svelte.js +17 -31
  183. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +212 -325
  184. package/dist/Components/Table/Types/Context/TableContext.svelte.js +292 -706
  185. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.d.ts +62 -79
  186. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.js +54 -73
  187. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.d.ts +16 -27
  188. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.js +16 -27
  189. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +12 -15
  190. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +15 -30
  191. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +16 -28
  192. package/dist/Components/Table/Types/Header.d.ts +4 -4
  193. package/dist/Components/Table/Types/HeaderGroup.d.ts +5 -5
  194. package/dist/Components/Table/Types/Public/index.d.ts +2 -4
  195. package/dist/Components/Table/Types/Public/index.js +2 -4
  196. package/dist/Components/Table/clipboardEscape.d.ts +32 -0
  197. package/dist/Components/Table/clipboardEscape.js +45 -0
  198. package/dist/Components/Table/createTable.svelte.d.ts +8 -18
  199. package/dist/Components/Table/createTable.svelte.js +19 -47
  200. package/dist/Components/Test/TestContextConsumer.svelte +13 -13
  201. package/dist/Components/TextArea.svelte +130 -130
  202. package/dist/Components/TextInput.svelte +176 -176
  203. package/dist/Components/ThreeStateRadio.svelte +131 -131
  204. package/dist/Components/Touch/BoolCard.svelte +45 -45
  205. package/dist/Components/Touch/DateModal.svelte +209 -209
  206. package/dist/Components/Touch/EditCard.svelte +59 -59
  207. package/dist/Components/Touch/InfoCard.svelte +31 -31
  208. package/dist/Components/Touch/InfoTextCard.svelte +28 -28
  209. package/dist/Components/Touch/ModalExplanation.svelte +17 -17
  210. package/dist/Components/Touch/NumberKeyboard.svelte +225 -225
  211. package/dist/Components/Touch/NumberModal.svelte +79 -79
  212. package/dist/Components/Touch/PlusMinusCard.svelte +46 -46
  213. package/dist/Components/Touch/SelectModal.svelte +123 -123
  214. package/dist/Components/Touch/SummaryCard.svelte +93 -93
  215. package/dist/Components/Touch/TextAreaModal.svelte +95 -95
  216. package/dist/Components/Touch/TextModal.svelte +106 -106
  217. package/dist/Components/Touch/TouchCard.svelte +33 -33
  218. package/dist/Components/Touch/TouchModal.svelte +274 -274
  219. package/dist/Components/Touch/UtilityButton.svelte +109 -109
  220. package/dist/Components/VerticalTabGroup.svelte +79 -79
  221. package/dist/Components/VerticalTabGroupButton.svelte +58 -58
  222. package/dist/Contexts/ToastContext.svelte.js +3 -4
  223. package/dist/Helpers/Datamatrix.d.ts +19 -19
  224. package/dist/Helpers/Datamatrix.js +291 -291
  225. package/dist/Helpers/Helpers.svelte.d.ts +2 -4
  226. package/dist/Helpers/Helpers.svelte.js +2 -4
  227. package/dist/Helpers/dropdownPortal.d.ts +26 -41
  228. package/dist/Helpers/dropdownPortal.js +62 -116
  229. package/dist/Types/Examples/ExampleModal.svelte +35 -35
  230. package/dist/index.d.ts +0 -1
  231. package/dist/scss/_basics.scss +12 -12
  232. package/dist/scss/_colours.scss +134 -134
  233. package/dist/scss/_mixins.scss +3348 -3360
  234. package/dist/scss/_motion.scss +57 -57
  235. package/dist/scss/_sizing.scss +85 -85
  236. package/dist/scss/_transitions.scss +8 -8
  237. package/package.json +2 -1
@@ -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>