@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,116 @@
|
|
|
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 { Button, Segmented } from 'antd';
|
|
17
|
+
import CloseIcon from './CloseIcon.js';
|
|
18
|
+
import createDefaultLeaf from './createDefaultLeaf.js';
|
|
19
|
+
import FilterLeaf from './FilterLeaf.js';
|
|
20
|
+
import getGroupOperator from './getGroupOperator.js';
|
|
21
|
+
// Groups nest three levels deep, as in Notion's advanced filters.
|
|
22
|
+
const MAX_DEPTH = 3;
|
|
23
|
+
const OPERATORS = [
|
|
24
|
+
{
|
|
25
|
+
value: 'and',
|
|
26
|
+
label: 'All'
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
value: 'or',
|
|
30
|
+
label: 'Any'
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
function FilterGroup({ group, columns, user, depth, onChange, onRemove }) {
|
|
34
|
+
const operator = getGroupOperator(group);
|
|
35
|
+
const children = group[operator];
|
|
36
|
+
const canAdd = columns.length > 0;
|
|
37
|
+
function setChildren(next) {
|
|
38
|
+
onChange({
|
|
39
|
+
[operator]: next
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function setChild(index, child) {
|
|
43
|
+
setChildren(children.map((existing, i)=>i === index ? child : existing));
|
|
44
|
+
}
|
|
45
|
+
function removeChild(index) {
|
|
46
|
+
setChildren(children.filter((existing, i)=>i !== index));
|
|
47
|
+
}
|
|
48
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
49
|
+
className: "lf-filter-group",
|
|
50
|
+
"data-depth": depth,
|
|
51
|
+
"data-lf-filter-group": ""
|
|
52
|
+
}, /*#__PURE__*/ React.createElement("div", {
|
|
53
|
+
className: "lf-filter-group-header"
|
|
54
|
+
}, /*#__PURE__*/ React.createElement(Segmented, {
|
|
55
|
+
"aria-label": "Match",
|
|
56
|
+
onChange: (next)=>onChange({
|
|
57
|
+
[next]: children
|
|
58
|
+
}),
|
|
59
|
+
options: OPERATORS,
|
|
60
|
+
size: "small",
|
|
61
|
+
value: operator
|
|
62
|
+
}), /*#__PURE__*/ React.createElement("span", {
|
|
63
|
+
className: "lf-filter-group-label"
|
|
64
|
+
}, "of these conditions"), onRemove ? /*#__PURE__*/ React.createElement(Button, {
|
|
65
|
+
"aria-label": "Remove group",
|
|
66
|
+
className: "lf-filter-remove",
|
|
67
|
+
icon: /*#__PURE__*/ React.createElement(CloseIcon, null),
|
|
68
|
+
onClick: onRemove,
|
|
69
|
+
size: "small",
|
|
70
|
+
type: "text"
|
|
71
|
+
}) : null), /*#__PURE__*/ React.createElement("div", {
|
|
72
|
+
className: "lf-filter-group-items"
|
|
73
|
+
}, children.map((child, index)=>getGroupOperator(child) === null ? /*#__PURE__*/ React.createElement(FilterLeaf, {
|
|
74
|
+
columns: columns,
|
|
75
|
+
key: index,
|
|
76
|
+
leaf: child,
|
|
77
|
+
onChange: (next)=>setChild(index, next),
|
|
78
|
+
onRemove: ()=>removeChild(index),
|
|
79
|
+
user: user
|
|
80
|
+
}) : /*#__PURE__*/ React.createElement(FilterGroup, {
|
|
81
|
+
columns: columns,
|
|
82
|
+
depth: depth + 1,
|
|
83
|
+
group: child,
|
|
84
|
+
key: index,
|
|
85
|
+
onChange: (next)=>setChild(index, next),
|
|
86
|
+
onRemove: ()=>removeChild(index),
|
|
87
|
+
user: user
|
|
88
|
+
}))), /*#__PURE__*/ React.createElement("div", {
|
|
89
|
+
className: "lf-filter-group-actions"
|
|
90
|
+
}, /*#__PURE__*/ React.createElement(Button, {
|
|
91
|
+
disabled: !canAdd,
|
|
92
|
+
onClick: ()=>setChildren([
|
|
93
|
+
...children,
|
|
94
|
+
createDefaultLeaf({
|
|
95
|
+
column: columns[0]
|
|
96
|
+
})
|
|
97
|
+
]),
|
|
98
|
+
size: "small",
|
|
99
|
+
type: "link"
|
|
100
|
+
}, "+ Add condition"), depth < MAX_DEPTH ? /*#__PURE__*/ React.createElement(Button, {
|
|
101
|
+
disabled: !canAdd,
|
|
102
|
+
onClick: ()=>setChildren([
|
|
103
|
+
...children,
|
|
104
|
+
{
|
|
105
|
+
and: [
|
|
106
|
+
createDefaultLeaf({
|
|
107
|
+
column: columns[0]
|
|
108
|
+
})
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
]),
|
|
112
|
+
size: "small",
|
|
113
|
+
type: "link"
|
|
114
|
+
}, "+ Add group") : null));
|
|
115
|
+
}
|
|
116
|
+
export default FilterGroup;
|
|
@@ -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 React from 'react';
|
|
16
|
+
function FilterIcon() {
|
|
17
|
+
return /*#__PURE__*/ React.createElement("svg", {
|
|
18
|
+
"aria-hidden": "true",
|
|
19
|
+
className: "lf-table-icon",
|
|
20
|
+
viewBox: "0 0 16 16"
|
|
21
|
+
}, /*#__PURE__*/ React.createElement("path", {
|
|
22
|
+
d: "M2 3h12l-4.5 5.5V13l-3 1.5V8.5z",
|
|
23
|
+
fill: "currentColor"
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
export default FilterIcon;
|
|
@@ -0,0 +1,40 @@
|
|
|
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, { Suspense } from 'react';
|
|
16
|
+
import FilterIcon from './FilterIcon.js';
|
|
17
|
+
import getFilteredKeys from './getFilteredKeys.js';
|
|
18
|
+
import LazyColumnFilterPopover from './LazyColumnFilterPopover.js';
|
|
19
|
+
// Header part: a filter icon while the column is filtered (click it to edit the filter), and the
|
|
20
|
+
// column filter popover while it is open.
|
|
21
|
+
function FilterIndicator({ api, col, state }) {
|
|
22
|
+
const filtered = getFilteredKeys(state.filter).has(col.key);
|
|
23
|
+
const open = api.columnFilter.openKey === col.key;
|
|
24
|
+
if (!filtered && !open) return null;
|
|
25
|
+
return /*#__PURE__*/ React.createElement(React.Fragment, null, filtered ? /*#__PURE__*/ React.createElement("button", {
|
|
26
|
+
"aria-label": "Edit column filter",
|
|
27
|
+
className: "lf-table-header-button lf-table-filter-indicator",
|
|
28
|
+
"data-lf-filter-indicator": "",
|
|
29
|
+
onFocus: LazyColumnFilterPopover.preload,
|
|
30
|
+
onPointerEnter: LazyColumnFilterPopover.preload,
|
|
31
|
+
tabIndex: -1,
|
|
32
|
+
type: "button"
|
|
33
|
+
}, /*#__PURE__*/ React.createElement(FilterIcon, null)) : null, open ? /*#__PURE__*/ React.createElement(Suspense, {
|
|
34
|
+
fallback: null
|
|
35
|
+
}, /*#__PURE__*/ React.createElement(LazyColumnFilterPopover, {
|
|
36
|
+
api: api,
|
|
37
|
+
col: col
|
|
38
|
+
})) : null);
|
|
39
|
+
}
|
|
40
|
+
export default FilterIndicator;
|
|
@@ -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 { Button, Select } from 'antd';
|
|
17
|
+
import CELL_TYPE_FAMILIES from '@lowdefy/blocks-antd/table/cellTypeFamilies.js';
|
|
18
|
+
import getOperators from '@lowdefy/blocks-antd/table/getOperators.js';
|
|
19
|
+
import changeLeafOperator from './changeLeafOperator.js';
|
|
20
|
+
import CloseIcon from './CloseIcon.js';
|
|
21
|
+
import createDefaultLeaf from './createDefaultLeaf.js';
|
|
22
|
+
import getOperatorLabel from './getOperatorLabel.js';
|
|
23
|
+
import getPlainTitle from './getPlainTitle.js';
|
|
24
|
+
import ValueEditor from './ValueEditor.js';
|
|
25
|
+
// One condition row: column, operator (the column type's operators), value, remove. The column
|
|
26
|
+
// select is left out when the builder only offers one column (the column filter popover).
|
|
27
|
+
function FilterLeaf({ leaf, columns, user, onChange, onRemove }) {
|
|
28
|
+
const column = columns.find((entry)=>entry.key === leaf.key) ?? null;
|
|
29
|
+
const family = column ? CELL_TYPE_FAMILIES[column.type] : null;
|
|
30
|
+
const operators = column ? getOperators(column.type) : [];
|
|
31
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
32
|
+
className: "lf-filter-leaf",
|
|
33
|
+
"data-col-key": leaf.key,
|
|
34
|
+
"data-lf-filter-leaf": ""
|
|
35
|
+
}, columns.length > 1 || column === null ? /*#__PURE__*/ React.createElement(Select, {
|
|
36
|
+
"aria-label": "Column",
|
|
37
|
+
className: "lf-filter-column",
|
|
38
|
+
onChange: (key)=>onChange(createDefaultLeaf({
|
|
39
|
+
column: columns.find((entry)=>entry.key === key)
|
|
40
|
+
})),
|
|
41
|
+
optionFilterProp: "label",
|
|
42
|
+
options: columns.map((entry)=>({
|
|
43
|
+
value: entry.key,
|
|
44
|
+
label: getPlainTitle(entry)
|
|
45
|
+
})),
|
|
46
|
+
placeholder: "Column",
|
|
47
|
+
popupMatchSelectWidth: false,
|
|
48
|
+
showSearch: true,
|
|
49
|
+
size: "small",
|
|
50
|
+
value: column ? leaf.key : undefined
|
|
51
|
+
}) : null, column ? /*#__PURE__*/ React.createElement(Select, {
|
|
52
|
+
"aria-label": "Operator",
|
|
53
|
+
className: "lf-filter-operator",
|
|
54
|
+
onChange: (op)=>onChange(changeLeafOperator({
|
|
55
|
+
leaf,
|
|
56
|
+
op
|
|
57
|
+
})),
|
|
58
|
+
options: operators.map((op)=>({
|
|
59
|
+
value: op,
|
|
60
|
+
label: getOperatorLabel({
|
|
61
|
+
op,
|
|
62
|
+
family
|
|
63
|
+
})
|
|
64
|
+
})),
|
|
65
|
+
popupMatchSelectWidth: false,
|
|
66
|
+
size: "small",
|
|
67
|
+
value: leaf.op
|
|
68
|
+
}) : null, column ? /*#__PURE__*/ React.createElement(ValueEditor, {
|
|
69
|
+
column: column,
|
|
70
|
+
onChange: (value)=>onChange({
|
|
71
|
+
...leaf,
|
|
72
|
+
value
|
|
73
|
+
}),
|
|
74
|
+
op: leaf.op,
|
|
75
|
+
user: user,
|
|
76
|
+
value: leaf.value
|
|
77
|
+
}) : null, /*#__PURE__*/ React.createElement(Button, {
|
|
78
|
+
"aria-label": "Remove condition",
|
|
79
|
+
className: "lf-filter-remove",
|
|
80
|
+
icon: /*#__PURE__*/ React.createElement(CloseIcon, null),
|
|
81
|
+
onClick: onRemove,
|
|
82
|
+
size: "small",
|
|
83
|
+
type: "text"
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
export default FilterLeaf;
|
|
@@ -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 lazyComponent from '../../core/lazyComponent.js';
|
|
16
|
+
// The column filter popover (simple editors per type and the filter builder), loaded when a
|
|
17
|
+
// column filter first opens; the header menu and the filter indicator preload it.
|
|
18
|
+
const LazyColumnFilterPopover = lazyComponent(()=>import('./ColumnFilterPopover.js'));
|
|
19
|
+
export default LazyColumnFilterPopover;
|
|
@@ -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 lazyComponent from '../../core/lazyComponent.js';
|
|
16
|
+
// The filter builder, loaded when the toolbar's Filter popover first opens (the button preloads
|
|
17
|
+
// it on hover and focus).
|
|
18
|
+
const LazyFilterBuilder = lazyComponent(()=>import('./FilterBuilder.js'));
|
|
19
|
+
export default LazyFilterBuilder;
|
|
@@ -0,0 +1,43 @@
|
|
|
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 DraftInputNumber from './DraftInputNumber.js';
|
|
17
|
+
function NumberFilter({ state, onChange }) {
|
|
18
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
19
|
+
className: "lf-filter-simple lf-filter-range"
|
|
20
|
+
}, /*#__PURE__*/ React.createElement(DraftInputNumber, {
|
|
21
|
+
"aria-label": "Minimum",
|
|
22
|
+
autoFocus: true,
|
|
23
|
+
onChange: (min)=>onChange({
|
|
24
|
+
...state,
|
|
25
|
+
min: min ?? null
|
|
26
|
+
}),
|
|
27
|
+
placeholder: "Min",
|
|
28
|
+
size: "small",
|
|
29
|
+
value: state.min
|
|
30
|
+
}), /*#__PURE__*/ React.createElement("span", {
|
|
31
|
+
className: "lf-filter-range-dash"
|
|
32
|
+
}, "–"), /*#__PURE__*/ React.createElement(DraftInputNumber, {
|
|
33
|
+
"aria-label": "Maximum",
|
|
34
|
+
onChange: (max)=>onChange({
|
|
35
|
+
...state,
|
|
36
|
+
max: max ?? null
|
|
37
|
+
}),
|
|
38
|
+
placeholder: "Max",
|
|
39
|
+
size: "small",
|
|
40
|
+
value: state.max
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
export default NumberFilter;
|
|
@@ -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 React, { useState } from 'react';
|
|
16
|
+
import { Button, Checkbox, Input } from 'antd';
|
|
17
|
+
// A searchable checklist of a column's values; the checked values filter with `in`.
|
|
18
|
+
function OptionsFilter({ options, selected, onChange }) {
|
|
19
|
+
const [search, setSearch] = useState('');
|
|
20
|
+
const term = search.trim().toLowerCase();
|
|
21
|
+
const visible = term ? options.filter((option)=>option.label.toLowerCase().includes(term)) : options;
|
|
22
|
+
const checked = new Set(selected);
|
|
23
|
+
function toggle(value) {
|
|
24
|
+
if (checked.has(value)) {
|
|
25
|
+
onChange(selected.filter((item)=>item !== value));
|
|
26
|
+
} else {
|
|
27
|
+
onChange([
|
|
28
|
+
...selected,
|
|
29
|
+
value
|
|
30
|
+
]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
34
|
+
className: "lf-filter-options",
|
|
35
|
+
"data-lf-filter-options": ""
|
|
36
|
+
}, /*#__PURE__*/ React.createElement(Input, {
|
|
37
|
+
allowClear: true,
|
|
38
|
+
"aria-label": "Search values",
|
|
39
|
+
autoFocus: true,
|
|
40
|
+
onChange: (event)=>setSearch(event.target.value),
|
|
41
|
+
placeholder: "Search values",
|
|
42
|
+
size: "small",
|
|
43
|
+
value: search
|
|
44
|
+
}), /*#__PURE__*/ React.createElement("div", {
|
|
45
|
+
className: "lf-filter-options-actions"
|
|
46
|
+
}, /*#__PURE__*/ React.createElement(Button, {
|
|
47
|
+
onClick: ()=>onChange([
|
|
48
|
+
...new Set([
|
|
49
|
+
...selected,
|
|
50
|
+
...visible.map((o)=>o.value)
|
|
51
|
+
])
|
|
52
|
+
]),
|
|
53
|
+
size: "small",
|
|
54
|
+
type: "link"
|
|
55
|
+
}, "Select all"), /*#__PURE__*/ React.createElement(Button, {
|
|
56
|
+
disabled: selected.length === 0,
|
|
57
|
+
onClick: ()=>onChange([]),
|
|
58
|
+
size: "small",
|
|
59
|
+
type: "link"
|
|
60
|
+
}, "Clear")), /*#__PURE__*/ React.createElement("div", {
|
|
61
|
+
className: "lf-filter-options-list",
|
|
62
|
+
role: "group"
|
|
63
|
+
}, visible.map((option)=>/*#__PURE__*/ React.createElement(Checkbox, {
|
|
64
|
+
checked: checked.has(option.value),
|
|
65
|
+
"data-value": String(option.value),
|
|
66
|
+
key: String(option.value),
|
|
67
|
+
onChange: ()=>toggle(option.value)
|
|
68
|
+
}, option.label)), visible.length === 0 ? /*#__PURE__*/ React.createElement("div", {
|
|
69
|
+
className: "lf-filter-options-empty"
|
|
70
|
+
}, "No values") : null));
|
|
71
|
+
}
|
|
72
|
+
export default OptionsFilter;
|
|
@@ -0,0 +1,90 @@
|
|
|
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 { InputNumber, Select, Space } from 'antd';
|
|
17
|
+
import defaultRelativeDate from './defaultRelativeDate.js';
|
|
18
|
+
const DIRECTIONS = [
|
|
19
|
+
{
|
|
20
|
+
value: 'last',
|
|
21
|
+
label: 'Last'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
value: 'next',
|
|
25
|
+
label: 'Next'
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
const UNITS = [
|
|
29
|
+
{
|
|
30
|
+
value: 'day',
|
|
31
|
+
label: 'days'
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
value: 'week',
|
|
35
|
+
label: 'weeks'
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
value: 'month',
|
|
39
|
+
label: 'months'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
value: 'year',
|
|
43
|
+
label: 'years'
|
|
44
|
+
}
|
|
45
|
+
];
|
|
46
|
+
// `within` values: `{ last: n, unit }` or `{ next: n, unit }`, resolved against today where the
|
|
47
|
+
// filter runs, so a saved "last 30 days" view keeps meaning the last 30 days.
|
|
48
|
+
function RelativeDateEditor({ value, onChange, size }) {
|
|
49
|
+
const current = value ?? defaultRelativeDate;
|
|
50
|
+
const direction = typeof current.next === 'number' ? 'next' : 'last';
|
|
51
|
+
const amount = current[direction];
|
|
52
|
+
return /*#__PURE__*/ React.createElement(Space.Compact, {
|
|
53
|
+
className: "lf-filter-relative",
|
|
54
|
+
"data-lf-relative-date": "",
|
|
55
|
+
size: size
|
|
56
|
+
}, /*#__PURE__*/ React.createElement(Select, {
|
|
57
|
+
"aria-label": "Direction",
|
|
58
|
+
onChange: (next)=>onChange({
|
|
59
|
+
[next]: amount,
|
|
60
|
+
unit: current.unit
|
|
61
|
+
}),
|
|
62
|
+
options: DIRECTIONS,
|
|
63
|
+
popupMatchSelectWidth: false,
|
|
64
|
+
value: direction
|
|
65
|
+
}), /*#__PURE__*/ React.createElement(InputNumber, {
|
|
66
|
+
"aria-label": "Amount",
|
|
67
|
+
min: 1,
|
|
68
|
+
onChange: (next)=>{
|
|
69
|
+
if (typeof next === 'number') onChange({
|
|
70
|
+
[direction]: next,
|
|
71
|
+
unit: current.unit
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
precision: 0,
|
|
75
|
+
style: {
|
|
76
|
+
width: 72
|
|
77
|
+
},
|
|
78
|
+
value: amount
|
|
79
|
+
}), /*#__PURE__*/ React.createElement(Select, {
|
|
80
|
+
"aria-label": "Unit",
|
|
81
|
+
onChange: (unit)=>onChange({
|
|
82
|
+
[direction]: amount,
|
|
83
|
+
unit
|
|
84
|
+
}),
|
|
85
|
+
options: UNITS,
|
|
86
|
+
popupMatchSelectWidth: false,
|
|
87
|
+
value: current.unit
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
export default RelativeDateEditor;
|
|
@@ -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
|
+
*/ import React from 'react';
|
|
16
|
+
import { Select } from 'antd';
|
|
17
|
+
import DraftInput from './DraftInput.js';
|
|
18
|
+
import getOperatorLabel from './getOperatorLabel.js';
|
|
19
|
+
import textFilterOperators from './textFilterOperators.js';
|
|
20
|
+
function TextFilter({ state, onChange }) {
|
|
21
|
+
const needsValue = state.op !== 'empty' && state.op !== 'notEmpty';
|
|
22
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
23
|
+
className: "lf-filter-simple"
|
|
24
|
+
}, /*#__PURE__*/ React.createElement(Select, {
|
|
25
|
+
"aria-label": "Operator",
|
|
26
|
+
onChange: (op)=>onChange({
|
|
27
|
+
...state,
|
|
28
|
+
op
|
|
29
|
+
}),
|
|
30
|
+
options: textFilterOperators.map((op)=>({
|
|
31
|
+
value: op,
|
|
32
|
+
label: getOperatorLabel({
|
|
33
|
+
op,
|
|
34
|
+
family: 'text'
|
|
35
|
+
})
|
|
36
|
+
})),
|
|
37
|
+
size: "small",
|
|
38
|
+
value: state.op
|
|
39
|
+
}), needsValue ? /*#__PURE__*/ React.createElement(DraftInput, {
|
|
40
|
+
"aria-label": "Filter text",
|
|
41
|
+
autoFocus: true,
|
|
42
|
+
onChange: (value)=>onChange({
|
|
43
|
+
...state,
|
|
44
|
+
value
|
|
45
|
+
}),
|
|
46
|
+
placeholder: "Text",
|
|
47
|
+
size: "small",
|
|
48
|
+
value: state.value
|
|
49
|
+
}) : null);
|
|
50
|
+
}
|
|
51
|
+
export default TextFilter;
|