@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,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2020-2026 Lowdefy, Inc
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/ import React from 'react';
|
|
16
|
+
import formatRecordCount from './formatRecordCount.js';
|
|
17
|
+
import getRecordCount from '../../core/getRecordCount.js';
|
|
18
|
+
function RecordCount({ api }) {
|
|
19
|
+
return /*#__PURE__*/ React.createElement("span", {
|
|
20
|
+
"aria-live": "polite",
|
|
21
|
+
className: "lf-table-record-count",
|
|
22
|
+
"data-lf-record-count": ""
|
|
23
|
+
}, formatRecordCount(getRecordCount({
|
|
24
|
+
api
|
|
25
|
+
})));
|
|
26
|
+
}
|
|
27
|
+
export default RecordCount;
|
|
@@ -0,0 +1,66 @@
|
|
|
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, Popover } from 'antd';
|
|
17
|
+
// "Save as…": asks for a title and whether the view is shared, then fires onViewSave without an
|
|
18
|
+
// id. The app creates the view and may make it active through `activeView`.
|
|
19
|
+
function SaveViewAs({ api }) {
|
|
20
|
+
const [open, setOpen] = useState(false);
|
|
21
|
+
const [title, setTitle] = useState('');
|
|
22
|
+
const [shared, setShared] = useState(false);
|
|
23
|
+
function submit() {
|
|
24
|
+
const trimmed = title.trim();
|
|
25
|
+
if (trimmed === '') return;
|
|
26
|
+
api.views.saveAs({
|
|
27
|
+
title: trimmed,
|
|
28
|
+
shared
|
|
29
|
+
});
|
|
30
|
+
setOpen(false);
|
|
31
|
+
setTitle('');
|
|
32
|
+
setShared(false);
|
|
33
|
+
}
|
|
34
|
+
const content = /*#__PURE__*/ React.createElement("div", {
|
|
35
|
+
className: "lf-table-save-view",
|
|
36
|
+
"data-lf-save-view": ""
|
|
37
|
+
}, /*#__PURE__*/ React.createElement(Input, {
|
|
38
|
+
"aria-label": "View name",
|
|
39
|
+
autoFocus: true,
|
|
40
|
+
onChange: (event)=>setTitle(event.target.value),
|
|
41
|
+
onPressEnter: submit,
|
|
42
|
+
placeholder: "View name",
|
|
43
|
+
size: "small",
|
|
44
|
+
value: title
|
|
45
|
+
}), /*#__PURE__*/ React.createElement(Checkbox, {
|
|
46
|
+
checked: shared,
|
|
47
|
+
onChange: (event)=>setShared(event.target.checked)
|
|
48
|
+
}, "Shared"), /*#__PURE__*/ React.createElement(Button, {
|
|
49
|
+
"data-lf-view-action": "save-as-submit",
|
|
50
|
+
disabled: title.trim() === '',
|
|
51
|
+
onClick: submit,
|
|
52
|
+
size: "small",
|
|
53
|
+
type: "primary"
|
|
54
|
+
}, "Save view"));
|
|
55
|
+
return /*#__PURE__*/ React.createElement(Popover, {
|
|
56
|
+
content: content,
|
|
57
|
+
onOpenChange: setOpen,
|
|
58
|
+
open: open,
|
|
59
|
+
placement: "bottomRight",
|
|
60
|
+
trigger: "click"
|
|
61
|
+
}, /*#__PURE__*/ React.createElement(Button, {
|
|
62
|
+
"data-lf-view-action": "save-as",
|
|
63
|
+
size: "small"
|
|
64
|
+
}, "Save as…"));
|
|
65
|
+
}
|
|
66
|
+
export default SaveViewAs;
|
|
@@ -0,0 +1,94 @@
|
|
|
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, Popover, Segmented } from 'antd';
|
|
17
|
+
import isDefaultSorting from './isDefaultSorting.js';
|
|
18
|
+
import ToolbarCount from './ToolbarCount.js';
|
|
19
|
+
import ToolbarIcon from './ToolbarIcon.js';
|
|
20
|
+
import ToolbarList from './ToolbarList.js';
|
|
21
|
+
const DIRECTIONS = [
|
|
22
|
+
{
|
|
23
|
+
label: 'Asc',
|
|
24
|
+
value: 'asc'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
label: 'Desc',
|
|
28
|
+
value: 'desc'
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
// The multi-sort editor: sort levels in order, each with its direction. The button counts the
|
|
32
|
+
// sort levels when they differ from `defaultView`'s sort.
|
|
33
|
+
function SortButton({ api }) {
|
|
34
|
+
const { sorting } = api.state;
|
|
35
|
+
const keys = sorting.map((entry)=>entry.id);
|
|
36
|
+
const available = api.config.columns.filter((column)=>column.sortable && !keys.includes(column.key));
|
|
37
|
+
function update(next) {
|
|
38
|
+
api.updateSlice('sorting', ()=>next, {
|
|
39
|
+
cause: 'sort'
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function onChange(nextKeys) {
|
|
43
|
+
const byKey = new Map(sorting.map((entry)=>[
|
|
44
|
+
entry.id,
|
|
45
|
+
entry
|
|
46
|
+
]));
|
|
47
|
+
update(nextKeys.map((key)=>byKey.get(key) ?? {
|
|
48
|
+
id: key,
|
|
49
|
+
desc: false
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
// The default view's own sort is not counted: the count shows the user changed the sort.
|
|
53
|
+
const sortCount = isDefaultSorting({
|
|
54
|
+
config: api.config,
|
|
55
|
+
sorting
|
|
56
|
+
}) ? 0 : sorting.length;
|
|
57
|
+
const content = /*#__PURE__*/ React.createElement("div", {
|
|
58
|
+
className: "lf-table-toolbar-popover",
|
|
59
|
+
"data-lf-toolbar-sort": ""
|
|
60
|
+
}, /*#__PURE__*/ React.createElement(ToolbarList, {
|
|
61
|
+
addLabel: "Add sort",
|
|
62
|
+
api: api,
|
|
63
|
+
available: available,
|
|
64
|
+
emptyText: "No sort",
|
|
65
|
+
keys: keys,
|
|
66
|
+
name: "sort",
|
|
67
|
+
onChange: onChange,
|
|
68
|
+
renderExtra: ({ index })=>/*#__PURE__*/ React.createElement(Segmented, {
|
|
69
|
+
"data-lf-sort-direction": "",
|
|
70
|
+
onChange: (direction)=>update(sorting.map((entry, i)=>i === index ? {
|
|
71
|
+
...entry,
|
|
72
|
+
desc: direction === 'desc'
|
|
73
|
+
} : entry)),
|
|
74
|
+
options: DIRECTIONS,
|
|
75
|
+
size: "small",
|
|
76
|
+
value: sorting[index].desc ? 'desc' : 'asc'
|
|
77
|
+
})
|
|
78
|
+
}));
|
|
79
|
+
return /*#__PURE__*/ React.createElement(Popover, {
|
|
80
|
+
content: content,
|
|
81
|
+
placement: "bottomLeft",
|
|
82
|
+
trigger: "click"
|
|
83
|
+
}, /*#__PURE__*/ React.createElement(Button, {
|
|
84
|
+
"data-lf-toolbar-button": "sort",
|
|
85
|
+
icon: /*#__PURE__*/ React.createElement(ToolbarIcon, {
|
|
86
|
+
api: api,
|
|
87
|
+
name: "sort"
|
|
88
|
+
}),
|
|
89
|
+
size: "small"
|
|
90
|
+
}, "Sort", /*#__PURE__*/ React.createElement(ToolbarCount, {
|
|
91
|
+
count: sortCount
|
|
92
|
+
})));
|
|
93
|
+
}
|
|
94
|
+
export default SortButton;
|
|
@@ -0,0 +1,88 @@
|
|
|
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 } from 'antd';
|
|
17
|
+
import DensityToggle from './DensityToggle.js';
|
|
18
|
+
import FilterButton from './FilterButton.js';
|
|
19
|
+
import LazyColumnManagerPopover from '../columnManager/LazyColumnManagerPopover.js';
|
|
20
|
+
import GroupButton from './GroupButton.js';
|
|
21
|
+
import QuickFilter from './QuickFilter.js';
|
|
22
|
+
import RecordCount from './RecordCount.js';
|
|
23
|
+
import SortButton from './SortButton.js';
|
|
24
|
+
import ToolbarIcon from './ToolbarIcon.js';
|
|
25
|
+
import ToolbarSearch from './ToolbarSearch.js';
|
|
26
|
+
import ViewTabs from './ViewTabs.js';
|
|
27
|
+
import './toolbar.css';
|
|
28
|
+
// The table's own chrome above the grid (D7): view tabs, then one row with the `toolbarStart`
|
|
29
|
+
// slot, search, quick filters and the view controls, and at the end the record count, density,
|
|
30
|
+
// columns, export and the `toolbarEnd` slot. antd components: this is chrome, not cells.
|
|
31
|
+
function Toolbar({ api, searchRef, toolbar }) {
|
|
32
|
+
const { columnsByKey } = api.config;
|
|
33
|
+
const { content } = api;
|
|
34
|
+
const groupable = api.config.columns.filter((column)=>column.groupable);
|
|
35
|
+
const quickFilters = toolbar.quickFilters.map((key)=>columnsByKey.get(key));
|
|
36
|
+
const showTabs = toolbar.views && api.views.items.length > 0;
|
|
37
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
38
|
+
className: "lf-table-toolbar",
|
|
39
|
+
"data-lf-toolbar": ""
|
|
40
|
+
}, showTabs ? /*#__PURE__*/ React.createElement(ViewTabs, {
|
|
41
|
+
api: api
|
|
42
|
+
}) : null, /*#__PURE__*/ React.createElement("div", {
|
|
43
|
+
className: "lf-table-toolbar-row"
|
|
44
|
+
}, /*#__PURE__*/ React.createElement("div", {
|
|
45
|
+
className: "lf-table-toolbar-start"
|
|
46
|
+
}, content.toolbarStart ? content.toolbarStart() : null, toolbar.search ? /*#__PURE__*/ React.createElement(ToolbarSearch, {
|
|
47
|
+
api: api,
|
|
48
|
+
searchRef: searchRef
|
|
49
|
+
}) : null, quickFilters.map((column)=>/*#__PURE__*/ React.createElement(QuickFilter, {
|
|
50
|
+
api: api,
|
|
51
|
+
column: column,
|
|
52
|
+
key: column.key
|
|
53
|
+
})), toolbar.filter ? /*#__PURE__*/ React.createElement(FilterButton, {
|
|
54
|
+
api: api
|
|
55
|
+
}) : null, toolbar.sort ? /*#__PURE__*/ React.createElement(SortButton, {
|
|
56
|
+
api: api
|
|
57
|
+
}) : null, toolbar.group && groupable.length > 0 ? /*#__PURE__*/ React.createElement(GroupButton, {
|
|
58
|
+
api: api,
|
|
59
|
+
groupable: groupable
|
|
60
|
+
}) : null), /*#__PURE__*/ React.createElement("div", {
|
|
61
|
+
className: "lf-table-toolbar-end"
|
|
62
|
+
}, toolbar.count ? /*#__PURE__*/ React.createElement(RecordCount, {
|
|
63
|
+
api: api
|
|
64
|
+
}) : null, toolbar.density ? /*#__PURE__*/ React.createElement(DensityToggle, {
|
|
65
|
+
api: api
|
|
66
|
+
}) : null, toolbar.columns ? /*#__PURE__*/ React.createElement(Button, {
|
|
67
|
+
"data-lf-toolbar-button": "columns",
|
|
68
|
+
icon: /*#__PURE__*/ React.createElement(ToolbarIcon, {
|
|
69
|
+
api: api,
|
|
70
|
+
name: "view"
|
|
71
|
+
}),
|
|
72
|
+
onClick: ()=>api.actions.openColumnManager(),
|
|
73
|
+
onFocus: LazyColumnManagerPopover.preload,
|
|
74
|
+
onPointerEnter: LazyColumnManagerPopover.preload,
|
|
75
|
+
size: "small"
|
|
76
|
+
}, "Columns") : null, toolbar.export ? /*#__PURE__*/ React.createElement(Button, {
|
|
77
|
+
"data-lf-toolbar-button": "export",
|
|
78
|
+
icon: /*#__PURE__*/ React.createElement(ToolbarIcon, {
|
|
79
|
+
api: api,
|
|
80
|
+
name: "download"
|
|
81
|
+
}),
|
|
82
|
+
onClick: ()=>api.actions.exportCsv({
|
|
83
|
+
filename: `${api.blockId}.csv`
|
|
84
|
+
}),
|
|
85
|
+
size: "small"
|
|
86
|
+
}, "Export") : null, content.toolbarEnd ? content.toolbarEnd() : null)));
|
|
87
|
+
}
|
|
88
|
+
export default Toolbar;
|
|
@@ -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
|
+
*/ import React from 'react';
|
|
16
|
+
// How many filter conditions, sort levels or group levels are set, inside the toolbar button
|
|
17
|
+
// after its label: a small count in the primary tint, not a badge over the button's border.
|
|
18
|
+
function ToolbarCount({ count }) {
|
|
19
|
+
if (count === 0) return null;
|
|
20
|
+
return /*#__PURE__*/ React.createElement("span", {
|
|
21
|
+
className: "lf-table-toolbar-count",
|
|
22
|
+
"data-lf-toolbar-count": ""
|
|
23
|
+
}, count);
|
|
24
|
+
}
|
|
25
|
+
export default ToolbarCount;
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
// Toolbar icons are the app's semantic icons (theme.icons can re-skin them).
|
|
17
|
+
function ToolbarIcon({ api, name }) {
|
|
18
|
+
const { Icon } = api.components;
|
|
19
|
+
return /*#__PURE__*/ React.createElement(Icon, {
|
|
20
|
+
blockId: `${api.blockId}_toolbar_${name}_icon`,
|
|
21
|
+
events: {},
|
|
22
|
+
properties: {
|
|
23
|
+
name,
|
|
24
|
+
title: ''
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export default ToolbarIcon;
|
|
@@ -0,0 +1,100 @@
|
|
|
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 ColumnTitle from './ColumnTitle.js';
|
|
18
|
+
import moveItem from './moveItem.js';
|
|
19
|
+
import ToolbarIcon from './ToolbarIcon.js';
|
|
20
|
+
// An ordered list of columns (sort levels, group levels) with reorder and remove buttons, a slot
|
|
21
|
+
// for per-entry controls and a picker that appends a column. `onChange` receives the new keys.
|
|
22
|
+
function ToolbarList({ addLabel, api, available, emptyText, keys, name, onChange, renderExtra }) {
|
|
23
|
+
const { columnsByKey } = api.config;
|
|
24
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
25
|
+
className: "lf-table-toolbar-list",
|
|
26
|
+
"data-lf-toolbar-list": name
|
|
27
|
+
}, keys.length === 0 ? /*#__PURE__*/ React.createElement("div", {
|
|
28
|
+
className: "lf-table-toolbar-list-empty"
|
|
29
|
+
}, emptyText) : null, keys.map((key, index)=>/*#__PURE__*/ React.createElement("div", {
|
|
30
|
+
className: "lf-table-toolbar-list-item",
|
|
31
|
+
"data-key": key,
|
|
32
|
+
key: key
|
|
33
|
+
}, /*#__PURE__*/ React.createElement("span", {
|
|
34
|
+
className: "lf-table-toolbar-list-title"
|
|
35
|
+
}, /*#__PURE__*/ React.createElement(ColumnTitle, {
|
|
36
|
+
api: api,
|
|
37
|
+
column: columnsByKey.get(key)
|
|
38
|
+
})), renderExtra ? renderExtra({
|
|
39
|
+
key,
|
|
40
|
+
index
|
|
41
|
+
}) : null, /*#__PURE__*/ React.createElement(Button, {
|
|
42
|
+
"aria-label": "Move up",
|
|
43
|
+
"data-lf-action": "up",
|
|
44
|
+
disabled: index === 0,
|
|
45
|
+
icon: /*#__PURE__*/ React.createElement(ToolbarIcon, {
|
|
46
|
+
api: api,
|
|
47
|
+
name: "chevron-up"
|
|
48
|
+
}),
|
|
49
|
+
onClick: ()=>onChange(moveItem({
|
|
50
|
+
items: keys,
|
|
51
|
+
from: index,
|
|
52
|
+
to: index - 1
|
|
53
|
+
})),
|
|
54
|
+
size: "small",
|
|
55
|
+
type: "text"
|
|
56
|
+
}), /*#__PURE__*/ React.createElement(Button, {
|
|
57
|
+
"aria-label": "Move down",
|
|
58
|
+
"data-lf-action": "down",
|
|
59
|
+
disabled: index === keys.length - 1,
|
|
60
|
+
icon: /*#__PURE__*/ React.createElement(ToolbarIcon, {
|
|
61
|
+
api: api,
|
|
62
|
+
name: "chevron-down"
|
|
63
|
+
}),
|
|
64
|
+
onClick: ()=>onChange(moveItem({
|
|
65
|
+
items: keys,
|
|
66
|
+
from: index,
|
|
67
|
+
to: index + 1
|
|
68
|
+
})),
|
|
69
|
+
size: "small",
|
|
70
|
+
type: "text"
|
|
71
|
+
}), /*#__PURE__*/ React.createElement(Button, {
|
|
72
|
+
"aria-label": "Remove",
|
|
73
|
+
"data-lf-action": "remove",
|
|
74
|
+
icon: /*#__PURE__*/ React.createElement(ToolbarIcon, {
|
|
75
|
+
api: api,
|
|
76
|
+
name: "close"
|
|
77
|
+
}),
|
|
78
|
+
onClick: ()=>onChange(keys.filter((_, i)=>i !== index)),
|
|
79
|
+
size: "small",
|
|
80
|
+
type: "text"
|
|
81
|
+
}))), available.length > 0 ? /*#__PURE__*/ React.createElement(Select, {
|
|
82
|
+
className: "lf-table-toolbar-list-add",
|
|
83
|
+
"data-lf-toolbar-add": name,
|
|
84
|
+
onChange: (key)=>onChange([
|
|
85
|
+
...keys,
|
|
86
|
+
key
|
|
87
|
+
]),
|
|
88
|
+
options: available.map((column)=>({
|
|
89
|
+
value: column.key,
|
|
90
|
+
label: /*#__PURE__*/ React.createElement(ColumnTitle, {
|
|
91
|
+
api: api,
|
|
92
|
+
column: column
|
|
93
|
+
})
|
|
94
|
+
})),
|
|
95
|
+
placeholder: addLabel,
|
|
96
|
+
size: "small",
|
|
97
|
+
value: null
|
|
98
|
+
}) : null);
|
|
99
|
+
}
|
|
100
|
+
export default ToolbarList;
|
|
@@ -0,0 +1,63 @@
|
|
|
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, { useEffect, useRef, useState } from 'react';
|
|
16
|
+
import { Input } from 'antd';
|
|
17
|
+
import ToolbarIcon from './ToolbarIcon.js';
|
|
18
|
+
const DEBOUNCE_MS = 200;
|
|
19
|
+
// Writes `view.search` 200ms after typing stops (clearing applies at once). A search set from
|
|
20
|
+
// outside (SetState, a saved view) shows in the input unless the user is mid-edit.
|
|
21
|
+
function ToolbarSearch({ api, searchRef }) {
|
|
22
|
+
const search = api.state.search ?? '';
|
|
23
|
+
const [text, setText] = useState(search);
|
|
24
|
+
const [seen, setSeen] = useState(search);
|
|
25
|
+
const timer = useRef(null);
|
|
26
|
+
if (seen !== search) {
|
|
27
|
+
setSeen(search);
|
|
28
|
+
if (timer.current === null) setText(search);
|
|
29
|
+
}
|
|
30
|
+
useEffect(()=>()=>clearTimeout(timer.current), []);
|
|
31
|
+
function apply(next) {
|
|
32
|
+
clearTimeout(timer.current);
|
|
33
|
+
timer.current = null;
|
|
34
|
+
api.actions.setSearch(next);
|
|
35
|
+
}
|
|
36
|
+
function onChange(event) {
|
|
37
|
+
const next = event.target.value;
|
|
38
|
+
setText(next);
|
|
39
|
+
if (next === '') {
|
|
40
|
+
apply(next);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
clearTimeout(timer.current);
|
|
44
|
+
timer.current = setTimeout(()=>apply(next), DEBOUNCE_MS);
|
|
45
|
+
}
|
|
46
|
+
return /*#__PURE__*/ React.createElement("span", {
|
|
47
|
+
className: "lf-table-toolbar-search",
|
|
48
|
+
"data-lf-toolbar-search": ""
|
|
49
|
+
}, /*#__PURE__*/ React.createElement(Input, {
|
|
50
|
+
allowClear: true,
|
|
51
|
+
"aria-label": "Search rows",
|
|
52
|
+
onChange: onChange,
|
|
53
|
+
placeholder: "Search",
|
|
54
|
+
prefix: /*#__PURE__*/ React.createElement(ToolbarIcon, {
|
|
55
|
+
api: api,
|
|
56
|
+
name: "search"
|
|
57
|
+
}),
|
|
58
|
+
ref: searchRef,
|
|
59
|
+
size: "small",
|
|
60
|
+
value: text
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
export default ToolbarSearch;
|
|
@@ -0,0 +1,41 @@
|
|
|
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 } from 'antd';
|
|
17
|
+
import SaveViewAs from './SaveViewAs.js';
|
|
18
|
+
// The strip shown while the current view differs from the active saved view (Attio, Notion):
|
|
19
|
+
// changes never silently edit a saved view. A locked view hides Save.
|
|
20
|
+
function ViewActions({ api }) {
|
|
21
|
+
const { active } = api.views;
|
|
22
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
23
|
+
className: "lf-table-view-actions",
|
|
24
|
+
"data-lf-view-actions": ""
|
|
25
|
+
}, /*#__PURE__*/ React.createElement("span", {
|
|
26
|
+
className: "lf-table-view-actions-label"
|
|
27
|
+
}, "Unsaved changes"), active.locked ? null : /*#__PURE__*/ React.createElement(Button, {
|
|
28
|
+
"data-lf-view-action": "save",
|
|
29
|
+
onClick: ()=>api.views.save(),
|
|
30
|
+
size: "small",
|
|
31
|
+
type: "primary"
|
|
32
|
+
}, "Save"), /*#__PURE__*/ React.createElement(SaveViewAs, {
|
|
33
|
+
api: api
|
|
34
|
+
}), /*#__PURE__*/ React.createElement(Button, {
|
|
35
|
+
"data-lf-view-action": "discard",
|
|
36
|
+
onClick: ()=>api.views.discard(),
|
|
37
|
+
size: "small",
|
|
38
|
+
type: "text"
|
|
39
|
+
}, "Discard"));
|
|
40
|
+
}
|
|
41
|
+
export default ViewActions;
|
|
@@ -0,0 +1,39 @@
|
|
|
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 { type } from '@lowdefy/helpers';
|
|
17
|
+
import ViewTabMenu from './ViewTabMenu.js';
|
|
18
|
+
const countFormat = new Intl.NumberFormat();
|
|
19
|
+
// A view tab: title, the view's count (queue tabs), the dirty dot and, on the active tab, its menu.
|
|
20
|
+
function ViewTabLabel({ api, dirty, isActive, view }) {
|
|
21
|
+
return /*#__PURE__*/ React.createElement("span", {
|
|
22
|
+
className: "lf-table-view-tab",
|
|
23
|
+
"data-dirty": dirty ? '' : undefined,
|
|
24
|
+
"data-lf-view-tab": view.key
|
|
25
|
+
}, /*#__PURE__*/ React.createElement("span", {
|
|
26
|
+
className: "lf-table-view-tab-title"
|
|
27
|
+
}, view.title), type.isNumber(view.count) ? /*#__PURE__*/ React.createElement("span", {
|
|
28
|
+
className: "lf-table-view-tab-count",
|
|
29
|
+
"data-lf-view-count": ""
|
|
30
|
+
}, countFormat.format(view.count)) : null, dirty ? /*#__PURE__*/ React.createElement("span", {
|
|
31
|
+
"aria-label": "Unsaved changes",
|
|
32
|
+
className: "lf-table-view-dirty",
|
|
33
|
+
role: "img"
|
|
34
|
+
}) : null, isActive ? /*#__PURE__*/ React.createElement(ViewTabMenu, {
|
|
35
|
+
api: api,
|
|
36
|
+
view: view
|
|
37
|
+
}) : null);
|
|
38
|
+
}
|
|
39
|
+
export default ViewTabLabel;
|
|
@@ -0,0 +1,48 @@
|
|
|
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 { Dropdown } from 'antd';
|
|
17
|
+
import ToolbarIcon from './ToolbarIcon.js';
|
|
18
|
+
// The active tab's menu. Its trigger stops the click so the tab bar does not handle it.
|
|
19
|
+
function ViewTabMenu({ api, view }) {
|
|
20
|
+
const items = [
|
|
21
|
+
{
|
|
22
|
+
key: 'delete',
|
|
23
|
+
label: 'Delete view',
|
|
24
|
+
danger: true,
|
|
25
|
+
disabled: view.locked
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
return /*#__PURE__*/ React.createElement(Dropdown, {
|
|
29
|
+
menu: {
|
|
30
|
+
items,
|
|
31
|
+
onClick: ()=>api.views.remove(view)
|
|
32
|
+
},
|
|
33
|
+
placement: "bottomLeft",
|
|
34
|
+
trigger: [
|
|
35
|
+
'click'
|
|
36
|
+
]
|
|
37
|
+
}, /*#__PURE__*/ React.createElement("button", {
|
|
38
|
+
"aria-label": "View options",
|
|
39
|
+
className: "lf-table-view-menu",
|
|
40
|
+
"data-lf-view-menu": "",
|
|
41
|
+
onClick: (event)=>event.stopPropagation(),
|
|
42
|
+
type: "button"
|
|
43
|
+
}, /*#__PURE__*/ React.createElement(ToolbarIcon, {
|
|
44
|
+
api: api,
|
|
45
|
+
name: "more"
|
|
46
|
+
})));
|
|
47
|
+
}
|
|
48
|
+
export default ViewTabMenu;
|
|
@@ -0,0 +1,44 @@
|
|
|
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 { Tabs } from 'antd';
|
|
17
|
+
import ViewActions from './ViewActions.js';
|
|
18
|
+
import ViewTabLabel from './ViewTabLabel.js';
|
|
19
|
+
// Saved views as tabs (D7): selecting one loads its view; the dirty strip sits at the end of the
|
|
20
|
+
// tab bar.
|
|
21
|
+
function ViewTabs({ api }) {
|
|
22
|
+
const { active, dirty, items } = api.views;
|
|
23
|
+
return /*#__PURE__*/ React.createElement(Tabs, {
|
|
24
|
+
activeKey: active?.key,
|
|
25
|
+
className: "lf-table-views",
|
|
26
|
+
items: items.map((view)=>({
|
|
27
|
+
key: view.key,
|
|
28
|
+
label: /*#__PURE__*/ React.createElement(ViewTabLabel, {
|
|
29
|
+
api: api,
|
|
30
|
+
dirty: dirty && view === active,
|
|
31
|
+
isActive: view === active,
|
|
32
|
+
view: view
|
|
33
|
+
})
|
|
34
|
+
})),
|
|
35
|
+
onChange: (id)=>api.views.select(id),
|
|
36
|
+
size: "small",
|
|
37
|
+
tabBarExtraContent: dirty ? {
|
|
38
|
+
right: /*#__PURE__*/ React.createElement(ViewActions, {
|
|
39
|
+
api: api
|
|
40
|
+
})
|
|
41
|
+
} : null
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export default ViewTabs;
|