@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,71 @@
|
|
|
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 React, { useRef, useSyncExternalStore } from 'react';
|
|
16
|
+
import { get } from '@lowdefy/helpers';
|
|
17
|
+
import getCellText from '@lowdefy/blocks-antd/table/getCellText.js';
|
|
18
|
+
import renderCell from '@lowdefy/blocks-antd/table/renderCell.js';
|
|
19
|
+
import getCellFit from './getCellFit.js';
|
|
20
|
+
// The cell's text in the column's cell layout: what a rich cell shows while the grid scrolls
|
|
21
|
+
// fast. Buttons hold no text, so theirs is an empty cell.
|
|
22
|
+
function renderPlaceholder({ col, original }) {
|
|
23
|
+
const { column } = col;
|
|
24
|
+
const text = column.type === 'buttons' ? null : getCellText({
|
|
25
|
+
column,
|
|
26
|
+
value: get(original, column.field),
|
|
27
|
+
row: original
|
|
28
|
+
});
|
|
29
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
30
|
+
className: column.compiled.className
|
|
31
|
+
}, text);
|
|
32
|
+
}
|
|
33
|
+
// A rich cell (lazyCellTypes.js) that mounts on demand. Any rich cell that comes into view while
|
|
34
|
+
// the grid scrolls fast shows its text placeholder until the scroll settles, then renders in
|
|
35
|
+
// full and stays (D10.4). `buttons` with `showOn: hover` mount only while their row is hovered or
|
|
36
|
+
// holds keyboard focus, and not during a fast scroll (tier 1, D4): they are invisible otherwise.
|
|
37
|
+
// Chip cells show the chips that fit their column (getCellFit), worked out again when it resizes.
|
|
38
|
+
function LazyCell({ api, col, lead, original, rowKey }) {
|
|
39
|
+
const activity = api.cellActivity;
|
|
40
|
+
const rowId = String(rowKey);
|
|
41
|
+
const hoverOnly = col.column.type === 'buttons' && col.column.cell.showOn === 'hover';
|
|
42
|
+
const shownRef = useRef(false);
|
|
43
|
+
const active = useSyncExternalStore(activity.subscribe, ()=>{
|
|
44
|
+
const { state } = activity;
|
|
45
|
+
if (hoverOnly) {
|
|
46
|
+
// Rows pass under a still pointer while the grid scrolls: wait until it settles.
|
|
47
|
+
if (state.fastScrolling) return false;
|
|
48
|
+
return activity.noHover || state.hoveredRow === rowId || state.focusedRow === rowId;
|
|
49
|
+
}
|
|
50
|
+
return shownRef.current || !state.fastScrolling;
|
|
51
|
+
});
|
|
52
|
+
if (!active) return renderPlaceholder({
|
|
53
|
+
col,
|
|
54
|
+
original
|
|
55
|
+
});
|
|
56
|
+
shownRef.current = true;
|
|
57
|
+
return renderCell({
|
|
58
|
+
column: col.column,
|
|
59
|
+
row: original,
|
|
60
|
+
rowKey,
|
|
61
|
+
methods: api.methods,
|
|
62
|
+
components: api.components,
|
|
63
|
+
onEvent: api.onCellEvent,
|
|
64
|
+
fit: getCellFit({
|
|
65
|
+
api,
|
|
66
|
+
col,
|
|
67
|
+
lead
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export default LazyCell;
|
|
@@ -0,0 +1,38 @@
|
|
|
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 React from 'react';
|
|
16
|
+
const SKELETON_ROWS = 5;
|
|
17
|
+
function LoadingRows({ layout }) {
|
|
18
|
+
const rows = [];
|
|
19
|
+
for(let i = 0; i < SKELETON_ROWS; i++){
|
|
20
|
+
rows.push(/*#__PURE__*/ React.createElement("div", {
|
|
21
|
+
"aria-hidden": "true",
|
|
22
|
+
className: "lf-table-row",
|
|
23
|
+
key: i
|
|
24
|
+
}, layout.cols.map((col)=>/*#__PURE__*/ React.createElement("div", {
|
|
25
|
+
className: "lf-table-gridcell",
|
|
26
|
+
key: col.key,
|
|
27
|
+
style: {
|
|
28
|
+
width: col.width
|
|
29
|
+
}
|
|
30
|
+
}, col.special ? null : /*#__PURE__*/ React.createElement("span", {
|
|
31
|
+
className: "lf-table-skeleton-bar"
|
|
32
|
+
})))));
|
|
33
|
+
}
|
|
34
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
35
|
+
className: "lf-table-body"
|
|
36
|
+
}, rows);
|
|
37
|
+
}
|
|
38
|
+
export default LoadingRows;
|
|
@@ -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
|
+
*/ import { createContext } from 'react';
|
|
16
|
+
// Render counters for the benchmark page only (bench/app provides a value). Production pages never
|
|
17
|
+
// provide one, so the rows and body only pay for a context read.
|
|
18
|
+
const RenderProbeContext = /*#__PURE__*/ createContext(null);
|
|
19
|
+
export default RenderProbeContext;
|
package/dist/core/Row.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
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 React, { memo, useContext } from 'react';
|
|
16
|
+
import { cn } from '@lowdefy/block-utils';
|
|
17
|
+
import Cell from './Cell.js';
|
|
18
|
+
import RenderProbeContext from './RenderProbeContext.js';
|
|
19
|
+
function renderCells({ api, cols, activeCol, lead, leadIndex, original, selected }) {
|
|
20
|
+
return cols.map((col)=>/*#__PURE__*/ React.createElement(Cell, {
|
|
21
|
+
api: api,
|
|
22
|
+
col: col,
|
|
23
|
+
focused: activeCol === col.index,
|
|
24
|
+
key: col.key,
|
|
25
|
+
lead: col.index === leadIndex ? lead : undefined,
|
|
26
|
+
original: original,
|
|
27
|
+
selected: selected
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
// Wrapped row items (tree rows, expandable rows) get the features' lead elements in their first
|
|
31
|
+
// data cell; plain rows render none.
|
|
32
|
+
function renderLead({ api, item }) {
|
|
33
|
+
if (!item) return undefined;
|
|
34
|
+
return api.features.cellLeads.map((Lead, index)=>/*#__PURE__*/ React.createElement(Lead, {
|
|
35
|
+
api: api,
|
|
36
|
+
item: item,
|
|
37
|
+
key: index
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
// Memoised by row key and row object: with data diffed by key, an update to one row of 100k
|
|
41
|
+
// re-renders that one row. Rows never receive their TanStack row object, whose identity changes
|
|
42
|
+
// whenever the row model rebuilds. `rowRules` classes and styles come from the row object, so they
|
|
43
|
+
// are worked out here, inside the memo. The row element carries `lf-table-row`, the class the
|
|
44
|
+
// shared cell styles reveal `showOn: hover` buttons from (the row holds its pinned cells too, so
|
|
45
|
+
// CSS hover covers the whole row).
|
|
46
|
+
function Row({ activeCol, api, ariaRowIndex, centerCols, className, displayIndex, endCols, item, leadIndex, measured, offset, original, rowId, selectable, selected, startCols, style }) {
|
|
47
|
+
const probe = useContext(RenderProbeContext);
|
|
48
|
+
probe?.row(rowId);
|
|
49
|
+
const positioned = offset !== undefined;
|
|
50
|
+
const lead = renderLead({
|
|
51
|
+
api,
|
|
52
|
+
item
|
|
53
|
+
});
|
|
54
|
+
const cellArgs = {
|
|
55
|
+
api,
|
|
56
|
+
activeCol,
|
|
57
|
+
lead,
|
|
58
|
+
leadIndex,
|
|
59
|
+
original,
|
|
60
|
+
selected
|
|
61
|
+
};
|
|
62
|
+
const ruled = api.config.rowRules === null ? null : api.config.rowRules(original);
|
|
63
|
+
let rowStyle = style;
|
|
64
|
+
if (ruled?.style) rowStyle = {
|
|
65
|
+
...style ?? {},
|
|
66
|
+
...ruled.style
|
|
67
|
+
};
|
|
68
|
+
if (positioned) rowStyle = {
|
|
69
|
+
...rowStyle ?? {},
|
|
70
|
+
transform: `translateY(${offset}px)`
|
|
71
|
+
};
|
|
72
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
73
|
+
"aria-expanded": item?.hasChildren || item?.expandable ? item.expanded === true || item.detailExpanded === true : undefined,
|
|
74
|
+
"aria-level": item?.depth === undefined ? undefined : item.depth + 1,
|
|
75
|
+
"aria-rowindex": ariaRowIndex,
|
|
76
|
+
"aria-selected": selectable ? selected : undefined,
|
|
77
|
+
className: cn(className, ruled?.className),
|
|
78
|
+
"data-measure-key": measured ? rowId : undefined,
|
|
79
|
+
"data-measured": measured ? '' : undefined,
|
|
80
|
+
"data-positioned": positioned ? '' : undefined,
|
|
81
|
+
"data-row-index": displayIndex,
|
|
82
|
+
"data-row-key": rowId,
|
|
83
|
+
role: "row",
|
|
84
|
+
style: rowStyle
|
|
85
|
+
}, renderCells({
|
|
86
|
+
...cellArgs,
|
|
87
|
+
cols: startCols
|
|
88
|
+
}), /*#__PURE__*/ React.createElement("div", {
|
|
89
|
+
className: "lf-table-center"
|
|
90
|
+
}, renderCells({
|
|
91
|
+
...cellArgs,
|
|
92
|
+
cols: centerCols
|
|
93
|
+
})), renderCells({
|
|
94
|
+
...cellArgs,
|
|
95
|
+
cols: endCols
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
export default /*#__PURE__*/ memo(Row);
|
|
@@ -0,0 +1,42 @@
|
|
|
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 React, { memo } from 'react';
|
|
16
|
+
// A row that is not loaded yet (server mode): the row's box with a skeleton bar per data cell,
|
|
17
|
+
// so fast scrolling shows placeholders instead of blank space.
|
|
18
|
+
function SkeletonRow({ ariaRowIndex, centerCols, className, displayIndex, endCols, startCols }) {
|
|
19
|
+
const renderCells = (cols)=>cols.map((col)=>/*#__PURE__*/ React.createElement("div", {
|
|
20
|
+
className: "lf-table-gridcell",
|
|
21
|
+
"data-col-index": col.index,
|
|
22
|
+
"data-lf-cell": "",
|
|
23
|
+
"data-pinned": col.region === 'center' ? undefined : col.region,
|
|
24
|
+
key: col.key,
|
|
25
|
+
role: "gridcell",
|
|
26
|
+
style: col.style,
|
|
27
|
+
tabIndex: -1
|
|
28
|
+
}, col.special ? null : /*#__PURE__*/ React.createElement("span", {
|
|
29
|
+
className: "lf-table-skeleton-bar"
|
|
30
|
+
})));
|
|
31
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
32
|
+
"aria-busy": "true",
|
|
33
|
+
"aria-rowindex": ariaRowIndex,
|
|
34
|
+
className: className,
|
|
35
|
+
"data-row-index": displayIndex,
|
|
36
|
+
"data-skeleton": "",
|
|
37
|
+
role: "row"
|
|
38
|
+
}, renderCells(startCols), /*#__PURE__*/ React.createElement("div", {
|
|
39
|
+
className: "lf-table-center"
|
|
40
|
+
}, renderCells(centerCols)), renderCells(endCols));
|
|
41
|
+
}
|
|
42
|
+
export default /*#__PURE__*/ memo(SkeletonRow);
|
|
@@ -0,0 +1,86 @@
|
|
|
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 React from 'react';
|
|
16
|
+
import AGGREGATE_LABELS from '@lowdefy/blocks-antd/table/aggregateLabels.js';
|
|
17
|
+
import getSummaryLabel from './getSummaryLabel.js';
|
|
18
|
+
// The label is the full one when it fits beside the value, else its short form, else none
|
|
19
|
+
// (getSummaryLabel, measured without DOM reads); the full label and value are the title.
|
|
20
|
+
function renderSummary({ api, col, entry }) {
|
|
21
|
+
const label = AGGREGATE_LABELS[entry.fn];
|
|
22
|
+
const text = entry.text === '' ? '—' : entry.text;
|
|
23
|
+
const measure = api.textMeasure;
|
|
24
|
+
const shown = getSummaryLabel({
|
|
25
|
+
fn: entry.fn,
|
|
26
|
+
measure,
|
|
27
|
+
text,
|
|
28
|
+
width: col.width - measure.cellInset
|
|
29
|
+
});
|
|
30
|
+
return /*#__PURE__*/ React.createElement("span", {
|
|
31
|
+
className: "lf-table-summary",
|
|
32
|
+
"data-aggregate": entry.fn,
|
|
33
|
+
title: `${label} ${text}`
|
|
34
|
+
}, shown === null ? null : /*#__PURE__*/ React.createElement("span", {
|
|
35
|
+
className: "lf-table-summary-label"
|
|
36
|
+
}, shown), /*#__PURE__*/ React.createElement("span", {
|
|
37
|
+
className: "lf-table-summary-value"
|
|
38
|
+
}, text));
|
|
39
|
+
}
|
|
40
|
+
function renderCells({ api, cols, summary }) {
|
|
41
|
+
return cols.map((col)=>{
|
|
42
|
+
const entry = col.special ? undefined : summary.get(col.key);
|
|
43
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
44
|
+
className: "lf-table-gridcell",
|
|
45
|
+
"data-align": col.column?.align,
|
|
46
|
+
"data-col-key": col.key,
|
|
47
|
+
"data-pinned": col.region === 'center' ? undefined : col.region,
|
|
48
|
+
"data-pinned-edge": col.pinnedEdge ? '' : undefined,
|
|
49
|
+
key: col.key,
|
|
50
|
+
role: "gridcell",
|
|
51
|
+
style: col.style
|
|
52
|
+
}, entry ? renderSummary({
|
|
53
|
+
api,
|
|
54
|
+
col,
|
|
55
|
+
entry
|
|
56
|
+
}) : null);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// The summary footer row (D15: on when a column declares `aggregate`), sticky at the bottom of the
|
|
60
|
+
// scroller so it stays in view and scrolls sideways with the columns. Same markup and labels as
|
|
61
|
+
// TableLight's summary row.
|
|
62
|
+
function SummaryRow({ api, ariaRowIndex, centerCols, layout, summary }) {
|
|
63
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
64
|
+
className: "lf-table-footer",
|
|
65
|
+
role: "rowgroup"
|
|
66
|
+
}, /*#__PURE__*/ React.createElement("div", {
|
|
67
|
+
"aria-rowindex": ariaRowIndex,
|
|
68
|
+
className: "lf-table-row lf-table-summary-row",
|
|
69
|
+
role: "row"
|
|
70
|
+
}, renderCells({
|
|
71
|
+
api,
|
|
72
|
+
cols: layout.start,
|
|
73
|
+
summary
|
|
74
|
+
}), /*#__PURE__*/ React.createElement("div", {
|
|
75
|
+
className: "lf-table-center"
|
|
76
|
+
}, renderCells({
|
|
77
|
+
api,
|
|
78
|
+
cols: centerCols,
|
|
79
|
+
summary
|
|
80
|
+
})), renderCells({
|
|
81
|
+
api,
|
|
82
|
+
cols: layout.end,
|
|
83
|
+
summary
|
|
84
|
+
})));
|
|
85
|
+
}
|
|
86
|
+
export default SummaryRow;
|
|
@@ -0,0 +1,195 @@
|
|
|
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 React, { useMemo, useRef } from 'react';
|
|
16
|
+
import { useTable } from '@tanstack/react-table';
|
|
17
|
+
import createApi from './createApi.js';
|
|
18
|
+
import createFeatureActions from './createFeatureActions.js';
|
|
19
|
+
import createKeyIndex from './createKeyIndex.js';
|
|
20
|
+
import createSliceHandlers from './createSliceHandlers.js';
|
|
21
|
+
import densityHeights from './densityHeights.js';
|
|
22
|
+
import Grid from './Grid.js';
|
|
23
|
+
import stabilizeData from './stabilizeData.js';
|
|
24
|
+
import useFeatureData from './useFeatureData.js';
|
|
25
|
+
import useFeatureFragments from './useFeatureFragments.js';
|
|
26
|
+
import useFeatureItems from './useFeatureItems.js';
|
|
27
|
+
import useFeatureMethods from './useFeatureMethods.js';
|
|
28
|
+
import useFeatureRows from './useFeatureRows.js';
|
|
29
|
+
import useForeignKeys from './useForeignKeys.js';
|
|
30
|
+
import useSummary from './useSummary.js';
|
|
31
|
+
import useTableConfig from './useTableConfig.js';
|
|
32
|
+
import useTableState from './useTableState.js';
|
|
33
|
+
import './table.css';
|
|
34
|
+
// The table core: config, data, TanStack state and the feature fragments, composed into the
|
|
35
|
+
// window component. `rowWindowStrategy` is a benchmark-only prop (the Lowdefy client never passes
|
|
36
|
+
// it) that switches the row window to TanStack Virtual's per-row positioning. `input` is set by
|
|
37
|
+
// TableInput only: `{ changes, methods }`, its value (a changeset over `data`) and the engine
|
|
38
|
+
// methods that write it.
|
|
39
|
+
//
|
|
40
|
+
// The data pipeline, in order (ARCHITECTURE.md, "Data path"):
|
|
41
|
+
// 1. source (`useData` hooks): `properties.data`, or server mode's loaded block rows; a
|
|
42
|
+
// `childrenField` tree is flattened here.
|
|
43
|
+
// 2. key diff (`stabilizeData`): unchanged rows keep their object identity across data changes.
|
|
44
|
+
// 3. row overlays (`useRows` hooks): client transactions, then editing's optimistic overlay or
|
|
45
|
+
// TableInput's changeset.
|
|
46
|
+
// 4. TanStack: filter and sort (manual in server mode), selection, row lookup.
|
|
47
|
+
// 5. display list (`useItems` hooks): server items, client groups, tree rows, expandable detail
|
|
48
|
+
// rows, the current page; with the items' height estimates when they are not one row high.
|
|
49
|
+
// 6. window (Grid, virtualization): the rendered range of the display list, and the row offsets
|
|
50
|
+
// when heights differ (measured rows, detail rows).
|
|
51
|
+
function TableRoot({ basePath, blockId, classNames = {}, components, content = {}, events = {}, features, input, loading, methods, pageId, properties, rowWindowStrategy, styles = {}, value }) {
|
|
52
|
+
const config = useTableConfig({
|
|
53
|
+
properties
|
|
54
|
+
});
|
|
55
|
+
const apiRef = useRef(null);
|
|
56
|
+
if (apiRef.current === null) {
|
|
57
|
+
apiRef.current = createApi({
|
|
58
|
+
features
|
|
59
|
+
});
|
|
60
|
+
createFeatureActions(apiRef.current);
|
|
61
|
+
}
|
|
62
|
+
const api = apiRef.current;
|
|
63
|
+
const sourceData = useFeatureData({
|
|
64
|
+
api,
|
|
65
|
+
config,
|
|
66
|
+
properties
|
|
67
|
+
});
|
|
68
|
+
const previousData = useRef(null);
|
|
69
|
+
const stable = useMemo(()=>stabilizeData({
|
|
70
|
+
data: sourceData,
|
|
71
|
+
previous: previousData.current,
|
|
72
|
+
getKey: config.getKey,
|
|
73
|
+
rowVersionField: config.rowVersionField
|
|
74
|
+
}), [
|
|
75
|
+
sourceData,
|
|
76
|
+
config.getKey,
|
|
77
|
+
config.rowVersionField
|
|
78
|
+
]);
|
|
79
|
+
previousData.current = stable;
|
|
80
|
+
// Row events report a row's index in the source rows (`data`), before any overlay.
|
|
81
|
+
api.getSourceIndex = useMemo(()=>createKeyIndex({
|
|
82
|
+
rows: stable.rows,
|
|
83
|
+
getKey: config.getKey
|
|
84
|
+
}), [
|
|
85
|
+
stable.rows,
|
|
86
|
+
config.getKey
|
|
87
|
+
]);
|
|
88
|
+
const data = useFeatureRows({
|
|
89
|
+
api,
|
|
90
|
+
config,
|
|
91
|
+
input,
|
|
92
|
+
properties,
|
|
93
|
+
rows: stable.rows
|
|
94
|
+
});
|
|
95
|
+
const { isPending, loadValue, setSliceSilently, state, updateSlice } = useTableState({
|
|
96
|
+
api,
|
|
97
|
+
config,
|
|
98
|
+
data,
|
|
99
|
+
methods,
|
|
100
|
+
properties,
|
|
101
|
+
value
|
|
102
|
+
});
|
|
103
|
+
const sliceHandlers = useMemo(()=>createSliceHandlers({
|
|
104
|
+
sliceDefinitions: features.sliceDefinitions,
|
|
105
|
+
updateSlice
|
|
106
|
+
}), [
|
|
107
|
+
updateSlice
|
|
108
|
+
]);
|
|
109
|
+
const tableOptions = useMemo(()=>Object.assign({}, ...features.list.map((feature)=>feature.tableOptions?.({
|
|
110
|
+
config
|
|
111
|
+
}) ?? {})), [
|
|
112
|
+
config
|
|
113
|
+
]);
|
|
114
|
+
const table = useTable({
|
|
115
|
+
...tableOptions,
|
|
116
|
+
...sliceHandlers,
|
|
117
|
+
columns: config.columnDefs,
|
|
118
|
+
data,
|
|
119
|
+
features: features.tanstackFeatures,
|
|
120
|
+
getRowId: config.getId,
|
|
121
|
+
state
|
|
122
|
+
});
|
|
123
|
+
Object.assign(api, {
|
|
124
|
+
basePath,
|
|
125
|
+
blockId,
|
|
126
|
+
components,
|
|
127
|
+
config,
|
|
128
|
+
content,
|
|
129
|
+
events,
|
|
130
|
+
input,
|
|
131
|
+
loadValue,
|
|
132
|
+
methods,
|
|
133
|
+
pageId,
|
|
134
|
+
properties,
|
|
135
|
+
setSliceSilently,
|
|
136
|
+
state,
|
|
137
|
+
table,
|
|
138
|
+
updateSlice,
|
|
139
|
+
value
|
|
140
|
+
});
|
|
141
|
+
useForeignKeys({
|
|
142
|
+
api,
|
|
143
|
+
selected: value?.selected
|
|
144
|
+
});
|
|
145
|
+
useFeatureMethods({
|
|
146
|
+
api,
|
|
147
|
+
methods
|
|
148
|
+
});
|
|
149
|
+
const rowHeight = config.rowHeight ?? densityHeights[state.density];
|
|
150
|
+
const headerHeight = Math.min(Math.max(rowHeight, 32), 48);
|
|
151
|
+
// Before the fragments, so a fragment (the pager) renders with this render's display list.
|
|
152
|
+
const { dataRows, rowHeights, rows } = useFeatureItems({
|
|
153
|
+
api,
|
|
154
|
+
config,
|
|
155
|
+
rowHeight,
|
|
156
|
+
rows: table.getRowModel().rows,
|
|
157
|
+
state,
|
|
158
|
+
table
|
|
159
|
+
});
|
|
160
|
+
api.dataRows = dataRows;
|
|
161
|
+
const fragments = useFeatureFragments({
|
|
162
|
+
api,
|
|
163
|
+
config,
|
|
164
|
+
data,
|
|
165
|
+
state,
|
|
166
|
+
table
|
|
167
|
+
});
|
|
168
|
+
const { leadingColumns, regions } = fragments;
|
|
169
|
+
const summary = useSummary({
|
|
170
|
+
api,
|
|
171
|
+
config,
|
|
172
|
+
state,
|
|
173
|
+
table
|
|
174
|
+
});
|
|
175
|
+
return /*#__PURE__*/ React.createElement(Grid, {
|
|
176
|
+
api: api,
|
|
177
|
+
blockId: blockId,
|
|
178
|
+
classNames: classNames,
|
|
179
|
+
clickable: Boolean(config.rowLink || events.onRowClick),
|
|
180
|
+
config: config,
|
|
181
|
+
headerHeight: headerHeight,
|
|
182
|
+
isPending: isPending || fragments.pending,
|
|
183
|
+
leadingColumns: leadingColumns,
|
|
184
|
+
loading: loading === true || properties.loading === true || fragments.loading,
|
|
185
|
+
regions: regions,
|
|
186
|
+
rowHeight: rowHeight,
|
|
187
|
+
rowHeights: rowHeights,
|
|
188
|
+
rows: rows,
|
|
189
|
+
state: state,
|
|
190
|
+
strategy: rowWindowStrategy,
|
|
191
|
+
styles: styles,
|
|
192
|
+
summary: summary
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
export default TableRoot;
|
|
@@ -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
|
+
*/ // Short forms of the summary footer's aggregate labels, for columns too narrow for the full label
|
|
16
|
+
// (AGGREGATE_LABELS). Labels already short (Min, Max) have none and keep their full form.
|
|
17
|
+
const AGGREGATE_SHORT_LABELS = {
|
|
18
|
+
sum: 'Σ',
|
|
19
|
+
avg: 'Avg',
|
|
20
|
+
count: '#',
|
|
21
|
+
countDistinct: 'Uniq',
|
|
22
|
+
earliest: 'First',
|
|
23
|
+
latest: 'Last'
|
|
24
|
+
};
|
|
25
|
+
export default AGGREGATE_SHORT_LABELS;
|
|
@@ -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
|
+
*/ // Writes a layout's CSS variables straight to the root element: the resize drag path, which must
|
|
16
|
+
// not render React.
|
|
17
|
+
function applyLayoutVars({ element, layout }) {
|
|
18
|
+
Object.entries(layout.vars).forEach(([name, value])=>{
|
|
19
|
+
element.style.setProperty(name, value);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export default applyLayoutVars;
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
*/ // Runs of adjacent layout columns under the same header group at `level` (null for columns with
|
|
16
|
+
// no group that deep, and for special columns). Columns reordered away from their group make a
|
|
17
|
+
// second run, so a group always sits over its own columns.
|
|
18
|
+
function buildGroupSegments({ cols, level, ancestorsByKey }) {
|
|
19
|
+
const segments = [];
|
|
20
|
+
cols.forEach((col)=>{
|
|
21
|
+
const node = col.special ? null : ancestorsByKey.get(col.key)?.[level] ?? null;
|
|
22
|
+
const last = segments[segments.length - 1];
|
|
23
|
+
if (last && last.node === node) {
|
|
24
|
+
last.cols.push(col);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
segments.push({
|
|
28
|
+
node,
|
|
29
|
+
cols: [
|
|
30
|
+
col
|
|
31
|
+
]
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
return segments;
|
|
35
|
+
}
|
|
36
|
+
export default buildGroupSegments;
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
*/ // Components rendered once between the header and the body rows, inside the scroll canvas, when
|
|
16
|
+
// there are rows (the sticky group header). Each receives the grid's row and layout props.
|
|
17
|
+
function collectBodyOverlays(features) {
|
|
18
|
+
return features.filter((feature)=>feature.bodyOverlay).map((feature)=>feature.bodyOverlay);
|
|
19
|
+
}
|
|
20
|
+
export default collectBodyOverlays;
|