@lavalogic/scoria 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -58
- package/dist/Components/AccordionGroup.svelte +46 -42
- package/dist/Components/AccordionGroupButton.svelte +106 -106
- package/dist/Components/AccordionGroupButtonProps.d.ts +27 -8
- package/dist/Components/AccordionGroupProps.d.ts +10 -2
- package/dist/Components/Action.svelte +137 -139
- package/dist/Components/ActionProps.d.ts +23 -3
- package/dist/Components/AlertModal.svelte +176 -125
- package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +1126 -0
- package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte.d.ts +4 -0
- package/dist/Components/AppointmentCalendar/AppointmentCalendarProps.d.ts +92 -0
- package/dist/Components/AppointmentCalendar/AppointmentCalendarProps.js +12 -0
- package/dist/Components/Base/BaseModal.svelte +172 -0
- package/dist/Components/Base/BaseModal.svelte.d.ts +4 -0
- package/dist/Components/Base/BaseModalProps.d.ts +73 -0
- package/dist/Components/Base/BaseModalProps.js +1 -0
- package/dist/Components/Base/ContextWrapper.svelte +72 -50
- package/dist/Components/Base/ContextWrapper.svelte.d.ts +24 -5
- package/dist/Components/Base/ContextWrapperProps.d.ts +22 -0
- package/dist/Components/Base/Pagination.svelte +198 -190
- package/dist/Components/Base/Pagination.svelte.d.ts +12 -2
- package/dist/Components/Base/PaginationProps.d.ts +60 -3
- package/dist/Components/Base/Snippets.svelte +36 -29
- package/dist/Components/Base/Snippets.svelte.d.ts +5 -1
- package/dist/Components/BigRadioSet.svelte +39 -30
- package/dist/Components/BigRadioSetProps.d.ts +17 -1
- package/dist/Components/Bubble.svelte +110 -77
- package/dist/Components/Bubble.svelte.d.ts +23 -2
- package/dist/Components/BubbleProps.d.ts +55 -4
- package/dist/Components/Button.svelte +209 -197
- package/dist/Components/ButtonProps.d.ts +66 -1
- package/dist/Components/Checkbox.svelte +100 -72
- package/dist/Components/Checkbox.svelte.d.ts +1 -12
- package/dist/Components/CheckboxProps.d.ts +27 -0
- package/dist/Components/CheckboxProps.js +1 -0
- package/dist/Components/CollapsibleCard.svelte +114 -83
- package/dist/Components/CollapsibleCardProps.d.ts +22 -1
- package/dist/Components/Contexts/ContextMenu.svelte +178 -157
- package/dist/Components/Contexts/ContextMenu.svelte.d.ts +26 -0
- package/dist/Components/Contexts/ContextMenuDivider.svelte +19 -11
- package/dist/Components/Contexts/ContextMenuDivider.svelte.d.ts +9 -0
- package/dist/Components/Contexts/ContextMenuOption.svelte +66 -57
- package/dist/Components/Contexts/ContextMenuOption.svelte.d.ts +12 -1
- package/dist/Components/Contexts/ContextMenuOptionProps.d.ts +34 -2
- package/dist/Components/Contexts/Toast.svelte +88 -64
- package/dist/Components/Contexts/Toast.svelte.d.ts +14 -0
- package/dist/Components/Contexts/ToastContainer.svelte +68 -49
- package/dist/Components/Contexts/ToastContainer.svelte.d.ts +14 -0
- package/dist/Components/Contexts/ToastProps.d.ts +14 -1
- package/dist/Components/Contexts/Tooltip.svelte +47 -36
- package/dist/Components/Contexts/Tooltip.svelte.d.ts +10 -0
- package/dist/Components/DataMatrixIcon.svelte +113 -42
- package/dist/Components/DataMatrixIconProps.d.ts +73 -1
- package/dist/Components/DateInput.svelte +144 -109
- package/dist/Components/DateInput.svelte.d.ts +1 -1
- package/dist/Components/DateOnlyInputProps.d.ts +31 -5
- package/dist/Components/DatePicker.svelte +301 -313
- package/dist/Components/DatePickerProps.d.ts +18 -1
- package/dist/Components/DateTimeInputProps.d.ts +30 -5
- package/dist/Components/DesktopModal.svelte +90 -119
- package/dist/Components/DesktopModalProps.d.ts +5 -4
- package/dist/Components/Dial.svelte +213 -151
- package/dist/Components/DialProps.d.ts +74 -2
- package/dist/Components/DimensionInput.svelte +171 -185
- package/dist/Components/DimensionInput.svelte.d.ts +1 -1
- package/dist/Components/DimensionInputProps.d.ts +39 -4
- package/dist/Components/DragMenu/DragMenuHolder.svelte +119 -107
- package/dist/Components/DragMenu/DragMenuHolderProps.d.ts +30 -1
- package/dist/Components/DragMenu/DraggableCard.svelte +77 -41
- package/dist/Components/DragMenu/DraggableCardProps.d.ts +27 -1
- package/dist/Components/FileCard.svelte +24 -20
- package/dist/Components/FileCardProps.d.ts +17 -1
- package/dist/Components/FileUpload.svelte +236 -196
- package/dist/Components/FileUploadProps.d.ts +34 -4
- package/dist/Components/GridInput.svelte +201 -191
- package/dist/Components/GridInput.svelte.d.ts +5 -5
- package/dist/Components/GridInputProps.d.ts +4 -1
- package/dist/Components/GridInputSet.svelte +31 -24
- package/dist/Components/GridInputSet.svelte.d.ts +5 -5
- package/dist/Components/GridInputSetProps.d.ts +4 -2
- package/dist/Components/HorizontalTabGroup.svelte +81 -79
- package/dist/Components/HorizontalTabGroupButton.svelte +51 -103
- package/dist/Components/HorizontalTabGroupProps.d.ts +15 -2
- package/dist/Components/Icon.svelte +144 -103
- package/dist/Components/IconProps.d.ts +54 -6
- package/dist/Components/Icons.d.ts +8 -0
- package/dist/Components/Icons.js +591 -572
- package/dist/Components/LoadingAnimation.svelte +39 -39
- package/dist/Components/LoadingAnimation.svelte.d.ts +1 -3
- package/dist/Components/LoadingAnimationProps.d.ts +16 -0
- package/dist/Components/LoadingAnimationProps.js +1 -0
- package/dist/Components/LoadingModal.svelte +48 -50
- package/dist/Components/LoadingModal.svelte.d.ts +1 -4
- package/dist/Components/LoadingModalProps.d.ts +17 -0
- package/dist/Components/LoadingModalProps.js +1 -0
- package/dist/Components/LoadingOverlay.svelte +28 -30
- package/dist/Components/LoadingOverlay.svelte.d.ts +1 -5
- package/dist/Components/LoadingOverlayProps.d.ts +28 -0
- package/dist/Components/LoadingOverlayProps.js +1 -0
- package/dist/Components/Modal.svelte +250 -255
- package/dist/Components/Modal.svelte.d.ts +1 -25
- package/dist/Components/ModalProps.d.ts +65 -0
- package/dist/Components/ModalProps.js +1 -0
- package/dist/Components/MultiSelect.svelte +238 -226
- package/dist/Components/MultiSelectCommonProps.d.ts +33 -4
- package/dist/Components/MultiSelectPropsAsObject.d.ts +5 -0
- package/dist/Components/MultiSelectPropsAsPrimitive.d.ts +6 -0
- package/dist/Components/Nav/CallbackButtonWithIcon.d.ts +22 -1
- package/dist/Components/Nav/Nav.svelte +115 -110
- package/dist/Components/Nav/Nav.svelte.d.ts +23 -2
- package/dist/Components/Nav/NavProps.d.ts +50 -3
- package/dist/Components/Nav/NavServiceMenuList.svelte +44 -35
- package/dist/Components/Nav/NavServiceMenuListProps.d.ts +25 -1
- package/dist/Components/Nav/NavTab.svelte +62 -91
- package/dist/Components/Nav/NavTab.svelte.d.ts +23 -2
- package/dist/Components/Nav/NavTabProps.d.ts +16 -2
- package/dist/Components/Nav/ServiceMenuItem.svelte +101 -92
- package/dist/Components/Nav/ServicesNav.svelte +96 -70
- package/dist/Components/Nav/ServicesNav.svelte.d.ts +23 -2
- package/dist/Components/Nav/ServicesNavProps.d.ts +20 -4
- package/dist/Components/Nav/SideMenuItemProps.d.ts +16 -0
- package/dist/Components/NumberInput.svelte +155 -145
- package/dist/Components/NumberInputProps.d.ts +37 -0
- package/dist/Components/PageHeading.svelte +25 -36
- package/dist/Components/PageHeading.svelte.d.ts +1 -6
- package/dist/Components/PageHeadingProps.d.ts +23 -0
- package/dist/Components/PageHeadingProps.js +1 -0
- package/dist/Components/PasswordInput.svelte +85 -73
- package/dist/Components/PasswordInput.svelte.d.ts +2 -2
- package/dist/Components/PasswordInputProps.d.ts +21 -0
- package/dist/Components/PasswordInputProps.js +1 -0
- package/dist/Components/Portal.svelte +36 -25
- package/dist/Components/PortalProps.d.ts +20 -1
- package/dist/Components/ProgressBubble.svelte +129 -84
- package/dist/Components/ProgressBubbleProps.d.ts +23 -2
- package/dist/Components/QuerySelect.svelte +384 -440
- package/dist/Components/QuerySelect.svelte.d.ts +2 -29
- package/dist/Components/QuerySelectProps.d.ts +66 -0
- package/dist/Components/QuerySelectProps.js +1 -0
- package/dist/Components/SingleSelect.svelte +268 -290
- package/dist/Components/SingleSelectCommonProps.d.ts +43 -5
- package/dist/Components/SingleSelectPropsAsObject.d.ts +7 -0
- package/dist/Components/SingleSelectPropsAsPrimitive.d.ts +8 -0
- package/dist/Components/StepButton.svelte +70 -120
- package/dist/Components/StepForm.svelte +147 -147
- package/dist/Components/StepFormProps.d.ts +16 -2
- package/dist/Components/Switch.svelte +84 -47
- package/dist/Components/Switch.svelte.d.ts +1 -1
- package/dist/Components/SwitchProps.d.ts +46 -0
- package/dist/Components/Table/Body/HeightData.d.ts +1 -6
- package/dist/Components/Table/Body/HeightData.js +8 -0
- package/dist/Components/Table/Body/QuickSearchCell.svelte +697 -641
- package/dist/Components/Table/Body/QuickSearchCell.svelte.d.ts +12 -11
- package/dist/Components/Table/Body/QuickSearchCellProps.d.ts +6 -0
- package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +68 -34
- package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte.d.ts +24 -2
- package/dist/Components/Table/Body/Rows/ColumnHighlightProps.d.ts +3 -0
- package/dist/Components/Table/Body/Rows/ColumnList.svelte +66 -56
- package/dist/Components/Table/Body/Rows/ColumnList.svelte.d.ts +12 -11
- package/dist/Components/Table/Body/Rows/ColumnListProps.d.ts +1 -0
- package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +515 -182
- package/dist/Components/Table/Body/Rows/ColumnListRow.svelte.d.ts +12 -11
- package/dist/Components/Table/Body/Rows/ColumnListRowProps.d.ts +5 -0
- package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +79 -49
- package/dist/Components/Table/Body/Rows/Columns/AccessorComponentProps.d.ts +12 -0
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +203 -191
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte.d.ts +12 -12
- package/dist/Components/Table/Body/Rows/Columns/ActionsColumn.d.ts +9 -0
- package/dist/Components/Table/Body/Rows/Columns/ActionsTableCell.d.ts +5 -0
- package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +150 -115
- package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte.d.ts +14 -13
- package/dist/Components/Table/Body/Rows/Columns/BubbleCellProps.d.ts +12 -0
- package/dist/Components/Table/Body/Rows/Columns/BubbleCellProps.js +1 -0
- package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +149 -129
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +149 -126
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte.d.ts +12 -11
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCellProps.d.ts +7 -0
- package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +142 -108
- package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte.d.ts +17 -11
- package/dist/Components/Table/Body/Rows/Columns/RowSelectionColumn.d.ts +8 -0
- package/dist/Components/Table/Body/Rows/Columns/RowSelectionTableCell.d.ts +5 -0
- package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +11 -0
- package/dist/Components/Table/Body/Rows/Columns/SelectTableCell.d.ts +11 -0
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +87 -72
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte.d.ts +11 -0
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +148 -137
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte.d.ts +13 -18
- package/dist/Components/Table/Body/Rows/Columns/TableCheckboxProps.d.ts +17 -0
- package/dist/Components/Table/Body/Rows/Columns/TableCheckboxProps.js +1 -0
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +159 -144
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte.d.ts +1 -7
- package/dist/Components/Table/Body/Rows/Columns/TableColumnProps.d.ts +16 -0
- package/dist/Components/Table/Body/Rows/Columns/TableColumnProps.js +1 -0
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +279 -249
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte.d.ts +12 -11
- package/dist/Components/Table/Body/Rows/Columns/TableDatePickerProps.d.ts +9 -0
- package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +249 -370
- package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte.d.ts +20 -12
- package/dist/Components/Table/Body/Rows/Columns/TableQueryCell.d.ts +8 -0
- package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +9 -0
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +291 -354
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte.d.ts +12 -11
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelectProps.d.ts +8 -0
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +201 -189
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte.d.ts +2 -5
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckboxProps.d.ts +14 -0
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckboxProps.js +1 -0
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +263 -325
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte.d.ts +13 -12
- package/dist/Components/Table/Body/Rows/Columns/TableSelectProps.d.ts +6 -0
- package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +230 -381
- package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte.d.ts +12 -11
- package/dist/Components/Table/Body/Rows/Columns/TableTextInputProps.d.ts +6 -0
- package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +187 -177
- package/dist/Components/Table/Body/Rows/Columns/_helpers/useAsyncEditable.svelte.d.ts +104 -0
- package/dist/Components/Table/Body/Rows/Columns/_helpers/useAsyncEditable.svelte.js +215 -0
- package/dist/Components/Table/Body/Rows/TableRow.svelte +331 -263
- package/dist/Components/Table/Body/Rows/TableRow.svelte.d.ts +2 -10
- package/dist/Components/Table/Body/Rows/TableRowProps.d.ts +11 -2
- package/dist/Components/Table/Body/TableBody.svelte +198 -81
- package/dist/Components/Table/Body/TableBody.svelte.d.ts +15 -22
- package/dist/Components/Table/Body/TableBodyProps.d.ts +9 -7
- package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +18 -12
- package/dist/Components/Table/ColumnFactory.svelte.d.ts +43 -0
- package/dist/Components/Table/ColumnFactory.svelte.js +339 -0
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte +41 -39
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte.d.ts +12 -11
- package/dist/Components/Table/Headers/SelectAllHeader.svelte +30 -28
- package/dist/Components/Table/Headers/SelectAllHeader.svelte.d.ts +12 -11
- package/dist/Components/Table/Headers/TableHead.svelte +434 -294
- package/dist/Components/Table/Headers/TableHead.svelte.d.ts +13 -16
- package/dist/Components/Table/Headers/TableHeadProps.d.ts +10 -0
- package/dist/Components/Table/Headers/TableHeadProps.js +1 -0
- package/dist/Components/Table/Misc/ColumnPanel.svelte +154 -96
- package/dist/Components/Table/Misc/ColumnPanel.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/ColumnPanelModal.svelte +112 -99
- package/dist/Components/Table/Misc/ColumnPanelModal.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/ColumnPanelModalProps.d.ts +5 -0
- package/dist/Components/Table/Misc/FilterInput.svelte +545 -556
- package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/FilterPanel.svelte +409 -51
- package/dist/Components/Table/Misc/FilterPanel.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/FilterPanelModal.svelte +30 -77
- package/dist/Components/Table/Misc/FilterPanelModal.svelte.d.ts +2 -23
- package/dist/Components/Table/Misc/SidePanel.svelte +35 -32
- package/dist/Components/Table/Misc/SidePanel.svelte.d.ts +1 -7
- package/dist/Components/Table/Misc/SidePanelProps.d.ts +17 -0
- package/dist/Components/Table/Misc/SidePanelProps.js +1 -0
- package/dist/Components/Table/Misc/TableFooter.svelte +315 -306
- package/dist/Components/Table/Misc/TableFooter.svelte.d.ts +13 -14
- package/dist/Components/Table/Misc/TableFooterProps.d.ts +8 -0
- package/dist/Components/Table/Misc/TableFooterProps.js +1 -0
- package/dist/Components/Table/Misc/TableHorizontalBar.svelte +126 -157
- package/dist/Components/Table/Misc/TableHorizontalBar.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/TableSidebar.svelte +158 -177
- package/dist/Components/Table/Misc/TableSidebar.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/ToolboxPanel.svelte +147 -81
- package/dist/Components/Table/Misc/ToolboxPanel.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +107 -100
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/ToolboxPanelModalProps.d.ts +5 -0
- package/dist/Components/Table/Misc/numberDateFilterTypes.d.ts +7 -4
- package/dist/Components/Table/Misc/numberDateFilterTypes.js +8 -3
- package/dist/Components/Table/Misc/stringFilterTypes.d.ts +6 -4
- package/dist/Components/Table/Misc/stringFilterTypes.js +7 -3
- package/dist/Components/Table/NestedTable.svelte +132 -88
- package/dist/Components/Table/NestedTable.svelte.d.ts +2 -10
- package/dist/Components/Table/NestedTableProps.d.ts +25 -0
- package/dist/Components/Table/NestedTableProps.js +1 -0
- package/dist/Components/Table/SubApis.svelte.d.ts +23 -0
- package/dist/Components/Table/SubApis.svelte.js +359 -0
- package/dist/Components/Table/Table.svelte +694 -519
- package/dist/Components/Table/Table.svelte.d.ts +24 -1
- package/dist/Components/Table/TableHelpers.svelte.d.ts +58 -0
- package/dist/Components/Table/TableHelpers.svelte.js +88 -0
- package/dist/Components/Table/Types/Columns/Column.d.ts +10 -0
- package/dist/Components/Table/Types/Columns/ColumnPinningState.d.ts +12 -0
- package/dist/Components/Table/Types/Columns/ColumnSizingState.d.ts +8 -0
- package/dist/Components/Table/Types/Columns/ColumnType.d.ts +17 -0
- package/dist/Components/Table/Types/Columns/ColumnType.js +18 -1
- package/dist/Components/Table/Types/Columns/DateColumn.d.ts +6 -0
- package/dist/Components/Table/Types/Columns/DateTableCell.d.ts +7 -0
- package/dist/Components/Table/Types/Columns/Definitions/AccessorFn.d.ts +13 -0
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +28 -3
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.js +15 -0
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.d.ts +10 -0
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorType.js +11 -1
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.d.ts +23 -2
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js +9 -2
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +21 -2
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.js +8 -0
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +29 -3
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js +11 -0
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.d.ts +23 -0
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.js +8 -0
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +31 -0
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.js +17 -3
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.d.ts +21 -2
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.js +7 -0
- package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +29 -1
- package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +17 -3
- package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +122 -11
- package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.js +77 -11
- package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.d.ts +9 -0
- package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.d.ts +41 -1
- package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js +16 -0
- package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.d.ts +19 -1
- package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.js +12 -1
- package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.d.ts +11 -0
- package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.js +6 -3
- package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.d.ts +19 -0
- package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.js +25 -1
- package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.d.ts +26 -0
- package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.js +20 -5
- package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +43 -7
- package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.js +18 -3
- package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.d.ts +19 -5
- package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.js +16 -5
- package/dist/Components/Table/Types/Columns/Definitions/JSONColumnDefSet.d.ts +14 -0
- package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +34 -2
- package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +30 -7
- package/dist/Components/Table/Types/Columns/Definitions/ValidationFn.d.ts +17 -0
- package/dist/Components/Table/Types/Columns/DefsWrapper.d.ts +10 -0
- package/dist/Components/Table/Types/Columns/DisplayType.d.ts +13 -0
- package/dist/Components/Table/Types/Columns/DisplayType.js +14 -1
- package/dist/Components/Table/Types/Columns/ExpandColumn.d.ts +5 -0
- package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +7 -0
- package/dist/Components/Table/Types/Columns/JSONColumnPinningState.d.ts +6 -0
- package/dist/Components/Table/Types/Columns/ProgressBarColumn.d.ts +5 -0
- package/dist/Components/Table/Types/Columns/ProgressBarTableCell.d.ts +9 -0
- package/dist/Components/Table/Types/Columns/TableActionButton.d.ts +12 -0
- package/dist/Components/Table/Types/Columns/TableCell.d.ts +16 -2
- package/dist/Components/Table/Types/Columns/VisibilityState.d.ts +12 -0
- package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.d.ts +173 -0
- package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.js +241 -0
- package/dist/Components/Table/Types/Context/FilteringState.svelte.d.ts +166 -0
- package/dist/Components/Table/Types/Context/FilteringState.svelte.js +180 -0
- package/dist/Components/Table/Types/Context/FocusState.svelte.d.ts +316 -0
- package/dist/Components/Table/Types/Context/FocusState.svelte.js +751 -0
- package/dist/Components/Table/Types/Context/ITable.d.ts +10 -0
- package/dist/Components/Table/Types/Context/PreferencesState.svelte.d.ts +242 -0
- package/dist/Components/Table/Types/Context/PreferencesState.svelte.js +317 -0
- package/dist/Components/Table/Types/Context/ReadonlyRowModel.d.ts +14 -3
- package/dist/Components/Table/Types/Context/Row.d.ts +18 -0
- package/dist/Components/Table/Types/Context/RowModel.d.ts +11 -0
- package/dist/Components/Table/Types/Context/SelectionState.svelte.d.ts +260 -0
- package/dist/Components/Table/Types/Context/SelectionState.svelte.js +613 -0
- package/dist/Components/Table/Types/Context/SortingState.svelte.d.ts +112 -0
- package/dist/Components/Table/Types/Context/SortingState.svelte.js +272 -0
- package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +547 -53
- package/dist/Components/Table/Types/Context/TableContext.svelte.js +959 -1259
- package/dist/Components/Table/Types/Context/TableInitOptions.d.ts +16 -0
- package/dist/Components/Table/Types/Context/TableSettings.d.ts +20 -0
- package/dist/Components/Table/Types/Context/VirtualisationState.svelte.d.ts +167 -0
- package/dist/Components/Table/Types/Context/VirtualisationState.svelte.js +226 -0
- package/dist/Components/Table/Types/Coordinates/CellCoordinates.d.ts +12 -0
- package/dist/Components/Table/Types/Coordinates/CellCoordinatesWithoutColumn.d.ts +5 -0
- package/dist/Components/Table/Types/Coordinates/ColumnIndices.d.ts +16 -2
- package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.d.ts +143 -0
- package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.js +454 -0
- package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +21 -0
- package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +10 -0
- package/dist/Components/Table/Types/DataRepository/IRemoteDataRepository.d.ts +16 -0
- package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.d.ts +87 -3
- package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.js +112 -7
- package/dist/Components/Table/Types/DataRepository/SortingState.d.ts +12 -0
- package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +87 -2
- package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +74 -1
- package/dist/Components/Table/Types/ExpandedPanel.d.ts +9 -0
- package/dist/Components/Table/Types/ExpandedPanel.js +10 -1
- package/dist/Components/Table/Types/Filtering/ColumnFiltersState.d.ts +17 -0
- package/dist/Components/Table/Types/Filtering/CustomFilter.d.ts +21 -0
- package/dist/Components/Table/Types/Filtering/CustomFilterType.d.ts +5 -0
- package/dist/Components/Table/Types/Filtering/CustomFilterType.js +6 -1
- package/dist/Components/Table/Types/Filtering/CustomRemoteFilters.d.ts +6 -0
- package/dist/Components/Table/Types/Filtering/FilterFn.d.ts +28 -0
- package/dist/Components/Table/Types/Filtering/FilterMode.d.ts +7 -0
- package/dist/Components/Table/Types/Filtering/FilterType.d.ts +8 -0
- package/dist/Components/Table/Types/Filtering/FilterType.js +9 -1
- package/dist/Components/Table/Types/Filtering/FilterValueType.d.ts +11 -0
- package/dist/Components/Table/Types/Filtering/FilterValueType.js +12 -1
- package/dist/Components/Table/Types/Filtering/HasCustomFilterFunction.d.ts +23 -2
- package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.d.ts +19 -12
- package/dist/Components/Table/Types/Filtering/NumberDateFilterMode.js +18 -14
- package/dist/Components/Table/Types/Filtering/StringFilterMode.d.ts +22 -15
- package/dist/Components/Table/Types/Filtering/StringFilterMode.js +22 -16
- package/dist/Components/Table/Types/Focus/MultiFocusEdge.d.ts +8 -0
- package/dist/Components/Table/Types/Focus/MultiFocusEdge.js +9 -1
- package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.d.ts +22 -0
- package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.js +22 -0
- package/dist/Components/Table/Types/Header.d.ts +8 -0
- package/dist/Components/Table/Types/HeaderGroup.d.ts +7 -0
- package/dist/Components/Table/Types/Layout/CellPinning.d.ts +1 -0
- package/dist/Components/Table/Types/Layout/CellPinning.js +8 -0
- package/dist/Components/Table/Types/OnChangeFn.d.ts +11 -0
- package/dist/Components/Table/Types/Pagination/PaginationState.d.ts +9 -0
- package/dist/Components/Table/Types/Pagination/PaginationType.d.ts +10 -0
- package/dist/Components/Table/Types/Pagination/PaginationType.js +11 -1
- package/dist/Components/Table/Types/Public/AnyEditEvent.d.ts +30 -0
- package/dist/Components/Table/Types/Public/AnyEditEvent.js +1 -0
- package/dist/Components/Table/Types/Public/BaseColumnOptions.d.ts +44 -0
- package/dist/Components/Table/Types/Public/BaseColumnOptions.js +1 -0
- package/dist/Components/Table/Types/Public/ColumnFactory.d.ts +35 -0
- package/dist/Components/Table/Types/Public/ColumnFactory.js +1 -0
- package/dist/Components/Table/Types/Public/ColumnOptions.d.ts +238 -0
- package/dist/Components/Table/Types/Public/ColumnOptions.js +1 -0
- package/dist/Components/Table/Types/Public/ColumnSpec.d.ts +39 -0
- package/dist/Components/Table/Types/Public/ColumnSpec.js +1 -0
- package/dist/Components/Table/Types/Public/CreateTableOptions.d.ts +87 -0
- package/dist/Components/Table/Types/Public/CreateTableOptions.js +1 -0
- package/dist/Components/Table/Types/Public/KeyConstraints.d.ts +42 -0
- package/dist/Components/Table/Types/Public/KeyConstraints.js +22 -0
- package/dist/Components/Table/Types/Public/RowSource.d.ts +87 -0
- package/dist/Components/Table/Types/Public/RowSource.js +1 -0
- package/dist/Components/Table/Types/Public/SelectionOptions.d.ts +26 -0
- package/dist/Components/Table/Types/Public/SelectionOptions.js +1 -0
- package/dist/Components/Table/Types/Public/Table.d.ts +39 -0
- package/dist/Components/Table/Types/Public/Table.js +1 -0
- package/dist/Components/Table/Types/Public/TableInitialState.d.ts +26 -0
- package/dist/Components/Table/Types/Public/TableInitialState.js +1 -0
- package/dist/Components/Table/Types/Public/TablePersistence.d.ts +38 -0
- package/dist/Components/Table/Types/Public/TablePersistence.js +1 -0
- package/dist/Components/Table/Types/Public/TableSubApis.d.ts +157 -0
- package/dist/Components/Table/Types/Public/TableSubApis.js +1 -0
- package/dist/Components/Table/Types/Public/index.d.ts +20 -0
- package/dist/Components/Table/Types/Public/index.js +8 -0
- package/dist/Components/Table/Types/Toolbar/ToolbarPosition.d.ts +4 -0
- package/dist/Components/Table/Types/Toolbar/ToolbarPosition.js +5 -1
- package/dist/Components/Table/createTable.svelte.d.ts +53 -0
- package/dist/Components/Table/createTable.svelte.js +269 -0
- package/dist/Components/Test/TestContextConsumer.svelte +13 -13
- package/dist/Components/TextArea.svelte +127 -108
- package/dist/Components/TextAreaProps.d.ts +37 -0
- package/dist/Components/TextInput.svelte +166 -147
- package/dist/Components/TextInputProps.d.ts +58 -1
- package/dist/Components/ThreeStateRadio.svelte +140 -143
- package/dist/Components/ThreeStateRadioProps.d.ts +29 -1
- package/dist/Components/Touch/BoolCard.svelte +45 -52
- package/dist/Components/Touch/BoolCard.svelte.d.ts +1 -10
- package/dist/Components/Touch/BoolCardProps.d.ts +21 -0
- package/dist/Components/Touch/BoolCardProps.js +1 -0
- package/dist/Components/Touch/DateModal.svelte +209 -217
- package/dist/Components/Touch/DateModal.svelte.d.ts +1 -17
- package/dist/Components/Touch/DateModalProps.d.ts +36 -0
- package/dist/Components/Touch/DateModalProps.js +1 -0
- package/dist/Components/Touch/EditCard.svelte +59 -52
- package/dist/Components/Touch/EditCardProps.d.ts +21 -0
- package/dist/Components/Touch/InfoCard.svelte +35 -28
- package/dist/Components/Touch/InfoCardProps.d.ts +9 -0
- package/dist/Components/Touch/InfoTextCard.svelte +28 -21
- package/dist/Components/Touch/InfoTextCardProps.d.ts +8 -0
- package/dist/Components/Touch/ModalExplanation.svelte +17 -20
- package/dist/Components/Touch/ModalExplanation.svelte.d.ts +1 -6
- package/dist/Components/Touch/ModalExplanationProps.d.ts +22 -0
- package/dist/Components/Touch/ModalExplanationProps.js +1 -0
- package/dist/Components/Touch/NumberKeyboard.svelte +225 -268
- package/dist/Components/Touch/NumberKeyboardProps.d.ts +19 -0
- package/dist/Components/Touch/NumberModal.svelte +79 -69
- package/dist/Components/Touch/NumberModalProps.d.ts +23 -1
- package/dist/Components/Touch/PlusMinusCard.svelte +48 -52
- package/dist/Components/Touch/PlusMinusCard.svelte.d.ts +1 -6
- package/dist/Components/Touch/PlusMinusCardProps.d.ts +18 -0
- package/dist/Components/Touch/PlusMinusCardProps.js +1 -0
- package/dist/Components/Touch/SelectModal.svelte +123 -105
- package/dist/Components/Touch/SelectModalProps.d.ts +22 -1
- package/dist/Components/Touch/SummaryCard.svelte +107 -65
- package/dist/Components/Touch/SummaryCardProps.d.ts +16 -3
- package/dist/Components/Touch/TextAreaModal.svelte +95 -86
- package/dist/Components/Touch/TextAreaModalProps.d.ts +21 -0
- package/dist/Components/Touch/TextModal.svelte +106 -123
- package/dist/Components/Touch/TextModalProps.d.ts +28 -1
- package/dist/Components/Touch/TouchCard.svelte +34 -72
- package/dist/Components/Touch/TouchCardProps.d.ts +21 -0
- package/dist/Components/Touch/TouchModal.svelte +265 -259
- package/dist/Components/Touch/TouchModalProps.d.ts +35 -1
- package/dist/Components/Touch/UtilityButton.svelte +116 -98
- package/dist/Components/Touch/UtilityButtonProps.d.ts +16 -0
- package/dist/Components/VerticalTabGroup.svelte +80 -102
- package/dist/Components/VerticalTabGroupButton.svelte +59 -98
- package/dist/Components/VerticalTabGroupProps.d.ts +15 -2
- package/dist/Contexts/AlertContext.svelte.d.ts +92 -8
- package/dist/Contexts/AlertContext.svelte.js +69 -6
- package/dist/Contexts/ContextMenuContext.svelte.d.ts +54 -8
- package/dist/Contexts/ContextMenuContext.svelte.js +48 -2
- package/dist/Contexts/TestContext.svelte.d.ts +27 -1
- package/dist/Contexts/TestContext.svelte.js +29 -1
- package/dist/Contexts/ToastContext.svelte.d.ts +29 -1
- package/dist/Contexts/ToastContext.svelte.js +93 -24
- package/dist/Contexts/TooltipContext.svelte.d.ts +68 -1
- package/dist/Contexts/TooltipContext.svelte.js +70 -7
- package/dist/Contexts/UntypedInputContext.svelte.d.ts +54 -5
- package/dist/Contexts/UntypedInputContext.svelte.js +87 -34
- package/dist/Delay/Delay.js +1 -1
- package/dist/Helpers/AsyncFlag.svelte.d.ts +39 -0
- package/dist/Helpers/AsyncFlag.svelte.js +72 -0
- package/dist/Helpers/Datamatrix.d.ts +19 -10
- package/dist/Helpers/Datamatrix.js +291 -2
- package/dist/Helpers/Helpers.svelte.d.ts +252 -17
- package/dist/Helpers/Helpers.svelte.js +271 -60
- package/dist/Helpers/INamed.d.ts +6 -0
- package/dist/Helpers/Storage.d.ts +67 -0
- package/dist/Helpers/Storage.js +138 -0
- package/dist/Helpers/dropdownPortal.d.ts +52 -0
- package/dist/Helpers/dropdownPortal.js +232 -0
- package/dist/Helpers/dropdownPortal.svelte.d.ts +2 -0
- package/dist/Helpers/dropdownPortal.svelte.js +5 -0
- package/dist/Helpers/memoiseByRow.d.ts +45 -0
- package/dist/Helpers/memoiseByRow.js +78 -0
- package/dist/Helpers/prefersReducedMotion.svelte.d.ts +27 -0
- package/dist/Helpers/prefersReducedMotion.svelte.js +18 -0
- package/dist/Helpers/useTooltip.svelte.d.ts +53 -0
- package/dist/Helpers/useTooltip.svelte.js +62 -0
- package/dist/Types/Examples/ExampleModal.svelte +35 -34
- package/dist/Types/Examples/ExampleSelectEnum.js +1 -1
- package/dist/Types/Internal/AsyncFlag.d.ts +7 -0
- package/dist/Types/Internal/AsyncFlag.js +1 -0
- package/dist/Types/Internal/BigRadioOption.d.ts +8 -0
- package/dist/Types/Internal/ButtonProp.d.ts +24 -2
- package/dist/Types/Internal/CallbackButton.d.ts +12 -0
- package/dist/Types/Internal/DateChange.d.ts +8 -0
- package/dist/Types/Internal/DatePickerType.d.ts +5 -0
- package/dist/Types/Internal/DatePickerType.js +6 -1
- package/dist/Types/Internal/IdentifiableToastMessage.d.ts +8 -0
- package/dist/Types/Internal/InputVariant.d.ts +5 -0
- package/dist/Types/Internal/InputVariant.js +6 -1
- package/dist/Types/Internal/Misc.d.ts +91 -0
- package/dist/Types/Internal/RefWrapper.d.ts +6 -0
- package/dist/Types/Internal/SelectOption.d.ts +8 -0
- package/dist/Types/Internal/Shape.d.ts +1 -0
- package/dist/Types/Internal/Shape.js +2 -1
- package/dist/Types/Internal/Side.d.ts +1 -0
- package/dist/Types/Internal/Side.js +2 -1
- package/dist/Types/Internal/Size.d.ts +5 -0
- package/dist/Types/Internal/Size.js +6 -1
- package/dist/Types/Internal/TabOption.d.ts +15 -5
- package/dist/Types/Internal/Ternary.d.ts +6 -0
- package/dist/Types/Internal/Ternary.js +7 -1
- package/dist/Types/Internal/ToastMessage.d.ts +28 -0
- package/dist/Types/Internal/Validity.d.ts +6 -0
- package/dist/Types/Internal/Validity.js +7 -1
- package/dist/Types/Internal/ValidityWrapper.d.ts +8 -0
- package/dist/Types/Internal/Variant.d.ts +5 -0
- package/dist/Types/Internal/Variant.js +6 -1
- package/dist/index.d.ts +27 -82
- package/dist/index.js +24 -62
- package/dist/scss/_basics.scss +12 -12
- package/dist/scss/_colours.scss +134 -134
- package/dist/scss/_mixins.scss +3300 -3016
- package/dist/scss/_motion.scss +57 -0
- package/dist/scss/_sizing.scss +85 -69
- package/dist/scss/_transitions.scss +8 -8
- package/dist/scss/colours.js +2 -2
- package/dist/scss/sizing.d.ts +9 -0
- package/dist/scss/sizing.js +10 -1
- package/package.json +6 -2
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in remote data repository used by `createTable({ rows: { kind: 'remote' } })`.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1 of the new Table API: this class absorbs the URL construction,
|
|
5
|
+
* filter encoding, pagination, sort, debouncing, and page-size persistence
|
|
6
|
+
* that every consumer was previously reimplementing for itself (see the
|
|
7
|
+
* FloWMS-owned `RemoteTableDataRepository.svelte.ts` for the prior shape).
|
|
8
|
+
*
|
|
9
|
+
* The default filter-encoding strategy is `'query-string'`, which produces
|
|
10
|
+
* a flat `?filter[<id>]=<value>&page=<n>&pageSize=<m>&sort=<col>&direction=<asc|desc>`
|
|
11
|
+
* URL. Consumers whose backend expects a different shape pass a custom
|
|
12
|
+
* `filterEncoding: { encode }` function. Consumers needing complete
|
|
13
|
+
* control over the request lifecycle drop to `kind: 'custom'`, which
|
|
14
|
+
* bypasses this repository entirely.
|
|
15
|
+
*
|
|
16
|
+
* The repository extends `TableDataRepository` for its pagination-state /
|
|
17
|
+
* filter-modes / force-refresh plumbing and implements
|
|
18
|
+
* `IRemoteDataRepository<TRow>` for the surface `TableContext` consumes.
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
*
|
|
22
|
+
* Out of scope for Phase 1:
|
|
23
|
+
*
|
|
24
|
+
* - Sophisticated filter-mode encoding (`StringFilterMode.NotIn`, the
|
|
25
|
+
* `[min, max]` tuple form for ranges, etc.). The Phase 1 default
|
|
26
|
+
* encoder emits raw `?filter[<id>]=<JSON-encoded-value>`. Consumers
|
|
27
|
+
* needing the rich encoding the FloWMS repo currently does should pass
|
|
28
|
+
* a custom encoder in Phase 1 and we will lift the common encodings
|
|
29
|
+
* into the library in Phase 2 once the audit of the consumer's actual
|
|
30
|
+
* backend shape is complete.
|
|
31
|
+
* - The five filter callbacks (`dateFilter` / `numberFilter` / etc.).
|
|
32
|
+
* These are local-only and not meaningful for a remote source. The
|
|
33
|
+
* interface inherits them as optional; left undefined here.
|
|
34
|
+
*/
|
|
35
|
+
import { browser } from '$app/environment';
|
|
36
|
+
import { devCatch } from '../../../../Helpers/Helpers.svelte.js';
|
|
37
|
+
import { FilterType } from '../Filtering/FilterType.js';
|
|
38
|
+
import { PaginationType } from '../Pagination/PaginationType.js';
|
|
39
|
+
import { TableDataRepository } from './TableDataRepository.svelte.js';
|
|
40
|
+
export class BuiltInRemoteRepository extends TableDataRepository {
|
|
41
|
+
_options;
|
|
42
|
+
paginationType = PaginationType.Remote;
|
|
43
|
+
filterType = FilterType.Virtual;
|
|
44
|
+
manualSorting = true;
|
|
45
|
+
_data = $state([]);
|
|
46
|
+
get data() {
|
|
47
|
+
return this._data;
|
|
48
|
+
}
|
|
49
|
+
set data(v) {
|
|
50
|
+
this._data = v;
|
|
51
|
+
}
|
|
52
|
+
_totalRows = $state(0);
|
|
53
|
+
get totalRows() {
|
|
54
|
+
return this._totalRows;
|
|
55
|
+
}
|
|
56
|
+
set totalRows(v) {
|
|
57
|
+
this._totalRows = v;
|
|
58
|
+
}
|
|
59
|
+
_lastPage = $state(0);
|
|
60
|
+
get lastPage() {
|
|
61
|
+
return this._lastPage;
|
|
62
|
+
}
|
|
63
|
+
set lastPage(v) {
|
|
64
|
+
this._lastPage = v;
|
|
65
|
+
}
|
|
66
|
+
_isLoading = $state(false);
|
|
67
|
+
get isLoading() {
|
|
68
|
+
return this._isLoading;
|
|
69
|
+
}
|
|
70
|
+
loadingMessage = undefined;
|
|
71
|
+
_sorting = $state([]);
|
|
72
|
+
get sorting() {
|
|
73
|
+
return this._sorting;
|
|
74
|
+
}
|
|
75
|
+
set sorting(v) {
|
|
76
|
+
this._sorting = v;
|
|
77
|
+
}
|
|
78
|
+
_filtering = $state([]);
|
|
79
|
+
get filtering() {
|
|
80
|
+
return this._filtering;
|
|
81
|
+
}
|
|
82
|
+
_abortController = null;
|
|
83
|
+
_debounceTimer = null;
|
|
84
|
+
_quickFilterFocusCount = 0;
|
|
85
|
+
constructor(_options) {
|
|
86
|
+
super(_options.tableName, _options.getUserId);
|
|
87
|
+
this._options = _options;
|
|
88
|
+
// Restore persisted page size if present.
|
|
89
|
+
if (browser) {
|
|
90
|
+
const userId = this.getUserId() ?? 'anon';
|
|
91
|
+
const saved = localStorage.getItem(`scoria-table:${userId}:${_options.tableName}:page-size`);
|
|
92
|
+
if (saved !== null) {
|
|
93
|
+
const parsed = Number.parseInt(saved, 10);
|
|
94
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
95
|
+
this.paginationState = { pageIndex: 0, pageSize: parsed };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (_options.pageSize) {
|
|
99
|
+
this.paginationState = { pageIndex: 0, pageSize: _options.pageSize };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// ── IRemoteDataRepository surface ────────────────────────────────
|
|
104
|
+
setFilterMode = (id, mode) => {
|
|
105
|
+
this._filterModes.set(id, mode);
|
|
106
|
+
this.scheduleReload();
|
|
107
|
+
};
|
|
108
|
+
filterBy = (id, value) => {
|
|
109
|
+
const existing = this._filtering.findIndex((f) => f.id === id);
|
|
110
|
+
const next = [...this._filtering];
|
|
111
|
+
if (value === undefined || value === null || value === '') {
|
|
112
|
+
if (existing !== -1) {
|
|
113
|
+
next.splice(existing, 1);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const entry = { id, value };
|
|
118
|
+
if (existing !== -1) {
|
|
119
|
+
next[existing] = entry;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
next.push(entry);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
this._filtering = next;
|
|
126
|
+
this.scheduleReload();
|
|
127
|
+
};
|
|
128
|
+
resetFilters = () => {
|
|
129
|
+
this._filtering = [];
|
|
130
|
+
this.scheduleReload();
|
|
131
|
+
};
|
|
132
|
+
setPage = (page) => {
|
|
133
|
+
this.paginationState = { ...this.paginationState, pageIndex: page };
|
|
134
|
+
this.scheduleReload({ immediate: true });
|
|
135
|
+
};
|
|
136
|
+
nextPage = () => {
|
|
137
|
+
this.setPage(this.paginationState.pageIndex + 1);
|
|
138
|
+
};
|
|
139
|
+
prevPage = () => {
|
|
140
|
+
this.setPage(Math.max(0, this.paginationState.pageIndex - 1));
|
|
141
|
+
};
|
|
142
|
+
setPageSize = (size) => {
|
|
143
|
+
const parsed = typeof size === 'number' ? size : Number.parseInt(size, 10);
|
|
144
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
this.paginationState = { pageIndex: 0, pageSize: parsed };
|
|
148
|
+
this.scheduleReload({ immediate: true });
|
|
149
|
+
};
|
|
150
|
+
updateSorting = (next) => {
|
|
151
|
+
this._sorting = typeof next === 'function' ? next(this._sorting) : next;
|
|
152
|
+
this.scheduleReload({ immediate: true });
|
|
153
|
+
};
|
|
154
|
+
get pageStartIndex() {
|
|
155
|
+
return this.paginationState.pageIndex * this.paginationState.pageSize;
|
|
156
|
+
}
|
|
157
|
+
get pageEndIndexExclusive() {
|
|
158
|
+
return Math.min(this.pageStartIndex + this.paginationState.pageSize, this._totalRows);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Fetches a fresh page from the configured endpoint. Cancels any
|
|
162
|
+
* in-flight request first. The `debounced` flag (when true) coalesces
|
|
163
|
+
* rapid calls into a single trailing request after the configured
|
|
164
|
+
* debounce window.
|
|
165
|
+
*/
|
|
166
|
+
reload = async (debounced) => {
|
|
167
|
+
if (debounced) {
|
|
168
|
+
this.scheduleReload();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
await this._reloadNow();
|
|
172
|
+
};
|
|
173
|
+
// ── Internals ──────────────────────────────────────────────────
|
|
174
|
+
scheduleReload(opts) {
|
|
175
|
+
const debounce = opts?.immediate ? 0 : this._options.reloadDebounce;
|
|
176
|
+
if (debounce === false) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (this._debounceTimer !== null) {
|
|
180
|
+
clearTimeout(this._debounceTimer);
|
|
181
|
+
}
|
|
182
|
+
const delay = typeof debounce === 'number' ? debounce : this._quickFilterFocusCount > 0 ? 300 : 0;
|
|
183
|
+
this._debounceTimer = setTimeout(() => {
|
|
184
|
+
this._debounceTimer = null;
|
|
185
|
+
void this._reloadNow();
|
|
186
|
+
}, delay);
|
|
187
|
+
}
|
|
188
|
+
async _reloadNow() {
|
|
189
|
+
this._abortController?.abort();
|
|
190
|
+
const controller = new AbortController();
|
|
191
|
+
this._abortController = controller;
|
|
192
|
+
const merged = this._buildMergedFilters();
|
|
193
|
+
const request = this._buildRequestInit(merged, controller.signal);
|
|
194
|
+
this._isLoading = true;
|
|
195
|
+
try {
|
|
196
|
+
const url = this._buildUrl(merged);
|
|
197
|
+
const response = await fetch(url, request);
|
|
198
|
+
if (!response.ok) {
|
|
199
|
+
throw new Error(`scoria: remote table fetch failed (${response.status} ${response.statusText})`);
|
|
200
|
+
}
|
|
201
|
+
const raw = await response.json();
|
|
202
|
+
if (controller.signal.aborted) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const transformed = this._applyResponseTransform(raw);
|
|
206
|
+
this._data = [...transformed.rows];
|
|
207
|
+
this._totalRows = transformed.totalRows;
|
|
208
|
+
this._lastPage = Math.max(0, Math.ceil(transformed.totalRows / this.paginationState.pageSize) - 1);
|
|
209
|
+
}
|
|
210
|
+
catch (e) {
|
|
211
|
+
if (e.name === 'AbortError') {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
devCatch(e);
|
|
215
|
+
}
|
|
216
|
+
finally {
|
|
217
|
+
if (this._abortController === controller) {
|
|
218
|
+
this._isLoading = false;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
_buildMergedFilters() {
|
|
223
|
+
// Transient request-scoped map; consumed immediately by `_buildUrl` /
|
|
224
|
+
// `_buildRequestInit`, never observed reactively.
|
|
225
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
226
|
+
const merged = new Map();
|
|
227
|
+
const defaults = this._options.defaultFilters?.();
|
|
228
|
+
if (defaults) {
|
|
229
|
+
for (const [k, v] of Object.entries(defaults)) {
|
|
230
|
+
merged.set(k, v);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
for (const f of this._filtering) {
|
|
234
|
+
merged.set(f.id, f.value);
|
|
235
|
+
}
|
|
236
|
+
return merged;
|
|
237
|
+
}
|
|
238
|
+
_buildUrl(_mergedFilters) {
|
|
239
|
+
const encoding = this._options.filterEncoding ?? 'query-string';
|
|
240
|
+
if (encoding === 'json-body' || typeof encoding === 'object') {
|
|
241
|
+
// For POST-body encodings the URL is the bare endpoint; the body
|
|
242
|
+
// carries pagination, filters, and sort.
|
|
243
|
+
return this._options.endpoint;
|
|
244
|
+
}
|
|
245
|
+
// Default: query-string encoding. The URL is constructed for the
|
|
246
|
+
// current request only; reactivity is not required.
|
|
247
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
248
|
+
const url = new URL(this._options.endpoint, browser ? window.location.origin : 'http://localhost');
|
|
249
|
+
const params = url.searchParams;
|
|
250
|
+
params.set('page', String(this.paginationState.pageIndex));
|
|
251
|
+
params.set('pageSize', String(this.paginationState.pageSize));
|
|
252
|
+
for (const sort of this._sorting) {
|
|
253
|
+
params.append('sort', sort.id);
|
|
254
|
+
params.append('direction', sort.desc ? 'desc' : 'asc');
|
|
255
|
+
}
|
|
256
|
+
for (const [id, value] of _mergedFilters) {
|
|
257
|
+
const mode = this._filterModes.get(id);
|
|
258
|
+
if (mode) {
|
|
259
|
+
params.set(`filter[${id}][mode]`, mode);
|
|
260
|
+
}
|
|
261
|
+
params.set(`filter[${id}]`, typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'
|
|
262
|
+
? String(value)
|
|
263
|
+
: JSON.stringify(value));
|
|
264
|
+
}
|
|
265
|
+
return url.toString();
|
|
266
|
+
}
|
|
267
|
+
_buildRequestInit(merged, signal) {
|
|
268
|
+
const method = this._options.method ?? 'GET';
|
|
269
|
+
const headers = {
|
|
270
|
+
'Content-Type': 'application/json',
|
|
271
|
+
...this._options.headers?.(),
|
|
272
|
+
};
|
|
273
|
+
const encoding = this._options.filterEncoding ?? 'query-string';
|
|
274
|
+
if (typeof encoding === 'object') {
|
|
275
|
+
// Custom encoding: ask the consumer for the full RequestInit.
|
|
276
|
+
const custom = encoding.encode({
|
|
277
|
+
page: this.paginationState.pageIndex,
|
|
278
|
+
pageSize: this.paginationState.pageSize,
|
|
279
|
+
filters: this._filtering,
|
|
280
|
+
sort: this._sorting,
|
|
281
|
+
});
|
|
282
|
+
return { signal, headers, ...custom };
|
|
283
|
+
}
|
|
284
|
+
if (encoding === 'json-body') {
|
|
285
|
+
const body = {
|
|
286
|
+
page: this.paginationState.pageIndex,
|
|
287
|
+
pageSize: this.paginationState.pageSize,
|
|
288
|
+
filters: Object.fromEntries(merged),
|
|
289
|
+
sort: this._sorting,
|
|
290
|
+
};
|
|
291
|
+
return { method, headers, signal, body: JSON.stringify(body) };
|
|
292
|
+
}
|
|
293
|
+
return { method, headers, signal };
|
|
294
|
+
}
|
|
295
|
+
_applyResponseTransform(raw) {
|
|
296
|
+
const transformer = this._options.responseTransform;
|
|
297
|
+
if (transformer) {
|
|
298
|
+
return transformer(raw);
|
|
299
|
+
}
|
|
300
|
+
// Default shape: `{ rows: TRow[]; totalRows: number }`.
|
|
301
|
+
if (raw !== null &&
|
|
302
|
+
typeof raw === 'object' &&
|
|
303
|
+
'rows' in raw &&
|
|
304
|
+
'totalRows' in raw &&
|
|
305
|
+
Array.isArray(raw.rows)) {
|
|
306
|
+
const o = raw;
|
|
307
|
+
return { rows: o.rows, totalRows: o.totalRows };
|
|
308
|
+
}
|
|
309
|
+
throw new Error(`scoria: remote table response did not match the expected { rows, totalRows } shape. ` +
|
|
310
|
+
`Pass a 'responseTransform' option to RemoteRowSource if your backend returns a different shape.`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Thin adapter for `kind: 'custom'`. Delegates to a consumer-supplied
|
|
315
|
+
* `fetch` function on every page / filter / sort change. Inherits
|
|
316
|
+
* `TableDataRepository` for pagination and filter-mode plumbing.
|
|
317
|
+
*/
|
|
318
|
+
export class CustomRemoteRepository extends TableDataRepository {
|
|
319
|
+
_fetch;
|
|
320
|
+
paginationType = PaginationType.Remote;
|
|
321
|
+
filterType = FilterType.Virtual;
|
|
322
|
+
manualSorting = true;
|
|
323
|
+
_data = $state([]);
|
|
324
|
+
get data() {
|
|
325
|
+
return this._data;
|
|
326
|
+
}
|
|
327
|
+
set data(v) {
|
|
328
|
+
this._data = v;
|
|
329
|
+
}
|
|
330
|
+
_totalRows = $state(0);
|
|
331
|
+
get totalRows() {
|
|
332
|
+
return this._totalRows;
|
|
333
|
+
}
|
|
334
|
+
set totalRows(v) {
|
|
335
|
+
this._totalRows = v;
|
|
336
|
+
}
|
|
337
|
+
_lastPage = $state(0);
|
|
338
|
+
get lastPage() {
|
|
339
|
+
return this._lastPage;
|
|
340
|
+
}
|
|
341
|
+
set lastPage(v) {
|
|
342
|
+
this._lastPage = v;
|
|
343
|
+
}
|
|
344
|
+
_isLoading = $state(false);
|
|
345
|
+
get isLoading() {
|
|
346
|
+
return this._isLoading;
|
|
347
|
+
}
|
|
348
|
+
loadingMessage = undefined;
|
|
349
|
+
_sorting = $state([]);
|
|
350
|
+
get sorting() {
|
|
351
|
+
return this._sorting;
|
|
352
|
+
}
|
|
353
|
+
set sorting(v) {
|
|
354
|
+
this._sorting = v;
|
|
355
|
+
}
|
|
356
|
+
_filtering = $state([]);
|
|
357
|
+
get filtering() {
|
|
358
|
+
return this._filtering;
|
|
359
|
+
}
|
|
360
|
+
_abortController = null;
|
|
361
|
+
constructor(tableName, getUserId, _fetch) {
|
|
362
|
+
super(tableName, getUserId);
|
|
363
|
+
this._fetch = _fetch;
|
|
364
|
+
}
|
|
365
|
+
setFilterMode = (id, mode) => {
|
|
366
|
+
this._filterModes.set(id, mode);
|
|
367
|
+
void this.reload();
|
|
368
|
+
};
|
|
369
|
+
filterBy = (id, value) => {
|
|
370
|
+
const existing = this._filtering.findIndex((f) => f.id === id);
|
|
371
|
+
const next = [...this._filtering];
|
|
372
|
+
if (value === undefined || value === null || value === '') {
|
|
373
|
+
if (existing !== -1) {
|
|
374
|
+
next.splice(existing, 1);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
const entry = { id, value };
|
|
379
|
+
if (existing !== -1) {
|
|
380
|
+
next[existing] = entry;
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
next.push(entry);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
this._filtering = next;
|
|
387
|
+
void this.reload();
|
|
388
|
+
};
|
|
389
|
+
resetFilters = () => {
|
|
390
|
+
this._filtering = [];
|
|
391
|
+
void this.reload();
|
|
392
|
+
};
|
|
393
|
+
setPage = (page) => {
|
|
394
|
+
this.paginationState = { ...this.paginationState, pageIndex: page };
|
|
395
|
+
void this.reload();
|
|
396
|
+
};
|
|
397
|
+
nextPage = () => {
|
|
398
|
+
this.setPage(this.paginationState.pageIndex + 1);
|
|
399
|
+
};
|
|
400
|
+
prevPage = () => {
|
|
401
|
+
this.setPage(Math.max(0, this.paginationState.pageIndex - 1));
|
|
402
|
+
};
|
|
403
|
+
setPageSize = (size) => {
|
|
404
|
+
const parsed = typeof size === 'number' ? size : Number.parseInt(size, 10);
|
|
405
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
this.paginationState = { pageIndex: 0, pageSize: parsed };
|
|
409
|
+
void this.reload();
|
|
410
|
+
};
|
|
411
|
+
updateSorting = (next) => {
|
|
412
|
+
this._sorting = typeof next === 'function' ? next(this._sorting) : next;
|
|
413
|
+
void this.reload();
|
|
414
|
+
};
|
|
415
|
+
get pageStartIndex() {
|
|
416
|
+
return this.paginationState.pageIndex * this.paginationState.pageSize;
|
|
417
|
+
}
|
|
418
|
+
get pageEndIndexExclusive() {
|
|
419
|
+
return Math.min(this.pageStartIndex + this.paginationState.pageSize, this._totalRows);
|
|
420
|
+
}
|
|
421
|
+
reload = async () => {
|
|
422
|
+
this._abortController?.abort();
|
|
423
|
+
const controller = new AbortController();
|
|
424
|
+
this._abortController = controller;
|
|
425
|
+
this._isLoading = true;
|
|
426
|
+
try {
|
|
427
|
+
const request = {
|
|
428
|
+
page: this.paginationState.pageIndex,
|
|
429
|
+
pageSize: this.paginationState.pageSize,
|
|
430
|
+
filters: this._filtering,
|
|
431
|
+
sort: this._sorting,
|
|
432
|
+
signal: controller.signal,
|
|
433
|
+
};
|
|
434
|
+
const response = await this._fetch(request);
|
|
435
|
+
if (controller.signal.aborted) {
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
this._data = [...response.rows];
|
|
439
|
+
this._totalRows = response.totalRows;
|
|
440
|
+
this._lastPage = Math.max(0, Math.ceil(response.totalRows / this.paginationState.pageSize) - 1);
|
|
441
|
+
}
|
|
442
|
+
catch (e) {
|
|
443
|
+
if (e.name === 'AbortError') {
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
devCatch(e);
|
|
447
|
+
}
|
|
448
|
+
finally {
|
|
449
|
+
if (this._abortController === controller) {
|
|
450
|
+
this._isLoading = false;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
};
|
|
454
|
+
}
|
|
@@ -7,6 +7,27 @@ import type { OnChangeFn } from '../OnChangeFn.js';
|
|
|
7
7
|
import type { PaginationState } from '../Pagination/PaginationState.js';
|
|
8
8
|
import type { PaginationType } from '../Pagination/PaginationType.js';
|
|
9
9
|
import type { SortingState } from './SortingState.js';
|
|
10
|
+
/**
|
|
11
|
+
* Union surface implemented by both `LocalTableDataRepository` and any
|
|
12
|
+
* consumer-supplied remote repository. `TableContext` reads from `dataRepo`
|
|
13
|
+
* and `paginationRepo` via this contract; everything reactive is exposed
|
|
14
|
+
* through the underlying `$state`-backed properties on the implementation.
|
|
15
|
+
*
|
|
16
|
+
* Implementers are responsible for:
|
|
17
|
+
*
|
|
18
|
+
* - Snapshot consistency: `data`, `totalRows`, `pageStartIndex`,
|
|
19
|
+
* `pageEndIndexExclusive`, and `paginationState` must all describe the
|
|
20
|
+
* same logical page when read together.
|
|
21
|
+
* - Filter safety (remote): `filterBy` accepts `unknown` here for backwards
|
|
22
|
+
* compatibility; remote implementations MUST escape values before
|
|
23
|
+
* forwarding to a backend (URL encoding, parameterised SQL, etc.). Nothing
|
|
24
|
+
* in scoria enforces this and no validation happens server-side on
|
|
25
|
+
* scoria's behalf.
|
|
26
|
+
* - LSP: `setPageSize: (size: number) => void` is widened to
|
|
27
|
+
* `(size: number | string) => void` in the concrete repositories so they
|
|
28
|
+
* can accept page-size inputs from a `<select>` element. Callers that hold
|
|
29
|
+
* the base interface should always pass `number`.
|
|
30
|
+
*/
|
|
10
31
|
export interface IDataRepository<T extends object> {
|
|
11
32
|
paginationState: PaginationState;
|
|
12
33
|
setPageSize: (size: number) => void;
|
|
@@ -3,6 +3,16 @@ import type { ColumnFiltersState } from '../Filtering/ColumnFiltersState.js';
|
|
|
3
3
|
import type { BoolFilterValueType, DateFilterValueType, FilterFn, NumberFilterValueType, SelectFilterValueType, StringFilterValueType } from '../Filtering/FilterFn.js';
|
|
4
4
|
import type { FilterMode } from '../Filtering/FilterMode.js';
|
|
5
5
|
import type { IDataRepository } from './IDataRepository.js';
|
|
6
|
+
/**
|
|
7
|
+
* Repository contract for in-memory tables. Narrows `paginationType` to the
|
|
8
|
+
* `'Local'` literal so consumers can discriminate on it. All filter functions
|
|
9
|
+
* are required (the local repository must filter rows itself because there
|
|
10
|
+
* is no backend to delegate to).
|
|
11
|
+
*
|
|
12
|
+
* `setPageSize` is widened from `(size: number) => void` to
|
|
13
|
+
* `(size: number | string) => void` to accept input values from a HTML
|
|
14
|
+
* `<select>` element directly without an intermediate parse step.
|
|
15
|
+
*/
|
|
6
16
|
export interface ILocalDataRepository<T extends object> extends IDataRepository<T> {
|
|
7
17
|
readonly paginationType: 'Local';
|
|
8
18
|
setPageSize: (size: number | string) => void;
|
|
@@ -2,6 +2,22 @@ import type { SvelteMap } from 'svelte/reactivity';
|
|
|
2
2
|
import type { ColumnFiltersState } from '../Filtering/ColumnFiltersState.js';
|
|
3
3
|
import type { FilterMode } from '../Filtering/FilterMode.js';
|
|
4
4
|
import type { IDataRepository } from './IDataRepository.js';
|
|
5
|
+
/**
|
|
6
|
+
* Repository contract for remotely-paged tables. Narrows `paginationType` to
|
|
7
|
+
* the `'Remote'` literal and makes `lastPage` required (the remote backend
|
|
8
|
+
* is authoritative on the page count). Filter functions are inherited but
|
|
9
|
+
* left optional because remote tables typically delegate filtering to the
|
|
10
|
+
* backend and only need a subset of client-side filter functions.
|
|
11
|
+
*
|
|
12
|
+
* `reload` accepts a `debounced` flag so consumers can request a
|
|
13
|
+
* batched reload (e.g. while the user is still typing into a filter input).
|
|
14
|
+
*
|
|
15
|
+
* Security note: remote implementations MUST escape filter values and
|
|
16
|
+
* column ids before forwarding them to the backend. The interface signature
|
|
17
|
+
* accepts `unknown` for `filterBy(value)` for backwards compatibility, but
|
|
18
|
+
* the implementation must validate it. See the security section of the
|
|
19
|
+
* `IDataRepository` JSDoc.
|
|
20
|
+
*/
|
|
5
21
|
export interface IRemoteDataRepository<T extends object> extends IDataRepository<T> {
|
|
6
22
|
readonly paginationType: 'Remote';
|
|
7
23
|
setPageSize: (size: number | string) => void;
|
|
@@ -4,13 +4,28 @@ import type { Row } from '../Context/Row.js';
|
|
|
4
4
|
import type { ColumnFiltersState } from '../Filtering/ColumnFiltersState.js';
|
|
5
5
|
import type { BoolFilterValueType, NumberFilterValueType, SelectFilterValueType, StringFilterValueType } from '../Filtering/FilterFn.js';
|
|
6
6
|
import type { FilterMode } from '../Filtering/FilterMode.js';
|
|
7
|
-
import { NumberDateFilterMode } from '../Filtering/NumberDateFilterMode.js';
|
|
8
|
-
import { StringFilterMode } from '../Filtering/StringFilterMode.js';
|
|
9
7
|
import type { OnChangeFn } from '../OnChangeFn.js';
|
|
10
8
|
import type { ILocalDataRepository } from './ILocalDataRepository.js';
|
|
11
9
|
import type { SortingState } from './SortingState.js';
|
|
12
10
|
import { TableDataRepository } from './TableDataRepository.svelte.js';
|
|
13
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Filter modes that accept an empty filter value (e.g. "show empty",
|
|
13
|
+
* "show null"). Used by `setFilterMode` / `filterBy` to decide whether
|
|
14
|
+
* to keep an empty stub filter in the active filtering list.
|
|
15
|
+
*/
|
|
16
|
+
export declare const allowedEmptyFilterModes: SvelteSet<FilterMode>;
|
|
17
|
+
/**
|
|
18
|
+
* Concrete in-memory data repository. The data array is supplied as a
|
|
19
|
+
* `RefWrapper` so consumers can mutate the underlying array and the
|
|
20
|
+
* repo's `$derived` totals will update reactively without a full
|
|
21
|
+
* reassignment.
|
|
22
|
+
*
|
|
23
|
+
* Implements the five filter callbacks (date / number / select / bool
|
|
24
|
+
* / string). The async signature is preserved across all five even
|
|
25
|
+
* though the bodies are synchronous; converting to a sync fast-path is
|
|
26
|
+
* deferred (LocalTableDataRepository P0 finding, requires a coordinated
|
|
27
|
+
* change to TableContext's `_filteredIndices` loop).
|
|
28
|
+
*/
|
|
14
29
|
export declare class LocalTableDataRepository<T extends object> extends TableDataRepository<T, unknown> implements ILocalDataRepository<T> {
|
|
15
30
|
addEmptyRow?: (() => void) | undefined;
|
|
16
31
|
private debug;
|
|
@@ -18,40 +33,109 @@ export declare class LocalTableDataRepository<T extends object> extends TableDat
|
|
|
18
33
|
constructor(tableName: string, dataRef: RefWrapper<Array<T>>, // reactive
|
|
19
34
|
getUserId: () => string | undefined, addEmptyRow?: (() => void) | undefined, debug?: boolean);
|
|
20
35
|
private _isLoading;
|
|
36
|
+
/** Whether a long-running operation is currently in flight. */
|
|
21
37
|
get isLoading(): boolean;
|
|
22
38
|
set isLoading(v: boolean);
|
|
23
39
|
private _dataRef;
|
|
40
|
+
/** The current data array (read from the underlying `RefWrapper`). */
|
|
24
41
|
get data(): Array<T>;
|
|
25
42
|
private _lastPage;
|
|
43
|
+
/** The last page index (1-based) given the current page size. */
|
|
26
44
|
get lastPage(): number;
|
|
27
45
|
private _sorting;
|
|
46
|
+
/** The active sort columns, in precedence order. */
|
|
28
47
|
get sorting(): SortingState;
|
|
29
48
|
set sorting(v: SortingState);
|
|
30
49
|
private _totalRows;
|
|
50
|
+
/** Total number of rows in the underlying data array. */
|
|
31
51
|
get totalRows(): number;
|
|
32
52
|
private _filtering;
|
|
53
|
+
/** The active per-column filter values, in application order. */
|
|
33
54
|
get filtering(): ColumnFiltersState;
|
|
34
55
|
set filtering(v: ColumnFiltersState);
|
|
56
|
+
/**
|
|
57
|
+
* Replace the sorting state with either a literal array or a
|
|
58
|
+
* function that maps the previous state to a new state.
|
|
59
|
+
*/
|
|
35
60
|
updateSorting: OnChangeFn<SortingState>;
|
|
36
61
|
readonly paginationType: "Local";
|
|
62
|
+
/**
|
|
63
|
+
* Sets (or clears) the filter mode for a column. Passing `undefined`
|
|
64
|
+
* removes the mode entry; setting an empty-allowed mode (e.g.
|
|
65
|
+
* "Empty", "Null") additionally adds a stub filter value so the
|
|
66
|
+
* filter actually applies even though no value was typed.
|
|
67
|
+
*/
|
|
37
68
|
readonly setFilterMode: (id: string, mode: FilterMode | undefined) => void;
|
|
69
|
+
/**
|
|
70
|
+
* Sets or updates the filter value for a column. Empty values are
|
|
71
|
+
* dropped from the filtering list unless the column's active mode
|
|
72
|
+
* explicitly accepts an empty value (e.g. "Empty", "Null").
|
|
73
|
+
*
|
|
74
|
+
* Per-keystroke debouncing is deferred to the input layer; the
|
|
75
|
+
* `LocalTableDataRepository` P0 finding tracks adding a
|
|
76
|
+
* `filterByDebounced` helper here.
|
|
77
|
+
*/
|
|
38
78
|
readonly filterBy: (id: string, value: unknown) => void;
|
|
39
79
|
private _pageStartIndex;
|
|
80
|
+
/** Index of the first row on the current page. */
|
|
40
81
|
get pageStartIndex(): number;
|
|
41
82
|
private _pageEndIndexExclusive;
|
|
83
|
+
/** Index one past the last row on the current page. */
|
|
42
84
|
get pageEndIndexExclusive(): number;
|
|
85
|
+
/** Clears every active filter value (keeps filter modes intact). */
|
|
43
86
|
readonly resetFilters: () => void;
|
|
87
|
+
/**
|
|
88
|
+
* Sets the page size and clamps the current page index so the new
|
|
89
|
+
* page count covers the current view. Accepts a string so a raw
|
|
90
|
+
* `<select>` value can be passed through without parsing first.
|
|
91
|
+
*/
|
|
44
92
|
setPageSize: (size: number | string) => void;
|
|
93
|
+
/** Jumps to the given 1-based page number, clamped to the last page. */
|
|
45
94
|
setPage: (page: number) => void;
|
|
95
|
+
/** Advances to the next page, clamped to the last page. */
|
|
46
96
|
nextPage: () => void;
|
|
97
|
+
/** Returns to the previous page, clamped to page 0. */
|
|
47
98
|
prevPage: () => void;
|
|
99
|
+
/**
|
|
100
|
+
* Date range filter. The filter value is a `[from, to]` tuple where
|
|
101
|
+
* either bound may be `null` (or `undefined`) to leave that side
|
|
102
|
+
* unbounded. Rows whose value is not a `Date` are excluded.
|
|
103
|
+
*
|
|
104
|
+
* Inner `<T>` generic shadowing of the class `T` (workorder P1) is
|
|
105
|
+
* a known limitation, retained pending a coordinated signature
|
|
106
|
+
* change.
|
|
107
|
+
*/
|
|
48
108
|
readonly dateFilter: ILocalDataRepository<T>['dateFilter'];
|
|
109
|
+
/**
|
|
110
|
+
* Numeric filter supporting equality, range, set, and negation
|
|
111
|
+
* modes. String filter modes that share a literal value are caught
|
|
112
|
+
* at the switch and throw, surfacing a programming error before the
|
|
113
|
+
* user sees stale data.
|
|
114
|
+
*/
|
|
49
115
|
readonly numberFilter: (row: Row<T>, columnId: string, // & keyof T,
|
|
50
116
|
values: NumberFilterValueType) => Promise<boolean>;
|
|
117
|
+
/**
|
|
118
|
+
* Multi-select / single-value equality filter. Accepts an array, a
|
|
119
|
+
* `Set`, an option-object with a `value` field, or a primitive
|
|
120
|
+
* compared with loose equality.
|
|
121
|
+
*/
|
|
51
122
|
readonly selectFilter: <columnType = T[keyof T]>(row: Row<T>, columnId: string, // & keyof T,
|
|
52
123
|
filterValue: SelectFilterValueType<T>) => Promise<boolean>;
|
|
124
|
+
/**
|
|
125
|
+
* Boolean filter. Rows whose value is not a boolean are excluded
|
|
126
|
+
* (dev warning logged) so an accidental non-boolean accessor does
|
|
127
|
+
* not silently match every row.
|
|
128
|
+
*/
|
|
53
129
|
readonly boolFilter: (row: Row<T>, columnId: string, // & keyof T,
|
|
54
130
|
filterValue: BoolFilterValueType) => Promise<boolean>;
|
|
131
|
+
/**
|
|
132
|
+
* String filter implementing every `StringFilterMode` variant.
|
|
133
|
+
* Comparisons are case-insensitive and use trimmed lowercase forms;
|
|
134
|
+
* an empty filter value yields a positive match for inclusion modes
|
|
135
|
+
* and a negative match for negation modes (so empty inputs do not
|
|
136
|
+
* accidentally hide rows when the user is mid-typing a "not equals"
|
|
137
|
+
* filter).
|
|
138
|
+
*/
|
|
55
139
|
readonly stringFilter: (row: Row<T>, columnId: string, // & keyof T,
|
|
56
140
|
filterValue: StringFilterValueType) => Promise<boolean>;
|
|
57
141
|
}
|