@lavalogic/scoria 0.36.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 (550) hide show
  1. package/dist/Components/AccordionGroup.svelte +6 -2
  2. package/dist/Components/AccordionGroupButton.svelte +78 -78
  3. package/dist/Components/AccordionGroupButtonProps.d.ts +27 -8
  4. package/dist/Components/AccordionGroupProps.d.ts +10 -2
  5. package/dist/Components/Action.svelte +31 -33
  6. package/dist/Components/ActionProps.d.ts +23 -3
  7. package/dist/Components/AlertModal.svelte +90 -39
  8. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +1126 -0
  9. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte.d.ts +4 -0
  10. package/dist/Components/AppointmentCalendar/AppointmentCalendarProps.d.ts +92 -0
  11. package/dist/Components/AppointmentCalendar/AppointmentCalendarProps.js +12 -0
  12. package/dist/Components/Base/BaseModal.svelte +172 -0
  13. package/dist/Components/Base/BaseModal.svelte.d.ts +4 -0
  14. package/dist/Components/Base/BaseModalProps.d.ts +73 -0
  15. package/dist/Components/Base/BaseModalProps.js +1 -0
  16. package/dist/Components/Base/ContextWrapper.svelte +37 -15
  17. package/dist/Components/Base/ContextWrapper.svelte.d.ts +24 -5
  18. package/dist/Components/Base/ContextWrapperProps.d.ts +22 -0
  19. package/dist/Components/Base/Pagination.svelte +70 -62
  20. package/dist/Components/Base/Pagination.svelte.d.ts +12 -2
  21. package/dist/Components/Base/PaginationProps.d.ts +60 -3
  22. package/dist/Components/Base/Snippets.svelte +7 -0
  23. package/dist/Components/Base/Snippets.svelte.d.ts +5 -1
  24. package/dist/Components/BigRadioSet.svelte +18 -9
  25. package/dist/Components/BigRadioSetProps.d.ts +17 -1
  26. package/dist/Components/Bubble.svelte +67 -34
  27. package/dist/Components/Bubble.svelte.d.ts +23 -2
  28. package/dist/Components/BubbleProps.d.ts +55 -4
  29. package/dist/Components/Button.svelte +50 -38
  30. package/dist/Components/ButtonProps.d.ts +66 -1
  31. package/dist/Components/Checkbox.svelte +57 -29
  32. package/dist/Components/Checkbox.svelte.d.ts +1 -12
  33. package/dist/Components/CheckboxProps.d.ts +27 -0
  34. package/dist/Components/CheckboxProps.js +1 -0
  35. package/dist/Components/CollapsibleCard.svelte +53 -22
  36. package/dist/Components/CollapsibleCardProps.d.ts +22 -1
  37. package/dist/Components/Contexts/ContextMenu.svelte +53 -32
  38. package/dist/Components/Contexts/ContextMenu.svelte.d.ts +26 -0
  39. package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -7
  40. package/dist/Components/Contexts/ContextMenuDivider.svelte.d.ts +9 -0
  41. package/dist/Components/Contexts/ContextMenuOption.svelte +27 -18
  42. package/dist/Components/Contexts/ContextMenuOption.svelte.d.ts +12 -1
  43. package/dist/Components/Contexts/ContextMenuOptionProps.d.ts +34 -2
  44. package/dist/Components/Contexts/Toast.svelte +28 -4
  45. package/dist/Components/Contexts/Toast.svelte.d.ts +14 -0
  46. package/dist/Components/Contexts/ToastContainer.svelte +30 -11
  47. package/dist/Components/Contexts/ToastContainer.svelte.d.ts +14 -0
  48. package/dist/Components/Contexts/ToastProps.d.ts +14 -1
  49. package/dist/Components/Contexts/Tooltip.svelte +21 -10
  50. package/dist/Components/Contexts/Tooltip.svelte.d.ts +10 -0
  51. package/dist/Components/DataMatrixIcon.svelte +82 -11
  52. package/dist/Components/DataMatrixIconProps.d.ts +73 -1
  53. package/dist/Components/DateInput.svelte +64 -29
  54. package/dist/Components/DateInput.svelte.d.ts +1 -1
  55. package/dist/Components/DateOnlyInputProps.d.ts +31 -5
  56. package/dist/Components/DatePicker.svelte +96 -108
  57. package/dist/Components/DatePickerProps.d.ts +18 -1
  58. package/dist/Components/DateTimeInputProps.d.ts +30 -5
  59. package/dist/Components/DesktopModal.svelte +14 -43
  60. package/dist/Components/DesktopModalProps.d.ts +5 -4
  61. package/dist/Components/Dial.svelte +103 -41
  62. package/dist/Components/DialProps.d.ts +74 -2
  63. package/dist/Components/DimensionInput.svelte +50 -64
  64. package/dist/Components/DimensionInput.svelte.d.ts +1 -1
  65. package/dist/Components/DimensionInputProps.d.ts +39 -4
  66. package/dist/Components/DragMenu/DragMenuHolder.svelte +41 -29
  67. package/dist/Components/DragMenu/DragMenuHolderProps.d.ts +30 -1
  68. package/dist/Components/DragMenu/DraggableCard.svelte +44 -8
  69. package/dist/Components/DragMenu/DraggableCardProps.d.ts +27 -1
  70. package/dist/Components/FileCard.svelte +6 -2
  71. package/dist/Components/FileCardProps.d.ts +17 -1
  72. package/dist/Components/FileUpload.svelte +82 -42
  73. package/dist/Components/FileUploadProps.d.ts +34 -4
  74. package/dist/Components/GridInput.svelte +27 -17
  75. package/dist/Components/GridInput.svelte.d.ts +5 -5
  76. package/dist/Components/GridInputProps.d.ts +4 -1
  77. package/dist/Components/GridInputSet.svelte +12 -5
  78. package/dist/Components/GridInputSet.svelte.d.ts +5 -5
  79. package/dist/Components/GridInputSetProps.d.ts +4 -2
  80. package/dist/Components/HorizontalTabGroup.svelte +13 -11
  81. package/dist/Components/HorizontalTabGroupButton.svelte +16 -68
  82. package/dist/Components/HorizontalTabGroupProps.d.ts +15 -2
  83. package/dist/Components/Icon.svelte +62 -21
  84. package/dist/Components/IconProps.d.ts +54 -6
  85. package/dist/Components/Icons.d.ts +8 -0
  86. package/dist/Components/Icons.js +234 -215
  87. package/dist/Components/LoadingAnimation.svelte +18 -18
  88. package/dist/Components/LoadingAnimation.svelte.d.ts +1 -3
  89. package/dist/Components/LoadingAnimationProps.d.ts +16 -0
  90. package/dist/Components/LoadingAnimationProps.js +1 -0
  91. package/dist/Components/LoadingModal.svelte +18 -20
  92. package/dist/Components/LoadingModal.svelte.d.ts +1 -4
  93. package/dist/Components/LoadingModalProps.d.ts +17 -0
  94. package/dist/Components/LoadingModalProps.js +1 -0
  95. package/dist/Components/LoadingOverlay.svelte +11 -13
  96. package/dist/Components/LoadingOverlay.svelte.d.ts +1 -5
  97. package/dist/Components/LoadingOverlayProps.d.ts +28 -0
  98. package/dist/Components/LoadingOverlayProps.js +1 -0
  99. package/dist/Components/Modal.svelte +77 -82
  100. package/dist/Components/Modal.svelte.d.ts +1 -25
  101. package/dist/Components/ModalProps.d.ts +65 -0
  102. package/dist/Components/ModalProps.js +1 -0
  103. package/dist/Components/MultiSelect.svelte +88 -76
  104. package/dist/Components/MultiSelectCommonProps.d.ts +33 -4
  105. package/dist/Components/MultiSelectPropsAsObject.d.ts +5 -0
  106. package/dist/Components/MultiSelectPropsAsPrimitive.d.ts +6 -0
  107. package/dist/Components/Nav/CallbackButtonWithIcon.d.ts +22 -1
  108. package/dist/Components/Nav/Nav.svelte +35 -30
  109. package/dist/Components/Nav/Nav.svelte.d.ts +23 -2
  110. package/dist/Components/Nav/NavProps.d.ts +50 -3
  111. package/dist/Components/Nav/NavServiceMenuList.svelte +12 -3
  112. package/dist/Components/Nav/NavServiceMenuListProps.d.ts +25 -1
  113. package/dist/Components/Nav/NavTab.svelte +19 -48
  114. package/dist/Components/Nav/NavTab.svelte.d.ts +23 -2
  115. package/dist/Components/Nav/NavTabProps.d.ts +16 -2
  116. package/dist/Components/Nav/ServiceMenuItem.svelte +29 -20
  117. package/dist/Components/Nav/ServicesNav.svelte +60 -34
  118. package/dist/Components/Nav/ServicesNav.svelte.d.ts +23 -2
  119. package/dist/Components/Nav/ServicesNavProps.d.ts +20 -4
  120. package/dist/Components/Nav/SideMenuItemProps.d.ts +16 -0
  121. package/dist/Components/NumberInput.svelte +37 -27
  122. package/dist/Components/NumberInputProps.d.ts +37 -0
  123. package/dist/Components/PageHeading.svelte +2 -13
  124. package/dist/Components/PageHeading.svelte.d.ts +1 -6
  125. package/dist/Components/PageHeadingProps.d.ts +23 -0
  126. package/dist/Components/PageHeadingProps.js +1 -0
  127. package/dist/Components/PasswordInput.svelte +27 -15
  128. package/dist/Components/PasswordInput.svelte.d.ts +2 -2
  129. package/dist/Components/PasswordInputProps.d.ts +21 -0
  130. package/dist/Components/PasswordInputProps.js +1 -0
  131. package/dist/Components/Portal.svelte +14 -3
  132. package/dist/Components/PortalProps.d.ts +20 -1
  133. package/dist/Components/ProgressBubble.svelte +98 -53
  134. package/dist/Components/ProgressBubbleProps.d.ts +23 -2
  135. package/dist/Components/QuerySelect.svelte +103 -159
  136. package/dist/Components/QuerySelect.svelte.d.ts +2 -29
  137. package/dist/Components/QuerySelectProps.d.ts +66 -0
  138. package/dist/Components/QuerySelectProps.js +1 -0
  139. package/dist/Components/SingleSelect.svelte +86 -108
  140. package/dist/Components/SingleSelectCommonProps.d.ts +43 -5
  141. package/dist/Components/SingleSelectPropsAsObject.d.ts +7 -0
  142. package/dist/Components/SingleSelectPropsAsPrimitive.d.ts +8 -0
  143. package/dist/Components/StepButton.svelte +19 -69
  144. package/dist/Components/StepForm.svelte +52 -52
  145. package/dist/Components/StepFormProps.d.ts +16 -2
  146. package/dist/Components/Switch.svelte +68 -31
  147. package/dist/Components/Switch.svelte.d.ts +1 -1
  148. package/dist/Components/SwitchProps.d.ts +46 -0
  149. package/dist/Components/Table/Body/HeightData.d.ts +1 -6
  150. package/dist/Components/Table/Body/HeightData.js +8 -0
  151. package/dist/Components/Table/Body/QuickSearchCell.svelte +106 -50
  152. package/dist/Components/Table/Body/QuickSearchCell.svelte.d.ts +12 -11
  153. package/dist/Components/Table/Body/QuickSearchCellProps.d.ts +6 -0
  154. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +43 -9
  155. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte.d.ts +24 -2
  156. package/dist/Components/Table/Body/Rows/ColumnHighlightProps.d.ts +3 -0
  157. package/dist/Components/Table/Body/Rows/ColumnList.svelte +15 -5
  158. package/dist/Components/Table/Body/Rows/ColumnList.svelte.d.ts +12 -11
  159. package/dist/Components/Table/Body/Rows/ColumnListProps.d.ts +1 -0
  160. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +424 -91
  161. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte.d.ts +12 -11
  162. package/dist/Components/Table/Body/Rows/ColumnListRowProps.d.ts +5 -0
  163. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +43 -13
  164. package/dist/Components/Table/Body/Rows/Columns/AccessorComponentProps.d.ts +12 -0
  165. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +50 -38
  166. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte.d.ts +12 -12
  167. package/dist/Components/Table/Body/Rows/Columns/ActionsColumn.d.ts +9 -0
  168. package/dist/Components/Table/Body/Rows/Columns/ActionsTableCell.d.ts +5 -0
  169. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +61 -26
  170. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte.d.ts +14 -13
  171. package/dist/Components/Table/Body/Rows/Columns/BubbleCellProps.d.ts +12 -0
  172. package/dist/Components/Table/Body/Rows/Columns/BubbleCellProps.js +1 -0
  173. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +36 -16
  174. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +47 -24
  175. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte.d.ts +12 -11
  176. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCellProps.d.ts +7 -0
  177. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +54 -20
  178. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte.d.ts +17 -11
  179. package/dist/Components/Table/Body/Rows/Columns/RowSelectionColumn.d.ts +8 -0
  180. package/dist/Components/Table/Body/Rows/Columns/RowSelectionTableCell.d.ts +5 -0
  181. package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +11 -0
  182. package/dist/Components/Table/Body/Rows/Columns/SelectTableCell.d.ts +11 -0
  183. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +55 -40
  184. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte.d.ts +11 -0
  185. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +38 -27
  186. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte.d.ts +13 -18
  187. package/dist/Components/Table/Body/Rows/Columns/TableCheckboxProps.d.ts +17 -0
  188. package/dist/Components/Table/Body/Rows/Columns/TableCheckboxProps.js +1 -0
  189. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +22 -7
  190. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte.d.ts +1 -7
  191. package/dist/Components/Table/Body/Rows/Columns/TableColumnProps.d.ts +16 -0
  192. package/dist/Components/Table/Body/Rows/Columns/TableColumnProps.js +1 -0
  193. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +61 -31
  194. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte.d.ts +12 -11
  195. package/dist/Components/Table/Body/Rows/Columns/TableDatePickerProps.d.ts +9 -0
  196. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +123 -244
  197. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte.d.ts +20 -12
  198. package/dist/Components/Table/Body/Rows/Columns/TableQueryCell.d.ts +8 -0
  199. package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +9 -0
  200. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +126 -189
  201. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte.d.ts +12 -11
  202. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelectProps.d.ts +8 -0
  203. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +31 -19
  204. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte.d.ts +2 -5
  205. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckboxProps.d.ts +14 -0
  206. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckboxProps.js +1 -0
  207. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +125 -187
  208. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte.d.ts +13 -12
  209. package/dist/Components/Table/Body/Rows/Columns/TableSelectProps.d.ts +6 -0
  210. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +119 -270
  211. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte.d.ts +12 -11
  212. package/dist/Components/Table/Body/Rows/Columns/TableTextInputProps.d.ts +6 -0
  213. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +23 -13
  214. package/dist/Components/Table/Body/Rows/Columns/_helpers/useAsyncEditable.svelte.d.ts +104 -0
  215. package/dist/Components/Table/Body/Rows/Columns/_helpers/useAsyncEditable.svelte.js +215 -0
  216. package/dist/Components/Table/Body/Rows/TableRow.svelte +200 -132
  217. package/dist/Components/Table/Body/Rows/TableRow.svelte.d.ts +2 -10
  218. package/dist/Components/Table/Body/Rows/TableRowProps.d.ts +11 -2
  219. package/dist/Components/Table/Body/TableBody.svelte +170 -53
  220. package/dist/Components/Table/Body/TableBody.svelte.d.ts +15 -22
  221. package/dist/Components/Table/Body/TableBodyProps.d.ts +9 -7
  222. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +18 -12
  223. package/dist/Components/Table/ColumnFactory.svelte.d.ts +43 -0
  224. package/dist/Components/Table/ColumnFactory.svelte.js +339 -0
  225. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +5 -3
  226. package/dist/Components/Table/Headers/HighlightAllHeader.svelte.d.ts +12 -11
  227. package/dist/Components/Table/Headers/SelectAllHeader.svelte +5 -3
  228. package/dist/Components/Table/Headers/SelectAllHeader.svelte.d.ts +12 -11
  229. package/dist/Components/Table/Headers/TableHead.svelte +340 -200
  230. package/dist/Components/Table/Headers/TableHead.svelte.d.ts +13 -16
  231. package/dist/Components/Table/Headers/TableHeadProps.d.ts +10 -0
  232. package/dist/Components/Table/Headers/TableHeadProps.js +1 -0
  233. package/dist/Components/Table/Misc/ColumnPanel.svelte +108 -50
  234. package/dist/Components/Table/Misc/ColumnPanel.svelte.d.ts +12 -11
  235. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +20 -7
  236. package/dist/Components/Table/Misc/ColumnPanelModal.svelte.d.ts +12 -11
  237. package/dist/Components/Table/Misc/ColumnPanelModalProps.d.ts +5 -0
  238. package/dist/Components/Table/Misc/FilterInput.svelte +30 -41
  239. package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -11
  240. package/dist/Components/Table/Misc/FilterPanel.svelte +387 -29
  241. package/dist/Components/Table/Misc/FilterPanel.svelte.d.ts +12 -11
  242. package/dist/Components/Table/Misc/FilterPanelModal.svelte +4 -51
  243. package/dist/Components/Table/Misc/FilterPanelModal.svelte.d.ts +2 -23
  244. package/dist/Components/Table/Misc/SidePanel.svelte +12 -9
  245. package/dist/Components/Table/Misc/SidePanel.svelte.d.ts +1 -7
  246. package/dist/Components/Table/Misc/SidePanelProps.d.ts +17 -0
  247. package/dist/Components/Table/Misc/SidePanelProps.js +1 -0
  248. package/dist/Components/Table/Misc/TableFooter.svelte +44 -35
  249. package/dist/Components/Table/Misc/TableFooter.svelte.d.ts +13 -14
  250. package/dist/Components/Table/Misc/TableFooterProps.d.ts +8 -0
  251. package/dist/Components/Table/Misc/TableFooterProps.js +1 -0
  252. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +17 -48
  253. package/dist/Components/Table/Misc/TableHorizontalBar.svelte.d.ts +12 -11
  254. package/dist/Components/Table/Misc/TableSidebar.svelte +28 -47
  255. package/dist/Components/Table/Misc/TableSidebar.svelte.d.ts +12 -11
  256. package/dist/Components/Table/Misc/ToolboxPanel.svelte +121 -55
  257. package/dist/Components/Table/Misc/ToolboxPanel.svelte.d.ts +12 -11
  258. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +31 -24
  259. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte.d.ts +12 -11
  260. package/dist/Components/Table/Misc/ToolboxPanelModalProps.d.ts +5 -0
  261. package/dist/Components/Table/Misc/numberDateFilterTypes.d.ts +7 -4
  262. package/dist/Components/Table/Misc/numberDateFilterTypes.js +8 -3
  263. package/dist/Components/Table/Misc/stringFilterTypes.d.ts +6 -4
  264. package/dist/Components/Table/Misc/stringFilterTypes.js +7 -3
  265. package/dist/Components/Table/NestedTable.svelte +85 -41
  266. package/dist/Components/Table/NestedTable.svelte.d.ts +2 -10
  267. package/dist/Components/Table/NestedTableProps.d.ts +25 -0
  268. package/dist/Components/Table/NestedTableProps.js +1 -0
  269. package/dist/Components/Table/SubApis.svelte.d.ts +23 -0
  270. package/dist/Components/Table/SubApis.svelte.js +359 -0
  271. package/dist/Components/Table/Table.svelte +347 -172
  272. package/dist/Components/Table/Table.svelte.d.ts +24 -1
  273. package/dist/Components/Table/TableHelpers.svelte.d.ts +58 -0
  274. package/dist/Components/Table/TableHelpers.svelte.js +88 -0
  275. package/dist/Components/Table/Types/Columns/Column.d.ts +10 -0
  276. package/dist/Components/Table/Types/Columns/ColumnPinningState.d.ts +12 -0
  277. package/dist/Components/Table/Types/Columns/ColumnSizingState.d.ts +8 -0
  278. package/dist/Components/Table/Types/Columns/ColumnType.d.ts +17 -0
  279. package/dist/Components/Table/Types/Columns/ColumnType.js +18 -1
  280. package/dist/Components/Table/Types/Columns/DateColumn.d.ts +6 -0
  281. package/dist/Components/Table/Types/Columns/DateTableCell.d.ts +7 -0
  282. package/dist/Components/Table/Types/Columns/Definitions/AccessorFn.d.ts +13 -0
  283. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +28 -3
  284. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.js +15 -0
  285. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.d.ts +10 -0
  286. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.js +11 -1
  287. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.d.ts +23 -2
  288. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js +9 -2
  289. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +21 -2
  290. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.js +8 -0
  291. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +29 -3
  292. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js +11 -0
  293. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.d.ts +23 -0
  294. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.js +8 -0
  295. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +31 -0
  296. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.js +17 -3
  297. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.d.ts +21 -2
  298. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.js +7 -0
  299. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +29 -1
  300. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +17 -3
  301. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +122 -11
  302. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.js +77 -11
  303. package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.d.ts +9 -0
  304. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.d.ts +41 -1
  305. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js +16 -0
  306. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.d.ts +19 -1
  307. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.js +12 -1
  308. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.d.ts +11 -0
  309. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.js +6 -3
  310. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.d.ts +19 -0
  311. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.js +25 -1
  312. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.d.ts +26 -0
  313. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.js +20 -5
  314. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +43 -7
  315. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.js +18 -3
  316. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.d.ts +19 -5
  317. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.js +16 -5
  318. package/dist/Components/Table/Types/Columns/Definitions/JSONColumnDefSet.d.ts +14 -0
  319. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +34 -2
  320. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +30 -7
  321. package/dist/Components/Table/Types/Columns/Definitions/ValidationFn.d.ts +17 -0
  322. package/dist/Components/Table/Types/Columns/DefsWrapper.d.ts +10 -0
  323. package/dist/Components/Table/Types/Columns/DisplayType.d.ts +13 -0
  324. package/dist/Components/Table/Types/Columns/DisplayType.js +14 -1
  325. package/dist/Components/Table/Types/Columns/ExpandColumn.d.ts +5 -0
  326. package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +7 -0
  327. package/dist/Components/Table/Types/Columns/JSONColumnPinningState.d.ts +6 -0
  328. package/dist/Components/Table/Types/Columns/ProgressBarColumn.d.ts +5 -0
  329. package/dist/Components/Table/Types/Columns/ProgressBarTableCell.d.ts +9 -0
  330. package/dist/Components/Table/Types/Columns/TableActionButton.d.ts +12 -0
  331. package/dist/Components/Table/Types/Columns/TableCell.d.ts +16 -2
  332. package/dist/Components/Table/Types/Columns/VisibilityState.d.ts +12 -0
  333. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.d.ts +173 -0
  334. package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.js +241 -0
  335. package/dist/Components/Table/Types/Context/FilteringState.svelte.d.ts +166 -0
  336. package/dist/Components/Table/Types/Context/FilteringState.svelte.js +180 -0
  337. package/dist/Components/Table/Types/Context/FocusState.svelte.d.ts +316 -0
  338. package/dist/Components/Table/Types/Context/FocusState.svelte.js +751 -0
  339. package/dist/Components/Table/Types/Context/ITable.d.ts +10 -0
  340. package/dist/Components/Table/Types/Context/PreferencesState.svelte.d.ts +242 -0
  341. package/dist/Components/Table/Types/Context/PreferencesState.svelte.js +317 -0
  342. package/dist/Components/Table/Types/Context/ReadonlyRowModel.d.ts +14 -3
  343. package/dist/Components/Table/Types/Context/Row.d.ts +18 -0
  344. package/dist/Components/Table/Types/Context/RowModel.d.ts +11 -0
  345. package/dist/Components/Table/Types/Context/SelectionState.svelte.d.ts +260 -0
  346. package/dist/Components/Table/Types/Context/SelectionState.svelte.js +613 -0
  347. package/dist/Components/Table/Types/Context/SortingState.svelte.d.ts +112 -0
  348. package/dist/Components/Table/Types/Context/SortingState.svelte.js +272 -0
  349. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +547 -53
  350. package/dist/Components/Table/Types/Context/TableContext.svelte.js +959 -1259
  351. package/dist/Components/Table/Types/Context/TableInitOptions.d.ts +16 -0
  352. package/dist/Components/Table/Types/Context/TableSettings.d.ts +20 -0
  353. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.d.ts +167 -0
  354. package/dist/Components/Table/Types/Context/VirtualisationState.svelte.js +226 -0
  355. package/dist/Components/Table/Types/Coordinates/CellCoordinates.d.ts +12 -0
  356. package/dist/Components/Table/Types/Coordinates/CellCoordinatesWithoutColumn.d.ts +5 -0
  357. package/dist/Components/Table/Types/Coordinates/ColumnIndices.d.ts +16 -2
  358. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.d.ts +143 -0
  359. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.js +454 -0
  360. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +21 -0
  361. package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +10 -0
  362. package/dist/Components/Table/Types/DataRepository/IRemoteDataRepository.d.ts +16 -0
  363. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.d.ts +87 -3
  364. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.js +112 -7
  365. package/dist/Components/Table/Types/DataRepository/SortingState.d.ts +12 -0
  366. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +87 -2
  367. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +74 -1
  368. package/dist/Components/Table/Types/ExpandedPanel.d.ts +9 -0
  369. package/dist/Components/Table/Types/ExpandedPanel.js +10 -1
  370. package/dist/Components/Table/Types/Filtering/ColumnFiltersState.d.ts +17 -0
  371. package/dist/Components/Table/Types/Filtering/CustomFilter.d.ts +21 -0
  372. package/dist/Components/Table/Types/Filtering/CustomFilterType.d.ts +5 -0
  373. package/dist/Components/Table/Types/Filtering/CustomFilterType.js +6 -1
  374. package/dist/Components/Table/Types/Filtering/CustomRemoteFilters.d.ts +6 -0
  375. package/dist/Components/Table/Types/Filtering/FilterFn.d.ts +28 -0
  376. package/dist/Components/Table/Types/Filtering/FilterMode.d.ts +7 -0
  377. package/dist/Components/Table/Types/Filtering/FilterType.d.ts +8 -0
  378. package/dist/Components/Table/Types/Filtering/FilterType.js +9 -1
  379. package/dist/Components/Table/Types/Filtering/FilterValueType.d.ts +11 -0
  380. package/dist/Components/Table/Types/Filtering/FilterValueType.js +12 -1
  381. package/dist/Components/Table/Types/Filtering/HasCustomFilterFunction.d.ts +23 -2
  382. package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.d.ts +19 -12
  383. package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.js +18 -14
  384. package/dist/Components/Table/Types/Filtering/StringFilterMode.d.ts +22 -15
  385. package/dist/Components/Table/Types/Filtering/StringFilterMode.js +22 -16
  386. package/dist/Components/Table/Types/Focus/MultiFocusEdge.d.ts +8 -0
  387. package/dist/Components/Table/Types/Focus/MultiFocusEdge.js +9 -1
  388. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.d.ts +22 -0
  389. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.js +22 -0
  390. package/dist/Components/Table/Types/Header.d.ts +8 -0
  391. package/dist/Components/Table/Types/HeaderGroup.d.ts +7 -0
  392. package/dist/Components/Table/Types/Layout/CellPinning.d.ts +1 -0
  393. package/dist/Components/Table/Types/Layout/CellPinning.js +8 -0
  394. package/dist/Components/Table/Types/OnChangeFn.d.ts +11 -0
  395. package/dist/Components/Table/Types/Pagination/PaginationState.d.ts +9 -0
  396. package/dist/Components/Table/Types/Pagination/PaginationType.d.ts +10 -0
  397. package/dist/Components/Table/Types/Pagination/PaginationType.js +11 -1
  398. package/dist/Components/Table/Types/Public/AnyEditEvent.d.ts +30 -0
  399. package/dist/Components/Table/Types/Public/AnyEditEvent.js +1 -0
  400. package/dist/Components/Table/Types/Public/BaseColumnOptions.d.ts +44 -0
  401. package/dist/Components/Table/Types/Public/BaseColumnOptions.js +1 -0
  402. package/dist/Components/Table/Types/Public/ColumnFactory.d.ts +35 -0
  403. package/dist/Components/Table/Types/Public/ColumnFactory.js +1 -0
  404. package/dist/Components/Table/Types/Public/ColumnOptions.d.ts +238 -0
  405. package/dist/Components/Table/Types/Public/ColumnOptions.js +1 -0
  406. package/dist/Components/Table/Types/Public/ColumnSpec.d.ts +39 -0
  407. package/dist/Components/Table/Types/Public/ColumnSpec.js +1 -0
  408. package/dist/Components/Table/Types/Public/CreateTableOptions.d.ts +87 -0
  409. package/dist/Components/Table/Types/Public/CreateTableOptions.js +1 -0
  410. package/dist/Components/Table/Types/Public/KeyConstraints.d.ts +42 -0
  411. package/dist/Components/Table/Types/Public/KeyConstraints.js +22 -0
  412. package/dist/Components/Table/Types/Public/RowSource.d.ts +87 -0
  413. package/dist/Components/Table/Types/Public/RowSource.js +1 -0
  414. package/dist/Components/Table/Types/Public/SelectionOptions.d.ts +26 -0
  415. package/dist/Components/Table/Types/Public/SelectionOptions.js +1 -0
  416. package/dist/Components/Table/Types/Public/Table.d.ts +39 -0
  417. package/dist/Components/Table/Types/Public/Table.js +1 -0
  418. package/dist/Components/Table/Types/Public/TableInitialState.d.ts +26 -0
  419. package/dist/Components/Table/Types/Public/TableInitialState.js +1 -0
  420. package/dist/Components/Table/Types/Public/TablePersistence.d.ts +38 -0
  421. package/dist/Components/Table/Types/Public/TablePersistence.js +1 -0
  422. package/dist/Components/Table/Types/Public/TableSubApis.d.ts +157 -0
  423. package/dist/Components/Table/Types/Public/TableSubApis.js +1 -0
  424. package/dist/Components/Table/Types/Public/index.d.ts +20 -0
  425. package/dist/Components/Table/Types/Public/index.js +8 -0
  426. package/dist/Components/Table/Types/Toolbar/ToolbarPosition.d.ts +4 -0
  427. package/dist/Components/Table/Types/Toolbar/ToolbarPosition.js +5 -1
  428. package/dist/Components/Table/createTable.svelte.d.ts +53 -0
  429. package/dist/Components/Table/createTable.svelte.js +269 -0
  430. package/dist/Components/TextArea.svelte +37 -18
  431. package/dist/Components/TextAreaProps.d.ts +37 -0
  432. package/dist/Components/TextInput.svelte +41 -22
  433. package/dist/Components/TextInputProps.d.ts +58 -1
  434. package/dist/Components/ThreeStateRadio.svelte +61 -64
  435. package/dist/Components/ThreeStateRadioProps.d.ts +29 -1
  436. package/dist/Components/Touch/BoolCard.svelte +8 -15
  437. package/dist/Components/Touch/BoolCard.svelte.d.ts +1 -10
  438. package/dist/Components/Touch/BoolCardProps.d.ts +21 -0
  439. package/dist/Components/Touch/BoolCardProps.js +1 -0
  440. package/dist/Components/Touch/DateModal.svelte +17 -25
  441. package/dist/Components/Touch/DateModal.svelte.d.ts +1 -17
  442. package/dist/Components/Touch/DateModalProps.d.ts +36 -0
  443. package/dist/Components/Touch/DateModalProps.js +1 -0
  444. package/dist/Components/Touch/EditCard.svelte +10 -3
  445. package/dist/Components/Touch/EditCardProps.d.ts +21 -0
  446. package/dist/Components/Touch/InfoCard.svelte +14 -7
  447. package/dist/Components/Touch/InfoCardProps.d.ts +9 -0
  448. package/dist/Components/Touch/InfoTextCard.svelte +9 -2
  449. package/dist/Components/Touch/InfoTextCardProps.d.ts +8 -0
  450. package/dist/Components/Touch/ModalExplanation.svelte +9 -12
  451. package/dist/Components/Touch/ModalExplanation.svelte.d.ts +1 -6
  452. package/dist/Components/Touch/ModalExplanationProps.d.ts +22 -0
  453. package/dist/Components/Touch/ModalExplanationProps.js +1 -0
  454. package/dist/Components/Touch/NumberKeyboard.svelte +62 -105
  455. package/dist/Components/Touch/NumberKeyboardProps.d.ts +19 -0
  456. package/dist/Components/Touch/NumberModal.svelte +16 -6
  457. package/dist/Components/Touch/NumberModalProps.d.ts +23 -1
  458. package/dist/Components/Touch/PlusMinusCard.svelte +12 -16
  459. package/dist/Components/Touch/PlusMinusCard.svelte.d.ts +1 -6
  460. package/dist/Components/Touch/PlusMinusCardProps.d.ts +18 -0
  461. package/dist/Components/Touch/PlusMinusCardProps.js +1 -0
  462. package/dist/Components/Touch/SelectModal.svelte +33 -15
  463. package/dist/Components/Touch/SelectModalProps.d.ts +22 -1
  464. package/dist/Components/Touch/SummaryCard.svelte +56 -14
  465. package/dist/Components/Touch/SummaryCardProps.d.ts +16 -3
  466. package/dist/Components/Touch/TextAreaModal.svelte +18 -9
  467. package/dist/Components/Touch/TextAreaModalProps.d.ts +21 -0
  468. package/dist/Components/Touch/TextModal.svelte +15 -32
  469. package/dist/Components/Touch/TextModalProps.d.ts +28 -1
  470. package/dist/Components/Touch/TouchCard.svelte +9 -47
  471. package/dist/Components/Touch/TouchCardProps.d.ts +21 -0
  472. package/dist/Components/Touch/TouchModal.svelte +105 -99
  473. package/dist/Components/Touch/TouchModalProps.d.ts +35 -1
  474. package/dist/Components/Touch/UtilityButton.svelte +36 -18
  475. package/dist/Components/Touch/UtilityButtonProps.d.ts +16 -0
  476. package/dist/Components/VerticalTabGroup.svelte +18 -40
  477. package/dist/Components/VerticalTabGroupButton.svelte +11 -50
  478. package/dist/Components/VerticalTabGroupProps.d.ts +15 -2
  479. package/dist/Contexts/AlertContext.svelte.d.ts +92 -8
  480. package/dist/Contexts/AlertContext.svelte.js +69 -6
  481. package/dist/Contexts/ContextMenuContext.svelte.d.ts +54 -8
  482. package/dist/Contexts/ContextMenuContext.svelte.js +48 -2
  483. package/dist/Contexts/TestContext.svelte.d.ts +27 -1
  484. package/dist/Contexts/TestContext.svelte.js +29 -1
  485. package/dist/Contexts/ToastContext.svelte.d.ts +29 -1
  486. package/dist/Contexts/ToastContext.svelte.js +93 -24
  487. package/dist/Contexts/TooltipContext.svelte.d.ts +68 -1
  488. package/dist/Contexts/TooltipContext.svelte.js +70 -7
  489. package/dist/Contexts/UntypedInputContext.svelte.d.ts +54 -5
  490. package/dist/Contexts/UntypedInputContext.svelte.js +87 -34
  491. package/dist/Delay/Delay.js +1 -1
  492. package/dist/Helpers/AsyncFlag.svelte.d.ts +39 -0
  493. package/dist/Helpers/AsyncFlag.svelte.js +72 -0
  494. package/dist/Helpers/Datamatrix.d.ts +10 -1
  495. package/dist/Helpers/Datamatrix.js +290 -1
  496. package/dist/Helpers/Helpers.svelte.d.ts +252 -18
  497. package/dist/Helpers/Helpers.svelte.js +271 -75
  498. package/dist/Helpers/INamed.d.ts +6 -0
  499. package/dist/Helpers/Storage.d.ts +67 -0
  500. package/dist/Helpers/Storage.js +138 -0
  501. package/dist/Helpers/dropdownPortal.d.ts +52 -0
  502. package/dist/Helpers/dropdownPortal.js +232 -0
  503. package/dist/Helpers/dropdownPortal.svelte.d.ts +2 -0
  504. package/dist/Helpers/dropdownPortal.svelte.js +5 -0
  505. package/dist/Helpers/memoiseByRow.d.ts +45 -0
  506. package/dist/Helpers/memoiseByRow.js +78 -0
  507. package/dist/Helpers/prefersReducedMotion.svelte.d.ts +27 -0
  508. package/dist/Helpers/prefersReducedMotion.svelte.js +18 -0
  509. package/dist/Helpers/useTooltip.svelte.d.ts +53 -0
  510. package/dist/Helpers/useTooltip.svelte.js +62 -0
  511. package/dist/Types/Examples/ExampleModal.svelte +2 -1
  512. package/dist/Types/Examples/ExampleSelectEnum.js +1 -1
  513. package/dist/Types/Internal/AsyncFlag.d.ts +7 -0
  514. package/dist/Types/Internal/AsyncFlag.js +1 -0
  515. package/dist/Types/Internal/BigRadioOption.d.ts +8 -0
  516. package/dist/Types/Internal/ButtonProp.d.ts +24 -2
  517. package/dist/Types/Internal/CallbackButton.d.ts +12 -0
  518. package/dist/Types/Internal/DateChange.d.ts +8 -0
  519. package/dist/Types/Internal/DatePickerType.d.ts +5 -0
  520. package/dist/Types/Internal/DatePickerType.js +6 -1
  521. package/dist/Types/Internal/IdentifiableToastMessage.d.ts +8 -0
  522. package/dist/Types/Internal/InputVariant.d.ts +5 -0
  523. package/dist/Types/Internal/InputVariant.js +6 -1
  524. package/dist/Types/Internal/Misc.d.ts +91 -0
  525. package/dist/Types/Internal/RefWrapper.d.ts +6 -0
  526. package/dist/Types/Internal/SelectOption.d.ts +8 -0
  527. package/dist/Types/Internal/Shape.d.ts +1 -0
  528. package/dist/Types/Internal/Shape.js +2 -1
  529. package/dist/Types/Internal/Side.d.ts +1 -0
  530. package/dist/Types/Internal/Side.js +2 -1
  531. package/dist/Types/Internal/Size.d.ts +5 -0
  532. package/dist/Types/Internal/Size.js +6 -1
  533. package/dist/Types/Internal/TabOption.d.ts +15 -5
  534. package/dist/Types/Internal/Ternary.d.ts +6 -0
  535. package/dist/Types/Internal/Ternary.js +7 -1
  536. package/dist/Types/Internal/ToastMessage.d.ts +28 -0
  537. package/dist/Types/Internal/Validity.d.ts +6 -0
  538. package/dist/Types/Internal/Validity.js +7 -1
  539. package/dist/Types/Internal/ValidityWrapper.d.ts +8 -0
  540. package/dist/Types/Internal/Variant.d.ts +5 -0
  541. package/dist/Types/Internal/Variant.js +6 -1
  542. package/dist/index.d.ts +27 -82
  543. package/dist/index.js +24 -62
  544. package/dist/scss/_mixins.scss +451 -167
  545. package/dist/scss/_motion.scss +57 -0
  546. package/dist/scss/_sizing.scss +16 -0
  547. package/dist/scss/colours.js +2 -2
  548. package/dist/scss/sizing.d.ts +9 -0
  549. package/dist/scss/sizing.js +10 -1
  550. package/package.json +35 -31
@@ -1,6 +1,9 @@
1
1
  <svelte:options runes />
2
2
 
3
- <script lang="ts" generics="T">
3
+ <script
4
+ lang="ts"
5
+ generics="T"
6
+ >
4
7
  import { type DndEvent, dndzone } from 'svelte-dnd-action';
5
8
  import { flip } from 'svelte/animate';
6
9
  import type { DragMenuHolderProps } from './DragMenuHolderProps.js';
@@ -13,22 +16,56 @@
13
16
  snippet: customSnippet,
14
17
  transformToDraggable,
15
18
  flipDurationMS = 60,
16
- label
19
+ label,
17
20
  }: DragMenuHolderProps<T> = $props();
18
21
 
19
22
  let items: Array<Draggable<T>> = $state([]);
23
+ /**
24
+ * `true` between `consider` and `finalise` events from dndzone.
25
+ * While true we suppress the `originalItems -> items` sync effect
26
+ * so an unrelated parent mutation cannot replace the user's
27
+ * in-progress drag state.
28
+ */
29
+ let isDragging = $state(false);
30
+
31
+ /** Compare two id sequences. Used to skip the sync effect when nothing changed. */
32
+ function sameIdSequence(a: ReadonlyArray<Draggable<T>>, b: ReadonlyArray<Draggable<T>>): boolean {
33
+ if (a.length !== b.length) {
34
+ return false;
35
+ }
36
+ for (let i = 0; i < a.length; i++) {
37
+ if (a[i].id !== b[i].id) {
38
+ return false;
39
+ }
40
+ }
41
+ return true;
42
+ }
20
43
 
21
44
  function consider(newItems: Array<Draggable<T>>) {
45
+ isDragging = true;
22
46
  items = newItems;
23
47
  }
24
48
  function finalise(newItems: Array<Draggable<T>>) {
25
49
  items = newItems;
50
+ isDragging = false;
26
51
  onUpdate(items.map((it) => it.original));
27
52
  }
28
53
 
29
54
  $effect.pre(() => {
30
- void originalItems;
31
- items = originalItems.map(transformToDraggable);
55
+ // Re-establish the dependency on the source array.
56
+ const next = originalItems.map(transformToDraggable);
57
+ // Skip when a drag is in progress so the user's transient
58
+ // ordering is not clobbered by an unrelated parent mutation.
59
+ if (isDragging) {
60
+ return;
61
+ }
62
+ // Skip when the logical content is unchanged. Prevents flicker
63
+ // when the parent recreates the array reference with the same
64
+ // items (e.g. an unrelated `$derived` invalidation).
65
+ if (sameIdSequence(items, next)) {
66
+ return;
67
+ }
68
+ items = next;
32
69
  });
33
70
 
34
71
  const snippet = $derived(customSnippet ?? draggableWithSelect);
@@ -79,30 +116,6 @@
79
116
  </div>
80
117
  </div>
81
118
 
82
- <!--
83
- tabindex="0"
84
- role="button"
85
- onkeydown={(e) => {
86
- const prevTarget = e.target;
87
- console.log(e.key);
88
- if (e.key == 'ArrowUp') {
89
- e.stopPropagation();
90
- up(item, index);
91
- } else if (e.key == 'ArrowDown') {
92
- e.stopPropagation();
93
- down(item, index);
94
- } else if (e.key == ' ') {
95
- alert('SPACEBAR');
96
- }
97
- tick().then(() => {
98
- if (prevTarget && 'focus' in prevTarget) {
99
- (prevTarget as HTMLElement).focus();
100
- } else {
101
- console.warn(`prev target is undefined`);
102
- }
103
- });
104
- }} -->
105
-
106
119
  <style>.top-label {
107
120
  position: absolute;
108
121
  left: 0.5rem;
@@ -157,5 +170,4 @@ div.dnd {
157
170
  flex: 1;
158
171
  gap: 0.5rem;
159
172
  padding: 0.5rem;
160
- outline-color: red;
161
173
  }</style>
@@ -1,10 +1,39 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { Draggable } from './Draggable.js';
3
+ /**
4
+ * Props for the {@link DragMenuHolder} component.
5
+ *
6
+ * `DragMenuHolder` wraps `svelte-dnd-action`'s `dndzone` to render a
7
+ * reorderable list of cards. The component maintains its own local
8
+ * copy of `items` synced from `originalItems` so that mid-drag
9
+ * updates to the parent's source array do not flicker. Generic over
10
+ * the consumer's payload type `T`.
11
+ */
3
12
  export interface DragMenuHolderProps<T> {
4
- items: Array<T>;
13
+ /**
14
+ * The source items. Pass a plain array; the component maps each
15
+ * entry through {@link transformToDraggable} to produce the
16
+ * {@link Draggable} view used internally.
17
+ *
18
+ * Marked `ReadonlyArray` to make the no-mutation contract explicit.
19
+ */
20
+ items: ReadonlyArray<T>;
21
+ /**
22
+ * Map a single payload `T` to its {@link Draggable} view. The
23
+ * returned object's `id` is used as the `{#each}` key, so it MUST
24
+ * be stable across re-renders of the same logical item.
25
+ */
5
26
  transformToDraggable: (item: T) => Draggable<T>;
27
+ /** Optional snippet to render each draggable card. Defaults to a `DraggableCard` with selection support. */
6
28
  snippet?: Snippet<[Draggable<T>, number]>;
29
+ /** Called when the user finalises a reorder. Receives the original payloads in their new order. */
7
30
  onUpdate: (items: Array<T>) => void;
31
+ /** Optional label rendered as an absolute-positioned tag on the holder. */
8
32
  label?: string;
33
+ /**
34
+ * Animation duration in milliseconds for the FLIP transition.
35
+ * Defaults to 60ms. Naming preserved for source compatibility;
36
+ * future versions may expose a `flipDurationMs` alias.
37
+ */
9
38
  flipDurationMS?: number;
10
39
  }
@@ -1,9 +1,12 @@
1
1
  <svelte:options runes />
2
2
 
3
3
  <script lang="ts">
4
+ import { devCatch } from '../../Helpers/Helpers.svelte.js';
4
5
  import Checkbox from '../Checkbox.svelte';
5
6
  import type { DraggableCardProps } from './DraggableCardProps.js';
6
7
 
8
+ // `selected` must remain `let` because it is `$bindable`; the rest
9
+ // are read-only props.
7
10
  let {
8
11
  selectable,
9
12
  title,
@@ -11,13 +14,34 @@
11
14
  index,
12
15
  selected = $bindable(false),
13
16
  touch = false,
14
- toggleSelected
17
+ toggleSelected,
15
18
  }: DraggableCardProps = $props();
19
+
20
+ function fireToggle(): void {
21
+ if (!toggleSelected) {
22
+ return;
23
+ }
24
+ const result = toggleSelected();
25
+ if (result instanceof Promise) {
26
+ result.catch((e: unknown) => {
27
+ devCatch(e);
28
+ });
29
+ }
30
+ }
16
31
  </script>
17
32
 
18
- <div class="card" class:touch>
33
+ <div
34
+ class="card"
35
+ class:touch
36
+ role={selectable ? 'checkbox' : 'listitem'}
37
+ aria-checked={selectable ? selected : undefined}
38
+ aria-label={title}
39
+ >
19
40
  {#if selectable}
20
- <div class="limit-size" class:touch>
41
+ <div
42
+ class="limit-size"
43
+ class:touch
44
+ >
21
45
  <Checkbox
22
46
  value={selected}
23
47
  onchange={(
@@ -26,16 +50,28 @@
26
50
  }
27
51
  ) => {
28
52
  e.stopPropagation();
29
- toggleSelected?.();
53
+ fireToggle();
30
54
  }}
31
55
  />
32
56
  </div>
33
57
  {/if}
34
- <div class="text" class:touch>
35
- <span class="title" class:touch>{title}</span>
36
- <span class="subtitle" class:touch>{subtitle}</span>
58
+ <div
59
+ class="text"
60
+ class:touch
61
+ >
62
+ <span
63
+ class="title"
64
+ class:touch>{title}</span
65
+ >
66
+ <span
67
+ class="subtitle"
68
+ class:touch>{subtitle}</span
69
+ >
37
70
  </div>
38
- <span class="row" class:touch>{index + 1}</span>
71
+ <span
72
+ class="row"
73
+ class:touch>{index + 1}</span
74
+ >
39
75
  </div>
40
76
 
41
77
  <style>.limit-size:not(.touch) {
@@ -1,9 +1,35 @@
1
+ /**
2
+ * Props for the {@link DraggableCard} component.
3
+ *
4
+ * `DraggableCard` is the card variant rendered inside
5
+ * `DragMenuHolder`. It can optionally render a selection checkbox
6
+ * and a 1-based row badge. `selected` is `$bindable` so the parent
7
+ * can two-way bind, while `toggleSelected` is the imperative
8
+ * callback used by the inner `Checkbox`.
9
+ */
1
10
  export interface DraggableCardProps {
11
+ /** When true, render the selection `Checkbox`. */
2
12
  selectable: boolean;
13
+ /** Card title shown on the first line. */
3
14
  title: string;
15
+ /** Card subtitle shown on the second line. */
4
16
  subtitle: string;
17
+ /** Zero-based index. The card renders `index + 1` as the row badge. */
5
18
  index: number;
19
+ /** Render a larger touch-friendly variant. Defaults to `false`. */
6
20
  touch?: boolean;
21
+ /**
22
+ * Whether the card is currently selected. Two-way bindable.
23
+ * Defaults to `false`.
24
+ */
7
25
  selected?: boolean;
8
- toggleSelected?: () => void;
26
+ /**
27
+ * Imperative selection toggle. Invoked by the inner `Checkbox`
28
+ * `onchange` handler. Optional; omit if `selectable` is false.
29
+ *
30
+ * May return a Promise for async toggling. Promise rejections
31
+ * are NOT caught by the card; the parent is responsible for
32
+ * routing them through `ToastContext.toast` or `devCatch`.
33
+ */
34
+ toggleSelected?: () => void | Promise<void>;
9
35
  }
@@ -2,16 +2,20 @@
2
2
 
3
3
  <script lang="ts">
4
4
  import Action from './Action.svelte';
5
+ import { Colour } from '../scss/colours.js';
5
6
  import type { FileCardProps } from './FileCardProps.js';
6
7
 
7
8
  const { file, ondelete }: FileCardProps = $props();
8
9
  </script>
9
10
 
10
- <div>
11
+ <div
12
+ role="listitem"
13
+ aria-label={file.name}
14
+ >
11
15
  <span>{file.name}</span>
12
16
  <Action
13
17
  icon={{ name: 'circle-cross' }}
14
- backgroundColour="transparent"
18
+ backgroundColour={Colour['$transparent-0']}
15
19
  label="Delete"
16
20
  onclick={ondelete}
17
21
  />
@@ -1,4 +1,20 @@
1
1
  export interface FileCardProps {
2
+ /**
3
+ * The browser `File` to display. Only `file.name` is rendered; the
4
+ * card itself does not read the file's contents.
5
+ *
6
+ * Note: this is the plain Web API `File` type. The card performs no
7
+ * allow-listing of MIME type or extension - validation is the
8
+ * responsibility of the consumer (typically `FileUpload`).
9
+ */
2
10
  file: File;
3
- ondelete: () => void;
11
+ /**
12
+ * Callback invoked when the user activates the delete affordance.
13
+ *
14
+ * May return a `Promise` to support callers that perform asynchronous
15
+ * cleanup (e.g. revoking an object URL or notifying a backend).
16
+ * Returned promises are not awaited by the card; consumers should
17
+ * handle their own error reporting.
18
+ */
19
+ ondelete: () => void | Promise<void>;
4
20
  }
@@ -1,17 +1,15 @@
1
1
  <svelte:options runes />
2
2
 
3
3
  <script lang="ts">
4
- import { ColourSet } from '../scss/colours.js';
4
+ import { cssLength } from '../Helpers/Helpers.svelte.js';
5
+ import { Colour, ColourSet } from '../scss/colours.js';
5
6
  import { InputVariant } from '../Types/Internal/InputVariant.js';
6
7
  import { Size } from '../Types/Internal/Size.js';
7
- import { onMount } from 'svelte';
8
8
  import Action from './Action.svelte';
9
9
  import FileCard from './FileCard.svelte';
10
- import type { FileUploadProps } from './FileUploadProps.js';
10
+ import type { FileRejection, FileUploadProps } from './FileUploadProps.js';
11
11
  import Icon from './Icon.svelte';
12
12
 
13
- let _files: FileList | null | undefined = $state();
14
-
15
13
  let {
16
14
  accept,
17
15
  files = $bindable([]),
@@ -21,9 +19,6 @@
21
19
  placeholder,
22
20
  required = false,
23
21
  variant = InputVariant.Default,
24
- selectNone = false,
25
- noresize = false,
26
- uppercase = false,
27
22
  disabled,
28
23
  optional = false,
29
24
  leftIcon,
@@ -34,16 +29,68 @@
34
29
  inputRef = $bindable(),
35
30
  onblur,
36
31
  onfocus,
32
+ onchange,
33
+ onreject,
34
+ maxSize,
35
+ allowedMimeTypes,
36
+ allowedExtensions,
37
37
  }: FileUploadProps = $props();
38
38
 
39
- function onchange(e: Event & { currentTarget: EventTarget & HTMLInputElement }) {
40
- const markedFiles = (e.target as HTMLInputElement).files ?? [];
41
- for (let i = 0; i < markedFiles.length; i++) {
42
- files.push(markedFiles[i]);
39
+ function reasonToReject(file: File): FileRejection['reason'] | null {
40
+ if (maxSize != undefined && file.size > maxSize) {
41
+ return 'size';
42
+ }
43
+ if (allowedMimeTypes && allowedMimeTypes.length > 0) {
44
+ if (!allowedMimeTypes.includes(file.type)) {
45
+ return 'mime';
46
+ }
47
+ }
48
+ if (allowedExtensions && allowedExtensions.length > 0) {
49
+ const lower = file.name.toLocaleLowerCase();
50
+ const matched = allowedExtensions.some((ext) => lower.endsWith(ext.toLocaleLowerCase()));
51
+ if (!matched) {
52
+ return 'extension';
53
+ }
54
+ }
55
+ return null;
56
+ }
57
+
58
+ function partition(candidates: ArrayLike<File>): {
59
+ accepted: ReadonlyArray<File>;
60
+ rejected: ReadonlyArray<FileRejection>;
61
+ } {
62
+ const accepted: Array<File> = [];
63
+ const rejected: Array<FileRejection> = [];
64
+ for (let i = 0; i < candidates.length; i++) {
65
+ const file = candidates[i];
66
+ const reason = reasonToReject(file);
67
+ if (reason == null) {
68
+ accepted.push(file);
69
+ } else {
70
+ rejected.push({ file, reason });
71
+ }
72
+ }
73
+ return { accepted, rejected };
74
+ }
75
+
76
+ function commit(accepted: ReadonlyArray<File>) {
77
+ if (accepted.length === 0) {
78
+ return;
79
+ }
80
+ files = [...files, ...accepted];
81
+ onchange?.(files);
82
+ }
83
+
84
+ function onPickerChange(e: Event & { currentTarget: EventTarget & HTMLInputElement }) {
85
+ const markedFiles = e.currentTarget.files ?? [];
86
+ const { accepted, rejected } = partition(markedFiles);
87
+ if (rejected.length > 0) {
88
+ onreject?.(rejected);
43
89
  }
90
+ commit(accepted);
44
91
  }
45
92
 
46
- function a() {
93
+ function openPicker() {
47
94
  inputRef?.showPicker();
48
95
  }
49
96
 
@@ -58,26 +105,22 @@
58
105
  return;
59
106
  }
60
107
 
61
- const len = e.dataTransfer.files.length;
62
- for (let i = 0; i < len; i++) {
63
- files.push(e.dataTransfer.files[i]);
108
+ const { accepted, rejected } = partition(e.dataTransfer.files);
109
+ if (rejected.length > 0) {
110
+ onreject?.(rejected);
64
111
  }
112
+ commit(accepted);
65
113
  }
66
114
 
67
115
  function ondragover(e: DragEvent) {
68
116
  e.preventDefault();
69
-
70
117
  dragover = true;
71
118
  }
72
119
 
73
120
  function ondragleave(e: DragEvent) {
74
121
  e.preventDefault();
75
-
76
122
  dragover = false;
77
123
  }
78
- onMount(() => {
79
- console.log('Drag and drop file uploading may not work');
80
- });
81
124
  </script>
82
125
 
83
126
  <label
@@ -87,9 +130,7 @@
87
130
  {ondragover}
88
131
  {ondragleave}
89
132
  >
90
- <!-- HACK removed label for modals for now because I couldn't think of a decent style that doesn't interfere with scrolling -->
91
133
  {#if labelTop && variant !== InputVariant.Modal}
92
- <!-- <span class="top-label" class:invalid={isInvalid}>{labelTop}{#if optional}<i>&nbsp;- optional</i>{/if}</span> -->
93
134
  <span
94
135
  class="top-label"
95
136
  class:for-default={variant === InputVariant.Default}
@@ -101,7 +142,6 @@
101
142
  >
102
143
  {/if}
103
144
  {/if}
104
- <!-- style="--background-colour: {leftIcon?.backgroundColour ?? rightIcon?.backgroundColour};" -->
105
145
  <div
106
146
  class="icon-container"
107
147
  class:for-modal={variant == InputVariant.Modal}
@@ -112,23 +152,19 @@
112
152
  size={leftIcon.size ?? Size.Medium}
113
153
  colour={leftIcon.colour}
114
154
  float
115
- left="0.75rem"
116
- top="50%"
117
- anchorX="0"
118
- anchorY="-50%"
155
+ left={cssLength('0.75rem')}
156
+ top={cssLength('50%')}
157
+ anchorX={cssLength('0')}
158
+ anchorY={cssLength('-50%')}
119
159
  clickable={!!onLeftIconClick}
120
160
  onclick={onLeftIconClick}
121
161
  />
122
162
  {/if}
123
163
  <input
124
164
  hidden
125
- class:noresize
126
- class:uppercase
127
- class:select-none={selectNone}
128
165
  class:left-pad={leftIcon != undefined}
129
166
  class:right-pad={rightIcon != undefined}
130
167
  class:for-modal={variant == InputVariant.Modal}
131
- bind:files={_files}
132
168
  {onblur}
133
169
  {accept}
134
170
  {onfocus}
@@ -138,16 +174,21 @@
138
174
  {required}
139
175
  {disabled}
140
176
  {multiple}
141
- {onchange}
177
+ onchange={onPickerChange}
142
178
  />
143
179
 
144
- <div class="file-list">
180
+ <div
181
+ class="file-list"
182
+ role="list"
183
+ aria-label="Selected files"
184
+ >
145
185
  {#if files.length}
146
186
  {#each files as file, index (file)}
147
187
  <FileCard
148
188
  {file}
149
189
  ondelete={() => {
150
- files.splice(index, 1);
190
+ files = files.toSpliced(index, 1);
191
+ onchange?.(files);
151
192
  }}
152
193
  />
153
194
  {/each}
@@ -160,26 +201,25 @@
160
201
  <div class="side">
161
202
  <Action
162
203
  colourSet={ColourSet.Secondary}
163
- backgroundColour="transparent"
204
+ backgroundColour={Colour['$transparent-0']}
164
205
  icon={{ name: 'upload' }}
165
206
  label="Upload"
166
207
  size={Size.Medium}
167
208
  onclick={() => {
168
- a();
209
+ openPicker();
169
210
  }}
170
211
  />
171
212
  </div>
172
- <!-- </div> -->
173
213
  {#if rightIcon}
174
214
  <Icon
175
215
  name={rightIcon.name}
176
216
  size={rightIcon.size ?? Size.Medium}
177
217
  colour={rightIcon.colour}
178
218
  float
179
- right={variant == InputVariant.Modal ? '1rem' : '0.5rem'}
180
- top="50%"
181
- anchorX="0"
182
- anchorY="-50%"
219
+ right={cssLength(variant == InputVariant.Modal ? '1rem' : '0.5rem')}
220
+ top={cssLength('50%')}
221
+ anchorX={cssLength('0')}
222
+ anchorY={cssLength('-50%')}
183
223
  clickable={!!onRightIconClick}
184
224
  onclick={onRightIconClick}
185
225
  />
@@ -1,24 +1,54 @@
1
1
  import type { InputVariant } from '../Types/Internal/InputVariant.js';
2
2
  import type { PartialIconProps } from './PartialIconProps.js';
3
+ /** Reason a file was rejected during the client-side validation pass. */
4
+ export type FileRejectReason = 'mime' | 'extension' | 'size';
5
+ export interface FileRejection {
6
+ file: File;
7
+ reason: FileRejectReason;
8
+ }
3
9
  export interface FileUploadProps {
10
+ /** HTML `accept` attribute hint. UI only - NOT a security boundary. */
4
11
  accept: string;
5
- files: Array<File>;
12
+ /** Bindable list of selected files. */
13
+ files: ReadonlyArray<File>;
14
+ /** Whether multiple files may be selected. */
6
15
  multiple?: boolean;
16
+ /** Blur handler forwarded to the underlying file input. */
7
17
  onblur?: (e: FocusEvent) => void;
18
+ /** Focus handler forwarded to the underlying file input. */
8
19
  onfocus?: (e: FocusEvent) => void;
20
+ /** Top label rendered above the drop zone in the default variant. */
9
21
  labelTop?: string | undefined;
22
+ /** Right-positioned label rendered inside the drop zone. */
10
23
  labelRight?: string;
24
+ /** Placeholder text. */
11
25
  placeholder?: string | undefined;
26
+ /** Whether at least one file is required. */
12
27
  required?: boolean;
28
+ /** Visual variant. */
13
29
  variant?: InputVariant;
14
- selectNone?: boolean;
30
+ /** When true, the visible "- optional" hint is rendered. */
15
31
  optional?: boolean;
16
- uppercase?: boolean;
32
+ /** Disable the drop zone and underlying input. */
17
33
  disabled?: boolean;
34
+ /** Optional left-positioned icon. */
18
35
  leftIcon?: PartialIconProps;
36
+ /** Optional right-positioned icon. */
19
37
  rightIcon?: PartialIconProps;
38
+ /** Click handler for the left icon. */
20
39
  onLeftIconClick?: () => void;
40
+ /** Click handler for the right icon. */
21
41
  onRightIconClick?: () => void;
42
+ /** Bindable ref to the hidden file input element. */
22
43
  inputRef?: HTMLInputElement | undefined;
23
- noresize?: boolean;
44
+ /** Notification of every change to `files`. */
45
+ onchange?: (files: ReadonlyArray<File>) => void;
46
+ /** Notification of files rejected by client-side validation. */
47
+ onreject?: (rejections: ReadonlyArray<FileRejection>) => void;
48
+ /** Maximum permitted file size, in bytes. */
49
+ maxSize?: number;
50
+ /** Allowed MIME types (exact match). */
51
+ allowedMimeTypes?: ReadonlyArray<string>;
52
+ /** Allowed file extensions including leading dot, case-insensitive. */
53
+ allowedExtensions?: ReadonlyArray<string>;
24
54
  }