UNPKG

ag-grid-community

Version:

Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue

1,571 lines (1,551 loc) 2.21 MB
// packages/ag-grid-community/src/entities/agColumn.ts import { LocalEventService, _escapeString } from "ag-stack"; // packages/ag-grid-community/src/entities/defaultColumnTypes.ts var DefaultColumnTypes = { numericColumn: { headerClass: "ag-right-aligned-header", cellClass: "ag-right-aligned-cell" }, rightAligned: { headerClass: "ag-right-aligned-header", cellClass: "ag-right-aligned-cell" } }; // packages/ag-grid-community/src/gridOptionsUtils.ts import { _doOnce as _doOnce2, _missing } from "ag-stack"; // packages/ag-grid-community/src/utils/mergeDeep.ts import { _areEqual } from "ag-stack"; var _isProtoPollutionKey = (key) => key === "__proto__" || key === "constructor" || key === "prototype"; var isPlainProto = (value) => { const proto = Object.getPrototypeOf(value); return proto === Object.prototype || proto === null; }; var _isPlainObject = (value) => value !== null && typeof value === "object" && isPlainProto(value); var setKey = (out, key, value, copyUndef, simpleObjects) => { let destValue = out[key]; if (destValue === value) { return; } if (value === null || typeof value !== "object") { if (copyUndef || value !== void 0) { out[key] = value; } return; } if (simpleObjects && destValue == null && isPlainProto(value)) { destValue = {}; out[key] = destValue; } if (destValue !== null && typeof destValue === "object" && !Array.isArray(destValue)) { _mergeDeep(destValue, value, copyUndef, simpleObjects); } else { out[key] = value; } }; var _mergeDeep = (dest, source, copyUndefined = true, makeCopyOfSimpleObjects = false) => { if (source == null || source === "") { return; } if (Array.isArray(source)) { for (let i = 0, len = source.length; i < len; ++i) { setKey(dest, i, source[i], copyUndefined, makeCopyOfSimpleObjects); } return; } for (const key of Object.keys(source)) { if (!_isProtoPollutionKey(key)) { setKey(dest, key, source[key], copyUndefined, makeCopyOfSimpleObjects); } } }; var _mergedEqual = (a, b, topLevelSkipKey) => { if (a === b) { return true; } if (a === null || b === null || typeof a !== "object" || typeof b !== "object") { return false; } const aIsArr = Array.isArray(a); if (aIsArr !== Array.isArray(b)) { return false; } if (aIsArr) { return _areEqual(a, b); } if (!isPlainProto(a) || !isPlainProto(b)) { return false; } const aKeys = Object.keys(a); const bKeys = Object.keys(b); const aLen = aKeys.length; const bLen = bKeys.length; if (topLevelSkipKey === void 0) { if (aLen !== bLen) { return false; } for (let i = 0; i < aLen; ++i) { const k = aKeys[i]; if (!(k in b) || !_mergedEqual(a[k], b[k])) { return false; } } return true; } let aSkip = 0; for (let i = 0; i < aLen; ++i) { const k = aKeys[i]; if (aSkip === 0 && k === topLevelSkipKey) { aSkip = 1; continue; } if (!(k in b) || !_mergedEqual(a[k], b[k])) { return false; } } const bSkip = topLevelSkipKey in b ? 1 : 0; return aLen - aSkip === bLen - bSkip; }; // packages/ag-grid-community/src/globalGridOptions.ts var _GlobalGridOptions = class _GlobalGridOptions { /** * @param providedOptions * @returns Shallow copy of the provided options with global options merged in. */ static applyGlobalGridOptions(providedOptions) { if (!_GlobalGridOptions.gridOptions) { return { ...providedOptions }; } let mergedGridOps = {}; _mergeDeep(mergedGridOps, _GlobalGridOptions.gridOptions, true, true); if (_GlobalGridOptions.mergeStrategy === "deep") { _mergeDeep(mergedGridOps, providedOptions, true, true); } else { mergedGridOps = { ...mergedGridOps, ...providedOptions }; } if (_GlobalGridOptions.gridOptions.context) { mergedGridOps.context = _GlobalGridOptions.gridOptions.context; } if (providedOptions.context) { if (_GlobalGridOptions.mergeStrategy === "deep" && mergedGridOps.context) { _mergeDeep(providedOptions.context, mergedGridOps.context, true, true); } mergedGridOps.context = providedOptions.context; } return mergedGridOps; } /** * Apply global grid option for a specific option key. * If the merge strategy is 'deep' and both global and provided values are objects, they will be merged deeply. * Otherwise, the provided value is returned as is. * @param optionKey - The key of the grid option to apply. * @param providedValue - The value provided to the grid instance. * @returns The merged value if applicable, otherwise the provided value. */ static applyGlobalGridOption(optionKey, providedValue) { if (_GlobalGridOptions.mergeStrategy === "deep") { const globalValue = _getGlobalGridOption(optionKey); if (globalValue && typeof globalValue === "object" && typeof providedValue === "object") { return _GlobalGridOptions.applyGlobalGridOptions({ [optionKey]: providedValue })[optionKey]; } } return providedValue; } }; // eslint-disable-next-line no-restricted-syntax _GlobalGridOptions.gridOptions = void 0; // eslint-disable-next-line no-restricted-syntax _GlobalGridOptions.mergeStrategy = "shallow"; var GlobalGridOptions = _GlobalGridOptions; function provideGlobalGridOptions(gridOptions, mergeStrategy = "shallow") { GlobalGridOptions.gridOptions = gridOptions; GlobalGridOptions.mergeStrategy = mergeStrategy; } function _getGlobalGridOption(gridOption) { return GlobalGridOptions.gridOptions?.[gridOption]; } // packages/ag-grid-community/src/gridOptionsDefault.ts var GRID_OPTION_DEFAULTS = { suppressContextMenu: false, preventDefaultOnContextMenu: false, allowContextMenuWithControlKey: false, suppressMenuHide: true, enableBrowserTooltips: false, tooltipTrigger: "hover", tooltipShowDelay: 2e3, tooltipSwitchShowDelay: 200, tooltipHideDelay: 1e4, noteTrigger: "hover", noteShowDelay: 180, noteHideDelay: 220, tooltipMouseTrack: false, tooltipShowMode: "standard", tooltipInteraction: false, copyHeadersToClipboard: false, copyGroupHeadersToClipboard: false, clipboardDelimiter: " ", suppressCopyRowsToClipboard: false, suppressCopySingleCellRanges: false, suppressLastEmptyLineOnPaste: false, suppressClipboardPaste: false, suppressClipboardApi: false, suppressCutToClipboard: false, maintainColumnOrder: false, enableStrictPivotColumnOrder: false, suppressFieldDotNotation: false, allowDragFromColumnsToolPanel: false, suppressMovableColumns: false, suppressColumnMoveAnimation: false, suppressMoveWhenColumnDragging: false, suppressDragLeaveHidesColumns: false, suppressRowGroupHidesColumns: false, suppressAutoSize: false, autoSizePadding: 20, skipHeaderOnAutoSize: false, singleClickEdit: false, suppressClickEdit: false, readOnlyEdit: false, stopEditingWhenCellsLoseFocus: false, enterNavigatesVertically: false, enterNavigatesVerticallyAfterEdit: false, enableCellEditingOnBackspace: false, undoRedoCellEditing: false, undoRedoCellEditingLimit: 10, suppressCsvExport: false, suppressExcelExport: false, cacheQuickFilter: false, includeHiddenColumnsInQuickFilter: false, excludeChildrenWhenTreeDataFiltering: false, enableAdvancedFilter: false, includeHiddenColumnsInAdvancedFilter: false, enableCharts: false, masterDetail: false, keepDetailRows: false, keepDetailRowsCount: 10, detailRowAutoHeight: false, tabIndex: 0, rowBuffer: 10, valueCache: false, valueCacheNeverExpires: false, enableCellExpressions: false, suppressTouch: false, suppressFocusAfterRefresh: false, suppressBrowserResizeObserver: false, suppressPropertyNamesCheck: false, suppressChangeDetection: false, debug: false, suppressLoadingOverlay: false, suppressNoRowsOverlay: false, pagination: false, paginationPageSize: 100, paginationPageSizeSelector: true, paginationAutoPageSize: false, paginateChildRows: false, suppressPaginationPanel: false, pivotMode: false, pivotPanelShow: "never", pivotDefaultExpanded: 0, pivotSuppressAutoColumn: false, suppressExpandablePivotGroups: false, functionsReadOnly: false, suppressAggFuncInHeader: false, alwaysAggregateAtRootLevel: false, aggregateOnlyChangedColumns: false, suppressAggFilteredOnly: false, removePivotHeaderRowWhenSingleValueColumn: false, animateRows: true, cellFlashDuration: 500, cellFadeDuration: 1e3, allowShowChangeAfterFilter: false, domLayout: "normal", ensureDomOrder: false, enableRtl: false, suppressColumnVirtualisation: false, suppressMaxRenderedRowRestriction: false, suppressRowVirtualisation: false, rowDragManaged: false, refreshAfterGroupEdit: false, rowDragInsertDelay: 500, suppressRowDrag: false, suppressMoveWhenRowDragging: false, rowDragEntireRow: false, rowDragMultiRow: false, embedFullWidthRows: false, groupDisplayType: "singleColumn", groupDefaultExpanded: 0, groupMaintainOrder: false, groupSelectsChildren: false, groupSuppressBlankHeader: false, groupSelectsFiltered: false, showOpenedGroup: false, groupRemoveSingleChildren: false, groupRemoveLowestSingleChildren: false, groupHideOpenParents: false, groupHideColumnsUntilExpanded: false, groupAllowUnbalanced: false, rowGroupPanelShow: "never", suppressMakeColumnVisibleAfterUnGroup: false, treeData: false, rowGroupPanelSuppressSort: false, suppressGroupRowsSticky: false, rowModelType: "clientSide", asyncTransactionWaitMillis: 50, suppressModelUpdateAfterUpdateTransaction: false, cacheOverflowSize: 1, infiniteInitialRowCount: 1, serverSideInitialRowCount: 1, cacheBlockSize: 100, maxBlocksInCache: -1, maxConcurrentDatasourceRequests: 2, blockLoadDebounceMillis: 0, purgeClosedRowNodes: false, serverSideSortAllLevels: false, serverSideOnlyRefreshFilteredGroups: false, serverSidePivotResultFieldSeparator: "_", viewportRowModelPageSize: 5, viewportRowModelBufferSize: 5, alwaysShowHorizontalScroll: false, alwaysShowVerticalScroll: false, debounceVerticalScrollbar: false, suppressHorizontalScroll: false, suppressScrollOnNewData: false, suppressScrollWhenPopupsAreOpen: false, suppressAnimationFrame: false, suppressMiddleClickScrolls: false, suppressPreventDefaultOnMouseWheel: false, rowMultiSelectWithClick: false, suppressRowDeselection: false, suppressRowClickSelection: false, suppressCellFocus: false, suppressHeaderFocus: false, suppressMultiRangeSelection: false, enableCellTextSelection: false, enableRangeSelection: false, enableRangeHandle: false, enableFillHandle: false, fillHandleDirection: "xy", suppressClearOnFillReduction: false, accentedSort: false, unSortIcon: false, suppressMultiSort: false, alwaysMultiSort: false, suppressMaintainUnsortedOrder: false, suppressRowHoverHighlight: false, suppressRowTransform: false, suppressContentVisibilityAuto: true, columnHoverHighlight: false, deltaSort: false, enableGroupEdit: false, groupLockGroupColumns: 0, serverSideEnableClientSideSort: false, suppressServerSideFullWidthLoadingRow: false, pivotMaxGeneratedColumns: -1, columnMenu: "new", reactiveCustomComponents: true, suppressSetFilterByDefault: false, enableFilterHandlers: false }; // packages/ag-grid-community/src/utils/number.ts function _isFiniteNumber(v) { return typeof v === "number" && Number.isFinite(v); } function _toFiniteNumber(v) { const n = Number(v); return Number.isFinite(n) ? n : null; } function _clamp(value, min, max) { return Math.max(min, Math.min(value, max)); } function _formatNumberCommas(value, getLocaleTextFunc) { if (typeof value !== "number") { return ""; } const localeTextFunc = getLocaleTextFunc(); const thousandSeparator = localeTextFunc("thousandSeparator", ","); const decimalSeparator = localeTextFunc("decimalSeparator", "."); return value.toString().replace(".", decimalSeparator).replace(/(\d)(?=(\d{3})+(?!\d))/g, `$1${thousandSeparator}`); } // packages/ag-grid-community/src/baseUrl.ts var BASE_URL = "https://www.ag-grid.com"; // packages/ag-grid-community/src/utils/log.ts import { _doOnce } from "ag-stack"; function _logIfDebug(gos, message, ...args) { if (gos.get("debug")) { console.log("AG Grid: " + message, ...args); } } function _warnOnce(msg, ...args) { _doOnce(() => _consoleWarn(msg, ...args), msg + args?.join("")); } function _errorOnce(msg, ...args) { _doOnce(() => _consoleError(msg, ...args), msg + args?.join("")); } function _consoleError(msg, ...args) { console.error("AG Grid: " + msg, ...args); } function _consoleWarn(msg, ...args) { console.warn("AG Grid: " + msg, ...args); } // packages/ag-grid-community/src/modules/moduleRegistry.ts var allRegisteredModules = /* @__PURE__ */ new Set(); var globalModulesMap = {}; var gridModulesMap = {}; var currentModuleVersion; var areGridScopedModules = false; var isUmd = false; function isValidModuleVersion(module) { const [moduleMajor, moduleMinor] = module.version.split(".") || []; const [currentModuleMajor, currentModuleMinor] = currentModuleVersion.split(".") || []; return moduleMajor === currentModuleMajor && moduleMinor === currentModuleMinor; } function runVersionChecks(module) { if (!currentModuleVersion) { currentModuleVersion = module.version; } const errorMsg = (details) => `You are using incompatible versions of AG Grid modules. Major and minor versions should always match across modules. ${details} Please update all modules to the same version.`; if (!module.version) { _errorOnce(errorMsg(`'${module.moduleName}' is incompatible.`)); } else if (!isValidModuleVersion(module)) { _errorOnce( errorMsg( `'${module.moduleName}' is version ${module.version} but the other modules are version ${currentModuleVersion}.` ) ); } const result = module.validate?.(); if (result && !result.isValid) { _errorOnce(`${result.message}`); } } function _registerModule(module, gridId) { runVersionChecks(module); const rowModels = module.rowModels ?? ["all"]; allRegisteredModules.add(module); let moduleStore; if (gridId !== void 0) { areGridScopedModules = true; if (gridModulesMap[gridId] === void 0) { gridModulesMap[gridId] = {}; } moduleStore = gridModulesMap[gridId]; } else { moduleStore = globalModulesMap; } for (const rowModel of rowModels) { if (moduleStore[rowModel] === void 0) { moduleStore[rowModel] = {}; } moduleStore[rowModel][module.moduleName] = module; } if (module.dependsOn) { for (const dependency of module.dependsOn) { _registerModule(dependency, gridId); } } } function _unRegisterGridModules(gridId) { delete gridModulesMap[gridId]; } function _isModuleRegistered(moduleName, gridId, rowModel) { const isRegisteredForRowModel = (model) => !!globalModulesMap[model]?.[moduleName] || !!gridModulesMap[gridId]?.[model]?.[moduleName]; return isRegisteredForRowModel(rowModel) || isRegisteredForRowModel("all"); } function _areModulesGridScoped() { return areGridScopedModules; } function _getRegisteredModules(gridId, rowModel) { const gridModules = gridModulesMap[gridId] ?? {}; return [ ...Object.values(globalModulesMap["all"] ?? {}), ...Object.values(gridModules["all"] ?? {}), ...Object.values(globalModulesMap[rowModel] ?? {}), ...Object.values(gridModules[rowModel] ?? {}) ]; } function _getAllRegisteredModules() { return new Set(allRegisteredModules); } function _getGridRegisteredModules(gridId, rowModel) { const gridModules = gridModulesMap[gridId] ?? {}; return [...Object.values(gridModules["all"] ?? {}), ...Object.values(gridModules[rowModel] ?? {})]; } function _isUmd() { return isUmd; } function _setUmd() { isUmd = true; } var ModuleRegistry = class { /** * @deprecated v33 Use `registerModules([module])` instead. */ static register(module) { _registerModule(module, void 0); } /** * Globally register the given modules for all grids. * @param modules - modules to register */ static registerModules(modules) { for (const module of modules) { _registerModule(module, void 0); } } }; function _findEnterpriseCoreModule(modules) { for (const module of modules) { if ("setLicenseKey" in module) { return module; } if (module.dependsOn) { const found = _findEnterpriseCoreModule(module.dependsOn); if (found) { return found; } } } return void 0; } // packages/ag-grid-community/src/version.ts var VERSION = "36.0.2"; // packages/ag-grid-community/src/validation/logging.ts var MAX_URL_LENGTH = 2e3; var MIN_PARAM_LENGTH = 100; var VERSION_PARAM_NAME = "_version_"; var getConsoleMessage = null; var baseDocLink = `${BASE_URL}/javascript-data-grid`; function provideValidationServiceLogger(logger) { getConsoleMessage = logger; } function setValidationDocLink(docLink) { baseDocLink = docLink; } function getErrorParts(id, args, defaultMessage) { return getConsoleMessage?.(id, args) ?? [minifiedLog(id, args, defaultMessage)]; } function getMsgOrDefault(logger, id, args, isWarning, defaultMessage) { logger(`${isWarning ? "warning" : "error"} #${id}`, ...getErrorParts(id, args, defaultMessage)); } function stringifyObject(inputObj) { if (!inputObj) { return String(inputObj); } const object = {}; for (const prop of Object.keys(inputObj)) { if (typeof inputObj[prop] !== "object" && typeof inputObj[prop] !== "function") { object[prop] = inputObj[prop]; } } return JSON.stringify(object); } function stringifyValue(value) { let output = value; if (value instanceof Error) { output = value.toString(); } else if (typeof value === "object") { output = stringifyObject(value); } return output; } function toStringWithNullUndefined(str) { return str === void 0 ? "undefined" : str === null ? "null" : str; } function getParamsUrl(baseUrl, params) { return `${baseUrl}?${params.toString()}`; } function truncateUrl(baseUrl, params, maxLength) { const sortedParams = Array.from(params.entries()).sort((a, b) => b[1].length - a[1].length); let url = getParamsUrl(baseUrl, params); for (const [key, value] of sortedParams) { if (key === VERSION_PARAM_NAME) { continue; } const excessLength = url.length - maxLength; if (excessLength <= 0) { break; } const ellipse = "..."; const truncateAmount = excessLength + ellipse.length; const truncatedValue = value.length - truncateAmount > MIN_PARAM_LENGTH ? value.slice(0, value.length - truncateAmount) + ellipse : value.slice(0, MIN_PARAM_LENGTH) + ellipse; params.set(key, truncatedValue); url = getParamsUrl(baseUrl, params); } return url; } function getErrorLink(errorNum, args) { const params = new URLSearchParams(); params.append(VERSION_PARAM_NAME, VERSION); if (args) { for (const key of Object.keys(args)) { params.append(key, stringifyValue(args[key])); } } const baseUrl = `${baseDocLink}/errors/${errorNum}`; const url = getParamsUrl(baseUrl, params); return url.length <= MAX_URL_LENGTH ? url : truncateUrl(baseUrl, params, MAX_URL_LENGTH); } var minifiedLog = (errorNum, args, defaultMessage) => { const errorLink = getErrorLink(errorNum, args); const prefix = `${defaultMessage ? defaultMessage + " \n" : ""}Visit ${errorLink}`; if (_isUmd()) { return prefix; } return `${prefix}${defaultMessage ? "" : " \n Alternatively register the ValidationModule to see the full message in the console."}`; }; function _warn(...args) { getMsgOrDefault(_warnOnce, args[0], args[1], true); } function _error(...args) { getMsgOrDefault(_errorOnce, args[0], args[1], false); } function _logPreInitErr(id, args, defaultMessage) { getMsgOrDefault(_errorOnce, id, args, false, defaultMessage); } function _logPreInitWarn(id, args, defaultMessage) { getMsgOrDefault(_warnOnce, id, args, true, defaultMessage); } function getErrMsg(defaultMessage, args) { const id = args[0]; return `error #${id} ` + getErrorParts(id, args[1], defaultMessage).join(" "); } function _errMsg(...args) { return getErrMsg(void 0, args); } function _preInitErrMsg(...args) { return getErrMsg("\n", args); } // packages/ag-grid-community/src/gridOptionsUtils.ts function isRowModelType(gos, rowModelType) { return gos.get("rowModelType") === rowModelType; } function _isClientSideRowModel(gos, _rowModel) { return isRowModelType(gos, "clientSide"); } function _isServerSideRowModel(gos, _rowModel) { return isRowModelType(gos, "serverSide"); } function _isDomLayout(gos, domLayout) { return gos.get("domLayout") === domLayout; } function _isRowSelection(gos) { return _getRowSelectionMode(gos) !== void 0; } function _isGetRowHeightFunction(gos) { return typeof gos.get("getRowHeight") === "function"; } function _shouldMaintainColumnOrder(gos, isPivotColumns) { if (isPivotColumns) { return !gos.get("enableStrictPivotColumnOrder"); } return gos.get("maintainColumnOrder"); } function _isRowNumbers({ gos, formula }) { const rowNumbers = gos.get("rowNumbers"); return rowNumbers || !!formula?.active && rowNumbers !== false; } function _getRowHeightForNode(beans, rowNode, allowEstimate = false, defaultRowHeight) { const { gos, environment } = beans; if (defaultRowHeight == null) { defaultRowHeight = environment.getDefaultRowHeight(); } if (_isGetRowHeightFunction(gos)) { if (allowEstimate) { return { height: defaultRowHeight, estimated: true }; } const params = { node: rowNode, data: rowNode.data }; const height = gos.getCallback("getRowHeight")(params); if (_isFiniteNumber(height)) { if (height === 0) { _warn(23); } return { height: Math.max(1, height), estimated: false }; } } if (rowNode.detail && gos.get("masterDetail")) { return getMasterDetailRowHeight(gos); } const gridOptionsRowHeight = gos.get("rowHeight"); const rowHeight = gridOptionsRowHeight && _isFiniteNumber(gridOptionsRowHeight) ? gridOptionsRowHeight : defaultRowHeight; return { height: rowHeight, estimated: false }; } function getMasterDetailRowHeight(gos) { if (gos.get("detailRowAutoHeight")) { return { height: 1, estimated: false }; } const defaultRowHeight = gos.get("detailRowHeight"); if (_isFiniteNumber(defaultRowHeight)) { return { height: defaultRowHeight, estimated: false }; } return { height: 300, estimated: false }; } function _getRowHeightAsNumber(beans) { const { environment, gos } = beans; const gridOptionsRowHeight = gos.get("rowHeight"); if (!gridOptionsRowHeight || _missing(gridOptionsRowHeight)) { return environment.getDefaultRowHeight(); } const rowHeight = environment.refreshRowHeightVariable(); if (rowHeight !== -1) { return rowHeight; } _warn(24); return environment.getDefaultRowHeight(); } function _getDomData(gos, element, key) { const domData = element[gos.getDomDataKey()]; return domData ? domData[key] : void 0; } function _setDomData(gos, element, key, value) { const domDataKey = gos.getDomDataKey(); let domData = element[domDataKey]; if (_missing(domData)) { domData = {}; element[domDataKey] = domData; } domData[key] = value; } function _isAnimateRows(gos) { if (gos.get("ensureDomOrder")) { return false; } return gos.get("animateRows"); } function _isGroupRowsSticky(gos) { return !(gos.get("paginateChildRows") || gos.get("groupHideOpenParents") || _isDomLayout(gos, "print")); } function _isColumnsSortingCoupledToGroup(gos) { const autoGroupColumnDef = gos.get("autoGroupColumnDef"); return !autoGroupColumnDef?.comparator && !gos.get("treeData"); } function _getGroupAggFiltering(gos) { const userValue = gos.get("groupAggFiltering"); if (typeof userValue === "function") { return gos.getCallback("groupAggFiltering"); } if (userValue === true) { return () => true; } return void 0; } function _getGrandTotalRow(gos) { return gos.get("grandTotalRow"); } function _getGrandTotalPinnedFloat(grandTotalRow) { switch (grandTotalRow) { case "pinnedTop": return "top"; case "pinnedBottom": return "bottom"; default: return null; } } function _getGroupTotalRowCallback(gos) { const userValue = gos.get("groupTotalRow"); if (typeof userValue === "function") { return gos.getCallback("groupTotalRow"); } return () => userValue ?? void 0; } function _isGroupMultiAutoColumn(gos) { const isHideOpenParents = !!gos.get("groupHideOpenParents"); if (isHideOpenParents) { return true; } return gos.get("groupDisplayType") === "multipleColumns"; } function _isGroupHideColumnsUntilExpanded(gos) { return _isGroupMultiAutoColumn(gos) && gos.get("groupHideColumnsUntilExpanded") && _isClientSideRowModel(gos); } function _isGroupUseEntireRow(gos, pivotMode) { if (pivotMode) { return false; } return gos.get("groupDisplayType") === "groupRows"; } function _isFullWidthGroupRow(gos, node, pivotMode) { return !!node.group && !node.footer && _isGroupUseEntireRow(gos, pivotMode); } function _getRowIdCallback(gos) { const getRowId = gos.getCallback("getRowId"); if (getRowId === void 0) { return getRowId; } return (params) => { let id = getRowId(params); if (typeof id !== "string") { _doOnce2(() => _warn(25, { id }), "getRowIdString"); id = String(id); } return id; }; } function _canSkipShowingRowGroup(gos, node) { const isSkippingGroups = gos.get("groupHideParentOfSingleChild"); if (isSkippingGroups === true) { return true; } if (isSkippingGroups === "leafGroupsOnly" && node.leafGroup) { return true; } if (gos.get("groupRemoveSingleChildren")) { return true; } if (gos.get("groupRemoveLowestSingleChildren") && node.leafGroup) { return true; } return false; } function _getMaxConcurrentDatasourceRequests(gos) { const res = gos.get("maxConcurrentDatasourceRequests"); return res > 0 ? res : void 0; } function _shouldUpdateColVisibilityAfterGroup(gos, isGrouped) { const preventVisibilityChanges = gos.get("suppressGroupChangesColumnVisibility"); if (preventVisibilityChanges === true) { return false; } if (isGrouped && preventVisibilityChanges === "suppressHideOnGroup") { return false; } if (!isGrouped && preventVisibilityChanges === "suppressShowOnUngroup") { return false; } const legacySuppressOnGroup = gos.get("suppressRowGroupHidesColumns"); if (isGrouped && legacySuppressOnGroup === true) { return false; } const legacySuppressOnUngroup = gos.get("suppressMakeColumnVisibleAfterUnGroup"); if (!isGrouped && legacySuppressOnUngroup === true) { return false; } return true; } function _getCheckboxes(selection) { return selection?.checkboxes ?? true; } function _getHeaderCheckbox(selection) { return selection?.mode === "multiRow" && (selection.headerCheckbox ?? true); } function _getCheckboxLocation(rowSelection) { if (typeof rowSelection !== "object") { return void 0; } return rowSelection.checkboxLocation ?? "selectionColumn"; } function _getHideDisabledCheckboxes(selection) { return selection?.hideDisabledCheckboxes ?? false; } function _isUsingNewRowSelectionAPI(gos) { const rowSelection = gos.get("rowSelection"); return typeof rowSelection !== "string"; } function _isUsingNewCellSelectionAPI(gos) { return gos.get("cellSelection") !== void 0; } function _getSuppressMultiRanges(gos) { const selection = gos.get("cellSelection"); const useNewAPI = selection !== void 0; if (!useNewAPI) { return gos.get("suppressMultiRangeSelection"); } return typeof selection !== "boolean" ? selection?.suppressMultiRanges ?? false : false; } function _isCellSelectionEnabled(gos) { const selection = gos.get("cellSelection"); const useNewAPI = selection !== void 0; return useNewAPI ? !!selection : gos.get("enableRangeSelection"); } function _getFillHandle(gos) { const selection = gos.get("cellSelection"); const useNewAPI = selection !== void 0; if (!useNewAPI) { return { mode: "fill", setFillValue: gos.get("fillOperation"), direction: gos.get("fillHandleDirection"), suppressClearOnFillReduction: gos.get("suppressClearOnFillReduction") }; } return typeof selection !== "boolean" && selection.handle?.mode === "fill" ? selection.handle : void 0; } function _getEnableColumnSelection(gos) { const cellSelection = gos.get("cellSelection") ?? false; return (typeof cellSelection === "object" && cellSelection.enableColumnSelection) ?? false; } function _getEnableClickSelection(gos) { const selection = gos.get("rowSelection") ?? "single"; if (typeof selection === "string") { const suppressRowClickSelection = gos.get("suppressRowClickSelection"); const suppressRowDeselection = gos.get("suppressRowDeselection"); if (suppressRowClickSelection && suppressRowDeselection) { return false; } else if (suppressRowClickSelection) { return "enableDeselection"; } else if (suppressRowDeselection) { return "enableSelection"; } else { return true; } } return selection.mode === "singleRow" || selection.mode === "multiRow" ? selection.enableClickSelection ?? false : false; } function _getEnableSelection(gos) { const enableClickSelection = _getEnableClickSelection(gos); return enableClickSelection === true || enableClickSelection === "enableSelection"; } function _getEnableDeselection(gos) { const enableClickSelection = _getEnableClickSelection(gos); return enableClickSelection === true || enableClickSelection === "enableDeselection"; } function _getIsRowSelectable(gos) { const selection = gos.get("rowSelection"); if (typeof selection === "string") { return gos.get("isRowSelectable"); } return selection?.isRowSelectable; } function _getRowSelectionMode(arg) { const selection = "beanName" in arg && arg.beanName === "gos" ? arg.get("rowSelection") : arg.rowSelection; if (typeof selection === "string") { switch (selection) { case "multiple": return "multiRow"; case "single": return "singleRow"; default: return; } } switch (selection?.mode) { case "multiRow": case "singleRow": return selection.mode; default: return; } } function _isMultiRowSelection(arg) { const mode = _getRowSelectionMode(arg); return mode === "multiRow"; } function _getEnableSelectionWithoutKeys(gos) { const selection = gos.get("rowSelection"); if (typeof selection === "string") { return gos.get("rowMultiSelectWithClick"); } return selection?.enableSelectionWithoutKeys ?? false; } function _getGroupSelection(gos) { const selection = gos.get("rowSelection"); if (typeof selection === "string") { const groupSelectsChildren = gos.get("groupSelectsChildren"); const groupSelectsFiltered = gos.get("groupSelectsFiltered"); if (groupSelectsChildren && groupSelectsFiltered) { return "filteredDescendants"; } else if (groupSelectsChildren) { return "descendants"; } else { return "self"; } } return selection?.mode === "multiRow" ? selection.groupSelects : void 0; } function _getSelectAll(gos, defaultValue = true) { const rowSelection = gos.get("rowSelection"); if (typeof rowSelection !== "object") { return defaultValue ? "all" : void 0; } return rowSelection.mode === "multiRow" ? rowSelection.selectAll : "all"; } function _getCtrlASelectsRows(gos) { const rowSelection = gos.get("rowSelection"); if (typeof rowSelection === "string") { return false; } return rowSelection?.mode === "multiRow" ? rowSelection.ctrlASelectsRows ?? false : false; } function _getGroupSelectsDescendants(gos) { const groupSelection = _getGroupSelection(gos); return groupSelection === "descendants" || groupSelection === "filteredDescendants"; } function _getMasterSelects(gos) { const rowSelection = gos.get("rowSelection"); return typeof rowSelection === "object" && rowSelection.masterSelects || "self"; } function _isSetFilterByDefault(gos) { return gos.isModuleRegistered("SetFilter") && !gos.get("suppressSetFilterByDefault"); } function _isLegacyMenuEnabled(gos) { return gos.get("columnMenu") === "legacy"; } function _isColumnMenuAnchoringEnabled(gos) { return !_isLegacyMenuEnabled(gos); } function _getCallbackForEvent(eventName) { if (!eventName || eventName.length < 2) { return eventName; } return "on" + eventName[0].toUpperCase() + eventName.substring(1); } function _combineAttributesAndGridOptions(gridOptions, component, gridOptionsKeys) { if (typeof gridOptions !== "object") { gridOptions = {}; } const mergedOptions = { ...gridOptions }; for (const key of gridOptionsKeys) { const value = component[key]; if (typeof value !== "undefined") { mergedOptions[key] = value; } } return mergedOptions; } function _processOnChange(changes, api) { if (!changes) { return; } const gridChanges = {}; let hasChanges = false; for (const key of Object.keys(changes)) { gridChanges[key] = changes[key]; hasChanges = true; } if (!hasChanges) { return; } const internalUpdateEvent = { type: "gridOptionsChanged", options: gridChanges }; api.dispatchEvent(internalUpdateEvent); const event = { type: "componentStateChanged", ...gridChanges }; api.dispatchEvent(event); } function _addGridCommonParams(gos, params) { return gos.addCommon(params); } function _getGridOption(providedGridOptions, gridOption) { return providedGridOptions[gridOption] ?? providedGridOptions[`gridOptions`]?.[gridOption] ?? _getGlobalGridOption(gridOption) ?? GRID_OPTION_DEFAULTS[gridOption]; } function _interpretAsRightClick({ gos }, event) { return event.button === 2 || event.ctrlKey && gos.get("allowContextMenuWithControlKey"); } // packages/ag-grid-community/src/columns/colDefUtils.ts function _createUserColumn(beans, userColDef, colId, isPrimary, buildToken) { const merged = _addColumnDefaultAndTypes(beans, userColDef, colId); const column = new AgColumn(merged, userColDef, colId, isPrimary, "user"); column.buildToken = buildToken; beans.context.createBean(column); return column; } function _addColumnDefaultAndTypes(beans, colDef, colId, isAutoCol) { const { gos, dataTypeSvc } = beans; const res = {}; const defaultColDef = gos.get("defaultColDef"); _mergeDeep(res, defaultColDef, false, true); const dataTypeDefinitionColumnType = dataTypeSvc?.updateColDefAndGetColumnType(res, colDef, colId); const columnTypes = colDef.type ?? dataTypeDefinitionColumnType ?? res.type; res.type = columnTypes; if (columnTypes) { assignColumnTypes(beans, convertColumnTypes(columnTypes), res); } const cellDataType = res.cellDataType; _mergeDeep(res, colDef, false, true); if (cellDataType !== void 0) { res.cellDataType = cellDataType; } const autoGroupColDef = gos.get("autoGroupColumnDef"); if (autoGroupColDef && colDef.rowGroup && _isColumnsSortingCoupledToGroup(gos)) { _mergeDeep( res, { sort: autoGroupColDef.sort, initialSort: autoGroupColDef.initialSort }, false, true ); } dataTypeSvc?.postProcess(res); dataTypeSvc?.validateColDef(res, colDef, defaultColDef, colId); gos.validateColDef(res, colId, isAutoCol); return res; } function assignColumnTypes(beans, typeKeys, colDefMerged) { const typeKeysLen = typeKeys.length; if (typeKeysLen === 0) { return; } const userTypes = beans.gos.get("columnTypes"); if (userTypes == null) { mergeTypeKeys(colDefMerged, typeKeys, typeKeysLen, DefaultColumnTypes); return; } const allColumnTypes = { ...DefaultColumnTypes }; const userKeys = Object.keys(userTypes); for (let i = 0, len = userKeys.length; i < len; ++i) { const key = userKeys[i]; const value = userTypes[key]; if (key in allColumnTypes) { _warn(34, { key }); } else { if (value.type) { _warn(35); } allColumnTypes[key] = value; } } mergeTypeKeys(colDefMerged, typeKeys, typeKeysLen, allColumnTypes); } function mergeTypeKeys(colDefMerged, typeKeys, typeKeysLen, typeMap) { for (let i = 0; i < typeKeysLen; ++i) { const t = typeKeys[i].trim(); const typeColDef = typeMap[t]; if (typeColDef) { _mergeDeep(colDefMerged, typeColDef, false, true); } else { _warn(36, { t }); } } } // packages/ag-grid-community/src/columns/columnStateUtils.ts import { _areEqual as _areEqual2, _symmetricDiff } from "ag-stack"; // packages/ag-grid-community/src/columnMove/columnMoveUtils.ts import { _indexMap } from "ag-stack"; // packages/ag-grid-community/src/context/beanStub.ts import { AgBeanStub } from "ag-stack"; var BeanStub = AgBeanStub; // packages/ag-grid-community/src/entities/agProvidedColumnGroup.ts function isProvidedColumnGroup(col) { return col instanceof AgProvidedColumnGroup; } var AgProvidedColumnGroup = class extends BeanStub { constructor(colGroupDef, groupId, padding, level) { super(); this.colGroupDef = colGroupDef; this.groupId = groupId; this.padding = padding; this.level = level; this.isColumn = false; this.expandable = false; this.expanded = false; /** Most recent build token that claimed this group — detects "already used in this refresh". */ this.buildToken = 0; /** Packed `AgColumnGroup` display instances by dense per-refresh `partId` (`displayInstances[0]` is primary), lazily allocated and pruned by `columnGroupService`. */ this.displayInstances = null; /** Cache previous `setExpandable` visibility so `AgColumn.setVisible` ancestor walk can stop when unchanged. */ this.lastVisible = false; // stable key for framework (React) rendering and old-vs-new destroy diffing this.instanceId = getNextColInstanceId(); this.expanded = !!colGroupDef?.openByDefault; } getInstanceId() { return this.instanceId; } getOriginalParent() { return this.originalParent; } getLevel() { return this.level; } /** Visible iff at least one child is visible. */ isVisible() { const children = this.children; for (let i = 0, len = children.length; i < len; ++i) { if (children[i].isVisible()) { return true; } } return false; } isPadding() { return this.padding; } setExpanded(expanded) { expanded = !!expanded; if (this.expanded === expanded) { return false; } this.expanded = expanded; this.dispatchLocalEvent({ type: "expandedChanged" }); return true; } isExpandable() { return this.expandable; } isExpanded() { return this.expanded; } getGroupId() { return this.groupId; } getId() { return this.groupId; } getChildren() { return this.children; } getColGroupDef() { return this.colGroupDef; } getLeafColumns() { const result = []; this.addLeafColumns(result); return result; } addLeafColumns(leafColumns) { const children = this.children; for (let i = 0, len = children.length; i < len; ++i) { const child = children[i]; if (child.isColumn) { leafColumns.push(child); } else { child.addLeafColumns(leafColumns); } } } getColumnGroupShow() { return this.colGroupDef?.columnGroupShow; } /** Recompute child-driven expandability and return whether `AgColumn.setVisible` should continue ancestor walking. */ setExpandable() { if (this.padding) { return true; } const flags = walkForExpandFlags(this.children, 0); const expandable = flags === EXPANDABLE_ALL; if (this.expandable !== expandable) { this.expandable = expandable; this.dispatchLocalEvent({ type: "expandableChanged" }); } const visible = flags !== 0; if (this.lastVisible === visible) { return false; } this.lastVisible = visible; return true; } }; var FLAG_SHOWING_WHEN_OPEN = 1; var FLAG_SHOWING_WHEN_CLOSED = 2; var FLAG_CHANGEABLE = 4; var EXPANDABLE_ALL = 7; var walkForExpandFlags = (items, flags) => { for (let i = 0, n = items.length; i < n; ++i) { const item = items[i]; if (isProvidedColumnGroup(item) && item.padding) { flags = walkForExpandFlags(item.children, flags); } else if (item.isVisible()) { const show = item.getColumnGroupShow(); if (show === "open") { flags |= FLAG_SHOWING_WHEN_OPEN | FLAG_CHANGEABLE; } else if (show === "closed") { flags |= FLAG_SHOWING_WHEN_CLOSED | FLAG_CHANGEABLE; } else { flags |= FLAG_SHOWING_WHEN_OPEN | FLAG_SHOWING_WHEN_CLOSED; } } if (flags === EXPANDABLE_ALL) { return flags; } } return flags; }; // packages/ag-grid-community/src/columnMove/columnMoveUtils.ts function placeLockedColumns(cols, gos) { let leftCount = 0; let rightCount = 0; const len = cols.length; let firstLeftIdx = len; let lastLeftIdx = -1; let firstRightIdx = len; let lastRightIdx = -1; for (let i = 0; i < len; ++i) { const pos = cols[i].colDef.lockPosition; if (pos === "right") { ++rightCount; if (firstRightIdx === len) { firstRightIdx = i; } lastRightIdx = i; } else if (pos === "left" || pos === true) { ++leftCount; if (firstLeftIdx === len) { firstLeftIdx = i; } lastLeftIdx = i; } } if (leftCount === 0 && rightCount === 0) { return cols; } let leftIdx; let normalIdx; let rightIdx; if (gos.get("enableRtl")) { if (lastRightIdx === rightCount - 1 && firstLeftIdx === len - leftCount) { return cols; } rightIdx = 0; normalIdx = rightCount; leftIdx = len - leftCount; } else { if (lastLeftIdx === leftCount - 1 && firstRightIdx === len - rightCount) { return cols; } leftIdx = 0; normalIdx = leftCount; rightIdx = len - rightCount; } const result = new Array(len); for (let i = 0; i < len; ++i) { const col = cols[i]; const pos = col.colDef.lockPosition; let idx; if (pos === "right") { idx = rightIdx++; } else if (pos === "left" || pos === true) { idx = leftIdx++; } else { idx = normalIdx++; } result[idx] = col; } return result; } function doesMovePassMarryChildren(allColumnsCopy, gridBalancedTree) { const positionByCol = _indexMap(allColumnsCopy); let min = 0; let max = 0; let count = 0; const accumulate = (children) => { for (let i = 0, len = children.length; i < len; ++i) { const child = children[i]; if (isProvidedColumnGroup(child)) { accumulate(child.children); continue; } const idx = positionByCol.get(child) ?? -1; if (count === 0) { min = idx; max = idx; } else if (idx < min) { min = idx; } else if (idx > max) { max = idx; } ++count; } }; const visit = (tree) => { for (let i = 0, len = tree.length; i < len; ++i) { const child = tree[i]; if (!isProvidedColumnGroup(child)) { continue; } if (child.colGroupDef?.marryChildren) { count = 0; accumulate(child.children); if (count > 1 && max - min > count - 1) { return false; } } if (!visit(child.children)) { return false; } } return true; }; return visit(gridBalancedTree); } // packages/ag-grid-community/src/columns/columnEventUtils.ts function getCommonValue(cols, valueGetter) { if (!cols || cols.length == 0) { return void 0; } const firstValue = valueGetter(cols[0]); for (let i = 1; i < cols.length; i++) { if (firstValue !== valueGetter(cols[i])) { return void 0; } } return firstValue; } function dispatchColumnPinnedEvent(eventSvc, changedColumns, source) { if (!changedColumns.length) { return; } const column = changedColumns.length === 1 ? changedColumns[0] : null; const pinned = getCommonValue(changedColumns, (col) => col.getPinned()); eventSvc.dispatchEvent({ type: "columnPinned", // mistake in typing, 'undefined' should be allowed, as 'null' means 'not pinned' pinned: pinned != null ? pinned : null, columns: changedColumns, column, source }); } function dispatchColumnVisibleEvent(eventSvc, changedColumns, source) { if (!changedColumns.length) { return; } const column = changedColumns.length === 1 ? changedColumns[0] : null; const visible = getCommonValue(changedColumns, (col) => col.isVisible()); eventSvc.dispatchEvent({ type: "columnVisible", visible, columns: changedColumns, column, source }); } function _dispatchColumnChangedEvent(eventSvc, type, columns, source) { eventSvc.dispatchEvent({ type, columns, column: columns?.length == 1 ? columns[0] : null, source }); } function dispatchColumnResizedEvent(eventSvc, columns, finished, source, flexColumns = null) { if (columns?.length) { eventSvc.dispatchEvent({ type: "columnResized", columns, column: columns.length === 1 ? columns[0] : null, flexColumns, finished, source }); } } // packages/ag-grid-community/src/columns/columnStateUtils.ts var updateSomeColumnState = (beans, column, hide, sort, sortIndex, pinned, flex, source) => { const { sortSvc, pinnedCols, colFlex } = beans; if (hide !== void 0) { column.setVisible(!hide, source); } if (sortSvc) { sortSvc.updateColSort(column, sort, source); if (sortIndex !== void 0) { sortSvc.setColSortIndex(column, sortIndex); } } if (pinned !== void 0) { pinnedCols?.setColPinned(column, pinned); } if (flex !== void 0) { colFlex?.setColFlex(column, flex); } }; function _setColsVisible(beans, keys, visible = false, source, filterLockedColumns = false) { const colModel = beans.colModel; const newVisible = visible === true; let changed = null; for (let i = 0, len = keys.length; i < len; ++i) { const key = keys[i]; const col = typeof key === "string" ? colModel.getCol(key) : key; if (col === void 0 || filterLockedColumns && col.colDef.lockVisible) { continue; } if (col.visible !== newVisible) { col.setVisible(newVisible, source); changed ?? (changed = []); changed.push(col); } } if (changed) { const { colAnimation, eventSvc } = beans; colAnimation?.start(); colModel.refreshColsDerivedState(); beans.visibleCols.refresh(source, false); eventSvc.dispatchEvent({ type: "columnEverythingChanged", source }); dispatchColumnVisibleEvent(eventSvc, changed, source); colAnimation?.finish(); } } function _applyColumnState(beans, params, source) { const { colModel, colAnimation, calculatedColsSvc } = beans; const state = params.state; if (state && !Array.isArray(state)) { _warn(32); return false; } if (state && calculatedColsSvc?.restoreDynamicColumnDefs(state)) { calculatedColsSvc.refreshDynamicColumns(source); } const providedCols = colModel.colDefList; const selectionCol = beans.selectionColSvc?.column; if (!providedCols.length && !selectionCol) { return false; } colAnimation?.start(); const stateChanges = captureColumnStateChanges(beans); let unmatched = applyStateToCols(beans, state ?? null, providedCols, params, source, true); if (unmatched !== null || params.defaultState) { const pivotResultColsList = beans.pivotResultCols?.pivotCols; unmatched = applyStateToCols(beans, unmatched, pivotResultColsList, params, source, false); } finalizeChange(beans, params, source, stateChanges); colAnimation?.finish(); return unmatched === null; } function applyStateToCols(beans, states, existingColumns, params, source, primaryPass) { const colModel = beans.colModel; const defaultState = params.defaultState; let autoColStates = null; let selectionColStates = null; let unmatchedStates = null; const matched = defaultState ? /* @__PURE__ */ new Set() : null; if (states) { for (let i = 0, len = states.length; i < len; ++i) { const state = states[i]; const colId = state.colId; let column; if (colId != null) { if (colId.startsWith(GROUP_AUTO_COLUMN_ID)) { autoColStates ?? (autoColStates = []); autoColStates.push(state); continue; } if (colId.startsWith(SELECTION_COLUMN_ID)) { selectionColStates ?? (selectionColStates = []); selectionColStates.push(state); continue; } if (primaryPass) { column = colModel.getNonPivotColById(colId); } else { const col = colModel.getCol(colId); column = col?.colDef.pivotKeys == null ? null : col; } } if (!column) { unmatchedStates ?? (unmatchedStates = []); unmatchedStates.push(state); } else { applyFieldState(beans, column, state, defaultState, source); matched?.add(column); } } } if (matched !== null && existingColumns) { for (let i = 0, len = existingColumns.length; i < len; ++i) { const col = existingColumns[i]; if (!matched.has(col)) { applyFieldState(beans, col, null, defaultState, source); } } } if (primaryPass) { applyStructuralStateChanges(beans, autoColStates, selectionColStates, defaultState, source); } return unmatchedStates; } function applyStructuralStateChanges(beans, autoColStates, selectionColStates, defaultState, source) { const { autoColSvc, selectionColSvc, rowGroupColsSvc, pivotColsSvc, valueColsSvc } = beans; rowGroupColsSvc?.sortByPendingState()