apex-grid 3.3.0 → 3.4.0
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/CHANGELOG.md +42 -0
- package/README.md +29 -0
- package/components/cell.d.ts +2 -2
- package/components/cell.js +30 -2
- package/components/cell.js.map +1 -1
- package/components/filter-row.js +65 -6
- package/components/filter-row.js.map +1 -1
- package/components/grid.d.ts +5 -0
- package/components/grid.js +34 -2
- package/components/grid.js.map +1 -1
- package/components/header.js +80 -9
- package/components/header.js.map +1 -1
- package/controllers/expansion.js +4 -4
- package/controllers/expansion.js.map +1 -1
- package/controllers/filter.js +11 -0
- package/controllers/filter.js.map +1 -1
- package/controllers/history.js +11 -4
- package/controllers/history.js.map +1 -1
- package/controllers/navigation.d.ts +34 -2
- package/controllers/navigation.js +92 -3
- package/controllers/navigation.js.map +1 -1
- package/controllers/pagination.js +1 -1
- package/controllers/pagination.js.map +1 -1
- package/controllers/row-pin.js +2 -2
- package/controllers/row-pin.js.map +1 -1
- package/controllers/row-reorder.js +6 -6
- package/controllers/row-reorder.js.map +1 -1
- package/controllers/selection.js +3 -3
- package/controllers/selection.js.map +1 -1
- package/controllers/sort.js +4 -2
- package/controllers/sort.js.map +1 -1
- package/custom-elements.json +223 -7
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/functions/localize.html +2 -2
- package/docs/hierarchy.html +1 -1
- package/docs/index.html +62 -1
- package/docs/interfaces/BaseApexCellContext.html +1 -1
- package/docs/interfaces/BaseApexEditorContext.html +1 -1
- package/docs/interfaces/CSVExportOptions.html +1 -1
- package/docs/interfaces/ExportOptions.html +1 -1
- package/docs/interfaces/PaginationState.html +1 -1
- package/docs/media/package.json +2 -2
- package/docs/variables/EN_LOCALE.html +2 -2
- package/i18n/en.d.ts +95 -1
- package/i18n/en.js +95 -1
- package/i18n/en.js.map +1 -1
- package/i18n/es.js +95 -1
- package/i18n/es.js.map +1 -1
- package/internal/column-types.js +1 -1
- package/internal/column-types.js.map +1 -1
- package/package.json +1 -1
- package/styles/body-cell/body-cell.css.js +1 -1
- package/styles/body-cell/body-cell.css.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/controllers/selection.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport type { GridHost, SelectionMode } from '../internal/types.js';\n\n/**\n * The default selection configuration used when the grid has none set.\n */\nexport const DEFAULT_SELECTION_CONFIG = Object.freeze({\n enabled: false,\n mode: 'multiple' as SelectionMode,\n showCheckboxColumn: false,\n});\n\n/**\n * Reactive controller backing row selection.\n *\n * @remarks\n * Selection state is reference-based — the controller holds a `Set` of row\n * data references so the selection survives sort / filter / pagination as\n * long as those operations preserve identities (the default in-place\n * pipeline does). Replacing {@link ApexGrid.data} wholesale will invalidate\n * any selected rows that are no longer present in the new array; consumers\n * should call {@link clear} or re-apply selection after such a change.\n *\n * Mutations go through the cancellable `rowSelecting` event and emit a\n * follow-up `rowSelected` event, mirroring the pattern used by editing.\n */\nexport class SelectionController<T extends object> implements ReactiveController {\n /** Set of currently selected row data references. */\n public selected: Set<T> = new Set();\n\n /**\n * Anchor row for Shift+click range selection. Set whenever a single row\n * is toggled / picked so a follow-up Shift+click knows where to start.\n */\n public anchor: T | null = null;\n\n constructor(protected host: GridHost<T>) {\n this.host.addController(this);\n }\n\n public hostConnected() {}\n\n /**\n * Whether selection is enabled at the grid level.\n */\n public get enabled(): boolean {\n return Boolean(this.host.selection?.enabled);\n }\n\n /**\n * The resolved selection mode (`'multiple'` if unset).\n */\n public get mode(): SelectionMode {\n return this.host.selection?.mode ?? DEFAULT_SELECTION_CONFIG.mode;\n }\n\n /**\n * Whether to render the built-in checkbox column.\n */\n public get showCheckboxColumn(): boolean {\n return (\n this.enabled &&\n (this.host.selection?.showCheckboxColumn ?? DEFAULT_SELECTION_CONFIG.showCheckboxColumn)\n );\n }\n\n /**\n * Whether the given row is currently selected.\n */\n public isSelected(row: T): boolean {\n return this.selected.has(row);\n }\n\n /**\n * Returns the currently selected rows in insertion order.\n */\n public selectedRows(): T[] {\n return Array.from(this.selected);\n }\n\n /**\n * Whether every row in the current view ({@link ApexGrid.dataView}) is\n * selected. Used by the header checkbox to render its \"all\" state.\n */\n public allSelected(): boolean {\n const view = this.host.dataView;\n if (view.length === 0) return false;\n return view.every((row) => this.selected.has(row as T));\n }\n\n /**\n * Whether some — but not all — rows in the current view are selected.\n * Used to render the header checkbox in its indeterminate state.\n */\n public someSelected(): boolean {\n if (this.selected.size === 0) return false;\n if (this.allSelected()) return false;\n return true;\n }\n\n /**\n * Toggles selection of `row`. In `'single'` mode this either selects the\n * row (replacing any previous selection) or deselects it if it was the\n * only selected row.\n */\n public async toggleRow(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n const next = new Set(this.selected);\n if (next.has(row)) {\n next.delete(row);\n } else {\n if (this.mode === 'single') next.clear();\n next.add(row);\n }\n this.anchor = next.has(row) ? row : null;\n return this.#commit(next);\n }\n\n /**\n * Adds `row` to the selection. In `'single'` mode the existing selection\n * is cleared first.\n */\n public async selectRow(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n const next = new Set(this.mode === 'single' ? [] : this.selected);\n next.add(row);\n this.anchor = row;\n return this.#commit(next);\n }\n\n /**\n * Removes `row` from the selection.\n */\n public async deselectRow(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n if (!this.selected.has(row)) return true;\n const next = new Set(this.selected);\n next.delete(row);\n return this.#commit(next);\n }\n\n /**\n * Adds `row` to the selection without affecting other selected rows\n * (`'multiple'` mode only). In `'single'` mode this behaves like\n * {@link selectRow}.\n */\n public async additiveToggle(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n if (this.mode === 'single') return this.toggleRow(row);\n const next = new Set(this.selected);\n if (next.has(row)) {\n next.delete(row);\n } else {\n next.add(row);\n }\n this.anchor = next.has(row) ? row : this.anchor;\n return this.#commit(next);\n }\n\n /**\n * Selects every row between {@link anchor} and `row` (inclusive) in the\n * current page view. No-op in `'single'` mode or when no anchor is set —\n * in those cases the call falls back to a plain {@link selectRow}.\n */\n public async rangeToggle(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n if (this.mode === 'single' || !this.anchor) {\n return this.selectRow(row);\n }\n const pageItems = this.host.pageItems as ReadonlyArray<T>;\n const startIdx = pageItems.indexOf(this.anchor);\n const endIdx = pageItems.indexOf(row);\n if (startIdx === -1 || endIdx === -1) {\n return this.selectRow(row);\n }\n const [lo, hi] = startIdx < endIdx ? [startIdx, endIdx] : [endIdx, startIdx];\n const next = new Set(this.selected);\n for (let i = lo; i <= hi; i++) {\n next.add(pageItems[i] as T);\n }\n return this.#commit(next);\n }\n\n /**\n * Selects every row currently in view ({@link ApexGrid.dataView}). No-op\n * in `'single'` mode.\n */\n public async selectAll(): Promise<boolean> {\n if (!this.enabled || this.mode === 'single') return false;\n const next = new Set(this.host.dataView as ReadonlyArray<T>);\n return this.#commit(next);\n }\n\n /**\n * Clears the selection.\n */\n public async clear(): Promise<boolean> {\n if (this.selected.size === 0) return true;\n return this.#commit(new Set());\n }\n\n /**\n * Replaces the current selection with `rows`. Used by the public\n * {@link ApexGrid.selectedRows} setter so callers can drive selection\n * programmatically. Single-mode keeps at most one row.\n */\n public async replaceSelection(rows: ReadonlyArray<T>): Promise<boolean> {\n if (!this.enabled) return false;\n const next = new Set(this.mode === 'single' ? rows.slice(0, 1) : rows);\n return this.#commit(next);\n }\n\n async #commit(next: Set<T>): Promise<boolean> {\n const added: T[] = [];\n const removed: T[] = [];\n for (const row of next) {\n if (!this.selected.has(row)) added.push(row);\n }\n for (const row of this.selected) {\n if (!next.has(row)) removed.push(row);\n }\n if (added.length === 0 && removed.length === 0) return true;\n\n const proceed = this.host.emitEvent('rowSelecting', {\n detail: {\n added,\n removed,\n current: Array.from(this.selected),\n next: Array.from(next),\n },\n cancelable: true,\n });\n if (!proceed) return false;\n\n this.selected = next;\n this.host.requestUpdate();\n\n const total = this.selected.size;\n if (total === 0) {\n this.host.announce('Selection cleared');\n } else if (added.length === 1 && removed.length === 0 && total === 1) {\n this.host.announce('1 row selected');\n } else {\n this.host.announce(`${total} rows selected`);\n }\n\n this.host.emitEvent('rowSelected', {\n detail: { added, removed, selected: Array.from(this.selected) },\n });\n return true;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/controllers/selection.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport type { GridHost, SelectionMode } from '../internal/types.js';\n\n/**\n * The default selection configuration used when the grid has none set.\n */\nexport const DEFAULT_SELECTION_CONFIG = Object.freeze({\n enabled: false,\n mode: 'multiple' as SelectionMode,\n showCheckboxColumn: false,\n});\n\n/**\n * Reactive controller backing row selection.\n *\n * @remarks\n * Selection state is reference-based — the controller holds a `Set` of row\n * data references so the selection survives sort / filter / pagination as\n * long as those operations preserve identities (the default in-place\n * pipeline does). Replacing {@link ApexGrid.data} wholesale will invalidate\n * any selected rows that are no longer present in the new array; consumers\n * should call {@link clear} or re-apply selection after such a change.\n *\n * Mutations go through the cancellable `rowSelecting` event and emit a\n * follow-up `rowSelected` event, mirroring the pattern used by editing.\n */\nexport class SelectionController<T extends object> implements ReactiveController {\n /** Set of currently selected row data references. */\n public selected: Set<T> = new Set();\n\n /**\n * Anchor row for Shift+click range selection. Set whenever a single row\n * is toggled / picked so a follow-up Shift+click knows where to start.\n */\n public anchor: T | null = null;\n\n constructor(protected host: GridHost<T>) {\n this.host.addController(this);\n }\n\n public hostConnected() {}\n\n /**\n * Whether selection is enabled at the grid level.\n */\n public get enabled(): boolean {\n return Boolean(this.host.selection?.enabled);\n }\n\n /**\n * The resolved selection mode (`'multiple'` if unset).\n */\n public get mode(): SelectionMode {\n return this.host.selection?.mode ?? DEFAULT_SELECTION_CONFIG.mode;\n }\n\n /**\n * Whether to render the built-in checkbox column.\n */\n public get showCheckboxColumn(): boolean {\n return (\n this.enabled &&\n (this.host.selection?.showCheckboxColumn ?? DEFAULT_SELECTION_CONFIG.showCheckboxColumn)\n );\n }\n\n /**\n * Whether the given row is currently selected.\n */\n public isSelected(row: T): boolean {\n return this.selected.has(row);\n }\n\n /**\n * Returns the currently selected rows in insertion order.\n */\n public selectedRows(): T[] {\n return Array.from(this.selected);\n }\n\n /**\n * Whether every row in the current view ({@link ApexGrid.dataView}) is\n * selected. Used by the header checkbox to render its \"all\" state.\n */\n public allSelected(): boolean {\n const view = this.host.dataView;\n if (view.length === 0) return false;\n return view.every((row) => this.selected.has(row as T));\n }\n\n /**\n * Whether some — but not all — rows in the current view are selected.\n * Used to render the header checkbox in its indeterminate state.\n */\n public someSelected(): boolean {\n if (this.selected.size === 0) return false;\n if (this.allSelected()) return false;\n return true;\n }\n\n /**\n * Toggles selection of `row`. In `'single'` mode this either selects the\n * row (replacing any previous selection) or deselects it if it was the\n * only selected row.\n */\n public async toggleRow(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n const next = new Set(this.selected);\n if (next.has(row)) {\n next.delete(row);\n } else {\n if (this.mode === 'single') next.clear();\n next.add(row);\n }\n this.anchor = next.has(row) ? row : null;\n return this.#commit(next);\n }\n\n /**\n * Adds `row` to the selection. In `'single'` mode the existing selection\n * is cleared first.\n */\n public async selectRow(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n const next = new Set(this.mode === 'single' ? [] : this.selected);\n next.add(row);\n this.anchor = row;\n return this.#commit(next);\n }\n\n /**\n * Removes `row` from the selection.\n */\n public async deselectRow(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n if (!this.selected.has(row)) return true;\n const next = new Set(this.selected);\n next.delete(row);\n return this.#commit(next);\n }\n\n /**\n * Adds `row` to the selection without affecting other selected rows\n * (`'multiple'` mode only). In `'single'` mode this behaves like\n * {@link selectRow}.\n */\n public async additiveToggle(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n if (this.mode === 'single') return this.toggleRow(row);\n const next = new Set(this.selected);\n if (next.has(row)) {\n next.delete(row);\n } else {\n next.add(row);\n }\n this.anchor = next.has(row) ? row : this.anchor;\n return this.#commit(next);\n }\n\n /**\n * Selects every row between {@link anchor} and `row` (inclusive) in the\n * current page view. No-op in `'single'` mode or when no anchor is set —\n * in those cases the call falls back to a plain {@link selectRow}.\n */\n public async rangeToggle(row: T): Promise<boolean> {\n if (!this.enabled) return false;\n if (this.mode === 'single' || !this.anchor) {\n return this.selectRow(row);\n }\n const pageItems = this.host.pageItems as ReadonlyArray<T>;\n const startIdx = pageItems.indexOf(this.anchor);\n const endIdx = pageItems.indexOf(row);\n if (startIdx === -1 || endIdx === -1) {\n return this.selectRow(row);\n }\n const [lo, hi] = startIdx < endIdx ? [startIdx, endIdx] : [endIdx, startIdx];\n const next = new Set(this.selected);\n for (let i = lo; i <= hi; i++) {\n next.add(pageItems[i] as T);\n }\n return this.#commit(next);\n }\n\n /**\n * Selects every row currently in view ({@link ApexGrid.dataView}). No-op\n * in `'single'` mode.\n */\n public async selectAll(): Promise<boolean> {\n if (!this.enabled || this.mode === 'single') return false;\n const next = new Set(this.host.dataView as ReadonlyArray<T>);\n return this.#commit(next);\n }\n\n /**\n * Clears the selection.\n */\n public async clear(): Promise<boolean> {\n if (this.selected.size === 0) return true;\n return this.#commit(new Set());\n }\n\n /**\n * Replaces the current selection with `rows`. Used by the public\n * {@link ApexGrid.selectedRows} setter so callers can drive selection\n * programmatically. Single-mode keeps at most one row.\n */\n public async replaceSelection(rows: ReadonlyArray<T>): Promise<boolean> {\n if (!this.enabled) return false;\n const next = new Set(this.mode === 'single' ? rows.slice(0, 1) : rows);\n return this.#commit(next);\n }\n\n async #commit(next: Set<T>): Promise<boolean> {\n const added: T[] = [];\n const removed: T[] = [];\n for (const row of next) {\n if (!this.selected.has(row)) added.push(row);\n }\n for (const row of this.selected) {\n if (!next.has(row)) removed.push(row);\n }\n if (added.length === 0 && removed.length === 0) return true;\n\n const proceed = this.host.emitEvent('rowSelecting', {\n detail: {\n added,\n removed,\n current: Array.from(this.selected),\n next: Array.from(next),\n },\n cancelable: true,\n });\n if (!proceed) return false;\n\n this.selected = next;\n this.host.requestUpdate();\n\n const total = this.selected.size;\n if (total === 0) {\n this.host.announce(this.host.localize('announce.selectionCleared'));\n } else if (added.length === 1 && removed.length === 0 && total === 1) {\n this.host.announce(this.host.localize('announce.rowSelected'));\n } else {\n this.host.announce(this.host.localize('announce.rowsSelected', { count: total }));\n }\n\n this.host.emitEvent('rowSelected', {\n detail: { added, removed, selected: Array.from(this.selected) },\n });\n return true;\n }\n}\n"]}
|
package/controllers/sort.js
CHANGED
|
@@ -75,8 +75,10 @@ export class SortController {
|
|
|
75
75
|
#announce(expression, column) {
|
|
76
76
|
const label = column.headerText ?? String(column.key);
|
|
77
77
|
const message = expression.direction === 'none'
|
|
78
|
-
?
|
|
79
|
-
:
|
|
78
|
+
? this.host.localize('announce.sortCleared', { label })
|
|
79
|
+
: this.host.localize(expression.direction === 'ascending'
|
|
80
|
+
? 'announce.sortedAscending'
|
|
81
|
+
: 'announce.sortedDescending', { label });
|
|
80
82
|
this.host.announce(message);
|
|
81
83
|
}
|
|
82
84
|
#captureRowRects() {
|
package/controllers/sort.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/controllers/sort.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport { PIPELINE } from '../internal/constants.js';\nimport { awaitChildUpdates, type KeyedFlipEntry, playKeyedFlip } from '../internal/flip.js';\nimport type {\n ColumnConfiguration,\n ColumnSortConfiguration,\n GridHost,\n Keys,\n} from '../internal/types.js';\nimport { asArray } from '../internal/utils.js';\nimport type { SortExpression, SortingDirection, SortState } from '../operations/sort/types.js';\n\nexport class SortController<T extends object> implements ReactiveController {\n constructor(protected host: GridHost<T>) {\n this.host.addController(this);\n }\n\n public state: SortState<T> = new Map();\n\n get #isMultipleSort() {\n return this.host.sortConfiguration.multiple;\n }\n\n get #isTriStateSort() {\n return this.host.sortConfiguration.triState;\n }\n\n #resolveSortOptions(options?: boolean | ColumnSortConfiguration<T>) {\n const expr: Pick<SortExpression<T>, 'caseSensitive' | 'comparer'> = {\n caseSensitive: false,\n comparer: undefined,\n };\n\n if (!options || typeof options === 'boolean') {\n return expr as Partial<SortExpression<T>>;\n }\n\n return Object.assign(expr, {\n caseSensitive: options.caseSensitive,\n comparer: options.comparer,\n }) as Partial<SortExpression<T>>;\n }\n\n #createDefaultExpression(key: Keys<T>) {\n const options = this.host.getColumn(key)?.sort;\n\n return {\n key,\n direction: 'ascending',\n ...this.#resolveSortOptions(options),\n } as SortExpression<T>;\n }\n\n #orderBy(dir?: SortingDirection): SortingDirection {\n return this.#isTriStateSort\n ? dir === 'ascending'\n ? 'descending'\n : dir === 'descending'\n ? 'none'\n : 'ascending'\n : dir === 'ascending'\n ? 'descending'\n : 'ascending';\n }\n\n #emitSortingEvent(detail: SortExpression<T>) {\n return this.host.emitEvent('sorting', { detail, cancelable: true });\n }\n\n #emitSortedEvent(detail: SortExpression<T>) {\n return this.host.emitEvent('sorted', { detail });\n }\n\n #setExpression(expression: SortExpression<T>) {\n expression.direction === 'none'\n ? this.reset(expression.key)\n : this.state.set(expression.key, { ...expression });\n }\n\n public async sortFromHeaderClick(column: ColumnConfiguration<T>, additive = false) {\n const expression = this.prepareExpression(column);\n\n if (!this.#emitSortingEvent(expression)) {\n return;\n }\n\n // A plain click sorts by this column alone, clearing any other sorted\n // columns. Only a Ctrl/Cmd+click while multi-sort is enabled keeps the\n // existing sort keys and appends this column as an additional, lower-\n // priority sort. Without this gate every plain click would accumulate a\n // key, so a second column added behind a unique primary column would not\n // change the visible order at all.\n if (!this.#isMultipleSort || !additive) {\n this.reset();\n }\n\n // Capture visible-row rects keyed by data identity BEFORE the pipeline\n // runs. After the new render the virtualizer will have repositioned\n // rows; we use those captured rects as the \"First\" of a FLIP and\n // animate each row from its old viewport position back to identity.\n const beforeRects = this.#captureRowRects();\n\n this._sort(expression);\n\n await this.host.updateComplete;\n // Wait for body row updates so the new data is committed to each row\n // element before measuring the \"Last\" rect — otherwise the captured-\n // before and measured-after rects match and the animation no-ops.\n await awaitChildUpdates(this.host.rows);\n this.#playRowFlip(beforeRects);\n this.#announce(expression, column);\n this.#emitSortedEvent(expression);\n }\n\n #announce(expression: SortExpression<T>, column: ColumnConfiguration<T>) {\n const label = column.headerText ?? String(column.key);\n const message =\n expression.direction === 'none'\n ? `Sort cleared on ${label}`\n : `Sorted by ${label} ${expression.direction}`;\n this.host.announce(message);\n }\n\n #captureRowRects(): KeyedFlipEntry<T>[] {\n const entries: KeyedFlipEntry<T>[] = [];\n for (const row of this.host.rows) {\n const el = row as unknown as HTMLElement;\n entries.push({ key: row.data, rect: el.getBoundingClientRect() });\n }\n return entries;\n }\n\n #playRowFlip(before: ReadonlyArray<KeyedFlipEntry<T>>) {\n // After sort, the same data may be rendered by a different `<apex-grid-row>`\n // DOM element (virtualizer recycles rows). Resolve by data identity.\n const rows = this.host.rows;\n const byData = new Map<T, HTMLElement>();\n for (const row of rows) {\n byData.set(row.data, row as unknown as HTMLElement);\n }\n playKeyedFlip(before, (data) => byData.get(data) ?? null, 'y');\n }\n\n public prepareExpression({ key, sort: options }: ColumnConfiguration<T>): SortExpression<T> {\n if (this.state.has(key)) {\n const expr = this.state.get(key)!;\n\n return Object.assign(expr, {\n direction: this.#orderBy(expr.direction),\n ...this.#resolveSortOptions(options),\n });\n }\n\n // Initial state\n return this.#createDefaultExpression(key);\n }\n\n public reset(key?: Keys<T>) {\n key ? this.state.delete(key) : this.state.clear();\n }\n\n get #rowReorder() {\n // @ts-expect-error - protected member access\n return this.host.stateController.rowReorder as\n | { hasManualOrder: boolean; clearManualOrder(announce?: boolean): void }\n | undefined;\n }\n\n protected _sort(expressions: SortExpression<T> | SortExpression<T>[]) {\n const exprs = asArray(expressions);\n // Applying a sort is mutually exclusive with a manual row order (F5):\n // a real sort (any non-`none` direction) clears it, with an announcement.\n const reorder = this.#rowReorder;\n if (reorder?.hasManualOrder && exprs.some((expr) => expr.direction !== 'none')) {\n reorder.clearManualOrder(true);\n }\n\n for (const expr of exprs) {\n this.#setExpression(expr);\n }\n\n this.host.requestUpdate(PIPELINE);\n }\n\n public sort(expressions: SortExpression<T> | SortExpression<T>[]) {\n this._sort(\n asArray(expressions).map((expr) =>\n Object.assign(this.state.get(expr.key) ?? this.#createDefaultExpression(expr.key), expr)\n )\n );\n }\n\n public hostConnected() {}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/controllers/sort.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport { PIPELINE } from '../internal/constants.js';\nimport { awaitChildUpdates, type KeyedFlipEntry, playKeyedFlip } from '../internal/flip.js';\nimport type {\n ColumnConfiguration,\n ColumnSortConfiguration,\n GridHost,\n Keys,\n} from '../internal/types.js';\nimport { asArray } from '../internal/utils.js';\nimport type { SortExpression, SortingDirection, SortState } from '../operations/sort/types.js';\n\nexport class SortController<T extends object> implements ReactiveController {\n constructor(protected host: GridHost<T>) {\n this.host.addController(this);\n }\n\n public state: SortState<T> = new Map();\n\n get #isMultipleSort() {\n return this.host.sortConfiguration.multiple;\n }\n\n get #isTriStateSort() {\n return this.host.sortConfiguration.triState;\n }\n\n #resolveSortOptions(options?: boolean | ColumnSortConfiguration<T>) {\n const expr: Pick<SortExpression<T>, 'caseSensitive' | 'comparer'> = {\n caseSensitive: false,\n comparer: undefined,\n };\n\n if (!options || typeof options === 'boolean') {\n return expr as Partial<SortExpression<T>>;\n }\n\n return Object.assign(expr, {\n caseSensitive: options.caseSensitive,\n comparer: options.comparer,\n }) as Partial<SortExpression<T>>;\n }\n\n #createDefaultExpression(key: Keys<T>) {\n const options = this.host.getColumn(key)?.sort;\n\n return {\n key,\n direction: 'ascending',\n ...this.#resolveSortOptions(options),\n } as SortExpression<T>;\n }\n\n #orderBy(dir?: SortingDirection): SortingDirection {\n return this.#isTriStateSort\n ? dir === 'ascending'\n ? 'descending'\n : dir === 'descending'\n ? 'none'\n : 'ascending'\n : dir === 'ascending'\n ? 'descending'\n : 'ascending';\n }\n\n #emitSortingEvent(detail: SortExpression<T>) {\n return this.host.emitEvent('sorting', { detail, cancelable: true });\n }\n\n #emitSortedEvent(detail: SortExpression<T>) {\n return this.host.emitEvent('sorted', { detail });\n }\n\n #setExpression(expression: SortExpression<T>) {\n expression.direction === 'none'\n ? this.reset(expression.key)\n : this.state.set(expression.key, { ...expression });\n }\n\n public async sortFromHeaderClick(column: ColumnConfiguration<T>, additive = false) {\n const expression = this.prepareExpression(column);\n\n if (!this.#emitSortingEvent(expression)) {\n return;\n }\n\n // A plain click sorts by this column alone, clearing any other sorted\n // columns. Only a Ctrl/Cmd+click while multi-sort is enabled keeps the\n // existing sort keys and appends this column as an additional, lower-\n // priority sort. Without this gate every plain click would accumulate a\n // key, so a second column added behind a unique primary column would not\n // change the visible order at all.\n if (!this.#isMultipleSort || !additive) {\n this.reset();\n }\n\n // Capture visible-row rects keyed by data identity BEFORE the pipeline\n // runs. After the new render the virtualizer will have repositioned\n // rows; we use those captured rects as the \"First\" of a FLIP and\n // animate each row from its old viewport position back to identity.\n const beforeRects = this.#captureRowRects();\n\n this._sort(expression);\n\n await this.host.updateComplete;\n // Wait for body row updates so the new data is committed to each row\n // element before measuring the \"Last\" rect — otherwise the captured-\n // before and measured-after rects match and the animation no-ops.\n await awaitChildUpdates(this.host.rows);\n this.#playRowFlip(beforeRects);\n this.#announce(expression, column);\n this.#emitSortedEvent(expression);\n }\n\n #announce(expression: SortExpression<T>, column: ColumnConfiguration<T>) {\n const label = column.headerText ?? String(column.key);\n const message =\n expression.direction === 'none'\n ? this.host.localize('announce.sortCleared', { label })\n : this.host.localize(\n expression.direction === 'ascending'\n ? 'announce.sortedAscending'\n : 'announce.sortedDescending',\n { label }\n );\n this.host.announce(message);\n }\n\n #captureRowRects(): KeyedFlipEntry<T>[] {\n const entries: KeyedFlipEntry<T>[] = [];\n for (const row of this.host.rows) {\n const el = row as unknown as HTMLElement;\n entries.push({ key: row.data, rect: el.getBoundingClientRect() });\n }\n return entries;\n }\n\n #playRowFlip(before: ReadonlyArray<KeyedFlipEntry<T>>) {\n // After sort, the same data may be rendered by a different `<apex-grid-row>`\n // DOM element (virtualizer recycles rows). Resolve by data identity.\n const rows = this.host.rows;\n const byData = new Map<T, HTMLElement>();\n for (const row of rows) {\n byData.set(row.data, row as unknown as HTMLElement);\n }\n playKeyedFlip(before, (data) => byData.get(data) ?? null, 'y');\n }\n\n public prepareExpression({ key, sort: options }: ColumnConfiguration<T>): SortExpression<T> {\n if (this.state.has(key)) {\n const expr = this.state.get(key)!;\n\n return Object.assign(expr, {\n direction: this.#orderBy(expr.direction),\n ...this.#resolveSortOptions(options),\n });\n }\n\n // Initial state\n return this.#createDefaultExpression(key);\n }\n\n public reset(key?: Keys<T>) {\n key ? this.state.delete(key) : this.state.clear();\n }\n\n get #rowReorder() {\n // @ts-expect-error - protected member access\n return this.host.stateController.rowReorder as\n | { hasManualOrder: boolean; clearManualOrder(announce?: boolean): void }\n | undefined;\n }\n\n protected _sort(expressions: SortExpression<T> | SortExpression<T>[]) {\n const exprs = asArray(expressions);\n // Applying a sort is mutually exclusive with a manual row order (F5):\n // a real sort (any non-`none` direction) clears it, with an announcement.\n const reorder = this.#rowReorder;\n if (reorder?.hasManualOrder && exprs.some((expr) => expr.direction !== 'none')) {\n reorder.clearManualOrder(true);\n }\n\n for (const expr of exprs) {\n this.#setExpression(expr);\n }\n\n this.host.requestUpdate(PIPELINE);\n }\n\n public sort(expressions: SortExpression<T> | SortExpression<T>[]) {\n this._sort(\n asArray(expressions).map((expr) =>\n Object.assign(this.state.get(expr.key) ?? this.#createDefaultExpression(expr.key), expr)\n )\n );\n }\n\n public hostConnected() {}\n}\n"]}
|
package/custom-elements.json
CHANGED
|
@@ -1205,6 +1205,16 @@
|
|
|
1205
1205
|
"text": "unknown"
|
|
1206
1206
|
}
|
|
1207
1207
|
},
|
|
1208
|
+
{
|
|
1209
|
+
"kind": "field",
|
|
1210
|
+
"name": "#refocusAfterEdit",
|
|
1211
|
+
"privacy": "private",
|
|
1212
|
+
"type": {
|
|
1213
|
+
"text": "boolean"
|
|
1214
|
+
},
|
|
1215
|
+
"default": "false",
|
|
1216
|
+
"description": "Set by keyboard-driven commit/cancel so `updated` refocuses the cell host."
|
|
1217
|
+
},
|
|
1208
1218
|
{
|
|
1209
1219
|
"kind": "field",
|
|
1210
1220
|
"name": "#commitWith",
|
|
@@ -1466,11 +1476,52 @@
|
|
|
1466
1476
|
}
|
|
1467
1477
|
]
|
|
1468
1478
|
},
|
|
1479
|
+
{
|
|
1480
|
+
"kind": "method",
|
|
1481
|
+
"name": "#selectOption",
|
|
1482
|
+
"privacy": "private",
|
|
1483
|
+
"parameters": [
|
|
1484
|
+
{
|
|
1485
|
+
"name": "target",
|
|
1486
|
+
"type": {
|
|
1487
|
+
"text": "HTMLElement | null"
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1490
|
+
]
|
|
1491
|
+
},
|
|
1469
1492
|
{
|
|
1470
1493
|
"kind": "field",
|
|
1471
1494
|
"name": "#handleDropdownItemClick",
|
|
1472
1495
|
"privacy": "private"
|
|
1473
1496
|
},
|
|
1497
|
+
{
|
|
1498
|
+
"kind": "method",
|
|
1499
|
+
"name": "#dropdownOptions",
|
|
1500
|
+
"privacy": "private",
|
|
1501
|
+
"return": {
|
|
1502
|
+
"type": {
|
|
1503
|
+
"text": "HTMLElement[]"
|
|
1504
|
+
}
|
|
1505
|
+
}
|
|
1506
|
+
},
|
|
1507
|
+
{
|
|
1508
|
+
"kind": "method",
|
|
1509
|
+
"name": "#focusDropdownOption",
|
|
1510
|
+
"privacy": "private",
|
|
1511
|
+
"description": "Moves focus into the dropdown, landing on the selected (or first) option."
|
|
1512
|
+
},
|
|
1513
|
+
{
|
|
1514
|
+
"kind": "field",
|
|
1515
|
+
"name": "#handleTriggerKeydown",
|
|
1516
|
+
"privacy": "private",
|
|
1517
|
+
"description": "ArrowDown on the condition trigger opens the listbox and focuses into it."
|
|
1518
|
+
},
|
|
1519
|
+
{
|
|
1520
|
+
"kind": "field",
|
|
1521
|
+
"name": "#handleDropdownKeydown",
|
|
1522
|
+
"privacy": "private",
|
|
1523
|
+
"description": "Listbox keyboard pattern: arrows/Home/End rove, Enter/Space pick."
|
|
1524
|
+
},
|
|
1474
1525
|
{
|
|
1475
1526
|
"kind": "field",
|
|
1476
1527
|
"name": "#handleOutsidePointer",
|
|
@@ -2467,6 +2518,16 @@
|
|
|
2467
2518
|
"name": "quickFilterChanged",
|
|
2468
2519
|
"privacy": "protected"
|
|
2469
2520
|
},
|
|
2521
|
+
{
|
|
2522
|
+
"kind": "field",
|
|
2523
|
+
"name": "#autoAriaLabel",
|
|
2524
|
+
"privacy": "private",
|
|
2525
|
+
"type": {
|
|
2526
|
+
"text": "string | null"
|
|
2527
|
+
},
|
|
2528
|
+
"default": "null",
|
|
2529
|
+
"description": "The `aria-label` value this grid last auto-applied (never an author's)."
|
|
2530
|
+
},
|
|
2470
2531
|
{
|
|
2471
2532
|
"kind": "field",
|
|
2472
2533
|
"name": "#stateChangedListeners",
|
|
@@ -3265,6 +3326,20 @@
|
|
|
3265
3326
|
}
|
|
3266
3327
|
]
|
|
3267
3328
|
},
|
|
3329
|
+
{
|
|
3330
|
+
"kind": "method",
|
|
3331
|
+
"name": "bodyFocusHandler",
|
|
3332
|
+
"privacy": "protected",
|
|
3333
|
+
"parameters": [
|
|
3334
|
+
{
|
|
3335
|
+
"name": "event",
|
|
3336
|
+
"type": {
|
|
3337
|
+
"text": "FocusEvent"
|
|
3338
|
+
}
|
|
3339
|
+
}
|
|
3340
|
+
],
|
|
3341
|
+
"description": "Tabbing into the grid body lands on the scroll container; forward focus to\nthe active cell (when one exists) so the roving tab stop is honored."
|
|
3342
|
+
},
|
|
3268
3343
|
{
|
|
3269
3344
|
"kind": "method",
|
|
3270
3345
|
"name": "bodyPointerHandler",
|
|
@@ -4003,6 +4078,52 @@
|
|
|
4003
4078
|
"name": "#handleMenuOutside",
|
|
4004
4079
|
"privacy": "private"
|
|
4005
4080
|
},
|
|
4081
|
+
{
|
|
4082
|
+
"kind": "field",
|
|
4083
|
+
"name": "#handleMenuTriggerKeydown",
|
|
4084
|
+
"privacy": "private",
|
|
4085
|
+
"description": "ArrowDown on the kebab opens the menu and moves focus to its first item."
|
|
4086
|
+
},
|
|
4087
|
+
{
|
|
4088
|
+
"kind": "method",
|
|
4089
|
+
"name": "#menuItems",
|
|
4090
|
+
"privacy": "private",
|
|
4091
|
+
"return": {
|
|
4092
|
+
"type": {
|
|
4093
|
+
"text": "HTMLElement[]"
|
|
4094
|
+
}
|
|
4095
|
+
}
|
|
4096
|
+
},
|
|
4097
|
+
{
|
|
4098
|
+
"kind": "method",
|
|
4099
|
+
"name": "#focusMenuItem",
|
|
4100
|
+
"privacy": "private",
|
|
4101
|
+
"parameters": [
|
|
4102
|
+
{
|
|
4103
|
+
"name": "index",
|
|
4104
|
+
"type": {
|
|
4105
|
+
"text": "number"
|
|
4106
|
+
}
|
|
4107
|
+
}
|
|
4108
|
+
]
|
|
4109
|
+
},
|
|
4110
|
+
{
|
|
4111
|
+
"kind": "method",
|
|
4112
|
+
"name": "#closeMenu",
|
|
4113
|
+
"privacy": "private",
|
|
4114
|
+
"parameters": [
|
|
4115
|
+
{
|
|
4116
|
+
"name": "returnFocus",
|
|
4117
|
+
"default": "false"
|
|
4118
|
+
}
|
|
4119
|
+
]
|
|
4120
|
+
},
|
|
4121
|
+
{
|
|
4122
|
+
"kind": "field",
|
|
4123
|
+
"name": "#handleColMenuKeydown",
|
|
4124
|
+
"privacy": "private",
|
|
4125
|
+
"description": "Menu keyboard pattern: arrows/Home/End rove, Escape closes and restores focus."
|
|
4126
|
+
},
|
|
4006
4127
|
{
|
|
4007
4128
|
"kind": "method",
|
|
4008
4129
|
"name": "renderSortPart",
|
|
@@ -6317,6 +6438,25 @@
|
|
|
6317
6438
|
}
|
|
6318
6439
|
]
|
|
6319
6440
|
},
|
|
6441
|
+
{
|
|
6442
|
+
"kind": "method",
|
|
6443
|
+
"name": "#announce",
|
|
6444
|
+
"privacy": "private",
|
|
6445
|
+
"parameters": [
|
|
6446
|
+
{
|
|
6447
|
+
"name": "key",
|
|
6448
|
+
"type": {
|
|
6449
|
+
"text": "Keys<T>"
|
|
6450
|
+
}
|
|
6451
|
+
},
|
|
6452
|
+
{
|
|
6453
|
+
"name": "kind",
|
|
6454
|
+
"type": {
|
|
6455
|
+
"text": "'applied' | 'cleared'"
|
|
6456
|
+
}
|
|
6457
|
+
}
|
|
6458
|
+
]
|
|
6459
|
+
},
|
|
6320
6460
|
{
|
|
6321
6461
|
"kind": "method",
|
|
6322
6462
|
"name": "filter",
|
|
@@ -6590,9 +6730,9 @@
|
|
|
6590
6730
|
}
|
|
6591
6731
|
},
|
|
6592
6732
|
{
|
|
6593
|
-
"name": "
|
|
6733
|
+
"name": "kind",
|
|
6594
6734
|
"type": {
|
|
6595
|
-
"text": "
|
|
6735
|
+
"text": "'undo' | 'redo'"
|
|
6596
6736
|
}
|
|
6597
6737
|
}
|
|
6598
6738
|
]
|
|
@@ -6642,7 +6782,7 @@
|
|
|
6642
6782
|
"kind": "field",
|
|
6643
6783
|
"name": "handlers",
|
|
6644
6784
|
"privacy": "protected",
|
|
6645
|
-
"default": "new Map( Object.entries({ ArrowDown: this.arrowDown, ArrowUp: this.arrowUp, ArrowLeft: this.arrowLeft, ArrowRight: this.arrowRight, Home: this.home, End: this.end, ' ': this.toggleSelection, }) )"
|
|
6785
|
+
"default": "new Map( Object.entries({ ArrowDown: this.arrowDown, ArrowUp: this.arrowUp, ArrowLeft: this.arrowLeft, ArrowRight: this.arrowRight, Home: this.home, End: this.end, PageUp: this.pageUp, PageDown: this.pageDown, ' ': this.toggleSelection, }) )"
|
|
6646
6786
|
},
|
|
6647
6787
|
{
|
|
6648
6788
|
"kind": "field",
|
|
@@ -6741,6 +6881,22 @@
|
|
|
6741
6881
|
}
|
|
6742
6882
|
]
|
|
6743
6883
|
},
|
|
6884
|
+
{
|
|
6885
|
+
"kind": "method",
|
|
6886
|
+
"name": "findActiveCell",
|
|
6887
|
+
"privacy": "protected"
|
|
6888
|
+
},
|
|
6889
|
+
{
|
|
6890
|
+
"kind": "method",
|
|
6891
|
+
"name": "focusActiveCell",
|
|
6892
|
+
"privacy": "public",
|
|
6893
|
+
"return": {
|
|
6894
|
+
"type": {
|
|
6895
|
+
"text": "void"
|
|
6896
|
+
}
|
|
6897
|
+
},
|
|
6898
|
+
"description": "Moves real DOM focus to the active cell (the grid body's roving tab stop),\nso screen readers track keyboard navigation. Waits for the host render to\ncommit the cell's `active` state, then retries once on the next frame to\ncover virtualizer re-materialization after a long jump. No-op while no\ncell is active (the scroll container keeps focus as the entry point)."
|
|
6899
|
+
},
|
|
6744
6900
|
{
|
|
6745
6901
|
"kind": "field",
|
|
6746
6902
|
"name": "active",
|
|
@@ -6749,11 +6905,46 @@
|
|
|
6749
6905
|
{
|
|
6750
6906
|
"kind": "method",
|
|
6751
6907
|
"name": "home",
|
|
6752
|
-
"privacy": "protected"
|
|
6908
|
+
"privacy": "protected",
|
|
6909
|
+
"description": "Home moves to the first cell in the row (ARIA grid pattern)."
|
|
6753
6910
|
},
|
|
6754
6911
|
{
|
|
6755
6912
|
"kind": "method",
|
|
6756
6913
|
"name": "end",
|
|
6914
|
+
"privacy": "protected",
|
|
6915
|
+
"description": "End moves to the last cell in the row (ARIA grid pattern)."
|
|
6916
|
+
},
|
|
6917
|
+
{
|
|
6918
|
+
"kind": "method",
|
|
6919
|
+
"name": "ctrlHome",
|
|
6920
|
+
"privacy": "protected",
|
|
6921
|
+
"description": "Ctrl/Cmd+Home moves to the first cell of the grid."
|
|
6922
|
+
},
|
|
6923
|
+
{
|
|
6924
|
+
"kind": "method",
|
|
6925
|
+
"name": "ctrlEnd",
|
|
6926
|
+
"privacy": "protected",
|
|
6927
|
+
"description": "Ctrl/Cmd+End moves to the last cell of the grid."
|
|
6928
|
+
},
|
|
6929
|
+
{
|
|
6930
|
+
"kind": "method",
|
|
6931
|
+
"name": "pageStep",
|
|
6932
|
+
"privacy": "protected",
|
|
6933
|
+
"return": {
|
|
6934
|
+
"type": {
|
|
6935
|
+
"text": "number"
|
|
6936
|
+
}
|
|
6937
|
+
},
|
|
6938
|
+
"description": "Rows per Page Up/Down step, derived from the host viewport and the height\nof a rendered row (fallback: 10 rows when nothing is measurable yet)."
|
|
6939
|
+
},
|
|
6940
|
+
{
|
|
6941
|
+
"kind": "method",
|
|
6942
|
+
"name": "pageUp",
|
|
6943
|
+
"privacy": "protected"
|
|
6944
|
+
},
|
|
6945
|
+
{
|
|
6946
|
+
"kind": "method",
|
|
6947
|
+
"name": "pageDown",
|
|
6757
6948
|
"privacy": "protected"
|
|
6758
6949
|
},
|
|
6759
6950
|
{
|
|
@@ -6791,6 +6982,31 @@
|
|
|
6791
6982
|
"name": "hostDisconnected",
|
|
6792
6983
|
"privacy": "public"
|
|
6793
6984
|
},
|
|
6985
|
+
{
|
|
6986
|
+
"kind": "field",
|
|
6987
|
+
"name": "editing",
|
|
6988
|
+
"privacy": "protected",
|
|
6989
|
+
"readonly": true
|
|
6990
|
+
},
|
|
6991
|
+
{
|
|
6992
|
+
"kind": "method",
|
|
6993
|
+
"name": "handleEditKey",
|
|
6994
|
+
"privacy": "protected",
|
|
6995
|
+
"return": {
|
|
6996
|
+
"type": {
|
|
6997
|
+
"text": "boolean"
|
|
6998
|
+
}
|
|
6999
|
+
},
|
|
7000
|
+
"parameters": [
|
|
7001
|
+
{
|
|
7002
|
+
"name": "event",
|
|
7003
|
+
"type": {
|
|
7004
|
+
"text": "KeyboardEvent"
|
|
7005
|
+
}
|
|
7006
|
+
}
|
|
7007
|
+
],
|
|
7008
|
+
"description": "Enter / F2 on the active cell opens its editor (the keyboard path into\nedit mode). Returns `true` when the event was consumed."
|
|
7009
|
+
},
|
|
6794
7010
|
{
|
|
6795
7011
|
"kind": "field",
|
|
6796
7012
|
"name": "rowReorder",
|
|
@@ -9743,9 +9959,9 @@
|
|
|
9743
9959
|
"kind": "variable",
|
|
9744
9960
|
"name": "EN_LOCALE",
|
|
9745
9961
|
"type": {
|
|
9746
|
-
"text": "{\n // Pagination\n 'pagination.label': 'Grid pagination',\n 'pagination.controls': 'Pagination controls',\n 'pagination.rowsPerPage': 'Rows per page',\n 'pagination.firstPage': 'Go to first page',\n 'pagination.previousPage': 'Go to previous page',\n 'pagination.nextPage': 'Go to next page',\n 'pagination.lastPage': 'Go to last page',\n 'pagination.summary': '{start}-{end} of {total}',\n 'pagination.summaryEmpty': '0 of 0',\n\n // Filtering: operators\n 'filter.operator.contains': 'Contains',\n 'filter.operator.doesNotContain': 'Does not contain',\n 'filter.operator.startsWith': 'Starts with',\n 'filter.operator.endsWith': 'Ends with',\n 'filter.operator.equals': 'Equals',\n 'filter.operator.doesNotEqual': 'Does not equal',\n 'filter.operator.greaterThan': 'Greater than',\n 'filter.operator.lessThan': 'Less than',\n 'filter.operator.greaterThanOrEqual': 'Greater than or equal',\n 'filter.operator.lessThanOrEqual': 'Less than or equal',\n 'filter.operator.empty': 'Empty',\n 'filter.operator.notEmpty': 'Not empty',\n 'filter.operator.all': 'All',\n 'filter.operator.true': 'True',\n 'filter.operator.false': 'False',\n\n // Filtering: UI\n 'filter.filter': 'Filter',\n 'filter.reset': 'Reset',\n 'filter.close': 'Close',\n 'filter.removeFilter': 'Remove filter',\n 'filter.conditionList': 'Filter condition',\n 'filter.changeCondition': 'Change filter condition',\n 'filter.inputPlaceholder': 'Add filter value',\n\n // Rows: selection / expansion\n 'row.select': 'Select row',\n 'row.expand': 'Expand row',\n 'row.collapse': 'Collapse row',\n 'row.detail': 'Row detail',\n 'header.selectAll': 'Select all rows',\n 'header.expandAll': 'Expand all rows',\n 'header.collapseAll': 'Collapse all rows',\n\n // Toolbar\n 'toolbar.label': 'Grid toolbar',\n 'toolbar.searchPlaceholder': 'Search…',\n 'toolbar.export': 'Export',\n 'toolbar.exportOptions': 'Export options',\n 'toolbar.createChart': 'Create chart',\n 'toolbar.exportXlsx': 'Export XLSX',\n 'toolbar.askAI': 'Ask AI',\n\n // Enterprise: set filter\n 'setFilter.searchPlaceholder': 'Search values…',\n 'setFilter.noValues': 'No values',\n 'setFilter.selectAll': '(Select all)',\n 'setFilter.clearFilter': 'Clear filter',\n 'setFilter.blanks': '(Blanks)',\n\n // Enterprise: status bar\n 'statusBar.selectRange': 'Select a range of cells',\n 'statusBar.count': 'Count',\n 'statusBar.sum': 'Sum',\n 'statusBar.average': 'Avg',\n 'statusBar.min': 'Min',\n 'statusBar.max': 'Max',\n\n // Enterprise: tool panel\n 'toolPanel.noGrid': 'No grid connected',\n 'toolPanel.columns': 'Columns',\n 'toolPanel.searchPlaceholder': 'Search columns…',\n 'toolPanel.pinColumn': 'Pin column',\n 'toolPanel.moveUp': 'Move up',\n 'toolPanel.moveDown': 'Move down',\n 'toolPanel.groupByColumn': 'Group by this column',\n 'toolPanel.pivotMode': 'Pivot mode',\n 'toolPanel.rowGroups': 'Row Groups',\n 'toolPanel.rowGroupsPivot': 'Row Groups (pivot rows)',\n 'toolPanel.values': 'Values',\n 'toolPanel.columnLabels': 'Column Labels',\n 'toolPanel.dragColumns': 'Drag columns here',\n 'toolPanel.removeChip': 'Remove',\n\n // Enterprise: context menu\n 'contextMenu.sortAsc': 'Sort ascending',\n 'contextMenu.sortDesc': 'Sort descending',\n 'contextMenu.clearSort': 'Clear sort',\n 'contextMenu.pinStart': 'Pin to start',\n 'contextMenu.pinEnd': 'Pin to end',\n 'contextMenu.unpin': 'Unpin',\n 'contextMenu.hideColumn': 'Hide column',\n 'contextMenu.copy': 'Copy',\n\n // Enterprise: charts\n 'chart.close': 'Close',\n 'chart.placeholder': 'Select cells, or group/pivot the grid, to chart it.',\n 'chart.chartRange': 'Chart range',\n 'chart.countSeries': 'Count',\n 'chart.type.column': 'Column',\n 'chart.type.bar': 'Bar',\n 'chart.type.line': 'Line',\n 'chart.type.area': 'Area',\n 'chart.type.pie': 'Pie',\n 'chart.type.donut': 'Donut',\n 'chart.type.scatter': 'Scatter',\n 'chart.type.radar': 'Radar',\n 'chart.type.combo': 'Combo',\n 'chart.type.auto': 'Auto',\n\n // Enterprise: row grouping\n 'grouping.blank': '(blank)',\n 'grouping.expandGroup': 'Expand group',\n 'grouping.collapseGroup': 'Collapse group',\n 'grouping.announceExpanded': 'Expanded group {label}',\n 'grouping.announceCollapsed': 'Collapsed group {label}',\n\n // Enterprise: pivot\n 'pivot.blank': '(blank)',\n\n // Enterprise: range selection\n 'rangeSelection.copied': 'Copied selection to the clipboard',\n 'rangeSelection.pasted': 'Pasted {rows} × {cols} cells',\n\n // Enterprise: AI Toolkit\n 'ai.title': 'Ask AI',\n 'ai.placeholder': 'Ask the grid to sort, filter, group, or answer a question…',\n 'ai.modeControl': 'Change the grid',\n 'ai.modeAsk': 'Ask a question',\n 'ai.send': 'Send',\n 'ai.cancel': 'Cancel',\n 'ai.thinking': 'Thinking…',\n 'ai.undo': 'Undo',\n 'ai.applied': 'Applied',\n 'ai.noChanges': 'No changes were applied.',\n 'ai.warnings': 'Notes',\n 'ai.answer': 'Answer',\n 'ai.error': 'Something went wrong.',\n 'ai.
|
|
9962
|
+
"text": "{\n // Pagination\n 'pagination.label': 'Grid pagination',\n 'pagination.controls': 'Pagination controls',\n 'pagination.rowsPerPage': 'Rows per page',\n 'pagination.firstPage': 'Go to first page',\n 'pagination.previousPage': 'Go to previous page',\n 'pagination.nextPage': 'Go to next page',\n 'pagination.lastPage': 'Go to last page',\n 'pagination.summary': '{start}-{end} of {total}',\n 'pagination.summaryEmpty': '0 of 0',\n\n // Filtering: operators\n 'filter.operator.contains': 'Contains',\n 'filter.operator.doesNotContain': 'Does not contain',\n 'filter.operator.startsWith': 'Starts with',\n 'filter.operator.endsWith': 'Ends with',\n 'filter.operator.equals': 'Equals',\n 'filter.operator.doesNotEqual': 'Does not equal',\n 'filter.operator.greaterThan': 'Greater than',\n 'filter.operator.lessThan': 'Less than',\n 'filter.operator.greaterThanOrEqual': 'Greater than or equal',\n 'filter.operator.lessThanOrEqual': 'Less than or equal',\n 'filter.operator.empty': 'Empty',\n 'filter.operator.notEmpty': 'Not empty',\n 'filter.operator.all': 'All',\n 'filter.operator.true': 'True',\n 'filter.operator.false': 'False',\n\n // Filtering: UI\n 'filter.filter': 'Filter',\n 'filter.reset': 'Reset',\n 'filter.close': 'Close',\n 'filter.removeFilter': 'Remove filter',\n 'filter.conditionList': 'Filter condition',\n 'filter.changeCondition': 'Change filter condition',\n 'filter.inputPlaceholder': 'Add filter value',\n\n // Rows: selection / expansion\n 'row.select': 'Select row',\n 'row.expand': 'Expand row',\n 'row.collapse': 'Collapse row',\n 'row.detail': 'Row detail',\n 'header.selectAll': 'Select all rows',\n 'header.expandAll': 'Expand all rows',\n 'header.collapseAll': 'Collapse all rows',\n\n // Toolbar\n 'toolbar.label': 'Grid toolbar',\n 'toolbar.searchPlaceholder': 'Search…',\n 'toolbar.export': 'Export',\n 'toolbar.exportOptions': 'Export options',\n 'toolbar.createChart': 'Create chart',\n 'toolbar.exportXlsx': 'Export XLSX',\n 'toolbar.askAI': 'Ask AI',\n\n // Grid host\n 'grid.label': 'Data grid',\n\n // Header controls\n 'header.sortedAscending': 'Sorted ascending. Activate to sort descending.',\n 'header.sortedDescending': 'Sorted descending. Activate to clear sort.',\n 'header.notSorted': 'Not sorted. Activate to sort ascending.',\n 'header.filterColumn': 'Filter column',\n 'header.columnMenu': 'Column menu',\n 'header.autosizeColumn': 'Autosize column',\n\n // Editors\n 'editor.rating': 'Rating',\n\n // Live-region announcements\n 'announce.sortedAscending': 'Sorted by {label} ascending',\n 'announce.sortedDescending': 'Sorted by {label} descending',\n 'announce.sortCleared': 'Sort cleared on {label}',\n 'announce.filtered': 'Filter applied to {label}',\n 'announce.filterCleared': 'Filter cleared on {label}',\n 'announce.selectionCleared': 'Selection cleared',\n 'announce.rowSelected': '1 row selected',\n 'announce.rowsSelected': '{count} rows selected',\n 'announce.page': 'Page {page} of {total}',\n 'announce.undoOne': 'Undo 1 cell change',\n 'announce.undoMany': 'Undo {count} cell changes',\n 'announce.redoOne': 'Redo 1 cell change',\n 'announce.redoMany': 'Redo {count} cell changes',\n 'announce.rowExpanded': 'Row expanded',\n 'announce.rowCollapsed': 'Row collapsed',\n 'announce.rowsExpanded': '{count} rows expanded',\n 'announce.allRowsCollapsed': 'All rows collapsed',\n 'announce.rowPinnedTop': 'Row pinned to top',\n 'announce.rowPinnedBottom': 'Row pinned to bottom',\n 'announce.rowUnpinned': 'Row unpinned',\n 'announce.rowGrabbed': 'Row grabbed. Use arrow keys to move, Enter to drop, Escape to cancel.',\n 'announce.rowMovedTo': 'Row moved to position {position}',\n 'announce.rowDropped': 'Row dropped',\n 'announce.reorderCancelled': 'Reorder cancelled',\n 'announce.rowMoved': 'Row moved',\n 'announce.manualOrderCleared': 'Manual row order cleared',\n\n // Enterprise: set filter\n 'setFilter.searchPlaceholder': 'Search values…',\n 'setFilter.noValues': 'No values',\n 'setFilter.selectAll': '(Select all)',\n 'setFilter.clearFilter': 'Clear filter',\n 'setFilter.blanks': '(Blanks)',\n\n // Enterprise: status bar\n 'statusBar.selectRange': 'Select a range of cells',\n 'statusBar.count': 'Count',\n 'statusBar.sum': 'Sum',\n 'statusBar.average': 'Avg',\n 'statusBar.min': 'Min',\n 'statusBar.max': 'Max',\n\n // Enterprise: tool panel\n 'toolPanel.noGrid': 'No grid connected',\n 'toolPanel.columns': 'Columns',\n 'toolPanel.searchPlaceholder': 'Search columns…',\n 'toolPanel.pinColumn': 'Pin column',\n 'toolPanel.moveUp': 'Move up',\n 'toolPanel.moveDown': 'Move down',\n 'toolPanel.groupByColumn': 'Group by this column',\n 'toolPanel.pivotMode': 'Pivot mode',\n 'toolPanel.rowGroups': 'Row Groups',\n 'toolPanel.rowGroupsPivot': 'Row Groups (pivot rows)',\n 'toolPanel.values': 'Values',\n 'toolPanel.columnLabels': 'Column Labels',\n 'toolPanel.dragColumns': 'Drag columns here',\n 'toolPanel.removeChip': 'Remove',\n\n // Enterprise: context menu\n 'contextMenu.sortAsc': 'Sort ascending',\n 'contextMenu.sortDesc': 'Sort descending',\n 'contextMenu.clearSort': 'Clear sort',\n 'contextMenu.pinStart': 'Pin to start',\n 'contextMenu.pinEnd': 'Pin to end',\n 'contextMenu.unpin': 'Unpin',\n 'contextMenu.hideColumn': 'Hide column',\n 'contextMenu.copy': 'Copy',\n\n // Enterprise: charts\n 'chart.close': 'Close',\n 'chart.placeholder': 'Select cells, or group/pivot the grid, to chart it.',\n 'chart.chartRange': 'Chart range',\n 'chart.chartView': 'Chart this view',\n 'chart.selectionHint': 'Chart the selection (Alt+F1)',\n 'chart.countSeries': 'Count',\n 'chart.export': 'Export',\n 'chart.exportPng': 'PNG image',\n 'chart.exportSvg': 'SVG vector',\n 'chart.copyImage': 'Copy image',\n 'chart.imageCopied': 'Chart image copied to clipboard',\n 'chart.suggested': 'Suggested',\n 'chart.suggestedHint': 'Let ApexGrid pick the best chart type for this data',\n 'chart.by': 'by',\n 'chart.renameHint': 'Double-click to rename',\n 'chart.emptyTitle': 'Nothing to chart yet',\n 'chart.emptyRange': 'Select a range of cells, or',\n 'chart.emptyView': 'group or pivot the grid',\n 'chart.swapAxes': 'Swap axes (horizontal)',\n 'chart.swapAxesHint': 'Swap the X and Y axes (horizontal bars)',\n 'chart.data': 'Data',\n 'chart.mapCategory': 'Category (X)',\n 'chart.mapSeries': 'Series (Y)',\n 'chart.mapAggregation': 'Aggregation',\n 'chart.secondaryAxis': 'Draw on the secondary (right) axis',\n 'chart.secondaryAxisShort': '2nd axis',\n 'chart.calcFields': 'Calculated fields',\n 'chart.calcName': 'Name (e.g. Bonus %)',\n 'chart.calcFormula': 'Formula (e.g. B1 / A1 * 100)',\n 'chart.calcAdd': 'Add field',\n 'chart.calcRemove': 'Remove calculated field',\n 'chart.agg.sum': 'Sum',\n 'chart.agg.avg': 'Average',\n 'chart.agg.count': 'Count',\n 'chart.agg.min': 'Minimum',\n 'chart.agg.max': 'Maximum',\n 'chart.agg.median': 'Median',\n 'chart.format': 'Format',\n 'chart.legend': 'Legend',\n 'chart.dataLabels': 'Data labels',\n 'chart.gridlines': 'Gridlines',\n 'chart.numberFormat': 'Number format',\n 'chart.seriesColors': 'Colors',\n 'chart.format.none': 'Plain',\n 'chart.format.currency': 'Currency',\n 'chart.format.percent': 'Percent',\n 'chart.format.thousands': 'Thousands',\n 'chart.trendline': 'Trend line',\n 'chart.referenceLine': 'Reference line',\n 'chart.referenceBand': 'Reference band',\n 'chart.bandFrom': 'From',\n 'chart.bandTo': 'To',\n 'chart.forecast': 'Forecast periods',\n 'chart.forecastBand': 'Forecast band',\n 'chart.axisTitleX': 'X-axis title',\n 'chart.axisTitleY': 'Y-axis title',\n 'chart.type.column': 'Column',\n 'chart.type.bar': 'Bar',\n 'chart.type.line': 'Line',\n 'chart.type.area': 'Area',\n 'chart.type.pie': 'Pie',\n 'chart.type.donut': 'Donut',\n 'chart.type.scatter': 'Scatter',\n 'chart.type.radar': 'Radar',\n 'chart.type.combo': 'Combo',\n 'chart.type.auto': 'Auto',\n\n // Enterprise: row grouping\n 'grouping.blank': '(blank)',\n 'grouping.expandGroup': 'Expand group',\n 'grouping.collapseGroup': 'Collapse group',\n 'grouping.announceExpanded': 'Expanded group {label}',\n 'grouping.announceCollapsed': 'Collapsed group {label}',\n\n // Enterprise: pivot\n 'pivot.blank': '(blank)',\n\n // Enterprise: range selection\n 'rangeSelection.copied': 'Copied selection to the clipboard',\n 'rangeSelection.pasted': 'Pasted {rows} × {cols} cells',\n\n // Enterprise: AI Toolkit\n 'ai.title': 'Ask AI',\n 'ai.placeholder': 'Ask the grid to sort, filter, group, or answer a question…',\n 'ai.modeControl': 'Change the grid',\n 'ai.modeAsk': 'Ask a question',\n 'ai.send': 'Send',\n 'ai.cancel': 'Cancel',\n 'ai.thinking': 'Thinking…',\n 'ai.undo': 'Undo',\n 'ai.applied': 'Applied',\n 'ai.noChanges': 'No changes were applied.',\n 'ai.warnings': 'Notes',\n 'ai.answer': 'Answer',\n 'ai.error': 'Something went wrong.',\n 'ai.close': 'Close',\n 'ai.preview': 'Preview',\n 'ai.previewHeading': 'Would run (not applied):',\n 'ai.previewEmpty': 'Nothing to run.',\n 'ai.viaRule': 'Rule engine',\n 'ai.viaAI': 'AI',\n 'ai.history': 'History',\n 'ai.clearHistory': 'Clear',\n 'ai.abstained': 'I could not turn that into a grid action.',\n 'ai.abstainedHint': 'Try sorting, filtering, or grouping, or ask a question about the data.',\n\n // Formulas (enterprise)\n 'formula.editorLabel': 'Formula',\n 'formula.invalid': 'Invalid formula',\n 'formula.error.ref': 'Invalid cell reference',\n 'formula.error.name': 'Unknown function',\n 'formula.error.div0': 'Division by zero',\n 'formula.error.value': 'Invalid value',\n 'formula.error.cycle': 'Circular reference',\n}"
|
|
9747
9963
|
},
|
|
9748
|
-
"default": "{ // Pagination 'pagination.label': 'Grid pagination', 'pagination.controls': 'Pagination controls', 'pagination.rowsPerPage': 'Rows per page', 'pagination.firstPage': 'Go to first page', 'pagination.previousPage': 'Go to previous page', 'pagination.nextPage': 'Go to next page', 'pagination.lastPage': 'Go to last page', 'pagination.summary': '{start}-{end} of {total}', 'pagination.summaryEmpty': '0 of 0', // Filtering: operators 'filter.operator.contains': 'Contains', 'filter.operator.doesNotContain': 'Does not contain', 'filter.operator.startsWith': 'Starts with', 'filter.operator.endsWith': 'Ends with', 'filter.operator.equals': 'Equals', 'filter.operator.doesNotEqual': 'Does not equal', 'filter.operator.greaterThan': 'Greater than', 'filter.operator.lessThan': 'Less than', 'filter.operator.greaterThanOrEqual': 'Greater than or equal', 'filter.operator.lessThanOrEqual': 'Less than or equal', 'filter.operator.empty': 'Empty', 'filter.operator.notEmpty': 'Not empty', 'filter.operator.all': 'All', 'filter.operator.true': 'True', 'filter.operator.false': 'False', // Filtering: UI 'filter.filter': 'Filter', 'filter.reset': 'Reset', 'filter.close': 'Close', 'filter.removeFilter': 'Remove filter', 'filter.conditionList': 'Filter condition', 'filter.changeCondition': 'Change filter condition', 'filter.inputPlaceholder': 'Add filter value', // Rows: selection / expansion 'row.select': 'Select row', 'row.expand': 'Expand row', 'row.collapse': 'Collapse row', 'row.detail': 'Row detail', 'header.selectAll': 'Select all rows', 'header.expandAll': 'Expand all rows', 'header.collapseAll': 'Collapse all rows', // Toolbar 'toolbar.label': 'Grid toolbar', 'toolbar.searchPlaceholder': 'Search…', 'toolbar.export': 'Export', 'toolbar.exportOptions': 'Export options', 'toolbar.createChart': 'Create chart', 'toolbar.exportXlsx': 'Export XLSX', 'toolbar.askAI': 'Ask AI', // Enterprise: set filter 'setFilter.searchPlaceholder': 'Search values…', 'setFilter.noValues': 'No values', 'setFilter.selectAll': '(Select all)', 'setFilter.clearFilter': 'Clear filter', 'setFilter.blanks': '(Blanks)', // Enterprise: status bar 'statusBar.selectRange': 'Select a range of cells', 'statusBar.count': 'Count', 'statusBar.sum': 'Sum', 'statusBar.average': 'Avg', 'statusBar.min': 'Min', 'statusBar.max': 'Max', // Enterprise: tool panel 'toolPanel.noGrid': 'No grid connected', 'toolPanel.columns': 'Columns', 'toolPanel.searchPlaceholder': 'Search columns…', 'toolPanel.pinColumn': 'Pin column', 'toolPanel.moveUp': 'Move up', 'toolPanel.moveDown': 'Move down', 'toolPanel.groupByColumn': 'Group by this column', 'toolPanel.pivotMode': 'Pivot mode', 'toolPanel.rowGroups': 'Row Groups', 'toolPanel.rowGroupsPivot': 'Row Groups (pivot rows)', 'toolPanel.values': 'Values', 'toolPanel.columnLabels': 'Column Labels', 'toolPanel.dragColumns': 'Drag columns here', 'toolPanel.removeChip': 'Remove', // Enterprise: context menu 'contextMenu.sortAsc': 'Sort ascending', 'contextMenu.sortDesc': 'Sort descending', 'contextMenu.clearSort': 'Clear sort', 'contextMenu.pinStart': 'Pin to start', 'contextMenu.pinEnd': 'Pin to end', 'contextMenu.unpin': 'Unpin', 'contextMenu.hideColumn': 'Hide column', 'contextMenu.copy': 'Copy', // Enterprise: charts 'chart.close': 'Close', 'chart.placeholder': 'Select cells, or group/pivot the grid, to chart it.', 'chart.chartRange': 'Chart range', 'chart.countSeries': 'Count', 'chart.type.column': 'Column', 'chart.type.bar': 'Bar', 'chart.type.line': 'Line', 'chart.type.area': 'Area', 'chart.type.pie': 'Pie', 'chart.type.donut': 'Donut', 'chart.type.scatter': 'Scatter', 'chart.type.radar': 'Radar', 'chart.type.combo': 'Combo', 'chart.type.auto': 'Auto', // Enterprise: row grouping 'grouping.blank': '(blank)', 'grouping.expandGroup': 'Expand group', 'grouping.collapseGroup': 'Collapse group', 'grouping.announceExpanded': 'Expanded group {label}', 'grouping.announceCollapsed': 'Collapsed group {label}', // Enterprise: pivot 'pivot.blank': '(blank)', // Enterprise: range selection 'rangeSelection.copied': 'Copied selection to the clipboard', 'rangeSelection.pasted': 'Pasted {rows} × {cols} cells', // Enterprise: AI Toolkit 'ai.title': 'Ask AI', 'ai.placeholder': 'Ask the grid to sort, filter, group, or answer a question…', 'ai.modeControl': 'Change the grid', 'ai.modeAsk': 'Ask a question', 'ai.send': 'Send', 'ai.cancel': 'Cancel', 'ai.thinking': 'Thinking…', 'ai.undo': 'Undo', 'ai.applied': 'Applied', 'ai.noChanges': 'No changes were applied.', 'ai.warnings': 'Notes', 'ai.answer': 'Answer', 'ai.error': 'Something went wrong.', 'ai.
|
|
9964
|
+
"default": "{ // Pagination 'pagination.label': 'Grid pagination', 'pagination.controls': 'Pagination controls', 'pagination.rowsPerPage': 'Rows per page', 'pagination.firstPage': 'Go to first page', 'pagination.previousPage': 'Go to previous page', 'pagination.nextPage': 'Go to next page', 'pagination.lastPage': 'Go to last page', 'pagination.summary': '{start}-{end} of {total}', 'pagination.summaryEmpty': '0 of 0', // Filtering: operators 'filter.operator.contains': 'Contains', 'filter.operator.doesNotContain': 'Does not contain', 'filter.operator.startsWith': 'Starts with', 'filter.operator.endsWith': 'Ends with', 'filter.operator.equals': 'Equals', 'filter.operator.doesNotEqual': 'Does not equal', 'filter.operator.greaterThan': 'Greater than', 'filter.operator.lessThan': 'Less than', 'filter.operator.greaterThanOrEqual': 'Greater than or equal', 'filter.operator.lessThanOrEqual': 'Less than or equal', 'filter.operator.empty': 'Empty', 'filter.operator.notEmpty': 'Not empty', 'filter.operator.all': 'All', 'filter.operator.true': 'True', 'filter.operator.false': 'False', // Filtering: UI 'filter.filter': 'Filter', 'filter.reset': 'Reset', 'filter.close': 'Close', 'filter.removeFilter': 'Remove filter', 'filter.conditionList': 'Filter condition', 'filter.changeCondition': 'Change filter condition', 'filter.inputPlaceholder': 'Add filter value', // Rows: selection / expansion 'row.select': 'Select row', 'row.expand': 'Expand row', 'row.collapse': 'Collapse row', 'row.detail': 'Row detail', 'header.selectAll': 'Select all rows', 'header.expandAll': 'Expand all rows', 'header.collapseAll': 'Collapse all rows', // Toolbar 'toolbar.label': 'Grid toolbar', 'toolbar.searchPlaceholder': 'Search…', 'toolbar.export': 'Export', 'toolbar.exportOptions': 'Export options', 'toolbar.createChart': 'Create chart', 'toolbar.exportXlsx': 'Export XLSX', 'toolbar.askAI': 'Ask AI', // Grid host 'grid.label': 'Data grid', // Header controls 'header.sortedAscending': 'Sorted ascending. Activate to sort descending.', 'header.sortedDescending': 'Sorted descending. Activate to clear sort.', 'header.notSorted': 'Not sorted. Activate to sort ascending.', 'header.filterColumn': 'Filter column', 'header.columnMenu': 'Column menu', 'header.autosizeColumn': 'Autosize column', // Editors 'editor.rating': 'Rating', // Live-region announcements 'announce.sortedAscending': 'Sorted by {label} ascending', 'announce.sortedDescending': 'Sorted by {label} descending', 'announce.sortCleared': 'Sort cleared on {label}', 'announce.filtered': 'Filter applied to {label}', 'announce.filterCleared': 'Filter cleared on {label}', 'announce.selectionCleared': 'Selection cleared', 'announce.rowSelected': '1 row selected', 'announce.rowsSelected': '{count} rows selected', 'announce.page': 'Page {page} of {total}', 'announce.undoOne': 'Undo 1 cell change', 'announce.undoMany': 'Undo {count} cell changes', 'announce.redoOne': 'Redo 1 cell change', 'announce.redoMany': 'Redo {count} cell changes', 'announce.rowExpanded': 'Row expanded', 'announce.rowCollapsed': 'Row collapsed', 'announce.rowsExpanded': '{count} rows expanded', 'announce.allRowsCollapsed': 'All rows collapsed', 'announce.rowPinnedTop': 'Row pinned to top', 'announce.rowPinnedBottom': 'Row pinned to bottom', 'announce.rowUnpinned': 'Row unpinned', 'announce.rowGrabbed': 'Row grabbed. Use arrow keys to move, Enter to drop, Escape to cancel.', 'announce.rowMovedTo': 'Row moved to position {position}', 'announce.rowDropped': 'Row dropped', 'announce.reorderCancelled': 'Reorder cancelled', 'announce.rowMoved': 'Row moved', 'announce.manualOrderCleared': 'Manual row order cleared', // Enterprise: set filter 'setFilter.searchPlaceholder': 'Search values…', 'setFilter.noValues': 'No values', 'setFilter.selectAll': '(Select all)', 'setFilter.clearFilter': 'Clear filter', 'setFilter.blanks': '(Blanks)', // Enterprise: status bar 'statusBar.selectRange': 'Select a range of cells', 'statusBar.count': 'Count', 'statusBar.sum': 'Sum', 'statusBar.average': 'Avg', 'statusBar.min': 'Min', 'statusBar.max': 'Max', // Enterprise: tool panel 'toolPanel.noGrid': 'No grid connected', 'toolPanel.columns': 'Columns', 'toolPanel.searchPlaceholder': 'Search columns…', 'toolPanel.pinColumn': 'Pin column', 'toolPanel.moveUp': 'Move up', 'toolPanel.moveDown': 'Move down', 'toolPanel.groupByColumn': 'Group by this column', 'toolPanel.pivotMode': 'Pivot mode', 'toolPanel.rowGroups': 'Row Groups', 'toolPanel.rowGroupsPivot': 'Row Groups (pivot rows)', 'toolPanel.values': 'Values', 'toolPanel.columnLabels': 'Column Labels', 'toolPanel.dragColumns': 'Drag columns here', 'toolPanel.removeChip': 'Remove', // Enterprise: context menu 'contextMenu.sortAsc': 'Sort ascending', 'contextMenu.sortDesc': 'Sort descending', 'contextMenu.clearSort': 'Clear sort', 'contextMenu.pinStart': 'Pin to start', 'contextMenu.pinEnd': 'Pin to end', 'contextMenu.unpin': 'Unpin', 'contextMenu.hideColumn': 'Hide column', 'contextMenu.copy': 'Copy', // Enterprise: charts 'chart.close': 'Close', 'chart.placeholder': 'Select cells, or group/pivot the grid, to chart it.', 'chart.chartRange': 'Chart range', 'chart.chartView': 'Chart this view', 'chart.selectionHint': 'Chart the selection (Alt+F1)', 'chart.countSeries': 'Count', 'chart.export': 'Export', 'chart.exportPng': 'PNG image', 'chart.exportSvg': 'SVG vector', 'chart.copyImage': 'Copy image', 'chart.imageCopied': 'Chart image copied to clipboard', 'chart.suggested': 'Suggested', 'chart.suggestedHint': 'Let ApexGrid pick the best chart type for this data', 'chart.by': 'by', 'chart.renameHint': 'Double-click to rename', 'chart.emptyTitle': 'Nothing to chart yet', 'chart.emptyRange': 'Select a range of cells, or', 'chart.emptyView': 'group or pivot the grid', 'chart.swapAxes': 'Swap axes (horizontal)', 'chart.swapAxesHint': 'Swap the X and Y axes (horizontal bars)', 'chart.data': 'Data', 'chart.mapCategory': 'Category (X)', 'chart.mapSeries': 'Series (Y)', 'chart.mapAggregation': 'Aggregation', 'chart.secondaryAxis': 'Draw on the secondary (right) axis', 'chart.secondaryAxisShort': '2nd axis', 'chart.calcFields': 'Calculated fields', 'chart.calcName': 'Name (e.g. Bonus %)', 'chart.calcFormula': 'Formula (e.g. B1 / A1 * 100)', 'chart.calcAdd': 'Add field', 'chart.calcRemove': 'Remove calculated field', 'chart.agg.sum': 'Sum', 'chart.agg.avg': 'Average', 'chart.agg.count': 'Count', 'chart.agg.min': 'Minimum', 'chart.agg.max': 'Maximum', 'chart.agg.median': 'Median', 'chart.format': 'Format', 'chart.legend': 'Legend', 'chart.dataLabels': 'Data labels', 'chart.gridlines': 'Gridlines', 'chart.numberFormat': 'Number format', 'chart.seriesColors': 'Colors', 'chart.format.none': 'Plain', 'chart.format.currency': 'Currency', 'chart.format.percent': 'Percent', 'chart.format.thousands': 'Thousands', 'chart.trendline': 'Trend line', 'chart.referenceLine': 'Reference line', 'chart.referenceBand': 'Reference band', 'chart.bandFrom': 'From', 'chart.bandTo': 'To', 'chart.forecast': 'Forecast periods', 'chart.forecastBand': 'Forecast band', 'chart.axisTitleX': 'X-axis title', 'chart.axisTitleY': 'Y-axis title', 'chart.type.column': 'Column', 'chart.type.bar': 'Bar', 'chart.type.line': 'Line', 'chart.type.area': 'Area', 'chart.type.pie': 'Pie', 'chart.type.donut': 'Donut', 'chart.type.scatter': 'Scatter', 'chart.type.radar': 'Radar', 'chart.type.combo': 'Combo', 'chart.type.auto': 'Auto', // Enterprise: row grouping 'grouping.blank': '(blank)', 'grouping.expandGroup': 'Expand group', 'grouping.collapseGroup': 'Collapse group', 'grouping.announceExpanded': 'Expanded group {label}', 'grouping.announceCollapsed': 'Collapsed group {label}', // Enterprise: pivot 'pivot.blank': '(blank)', // Enterprise: range selection 'rangeSelection.copied': 'Copied selection to the clipboard', 'rangeSelection.pasted': 'Pasted {rows} × {cols} cells', // Enterprise: AI Toolkit 'ai.title': 'Ask AI', 'ai.placeholder': 'Ask the grid to sort, filter, group, or answer a question…', 'ai.modeControl': 'Change the grid', 'ai.modeAsk': 'Ask a question', 'ai.send': 'Send', 'ai.cancel': 'Cancel', 'ai.thinking': 'Thinking…', 'ai.undo': 'Undo', 'ai.applied': 'Applied', 'ai.noChanges': 'No changes were applied.', 'ai.warnings': 'Notes', 'ai.answer': 'Answer', 'ai.error': 'Something went wrong.', 'ai.close': 'Close', 'ai.preview': 'Preview', 'ai.previewHeading': 'Would run (not applied):', 'ai.previewEmpty': 'Nothing to run.', 'ai.viaRule': 'Rule engine', 'ai.viaAI': 'AI', 'ai.history': 'History', 'ai.clearHistory': 'Clear', 'ai.abstained': 'I could not turn that into a grid action.', 'ai.abstainedHint': 'Try sorting, filtering, or grouping, or ask a question about the data.', // Formulas (enterprise) 'formula.editorLabel': 'Formula', 'formula.invalid': 'Invalid formula', 'formula.error.ref': 'Invalid cell reference', 'formula.error.name': 'Unknown function', 'formula.error.div0': 'Division by zero', 'formula.error.value': 'Invalid value', 'formula.error.cycle': 'Circular reference', }",
|
|
9749
9965
|
"description": "Default English locale dictionary: the single source of truth for every\nbuilt-in, user-facing string the community grid renders."
|
|
9750
9966
|
}
|
|
9751
9967
|
],
|
|
@@ -9770,7 +9986,7 @@
|
|
|
9770
9986
|
"type": {
|
|
9771
9987
|
"text": "GridLocaleText"
|
|
9772
9988
|
},
|
|
9773
|
-
"default": "{ // Paginación 'pagination.label': 'Paginación de la tabla', 'pagination.controls': 'Controles de paginación', 'pagination.rowsPerPage': 'Filas por página', 'pagination.firstPage': 'Ir a la primera página', 'pagination.previousPage': 'Ir a la página anterior', 'pagination.nextPage': 'Ir a la página siguiente', 'pagination.lastPage': 'Ir a la última página', 'pagination.summary': '{start}-{end} de {total}', 'pagination.summaryEmpty': '0 de 0', // Filtrado: operadores 'filter.operator.contains': 'Contiene', 'filter.operator.doesNotContain': 'No contiene', 'filter.operator.startsWith': 'Empieza por', 'filter.operator.endsWith': 'Termina en', 'filter.operator.equals': 'Igual a', 'filter.operator.doesNotEqual': 'Distinto de', 'filter.operator.greaterThan': 'Mayor que', 'filter.operator.lessThan': 'Menor que', 'filter.operator.greaterThanOrEqual': 'Mayor o igual que', 'filter.operator.lessThanOrEqual': 'Menor o igual que', 'filter.operator.empty': 'Vacío', 'filter.operator.notEmpty': 'No vacío', 'filter.operator.all': 'Todos', 'filter.operator.true': 'Verdadero', 'filter.operator.false': 'Falso', // Filtrado: interfaz 'filter.filter': 'Filtrar', 'filter.reset': 'Restablecer', 'filter.close': 'Cerrar', 'filter.removeFilter': 'Quitar filtro', 'filter.conditionList': 'Condición de filtro', 'filter.changeCondition': 'Cambiar condición de filtro', 'filter.inputPlaceholder': 'Añadir valor de filtro', // Filas: selección / expansión 'row.select': 'Seleccionar fila', 'row.expand': 'Expandir fila', 'row.collapse': 'Contraer fila', 'row.detail': 'Detalle de la fila', 'header.selectAll': 'Seleccionar todas las filas', 'header.expandAll': 'Expandir todas las filas', 'header.collapseAll': 'Contraer todas las filas', // Barra de herramientas 'toolbar.label': 'Barra de herramientas de la tabla', 'toolbar.searchPlaceholder': 'Buscar…', 'toolbar.export': 'Exportar', 'toolbar.exportOptions': 'Opciones de exportación', 'toolbar.createChart': 'Crear gráfico', 'toolbar.exportXlsx': 'Exportar XLSX', 'toolbar.askAI': 'Preguntar a la IA', // Enterprise: filtro de conjunto 'setFilter.searchPlaceholder': 'Buscar valores…', 'setFilter.noValues': 'Sin valores', 'setFilter.selectAll': '(Seleccionar todo)', 'setFilter.clearFilter': 'Borrar filtro', 'setFilter.blanks': '(Vacíos)', // Enterprise: barra de estado 'statusBar.selectRange': 'Seleccione un rango de celdas', 'statusBar.count': 'Recuento', 'statusBar.sum': 'Suma', 'statusBar.average': 'Prom.', 'statusBar.min': 'Mín.', 'statusBar.max': 'Máx.', // Enterprise: panel de herramientas 'toolPanel.noGrid': 'Ninguna tabla conectada', 'toolPanel.columns': 'Columnas', 'toolPanel.searchPlaceholder': 'Buscar columnas…', 'toolPanel.pinColumn': 'Fijar columna', 'toolPanel.moveUp': 'Subir', 'toolPanel.moveDown': 'Bajar', 'toolPanel.groupByColumn': 'Agrupar por esta columna', 'toolPanel.pivotMode': 'Modo dinámico', 'toolPanel.rowGroups': 'Grupos de filas', 'toolPanel.rowGroupsPivot': 'Grupos de filas (filas dinámicas)', 'toolPanel.values': 'Valores', 'toolPanel.columnLabels': 'Etiquetas de columna', 'toolPanel.dragColumns': 'Arrastre columnas aquí', 'toolPanel.removeChip': 'Quitar', // Enterprise: menú contextual 'contextMenu.sortAsc': 'Ordenar ascendente', 'contextMenu.sortDesc': 'Ordenar descendente', 'contextMenu.clearSort': 'Quitar orden', 'contextMenu.pinStart': 'Fijar al inicio', 'contextMenu.pinEnd': 'Fijar al final', 'contextMenu.unpin': 'Desfijar', 'contextMenu.hideColumn': 'Ocultar columna', 'contextMenu.copy': 'Copiar', // Enterprise: gráficos 'chart.close': 'Cerrar', 'chart.placeholder': 'Seleccione celdas, o agrupe/pivote la tabla, para graficarla.', 'chart.chartRange': 'Graficar rango', 'chart.countSeries': 'Recuento', 'chart.type.column': 'Columnas', 'chart.type.bar': 'Barras', 'chart.type.line': 'Líneas', 'chart.type.area': 'Área', 'chart.type.pie': 'Circular', 'chart.type.donut': 'Anillo', 'chart.type.scatter': 'Dispersión', 'chart.type.radar': 'Radar', 'chart.type.combo': 'Combinado', 'chart.type.auto': 'Automático', // Enterprise: agrupación de filas 'grouping.blank': '(vacío)', 'grouping.expandGroup': 'Expandir grupo', 'grouping.collapseGroup': 'Contraer grupo', 'grouping.announceExpanded': 'Grupo expandido {label}', 'grouping.announceCollapsed': 'Grupo contraído {label}', // Enterprise: tabla dinámica 'pivot.blank': '(vacío)', // Enterprise: selección de rango 'rangeSelection.copied': 'Selección copiada al portapapeles', 'rangeSelection.pasted': 'Pegadas {rows} × {cols} celdas', // Enterprise: kit de IA 'ai.title': 'Preguntar a la IA', 'ai.placeholder': 'Pide a la tabla ordenar, filtrar, agrupar o responder una pregunta…', 'ai.modeControl': 'Cambiar la tabla', 'ai.modeAsk': 'Hacer una pregunta', 'ai.send': 'Enviar', 'ai.cancel': 'Cancelar', 'ai.thinking': 'Pensando…', 'ai.undo': 'Deshacer', 'ai.applied': 'Aplicado', 'ai.noChanges': 'No se aplicaron cambios.', 'ai.warnings': 'Notas', 'ai.answer': 'Respuesta', 'ai.error': 'Algo salió mal.', 'ai.
|
|
9989
|
+
"default": "{ // Paginación 'pagination.label': 'Paginación de la tabla', 'pagination.controls': 'Controles de paginación', 'pagination.rowsPerPage': 'Filas por página', 'pagination.firstPage': 'Ir a la primera página', 'pagination.previousPage': 'Ir a la página anterior', 'pagination.nextPage': 'Ir a la página siguiente', 'pagination.lastPage': 'Ir a la última página', 'pagination.summary': '{start}-{end} de {total}', 'pagination.summaryEmpty': '0 de 0', // Filtrado: operadores 'filter.operator.contains': 'Contiene', 'filter.operator.doesNotContain': 'No contiene', 'filter.operator.startsWith': 'Empieza por', 'filter.operator.endsWith': 'Termina en', 'filter.operator.equals': 'Igual a', 'filter.operator.doesNotEqual': 'Distinto de', 'filter.operator.greaterThan': 'Mayor que', 'filter.operator.lessThan': 'Menor que', 'filter.operator.greaterThanOrEqual': 'Mayor o igual que', 'filter.operator.lessThanOrEqual': 'Menor o igual que', 'filter.operator.empty': 'Vacío', 'filter.operator.notEmpty': 'No vacío', 'filter.operator.all': 'Todos', 'filter.operator.true': 'Verdadero', 'filter.operator.false': 'Falso', // Filtrado: interfaz 'filter.filter': 'Filtrar', 'filter.reset': 'Restablecer', 'filter.close': 'Cerrar', 'filter.removeFilter': 'Quitar filtro', 'filter.conditionList': 'Condición de filtro', 'filter.changeCondition': 'Cambiar condición de filtro', 'filter.inputPlaceholder': 'Añadir valor de filtro', // Filas: selección / expansión 'row.select': 'Seleccionar fila', 'row.expand': 'Expandir fila', 'row.collapse': 'Contraer fila', 'row.detail': 'Detalle de la fila', 'header.selectAll': 'Seleccionar todas las filas', 'header.expandAll': 'Expandir todas las filas', 'header.collapseAll': 'Contraer todas las filas', // Barra de herramientas 'toolbar.label': 'Barra de herramientas de la tabla', 'toolbar.searchPlaceholder': 'Buscar…', 'toolbar.export': 'Exportar', 'toolbar.exportOptions': 'Opciones de exportación', 'toolbar.createChart': 'Crear gráfico', 'toolbar.exportXlsx': 'Exportar XLSX', 'toolbar.askAI': 'Preguntar a la IA', // Anfitrión de la tabla 'grid.label': 'Tabla de datos', // Controles de cabecera 'header.sortedAscending': 'Orden ascendente. Activar para orden descendente.', 'header.sortedDescending': 'Orden descendente. Activar para quitar el orden.', 'header.notSorted': 'Sin ordenar. Activar para orden ascendente.', 'header.filterColumn': 'Filtrar columna', 'header.columnMenu': 'Menú de columna', 'header.autosizeColumn': 'Autoajustar columna', // Editores 'editor.rating': 'Calificación', // Anuncios de región activa 'announce.sortedAscending': 'Ordenado por {label} ascendente', 'announce.sortedDescending': 'Ordenado por {label} descendente', 'announce.sortCleared': 'Orden quitado en {label}', 'announce.filtered': 'Filtro aplicado a {label}', 'announce.filterCleared': 'Filtro quitado en {label}', 'announce.selectionCleared': 'Selección borrada', 'announce.rowSelected': '1 fila seleccionada', 'announce.rowsSelected': '{count} filas seleccionadas', 'announce.page': 'Página {page} de {total}', 'announce.undoOne': 'Deshacer 1 cambio de celda', 'announce.undoMany': 'Deshacer {count} cambios de celda', 'announce.redoOne': 'Rehacer 1 cambio de celda', 'announce.redoMany': 'Rehacer {count} cambios de celda', 'announce.rowExpanded': 'Fila expandida', 'announce.rowCollapsed': 'Fila contraída', 'announce.rowsExpanded': '{count} filas expandidas', 'announce.allRowsCollapsed': 'Todas las filas contraídas', 'announce.rowPinnedTop': 'Fila fijada arriba', 'announce.rowPinnedBottom': 'Fila fijada abajo', 'announce.rowUnpinned': 'Fila liberada', 'announce.rowGrabbed': 'Fila agarrada. Use las flechas para mover, Enter para soltar, Escape para cancelar.', 'announce.rowMovedTo': 'Fila movida a la posición {position}', 'announce.rowDropped': 'Fila soltada', 'announce.reorderCancelled': 'Reordenación cancelada', 'announce.rowMoved': 'Fila movida', 'announce.manualOrderCleared': 'Orden manual de filas borrado', // Enterprise: filtro de conjunto 'setFilter.searchPlaceholder': 'Buscar valores…', 'setFilter.noValues': 'Sin valores', 'setFilter.selectAll': '(Seleccionar todo)', 'setFilter.clearFilter': 'Borrar filtro', 'setFilter.blanks': '(Vacíos)', // Enterprise: barra de estado 'statusBar.selectRange': 'Seleccione un rango de celdas', 'statusBar.count': 'Recuento', 'statusBar.sum': 'Suma', 'statusBar.average': 'Prom.', 'statusBar.min': 'Mín.', 'statusBar.max': 'Máx.', // Enterprise: panel de herramientas 'toolPanel.noGrid': 'Ninguna tabla conectada', 'toolPanel.columns': 'Columnas', 'toolPanel.searchPlaceholder': 'Buscar columnas…', 'toolPanel.pinColumn': 'Fijar columna', 'toolPanel.moveUp': 'Subir', 'toolPanel.moveDown': 'Bajar', 'toolPanel.groupByColumn': 'Agrupar por esta columna', 'toolPanel.pivotMode': 'Modo dinámico', 'toolPanel.rowGroups': 'Grupos de filas', 'toolPanel.rowGroupsPivot': 'Grupos de filas (filas dinámicas)', 'toolPanel.values': 'Valores', 'toolPanel.columnLabels': 'Etiquetas de columna', 'toolPanel.dragColumns': 'Arrastre columnas aquí', 'toolPanel.removeChip': 'Quitar', // Enterprise: menú contextual 'contextMenu.sortAsc': 'Ordenar ascendente', 'contextMenu.sortDesc': 'Ordenar descendente', 'contextMenu.clearSort': 'Quitar orden', 'contextMenu.pinStart': 'Fijar al inicio', 'contextMenu.pinEnd': 'Fijar al final', 'contextMenu.unpin': 'Desfijar', 'contextMenu.hideColumn': 'Ocultar columna', 'contextMenu.copy': 'Copiar', // Enterprise: gráficos 'chart.close': 'Cerrar', 'chart.placeholder': 'Seleccione celdas, o agrupe/pivote la tabla, para graficarla.', 'chart.chartRange': 'Graficar rango', 'chart.chartView': 'Graficar esta vista', 'chart.selectionHint': 'Graficar la selección (Alt+F1)', 'chart.export': 'Exportar', 'chart.exportPng': 'Imagen PNG', 'chart.exportSvg': 'Vector SVG', 'chart.copyImage': 'Copiar imagen', 'chart.imageCopied': 'Imagen del gráfico copiada al portapapeles', 'chart.suggested': 'Sugerido', 'chart.suggestedHint': 'Deja que ApexGrid elija el mejor tipo de gráfico para estos datos', 'chart.by': 'por', 'chart.renameHint': 'Haz doble clic para renombrar', 'chart.emptyTitle': 'Aún no hay nada que graficar', 'chart.emptyRange': 'Selecciona un rango de celdas, o', 'chart.emptyView': 'agrupa o dinamiza la cuadrícula', 'chart.swapAxes': 'Intercambiar ejes (horizontal)', 'chart.swapAxesHint': 'Intercambia los ejes X e Y (barras horizontales)', 'chart.data': 'Datos', 'chart.mapCategory': 'Categoría (X)', 'chart.mapSeries': 'Series (Y)', 'chart.mapAggregation': 'Agregación', 'chart.secondaryAxis': 'Dibujar en el eje secundario (derecho)', 'chart.secondaryAxisShort': '2.º eje', 'chart.calcFields': 'Campos calculados', 'chart.calcName': 'Nombre (p. ej. Bono %)', 'chart.calcFormula': 'Fórmula (p. ej. B1 / A1 * 100)', 'chart.calcAdd': 'Añadir campo', 'chart.calcRemove': 'Eliminar campo calculado', 'chart.agg.sum': 'Suma', 'chart.agg.avg': 'Promedio', 'chart.agg.count': 'Recuento', 'chart.agg.min': 'Mínimo', 'chart.agg.max': 'Máximo', 'chart.agg.median': 'Mediana', 'chart.format': 'Formato', 'chart.legend': 'Leyenda', 'chart.dataLabels': 'Etiquetas de datos', 'chart.gridlines': 'Líneas de cuadrícula', 'chart.numberFormat': 'Formato numérico', 'chart.seriesColors': 'Colores', 'chart.format.none': 'Simple', 'chart.format.currency': 'Moneda', 'chart.format.percent': 'Porcentaje', 'chart.format.thousands': 'Miles', 'chart.trendline': 'Línea de tendencia', 'chart.referenceLine': 'Línea de referencia', 'chart.referenceBand': 'Banda de referencia', 'chart.bandFrom': 'Desde', 'chart.bandTo': 'Hasta', 'chart.forecast': 'Períodos de pronóstico', 'chart.forecastBand': 'Banda de pronóstico', 'chart.axisTitleX': 'Título del eje X', 'chart.axisTitleY': 'Título del eje Y', 'chart.countSeries': 'Recuento', 'chart.type.column': 'Columnas', 'chart.type.bar': 'Barras', 'chart.type.line': 'Líneas', 'chart.type.area': 'Área', 'chart.type.pie': 'Circular', 'chart.type.donut': 'Anillo', 'chart.type.scatter': 'Dispersión', 'chart.type.radar': 'Radar', 'chart.type.combo': 'Combinado', 'chart.type.auto': 'Automático', // Enterprise: agrupación de filas 'grouping.blank': '(vacío)', 'grouping.expandGroup': 'Expandir grupo', 'grouping.collapseGroup': 'Contraer grupo', 'grouping.announceExpanded': 'Grupo expandido {label}', 'grouping.announceCollapsed': 'Grupo contraído {label}', // Enterprise: tabla dinámica 'pivot.blank': '(vacío)', // Enterprise: selección de rango 'rangeSelection.copied': 'Selección copiada al portapapeles', 'rangeSelection.pasted': 'Pegadas {rows} × {cols} celdas', // Enterprise: kit de IA 'ai.title': 'Preguntar a la IA', 'ai.placeholder': 'Pide a la tabla ordenar, filtrar, agrupar o responder una pregunta…', 'ai.modeControl': 'Cambiar la tabla', 'ai.modeAsk': 'Hacer una pregunta', 'ai.send': 'Enviar', 'ai.cancel': 'Cancelar', 'ai.thinking': 'Pensando…', 'ai.undo': 'Deshacer', 'ai.applied': 'Aplicado', 'ai.noChanges': 'No se aplicaron cambios.', 'ai.warnings': 'Notas', 'ai.answer': 'Respuesta', 'ai.error': 'Algo salió mal.', 'ai.close': 'Cerrar', 'ai.preview': 'Vista previa', 'ai.previewHeading': 'Se ejecutaría (no aplicado):', 'ai.previewEmpty': 'Nada que ejecutar.', 'ai.viaRule': 'Motor de reglas', 'ai.viaAI': 'IA', 'ai.history': 'Historial', 'ai.clearHistory': 'Borrar', 'ai.abstained': 'No pude convertir eso en una acción de la tabla.', 'ai.abstainedHint': 'Prueba a ordenar, filtrar o agrupar, o haz una pregunta sobre los datos.', // Fórmulas (enterprise) 'formula.editorLabel': 'Fórmula', 'formula.invalid': 'Fórmula no válida', 'formula.error.ref': 'Referencia de celda no válida', 'formula.error.name': 'Función desconocida', 'formula.error.div0': 'División por cero', 'formula.error.value': 'Valor no válido', 'formula.error.cycle': 'Referencia circular', }",
|
|
9774
9990
|
"description": "Spanish (Español) translation of the grid's built-in UI text."
|
|
9775
9991
|
}
|
|
9776
9992
|
],
|
package/docs/assets/hierarchy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.hierarchyData = "
|
|
1
|
+
window.hierarchyData = "eJyVkj1rwzAURf/LnZXWdf2haGuN5wYCXYIHYb/YIopkJLUYgv97cQvFDaaJF03v6px3pQuctcFDHHi2ZXmSsKfoOa8YHB011UFZ4yEu4Ml0GnkmCLz0NOxkS0UnTUtN+UkmgOGkTAMRpxnDh9MQUCaQO8qa/ONS5KELZw2GWkvvIRB8s5nu2PzmMDLkcTpDF/v3cuitC2/9j9v/2OvxO5HJfNs1vLUwhrpTunFkIA55nFYjA8+2M/qr9DSVV5DWhTWBhltVLyTWmnAefZvwaMGkbFSwbp3Ln8x9jzD9wxl9J1tl5NTrPshAN7hX06v3T6pxHL8AiSYLaA=="
|