@lavalogic/scoria 0.36.0 → 0.37.1
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/dist/Components/AccordionGroup.svelte +6 -2
- package/dist/Components/AccordionGroupButton.svelte +78 -78
- package/dist/Components/AccordionGroupButtonProps.d.ts +27 -8
- package/dist/Components/AccordionGroupProps.d.ts +10 -2
- package/dist/Components/Action.svelte +31 -33
- package/dist/Components/ActionProps.d.ts +23 -3
- package/dist/Components/AlertModal.svelte +90 -39
- 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 +37 -15
- 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 +70 -62
- 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 +7 -0
- package/dist/Components/Base/Snippets.svelte.d.ts +5 -1
- package/dist/Components/BigRadioSet.svelte +18 -9
- package/dist/Components/BigRadioSetProps.d.ts +17 -1
- package/dist/Components/Bubble.svelte +67 -34
- package/dist/Components/Bubble.svelte.d.ts +23 -2
- package/dist/Components/BubbleProps.d.ts +55 -4
- package/dist/Components/Button.svelte +50 -38
- package/dist/Components/ButtonProps.d.ts +66 -1
- package/dist/Components/Checkbox.svelte +57 -29
- 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 +53 -22
- package/dist/Components/CollapsibleCardProps.d.ts +22 -1
- package/dist/Components/Contexts/ContextMenu.svelte +53 -32
- package/dist/Components/Contexts/ContextMenu.svelte.d.ts +26 -0
- package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -7
- package/dist/Components/Contexts/ContextMenuDivider.svelte.d.ts +9 -0
- package/dist/Components/Contexts/ContextMenuOption.svelte +27 -18
- 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 +28 -4
- package/dist/Components/Contexts/Toast.svelte.d.ts +14 -0
- package/dist/Components/Contexts/ToastContainer.svelte +30 -11
- 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 +21 -10
- package/dist/Components/Contexts/Tooltip.svelte.d.ts +10 -0
- package/dist/Components/DataMatrixIcon.svelte +82 -11
- package/dist/Components/DataMatrixIconProps.d.ts +73 -1
- package/dist/Components/DateInput.svelte +64 -29
- package/dist/Components/DateInput.svelte.d.ts +1 -1
- package/dist/Components/DateOnlyInputProps.d.ts +31 -5
- package/dist/Components/DatePicker.svelte +96 -108
- package/dist/Components/DatePickerProps.d.ts +18 -1
- package/dist/Components/DateTimeInputProps.d.ts +30 -5
- package/dist/Components/DesktopModal.svelte +14 -43
- package/dist/Components/DesktopModalProps.d.ts +5 -4
- package/dist/Components/Dial.svelte +103 -41
- package/dist/Components/DialProps.d.ts +74 -2
- package/dist/Components/DimensionInput.svelte +50 -64
- package/dist/Components/DimensionInput.svelte.d.ts +1 -1
- package/dist/Components/DimensionInputProps.d.ts +39 -4
- package/dist/Components/DragMenu/DragMenuHolder.svelte +41 -29
- package/dist/Components/DragMenu/DragMenuHolderProps.d.ts +30 -1
- package/dist/Components/DragMenu/DraggableCard.svelte +44 -8
- package/dist/Components/DragMenu/DraggableCardProps.d.ts +27 -1
- package/dist/Components/FileCard.svelte +6 -2
- package/dist/Components/FileCardProps.d.ts +17 -1
- package/dist/Components/FileUpload.svelte +82 -42
- package/dist/Components/FileUploadProps.d.ts +34 -4
- package/dist/Components/GridInput.svelte +27 -17
- package/dist/Components/GridInput.svelte.d.ts +5 -5
- package/dist/Components/GridInputProps.d.ts +4 -1
- package/dist/Components/GridInputSet.svelte +12 -5
- package/dist/Components/GridInputSet.svelte.d.ts +5 -5
- package/dist/Components/GridInputSetProps.d.ts +4 -2
- package/dist/Components/HorizontalTabGroup.svelte +13 -11
- package/dist/Components/HorizontalTabGroupButton.svelte +16 -68
- package/dist/Components/HorizontalTabGroupProps.d.ts +15 -2
- package/dist/Components/Icon.svelte +62 -21
- package/dist/Components/IconProps.d.ts +54 -6
- package/dist/Components/Icons.d.ts +8 -0
- package/dist/Components/Icons.js +234 -215
- package/dist/Components/LoadingAnimation.svelte +18 -18
- 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 +18 -20
- 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 +11 -13
- 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 +77 -82
- 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 +88 -76
- 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 +35 -30
- 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 +12 -3
- package/dist/Components/Nav/NavServiceMenuListProps.d.ts +25 -1
- package/dist/Components/Nav/NavTab.svelte +19 -48
- 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 +29 -20
- package/dist/Components/Nav/ServicesNav.svelte +60 -34
- 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 +37 -27
- package/dist/Components/NumberInputProps.d.ts +37 -0
- package/dist/Components/PageHeading.svelte +2 -13
- 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 +27 -15
- 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 +14 -3
- package/dist/Components/PortalProps.d.ts +20 -1
- package/dist/Components/ProgressBubble.svelte +98 -53
- package/dist/Components/ProgressBubbleProps.d.ts +23 -2
- package/dist/Components/QuerySelect.svelte +103 -159
- 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 +86 -108
- 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 +19 -69
- package/dist/Components/StepForm.svelte +52 -52
- package/dist/Components/StepFormProps.d.ts +16 -2
- package/dist/Components/Switch.svelte +68 -31
- 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 +106 -50
- 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 +43 -9
- 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 +15 -5
- 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 +437 -91
- 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 +43 -13
- package/dist/Components/Table/Body/Rows/Columns/AccessorComponentProps.d.ts +12 -0
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +50 -38
- 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 +61 -26
- 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 +36 -16
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +133 -26
- 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 +54 -20
- 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 +55 -40
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte.d.ts +11 -0
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +38 -27
- 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 +22 -7
- 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 +61 -31
- 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 +123 -244
- 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 +126 -189
- 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 +31 -19
- 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 +125 -187
- 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 +119 -270
- 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 +46 -23
- 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 +200 -132
- 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 +170 -53
- 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.d.ts +2 -2
- 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 +5 -3
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte.d.ts +12 -11
- package/dist/Components/Table/Headers/SelectAllHeader.svelte +5 -3
- package/dist/Components/Table/Headers/SelectAllHeader.svelte.d.ts +12 -11
- package/dist/Components/Table/Headers/TableHead.svelte +340 -200
- 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 +108 -50
- package/dist/Components/Table/Misc/ColumnPanel.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/ColumnPanelModal.svelte +20 -7
- 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 +30 -41
- package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/FilterPanel.svelte +387 -29
- package/dist/Components/Table/Misc/FilterPanel.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/FilterPanelModal.svelte +4 -51
- package/dist/Components/Table/Misc/FilterPanelModal.svelte.d.ts +2 -23
- package/dist/Components/Table/Misc/SidePanel.svelte +12 -9
- 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 +44 -35
- 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 +17 -48
- package/dist/Components/Table/Misc/TableHorizontalBar.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/TableSidebar.svelte +28 -47
- package/dist/Components/Table/Misc/TableSidebar.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/ToolboxPanel.svelte +121 -55
- package/dist/Components/Table/Misc/ToolboxPanel.svelte.d.ts +12 -11
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +31 -24
- 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 +85 -41
- 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 +24 -0
- package/dist/Components/Table/SubApis.svelte.js +380 -0
- package/dist/Components/Table/Table.svelte +345 -172
- 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 +30 -9
- package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js +14 -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 +580 -58
- package/dist/Components/Table/Types/Context/TableContext.svelte.js +984 -1278
- 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 +244 -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 +40 -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 +190 -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 +270 -0
- package/dist/Components/TextArea.svelte +37 -18
- package/dist/Components/TextAreaProps.d.ts +37 -0
- package/dist/Components/TextInput.svelte +41 -22
- package/dist/Components/TextInputProps.d.ts +58 -1
- package/dist/Components/ThreeStateRadio.svelte +61 -64
- package/dist/Components/ThreeStateRadioProps.d.ts +29 -1
- package/dist/Components/Touch/BoolCard.svelte +8 -15
- 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 +17 -25
- 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 +10 -3
- package/dist/Components/Touch/EditCardProps.d.ts +21 -0
- package/dist/Components/Touch/InfoCard.svelte +14 -7
- package/dist/Components/Touch/InfoCardProps.d.ts +9 -0
- package/dist/Components/Touch/InfoTextCard.svelte +9 -2
- package/dist/Components/Touch/InfoTextCardProps.d.ts +8 -0
- package/dist/Components/Touch/ModalExplanation.svelte +9 -12
- 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 +62 -105
- package/dist/Components/Touch/NumberKeyboardProps.d.ts +19 -0
- package/dist/Components/Touch/NumberModal.svelte +16 -6
- package/dist/Components/Touch/NumberModalProps.d.ts +23 -1
- package/dist/Components/Touch/PlusMinusCard.svelte +12 -16
- 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 +33 -15
- package/dist/Components/Touch/SelectModalProps.d.ts +22 -1
- package/dist/Components/Touch/SummaryCard.svelte +56 -14
- package/dist/Components/Touch/SummaryCardProps.d.ts +16 -3
- package/dist/Components/Touch/TextAreaModal.svelte +18 -9
- package/dist/Components/Touch/TextAreaModalProps.d.ts +21 -0
- package/dist/Components/Touch/TextModal.svelte +15 -32
- package/dist/Components/Touch/TextModalProps.d.ts +28 -1
- package/dist/Components/Touch/TouchCard.svelte +9 -47
- package/dist/Components/Touch/TouchCardProps.d.ts +21 -0
- package/dist/Components/Touch/TouchModal.svelte +105 -99
- package/dist/Components/Touch/TouchModalProps.d.ts +35 -1
- package/dist/Components/Touch/UtilityButton.svelte +36 -18
- package/dist/Components/Touch/UtilityButtonProps.d.ts +16 -0
- package/dist/Components/VerticalTabGroup.svelte +18 -40
- package/dist/Components/VerticalTabGroupButton.svelte +11 -50
- 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 +10 -1
- package/dist/Helpers/Datamatrix.js +290 -1
- package/dist/Helpers/Helpers.svelte.d.ts +252 -18
- package/dist/Helpers/Helpers.svelte.js +271 -75
- 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 +12 -11
- package/dist/Types/Examples/ExampleModal.svelte.d.ts +2 -2
- 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/_mixins.scss +451 -167
- package/dist/scss/_motion.scss +57 -0
- package/dist/scss/_sizing.scss +16 -0
- 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 +35 -31
|
@@ -0,0 +1,613 @@
|
|
|
1
|
+
import { tick } from 'svelte';
|
|
2
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
3
|
+
import { asyncForEach, devCatch } from '../../../../Helpers/Helpers.svelte.js';
|
|
4
|
+
import { RowSelectionDef } from '../Columns/Definitions/RowSelection/RowSelectionDef.svelte.js';
|
|
5
|
+
/**
|
|
6
|
+
* Phase 6.5 god-object decomposition - sub-context that owns every
|
|
7
|
+
* selection + highlighting + key-cache concern previously held directly
|
|
8
|
+
* on `TableContext`:
|
|
9
|
+
*
|
|
10
|
+
* - `selectedItems` (the `SvelteMap<RowIdType, T>` of currently
|
|
11
|
+
* selected rows, keyed by extractor id);
|
|
12
|
+
* - `invalidValues` (the parallel `SvelteMap` of rows currently
|
|
13
|
+
* failing their per-cell validation);
|
|
14
|
+
* - `highlightedItems` (the visual-highlight `SvelteMap`, used for
|
|
15
|
+
* the copy-to-clipboard "highlighted rows" flow);
|
|
16
|
+
* - `_keyCache` (a `WeakMap<T, RowIdType>` that memoises the
|
|
17
|
+
* `selectionExtractor` result for each row reference;
|
|
18
|
+
* `handleItemMutation` clears the entry when the parent's
|
|
19
|
+
* `onEditCell` callback may have mutated the id field in place);
|
|
20
|
+
* - the pending-flush buffer (`_pendingSelectionChanges`) and its
|
|
21
|
+
* debounced flush - preserves SvelteMap per-key reactivity and
|
|
22
|
+
* avoids the per-toggle reactive cascade caught during Phase-5
|
|
23
|
+
* Group 2;
|
|
24
|
+
* - `toggleSelected` / `setSelected` / `resetSelectedItems` /
|
|
25
|
+
* `setSelectionMap` (consumer-facing writers);
|
|
26
|
+
* - `selectionContains` / `addInvalidValue` / `removeInvalidValue`;
|
|
27
|
+
* - `selectAllInCurrentPage`, `updateSelectedItems`,
|
|
28
|
+
* `allSelectedInCurrentPage`;
|
|
29
|
+
* - `toggleHighlightedRow` / `resetHighlightedRows` /
|
|
30
|
+
* `onHighlightAll` / `allHighlighted` / `hasHighlightedItems`;
|
|
31
|
+
* - `cachedKey(item)` (sync/async key memoisation);
|
|
32
|
+
* - `handleItemMutation` (the key-cache + selection-rebind half of
|
|
33
|
+
* the pre-extraction `onEditCell`; the user-supplied edit callback
|
|
34
|
+
* stays on `TableContext`).
|
|
35
|
+
*
|
|
36
|
+
* Effect lifecycle: the parent owns every `$effect`. The two effects
|
|
37
|
+
* that previously read these state slots (the post-pagination rebind
|
|
38
|
+
* and the `_allHighlighted` derivation) continue to live on
|
|
39
|
+
* `TableContext`, but they now call into this sub-context through
|
|
40
|
+
* `updateSelectedItems()` / `setAllHighlighted(...)` /
|
|
41
|
+
* `computeAllHighlightedInRange(...)` rather than mutating the state
|
|
42
|
+
* slots directly.
|
|
43
|
+
*
|
|
44
|
+
* `TableContext` retains delegating getters / setters / methods for
|
|
45
|
+
* every legacy surface so existing consumers need no migration.
|
|
46
|
+
*/
|
|
47
|
+
export class SelectionState {
|
|
48
|
+
_deps;
|
|
49
|
+
/** Selected rows keyed by id. Map entries are mutated in place so
|
|
50
|
+
* the per-key reactivity tracking of `SvelteMap` survives every
|
|
51
|
+
* toggle. Replacing the slot with a cloned map would invalidate
|
|
52
|
+
* every `.has()` / `.get()` subscriber across all visible rows
|
|
53
|
+
* (regression caught during Phase-5 Group 2). */
|
|
54
|
+
_selectedItems = $state(new SvelteMap());
|
|
55
|
+
/** Parallel `SvelteMap` of rows currently failing per-cell
|
|
56
|
+
* validation. Public-mutable for source compatibility. */
|
|
57
|
+
_invalidValues = $state(new SvelteMap());
|
|
58
|
+
/** Visual-highlight `SvelteMap`, distinct from selection. */
|
|
59
|
+
_highlightedItems = $state(new SvelteMap());
|
|
60
|
+
/**
|
|
61
|
+
* Memoises the `selectionExtractor` result for each row reference.
|
|
62
|
+
* Cleared by `handleItemMutation` immediately before the parent's
|
|
63
|
+
* `onEditCell` callback may mutate the id field in place.
|
|
64
|
+
*
|
|
65
|
+
* `WeakMap` so rows that get garbage-collected do not hold the
|
|
66
|
+
* cache entry forever; rows replaced by remote-paged refresh see
|
|
67
|
+
* their entry collected automatically.
|
|
68
|
+
*/
|
|
69
|
+
_keyCache = new WeakMap();
|
|
70
|
+
/**
|
|
71
|
+
* Pending selection changes - buffered and flushed as a single
|
|
72
|
+
* `SvelteMap` mutation pass to avoid per-toggle reactive cascades.
|
|
73
|
+
* Values: `null` = pending delete, `T` = pending insert.
|
|
74
|
+
*/
|
|
75
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
76
|
+
_pendingSelectionChanges = new Map();
|
|
77
|
+
_flushScheduled = false;
|
|
78
|
+
/** Tracks the async `allSelectedBySelectableMethod` result so the
|
|
79
|
+
* `$derived` can return a synchronous value while a promise
|
|
80
|
+
* resolves in the background. */
|
|
81
|
+
_allSelectedAsync = $state(false);
|
|
82
|
+
/** Last computed value of `_areAllHighlightedInRange` for the
|
|
83
|
+
* current page. Mutated by the parent's `$effect` through
|
|
84
|
+
* `setAllHighlighted` (the effect lives in `TableContext`
|
|
85
|
+
* because it needs the parent's pagination-repo reads). */
|
|
86
|
+
_allHighlighted = $state(false);
|
|
87
|
+
/**
|
|
88
|
+
* @param deps thunks the sub-context reads from the parent.
|
|
89
|
+
* Constructor-only - no implicit setup so the parent
|
|
90
|
+
* remains in control of effect ownership and lifecycle.
|
|
91
|
+
*/
|
|
92
|
+
constructor(deps) {
|
|
93
|
+
this._deps = deps;
|
|
94
|
+
}
|
|
95
|
+
// -----------------------------------------------------------------
|
|
96
|
+
// selectedItems / invalidValues / highlightedItems
|
|
97
|
+
// -----------------------------------------------------------------
|
|
98
|
+
/** Currently-selected rows, keyed by `selectionExtractor(item)`. */
|
|
99
|
+
get selectedItems() {
|
|
100
|
+
return this._selectedItems;
|
|
101
|
+
}
|
|
102
|
+
/** Currently-invalid rows. */
|
|
103
|
+
get invalidValues() {
|
|
104
|
+
return this._invalidValues;
|
|
105
|
+
}
|
|
106
|
+
set invalidValues(v) {
|
|
107
|
+
this._invalidValues = v;
|
|
108
|
+
}
|
|
109
|
+
/** Currently-highlighted rows. */
|
|
110
|
+
get highlightedItems() {
|
|
111
|
+
return this._highlightedItems;
|
|
112
|
+
}
|
|
113
|
+
/** `true` iff any row is currently highlighted. */
|
|
114
|
+
hasHighlightedItems = $derived(this._highlightedItems.size > 0);
|
|
115
|
+
/**
|
|
116
|
+
* `true` iff every visible row on the current page is highlighted.
|
|
117
|
+
* Set by the parent's `$effect` through `setAllHighlighted` (the
|
|
118
|
+
* effect reads `paginationRepo.pageStartIndex` /
|
|
119
|
+
* `paginationRepo.pageEndIndexExclusive` and delegates the range
|
|
120
|
+
* computation to `computeAllHighlightedInRange`).
|
|
121
|
+
*/
|
|
122
|
+
get allHighlighted() {
|
|
123
|
+
return this._allHighlighted;
|
|
124
|
+
}
|
|
125
|
+
/** Setter for `_allHighlighted` driven by the parent's effect. */
|
|
126
|
+
setAllHighlighted(v) {
|
|
127
|
+
this._allHighlighted = v;
|
|
128
|
+
}
|
|
129
|
+
// -----------------------------------------------------------------
|
|
130
|
+
// _cachedKey / handleItemMutation (key-cache half of onEditCell)
|
|
131
|
+
// -----------------------------------------------------------------
|
|
132
|
+
/**
|
|
133
|
+
* Resolves the row identifier through the caller-supplied
|
|
134
|
+
* extractor, memoising the result in `_keyCache` so subsequent
|
|
135
|
+
* lookups on the same `T` reference avoid the extractor cost.
|
|
136
|
+
*
|
|
137
|
+
* Async extractors are supported: the returned promise is awaited
|
|
138
|
+
* by every call site through the `instanceof Promise` branch.
|
|
139
|
+
*
|
|
140
|
+
* Public so the parent's `originalRowIndices` / `getHighlightedRowData`
|
|
141
|
+
* flows can reach the cached key without piercing the boundary.
|
|
142
|
+
*/
|
|
143
|
+
cachedKey(item) {
|
|
144
|
+
const cached = this._keyCache.get(item);
|
|
145
|
+
if (cached !== undefined) {
|
|
146
|
+
return cached;
|
|
147
|
+
}
|
|
148
|
+
const raw = this._deps.getSelectionExtractor()(item);
|
|
149
|
+
if (raw instanceof Promise) {
|
|
150
|
+
return raw.then((key) => {
|
|
151
|
+
this._keyCache.set(item, key);
|
|
152
|
+
return key;
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
this._keyCache.set(item, raw);
|
|
156
|
+
return raw;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Invoked by the parent's `onEditCell`. Splits cleanly:
|
|
160
|
+
*
|
|
161
|
+
* 1. Resolves the row's old key (sync or async) and snapshots
|
|
162
|
+
* its selection state.
|
|
163
|
+
* 2. If the row was selected, drops it from the selection map
|
|
164
|
+
* so the post-edit insert (step 4) does not duplicate.
|
|
165
|
+
* 3. Invalidates the key-cache entry for the row reference -
|
|
166
|
+
* the callback may mutate the id field in place.
|
|
167
|
+
* 4. Awaits the supplied callback (the user's
|
|
168
|
+
* `TableInitOptions.onEditCell`).
|
|
169
|
+
* 5. Re-inserts the row under its new extractor result if it
|
|
170
|
+
* was previously selected AND `isSelectable` is currently
|
|
171
|
+
* true.
|
|
172
|
+
*
|
|
173
|
+
* The parent's `onEditCell` becomes a thin wrapper that passes
|
|
174
|
+
* the user-supplied callback in as the `runUserEditCallback`
|
|
175
|
+
* thunk.
|
|
176
|
+
*/
|
|
177
|
+
handleItemMutation = async (item, runUserEditCallback) => {
|
|
178
|
+
const rawOldKey = this.cachedKey(item);
|
|
179
|
+
const oldKey = rawOldKey instanceof Promise ? await rawOldKey : rawOldKey;
|
|
180
|
+
const wasSelected = this._selectedItems.has(oldKey);
|
|
181
|
+
if (wasSelected) {
|
|
182
|
+
this._selectedItems.delete(oldKey);
|
|
183
|
+
}
|
|
184
|
+
// Invalidate cache - the callback may mutate the item's key
|
|
185
|
+
// field in place.
|
|
186
|
+
this._keyCache.delete(item);
|
|
187
|
+
await runUserEditCallback();
|
|
188
|
+
if (wasSelected && this._deps.getIsSelectable()) {
|
|
189
|
+
const rawNewKey = this.cachedKey(item);
|
|
190
|
+
const newKey = rawNewKey instanceof Promise ? await rawNewKey : rawNewKey;
|
|
191
|
+
if (newKey) {
|
|
192
|
+
this._selectedItems.set(newKey, item);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
// -----------------------------------------------------------------
|
|
197
|
+
// pending-flush buffer
|
|
198
|
+
// -----------------------------------------------------------------
|
|
199
|
+
_flushPendingSelectionChanges() {
|
|
200
|
+
if (this._pendingSelectionChanges.size === 0) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// Mutate in place to preserve SvelteMap's per-key reactive tracking.
|
|
204
|
+
// Replacing _selectedItems with a cloned map would invalidate every
|
|
205
|
+
// .has()/.get() subscriber across all visible rows, not just the
|
|
206
|
+
// changed keys.
|
|
207
|
+
for (const [key, item] of this._pendingSelectionChanges) {
|
|
208
|
+
if (item === null) {
|
|
209
|
+
this._selectedItems.delete(key);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
this._selectedItems.set(key, item);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
this._pendingSelectionChanges.clear();
|
|
216
|
+
this._flushScheduled = false;
|
|
217
|
+
}
|
|
218
|
+
_schedulePendingFlush() {
|
|
219
|
+
if (this._flushScheduled) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
this._flushScheduled = true;
|
|
223
|
+
tick()
|
|
224
|
+
.then(() => {
|
|
225
|
+
this._flushPendingSelectionChanges();
|
|
226
|
+
})
|
|
227
|
+
.catch(devCatch);
|
|
228
|
+
}
|
|
229
|
+
// -----------------------------------------------------------------
|
|
230
|
+
// selection writers
|
|
231
|
+
// -----------------------------------------------------------------
|
|
232
|
+
/** Whether the row's selection key is currently in the selected
|
|
233
|
+
* map. Returns `true` unconditionally when the table has no
|
|
234
|
+
* selection column (legacy semantics). */
|
|
235
|
+
selectionContains = (item) => {
|
|
236
|
+
void item;
|
|
237
|
+
void this._deps.getIsSelectable();
|
|
238
|
+
void this._selectedItems.size;
|
|
239
|
+
if (!this._deps.getIsSelectable()) {
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
const rawIdentity = this.cachedKey(item);
|
|
243
|
+
return rawIdentity instanceof Promise
|
|
244
|
+
? rawIdentity.then((identity) => this._selectedItems.has(identity))
|
|
245
|
+
: this._selectedItems.has(rawIdentity);
|
|
246
|
+
};
|
|
247
|
+
/** Marks a row as invalid for downstream invalid-rows tracking. */
|
|
248
|
+
addInvalidValue = (item) => {
|
|
249
|
+
const raw = this.cachedKey(item);
|
|
250
|
+
if (raw instanceof Promise) {
|
|
251
|
+
return raw.then((key) => {
|
|
252
|
+
this._invalidValues.set(key, item);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
this._invalidValues.set(raw, item);
|
|
256
|
+
};
|
|
257
|
+
/** Clears the invalid-state marker for a row. */
|
|
258
|
+
removeInvalidValue = (item) => {
|
|
259
|
+
const raw = this.cachedKey(item);
|
|
260
|
+
if (raw instanceof Promise) {
|
|
261
|
+
return raw.then((key) => {
|
|
262
|
+
this._invalidValues.delete(key);
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
this._invalidValues.delete(raw);
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* Toggles the selected state of a row. Both the selected map and
|
|
269
|
+
* the pending-flush buffer are consulted so a same-microtask
|
|
270
|
+
* double-toggle reflects the user's last action rather than the
|
|
271
|
+
* persisted state.
|
|
272
|
+
*/
|
|
273
|
+
toggleSelected = (item) => {
|
|
274
|
+
const raw = this.cachedKey(item);
|
|
275
|
+
if (raw instanceof Promise) {
|
|
276
|
+
return raw.then((key) => {
|
|
277
|
+
const pendingValue = this._pendingSelectionChanges.get(key);
|
|
278
|
+
const isSelected = pendingValue !== undefined ? pendingValue !== null : this._selectedItems.has(key);
|
|
279
|
+
this._pendingSelectionChanges.set(key, isSelected ? null : item);
|
|
280
|
+
this._schedulePendingFlush();
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
const pendingValue = this._pendingSelectionChanges.get(raw);
|
|
284
|
+
const isSelected = pendingValue !== undefined ? pendingValue !== null : this._selectedItems.has(raw);
|
|
285
|
+
this._pendingSelectionChanges.set(raw, isSelected ? null : item);
|
|
286
|
+
this._schedulePendingFlush();
|
|
287
|
+
};
|
|
288
|
+
/** Sets the selected state of a row to the supplied value. */
|
|
289
|
+
setSelected = (item, selected) => {
|
|
290
|
+
const raw = this.cachedKey(item);
|
|
291
|
+
if (raw instanceof Promise) {
|
|
292
|
+
return raw.then((key) => {
|
|
293
|
+
this._pendingSelectionChanges.set(key, selected ? item : null);
|
|
294
|
+
this._schedulePendingFlush();
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
this._pendingSelectionChanges.set(raw, selected ? item : null);
|
|
298
|
+
this._schedulePendingFlush();
|
|
299
|
+
};
|
|
300
|
+
/** Replaces the entire selected-items map. */
|
|
301
|
+
setSelectionMap = (set) => {
|
|
302
|
+
this._selectedItems = set;
|
|
303
|
+
};
|
|
304
|
+
/** Clears every selected row. */
|
|
305
|
+
resetSelectedItems = () => {
|
|
306
|
+
this._selectedItems.clear();
|
|
307
|
+
};
|
|
308
|
+
// -----------------------------------------------------------------
|
|
309
|
+
// page-wide selection helpers
|
|
310
|
+
// -----------------------------------------------------------------
|
|
311
|
+
/**
|
|
312
|
+
* Resolve the page-window pair `[start, end)` from the dependency
|
|
313
|
+
* thunks, applying the `undefined` -> "no pagination" fallback.
|
|
314
|
+
* Exposed publicly so the parent's `_hasInvalidSelectedItems`
|
|
315
|
+
* effect can reach the same window without duplicating the
|
|
316
|
+
* fallback logic.
|
|
317
|
+
*/
|
|
318
|
+
getPageWindow() {
|
|
319
|
+
const sortedDataLength = this._deps.getSortedData().length;
|
|
320
|
+
const pageStartIndex = this._deps.getPageStartIndex() ?? 0;
|
|
321
|
+
const pageEndIndexRaw = this._deps.getPageEndIndexExclusive();
|
|
322
|
+
const pageEndIndexExclusive = pageEndIndexRaw === undefined
|
|
323
|
+
? sortedDataLength
|
|
324
|
+
: Math.min(pageEndIndexRaw, sortedDataLength);
|
|
325
|
+
return { pageStartIndex, pageEndIndexExclusive };
|
|
326
|
+
}
|
|
327
|
+
allSelectedBySelectableMethod(pageStartIndex, pageEndIndexExclusive, selectableMethod) {
|
|
328
|
+
const sortedData = this._deps.getSortedData();
|
|
329
|
+
const emptyPromise = new Promise(() => undefined);
|
|
330
|
+
if (selectableMethod) {
|
|
331
|
+
const pending = [];
|
|
332
|
+
for (let i = pageStartIndex; i < pageEndIndexExclusive; i++) {
|
|
333
|
+
const item = sortedData[i];
|
|
334
|
+
const relIdx = i - pageStartIndex;
|
|
335
|
+
const raw = this.cachedKey(item);
|
|
336
|
+
const checkUnselected = (key) => {
|
|
337
|
+
const selectable = selectableMethod(item, relIdx);
|
|
338
|
+
if (selectable instanceof Promise) {
|
|
339
|
+
return selectable.then((s) => s && !this._selectedItems.has(key));
|
|
340
|
+
}
|
|
341
|
+
return selectable && !this._selectedItems.has(key);
|
|
342
|
+
};
|
|
343
|
+
const r = raw instanceof Promise ? raw.then(checkUnselected) : checkUnselected(raw);
|
|
344
|
+
if (r === true) {
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
if (r instanceof Promise) {
|
|
348
|
+
pending.push(r);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (pending.length === 0) {
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
return Promise.race([
|
|
355
|
+
Promise.race(pending.map(async (p) => ((await p) ? false : emptyPromise))),
|
|
356
|
+
Promise.all(pending).then((results) => {
|
|
357
|
+
return !results.some(Boolean);
|
|
358
|
+
}),
|
|
359
|
+
]);
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
const pending = [];
|
|
363
|
+
for (let i = pageStartIndex; i < pageEndIndexExclusive; i++) {
|
|
364
|
+
const raw = this.cachedKey(sortedData[i]);
|
|
365
|
+
if (raw instanceof Promise) {
|
|
366
|
+
pending.push(raw.then((key) => !this._selectedItems.has(key)));
|
|
367
|
+
}
|
|
368
|
+
else if (!this._selectedItems.has(raw)) {
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
if (pending.length === 0) {
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
return Promise.race([
|
|
376
|
+
Promise.race(pending.map(async (p) => ((await p) ? false : emptyPromise))),
|
|
377
|
+
Promise.all(pending).then((results) => !results.some(Boolean)),
|
|
378
|
+
]);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* `true` iff every row on the current page is currently in the
|
|
383
|
+
* selection map (or covered by the `RowSelectionDef.isSelectable`
|
|
384
|
+
* gate). The async result is parked in `_allSelectedAsync` so a
|
|
385
|
+
* synchronous read remains possible.
|
|
386
|
+
*/
|
|
387
|
+
allSelectedInCurrentPage = $derived.by(() => {
|
|
388
|
+
void this._deps.getColumnDefs();
|
|
389
|
+
if (this._selectedItems.size === 0) {
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
// Subscribe to sortedData + pagination window so the derived
|
|
393
|
+
// recomputes when the page shifts (mirrors the pre-extraction
|
|
394
|
+
// `void this.paginationRepo?.pageStartIndex` reads).
|
|
395
|
+
void this._deps.getSortedData();
|
|
396
|
+
void this._deps.getPageStartIndex();
|
|
397
|
+
void this._deps.getPageEndIndexExclusive();
|
|
398
|
+
const { pageStartIndex, pageEndIndexExclusive } = this.getPageWindow();
|
|
399
|
+
const selectableMethod = this._deps
|
|
400
|
+
.getColumnDefs()
|
|
401
|
+
.find((it) => it instanceof RowSelectionDef)?.isSelectable;
|
|
402
|
+
const result = this.allSelectedBySelectableMethod(pageStartIndex, pageEndIndexExclusive, selectableMethod);
|
|
403
|
+
if (result instanceof Promise) {
|
|
404
|
+
result
|
|
405
|
+
.then((flag) => {
|
|
406
|
+
this._allSelectedAsync = flag;
|
|
407
|
+
})
|
|
408
|
+
.catch(devCatch);
|
|
409
|
+
return this._allSelectedAsync;
|
|
410
|
+
}
|
|
411
|
+
return result;
|
|
412
|
+
});
|
|
413
|
+
/**
|
|
414
|
+
* Toggles the selection state of every row on the current page.
|
|
415
|
+
* If every row is already selected, every row is deselected;
|
|
416
|
+
* otherwise every row that passes the optional `RowSelectionDef`
|
|
417
|
+
* `isSelectable` guard is added to the selection map.
|
|
418
|
+
*/
|
|
419
|
+
selectAllInCurrentPage = async () => {
|
|
420
|
+
void this._deps.getPageStartIndex();
|
|
421
|
+
const sortedData = this._deps.getSortedData();
|
|
422
|
+
const { pageStartIndex, pageEndIndexExclusive } = this.getPageWindow();
|
|
423
|
+
// Mutate in place to preserve SvelteMap per-key reactivity AND
|
|
424
|
+
// to honour `setSelectionMap()` - if the consumer replaced the
|
|
425
|
+
// slot wholesale, we mutate THAT map rather than allocating a
|
|
426
|
+
// new one.
|
|
427
|
+
const sel = this._selectedItems;
|
|
428
|
+
const pending = [];
|
|
429
|
+
if (this.allSelectedInCurrentPage) {
|
|
430
|
+
for (let i = pageStartIndex; i < pageEndIndexExclusive; i++) {
|
|
431
|
+
const raw = this.cachedKey(sortedData[i]);
|
|
432
|
+
if (raw instanceof Promise) {
|
|
433
|
+
pending.push(raw.then((key) => {
|
|
434
|
+
sel.delete(key);
|
|
435
|
+
}));
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
sel.delete(raw);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
const selectableMethod = this._deps
|
|
444
|
+
.getColumnDefs()
|
|
445
|
+
.find((it) => it instanceof RowSelectionDef)?.isSelectable;
|
|
446
|
+
if (selectableMethod) {
|
|
447
|
+
for (let i = pageStartIndex; i < pageEndIndexExclusive; i++) {
|
|
448
|
+
const item = sortedData[i];
|
|
449
|
+
const relIdx = i - pageStartIndex;
|
|
450
|
+
const s = selectableMethod(item, relIdx);
|
|
451
|
+
const doSet = (ok) => {
|
|
452
|
+
if (!ok) {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
const raw = this.cachedKey(item);
|
|
456
|
+
if (raw instanceof Promise) {
|
|
457
|
+
return raw.then((key) => {
|
|
458
|
+
sel.set(key, item);
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
sel.set(raw, item);
|
|
462
|
+
};
|
|
463
|
+
const r = s instanceof Promise ? s.then(doSet) : doSet(s);
|
|
464
|
+
if (r instanceof Promise) {
|
|
465
|
+
pending.push(r);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
for (let i = pageStartIndex; i < pageEndIndexExclusive; i++) {
|
|
471
|
+
const item = sortedData[i];
|
|
472
|
+
const raw = this.cachedKey(item);
|
|
473
|
+
if (raw instanceof Promise) {
|
|
474
|
+
pending.push(raw.then((key) => {
|
|
475
|
+
sel.set(key, item);
|
|
476
|
+
}));
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
sel.set(raw, item);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
if (pending.length > 0) {
|
|
485
|
+
await Promise.all(pending);
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
/**
|
|
489
|
+
* Rebinds every currently selected key to its row object on the
|
|
490
|
+
* current page. Called by the post-pagination effect so a paged
|
|
491
|
+
* remote refresh does not leave the selection map pointing at the
|
|
492
|
+
* old item references.
|
|
493
|
+
*/
|
|
494
|
+
updateSelectedItems = async () => {
|
|
495
|
+
if (this._selectedItems.size === 0) {
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
const sortedData = this._deps.getSortedData();
|
|
499
|
+
const { pageStartIndex, pageEndIndexExclusive } = this.getPageWindow();
|
|
500
|
+
// Build key -> item map for the current page (O(page_size) extractions)
|
|
501
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
502
|
+
const pageKeyMap = new Map();
|
|
503
|
+
const pending = [];
|
|
504
|
+
for (let i = pageStartIndex; i < pageEndIndexExclusive; i++) {
|
|
505
|
+
const item = sortedData[i];
|
|
506
|
+
const raw = this.cachedKey(item);
|
|
507
|
+
if (raw instanceof Promise) {
|
|
508
|
+
pending.push(raw.then((key) => {
|
|
509
|
+
pageKeyMap.set(key, item);
|
|
510
|
+
}));
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
pageKeyMap.set(raw, item);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
if (pending.length > 0) {
|
|
517
|
+
await Promise.all(pending);
|
|
518
|
+
}
|
|
519
|
+
// Update only selected items that appear on this page (O(selected_size))
|
|
520
|
+
for (const key of this._selectedItems.keys()) {
|
|
521
|
+
const newItem = pageKeyMap.get(key);
|
|
522
|
+
if (newItem !== undefined) {
|
|
523
|
+
this._selectedItems.set(key, newItem);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
};
|
|
527
|
+
// -----------------------------------------------------------------
|
|
528
|
+
// highlighting
|
|
529
|
+
// -----------------------------------------------------------------
|
|
530
|
+
/** Toggles whether a row is highlighted (visually marked, not selected). */
|
|
531
|
+
toggleHighlightedRow = (item) => {
|
|
532
|
+
const raw = this.cachedKey(item);
|
|
533
|
+
if (raw instanceof Promise) {
|
|
534
|
+
return raw.then((key) => {
|
|
535
|
+
if (this._highlightedItems.has(key)) {
|
|
536
|
+
this._highlightedItems.delete(key);
|
|
537
|
+
}
|
|
538
|
+
else {
|
|
539
|
+
this._highlightedItems.set(key, item);
|
|
540
|
+
}
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
if (this._highlightedItems.has(raw)) {
|
|
544
|
+
this._highlightedItems.delete(raw);
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
this._highlightedItems.set(raw, item);
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
/** Clears every highlighted row. */
|
|
551
|
+
resetHighlightedRows = () => {
|
|
552
|
+
this._highlightedItems.clear();
|
|
553
|
+
};
|
|
554
|
+
/**
|
|
555
|
+
* If every row on the current page is highlighted, clears the
|
|
556
|
+
* highlight; otherwise highlights every row on the current page.
|
|
557
|
+
*/
|
|
558
|
+
onHighlightAll = () => {
|
|
559
|
+
if (this._allHighlighted) {
|
|
560
|
+
this._highlightedItems.clear();
|
|
561
|
+
return Promise.resolve();
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
// `asyncForEach` is typed `Array<T>` (not `ReadonlyArray<T>`);
|
|
565
|
+
// the dependency thunk preserves immutability at the boundary
|
|
566
|
+
// so the cast is safe at runtime - the function only reads
|
|
567
|
+
// the array.
|
|
568
|
+
const items = this._deps.getCurrentPageData();
|
|
569
|
+
return asyncForEach(items, (item) => {
|
|
570
|
+
const raw = this.cachedKey(item);
|
|
571
|
+
if (raw instanceof Promise) {
|
|
572
|
+
return raw.then((key) => {
|
|
573
|
+
this._highlightedItems.set(key, item);
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
this._highlightedItems.set(raw, item);
|
|
577
|
+
return;
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
};
|
|
581
|
+
/**
|
|
582
|
+
* Compute whether every row in `[pageStartIndex, pageEndIndexExclusive)`
|
|
583
|
+
* is currently highlighted. Called by the parent's `_allHighlighted`
|
|
584
|
+
* `$effect` so the effect retains its `paginationRepo` reads
|
|
585
|
+
* directly while the row-walk logic lives here.
|
|
586
|
+
*/
|
|
587
|
+
computeAllHighlightedInRange(pageStartIndex, pageEndIndexExclusive) {
|
|
588
|
+
const sortedData = this._deps.getSortedData();
|
|
589
|
+
for (let index = pageStartIndex; index < pageEndIndexExclusive; index++) {
|
|
590
|
+
const item = sortedData[index];
|
|
591
|
+
const raw = this.cachedKey(item);
|
|
592
|
+
if (raw instanceof Promise) {
|
|
593
|
+
return raw.then(async (key) => {
|
|
594
|
+
if (!this._highlightedItems.has(key)) {
|
|
595
|
+
return false;
|
|
596
|
+
}
|
|
597
|
+
for (let j = index + 1; j < pageEndIndexExclusive; j++) {
|
|
598
|
+
const r = this.cachedKey(sortedData[j]);
|
|
599
|
+
const k = r instanceof Promise ? await r : r;
|
|
600
|
+
if (!this._highlightedItems.has(k)) {
|
|
601
|
+
return false;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
return true;
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
if (!this._highlightedItems.has(raw)) {
|
|
608
|
+
return false;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
return true;
|
|
612
|
+
}
|
|
613
|
+
}
|