import { Maybe, ObjectForExtending, Prettify } from './utils.type'; import { MergedCellsAlign } from './merged-cells.type'; import { ColumnsGroupingConfig } from './columns-grouping.type'; import { ColumnConfig, EditingCellInfo, SortColumn } from './column-config.type'; import { DomMetadata } from './additional.type'; import { MassActionButtonProps } from '../widgets/mass-actions/types'; import { FeatureItem, PinningMenuConfig, SidebarTab } from '../widgets/control-block/types'; import { ControlBlockButtonProps } from '../widgets/control-block/control-block-button.types'; import { CellReadOnlyEditorGlideInstanceStaticProps, CellsSelectionMode, HighlightActiveType, HoverEffectsConfig, TableGlideCustomProps, TableGlideInstanceProps, TableInfoWithRow } from '../TableGlideInstance/type'; import { SubRows } from '../feature-tree/types'; import { FlattenedRowsArrAndMap, SelectingRowConfig } from '../feature-select-row/types'; import { SearchingProps } from '../feature-searching/types'; import { RowsGrouping } from '../feature-rows-grouping/types'; import { PaginationProps } from '../feature-pagination/types'; import { TableNotificationsConfig } from '../feature-notifications'; import { KeyTextConfig } from '../feature-key-text/types'; import { FullScreen } from '../feature-full-screen/types'; import { TableCanvasEmptyStateConfig, TableCanvasErrorStateConfig } from '../feature-content-state/types'; import { ColumnsControlConfig } from '../feature-column-control/types'; import { CellTransferConfig, FillMeta, RowsChangeType } from '../feature-cell-transfer/types'; import { TableDropdownConfigProps } from '../components/TableDropdown/types'; import { CSSObject } from 'styled-components'; import { CSSProperties, ReactNode } from 'react'; import { SIZE } from '..'; import { MassActionsSize } from '../../MassActions'; import { Group, Item, ItemOrGroup } from '../../ListOfFilters'; import { GridSelection } from '@glideappsfinal/glide-data-grid'; export type { ColumnsGroupingConfig, HeaderAlignment, } from './columns-grouping.type'; export type ViewMods = { rows: { type: 'rows'; domMetadata?: DomMetadata; }; cards: { type: 'cards'; typeCardsRender: ReactNode; domMetadata?: DomMetadata; }; bothTypes: { type: 'both-types'; typeCardsRender: ReactNode; default?: 'cards' | 'rows'; domMetadata?: DomMetadata; }; }; export interface RowsChangeData { indexes: number[]; column: ColumnConfig; rows: { before: R; after: R; }[]; type: RowsChangeType; fillMeta?: FillMeta; fillResult?: string[][]; } export type ActiveViewModsType = Exclude; export type View = ViewMods['rows' | 'bothTypes' | 'cards']; export type { ControlBlockButtonProps }; export type RowSize = { showInControl: boolean; default?: SIZE; available?: SIZE[]; onRowSizeChange?: (size: SIZE) => void; domMetadata?: DomMetadata; }; export type RowHeightFunc = (row: RowType, currentRowSize: { rowSizeName: SIZE; rowSizeValue: number; }, rowIndex: number) => number; export type TableCollapseConfig = { enableCollapse?: boolean; defaultCollapsed?: boolean; collapseText?: string; expandText?: string; onToggleCollapse?: (isCollapsed: boolean) => void; collapsedState?: [boolean, React.Dispatch>]; domMetadata?: DomMetadata; collapseButtonPlacement?: 'inside' | 'above'; collapseButtonAboveRightSlot?: React.ReactNode; titleText?: string; titleRender?: React.ReactNode; }; export type { FlattenedRowsArrAndMap }; export type FilteringConfig = { state: [T, React.Dispatch>]; clearedValue?: T; filtersInfo?: Record; manualFiltering?: boolean; sidebarConfig?: { order?: string[]; items: Partial>) => React.ReactNode; }>>; }; chipStyle?: (itemOrGroup: ItemOrGroup, item: Item | undefined) => CSSObject; renderGroupLabel?: (group: Group) => string; renderChipLabel?: (group: Group | null, item: Item) => string; }; export type DefaultSidebarTabIds = 'columns' | 'tableSettings' | 'filtering'; export type SidebarConfig = { enabled?: boolean; defaultOpen?: boolean; openState?: [boolean, React.Dispatch>]; defaultActiveTabId?: string; activeTabState?: [ string | null, React.Dispatch> ]; onActiveTabChange?: (tabId: string | null, tab?: SidebarTab) => void; customTabs?: Array & { id: Exclude; }>; customTabsOrder?: Array>; defaultTabs?: Array<{ id: 'filtering' | 'columns'; label?: string; title?: string; domMetadata?: DomMetadata; titleRightSlot?: React.ReactNode; showInSidebar?: boolean; iconTooltipText?: undefined; } | { id: 'tableSettings'; label?: string; title?: string; domMetadata?: DomMetadata; customGeneralSettingsSlot?: React.ReactNode; titleRightSlot?: React.ReactNode; showInSidebar?: boolean; iconTooltipText?: string; }>; }; export declare function activeViewIs(checkType: T, viewState: 'cards' | 'rows', view: View): view is ViewMods[T]; export type ControlBlockSize = 'm' | 's' | 'xs'; export type ControlBlockConfig = { show?: boolean; size?: ControlBlockSize; leftSideInner?: ControlBlockButtonProps[]; rightSideInner?: ControlBlockButtonProps[]; customFeatures?: FeatureItem[]; pinningMenu?: PinningMenuConfig; leftSideDropdownProps?: TableDropdownConfigProps; rightSideDropdownProps?: TableDropdownConfigProps; enableAdaptiveCompress?: boolean; massActionPanel?: { buttons: MassActionButtonProps[]; collapsedDropdownProps?: TableDropdownConfigProps; bottom?: number; show?: boolean; size?: MassActionsSize; }; }; export type EditingButtonProps = Omit, 'onClick' | 'size' | 'dropdown' | 'isTargetAction' | 'skipRightDivider' | 'tooltipText'>; export type EditingConfig = { onRowsChange: Maybe<(rows: RowType[], data: RowsChangeData) => void>; subRowsKey?: string; deepCloneRows?: boolean; rowKeyGetter: (row: RowType) => RowIdType; rowEditable?: (row: RowType) => boolean; defaultEnabled?: boolean; enabled?: boolean | [boolean, React.Dispatch>]; showButtons?: boolean; onEnableEditing?: (enableEditorMode: () => void) => void; onSave?: (disableEditorMode: () => void) => void; onCancel?: (disableEditorMode: () => void) => void; buttons?: { save?: EditingButtonProps; cancel?: EditingButtonProps; edit?: EditingButtonProps; }; editModeLeftSlot?: React.ReactNode; domMetadata?: { enableButton?: DomMetadata; saveButton?: DomMetadata; cancelButton?: DomMetadata; }; }; export type SummaryRowsConfig = { showDefault: boolean; showInControl: boolean; } & { domMetadata?: DomMetadata; }; export type TableConfigTooltip = { enabled?: boolean; mouseEnterDelay?: number; mouseLeaveDelay?: number; minWidth?: number | string; maxWidth?: number | string; }; export type InfinityScrollConfig = { onTrigger: (rows: RowType[]) => Promise | void; isLoading: boolean; hasMore?: boolean; rowThreshold?: number; }; export type { TableCanvasEmptyStateConfig, TableCanvasErrorStateConfig }; export type CellsSelectionConfig = { mode?: CellsSelectionMode; enableColumnSelection?: boolean; enableRowSelection?: boolean; enableSelectAll?: boolean; state?: [GridSelection, React.Dispatch>]; }; export type MergedCellsRegion = { rowKeys: Array; colKeys: string[]; mergedCellsAlign?: MergedCellsAlign; }; export type CellBorderVisibility = { top?: boolean; right?: boolean; bottom?: boolean; left?: boolean; }; export type BordersConfig = { vertical?: boolean; horizontal?: boolean; getVerticalBorder?: (params: { columnKey: string; columnIndex: number; }) => boolean | undefined; getHorizontalBorder?: (params: { row: RowType; rowIndex: number; treeLvl: number; }) => boolean | undefined; getCellBorder?: (params: { col: number; columnKey: string | undefined; row: RowType; rowIndex: number; treeLvl: number; }) => CellBorderVisibility | undefined; }; export type TableConfig = { columnsGrouping?: ColumnsGroupingConfig; highlightActiveType?: HighlightActiveType; cellsSelection?: CellsSelectionConfig; highlightActiveRow?: { state?: [ number | undefined, React.Dispatch> ]; onChange?: (params: { index: number | undefined; row: RowType | undefined; }) => void; }; hoverEffects?: HoverEffectsConfig; enableLowDprHairline?: boolean; borders?: BordersConfig; rowSize?: Prettify; rowHeight?: Maybe>; sorting?: { state: [ readonly SortColumn[], React.Dispatch> ]; manualSorting?: boolean; }; view?: View; filtering?: FilteringConfig; collapsing?: TableCollapseConfig; selecting?: { state: [ ReadonlySet, React.Dispatch>> ]; rowKeyGetter: (row: RowType) => RowIdType; } & Prettify> & { controlBlock?: { domMetadata?: DomMetadata; }; sidebar?: { domMetadata?: DomMetadata; }; }; editing?: EditingConfig; cellTransfer?: CellTransferConfig; mergeCells?: { mergeByCellValues?: Array unknown; }>; mergedCellsRegions?: MergedCellsRegion[]; rowKeyGetter?: (row: RowType) => string | number; mergedCellsAlign?: MergedCellsAlign; }; notifications?: TableNotificationsConfig; subRows?: SubRows; rowMarkers?: RowMarkersTableConfig; rowsGrouping?: RowsGrouping; resizableColumn?: boolean; style?: Omit; css?: string | CSSObject; summaryRows?: SummaryRowsConfig; controlBlock?: ControlBlockConfig; containerStyle?: CSSProperties | undefined; containerCss?: string | CSSObject | undefined; containerId?: string | undefined; unstickyHeader?: boolean; tooltip?: TableConfigTooltip; infinityScroll?: InfinityScrollConfig; isLoading?: boolean | { boolean: boolean; skeletonRowsCount: number; }; loadingOverlay?: { active?: boolean; spinner?: ReactNode; title?: string; subtitle?: string; showSubtitleDelay?: number; }; emptyState?: TableCanvasEmptyStateConfig; errorState?: TableCanvasErrorStateConfig; columnsControl?: ColumnsControlConfig; fullScreenEnabled?: FullScreen; editorOverlayPortal?: 'inside'; keyText?: boolean | KeyTextConfig; pagination?: PaginationProps; sidebarConfig?: SidebarConfig; searching?: SearchingProps; onHeaderContextMenu?: TableGlideInstanceProps['onHeaderContextMenu']; onHeaderContextMenuDropdown?: TableGlideInstanceProps['onHeaderContextMenuDropdown']; onCellContextMenuDropdown?: TableGlideInstanceProps['onCellContextMenuDropdown']; onCellContextMenu?: TableGlideInstanceProps['onCellContextMenu']; onCellClicked?: (cell: readonly [number, number], info: TableInfoWithRow) => void; } & GlideInstanceOmitted; type GlideInstanceOmitted = Pick, keyof TableGlideCustomProps | 'CellReadOnlyEditor'>, 'className' | 'columnSelect' | 'minColumnWidth' | 'maxColumnWidth' | 'maxColumnAutoWidth' | 'onVisibleRegionChanged' | 'onCellClicked' | 'onHeaderClicked' | 'onItemHovered' | 'trapFocus' | 'onColumnResize'>; export type CellReadOnlyEditorProps = CellReadOnlyEditorGlideInstanceStaticProps & EditingCellInfo; export type RowMarkersTableConfig = { startIndex?: number; width?: number; size?: 'xs' | 's' | 'm'; getRowMarker?: (args: { row: RowType; level: number; isSubRow: boolean; rowIndex: number; flatIndex: number; siblingIndex: number; siblingPath: number[]; parentKey: string | number | null; rows: readonly RowType[]; }) => string | number; };