@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
|
@@ -8,6 +8,16 @@ import type { ColumnFiltersState } from '../Filtering/ColumnFiltersState.js';
|
|
|
8
8
|
import type { HeaderGroup } from '../HeaderGroup.js';
|
|
9
9
|
import type { OnChangeFn } from '../OnChangeFn.js';
|
|
10
10
|
import type { PaginationState } from '../Pagination/PaginationState.js';
|
|
11
|
+
/**
|
|
12
|
+
* Surface returned by `TableContext.table`. Mirrors the tanstack-table shape
|
|
13
|
+
* scoria's table API was originally derived from, narrowed to the methods the
|
|
14
|
+
* scoria Table actually exposes.
|
|
15
|
+
*
|
|
16
|
+
* The commented-out `extends X, Y, Z` lines record the tanstack-derived
|
|
17
|
+
* mixins that have not yet been implemented; they are retained as a backlog
|
|
18
|
+
* marker. Deleting them is deferred (workorder Types-Context-supporting
|
|
19
|
+
* finding 1) until a decision is made on which mixins to port.
|
|
20
|
+
*/
|
|
11
21
|
export interface ITable<T extends object> {
|
|
12
22
|
data: Array<T>;
|
|
13
23
|
columns: Array<ColumnDef<T>>;
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import type { ColumnPinningState } from '../Columns/ColumnPinningState.js';
|
|
2
|
+
import type { ColumnDef } from '../Columns/Definitions/ColumnDef.svelte.js';
|
|
3
|
+
import type { ColumnDefSet } from '../Columns/Definitions/ColumnDefSet.js';
|
|
4
|
+
import type { JSONColumnDefSet } from '../Columns/Definitions/JSONColumnDefSet.js';
|
|
5
|
+
import type { VisibilityState } from '../Columns/VisibilityState.js';
|
|
6
|
+
import type { SortingState as SortingStateArray } from '../DataRepository/SortingState.js';
|
|
7
|
+
import type { SavedTableSettings, TableSettings } from './TableSettings.js';
|
|
8
|
+
/**
|
|
9
|
+
* Conservative typeguard for the persisted preset list. Storage is
|
|
10
|
+
* same-origin-writable so the only contract we can rely on is the array
|
|
11
|
+
* shape; downstream `reassignDefsToPresets` performs deeper checks and
|
|
12
|
+
* drops presets that fail. We assert the outer envelope and the bare
|
|
13
|
+
* minimum for each entry: a string `name` and an array `columnDefs`.
|
|
14
|
+
*
|
|
15
|
+
* Lifted from `TableContext.svelte.ts` during Phase 6.4 god-object
|
|
16
|
+
* decomposition; semantics unchanged.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isJSONColumnDefSetArray(raw: unknown): raw is Array<JSONColumnDefSet>;
|
|
19
|
+
/**
|
|
20
|
+
* Typeguard for the persisted user-level table settings blob. Every
|
|
21
|
+
* field is optional, but every present field must be boolean: anything
|
|
22
|
+
* else is a sign of schema drift or a tampered slot.
|
|
23
|
+
*
|
|
24
|
+
* Lifted from `TableContext.svelte.ts` during Phase 6.4.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isSavedTableSettings(raw: unknown): raw is SavedTableSettings;
|
|
27
|
+
/**
|
|
28
|
+
* Typeguard for a non-empty string. Used for the persisted selected
|
|
29
|
+
* preset name slot.
|
|
30
|
+
*
|
|
31
|
+
* Lifted from `TableContext.svelte.ts` during Phase 6.4.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isNonEmptyString(raw: unknown): raw is string;
|
|
34
|
+
/**
|
|
35
|
+
* Dependency surface that `PreferencesState` reads from the surrounding
|
|
36
|
+
* `TableContext`. All dependencies are passed as thunks / function refs
|
|
37
|
+
* so the sub-context never holds a direct reference to the parent; the
|
|
38
|
+
* `userIdSegment` derived reads `getUserId()` lazily and the
|
|
39
|
+
* `setSelectedPreset` flow writes back through the column-layout
|
|
40
|
+
* setters / `paginationRepo` updater.
|
|
41
|
+
*/
|
|
42
|
+
export interface PreferencesStateDeps<T extends object> {
|
|
43
|
+
/** The static table name, used as the middle segment of every
|
|
44
|
+
* persisted key (`scoria-table:<user>:<tableName>:<suffix>`). */
|
|
45
|
+
getTableName: () => string;
|
|
46
|
+
/** Caller-supplied user identifier. `userIdSegment` resolves to
|
|
47
|
+
* `getUserId() ?? 'anon'` so different users on a shared browser
|
|
48
|
+
* cannot read each other's column presets. */
|
|
49
|
+
getUserId: () => string | undefined;
|
|
50
|
+
/** Read the current ordered column-defs array (used by
|
|
51
|
+
* `saveColumnPreset` to capture the layout into the preset). */
|
|
52
|
+
getColumnDefs: () => Array<ColumnDef<T>>;
|
|
53
|
+
/** Read the current visibility map (used by `saveColumnPreset`). */
|
|
54
|
+
getColumnVisibility: () => VisibilityState;
|
|
55
|
+
/** Read the current column-pinning map (used by `saveColumnPreset`). */
|
|
56
|
+
getColumnPinning: () => ColumnPinningState;
|
|
57
|
+
/** Read the current sort instruction list (used by
|
|
58
|
+
* `saveColumnPreset`). May be `undefined` when no pagination
|
|
59
|
+
* repository is attached yet. */
|
|
60
|
+
getSortingArray: () => SortingStateArray | undefined;
|
|
61
|
+
/** Apply the column-defs slot when a preset is restored. */
|
|
62
|
+
setColumnDefs: (defs: Array<ColumnDef<T>>) => void;
|
|
63
|
+
/** Apply the visibility map when a preset is restored. */
|
|
64
|
+
setColumnVisibility: (state: VisibilityState) => void;
|
|
65
|
+
/** Apply the column-pinning map when a preset is restored. */
|
|
66
|
+
setColumnPinning: (state: ColumnPinningState) => void;
|
|
67
|
+
/** Apply the sort instruction list when a preset is restored. May
|
|
68
|
+
* be `undefined` when no pagination repository is attached yet;
|
|
69
|
+
* the writer is a best-effort hook (mirrors the pre-extraction
|
|
70
|
+
* `paginationRepo?.updateSorting?.()` call). */
|
|
71
|
+
applySortingState: (state: SortingStateArray) => void;
|
|
72
|
+
/** Logger gate; mirrors the parent `TableContext.debug` field. */
|
|
73
|
+
getDebug: () => boolean;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Phase 6.4 god-object decomposition - sub-context that owns every
|
|
77
|
+
* persistence / preferences concern previously held directly on
|
|
78
|
+
* `TableContext`:
|
|
79
|
+
*
|
|
80
|
+
* - `_columnPresets` (the persisted preset list `$state`),
|
|
81
|
+
* - `_selectedPreset` (the currently-active preset `$state`),
|
|
82
|
+
* - `userIdSegment` (the sanitised user-id segment used in storage
|
|
83
|
+
* keys; `$derived` over `getUserId()`),
|
|
84
|
+
* - `saveColumnPreset(name)` (snapshot the live layout, persist the
|
|
85
|
+
* list, mark the new preset as selected),
|
|
86
|
+
* - `setSelectedPreset(preset)` (apply the preset to the live layout
|
|
87
|
+
* and persist the selected name),
|
|
88
|
+
* - `loadPresets()` / `loadSelectedPresetName()` /
|
|
89
|
+
* `loadSavedSettings()` (boot-time hydration helpers; the parent
|
|
90
|
+
* owns the orchestration because it depends on `setupDefaultColumnDefs`
|
|
91
|
+
* running first),
|
|
92
|
+
* - `clearPresetsAndSelection()` (drop both persisted slots),
|
|
93
|
+
* - `persistSettings(settings)` (write the per-table TableSettings
|
|
94
|
+
* blob),
|
|
95
|
+
* - the schema-validation typeguards
|
|
96
|
+
* (`isJSONColumnDefSetArray`, `isSavedTableSettings`,
|
|
97
|
+
* `isNonEmptyString`) - exported alongside the class.
|
|
98
|
+
*
|
|
99
|
+
* `TableContext` retains delegating getters / setters / methods for
|
|
100
|
+
* every legacy surface (`columnPresets`, `selectedPreset`,
|
|
101
|
+
* `saveColumnPreset`, `setSelectedPreset`, `_updateLocalStorageSettings`)
|
|
102
|
+
* so existing consumers need no migration. Future consumers can read
|
|
103
|
+
* `tableContext._preferences` directly once the migration is complete
|
|
104
|
+
* (see `src/stories/Concepts/TableContext-decomposition.mdx`).
|
|
105
|
+
*
|
|
106
|
+
* Every `localStorage` access is funnelled through this sub-context so
|
|
107
|
+
* the `scoria-table:<user>:<tableName>:<suffix>` namespace convention
|
|
108
|
+
* is enforced in a single place.
|
|
109
|
+
*/
|
|
110
|
+
export declare class PreferencesState<T extends object> {
|
|
111
|
+
private readonly _deps;
|
|
112
|
+
private _columnPresets;
|
|
113
|
+
private _selectedPreset;
|
|
114
|
+
/**
|
|
115
|
+
* Sanitised segment of the persisted-storage key path. Resolves to
|
|
116
|
+
* `getUserId() ?? 'anon'` so different users on a shared browser
|
|
117
|
+
* cannot read each other's column presets, and so anonymous
|
|
118
|
+
* sessions still have a stable namespace.
|
|
119
|
+
*
|
|
120
|
+
* The `$derived.by` form is required here (over plain
|
|
121
|
+
* `$derived(expr)`) because class-field initialisers run BEFORE
|
|
122
|
+
* the constructor body assigns `_deps`; the function-form wrapper
|
|
123
|
+
* defers the read until the derived is first evaluated.
|
|
124
|
+
*/
|
|
125
|
+
readonly userIdSegment: string;
|
|
126
|
+
/**
|
|
127
|
+
* @param deps thunks the sub-context reads from the parent.
|
|
128
|
+
* Constructor-only - no implicit setup so the parent
|
|
129
|
+
* remains in control of effect ownership and lifecycle.
|
|
130
|
+
*/
|
|
131
|
+
constructor(deps: PreferencesStateDeps<T>);
|
|
132
|
+
/**
|
|
133
|
+
* The current list of saved column presets. Setter is private to
|
|
134
|
+
* the sub-context; the parent writes through `setPresets` during
|
|
135
|
+
* the boot-time hydration flow.
|
|
136
|
+
*/
|
|
137
|
+
get columnPresets(): ReadonlyArray<ColumnDefSet<T>>;
|
|
138
|
+
/**
|
|
139
|
+
* Writer for `columnPresets`. Public so the parent boot flow can
|
|
140
|
+
* publish the hydrated list; not part of the consumer-facing
|
|
141
|
+
* surface (consumer-facing writes go through `saveColumnPreset`).
|
|
142
|
+
*/
|
|
143
|
+
setPresets(v: ReadonlyArray<ColumnDefSet<T>>): void;
|
|
144
|
+
/**
|
|
145
|
+
* The currently-active preset (the one whose name is persisted in
|
|
146
|
+
* the `selected-preset-name` slot). Setter is public so the parent
|
|
147
|
+
* boot flow can publish the resolved preset; the consumer-facing
|
|
148
|
+
* writer is `setSelectedPreset` below (which also persists the
|
|
149
|
+
* name).
|
|
150
|
+
*/
|
|
151
|
+
get selectedPreset(): ColumnDefSet<T> | undefined;
|
|
152
|
+
set selectedPreset(v: ColumnDefSet<T> | undefined);
|
|
153
|
+
/**
|
|
154
|
+
* Build the canonical `scoria-table:<user>:<tableName>:<suffix>`
|
|
155
|
+
* storage key. Centralised so every persisted-state slot reaches
|
|
156
|
+
* for the same namespacing convention; the `<user>` segment is
|
|
157
|
+
* `getUserId() ?? 'anon'` (see `userIdSegment`).
|
|
158
|
+
*/
|
|
159
|
+
storageKey(suffix: 'presets' | 'selected-preset-name' | 'settings'): string;
|
|
160
|
+
/**
|
|
161
|
+
* Boot-time hydration helper. Reads the persisted preset list from
|
|
162
|
+
* `localStorage`, validates it against `isJSONColumnDefSetArray`,
|
|
163
|
+
* and returns the parsed array (or an empty array on every failure
|
|
164
|
+
* path). The parent runs this once `setupDefaultColumnDefs` has
|
|
165
|
+
* completed so the live `columnDefs` can be compared against the
|
|
166
|
+
* persisted snapshot.
|
|
167
|
+
*
|
|
168
|
+
* `localStorage` access is gated by the parent's `browser` check;
|
|
169
|
+
* this method assumes the caller already verified the environment.
|
|
170
|
+
*/
|
|
171
|
+
loadPresets(): Array<JSONColumnDefSet>;
|
|
172
|
+
/**
|
|
173
|
+
* Boot-time hydration helper. Reads the persisted selected-preset
|
|
174
|
+
* name. Returns `null` for missing / empty / storage-error slots
|
|
175
|
+
* so the parent can fall back to the first preset (or the
|
|
176
|
+
* default).
|
|
177
|
+
*
|
|
178
|
+
* Mirrors the pre-extraction try/catch around `getItem` verbatim:
|
|
179
|
+
* the same dev-only warning is emitted on read failure.
|
|
180
|
+
*/
|
|
181
|
+
loadSelectedPresetName(): string | null;
|
|
182
|
+
/**
|
|
183
|
+
* Boot-time hydration helper. Reads the persisted per-table
|
|
184
|
+
* settings blob (`isCompact`, `singleClickEditing`, etc.). Returns
|
|
185
|
+
* `null` when the slot is missing or fails validation so the
|
|
186
|
+
* parent can apply its own default policy.
|
|
187
|
+
*/
|
|
188
|
+
loadSavedSettings(): SavedTableSettings | null;
|
|
189
|
+
/**
|
|
190
|
+
* Drop the persisted presets and selected-preset-name slots. Used
|
|
191
|
+
* by the parent's boot flow when the saved snapshot disagrees with
|
|
192
|
+
* the live column-def shape (schema drift or column-set change).
|
|
193
|
+
*/
|
|
194
|
+
clearPresetsAndSelection(): void;
|
|
195
|
+
/**
|
|
196
|
+
* Persist the selected-preset name as plain text (no JSON
|
|
197
|
+
* envelope - the slot is a single string by design).
|
|
198
|
+
*/
|
|
199
|
+
persistSelectedPresetName(name: string): void;
|
|
200
|
+
/**
|
|
201
|
+
* Persist the per-table settings blob (`isCompact`,
|
|
202
|
+
* `singleClickEditing`, etc.) as JSON. Format and key remain
|
|
203
|
+
* exactly as before the extraction.
|
|
204
|
+
*/
|
|
205
|
+
persistSettings(settings: TableSettings): void;
|
|
206
|
+
/**
|
|
207
|
+
* Persist the full preset list as JSON. Each preset's
|
|
208
|
+
* `columnPinningState` (Map-based) is flattened into entry arrays
|
|
209
|
+
* because Map does not survive `JSON.stringify`; the reader (via
|
|
210
|
+
* `loadPresets` -> `reassignDefsToPresets`) rehydrates it through
|
|
211
|
+
* `adaptJSONPinningState`.
|
|
212
|
+
*
|
|
213
|
+
* Pulled out of `saveColumnPreset` so the per-preset
|
|
214
|
+
* `toJSON()` walk is unit-testable in isolation.
|
|
215
|
+
*/
|
|
216
|
+
persistPresets(presets: ReadonlyArray<ColumnDefSet<T>>): void;
|
|
217
|
+
/**
|
|
218
|
+
* Apply a saved column preset to the live table layout and
|
|
219
|
+
* persist the selection by name. Mirrors the pre-extraction
|
|
220
|
+
* `TableContext.setSelectedPreset` verbatim:
|
|
221
|
+
*
|
|
222
|
+
* 1. Replace `columnDefs`, `columnVisibility`, `columnPinning`.
|
|
223
|
+
* 2. Forward the preset's `sortingState` to the data-repository
|
|
224
|
+
* updater (no-op when the repo has no `updateSorting` hook).
|
|
225
|
+
* 3. Update `selectedPreset`.
|
|
226
|
+
* 4. Persist the preset name to `selected-preset-name`.
|
|
227
|
+
*
|
|
228
|
+
* Bound as a class property so callers (notably the toolbar
|
|
229
|
+
* dropdown) can pass the reference around without binding `this`.
|
|
230
|
+
*/
|
|
231
|
+
readonly setSelectedPreset: (preset: ColumnDefSet<T>) => void;
|
|
232
|
+
/**
|
|
233
|
+
* Snapshot the current column layout into a new preset, replacing
|
|
234
|
+
* any existing preset whose name matches case-insensitively, and
|
|
235
|
+
* persist the full preset list to `localStorage`. Marks the new
|
|
236
|
+
* preset as selected (which also persists its name).
|
|
237
|
+
*
|
|
238
|
+
* Mirrors the pre-extraction `TableContext.saveColumnPreset`
|
|
239
|
+
* verbatim. No-op when `name` is empty.
|
|
240
|
+
*/
|
|
241
|
+
readonly saveColumnPreset: (name: string) => void;
|
|
242
|
+
}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { dev } from '$app/environment';
|
|
2
|
+
import { readJSON } from '../../../../Helpers/Storage.js';
|
|
3
|
+
/**
|
|
4
|
+
* Conservative typeguard for the persisted preset list. Storage is
|
|
5
|
+
* same-origin-writable so the only contract we can rely on is the array
|
|
6
|
+
* shape; downstream `reassignDefsToPresets` performs deeper checks and
|
|
7
|
+
* drops presets that fail. We assert the outer envelope and the bare
|
|
8
|
+
* minimum for each entry: a string `name` and an array `columnDefs`.
|
|
9
|
+
*
|
|
10
|
+
* Lifted from `TableContext.svelte.ts` during Phase 6.4 god-object
|
|
11
|
+
* decomposition; semantics unchanged.
|
|
12
|
+
*/
|
|
13
|
+
export function isJSONColumnDefSetArray(raw) {
|
|
14
|
+
if (!Array.isArray(raw)) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return raw.every((entry) => {
|
|
18
|
+
if (typeof entry !== 'object' || entry === null) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const candidate = entry;
|
|
22
|
+
return typeof candidate.name === 'string' && Array.isArray(candidate.columnDefs);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Typeguard for the persisted user-level table settings blob. Every
|
|
27
|
+
* field is optional, but every present field must be boolean: anything
|
|
28
|
+
* else is a sign of schema drift or a tampered slot.
|
|
29
|
+
*
|
|
30
|
+
* Lifted from `TableContext.svelte.ts` during Phase 6.4.
|
|
31
|
+
*/
|
|
32
|
+
export function isSavedTableSettings(raw) {
|
|
33
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const candidate = raw;
|
|
37
|
+
const optionalBoolean = (key) => candidate[key] === undefined || typeof candidate[key] === 'boolean';
|
|
38
|
+
return (optionalBoolean('isCompact') &&
|
|
39
|
+
optionalBoolean('singleClickEditing') &&
|
|
40
|
+
optionalBoolean('alternateRowColours') &&
|
|
41
|
+
optionalBoolean('changeColourOnHover') &&
|
|
42
|
+
optionalBoolean('copyWithHeaders') &&
|
|
43
|
+
optionalBoolean('commaSeparatedCopy'));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Typeguard for a non-empty string. Used for the persisted selected
|
|
47
|
+
* preset name slot.
|
|
48
|
+
*
|
|
49
|
+
* Lifted from `TableContext.svelte.ts` during Phase 6.4.
|
|
50
|
+
*/
|
|
51
|
+
export function isNonEmptyString(raw) {
|
|
52
|
+
return typeof raw === 'string' && raw.length > 0;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Phase 6.4 god-object decomposition - sub-context that owns every
|
|
56
|
+
* persistence / preferences concern previously held directly on
|
|
57
|
+
* `TableContext`:
|
|
58
|
+
*
|
|
59
|
+
* - `_columnPresets` (the persisted preset list `$state`),
|
|
60
|
+
* - `_selectedPreset` (the currently-active preset `$state`),
|
|
61
|
+
* - `userIdSegment` (the sanitised user-id segment used in storage
|
|
62
|
+
* keys; `$derived` over `getUserId()`),
|
|
63
|
+
* - `saveColumnPreset(name)` (snapshot the live layout, persist the
|
|
64
|
+
* list, mark the new preset as selected),
|
|
65
|
+
* - `setSelectedPreset(preset)` (apply the preset to the live layout
|
|
66
|
+
* and persist the selected name),
|
|
67
|
+
* - `loadPresets()` / `loadSelectedPresetName()` /
|
|
68
|
+
* `loadSavedSettings()` (boot-time hydration helpers; the parent
|
|
69
|
+
* owns the orchestration because it depends on `setupDefaultColumnDefs`
|
|
70
|
+
* running first),
|
|
71
|
+
* - `clearPresetsAndSelection()` (drop both persisted slots),
|
|
72
|
+
* - `persistSettings(settings)` (write the per-table TableSettings
|
|
73
|
+
* blob),
|
|
74
|
+
* - the schema-validation typeguards
|
|
75
|
+
* (`isJSONColumnDefSetArray`, `isSavedTableSettings`,
|
|
76
|
+
* `isNonEmptyString`) - exported alongside the class.
|
|
77
|
+
*
|
|
78
|
+
* `TableContext` retains delegating getters / setters / methods for
|
|
79
|
+
* every legacy surface (`columnPresets`, `selectedPreset`,
|
|
80
|
+
* `saveColumnPreset`, `setSelectedPreset`, `_updateLocalStorageSettings`)
|
|
81
|
+
* so existing consumers need no migration. Future consumers can read
|
|
82
|
+
* `tableContext._preferences` directly once the migration is complete
|
|
83
|
+
* (see `src/stories/Concepts/TableContext-decomposition.mdx`).
|
|
84
|
+
*
|
|
85
|
+
* Every `localStorage` access is funnelled through this sub-context so
|
|
86
|
+
* the `scoria-table:<user>:<tableName>:<suffix>` namespace convention
|
|
87
|
+
* is enforced in a single place.
|
|
88
|
+
*/
|
|
89
|
+
export class PreferencesState {
|
|
90
|
+
_deps;
|
|
91
|
+
_columnPresets = $state([]);
|
|
92
|
+
//FIXME why was this allowed to be undefined? Mirrors the pre-extraction
|
|
93
|
+
// `TableContext._selectedPreset` field; retained as `undefined`-capable
|
|
94
|
+
// for source compatibility.
|
|
95
|
+
_selectedPreset = $state();
|
|
96
|
+
/**
|
|
97
|
+
* Sanitised segment of the persisted-storage key path. Resolves to
|
|
98
|
+
* `getUserId() ?? 'anon'` so different users on a shared browser
|
|
99
|
+
* cannot read each other's column presets, and so anonymous
|
|
100
|
+
* sessions still have a stable namespace.
|
|
101
|
+
*
|
|
102
|
+
* The `$derived.by` form is required here (over plain
|
|
103
|
+
* `$derived(expr)`) because class-field initialisers run BEFORE
|
|
104
|
+
* the constructor body assigns `_deps`; the function-form wrapper
|
|
105
|
+
* defers the read until the derived is first evaluated.
|
|
106
|
+
*/
|
|
107
|
+
userIdSegment = $derived.by(() => this._deps.getUserId() ?? 'anon');
|
|
108
|
+
/**
|
|
109
|
+
* @param deps thunks the sub-context reads from the parent.
|
|
110
|
+
* Constructor-only - no implicit setup so the parent
|
|
111
|
+
* remains in control of effect ownership and lifecycle.
|
|
112
|
+
*/
|
|
113
|
+
constructor(deps) {
|
|
114
|
+
this._deps = deps;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The current list of saved column presets. Setter is private to
|
|
118
|
+
* the sub-context; the parent writes through `setPresets` during
|
|
119
|
+
* the boot-time hydration flow.
|
|
120
|
+
*/
|
|
121
|
+
get columnPresets() {
|
|
122
|
+
return this._columnPresets;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Writer for `columnPresets`. Public so the parent boot flow can
|
|
126
|
+
* publish the hydrated list; not part of the consumer-facing
|
|
127
|
+
* surface (consumer-facing writes go through `saveColumnPreset`).
|
|
128
|
+
*/
|
|
129
|
+
setPresets(v) {
|
|
130
|
+
this._columnPresets = v;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The currently-active preset (the one whose name is persisted in
|
|
134
|
+
* the `selected-preset-name` slot). Setter is public so the parent
|
|
135
|
+
* boot flow can publish the resolved preset; the consumer-facing
|
|
136
|
+
* writer is `setSelectedPreset` below (which also persists the
|
|
137
|
+
* name).
|
|
138
|
+
*/
|
|
139
|
+
get selectedPreset() {
|
|
140
|
+
return this._selectedPreset;
|
|
141
|
+
}
|
|
142
|
+
set selectedPreset(v) {
|
|
143
|
+
this._selectedPreset = v;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Build the canonical `scoria-table:<user>:<tableName>:<suffix>`
|
|
147
|
+
* storage key. Centralised so every persisted-state slot reaches
|
|
148
|
+
* for the same namespacing convention; the `<user>` segment is
|
|
149
|
+
* `getUserId() ?? 'anon'` (see `userIdSegment`).
|
|
150
|
+
*/
|
|
151
|
+
storageKey(suffix) {
|
|
152
|
+
return `scoria-table:${this.userIdSegment}:${this._deps.getTableName()}:${suffix}`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Boot-time hydration helper. Reads the persisted preset list from
|
|
156
|
+
* `localStorage`, validates it against `isJSONColumnDefSetArray`,
|
|
157
|
+
* and returns the parsed array (or an empty array on every failure
|
|
158
|
+
* path). The parent runs this once `setupDefaultColumnDefs` has
|
|
159
|
+
* completed so the live `columnDefs` can be compared against the
|
|
160
|
+
* persisted snapshot.
|
|
161
|
+
*
|
|
162
|
+
* `localStorage` access is gated by the parent's `browser` check;
|
|
163
|
+
* this method assumes the caller already verified the environment.
|
|
164
|
+
*/
|
|
165
|
+
loadPresets() {
|
|
166
|
+
return readJSON(localStorage, this.storageKey('presets'), isJSONColumnDefSetArray, []);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Boot-time hydration helper. Reads the persisted selected-preset
|
|
170
|
+
* name. Returns `null` for missing / empty / storage-error slots
|
|
171
|
+
* so the parent can fall back to the first preset (or the
|
|
172
|
+
* default).
|
|
173
|
+
*
|
|
174
|
+
* Mirrors the pre-extraction try/catch around `getItem` verbatim:
|
|
175
|
+
* the same dev-only warning is emitted on read failure.
|
|
176
|
+
*/
|
|
177
|
+
loadSelectedPresetName() {
|
|
178
|
+
let savedPresetName = null;
|
|
179
|
+
try {
|
|
180
|
+
savedPresetName = localStorage.getItem(this.storageKey('selected-preset-name'));
|
|
181
|
+
}
|
|
182
|
+
catch (e) {
|
|
183
|
+
if (dev) {
|
|
184
|
+
console.warn('selected-preset-name read failed:', e);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (!isNonEmptyString(savedPresetName)) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
return savedPresetName;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Boot-time hydration helper. Reads the persisted per-table
|
|
194
|
+
* settings blob (`isCompact`, `singleClickEditing`, etc.). Returns
|
|
195
|
+
* `null` when the slot is missing or fails validation so the
|
|
196
|
+
* parent can apply its own default policy.
|
|
197
|
+
*/
|
|
198
|
+
loadSavedSettings() {
|
|
199
|
+
const fallback = {};
|
|
200
|
+
const saved = readJSON(localStorage, this.storageKey('settings'), isSavedTableSettings, fallback);
|
|
201
|
+
if (saved === fallback) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
return saved;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Drop the persisted presets and selected-preset-name slots. Used
|
|
208
|
+
* by the parent's boot flow when the saved snapshot disagrees with
|
|
209
|
+
* the live column-def shape (schema drift or column-set change).
|
|
210
|
+
*/
|
|
211
|
+
clearPresetsAndSelection() {
|
|
212
|
+
localStorage.removeItem(this.storageKey('presets'));
|
|
213
|
+
localStorage.removeItem(this.storageKey('selected-preset-name'));
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Persist the selected-preset name as plain text (no JSON
|
|
217
|
+
* envelope - the slot is a single string by design).
|
|
218
|
+
*/
|
|
219
|
+
persistSelectedPresetName(name) {
|
|
220
|
+
localStorage.setItem(this.storageKey('selected-preset-name'), name);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Persist the per-table settings blob (`isCompact`,
|
|
224
|
+
* `singleClickEditing`, etc.) as JSON. Format and key remain
|
|
225
|
+
* exactly as before the extraction.
|
|
226
|
+
*/
|
|
227
|
+
persistSettings(settings) {
|
|
228
|
+
localStorage.setItem(this.storageKey('settings'), JSON.stringify(settings));
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Persist the full preset list as JSON. Each preset's
|
|
232
|
+
* `columnPinningState` (Map-based) is flattened into entry arrays
|
|
233
|
+
* because Map does not survive `JSON.stringify`; the reader (via
|
|
234
|
+
* `loadPresets` -> `reassignDefsToPresets`) rehydrates it through
|
|
235
|
+
* `adaptJSONPinningState`.
|
|
236
|
+
*
|
|
237
|
+
* Pulled out of `saveColumnPreset` so the per-preset
|
|
238
|
+
* `toJSON()` walk is unit-testable in isolation.
|
|
239
|
+
*/
|
|
240
|
+
persistPresets(presets) {
|
|
241
|
+
const jsonFriendly = presets.map((preset) => {
|
|
242
|
+
return {
|
|
243
|
+
...preset,
|
|
244
|
+
columnDefs: preset.columnDefs.map((it) => {
|
|
245
|
+
return { ...it.toJSON(), header: it.header.toString() };
|
|
246
|
+
}),
|
|
247
|
+
columnPinningState: {
|
|
248
|
+
left: [...(preset.columnPinningState.left?.entries() ?? [])],
|
|
249
|
+
right: [...(preset.columnPinningState.right?.entries() ?? [])],
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
localStorage.setItem(this.storageKey('presets'), JSON.stringify(jsonFriendly));
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Apply a saved column preset to the live table layout and
|
|
257
|
+
* persist the selection by name. Mirrors the pre-extraction
|
|
258
|
+
* `TableContext.setSelectedPreset` verbatim:
|
|
259
|
+
*
|
|
260
|
+
* 1. Replace `columnDefs`, `columnVisibility`, `columnPinning`.
|
|
261
|
+
* 2. Forward the preset's `sortingState` to the data-repository
|
|
262
|
+
* updater (no-op when the repo has no `updateSorting` hook).
|
|
263
|
+
* 3. Update `selectedPreset`.
|
|
264
|
+
* 4. Persist the preset name to `selected-preset-name`.
|
|
265
|
+
*
|
|
266
|
+
* Bound as a class property so callers (notably the toolbar
|
|
267
|
+
* dropdown) can pass the reference around without binding `this`.
|
|
268
|
+
*/
|
|
269
|
+
setSelectedPreset = (preset) => {
|
|
270
|
+
if (this._deps.getDebug()) {
|
|
271
|
+
console.log('setting selected preset:', preset);
|
|
272
|
+
}
|
|
273
|
+
this._deps.setColumnDefs(preset.columnDefs);
|
|
274
|
+
this._deps.applySortingState(preset.sortingState);
|
|
275
|
+
this._deps.setColumnVisibility(preset.visibilityState);
|
|
276
|
+
this._deps.setColumnPinning(preset.columnPinningState);
|
|
277
|
+
this._selectedPreset = preset;
|
|
278
|
+
this.persistSelectedPresetName(preset.name);
|
|
279
|
+
};
|
|
280
|
+
/**
|
|
281
|
+
* Snapshot the current column layout into a new preset, replacing
|
|
282
|
+
* any existing preset whose name matches case-insensitively, and
|
|
283
|
+
* persist the full preset list to `localStorage`. Marks the new
|
|
284
|
+
* preset as selected (which also persists its name).
|
|
285
|
+
*
|
|
286
|
+
* Mirrors the pre-extraction `TableContext.saveColumnPreset`
|
|
287
|
+
* verbatim. No-op when `name` is empty.
|
|
288
|
+
*/
|
|
289
|
+
saveColumnPreset = (name) => {
|
|
290
|
+
if (!name) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
const visibilityState = this._deps.getColumnVisibility();
|
|
294
|
+
const columnPinningState = this._deps.getColumnPinning();
|
|
295
|
+
const columnDefs = this._deps.getColumnDefs();
|
|
296
|
+
const sortingState = this._deps.getSortingArray() ?? [];
|
|
297
|
+
const newPreset = {
|
|
298
|
+
columnDefs,
|
|
299
|
+
name,
|
|
300
|
+
visibilityState,
|
|
301
|
+
columnPinningState,
|
|
302
|
+
sortingState,
|
|
303
|
+
};
|
|
304
|
+
const lowercasePresetname = name.toLocaleLowerCase();
|
|
305
|
+
const indexToReplace = this._columnPresets.findIndex((oldPreset) => oldPreset.name.toLocaleLowerCase() === lowercasePresetname);
|
|
306
|
+
const newPresets = this._columnPresets.concat();
|
|
307
|
+
if (indexToReplace > -1) {
|
|
308
|
+
newPresets[indexToReplace] = newPreset;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
newPresets.push(newPreset);
|
|
312
|
+
}
|
|
313
|
+
this._columnPresets = newPresets;
|
|
314
|
+
this.persistPresets(newPresets);
|
|
315
|
+
this.setSelectedPreset(newPreset);
|
|
316
|
+
};
|
|
317
|
+
}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
-
import type { SvelteMap } from 'svelte/reactivity';
|
|
2
1
|
import type { Row } from './Row.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read-only view of a row model.
|
|
4
|
+
*
|
|
5
|
+
* Note: historically this interface (despite the `Readonly` name) declared
|
|
6
|
+
* `rowsById` as a mutable `SvelteMap` while the sibling `RowModel` used
|
|
7
|
+
* `ReadonlyMap`. The names suggested the inverse of their bodies; both
|
|
8
|
+
* interfaces now correctly typecheck as `ReadonlyMap<string, Row<T>>`.
|
|
9
|
+
*
|
|
10
|
+
* `ReadonlyRowModel` is currently unused inside scoria (no consumer beyond
|
|
11
|
+
* this file) but is retained as a public type for symmetry with `RowModel`
|
|
12
|
+
* and to support future read-only model exposure.
|
|
13
|
+
*/
|
|
3
14
|
export interface ReadonlyRowModel<T extends object> {
|
|
4
|
-
readonly rows:
|
|
5
|
-
readonly rowsById:
|
|
15
|
+
readonly rows: ReadonlyArray<Row<T>>;
|
|
16
|
+
readonly rowsById: ReadonlyMap<string, Row<T>>;
|
|
6
17
|
}
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
import type { TableCell } from '../Columns/TableCell.js';
|
|
2
|
+
/**
|
|
3
|
+
* `Row<T>` is the per-row handle the Table exposes to cells, repositories, and
|
|
4
|
+
* application code. Its `getValue` overload is the only point at which a
|
|
5
|
+
* column id is mapped to a value:
|
|
6
|
+
*
|
|
7
|
+
* - When the id is a known property of `T` (data-backed columns such as
|
|
8
|
+
* `AccessorDef<T, K>`), the call returns `T[K] | Promise<T[K]>`. Consumers
|
|
9
|
+
* in cell components can therefore drop `as` casts and read a narrow type.
|
|
10
|
+
* - Synthetic columns (`actions-<uuid>`, `is-selectable-<uuid>`, expand
|
|
11
|
+
* markers and similar) do not correspond to a property on `T`. The fallback
|
|
12
|
+
* `(columnId: string)` signature is retained for those calls and returns
|
|
13
|
+
* `unknown | Promise<unknown>`; callers that need a concrete type must
|
|
14
|
+
* still narrow it locally.
|
|
15
|
+
*
|
|
16
|
+
* The trade-off is intentional: the typed overload covers the common path
|
|
17
|
+
* (every accessor cell) while the looser signature keeps the synthetic
|
|
18
|
+
* columns compiling without runtime change.
|
|
19
|
+
*/
|
|
2
20
|
export interface Row<T extends object> {
|
|
3
21
|
getValue: {
|
|
4
22
|
<K extends keyof T>(columnId: K): T[K] | Promise<T[K]>;
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import type { Row } from './Row.js';
|
|
2
|
+
/**
|
|
3
|
+
* Mutable row-model container held by `TableContext`. The reactivity is
|
|
4
|
+
* carried by the surrounding `$state` cell on `TableContext`, not by the map
|
|
5
|
+
* itself (`new Map(...)` is sufficient because the whole `RowModel` is
|
|
6
|
+
* reassigned wholesale when sorting / pagination updates).
|
|
7
|
+
*
|
|
8
|
+
* - `rows` is the ordered array consumed by the body components.
|
|
9
|
+
* - `rowsById` is the lookup map. Typed as `ReadonlyMap` deliberately:
|
|
10
|
+
* `TableContext` rebuilds the map rather than mutating it in place, and
|
|
11
|
+
* downstream consumers must not write to it.
|
|
12
|
+
*/
|
|
2
13
|
export interface RowModel<T extends object> {
|
|
3
14
|
rows: Array<Row<T>>;
|
|
4
15
|
rowsById: ReadonlyMap<string, Row<T>>;
|