@lowdefy/blocks-table 0.0.0-experimental-20260929110023
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/LICENSE +201 -0
- package/README.md +12 -0
- package/dist/blocks/Table/Table.js +25 -0
- package/dist/blocks/Table/Table.lazy.js +33 -0
- package/dist/blocks/Table/TableFallback.js +35 -0
- package/dist/blocks/Table/e2e.js +47 -0
- package/dist/blocks/Table/gallery.yaml +836 -0
- package/dist/blocks/Table/meta.js +964 -0
- package/dist/blocks/Table/tests/Table.e2e.yaml +434 -0
- package/dist/blocks/Table/tests/TableFeatures.e2e.yaml +291 -0
- package/dist/blocks/Table/tests/TableLinkTarget.e2e.yaml +25 -0
- package/dist/blocks/Table/tests/TableParity.e2e.yaml +101 -0
- package/dist/blocks/Table/tests/bulk.e2e.yaml +271 -0
- package/dist/blocks/Table/tests/deals.yaml +30 -0
- package/dist/blocks/Table/tests/deals_columns.yaml +37 -0
- package/dist/blocks/Table/tests/editing.e2e.yaml +501 -0
- package/dist/blocks/Table/tests/expandable.e2e.yaml +87 -0
- package/dist/blocks/Table/tests/filtering.e2e.yaml +251 -0
- package/dist/blocks/Table/tests/grouping.e2e.yaml +272 -0
- package/dist/blocks/Table/tests/grouping_deals.yaml +24 -0
- package/dist/blocks/Table/tests/grouping_deals_columns.yaml +32 -0
- package/dist/blocks/Table/tests/headerMenu.e2e.yaml +134 -0
- package/dist/blocks/Table/tests/parity_properties.yaml +144 -0
- package/dist/blocks/Table/tests/people.yaml +39 -0
- package/dist/blocks/Table/tests/people_columns.yaml +22 -0
- package/dist/blocks/Table/tests/polish.e2e.yaml +372 -0
- package/dist/blocks/Table/tests/server-mongodb.e2e.yaml +169 -0
- package/dist/blocks/Table/tests/server.e2e.yaml +267 -0
- package/dist/blocks/Table/tests/toolbar.e2e.yaml +140 -0
- package/dist/blocks/Table/tests/tree.e2e.yaml +245 -0
- package/dist/blocks/Table/tests/views.e2e.yaml +235 -0
- package/dist/blocks/TableInput/TableInput.js +24 -0
- package/dist/blocks/TableInput/TableInput.lazy.js +17 -0
- package/dist/blocks/TableInput/TableInputRoot.js +65 -0
- package/dist/blocks/TableInput/e2e.js +16 -0
- package/dist/blocks/TableInput/gallery.yaml +153 -0
- package/dist/blocks/TableInput/meta.js +93 -0
- package/dist/blocks/TableInput/tests/TableInput.e2e.yaml +272 -0
- package/dist/blocks.js +16 -0
- package/dist/core/Body.js +112 -0
- package/dist/core/Cell.js +86 -0
- package/dist/core/Chevron.js +32 -0
- package/dist/core/EmptyState.js +32 -0
- package/dist/core/Grid.js +219 -0
- package/dist/core/GroupHeaderRow.js +81 -0
- package/dist/core/HeaderCell.js +58 -0
- package/dist/core/HeaderRow.js +76 -0
- package/dist/core/HeaderTitle.js +49 -0
- package/dist/core/LazyCell.js +71 -0
- package/dist/core/LoadingRows.js +38 -0
- package/dist/core/RenderProbeContext.js +19 -0
- package/dist/core/Row.js +98 -0
- package/dist/core/SkeletonRow.js +42 -0
- package/dist/core/SummaryRow.js +86 -0
- package/dist/core/TableRoot.js +195 -0
- package/dist/core/aggregateShortLabels.js +25 -0
- package/dist/core/applyLayoutVars.js +22 -0
- package/dist/core/buildGroupSegments.js +36 -0
- package/dist/core/collectBodyOverlays.js +20 -0
- package/dist/core/collectCellLeads.js +21 -0
- package/dist/core/collectClaimedViewKeys.js +26 -0
- package/dist/core/collectGridHandlers.js +29 -0
- package/dist/core/collectHeaderParts.js +20 -0
- package/dist/core/collectRowRenderers.js +21 -0
- package/dist/core/collectSliceDefinitions.js +29 -0
- package/dist/core/computeLayout.js +133 -0
- package/dist/core/createAccessor.js +39 -0
- package/dist/core/createApi.js +86 -0
- package/dist/core/createCellActivity.js +47 -0
- package/dist/core/createColumnDefs.js +42 -0
- package/dist/core/createFeatureActions.js +24 -0
- package/dist/core/createFeatureSet.js +39 -0
- package/dist/core/createInitialState.js +63 -0
- package/dist/core/createKeyIndex.js +26 -0
- package/dist/core/createMethodStubs.js +30 -0
- package/dist/core/createSliceHandlers.js +26 -0
- package/dist/core/createStableCoreRowModel.js +91 -0
- package/dist/core/createTanstackFeatures.js +24 -0
- package/dist/core/createTextMeasure.js +106 -0
- package/dist/core/densityHeights.js +20 -0
- package/dist/core/deriveValue.js +53 -0
- package/dist/core/dispatchGridEvent.js +21 -0
- package/dist/core/distributeFlex.js +28 -0
- package/dist/core/getCellFit.js +34 -0
- package/dist/core/getHeaderCellProps.js +21 -0
- package/dist/core/getHeaderLevels.js +50 -0
- package/dist/core/getRecordCount.js +23 -0
- package/dist/core/getSummaryLabel.js +35 -0
- package/dist/core/getValueSignature.js +26 -0
- package/dist/core/isDataItem.js +21 -0
- package/dist/core/isDefaultViewColumns.js +36 -0
- package/dist/core/isRowEqual.js +40 -0
- package/dist/core/isSameSignature.js +19 -0
- package/dist/core/lazyCellTypes.js +33 -0
- package/dist/core/lazyComponent.js +30 -0
- package/dist/core/loadOptionalFeature.js +35 -0
- package/dist/core/normalizeViewColumn.js +29 -0
- package/dist/core/pickViewPart.js +23 -0
- package/dist/core/renderRegion.js +21 -0
- package/dist/core/resolveMountValue.js +31 -0
- package/dist/core/resolveViewColumns.js +65 -0
- package/dist/core/someColumnConfig.js +30 -0
- package/dist/core/stabilizeData.js +90 -0
- package/dist/core/table.css +557 -0
- package/dist/core/useFeatureData.js +35 -0
- package/dist/core/useFeatureFragments.js +55 -0
- package/dist/core/useFeatureItems.js +78 -0
- package/dist/core/useFeatureMethods.js +29 -0
- package/dist/core/useFeatureRows.js +36 -0
- package/dist/core/useFeatureSet.js +54 -0
- package/dist/core/useForeignKeys.js +38 -0
- package/dist/core/useGridFeatures.js +26 -0
- package/dist/core/useStableConfig.js +34 -0
- package/dist/core/useSummary.js +73 -0
- package/dist/core/useTableConfig.js +189 -0
- package/dist/core/useTableState.js +150 -0
- package/dist/core/useViewportSize.js +40 -0
- package/dist/e2e.js +16 -0
- package/dist/features/bulk/BulkBar.js +46 -0
- package/dist/features/bulk/bulk.css +57 -0
- package/dist/features/bulk/bulkFeature.js +28 -0
- package/dist/features/bulk/countSelection.js +27 -0
- package/dist/features/bulk/createSelectAllMatching.js +43 -0
- package/dist/features/bulk/useBulkBar.js +42 -0
- package/dist/features/clipboard/clipboardFeature.js +24 -0
- package/dist/features/clipboard/createPasteCells.js +61 -0
- package/dist/features/clipboard/getCopyText.js +57 -0
- package/dist/features/clipboard/handleCopyKeyDown.js +37 -0
- package/dist/features/clipboard/parseTsv.js +70 -0
- package/dist/features/clipboard/pasteFeature.js +26 -0
- package/dist/features/clipboard/planPaste.js +101 -0
- package/dist/features/clipboard/serializeTsv.js +25 -0
- package/dist/features/clipboard/usePasteListener.js +45 -0
- package/dist/features/columnManager/ColumnManager.js +253 -0
- package/dist/features/columnManager/ColumnManagerPopover.js +37 -0
- package/dist/features/columnManager/DragHandleIcon.js +39 -0
- package/dist/features/columnManager/LazyColumnManagerPopover.js +19 -0
- package/dist/features/columnManager/applyManagerRegions.js +43 -0
- package/dist/features/columnManager/boundaryIds.js +21 -0
- package/dist/features/columnManager/buildManagerSequence.js +38 -0
- package/dist/features/columnManager/columnManager.css +155 -0
- package/dist/features/columnManager/columnManagerFeature.js +37 -0
- package/dist/features/columnManager/createCloseColumnManager.js +21 -0
- package/dist/features/columnManager/createOpenColumnManager.js +21 -0
- package/dist/features/columnManager/createResetColumns.js +43 -0
- package/dist/features/columnManager/getColumnManagerMenuItems.js +26 -0
- package/dist/features/columnManager/getListRoom.js +31 -0
- package/dist/features/columnManager/getManagerEntries.js +31 -0
- package/dist/features/columnManager/moveSequenceEntry.js +25 -0
- package/dist/features/columnManager/sequenceToRegions.js +38 -0
- package/dist/features/columnManager/snapListHeight.js +35 -0
- package/dist/features/columnManager/updateScrollHints.js +23 -0
- package/dist/features/columnManager/useColumnManager.js +36 -0
- package/dist/features/density/densityFeature.js +39 -0
- package/dist/features/density/densityToValue.js +23 -0
- package/dist/features/density/getViewWrapColumn.js +53 -0
- package/dist/features/density/initDensity.js +27 -0
- package/dist/features/density/initWrap.js +23 -0
- package/dist/features/editing/AddRowButton.js +28 -0
- package/dist/features/editing/CellEditor.js +284 -0
- package/dist/features/editing/EditMarker.js +38 -0
- package/dist/features/editing/EditingLayer.js +148 -0
- package/dist/features/editing/RowControlsCell.js +89 -0
- package/dist/features/editing/RowControlsHeader.js +18 -0
- package/dist/features/editing/SelectedTag.js +33 -0
- package/dist/features/editing/addChangeRow.js +34 -0
- package/dist/features/editing/applyChangeUpdates.js +28 -0
- package/dist/features/editing/applyChanges.js +90 -0
- package/dist/features/editing/applyMoveOverlay.js +44 -0
- package/dist/features/editing/applyMoveToChanges.js +66 -0
- package/dist/features/editing/applyOverlay.js +41 -0
- package/dist/features/editing/coerceCellValue.js +187 -0
- package/dist/features/editing/collectRawColumns.js +38 -0
- package/dist/features/editing/computeEditTargets.js +108 -0
- package/dist/features/editing/computeRowMove.js +78 -0
- package/dist/features/editing/createAddRow.js +68 -0
- package/dist/features/editing/createCancelEdit.js +29 -0
- package/dist/features/editing/createCommitEdit.js +124 -0
- package/dist/features/editing/createDeleteRow.js +39 -0
- package/dist/features/editing/createEditSpecs.js +80 -0
- package/dist/features/editing/createEmptyChanges.js +23 -0
- package/dist/features/editing/createMoveRow.js +65 -0
- package/dist/features/editing/createNewRow.js +32 -0
- package/dist/features/editing/createResetChanges.js +29 -0
- package/dist/features/editing/createSaveCellEdit.js +113 -0
- package/dist/features/editing/createSaveRowMove.js +90 -0
- package/dist/features/editing/createStartEdit.js +57 -0
- package/dist/features/editing/createStepHistory.js +33 -0
- package/dist/features/editing/createUndoStack.js +67 -0
- package/dist/features/editing/createValueStore.js +34 -0
- package/dist/features/editing/createWriteCell.js +34 -0
- package/dist/features/editing/createWriteChanges.js +43 -0
- package/dist/features/editing/editing.css +223 -0
- package/dist/features/editing/editingFeature.js +66 -0
- package/dist/features/editing/findCellByKey.js +23 -0
- package/dist/features/editing/findInvalidCells.js +41 -0
- package/dist/features/editing/findNextEditableCell.js +54 -0
- package/dist/features/editing/focusCell.js +28 -0
- package/dist/features/editing/fromDateValue.js +29 -0
- package/dist/features/editing/fromEditorDraft.js +45 -0
- package/dist/features/editing/generateRowKey.js +25 -0
- package/dist/features/editing/getDataGap.js +28 -0
- package/dist/features/editing/getEditOptions.js +33 -0
- package/dist/features/editing/getEditorKind.js +36 -0
- package/dist/features/editing/getEventError.js +24 -0
- package/dist/features/editing/getKeyField.js +23 -0
- package/dist/features/editing/getReorderBlock.js +33 -0
- package/dist/features/editing/handleEditDoubleClick.js +34 -0
- package/dist/features/editing/handleEditKeyDown.js +123 -0
- package/dist/features/editing/handleRowControlsClick.js +29 -0
- package/dist/features/editing/handleRowDragPointerDown.js +95 -0
- package/dist/features/editing/isCellEditable.js +20 -0
- package/dist/features/editing/isPrintableKey.js +22 -0
- package/dist/features/editing/isSameTargets.js +19 -0
- package/dist/features/editing/matchOption.js +21 -0
- package/dist/features/editing/needsEditing.js +26 -0
- package/dist/features/editing/normalizeChanges.js +37 -0
- package/dist/features/editing/positionBetween.js +30 -0
- package/dist/features/editing/pruneOverlay.js +39 -0
- package/dist/features/editing/removeChangeRow.js +48 -0
- package/dist/features/editing/reorderByKeys.js +34 -0
- package/dist/features/editing/rowControlsColumn.js +33 -0
- package/dist/features/editing/setChangeField.js +72 -0
- package/dist/features/editing/setRowField.js +23 -0
- package/dist/features/editing/sortByPosition.js +31 -0
- package/dist/features/editing/toDateValue.js +38 -0
- package/dist/features/editing/toEditorDraft.js +56 -0
- package/dist/features/editing/toSelectOptions.js +39 -0
- package/dist/features/editing/useEditingData.js +199 -0
- package/dist/features/editing/useEditingFragments.js +77 -0
- package/dist/features/editing/useEditingGrid.js +25 -0
- package/dist/features/editing/validateCellValue.js +25 -0
- package/dist/features/editing/valuesEqual.js +31 -0
- package/dist/features/editing/warnMissingEvent.js +23 -0
- package/dist/features/events/createActivateRow.js +54 -0
- package/dist/features/events/eventsFeature.js +35 -0
- package/dist/features/events/getBodyTarget.js +27 -0
- package/dist/features/events/getRowIndex.js +24 -0
- package/dist/features/events/handleAuxClick.js +38 -0
- package/dist/features/events/handlePointerDown.js +22 -0
- package/dist/features/events/handleRowClick.js +57 -0
- package/dist/features/events/handleRowDoubleClick.js +45 -0
- package/dist/features/events/isTextDrag.js +30 -0
- package/dist/features/events/openRowLink.js +29 -0
- package/dist/features/expandable/DetailRow.js +57 -0
- package/dist/features/expandable/ExpandToggle.js +34 -0
- package/dist/features/expandable/expandable.css +40 -0
- package/dist/features/expandable/expandableFeature.js +34 -0
- package/dist/features/expandable/handleExpandClick.js +25 -0
- package/dist/features/expandable/needsExpandable.js +20 -0
- package/dist/features/expandable/normalizeExpandable.js +52 -0
- package/dist/features/expandable/useExpandableItems.js +101 -0
- package/dist/features/expansion/createToggleRowExpanded.js +52 -0
- package/dist/features/expansion/expansionFeature.js +31 -0
- package/dist/features/expansion/getExpandedIds.js +26 -0
- package/dist/features/expansion/initExpanded.js +22 -0
- package/dist/features/export/buildCsv.js +39 -0
- package/dist/features/export/createExportCsv.js +59 -0
- package/dist/features/export/exportFeature.js +25 -0
- package/dist/features/export/toCsvField.js +20 -0
- package/dist/features/filtering/ChoiceFilter.js +30 -0
- package/dist/features/filtering/CloseIcon.js +29 -0
- package/dist/features/filtering/ColumnFilter.js +192 -0
- package/dist/features/filtering/ColumnFilterPopover.js +38 -0
- package/dist/features/filtering/DateFilter.js +80 -0
- package/dist/features/filtering/DraftInput.js +37 -0
- package/dist/features/filtering/DraftInputNumber.js +36 -0
- package/dist/features/filtering/FilterBuilder.js +45 -0
- package/dist/features/filtering/FilterGroup.js +116 -0
- package/dist/features/filtering/FilterIcon.js +26 -0
- package/dist/features/filtering/FilterIndicator.js +40 -0
- package/dist/features/filtering/FilterLeaf.js +86 -0
- package/dist/features/filtering/LazyColumnFilterPopover.js +19 -0
- package/dist/features/filtering/LazyFilterBuilder.js +19 -0
- package/dist/features/filtering/NumberFilter.js +43 -0
- package/dist/features/filtering/OptionsFilter.js +72 -0
- package/dist/features/filtering/RelativeDateEditor.js +90 -0
- package/dist/features/filtering/TextFilter.js +51 -0
- package/dist/features/filtering/ValueEditor.js +210 -0
- package/dist/features/filtering/buildColumnFilter.js +95 -0
- package/dist/features/filtering/changeLeafOperator.js +46 -0
- package/dist/features/filtering/createApplyFiltering.js +78 -0
- package/dist/features/filtering/createClearFilters.js +24 -0
- package/dist/features/filtering/createCloseColumnFilter.js +28 -0
- package/dist/features/filtering/createConditionFilteredRowModel.js +40 -0
- package/dist/features/filtering/createDefaultLeaf.js +31 -0
- package/dist/features/filtering/createOpenColumnFilter.js +25 -0
- package/dist/features/filtering/createRowTest.js +32 -0
- package/dist/features/filtering/createSearchMatcher.js +35 -0
- package/dist/features/filtering/createSetFilter.js +27 -0
- package/dist/features/filtering/createSetSearch.js +29 -0
- package/dist/features/filtering/createUpdateColumnFilter.js +29 -0
- package/dist/features/filtering/defaultRelativeDate.js +20 -0
- package/dist/features/filtering/filterRowModel.js +66 -0
- package/dist/features/filtering/filtering.css +151 -0
- package/dist/features/filtering/filteringFeature.js +82 -0
- package/dist/features/filtering/filteringToValue.js +23 -0
- package/dist/features/filtering/formatFilterDate.js +24 -0
- package/dist/features/filtering/getColumnConditions.js +24 -0
- package/dist/features/filtering/getConditionKeys.js +31 -0
- package/dist/features/filtering/getDistinctOptions.js +52 -0
- package/dist/features/filtering/getFilterKind.js +37 -0
- package/dist/features/filtering/getFilterResultKey.js +26 -0
- package/dist/features/filtering/getFilterResults.js +53 -0
- package/dist/features/filtering/getFilteredKeys.js +31 -0
- package/dist/features/filtering/getFilteringHeaderProps.js +22 -0
- package/dist/features/filtering/getFilteringMenuItems.js +42 -0
- package/dist/features/filtering/getFilteringTableOptions.js +33 -0
- package/dist/features/filtering/getGroupOperator.js +23 -0
- package/dist/features/filtering/getOperatorLabel.js +50 -0
- package/dist/features/filtering/getPlainTitle.js +26 -0
- package/dist/features/filtering/getSearchColumns.js +23 -0
- package/dist/features/filtering/getSearchKey.js +19 -0
- package/dist/features/filtering/getSearchText.js +57 -0
- package/dist/features/filtering/getTopLevelConditions.js +25 -0
- package/dist/features/filtering/getValueShape.js +30 -0
- package/dist/features/filtering/handleFilterIndicatorClick.js +25 -0
- package/dist/features/filtering/initFilter.js +25 -0
- package/dist/features/filtering/initSearch.js +24 -0
- package/dist/features/filtering/isColumnCondition.js +22 -0
- package/dist/features/filtering/isCompleteLeaf.js +45 -0
- package/dist/features/filtering/isServerMode.js +21 -0
- package/dist/features/filtering/normalizeSearch.js +21 -0
- package/dist/features/filtering/parseColumnFilter.js +128 -0
- package/dist/features/filtering/parseFilterDate.js +24 -0
- package/dist/features/filtering/prepareFilterResult.js +63 -0
- package/dist/features/filtering/pruneCondition.js +35 -0
- package/dist/features/filtering/setColumnFilter.js +51 -0
- package/dist/features/filtering/textFilterOperators.js +26 -0
- package/dist/features/filtering/toRootGroup.js +34 -0
- package/dist/features/filtering/useDraft.js +65 -0
- package/dist/features/filtering/useFilteringState.js +32 -0
- package/dist/features/filtering/useSyncedState.js +45 -0
- package/dist/features/grouping/GroupCell.js +72 -0
- package/dist/features/grouping/GroupCheckbox.js +38 -0
- package/dist/features/grouping/GroupLabel.js +73 -0
- package/dist/features/grouping/GroupRow.js +103 -0
- package/dist/features/grouping/StickyGroupRow.js +136 -0
- package/dist/features/grouping/buildGroupTree.js +138 -0
- package/dist/features/grouping/buildStickyLevels.js +35 -0
- package/dist/features/grouping/countGroupSelection.js +26 -0
- package/dist/features/grouping/createAggregateColumns.js +38 -0
- package/dist/features/grouping/createCollapseAllGroups.js +26 -0
- package/dist/features/grouping/createExpandAllGroups.js +23 -0
- package/dist/features/grouping/createGroupLevels.js +46 -0
- package/dist/features/grouping/createSetCollapsedGroups.js +27 -0
- package/dist/features/grouping/createSetGroup.js +35 -0
- package/dist/features/grouping/createSetGroupKeys.js +27 -0
- package/dist/features/grouping/createToggleGroup.js +38 -0
- package/dist/features/grouping/createToggleGroupSelected.js +49 -0
- package/dist/features/grouping/findGroupIndices.js +25 -0
- package/dist/features/grouping/flattenGroups.js +58 -0
- package/dist/features/grouping/getGroupLabel.js +34 -0
- package/dist/features/grouping/getStickyGroups.js +60 -0
- package/dist/features/grouping/groupRowsFeature.js +57 -0
- package/dist/features/grouping/grouping.css +128 -0
- package/dist/features/grouping/groupingFeature.js +48 -0
- package/dist/features/grouping/groupingHeaderMenuItems.js +44 -0
- package/dist/features/grouping/groupingToValue.js +26 -0
- package/dist/features/grouping/handleGroupClick.js +51 -0
- package/dist/features/grouping/handleGroupKeyDown.js +60 -0
- package/dist/features/grouping/initAggregates.js +36 -0
- package/dist/features/grouping/initCollapsedGroups.js +29 -0
- package/dist/features/grouping/initGrouping.js +34 -0
- package/dist/features/grouping/needsGroupRows.js +23 -0
- package/dist/features/grouping/orderGroups.js +49 -0
- package/dist/features/grouping/resolveAggregates.js +29 -0
- package/dist/features/grouping/toGroupIdentity.js +24 -0
- package/dist/features/grouping/toGroupKeys.js +24 -0
- package/dist/features/grouping/useGrouping.js +91 -0
- package/dist/features/headerMenu/HeaderMenuDropdown.js +86 -0
- package/dist/features/headerMenu/HeaderMenuTrigger.js +44 -0
- package/dist/features/headerMenu/LazyHeaderMenuDropdown.js +19 -0
- package/dist/features/headerMenu/MenuIcon.js +38 -0
- package/dist/features/headerMenu/collectHeaderMenuItems.js +69 -0
- package/dist/features/headerMenu/createAutosizeColumn.js +35 -0
- package/dist/features/headerMenu/createCloseHeaderMenu.js +28 -0
- package/dist/features/headerMenu/createOpenHeaderMenu.js +30 -0
- package/dist/features/headerMenu/focusHeaderControl.js +31 -0
- package/dist/features/headerMenu/freezeColumns.js +31 -0
- package/dist/features/headerMenu/getChromeMenuItems.js +144 -0
- package/dist/features/headerMenu/getVisibleOrder.js +19 -0
- package/dist/features/headerMenu/handleHeaderButtonPointerDown.js +27 -0
- package/dist/features/headerMenu/handleHeaderMenuClick.js +26 -0
- package/dist/features/headerMenu/handleHeaderMenuKeyDown.js +28 -0
- package/dist/features/headerMenu/headerMenu.css +122 -0
- package/dist/features/headerMenu/headerMenuFeature.js +46 -0
- package/dist/features/headerMenu/measureColumnWidth.js +51 -0
- package/dist/features/headerMenu/pinColumn.js +27 -0
- package/dist/features/headerMenu/sectionOrder.js +25 -0
- package/dist/features/headerMenu/useHeaderMenuState.js +27 -0
- package/dist/features/index.js +149 -0
- package/dist/features/keyboard/findCellElement.js +21 -0
- package/dist/features/keyboard/getNextCell.js +74 -0
- package/dist/features/keyboard/handleGridFocus.js +31 -0
- package/dist/features/keyboard/handleGridKeyDown.js +72 -0
- package/dist/features/keyboard/isCellRendered.js +22 -0
- package/dist/features/keyboard/keyboardFeature.js +26 -0
- package/dist/features/keyboard/useKeyboard.js +84 -0
- package/dist/features/lazyCells/getBodyRowKey.js +19 -0
- package/dist/features/lazyCells/handlePointerLeave.js +21 -0
- package/dist/features/lazyCells/handlePointerOver.js +22 -0
- package/dist/features/lazyCells/handleRowBlur.js +22 -0
- package/dist/features/lazyCells/handleRowFocus.js +26 -0
- package/dist/features/lazyCells/lazyCellsFeature.js +33 -0
- package/dist/features/lazyCells/useFastScroll.js +57 -0
- package/dist/features/ordering/getColumnClientBounds.js +32 -0
- package/dist/features/ordering/handleReorderPointerDown.js +137 -0
- package/dist/features/ordering/initColumnOrder.js +18 -0
- package/dist/features/ordering/moveKeys.js +27 -0
- package/dist/features/ordering/orderingFeature.js +35 -0
- package/dist/features/pagination/TablePagination.js +31 -0
- package/dist/features/pagination/initPageSize.js +28 -0
- package/dist/features/pagination/paginationFeature.js +36 -0
- package/dist/features/pagination/paginationToValue.js +24 -0
- package/dist/features/pagination/usePager.js +32 -0
- package/dist/features/pagination/usePagination.js +58 -0
- package/dist/features/pinning/initColumnPinning.js +21 -0
- package/dist/features/pinning/pinningFeature.js +33 -0
- package/dist/features/pinning/pinningToViewColumn.js +24 -0
- package/dist/features/queue/createAfterRowAction.js +40 -0
- package/dist/features/queue/findNextRowId.js +26 -0
- package/dist/features/queue/findRowAction.js +77 -0
- package/dist/features/queue/handleRowActionKey.js +44 -0
- package/dist/features/queue/queueFeature.js +27 -0
- package/dist/features/selection/SelectAllHeader.js +40 -0
- package/dist/features/selection/SelectCell.js +30 -0
- package/dist/features/selection/countSelectedRows.js +31 -0
- package/dist/features/selection/createClearSelection.js +29 -0
- package/dist/features/selection/createToggleAllRowsSelected.js +60 -0
- package/dist/features/selection/createToggleRowSelected.js +86 -0
- package/dist/features/selection/getRawRowKey.js +23 -0
- package/dist/features/selection/getSelectAllExcept.js +23 -0
- package/dist/features/selection/getSelectAllState.js +42 -0
- package/dist/features/selection/handleSelectionClick.js +30 -0
- package/dist/features/selection/initRowSelection.js +36 -0
- package/dist/features/selection/initSelectionMode.js +19 -0
- package/dist/features/selection/initSelectionView.js +35 -0
- package/dist/features/selection/isSelectAllValue.js +19 -0
- package/dist/features/selection/isSelectionViewCurrent.js +22 -0
- package/dist/features/selection/notifySelectionChange.js +32 -0
- package/dist/features/selection/pruneRowSelection.js +26 -0
- package/dist/features/selection/selectionFeature.js +69 -0
- package/dist/features/selection/selectionToValue.js +48 -0
- package/dist/features/selection/useSelection.js +77 -0
- package/dist/features/serverData/buildServerItems.js +109 -0
- package/dist/features/serverData/createBlockCache.js +205 -0
- package/dist/features/serverData/createRefresh.js +23 -0
- package/dist/features/serverData/createServerStore.js +360 -0
- package/dist/features/serverData/getBlockRange.js +29 -0
- package/dist/features/serverData/getListKey.js +20 -0
- package/dist/features/serverData/getNeededBlocks.js +45 -0
- package/dist/features/serverData/needsServerData.js +20 -0
- package/dist/features/serverData/normalizeServerData.js +41 -0
- package/dist/features/serverData/pickServerView.js +43 -0
- package/dist/features/serverData/readFetchResult.js +36 -0
- package/dist/features/serverData/serverData.css +21 -0
- package/dist/features/serverData/serverDataFeature.js +38 -0
- package/dist/features/serverData/serverRangeFeature.js +22 -0
- package/dist/features/serverData/useServerData.js +48 -0
- package/dist/features/serverData/useServerItems.js +35 -0
- package/dist/features/serverData/useServerRange.js +35 -0
- package/dist/features/serverData/useServerView.js +70 -0
- package/dist/features/sizing/ResizeHandle.js +24 -0
- package/dist/features/sizing/handleResizePointerDown.js +66 -0
- package/dist/features/sizing/initColumnSizing.js +23 -0
- package/dist/features/sizing/sizingFeature.js +39 -0
- package/dist/features/sizing/sizingToViewColumn.js +24 -0
- package/dist/features/sorting/SortIndicator.js +37 -0
- package/dist/features/sorting/buildSortKeys.js +52 -0
- package/dist/features/sorting/collectSortKeys.js +30 -0
- package/dist/features/sorting/createClearSort.js +21 -0
- package/dist/features/sorting/createIndexSortedRowModel.js +33 -0
- package/dist/features/sorting/createSetSort.js +43 -0
- package/dist/features/sorting/createSortKeyCollector.js +59 -0
- package/dist/features/sorting/createToggleSort.js +42 -0
- package/dist/features/sorting/getCachedSortKeys.js +19 -0
- package/dist/features/sorting/getSortHeaderProps.js +25 -0
- package/dist/features/sorting/getSortKeys.js +38 -0
- package/dist/features/sorting/handleSortClick.js +27 -0
- package/dist/features/sorting/initSorting.js +37 -0
- package/dist/features/sorting/isNumericSortType.js +21 -0
- package/dist/features/sorting/prepareSortKeys.js +92 -0
- package/dist/features/sorting/rankSortKeys.js +33 -0
- package/dist/features/sorting/setCachedSortKeys.js +24 -0
- package/dist/features/sorting/sortInSlices.js +69 -0
- package/dist/features/sorting/sortIndices.js +40 -0
- package/dist/features/sorting/sortKeysCache.js +19 -0
- package/dist/features/sorting/sortRowModel.js +84 -0
- package/dist/features/sorting/sortingFeature.js +62 -0
- package/dist/features/sorting/sortingToValue.js +27 -0
- package/dist/features/sorting/toFloatSortKeys.js +24 -0
- package/dist/features/sorting/yieldToMain.js +27 -0
- package/dist/features/toolbar/ColumnTitle.js +28 -0
- package/dist/features/toolbar/DensityToggle.js +53 -0
- package/dist/features/toolbar/FilterButton.js +56 -0
- package/dist/features/toolbar/GroupButton.js +51 -0
- package/dist/features/toolbar/OptionsQuickFilter.js +72 -0
- package/dist/features/toolbar/QuickFilter.js +46 -0
- package/dist/features/toolbar/RecordCount.js +27 -0
- package/dist/features/toolbar/SaveViewAs.js +66 -0
- package/dist/features/toolbar/SortButton.js +94 -0
- package/dist/features/toolbar/Toolbar.js +88 -0
- package/dist/features/toolbar/ToolbarCount.js +25 -0
- package/dist/features/toolbar/ToolbarIcon.js +28 -0
- package/dist/features/toolbar/ToolbarList.js +100 -0
- package/dist/features/toolbar/ToolbarSearch.js +63 -0
- package/dist/features/toolbar/ViewActions.js +41 -0
- package/dist/features/toolbar/ViewTabLabel.js +39 -0
- package/dist/features/toolbar/ViewTabMenu.js +48 -0
- package/dist/features/toolbar/ViewTabs.js +44 -0
- package/dist/features/toolbar/countConditions.js +25 -0
- package/dist/features/toolbar/formatRecordCount.js +19 -0
- package/dist/features/toolbar/getQuickFilterValues.js +25 -0
- package/dist/features/toolbar/getRootConditions.js +25 -0
- package/dist/features/toolbar/handleToolbarKeyDown.js +28 -0
- package/dist/features/toolbar/isDefaultSorting.js +26 -0
- package/dist/features/toolbar/isQuickFilterLeaf.js +20 -0
- package/dist/features/toolbar/moveItem.js +25 -0
- package/dist/features/toolbar/needsToolbar.js +21 -0
- package/dist/features/toolbar/normalizeToolbar.js +61 -0
- package/dist/features/toolbar/setQuickFilterValues.js +35 -0
- package/dist/features/toolbar/toolbar.css +185 -0
- package/dist/features/toolbar/toolbarFeature.js +27 -0
- package/dist/features/toolbar/useToolbar.js +41 -0
- package/dist/features/toolbar/validateQuickFilters.js +28 -0
- package/dist/features/transactions/applyTransactionToRows.js +56 -0
- package/dist/features/transactions/createApplyTransaction.js +26 -0
- package/dist/features/transactions/normalizeTransaction.js +49 -0
- package/dist/features/transactions/transactionsFeature.js +24 -0
- package/dist/features/transactions/useTransactionData.js +44 -0
- package/dist/features/tree/TreeToggle.js +39 -0
- package/dist/features/tree/buildTreeIndex.js +60 -0
- package/dist/features/tree/buildTreeItems.js +96 -0
- package/dist/features/tree/flattenTreeData.js +45 -0
- package/dist/features/tree/getDescendantIds.js +28 -0
- package/dist/features/tree/handleTreeClick.js +25 -0
- package/dist/features/tree/handleTreeKeyDown.js +58 -0
- package/dist/features/tree/needsTree.js +20 -0
- package/dist/features/tree/normalizeTree.js +41 -0
- package/dist/features/tree/rowNeedsChildren.js +25 -0
- package/dist/features/tree/tree.css +55 -0
- package/dist/features/tree/treeFeature.js +35 -0
- package/dist/features/tree/useTreeData.js +33 -0
- package/dist/features/tree/useTreeItems.js +61 -0
- package/dist/features/views/compactView.js +30 -0
- package/dist/features/views/createViewsApi.js +74 -0
- package/dist/features/views/decodeViewParam.js +30 -0
- package/dist/features/views/encodeViewParam.js +25 -0
- package/dist/features/views/findActiveView.js +23 -0
- package/dist/features/views/getStorageKey.js +20 -0
- package/dist/features/views/getViewKey.js +27 -0
- package/dist/features/views/getViewSliceDeps.js +27 -0
- package/dist/features/views/isViewDirty.js +34 -0
- package/dist/features/views/mountViewValue.js +36 -0
- package/dist/features/views/needsViews.js +23 -0
- package/dist/features/views/normalizePersist.js +27 -0
- package/dist/features/views/normalizeViews.js +41 -0
- package/dist/features/views/notifyViewSelect.js +29 -0
- package/dist/features/views/readMountPayload.js +31 -0
- package/dist/features/views/readPersistedView.js +45 -0
- package/dist/features/views/sanitizePersistedView.js +49 -0
- package/dist/features/views/stableStringify.js +27 -0
- package/dist/features/views/useViews.js +136 -0
- package/dist/features/views/viewKeys.js +28 -0
- package/dist/features/views/viewsFeature.js +26 -0
- package/dist/features/views/writePersistedView.js +42 -0
- package/dist/features/virtualization/computeRowOffsets.js +29 -0
- package/dist/features/virtualization/computeWindow.js +92 -0
- package/dist/features/virtualization/createScrollToRow.js +36 -0
- package/dist/features/virtualization/firstIndexAbove.js +30 -0
- package/dist/features/virtualization/getMeasureKey.js +23 -0
- package/dist/features/virtualization/isMeasuredColumn.js +20 -0
- package/dist/features/virtualization/isSameRange.js +18 -0
- package/dist/features/virtualization/positionedRowsFeature.js +22 -0
- package/dist/features/virtualization/scrollToCell.js +49 -0
- package/dist/features/virtualization/shiftRowOffsets.js +35 -0
- package/dist/features/virtualization/usePositionedRows.js +37 -0
- package/dist/features/virtualization/useRowOffsets.js +123 -0
- package/dist/features/virtualization/useScrollWindow.js +114 -0
- package/dist/features/virtualization/useTanstackRowWindow.js +43 -0
- package/dist/features/virtualization/useVirtualization.js +64 -0
- package/dist/features/virtualization/virtualizationFeature.js +24 -0
- package/dist/features/virtualization/writeScrollEdges.js +33 -0
- package/dist/features/visibility/initColumnVisibility.js +22 -0
- package/dist/features/visibility/visibilityFeature.js +31 -0
- package/dist/features/visibility/visibilityToViewColumn.js +20 -0
- package/dist/metas.js +16 -0
- package/dist/types.js +17 -0
- package/package.json +91 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ function horizontalPadding(element) {
|
|
16
|
+
const style = getComputedStyle(element);
|
|
17
|
+
return parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
|
|
18
|
+
}
|
|
19
|
+
// The width a column needs to show its rendered cells and its header without truncation. Only
|
|
20
|
+
// rendered cells can be measured (the virtual window); that is what the user is looking at.
|
|
21
|
+
function measureColumnWidth({ api, key }) {
|
|
22
|
+
const root = api.rootRef.current;
|
|
23
|
+
const selector = `[data-lf-cell][data-col-key="${CSS.escape(key)}"]`;
|
|
24
|
+
let width = 0;
|
|
25
|
+
root.querySelectorAll(`.lf-table-body ${selector}`).forEach((cell)=>{
|
|
26
|
+
// A cell lays its children out in a row: a tree row's indent and chevron, then the content.
|
|
27
|
+
// Portalled edit markers are absolutely positioned and take no room.
|
|
28
|
+
let content = 0;
|
|
29
|
+
Array.from(cell.children).forEach((child)=>{
|
|
30
|
+
if (getComputedStyle(child).position === 'absolute') return;
|
|
31
|
+
content += child.scrollWidth;
|
|
32
|
+
});
|
|
33
|
+
width = Math.max(width, content + horizontalPadding(cell));
|
|
34
|
+
});
|
|
35
|
+
const header = root.querySelector(`[data-lf-header]${selector}`);
|
|
36
|
+
if (header) {
|
|
37
|
+
const style = getComputedStyle(header);
|
|
38
|
+
const gap = parseFloat(style.columnGap) || 0;
|
|
39
|
+
let content = 0;
|
|
40
|
+
let parts = 0;
|
|
41
|
+
Array.from(header.children).forEach((child)=>{
|
|
42
|
+
if (getComputedStyle(child).position === 'absolute') return;
|
|
43
|
+
content += child.classList.contains('lf-table-header-title') ? child.scrollWidth : child.offsetWidth;
|
|
44
|
+
parts += 1;
|
|
45
|
+
});
|
|
46
|
+
width = Math.max(width, content + gap * Math.max(parts - 1, 0) + horizontalPadding(header));
|
|
47
|
+
}
|
|
48
|
+
// One pixel of slack: scrollWidth rounds down fractional text widths.
|
|
49
|
+
return Math.ceil(width) + 1;
|
|
50
|
+
}
|
|
51
|
+
export default measureColumnWidth;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ // Pins a column to `side` ('start' | 'end'), or unpins it (side null). A newly pinned column goes
|
|
16
|
+
// to the inner edge of its region: the end of the start region, the start of the end region.
|
|
17
|
+
function pinColumn({ pinning, key, side }) {
|
|
18
|
+
const start = pinning.start.filter((entry)=>entry !== key);
|
|
19
|
+
const end = pinning.end.filter((entry)=>entry !== key);
|
|
20
|
+
if (side === 'start') start.push(key);
|
|
21
|
+
if (side === 'end') end.unshift(key);
|
|
22
|
+
return {
|
|
23
|
+
start,
|
|
24
|
+
end
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export default pinColumn;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ // Header menu sections, top to bottom. Items name their section; a section not listed here (a
|
|
16
|
+
// later feature's) goes before `manage`, in feature order.
|
|
17
|
+
const sectionOrder = [
|
|
18
|
+
'sort',
|
|
19
|
+
'filter',
|
|
20
|
+
'group',
|
|
21
|
+
'pin',
|
|
22
|
+
'column',
|
|
23
|
+
'manage'
|
|
24
|
+
];
|
|
25
|
+
export default sectionOrder;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ import { useState } from 'react';
|
|
16
|
+
// Which column's header menu is open. `pressedOpen` is set by the menu button's pointerdown
|
|
17
|
+
// (see handleHeaderButtonPointerDown) and read by the click that follows it.
|
|
18
|
+
function useHeaderMenuState({ api }) {
|
|
19
|
+
const [openKey, setOpenKey] = useState(null);
|
|
20
|
+
api.headerMenu = {
|
|
21
|
+
openKey,
|
|
22
|
+
setOpenKey,
|
|
23
|
+
pressedOpen: api.headerMenu?.pressedOpen ?? null
|
|
24
|
+
};
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
export default useHeaderMenuState;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ import bulkFeature from './bulk/bulkFeature.js';
|
|
16
|
+
import clipboardFeature from './clipboard/clipboardFeature.js';
|
|
17
|
+
import columnManagerFeature from './columnManager/columnManagerFeature.js';
|
|
18
|
+
import densityFeature from './density/densityFeature.js';
|
|
19
|
+
import eventsFeature from './events/eventsFeature.js';
|
|
20
|
+
import expansionFeature from './expansion/expansionFeature.js';
|
|
21
|
+
import exportFeature from './export/exportFeature.js';
|
|
22
|
+
import filteringFeature from './filtering/filteringFeature.js';
|
|
23
|
+
import groupingFeature from './grouping/groupingFeature.js';
|
|
24
|
+
import headerMenuFeature from './headerMenu/headerMenuFeature.js';
|
|
25
|
+
import keyboardFeature from './keyboard/keyboardFeature.js';
|
|
26
|
+
import lazyCellsFeature from './lazyCells/lazyCellsFeature.js';
|
|
27
|
+
import needsEditing from './editing/needsEditing.js';
|
|
28
|
+
import needsExpandable from './expandable/needsExpandable.js';
|
|
29
|
+
import needsGroupRows from './grouping/needsGroupRows.js';
|
|
30
|
+
import needsServerData from './serverData/needsServerData.js';
|
|
31
|
+
import needsToolbar from './toolbar/needsToolbar.js';
|
|
32
|
+
import needsTree from './tree/needsTree.js';
|
|
33
|
+
import needsViews from './views/needsViews.js';
|
|
34
|
+
import orderingFeature from './ordering/orderingFeature.js';
|
|
35
|
+
import paginationFeature from './pagination/paginationFeature.js';
|
|
36
|
+
import pinningFeature from './pinning/pinningFeature.js';
|
|
37
|
+
import queueFeature from './queue/queueFeature.js';
|
|
38
|
+
import selectionFeature from './selection/selectionFeature.js';
|
|
39
|
+
import sizingFeature from './sizing/sizingFeature.js';
|
|
40
|
+
import sortingFeature from './sorting/sortingFeature.js';
|
|
41
|
+
import transactionsFeature from './transactions/transactionsFeature.js';
|
|
42
|
+
import virtualizationFeature from './virtualization/virtualizationFeature.js';
|
|
43
|
+
import visibilityFeature from './visibility/visibilityFeature.js';
|
|
44
|
+
// Optional features load in their own chunk, only for tables whose config needs them
|
|
45
|
+
// (core/useFeatureSet.js); `methods` are the block methods they own, registered as no-ops on
|
|
46
|
+
// tables without them so a CallMethod never fails.
|
|
47
|
+
function optional({ name, needs, load, methods = [] }) {
|
|
48
|
+
return {
|
|
49
|
+
load,
|
|
50
|
+
methods,
|
|
51
|
+
name,
|
|
52
|
+
needs,
|
|
53
|
+
optional: true
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// The table's feature modules, in composition order. The core loops over a table's list for
|
|
57
|
+
// TanStack feature slots, state slices, view/value derivation, header parts, delegated event
|
|
58
|
+
// handlers, actions and block methods (see ARCHITECTURE.md). The order is the order handlers run
|
|
59
|
+
// in: a handler that returns true stops the chain for that event. Filtering and the header menu
|
|
60
|
+
// come first: the filtered row model feeds sorting, and their header buttons claim clicks and
|
|
61
|
+
// pointer presses before sorting and column reordering see them. Views come before the toolbar,
|
|
62
|
+
// which renders their tabs, and queue's single-key actions run before keyboard navigation sees
|
|
63
|
+
// the key (editing's keys, earlier, win on editable cells). It is also the order of the data
|
|
64
|
+
// pipeline's hooks (TableRoot): `useData` (server rows, tree flattening), `useRows`
|
|
65
|
+
// (transactions, then editing's overlay over them) and `useItems` (server items, client groups,
|
|
66
|
+
// tree rows, expandable detail rows, the page).
|
|
67
|
+
const features = [
|
|
68
|
+
filteringFeature,
|
|
69
|
+
headerMenuFeature,
|
|
70
|
+
columnManagerFeature,
|
|
71
|
+
sortingFeature,
|
|
72
|
+
sizingFeature,
|
|
73
|
+
orderingFeature,
|
|
74
|
+
pinningFeature,
|
|
75
|
+
visibilityFeature,
|
|
76
|
+
densityFeature,
|
|
77
|
+
transactionsFeature,
|
|
78
|
+
optional({
|
|
79
|
+
name: 'editing',
|
|
80
|
+
needs: needsEditing,
|
|
81
|
+
load: ()=>import('./editing/editingFeature.js')
|
|
82
|
+
}),
|
|
83
|
+
clipboardFeature,
|
|
84
|
+
optional({
|
|
85
|
+
name: 'paste',
|
|
86
|
+
needs: ({ input })=>input === true,
|
|
87
|
+
load: ()=>import('./clipboard/pasteFeature.js')
|
|
88
|
+
}),
|
|
89
|
+
selectionFeature,
|
|
90
|
+
expansionFeature,
|
|
91
|
+
optional({
|
|
92
|
+
name: 'serverData',
|
|
93
|
+
needs: needsServerData,
|
|
94
|
+
load: ()=>import('./serverData/serverDataFeature.js'),
|
|
95
|
+
methods: [
|
|
96
|
+
'refresh'
|
|
97
|
+
]
|
|
98
|
+
}),
|
|
99
|
+
groupingFeature,
|
|
100
|
+
optional({
|
|
101
|
+
name: 'groupRows',
|
|
102
|
+
needs: needsGroupRows,
|
|
103
|
+
load: ()=>import('./grouping/groupRowsFeature.js'),
|
|
104
|
+
methods: [
|
|
105
|
+
'collapseAllGroups',
|
|
106
|
+
'expandAllGroups',
|
|
107
|
+
'setGroup'
|
|
108
|
+
]
|
|
109
|
+
}),
|
|
110
|
+
optional({
|
|
111
|
+
name: 'tree',
|
|
112
|
+
needs: needsTree,
|
|
113
|
+
load: ()=>import('./tree/treeFeature.js')
|
|
114
|
+
}),
|
|
115
|
+
optional({
|
|
116
|
+
name: 'expandable',
|
|
117
|
+
needs: needsExpandable,
|
|
118
|
+
load: ()=>import('./expandable/expandableFeature.js')
|
|
119
|
+
}),
|
|
120
|
+
virtualizationFeature,
|
|
121
|
+
optional({
|
|
122
|
+
name: 'positionedRows',
|
|
123
|
+
needs: ({ rowWindowStrategy })=>rowWindowStrategy === 'positioned',
|
|
124
|
+
load: ()=>import('./virtualization/positionedRowsFeature.js')
|
|
125
|
+
}),
|
|
126
|
+
optional({
|
|
127
|
+
name: 'serverRange',
|
|
128
|
+
needs: needsServerData,
|
|
129
|
+
load: ()=>import('./serverData/serverRangeFeature.js')
|
|
130
|
+
}),
|
|
131
|
+
lazyCellsFeature,
|
|
132
|
+
optional({
|
|
133
|
+
name: 'views',
|
|
134
|
+
needs: needsViews,
|
|
135
|
+
load: ()=>import('./views/viewsFeature.js')
|
|
136
|
+
}),
|
|
137
|
+
optional({
|
|
138
|
+
name: 'toolbar',
|
|
139
|
+
needs: needsToolbar,
|
|
140
|
+
load: ()=>import('./toolbar/toolbarFeature.js')
|
|
141
|
+
}),
|
|
142
|
+
bulkFeature,
|
|
143
|
+
queueFeature,
|
|
144
|
+
keyboardFeature,
|
|
145
|
+
eventsFeature,
|
|
146
|
+
exportFeature,
|
|
147
|
+
paginationFeature
|
|
148
|
+
];
|
|
149
|
+
export default features;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ // Rows that are not data rows (an expanded detail row, a group header) may have fewer cells than
|
|
16
|
+
// the grid has columns; focus lands on their first cell.
|
|
17
|
+
function findCellElement({ api, row, col }) {
|
|
18
|
+
const scroller = api.scrollerRef.current;
|
|
19
|
+
return scroller?.querySelector(`[data-row-index="${row}"] [data-lf-cell][data-col-index="${col}"]`) ?? scroller?.querySelector(`[data-row-index="${row}"] [data-lf-cell]`);
|
|
20
|
+
}
|
|
21
|
+
export default findCellElement;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ // Arrow keys, Home/End (row ends), Ctrl/Cmd+Home/End (grid corners) and PageUp/PageDown (one
|
|
16
|
+
// body height). Row -1 is the header row.
|
|
17
|
+
function getNextCell({ event, api, row, col }) {
|
|
18
|
+
const lastRow = api.rows.length - 1;
|
|
19
|
+
const lastCol = api.layout.cols.length - 1;
|
|
20
|
+
const modified = event.ctrlKey || event.metaKey;
|
|
21
|
+
const scroller = api.scrollerRef.current;
|
|
22
|
+
const pageRows = Math.max(1, Math.floor((scroller.clientHeight - api.headerHeight) / api.rowHeight) - 1);
|
|
23
|
+
switch(event.key){
|
|
24
|
+
case 'ArrowUp':
|
|
25
|
+
return {
|
|
26
|
+
row: Math.max(-1, row - 1),
|
|
27
|
+
col
|
|
28
|
+
};
|
|
29
|
+
case 'ArrowDown':
|
|
30
|
+
return {
|
|
31
|
+
row: Math.min(lastRow, row + 1),
|
|
32
|
+
col
|
|
33
|
+
};
|
|
34
|
+
case 'ArrowLeft':
|
|
35
|
+
return {
|
|
36
|
+
row,
|
|
37
|
+
col: Math.max(0, col - 1)
|
|
38
|
+
};
|
|
39
|
+
case 'ArrowRight':
|
|
40
|
+
return {
|
|
41
|
+
row,
|
|
42
|
+
col: Math.min(lastCol, col + 1)
|
|
43
|
+
};
|
|
44
|
+
case 'Home':
|
|
45
|
+
return modified ? {
|
|
46
|
+
row: Math.min(0, lastRow),
|
|
47
|
+
col: 0
|
|
48
|
+
} : {
|
|
49
|
+
row,
|
|
50
|
+
col: 0
|
|
51
|
+
};
|
|
52
|
+
case 'End':
|
|
53
|
+
return modified ? {
|
|
54
|
+
row: lastRow,
|
|
55
|
+
col: lastCol
|
|
56
|
+
} : {
|
|
57
|
+
row,
|
|
58
|
+
col: lastCol
|
|
59
|
+
};
|
|
60
|
+
case 'PageUp':
|
|
61
|
+
return {
|
|
62
|
+
row: row < 0 ? row : Math.max(0, row - pageRows),
|
|
63
|
+
col
|
|
64
|
+
};
|
|
65
|
+
case 'PageDown':
|
|
66
|
+
return {
|
|
67
|
+
row: Math.min(lastRow, Math.max(0, row) + pageRows),
|
|
68
|
+
col
|
|
69
|
+
};
|
|
70
|
+
default:
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export default getNextCell;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ // Focus that lands on a cell (click, Tab, programmatic) makes it the active cell. Focus on the
|
|
16
|
+
// scroller itself means the active cell is outside the rendered window: bring it back.
|
|
17
|
+
function handleGridFocus(event, api) {
|
|
18
|
+
if (event.target === api.scrollerRef.current) {
|
|
19
|
+
api.keyboard.moveTo(api.keyboard.activeCell);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
const cell = event.target.closest('[data-lf-cell]');
|
|
23
|
+
if (!cell || !api.contains(cell)) return false;
|
|
24
|
+
const rowElement = cell.closest('[data-row-index]');
|
|
25
|
+
api.keyboard.setActive({
|
|
26
|
+
row: Number(rowElement.dataset.rowIndex),
|
|
27
|
+
col: Number(cell.dataset.colIndex)
|
|
28
|
+
});
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
export default handleGridFocus;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ import getNextCell from './getNextCell.js';
|
|
16
|
+
function activate({ event, api, cell, row, rowElement }) {
|
|
17
|
+
if (row === -1) {
|
|
18
|
+
if (cell.dataset.special === 'select') return api.actions.toggleAllRowsSelected?.();
|
|
19
|
+
return api.actions.toggleSort?.({
|
|
20
|
+
key: cell.dataset.colKey,
|
|
21
|
+
multi: event.shiftKey
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return api.actions.activateRow?.({
|
|
25
|
+
id: rowElement.dataset.rowKey,
|
|
26
|
+
event
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function handleGridKeyDown(event, api) {
|
|
30
|
+
if (!api.config.keyboard) return false;
|
|
31
|
+
const cell = event.target.closest('[data-lf-cell]');
|
|
32
|
+
if (!cell || !api.contains(cell)) return false;
|
|
33
|
+
if (event.target !== cell) {
|
|
34
|
+
// Keys typed into a control inside a cell belong to the control; Escape returns to the grid.
|
|
35
|
+
if (event.key !== 'Escape') return false;
|
|
36
|
+
cell.focus();
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
const rowElement = cell.closest('[data-row-index]');
|
|
40
|
+
const row = Number(rowElement.dataset.rowIndex);
|
|
41
|
+
const col = Number(cell.dataset.colIndex);
|
|
42
|
+
if (event.key === ' ') {
|
|
43
|
+
if (row < 0 || !api.config.rowSelection) return false;
|
|
44
|
+
event.preventDefault();
|
|
45
|
+
api.actions.toggleRowSelected({
|
|
46
|
+
id: rowElement.dataset.rowKey
|
|
47
|
+
});
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
if (event.key === 'Enter') {
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
activate({
|
|
53
|
+
event,
|
|
54
|
+
api,
|
|
55
|
+
cell,
|
|
56
|
+
row,
|
|
57
|
+
rowElement
|
|
58
|
+
});
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
const next = getNextCell({
|
|
62
|
+
event,
|
|
63
|
+
api,
|
|
64
|
+
row,
|
|
65
|
+
col
|
|
66
|
+
});
|
|
67
|
+
if (!next) return false;
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
api.keyboard.moveTo(next);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
export default handleGridKeyDown;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ function isCellRendered({ cell, layout, range }) {
|
|
16
|
+
if (cell.row >= 0 && (cell.row < range.rowStart || cell.row >= range.rowEnd)) return false;
|
|
17
|
+
const col = layout.cols[cell.col];
|
|
18
|
+
if (!col || col.region !== 'center') return true;
|
|
19
|
+
const centerIndex = col.index - layout.start.length;
|
|
20
|
+
return centerIndex >= range.colStart && centerIndex < range.colEnd;
|
|
21
|
+
}
|
|
22
|
+
export default isCellRendered;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ import handleGridFocus from './handleGridFocus.js';
|
|
16
|
+
import handleGridKeyDown from './handleGridKeyDown.js';
|
|
17
|
+
import useKeyboard from './useKeyboard.js';
|
|
18
|
+
const keyboardFeature = {
|
|
19
|
+
name: 'keyboard',
|
|
20
|
+
useGridFeature: useKeyboard,
|
|
21
|
+
gridHandlers: {
|
|
22
|
+
focus: handleGridFocus,
|
|
23
|
+
keydown: handleGridKeyDown
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
export default keyboardFeature;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ import { useLayoutEffect, useRef, useState } from 'react';
|
|
16
|
+
import findCellElement from './findCellElement.js';
|
|
17
|
+
import isCellRendered from './isCellRendered.js';
|
|
18
|
+
import scrollToCell from '../virtualization/scrollToCell.js';
|
|
19
|
+
function clampCell({ cell, rowCount, colCount }) {
|
|
20
|
+
return {
|
|
21
|
+
row: Math.min(Math.max(cell.row, -1), rowCount - 1),
|
|
22
|
+
col: Math.min(Math.max(cell.col, 0), Math.max(colCount - 1, 0))
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// Roving tabindex over the grid (D11): exactly one cell (header row -1 included) is tabbable. The
|
|
26
|
+
// active cell may be scrolled out of the rendered window; then the scroller itself takes the tab
|
|
27
|
+
// stop and hands focus back to the cell (scrolled into view) when it receives it.
|
|
28
|
+
function useKeyboard(ctx) {
|
|
29
|
+
const { api, layout, range, rows } = ctx;
|
|
30
|
+
const [active, setActive] = useState(null);
|
|
31
|
+
const pendingFocus = useRef(false);
|
|
32
|
+
const fallback = {
|
|
33
|
+
row: rows.length ? 0 : -1,
|
|
34
|
+
col: 0
|
|
35
|
+
};
|
|
36
|
+
const activeCell = clampCell({
|
|
37
|
+
cell: active ?? fallback,
|
|
38
|
+
rowCount: rows.length,
|
|
39
|
+
colCount: layout.cols.length
|
|
40
|
+
});
|
|
41
|
+
api.keyboard = {
|
|
42
|
+
activeCell,
|
|
43
|
+
moveTo (cell) {
|
|
44
|
+
const next = clampCell({
|
|
45
|
+
cell,
|
|
46
|
+
rowCount: api.rows.length,
|
|
47
|
+
colCount: api.layout.cols.length
|
|
48
|
+
});
|
|
49
|
+
pendingFocus.current = true;
|
|
50
|
+
setActive(next);
|
|
51
|
+
scrollToCell({
|
|
52
|
+
api,
|
|
53
|
+
row: next.row,
|
|
54
|
+
col: next.col
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
setActive (cell) {
|
|
58
|
+
setActive((previous)=>previous?.row === cell.row && previous?.col === cell.col ? previous : cell);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
useLayoutEffect(()=>{
|
|
62
|
+
if (!pendingFocus.current) return;
|
|
63
|
+
const element = findCellElement({
|
|
64
|
+
api,
|
|
65
|
+
row: activeCell.row,
|
|
66
|
+
col: activeCell.col
|
|
67
|
+
});
|
|
68
|
+
if (!element) return;
|
|
69
|
+
pendingFocus.current = false;
|
|
70
|
+
element.focus({
|
|
71
|
+
preventScroll: true
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
const rendered = isCellRendered({
|
|
75
|
+
cell: activeCell,
|
|
76
|
+
layout,
|
|
77
|
+
range
|
|
78
|
+
});
|
|
79
|
+
return {
|
|
80
|
+
activeCell,
|
|
81
|
+
scrollerTabIndex: rendered ? -1 : 0
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export default useKeyboard;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ function getBodyRowKey(target) {
|
|
16
|
+
if (!(target instanceof Element)) return null;
|
|
17
|
+
return target.closest('.lf-table-body [data-row-key]')?.dataset.rowKey ?? null;
|
|
18
|
+
}
|
|
19
|
+
export default getBodyRowKey;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ function handlePointerLeave(event, api) {
|
|
16
|
+
api.cellActivity.set({
|
|
17
|
+
hoveredRow: null
|
|
18
|
+
});
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
export default handlePointerLeave;
|