apex-grid 3.6.0 → 4.0.0-beta.2

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.
Files changed (151) hide show
  1. package/CHANGELOG.md +301 -0
  2. package/LICENSE.md +2 -1
  3. package/README.md +117 -18
  4. package/components/cell.d.ts +13 -1
  5. package/components/cell.js +28 -13
  6. package/components/cell.js.map +1 -1
  7. package/components/grid.d.ts +175 -28
  8. package/components/grid.js +183 -63
  9. package/components/grid.js.map +1 -1
  10. package/components/header-row.d.ts +0 -6
  11. package/components/header-row.js +1 -19
  12. package/components/header-row.js.map +1 -1
  13. package/components/header.js +39 -2
  14. package/components/header.js.map +1 -1
  15. package/components/paginator.d.ts +20 -5
  16. package/components/paginator.js +54 -17
  17. package/components/paginator.js.map +1 -1
  18. package/components/row.js +149 -40
  19. package/components/row.js.map +1 -1
  20. package/components/toolbar.d.ts +5 -1
  21. package/components/toolbar.js +4 -1
  22. package/components/toolbar.js.map +1 -1
  23. package/components/virtualize-rows.d.ts +38 -0
  24. package/components/virtualize-rows.js +286 -0
  25. package/components/virtualize-rows.js.map +1 -0
  26. package/components/virtualizer.d.ts +71 -1
  27. package/components/virtualizer.js +105 -29
  28. package/components/virtualizer.js.map +1 -1
  29. package/controllers/dom.d.ts +10 -3
  30. package/controllers/dom.js +5 -5
  31. package/controllers/dom.js.map +1 -1
  32. package/controllers/navigation.d.ts +63 -0
  33. package/controllers/navigation.js +295 -21
  34. package/controllers/navigation.js.map +1 -1
  35. package/controllers/pagination.d.ts +7 -6
  36. package/controllers/pagination.js +27 -28
  37. package/controllers/pagination.js.map +1 -1
  38. package/controllers/row-pin.d.ts +6 -0
  39. package/controllers/row-pin.js +8 -2
  40. package/controllers/row-pin.js.map +1 -1
  41. package/controllers/row-reorder.d.ts +12 -4
  42. package/controllers/row-reorder.js +20 -6
  43. package/controllers/row-reorder.js.map +1 -1
  44. package/controllers/selection.d.ts +32 -10
  45. package/controllers/selection.js +33 -10
  46. package/controllers/selection.js.map +1 -1
  47. package/controllers/sort.js +2 -3
  48. package/controllers/sort.js.map +1 -1
  49. package/controllers/state.d.ts +18 -5
  50. package/controllers/state.js +53 -46
  51. package/controllers/state.js.map +1 -1
  52. package/custom-elements.json +1762 -339
  53. package/docs/assets/hierarchy.js +1 -1
  54. package/docs/assets/search.js +1 -1
  55. package/docs/classes/ApexGrid.html +166 -66
  56. package/docs/classes/ApexGridPaginator.html +39 -8
  57. package/docs/classes/ApexGridToolbar.html +9 -5
  58. package/docs/functions/localize.html +2 -2
  59. package/docs/hierarchy.html +1 -1
  60. package/docs/index.html +123 -20
  61. package/docs/interfaces/ApexPageChangedEvent.html +3 -1
  62. package/docs/interfaces/BaseApexCellContext.html +18 -5
  63. package/docs/interfaces/BaseApexEditorContext.html +20 -5
  64. package/docs/interfaces/BaseFilterExpression.html +1 -1
  65. package/docs/interfaces/CSVExportOptions.html +1 -1
  66. package/docs/interfaces/DataPipelineConfiguration.html +4 -9
  67. package/docs/interfaces/ExportOptions.html +1 -1
  68. package/docs/interfaces/GridSelectionConfiguration.html +19 -4
  69. package/docs/interfaces/PaginationConfiguration.html +11 -4
  70. package/docs/interfaces/PaginationState.html +4 -2
  71. package/docs/media/_token-values.scss +42 -16
  72. package/docs/media/package.json +12 -4
  73. package/docs/types/DataPipelineParams.html +2 -2
  74. package/docs/types/PaginationMode.html +5 -4
  75. package/docs/variables/EN_LOCALE.html +2 -2
  76. package/i18n/en.d.ts +2 -0
  77. package/i18n/en.js +2 -0
  78. package/i18n/en.js.map +1 -1
  79. package/i18n/es.js +2 -0
  80. package/i18n/es.js.map +1 -1
  81. package/ignite-ui.d.ts +1 -0
  82. package/ignite-ui.js +4 -0
  83. package/ignite-ui.js.map +1 -0
  84. package/internal/column-types.d.ts +11 -1
  85. package/internal/column-types.js +8 -6
  86. package/internal/column-types.js.map +1 -1
  87. package/internal/design-system.d.ts +32 -0
  88. package/internal/design-system.js +66 -0
  89. package/internal/design-system.js.map +1 -0
  90. package/internal/export.d.ts +6 -0
  91. package/internal/export.js +4 -0
  92. package/internal/export.js.map +1 -1
  93. package/internal/feature-module.d.ts +7 -0
  94. package/internal/feature-module.js.map +1 -1
  95. package/internal/flip.d.ts +28 -16
  96. package/internal/flip.js +42 -10
  97. package/internal/flip.js.map +1 -1
  98. package/internal/icons.d.ts +2 -16
  99. package/internal/icons.js +0 -8
  100. package/internal/icons.js.map +1 -1
  101. package/internal/ignite-ui.d.ts +10 -0
  102. package/internal/ignite-ui.js +118 -0
  103. package/internal/ignite-ui.js.map +1 -0
  104. package/internal/index.d.ts +4 -2
  105. package/internal/index.js +3 -2
  106. package/internal/index.js.map +1 -1
  107. package/internal/types.d.ts +75 -19
  108. package/internal/types.js.map +1 -1
  109. package/operations/filter/types.d.ts +1 -1
  110. package/operations/filter/types.js.map +1 -1
  111. package/package.json +7 -2
  112. package/styles/_token-blocks.css.d.ts +1 -0
  113. package/styles/_token-blocks.css.js +3 -0
  114. package/styles/_token-blocks.css.js.map +1 -0
  115. package/styles/_tokens.css.js +1 -1
  116. package/styles/_tokens.css.js.map +1 -1
  117. package/styles/body-cell/body-cell.css.js +1 -1
  118. package/styles/body-cell/body-cell.css.js.map +1 -1
  119. package/styles/body-cell/cell-renderers.css.js +1 -1
  120. package/styles/body-cell/cell-renderers.css.js.map +1 -1
  121. package/styles/body-row/body-row.css.js +1 -1
  122. package/styles/body-row/body-row.css.js.map +1 -1
  123. package/styles/document-tokens.css.js +1 -1
  124. package/styles/document-tokens.css.js.map +1 -1
  125. package/styles/grid/_grid.base.css.js +1 -1
  126. package/styles/grid/_grid.base.css.js.map +1 -1
  127. package/styles/grid/grid.css.js +1 -1
  128. package/styles/grid/grid.css.js.map +1 -1
  129. package/styles/group-header-row/group-header-row.css.js +1 -1
  130. package/styles/group-header-row/group-header-row.css.js.map +1 -1
  131. package/styles/header-cell/header-cell.css.js +1 -1
  132. package/styles/header-cell/header-cell.css.js.map +1 -1
  133. package/styles/header-row/header-row.base.css.js +1 -1
  134. package/styles/header-row/header-row.base.css.js.map +1 -1
  135. package/styles/ignite-ui/ignite-ui-dark.css.d.ts +1 -0
  136. package/styles/ignite-ui/ignite-ui-dark.css.js +3 -0
  137. package/styles/ignite-ui/ignite-ui-dark.css.js.map +1 -0
  138. package/styles/ignite-ui/ignite-ui-document.css.d.ts +1 -0
  139. package/styles/ignite-ui/ignite-ui-document.css.js +3 -0
  140. package/styles/ignite-ui/ignite-ui-document.css.js.map +1 -0
  141. package/styles/ignite-ui/ignite-ui.css.d.ts +1 -0
  142. package/styles/ignite-ui/ignite-ui.css.js +3 -0
  143. package/styles/ignite-ui/ignite-ui.css.js.map +1 -0
  144. package/styles/paginator/paginator.css.js +1 -1
  145. package/styles/paginator/paginator.css.js.map +1 -1
  146. package/styles/toolbar/toolbar.css.js +1 -1
  147. package/styles/toolbar/toolbar.css.js.map +1 -1
  148. package/tokens.css +14 -15
  149. package/operations/pagination.d.ts +0 -19
  150. package/operations/pagination.js +0 -12
  151. package/operations/pagination.js.map +0 -1
@@ -17,6 +17,12 @@
17
17
  }
18
18
  ]
19
19
  },
20
+ {
21
+ "kind": "javascript-module",
22
+ "path": "src/ignite-ui.ts",
23
+ "declarations": [],
24
+ "exports": []
25
+ },
20
26
  {
21
27
  "kind": "javascript-module",
22
28
  "path": "src/index.ts",
@@ -1100,6 +1106,16 @@
1100
1106
  "description": "Whether the cell's row renders in a pinned band rather than the body.",
1101
1107
  "readonly": true
1102
1108
  },
1109
+ {
1110
+ "kind": "field",
1111
+ "name": "#recycledBody",
1112
+ "privacy": "private",
1113
+ "type": {
1114
+ "text": "boolean"
1115
+ },
1116
+ "description": "Whether the cell's row is a body row of a grid that recycles its rows.",
1117
+ "readonly": true
1118
+ },
1103
1119
  {
1104
1120
  "kind": "field",
1105
1121
  "name": "colindex",
@@ -1180,6 +1196,16 @@
1180
1196
  "default": "false",
1181
1197
  "description": "Set by a reconnect, whose context re-request is a bare requestUpdate()."
1182
1198
  },
1199
+ {
1200
+ "kind": "field",
1201
+ "name": "#rebound",
1202
+ "privacy": "private",
1203
+ "type": {
1204
+ "text": "boolean"
1205
+ },
1206
+ "default": "false",
1207
+ "description": "Whether the current update re-binds the cell to another record."
1208
+ },
1183
1209
  {
1184
1210
  "kind": "method",
1185
1211
  "name": "#applyStaged",
@@ -1200,13 +1226,13 @@
1200
1226
  "text": "void"
1201
1227
  }
1202
1228
  },
1203
- "description": "Reflects the cell's validation state from the editing controller: stores the\ncurrent error messages for render and toggles `aria-invalid` +\n`aria-errormessage` + `data-invalid` on the host. Inert for cells whose\ncolumn has no validators (the lookup returns `null`)."
1229
+ "description": "Reflects the cell's validation state from the editing controller: stores the\ncurrent error messages for render and toggles `aria-invalid` +\n`data-invalid` on the host. Inert for cells whose\ncolumn has no validators (the lookup returns `null`)."
1204
1230
  },
1205
1231
  {
1206
1232
  "kind": "method",
1207
1233
  "name": "renderError",
1208
1234
  "privacy": "protected",
1209
- "description": "The inline error node surfaced when the cell is invalid. `role=\"alert\"`\nannounces the message when it appears, covering the cross-shadow gap where\nan `aria-errormessage` IDREF on the host can't reach this node."
1235
+ "description": "The inline error node surfaced when the cell is invalid. `role=\"alert\"`\nannounces the message when it appears, covering the cross-shadow gap where\nan `aria-errormessage` IDREF on the host can't reach this node, so the\nhost sets none (it would dangle)."
1210
1236
  },
1211
1237
  {
1212
1238
  "kind": "method",
@@ -1217,7 +1243,7 @@
1217
1243
  "text": "void"
1218
1244
  }
1219
1245
  },
1220
- "description": "Reflects module-contributed decoration attributes (see CellDecorator)\nonto the cell host, reconciling against the previous update so attributes\nthat are no longer present are removed. Inert for the community grid:\n`state.decorateCell` returns `null` with no modules, so nothing is set."
1246
+ "description": "Reflects module-contributed decoration attributes (see CellDecorator)\nonto the cell host, reconciling against the previous update so attributes\nthat are no longer present are removed. Returns at once when no module\ndecorates cells and nothing is left to clear (the community grid)."
1221
1247
  },
1222
1248
  {
1223
1249
  "kind": "field",
@@ -1850,7 +1876,7 @@
1850
1876
  "name": "ApexGrid",
1851
1877
  "cssProperties": [
1852
1878
  {
1853
- "description": "Brand color for selection, focus rings, and accents. Auto-tints from `--ig-primary-500` where an Ignite UI palette is present.",
1879
+ "description": "Brand color for selection, focus rings, and accents. Falls back to `--apx-accent`, then (with the `apex-grid/ignite-ui` add-on) the Ignite UI primary.",
1854
1880
  "name": "--ag-brand"
1855
1881
  },
1856
1882
  {
@@ -1954,22 +1980,142 @@
1954
1980
  "name": "--ag-header-h"
1955
1981
  },
1956
1982
  {
1957
- "description": "Outer card corner radius.",
1983
+ "description": "Outer card corner radius. The radii (`--ag-radius`, `-sm`, `-xs`, not the pill) scale with `--apx-radius-factor` while it is set (single lengths only).",
1958
1984
  "name": "--ag-radius"
1959
1985
  },
1960
1986
  {
1961
- "description": "Grid font family.",
1987
+ "description": "Grid font family. Falls back to `--apx-font-family`, then (with the `apex-grid/ignite-ui` add-on) the Ignite UI `--ig-font-family`.",
1962
1988
  "name": "--ag-font"
1963
1989
  },
1990
+ {
1991
+ "description": "Background of the enterprise popups (filter builder, set filter, AI panel, tool panel, status bar). Unset, each keeps its built-in colour; set it with `--ag-overlay-text`.",
1992
+ "name": "--ag-overlay"
1993
+ },
1994
+ {
1995
+ "description": "Text color of the enterprise popups; their lines, muted text and hover wash are mixed from the two.",
1996
+ "name": "--ag-overlay-text"
1997
+ },
1998
+ {
1999
+ "description": "Popup background on dark grids.",
2000
+ "name": "--ag-dark-overlay"
2001
+ },
2002
+ {
2003
+ "description": "Popup text color on dark grids.",
2004
+ "name": "--ag-dark-overlay-text"
2005
+ },
1964
2006
  {
1965
2007
  "description": "Cell font size.",
1966
2008
  "name": "--ag-fs-cell"
1967
2009
  }
1968
2010
  ],
1969
2011
  "cssParts": [
2012
+ {
2013
+ "description": "The element with the `grid` (or `treegrid`) role, `aria-rowcount` and `aria-colcount`: holds the header rows, pinned rows and body.",
2014
+ "name": "table"
2015
+ },
1970
2016
  {
1971
2017
  "description": "Visually-hidden ARIA live region used for screen-reader announcements.",
1972
2018
  "name": "live-region"
2019
+ },
2020
+ {
2021
+ "description": "The `<apex-grid-paginator>` element; the grid re-exports its parts below.",
2022
+ "name": "paginator-host"
2023
+ },
2024
+ {
2025
+ "description": "The paginator's root container.",
2026
+ "name": "paginator"
2027
+ },
2028
+ {
2029
+ "description": "The page-size selector wrapper.",
2030
+ "name": "paginator-size"
2031
+ },
2032
+ {
2033
+ "description": "The \"1-25 of 100\" summary.",
2034
+ "name": "paginator-info"
2035
+ },
2036
+ {
2037
+ "description": "The first/prev/next/last button cluster.",
2038
+ "name": "paginator-controls"
2039
+ },
2040
+ {
2041
+ "description": "The \"page / count\" label.",
2042
+ "name": "paginator-page"
2043
+ },
2044
+ {
2045
+ "description": "Each of the first, previous, next and last buttons.",
2046
+ "name": "paginator-button"
2047
+ },
2048
+ {
2049
+ "description": "The first page button.",
2050
+ "name": "paginator-first"
2051
+ },
2052
+ {
2053
+ "description": "The previous page button.",
2054
+ "name": "paginator-prev"
2055
+ },
2056
+ {
2057
+ "description": "The next page button.",
2058
+ "name": "paginator-next"
2059
+ },
2060
+ {
2061
+ "description": "The last page button.",
2062
+ "name": "paginator-last"
2063
+ },
2064
+ {
2065
+ "description": "The `<apex-grid-toolbar>` element; the grid re-exports its parts below.",
2066
+ "name": "toolbar-host"
2067
+ },
2068
+ {
2069
+ "description": "The toolbar's container.",
2070
+ "name": "toolbar"
2071
+ },
2072
+ {
2073
+ "description": "The quick-filter input wrapper.",
2074
+ "name": "toolbar-search"
2075
+ },
2076
+ {
2077
+ "description": "The bordered field holding the search icon and input.",
2078
+ "name": "search-field"
2079
+ },
2080
+ {
2081
+ "description": "The leading search icon.",
2082
+ "name": "search-icon"
2083
+ },
2084
+ {
2085
+ "description": "The quick-filter input.",
2086
+ "name": "search-input"
2087
+ },
2088
+ {
2089
+ "description": "The trailing actions area.",
2090
+ "name": "toolbar-actions"
2091
+ },
2092
+ {
2093
+ "description": "A host-contributed action button.",
2094
+ "name": "toolbar-action"
2095
+ },
2096
+ {
2097
+ "description": "The export menu wrapper.",
2098
+ "name": "export"
2099
+ },
2100
+ {
2101
+ "description": "The export menu trigger button.",
2102
+ "name": "export-trigger"
2103
+ },
2104
+ {
2105
+ "description": "The download icon in the trigger.",
2106
+ "name": "export-icon"
2107
+ },
2108
+ {
2109
+ "description": "The caret icon in the trigger.",
2110
+ "name": "export-caret"
2111
+ },
2112
+ {
2113
+ "description": "The export dropdown menu.",
2114
+ "name": "export-menu"
2115
+ },
2116
+ {
2117
+ "description": "An item in the export menu.",
2118
+ "name": "export-menu-item"
1973
2119
  }
1974
2120
  ],
1975
2121
  "members": [
@@ -2258,6 +2404,22 @@
2258
2404
  "attribute": "column-separator",
2259
2405
  "reflects": true
2260
2406
  },
2407
+ {
2408
+ "kind": "field",
2409
+ "name": "rowRecycling",
2410
+ "type": {
2411
+ "text": "boolean"
2412
+ },
2413
+ "privacy": "public",
2414
+ "description": "Reuses body row elements across records. On by default: a scroll, sort or\nfilter re-binds the rendered rows to the records now in view instead of\nbuilding rows for them, which makes jumps and sorts cheaper on large\ngrids. Set to `false` (or the `row-recycling=\"false\"` attribute) to\nrestore record-keyed rows, where each row element stays with its record.\n`undefined` or `null` (a framework prop that was set and then dropped)\nrestores the default, so only `false` opts out.",
2415
+ "default": "true",
2416
+ "attribute": "row-recycling"
2417
+ },
2418
+ {
2419
+ "kind": "field",
2420
+ "name": "#rowRecycling",
2421
+ "privacy": "private"
2422
+ },
2261
2423
  {
2262
2424
  "kind": "field",
2263
2425
  "name": "editing",
@@ -2271,7 +2433,7 @@
2271
2433
  "kind": "field",
2272
2434
  "name": "selection",
2273
2435
  "type": {
2274
- "text": "GridSelectionConfiguration | undefined"
2436
+ "text": "GridSelectionConfiguration<T> | undefined"
2275
2437
  },
2276
2438
  "privacy": "public",
2277
2439
  "description": "Row selection configuration for the grid."
@@ -2351,7 +2513,7 @@
2351
2513
  "text": "Promise<boolean>"
2352
2514
  }
2353
2515
  },
2354
- "description": "Selects every row in the current view (dataView). No-op in\n`'single'` selection mode."
2516
+ "description": "Selects every selectable row in the current view (dataView).\nNo-op in `'single'` selection mode."
2355
2517
  },
2356
2518
  {
2357
2519
  "kind": "method",
@@ -2432,6 +2594,41 @@
2432
2594
  "default": "true",
2433
2595
  "description": "Whether column headers show the column-menu (kebab) button. On by default,\nand the button is always visible (not hover-only). Set to `false` to hide it\nentirely; a feature module's menu (e.g. the enterprise context menu) stays\nreachable by right-click. This is a JS property (no attribute) so it can\nstay `true` by default."
2434
2596
  },
2597
+ {
2598
+ "kind": "field",
2599
+ "name": "showHeader",
2600
+ "type": {
2601
+ "text": "boolean"
2602
+ },
2603
+ "privacy": "public",
2604
+ "default": "true",
2605
+ "description": "Whether the column header rows are shown. On by default. Set to `false`\n(or the `show-header=\"false\"` attribute) for a compact table, such as a\nshort dashboard tile, where the rows get the header's room.",
2606
+ "attribute": "show-header"
2607
+ },
2608
+ {
2609
+ "kind": "field",
2610
+ "name": "designSystem",
2611
+ "type": {
2612
+ "text": "boolean"
2613
+ },
2614
+ "privacy": "public",
2615
+ "default": "true",
2616
+ "description": "Whether this grid follows the design-system add-on (`apex-grid/ignite-ui`).\n`false`, reflected as `design-system=\"off\"`, turns the Ignite UI colours\nand font off for this grid; the Ignite UI variant still picks its mode.\nWithout the add-on it changes nothing.",
2617
+ "attribute": "design-system",
2618
+ "reflects": true
2619
+ },
2620
+ {
2621
+ "kind": "field",
2622
+ "name": "tokens",
2623
+ "type": {
2624
+ "text": "boolean"
2625
+ },
2626
+ "privacy": "public",
2627
+ "default": "true",
2628
+ "description": "Whether this grid reads the family `--apx-*` tokens and, with the\n`apex-grid/ignite-ui` add-on, Ignite UI (the variant included). `false`,\nreflected as `tokens=\"off\"`, turns them off for the grid and the content\nit renders, so it keeps the built-in look and the `--ag-*` tokens you set.",
2629
+ "attribute": "tokens",
2630
+ "reflects": true
2631
+ },
2435
2632
  {
2436
2633
  "kind": "field",
2437
2634
  "name": "columnGroups",
@@ -2760,9 +2957,37 @@
2760
2957
  "kind": "field",
2761
2958
  "name": "totalItems",
2762
2959
  "privacy": "public",
2763
- "description": "The total number of items in the ApexGrid.dataView collection.",
2960
+ "description": "The post-filter, post-sort row count. With pagination enabled it counts\nthe rows paged through, so rows pinned to the top or bottom (they show on\nevery page) are left out. In `'remote'` pagination mode, the\n`pagination.totalItems` you supplied (the rows the server holds for the\ncurrent filter).",
2961
+ "readonly": true
2962
+ },
2963
+ {
2964
+ "kind": "field",
2965
+ "name": "bodyRows",
2966
+ "type": {
2967
+ "text": "ReadonlyArray<T>"
2968
+ },
2969
+ "privacy": "protected",
2970
+ "description": "The rows the body pages through: ApexGrid.dataView without the\npinned rows, which render in their own sticky bands on every page. The\npage slice and the page count both read it, so they always agree.",
2764
2971
  "readonly": true
2765
2972
  },
2973
+ {
2974
+ "kind": "field",
2975
+ "name": "#bodyKey",
2976
+ "privacy": "private",
2977
+ "type": {
2978
+ "text": "unknown[]"
2979
+ },
2980
+ "default": "[]"
2981
+ },
2982
+ {
2983
+ "kind": "field",
2984
+ "name": "#bodyRows",
2985
+ "privacy": "private",
2986
+ "type": {
2987
+ "text": "ReadonlyArray<T>"
2988
+ },
2989
+ "default": "[]"
2990
+ },
2766
2991
  {
2767
2992
  "kind": "field",
2768
2993
  "name": "pageItems",
@@ -2773,6 +2998,24 @@
2773
2998
  "description": "The records currently rendered into the virtualized body.",
2774
2999
  "readonly": true
2775
3000
  },
3001
+ {
3002
+ "kind": "field",
3003
+ "name": "#pageKey",
3004
+ "privacy": "private",
3005
+ "type": {
3006
+ "text": "unknown[]"
3007
+ },
3008
+ "default": "[]"
3009
+ },
3010
+ {
3011
+ "kind": "field",
3012
+ "name": "#pageItems",
3013
+ "privacy": "private",
3014
+ "type": {
3015
+ "text": "ReadonlyArray<T>"
3016
+ },
3017
+ "default": "[]"
3018
+ },
2776
3019
  {
2777
3020
  "kind": "field",
2778
3021
  "name": "page",
@@ -3046,13 +3289,12 @@
3046
3289
  },
3047
3290
  {
3048
3291
  "kind": "field",
3049
- "name": "#autoAriaLabel",
3292
+ "name": "#pinKey",
3050
3293
  "privacy": "private",
3051
3294
  "type": {
3052
- "text": "string | null"
3295
+ "text": "unknown[]"
3053
3296
  },
3054
- "default": "null",
3055
- "description": "The `aria-label` value this grid last auto-applied (never an author's)."
3297
+ "default": "[]"
3056
3298
  },
3057
3299
  {
3058
3300
  "kind": "field",
@@ -3284,6 +3526,12 @@
3284
3526
  },
3285
3527
  "description": "Record the initial state for listeners attached before the first render,\nonce the first view settles (its reclamp may still move the page)."
3286
3528
  },
3529
+ {
3530
+ "kind": "field",
3531
+ "name": "#labelObserver",
3532
+ "privacy": "private",
3533
+ "default": "new MutationObserver(() => this.requestUpdate())"
3534
+ },
3287
3535
  {
3288
3536
  "kind": "method",
3289
3537
  "name": "filter",
@@ -4050,7 +4298,21 @@
4050
4298
  }
4051
4299
  }
4052
4300
  ],
4053
- "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."
4301
+ "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.\nAlso tells navigation whether this body, not a grid nested in it, now\nholds focus."
4302
+ },
4303
+ {
4304
+ "kind": "method",
4305
+ "name": "bodyFocusOutHandler",
4306
+ "privacy": "protected",
4307
+ "parameters": [
4308
+ {
4309
+ "name": "event",
4310
+ "type": {
4311
+ "text": "FocusEvent"
4312
+ }
4313
+ }
4314
+ ],
4315
+ "description": "Focus left something in the body; see NavigationController.focusLeft.\nCaptured, so the body stops owning focus before a handler further down\n(an editor committing on focus loss) runs and lets queued work see it."
4054
4316
  },
4055
4317
  {
4056
4318
  "kind": "method",
@@ -4074,23 +4336,14 @@
4074
4336
  {
4075
4337
  "kind": "method",
4076
4338
  "name": "renderHeaderRow",
4077
- "privacy": "protected"
4339
+ "privacy": "protected",
4340
+ "description": "With ApexGrid.showHeader off the header rows stay in the DOM,\nvisually hidden, so assistive technology keeps the column names."
4078
4341
  },
4079
4342
  {
4080
4343
  "kind": "method",
4081
4344
  "name": "renderBody",
4082
4345
  "privacy": "protected"
4083
4346
  },
4084
- {
4085
- "kind": "field",
4086
- "name": "headerRowCount",
4087
- "type": {
4088
- "text": "number"
4089
- },
4090
- "privacy": "protected",
4091
- "description": "Number of chrome rows above the body (group header + header + optional filter).",
4092
- "readonly": true
4093
- },
4094
4347
  {
4095
4348
  "kind": "method",
4096
4349
  "name": "renderPinnedTop",
@@ -4122,12 +4375,43 @@
4122
4375
  "privacy": "protected",
4123
4376
  "description": "Renders a visually-hidden polite live region. Status messages set via\nannounce land here; screen readers will read them aloud without\nstealing focus. We intentionally keep this in the shadow root so we\ndon't have to coordinate consumer DOM placement."
4124
4377
  },
4378
+ {
4379
+ "kind": "method",
4380
+ "name": "renderColumnDragGhost",
4381
+ "privacy": "protected",
4382
+ "description": "Floating \"ghost\" of the column header being dragged for reorder. Rendered\nhere, next to the row ghost, rather than in the header row: a fixed\nelement still paints inside its parent's stacking context, so inside the\nheader row it slid under the group header row and the pinned-top band."
4383
+ },
4125
4384
  {
4126
4385
  "kind": "method",
4127
4386
  "name": "renderRowDragGhost",
4128
4387
  "privacy": "protected",
4129
4388
  "description": "Floating \"ghost\" of the row being pointer-dragged for reorder. Rendered at\nthe top of the shadow tree (outside the virtualizer) so its `position: fixed`\ntracks the viewport, and painted from the cell snapshot captured at grab\ntime so it mirrors the row's visible content and column widths."
4130
4389
  },
4390
+ {
4391
+ "kind": "method",
4392
+ "name": "#refs",
4393
+ "privacy": "private",
4394
+ "return": {
4395
+ "type": {
4396
+ "text": "Element[] | null"
4397
+ }
4398
+ },
4399
+ "parameters": [
4400
+ {
4401
+ "name": "attr",
4402
+ "type": {
4403
+ "text": "string"
4404
+ }
4405
+ }
4406
+ ],
4407
+ "description": "The elements the host's `attr` IDREFs name, looked up in the tree the host\nlives in (the references cannot reach the shadow root), or `null`."
4408
+ },
4409
+ {
4410
+ "kind": "method",
4411
+ "name": "renderTable",
4412
+ "privacy": "protected",
4413
+ "description": "The element with the `grid` (or `treegrid`) role and the table semantics.\nIt owns only rows: the header rows, the pinned bands and the body. The\ntoolbar, filter panel, paginator and live region stay outside it. The\nhost's own `aria-label`, `aria-labelledby` and `aria-describedby` name it:\nreferenced elements go through element reflection where the browser has\nit, and their text is copied where it does not."
4414
+ },
4131
4415
  {
4132
4416
  "kind": "method",
4133
4417
  "name": "announce",
@@ -4357,35 +4641,75 @@
4357
4641
  "attribute": "column-separator"
4358
4642
  },
4359
4643
  {
4644
+ "name": "row-recycling",
4360
4645
  "type": {
4361
- "text": "string"
4646
+ "text": "boolean"
4362
4647
  },
4363
- "description": "Space-separated theme flags. `dark` opts into the built-in dark palette; `tinted` mixes `--ag-brand` into the chrome surfaces. Combine as `theme=\"dark tinted\"`.",
4364
- "name": "theme"
4648
+ "description": "Reuses body row elements across records. On by default: a scroll, sort or\nfilter re-binds the rendered rows to the records now in view instead of\nbuilding rows for them, which makes jumps and sorts cheaper on large\ngrids. Set to `false` (or the `row-recycling=\"false\"` attribute) to\nrestore record-keyed rows, where each row element stays with its record.\n`undefined` or `null` (a framework prop that was set and then dropped)\nrestores the default, so only `false` opts out.",
4649
+ "default": "true",
4650
+ "fieldName": "rowRecycling",
4651
+ "attribute": "row-recycling"
4365
4652
  },
4366
4653
  {
4367
- "name": "coordinate-hints",
4654
+ "name": "show-header",
4368
4655
  "type": {
4369
4656
  "text": "boolean"
4370
4657
  },
4371
- "default": "false",
4372
- "description": "Transient spreadsheet coordinate hints: when `true`, a leading row-number\ngutter (1, 2, 3, ...) and A / B / C column letters are revealed so cell\nreferences are discoverable. Enterprise toggles this while a formula cell is\nbeing edited; it can also be set directly for a persistent spreadsheet look.\nReflected so styling / tests can observe it on the host.",
4373
- "fieldName": "coordinateHints"
4374
- }
4375
- ],
4376
- "superclass": {
4377
- "name": "EventEmitterBase",
4378
- "module": "/src/internal/mixins/event-emitter.js"
4379
- },
4380
- "tagName": "apex-grid",
4381
- "customElement": true
4382
- }
4383
- ],
4384
- "exports": [
4385
- {
4386
- "kind": "js",
4387
- "name": "ApexGrid",
4388
- "declaration": {
4658
+ "default": "true",
4659
+ "description": "Whether the column header rows are shown. On by default. Set to `false`\n(or the `show-header=\"false\"` attribute) for a compact table, such as a\nshort dashboard tile, where the rows get the header's room.",
4660
+ "fieldName": "showHeader",
4661
+ "attribute": "show-header"
4662
+ },
4663
+ {
4664
+ "name": "design-system",
4665
+ "type": {
4666
+ "text": "boolean"
4667
+ },
4668
+ "default": "true",
4669
+ "description": "Whether this grid follows the design-system add-on (`apex-grid/ignite-ui`).\n`false`, reflected as `design-system=\"off\"`, turns the Ignite UI colours\nand font off for this grid; the Ignite UI variant still picks its mode.\nWithout the add-on it changes nothing.",
4670
+ "fieldName": "designSystem",
4671
+ "attribute": "design-system"
4672
+ },
4673
+ {
4674
+ "name": "tokens",
4675
+ "type": {
4676
+ "text": "boolean"
4677
+ },
4678
+ "default": "true",
4679
+ "description": "Whether this grid reads the family `--apx-*` tokens and, with the\n`apex-grid/ignite-ui` add-on, Ignite UI (the variant included). `false`,\nreflected as `tokens=\"off\"`, turns them off for the grid and the content\nit renders, so it keeps the built-in look and the `--ag-*` tokens you set.",
4680
+ "fieldName": "tokens",
4681
+ "attribute": "tokens"
4682
+ },
4683
+ {
4684
+ "type": {
4685
+ "text": "string"
4686
+ },
4687
+ "description": "Space-separated theme flags. `dark` opts into the built-in dark palette; `tinted` mixes `--ag-brand` into the chrome surfaces. Combine as `theme=\"dark tinted\"`. With the `apex-grid/ignite-ui` add-on a grid without `dark` or `light` follows the Ignite UI variant, and `light` keeps it light.",
4688
+ "name": "theme"
4689
+ },
4690
+ {
4691
+ "name": "coordinate-hints",
4692
+ "type": {
4693
+ "text": "boolean"
4694
+ },
4695
+ "default": "false",
4696
+ "description": "Transient spreadsheet coordinate hints: when `true`, a leading row-number\ngutter (1, 2, 3, ...) and A / B / C column letters are revealed so cell\nreferences are discoverable. Enterprise toggles this while a formula cell is\nbeing edited; it can also be set directly for a persistent spreadsheet look.\nReflected so styling / tests can observe it on the host.",
4697
+ "fieldName": "coordinateHints"
4698
+ }
4699
+ ],
4700
+ "superclass": {
4701
+ "name": "EventEmitterBase",
4702
+ "module": "/src/internal/mixins/event-emitter.js"
4703
+ },
4704
+ "tagName": "apex-grid",
4705
+ "customElement": true
4706
+ }
4707
+ ],
4708
+ "exports": [
4709
+ {
4710
+ "kind": "js",
4711
+ "name": "ApexGrid",
4712
+ "declaration": {
4389
4713
  "name": "ApexGrid",
4390
4714
  "module": "src/components/grid.ts"
4391
4715
  }
@@ -4643,12 +4967,6 @@
4643
4967
  "name": "renderSelectionHeader",
4644
4968
  "privacy": "protected",
4645
4969
  "description": "Header cell for the built-in selection (checkbox) column. In multi-select\nmode it renders a \"select all\" checkbox that selects every row in the\ncurrent filtered view (all pages, collapsed group leaves included), not\njust the visible page; in single-select mode only an empty spacer, since\nselecting all rows isn't meaningful there."
4646
- },
4647
- {
4648
- "kind": "method",
4649
- "name": "renderDragGhost",
4650
- "privacy": "protected",
4651
- "description": "Floating \"ghost\" element that follows the cursor while a header is\nbeing dragged. Positioned via `position: fixed` so it escapes the\nheader row's sticky containing block and follows the viewport."
4652
4970
  }
4653
4971
  ],
4654
4972
  "superclass": {
@@ -4929,6 +5247,36 @@
4929
5247
  }
4930
5248
  ]
4931
5249
  },
5250
+ {
5251
+ "kind": "field",
5252
+ "name": "#placeMenu",
5253
+ "privacy": "private",
5254
+ "description": "Shows the open column menu in the top layer (a manual popover), so the\npinned rows, later header cells, the paginator and the grid's own scroll\nclip cannot cover it, and places it where the absolute fallback sits:\nbelow this cell, aligned to its inline-end edge. Browsers without the\nPopover API keep that fallback. Removing the menu on close hides it.\n\nIt re-places itself every frame while open, because no event covers\nevery move: a scroll inside an ancestor shadow root never reaches\nwindow, and a layout shift fires nothing. Once the kebab scrolls out\nof the grid the menu closes, as the clipped fallback would vanish, and\nso it does when the header hides (`showHeader` off), which leaves\nnothing to anchor it to."
5255
+ },
5256
+ {
5257
+ "kind": "field",
5258
+ "name": "#menuFrame",
5259
+ "privacy": "private",
5260
+ "type": {
5261
+ "text": "number"
5262
+ },
5263
+ "default": "0",
5264
+ "description": "The pending frame that keeps the open menu on this cell."
5265
+ },
5266
+ {
5267
+ "kind": "method",
5268
+ "name": "#trackMenu",
5269
+ "privacy": "private",
5270
+ "parameters": [
5271
+ {
5272
+ "name": "open",
5273
+ "type": {
5274
+ "text": "boolean"
5275
+ }
5276
+ }
5277
+ ],
5278
+ "description": "Places the menu now and keeps it on the cell while open."
5279
+ },
4932
5280
  {
4933
5281
  "kind": "method",
4934
5282
  "name": "#closeMenu",
@@ -5013,7 +5361,7 @@
5013
5361
  "name": "paginator-size"
5014
5362
  },
5015
5363
  {
5016
- "description": "The \"1–25 of 100\" status label.",
5364
+ "description": "The \"1-25 of 100\" status label.",
5017
5365
  "name": "paginator-info"
5018
5366
  },
5019
5367
  {
@@ -5021,8 +5369,28 @@
5021
5369
  "name": "paginator-controls"
5022
5370
  },
5023
5371
  {
5024
- "description": "The \"Page X of N\" status label.",
5372
+ "description": "The \"page / count\" status label.",
5025
5373
  "name": "paginator-page"
5374
+ },
5375
+ {
5376
+ "description": "Each of the first, previous, next and last buttons.",
5377
+ "name": "paginator-button"
5378
+ },
5379
+ {
5380
+ "description": "The first page button (also `paginator-button`).",
5381
+ "name": "paginator-first"
5382
+ },
5383
+ {
5384
+ "description": "The previous page button (also `paginator-button`).",
5385
+ "name": "paginator-prev"
5386
+ },
5387
+ {
5388
+ "description": "The next page button (also `paginator-button`).",
5389
+ "name": "paginator-next"
5390
+ },
5391
+ {
5392
+ "description": "The last page button (also `paginator-button`).",
5393
+ "name": "paginator-last"
5026
5394
  }
5027
5395
  ],
5028
5396
  "members": [
@@ -5038,10 +5406,9 @@
5038
5406
  "kind": "field",
5039
5407
  "name": "pageSizeOptions",
5040
5408
  "type": {
5041
- "text": "number[]"
5409
+ "text": "readonly number[]"
5042
5410
  },
5043
5411
  "privacy": "public",
5044
- "default": "[10, 25, 50, 100]",
5045
5412
  "description": "The page-size choices rendered in the rows-per-page selector."
5046
5413
  },
5047
5414
  {
@@ -5054,6 +5421,34 @@
5054
5421
  "description": "Accessible label for the rows-per-page selector.",
5055
5422
  "attribute": "page-size-label"
5056
5423
  },
5424
+ {
5425
+ "kind": "field",
5426
+ "name": "#resizeObserver",
5427
+ "privacy": "private",
5428
+ "type": {
5429
+ "text": "ResizeObserver | undefined"
5430
+ }
5431
+ },
5432
+ {
5433
+ "kind": "field",
5434
+ "name": "#fitKey",
5435
+ "privacy": "private",
5436
+ "type": {
5437
+ "text": "string"
5438
+ },
5439
+ "default": "''"
5440
+ },
5441
+ {
5442
+ "kind": "method",
5443
+ "name": "#fit",
5444
+ "privacy": "private",
5445
+ "return": {
5446
+ "type": {
5447
+ "text": "void"
5448
+ }
5449
+ },
5450
+ "description": "Drops what the bar has no room for, least needed first: the page size\nselector (step 1), then the first and last buttons (step 2, the compact\nlayout, where the summary may also shorten), so previous and next always\nstay reachable. The steps are CSS rules keyed on `data-fit`. Hiding them\ndoes not change the bar's height, so the resize observer does not loop."
5451
+ },
5057
5452
  {
5058
5453
  "kind": "field",
5059
5454
  "name": "controller",
@@ -5089,7 +5484,7 @@
5089
5484
  {
5090
5485
  "name": "opts",
5091
5486
  "type": {
5092
- "text": "{\n id: string;\n icon: string;\n label: string;\n disabled: boolean;\n onClick: () => void;\n }"
5487
+ "text": "{\n /** `first`, `prev`, `next` or `last`; also names the button's own part (`paginator-first`). */\n id: string;\n icon: string;\n label: string;\n disabled: boolean;\n onClick: () => void;\n }"
5093
5488
  }
5094
5489
  }
5095
5490
  ]
@@ -5328,24 +5723,6 @@
5328
5723
  "default": "null",
5329
5724
  "description": "Result of the feature-module row presenter for the current update, or\n`null` when no module renders this row full-width (the normal case).\nComputed in willUpdate and consumed in render."
5330
5725
  },
5331
- {
5332
- "kind": "field",
5333
- "name": "#dragStartX",
5334
- "privacy": "private",
5335
- "type": {
5336
- "text": "number"
5337
- },
5338
- "default": "0"
5339
- },
5340
- {
5341
- "kind": "field",
5342
- "name": "#dragStartY",
5343
- "privacy": "private",
5344
- "type": {
5345
- "text": "number"
5346
- },
5347
- "default": "0"
5348
- },
5349
5726
  {
5350
5727
  "kind": "field",
5351
5728
  "name": "#handleReorderPointerDown",
@@ -5375,7 +5752,7 @@
5375
5752
  }
5376
5753
  }
5377
5754
  ],
5378
- "description": "Snapshots the row's visible cells (text, width, alignment) and bounding rect\nso the controller can paint a faithful floating ghost. Invoked once, at the\nmoment the drag engages."
5755
+ "description": "Snapshots the row's visible cells (text, width, alignment) and bounding rect\nso the controller can paint a faithful floating ghost."
5379
5756
  },
5380
5757
  {
5381
5758
  "kind": "field",
@@ -5387,6 +5764,15 @@
5387
5764
  "default": "1",
5388
5765
  "description": "The number of \"chrome\" rows (header + filter) above the body. Used to\nderive `aria-rowindex` from index. Set by the parent grid."
5389
5766
  },
5767
+ {
5768
+ "kind": "field",
5769
+ "name": "#renderedData",
5770
+ "privacy": "private",
5771
+ "type": {
5772
+ "text": "T | undefined"
5773
+ },
5774
+ "description": "The record this element rendered last, to spot a re-bind to another one."
5775
+ },
5390
5776
  {
5391
5777
  "kind": "method",
5392
5778
  "name": "#syncExportParts",
@@ -5508,7 +5894,7 @@
5508
5894
  "declarations": [
5509
5895
  {
5510
5896
  "kind": "class",
5511
- "description": "Toolbar shown above the grid's header row. Hosts opt-in toolbar features\nsuch as the quick-filter (global search) input and the export menu.",
5897
+ "description": "Toolbar shown above the grid's header row. Hosts opt-in toolbar features\nsuch as the quick-filter (global search) input and the export menu. The grid\nre-exports every part, so `apex-grid::part(name)` styles it.",
5512
5898
  "name": "ApexGridToolbar",
5513
5899
  "cssParts": [
5514
5900
  {
@@ -5539,10 +5925,22 @@
5539
5925
  "description": "A custom host-contributed action button (e.g. \"Create chart\").",
5540
5926
  "name": "toolbar-action"
5541
5927
  },
5928
+ {
5929
+ "description": "The export menu wrapper (trigger plus dropdown).",
5930
+ "name": "export"
5931
+ },
5542
5932
  {
5543
5933
  "description": "The export menu trigger button.",
5544
5934
  "name": "export-trigger"
5545
5935
  },
5936
+ {
5937
+ "description": "The download icon in the trigger.",
5938
+ "name": "export-icon"
5939
+ },
5940
+ {
5941
+ "description": "The caret icon in the trigger.",
5942
+ "name": "export-caret"
5943
+ },
5546
5944
  {
5547
5945
  "description": "The dropdown menu containing export options.",
5548
5946
  "name": "export-menu"
@@ -5809,10 +6207,78 @@
5809
6207
  }
5810
6208
  ]
5811
6209
  },
6210
+ {
6211
+ "kind": "javascript-module",
6212
+ "path": "src/components/virtualize-rows.ts",
6213
+ "declarations": [
6214
+ {
6215
+ "kind": "function",
6216
+ "name": "virtualizedRows",
6217
+ "return": {
6218
+ "type": {
6219
+ "text": "VirtualizedRows | undefined"
6220
+ }
6221
+ },
6222
+ "parameters": [
6223
+ {
6224
+ "name": "host",
6225
+ "type": {
6226
+ "text": "Element"
6227
+ }
6228
+ }
6229
+ ],
6230
+ "description": "The rows directive rendering into `host`, once it has rendered."
6231
+ },
6232
+ {
6233
+ "kind": "variable",
6234
+ "name": "epoch"
6235
+ },
6236
+ {
6237
+ "kind": "variable",
6238
+ "name": "promise"
6239
+ },
6240
+ {
6241
+ "kind": "variable",
6242
+ "name": "virtualizeRows",
6243
+ "type": {
6244
+ "text": "(config: VirtualizeRowsConfig) => DirectiveResult"
6245
+ },
6246
+ "description": "The body's `virtualize` directive. Annotated because the inferred type names\nupstream's private members (TS2742 / TS4094)."
6247
+ }
6248
+ ],
6249
+ "exports": [
6250
+ {
6251
+ "kind": "js",
6252
+ "name": "virtualizedRows",
6253
+ "declaration": {
6254
+ "name": "virtualizedRows",
6255
+ "module": "src/components/virtualize-rows.ts"
6256
+ }
6257
+ },
6258
+ {
6259
+ "kind": "js",
6260
+ "name": "virtualizeRows",
6261
+ "declaration": {
6262
+ "name": "virtualizeRows",
6263
+ "module": "src/components/virtualize-rows.ts"
6264
+ }
6265
+ }
6266
+ ]
6267
+ },
5812
6268
  {
5813
6269
  "kind": "javascript-module",
5814
6270
  "path": "src/components/virtualizer.ts",
5815
6271
  "declarations": [
6272
+ {
6273
+ "kind": "function",
6274
+ "name": "quietResizeObserverLoopNotice",
6275
+ "return": {
6276
+ "type": {
6277
+ "text": "void"
6278
+ }
6279
+ },
6280
+ "description": "Rows whose text wraps change height while the grid resizes or scrolls, and\nthe upstream virtualizer answers each measurement by resizing its own host\nwithin the same round of resize observations (it also keeps observing the\nrows it drops, which then report from outside the document). The browser\ndefers those observations to the next frame, where the layout settles, and\nreports the deferral as an error on the window: Safari logs it, Chrome hands\nit to page error listeners and error monitoring. It is benign, so the first\ngrid to connect cancels that message (and the older \"loop limit exceeded\"\nwording) for the window and keeps it from the listeners added after it\n(listeners added earlier still see it). Every other error is left alone."
6281
+ },
5816
6282
  {
5817
6283
  "kind": "function",
5818
6284
  "name": "revealWithin",
@@ -5905,6 +6371,45 @@
5905
6371
  },
5906
6372
  "default": "-1"
5907
6373
  },
6374
+ {
6375
+ "kind": "field",
6376
+ "name": "#reveal",
6377
+ "privacy": "private",
6378
+ "type": {
6379
+ "text": "number"
6380
+ },
6381
+ "default": "0",
6382
+ "description": "The latest scroll asked of element. A reveal deferred until the\nlayout settles runs only while it is still the latest, so a slow settle\ncannot pull the body back from a newer jump."
6383
+ },
6384
+ {
6385
+ "kind": "method",
6386
+ "name": "dispatchEvent",
6387
+ "privacy": "public",
6388
+ "return": {
6389
+ "type": {
6390
+ "text": "boolean"
6391
+ }
6392
+ },
6393
+ "parameters": [
6394
+ {
6395
+ "name": "event",
6396
+ "type": {
6397
+ "text": "Event"
6398
+ }
6399
+ }
6400
+ ],
6401
+ "description": "Holds the rows' re-render until every `rangeChanged` listener has run, so\na listener sees the rows of the previous range whatever its registration\norder. The grid's `bodyRangeChanged` relies on this: it reads which index\nthe focused row showed before the range moved."
6402
+ },
6403
+ {
6404
+ "kind": "field",
6405
+ "name": "layoutComplete",
6406
+ "type": {
6407
+ "text": "Promise<void> | undefined"
6408
+ },
6409
+ "privacy": "public",
6410
+ "description": "Upstream's promise, which settles only from its children ResizeObserver.\nA render that re-binds rows in place (a sort or a move under slot keys)\nresizes nothing, so it would never settle; when nothing has happened for\ntwo frames since the last render, the rows directive settles it instead.\nAnything else is left to upstream untouched.",
6411
+ "readonly": true
6412
+ },
5908
6413
  {
5909
6414
  "kind": "method",
5910
6415
  "name": "settled",
@@ -5983,6 +6488,26 @@
5983
6488
  },
5984
6489
  "description": "The nearest ancestor that scrolls this element (the grid host)."
5985
6490
  },
6491
+ {
6492
+ "kind": "field",
6493
+ "name": "#revealing",
6494
+ "privacy": "private",
6495
+ "type": {
6496
+ "text": "Promise<void>"
6497
+ },
6498
+ "description": "The scroll that reaches an unrendered item, until it has revealed it or given up."
6499
+ },
6500
+ {
6501
+ "kind": "method",
6502
+ "name": "revealed",
6503
+ "privacy": "public",
6504
+ "return": {
6505
+ "type": {
6506
+ "text": "Promise<void>"
6507
+ }
6508
+ },
6509
+ "description": "Resolves once the latest scroll to an unrendered item (see\nelement) has rendered and revealed it, or given up."
6510
+ },
5986
6511
  {
5987
6512
  "kind": "method",
5988
6513
  "name": "#scrollToUnrendered",
@@ -6004,29 +6529,103 @@
6004
6529
  "type": {
6005
6530
  "text": "RevealOptions"
6006
6531
  }
6532
+ },
6533
+ {
6534
+ "name": "reveal",
6535
+ "type": {
6536
+ "text": "number"
6537
+ }
6007
6538
  }
6008
6539
  ]
6009
6540
  },
6010
- {
6011
- "kind": "field",
6012
- "name": "tagName",
6013
- "privacy": "public",
6014
- "static": true,
6015
- "readonly": true
6016
- },
6017
6541
  {
6018
6542
  "kind": "method",
6019
- "name": "register",
6020
- "privacy": "public",
6021
- "static": true,
6543
+ "name": "#chase",
6544
+ "privacy": "private",
6022
6545
  "return": {
6023
6546
  "type": {
6024
- "text": "void"
6547
+ "text": "Promise<void>"
6025
6548
  }
6026
- }
6027
- },
6028
- {
6029
- "kind": "field",
6549
+ },
6550
+ "parameters": [
6551
+ {
6552
+ "name": "scroller",
6553
+ "type": {
6554
+ "text": "HTMLElement"
6555
+ }
6556
+ },
6557
+ {
6558
+ "name": "index",
6559
+ "type": {
6560
+ "text": "number"
6561
+ }
6562
+ },
6563
+ {
6564
+ "name": "options",
6565
+ "type": {
6566
+ "text": "RevealOptions"
6567
+ }
6568
+ },
6569
+ {
6570
+ "name": "reveal",
6571
+ "type": {
6572
+ "text": "number"
6573
+ }
6574
+ }
6575
+ ],
6576
+ "description": "Scrolls to the estimated offset of item `index` until the item is\nrendered, then aligns the real row. Each estimate starts from the rows\nrendered by then, so a miss is corrected from where the last scroll\nlanded. Stops when a newer scroll has been asked for."
6577
+ },
6578
+ {
6579
+ "kind": "method",
6580
+ "name": "#estimateScroll",
6581
+ "privacy": "private",
6582
+ "return": {
6583
+ "type": {
6584
+ "text": "number | null"
6585
+ }
6586
+ },
6587
+ "parameters": [
6588
+ {
6589
+ "name": "scroller",
6590
+ "type": {
6591
+ "text": "HTMLElement"
6592
+ }
6593
+ },
6594
+ {
6595
+ "name": "index",
6596
+ "type": {
6597
+ "text": "number"
6598
+ }
6599
+ },
6600
+ {
6601
+ "name": "options",
6602
+ "type": {
6603
+ "text": "RevealOptions"
6604
+ }
6605
+ }
6606
+ ],
6607
+ "description": "The scroll offset that brings unrendered item `index` into view as\n`options` asks, or `null` when no scroll is needed or possible.\n\nThe upstream layout sizes this element to its estimate of the total\nextent, so the average item size matches its own estimates for items it\nhas not measured. That average can be stale (rows that grew after they\nwere measured, an expanded detail panel), so it is applied only across\nthe gap from the nearest rendered row, whose position is real: an item\njust past the rendered range lands where the layout will draw it, and a\nscroll never jumps back past a correct position."
6608
+ },
6609
+ {
6610
+ "kind": "field",
6611
+ "name": "tagName",
6612
+ "privacy": "public",
6613
+ "static": true,
6614
+ "readonly": true
6615
+ },
6616
+ {
6617
+ "kind": "method",
6618
+ "name": "register",
6619
+ "privacy": "public",
6620
+ "static": true,
6621
+ "return": {
6622
+ "type": {
6623
+ "text": "void"
6624
+ }
6625
+ }
6626
+ },
6627
+ {
6628
+ "kind": "field",
6030
6629
  "name": "scroller",
6031
6630
  "type": {
6032
6631
  "text": "boolean"
@@ -6083,6 +6682,14 @@
6083
6682
  }
6084
6683
  ],
6085
6684
  "exports": [
6685
+ {
6686
+ "kind": "js",
6687
+ "name": "quietResizeObserverLoopNotice",
6688
+ "declaration": {
6689
+ "name": "quietResizeObserverLoopNotice",
6690
+ "module": "src/components/virtualizer.ts"
6691
+ }
6692
+ },
6086
6693
  {
6087
6694
  "kind": "js",
6088
6695
  "name": "revealWithin",
@@ -6260,8 +6867,8 @@
6260
6867
  "text": "Array<ColumnConfiguration<T>>"
6261
6868
  },
6262
6869
  "privacy": "public",
6263
- "description": "Visual render order: `'start'`-pinned columns first, then unpinned, then\n`'end'`-pinned. The user-supplied `columns` array is never mutated.",
6264
- "readonly": true
6870
+ "default": "[]",
6871
+ "description": "Visual render order: `'start'`-pinned columns first, then unpinned, then\n`'end'`-pinned. The user-supplied `columns` array is never mutated.\n\nResolved once per host update, so a virtualizer range change between\nupdates hands the rows still in range the same array and only the rows\nthat scrolled in render. A host update resolves a new array on purpose:\nrows read selection, expansion and the like from the state, and the new\narray is what re-renders them."
6265
6872
  },
6266
6873
  {
6267
6874
  "kind": "field",
@@ -6285,8 +6892,8 @@
6285
6892
  "type": {
6286
6893
  "text": "number"
6287
6894
  },
6288
- "privacy": "protected",
6289
- "description": "Number of chrome rows above the body for `aria-rowindex`: an optional group\nheader row and the column header (always present). The filter panel is a\nfloating overlay rather than a table row, so it is not counted here.",
6895
+ "privacy": "public",
6896
+ "description": "Number of chrome rows above the body for `aria-rowindex`: an optional group\nheader row and the column header (always present). The filter panel is a\nfloating overlay rather than a table row, so it is not counted here. The\none count behind `aria-rowcount`, the body rows and both pinned bands.",
6290
6897
  "readonly": true
6291
6898
  },
6292
6899
  {
@@ -8516,163 +9123,455 @@
8516
9123
  },
8517
9124
  {
8518
9125
  "kind": "method",
8519
- "name": "getNextColumn",
8520
- "privacy": "protected",
9126
+ "name": "getNextColumn",
9127
+ "privacy": "protected",
9128
+ "return": {
9129
+ "type": {
9130
+ "text": "Keys<T>"
9131
+ }
9132
+ },
9133
+ "parameters": [
9134
+ {
9135
+ "name": "key",
9136
+ "type": {
9137
+ "text": "Keys<T>"
9138
+ }
9139
+ }
9140
+ ]
9141
+ },
9142
+ {
9143
+ "kind": "method",
9144
+ "name": "findRow",
9145
+ "privacy": "protected",
9146
+ "parameters": [
9147
+ {
9148
+ "name": "index",
9149
+ "type": {
9150
+ "text": "number"
9151
+ }
9152
+ }
9153
+ ],
9154
+ "description": "The rendered body row at `index`, when the virtualizer has it in the DOM."
9155
+ },
9156
+ {
9157
+ "kind": "method",
9158
+ "name": "findCell",
9159
+ "privacy": "protected",
9160
+ "return": {
9161
+ "type": {
9162
+ "text": "HTMLElement | undefined"
9163
+ }
9164
+ },
9165
+ "parameters": [
9166
+ {
9167
+ "name": "node",
9168
+ "type": {
9169
+ "text": "ActiveNode<T>"
9170
+ }
9171
+ }
9172
+ ],
9173
+ "description": "The element that stands for `node` in the DOM: the cell, or for a row a\nfeature module renders full width (a group header, a total row) the\nrow's single focus target, whatever the column."
9174
+ },
9175
+ {
9176
+ "kind": "method",
9177
+ "name": "scrollToCell",
9178
+ "privacy": "protected",
9179
+ "parameters": [
9180
+ {
9181
+ "name": "node",
9182
+ "type": {
9183
+ "text": "ActiveNode<T>"
9184
+ }
9185
+ }
9186
+ ]
9187
+ },
9188
+ {
9189
+ "kind": "method",
9190
+ "name": "scrollToRow",
9191
+ "privacy": "protected",
9192
+ "parameters": [
9193
+ {
9194
+ "name": "index",
9195
+ "type": {
9196
+ "text": "number"
9197
+ }
9198
+ }
9199
+ ],
9200
+ "description": "Scrolls body row `index` into view, rendered or not."
9201
+ },
9202
+ {
9203
+ "kind": "field",
9204
+ "name": "#revealing",
9205
+ "privacy": "private",
9206
+ "type": {
9207
+ "text": "ActiveNode<T> | null"
9208
+ },
9209
+ "default": "null",
9210
+ "description": "The cell revealCell last asked for, so a late reveal yields to a newer one."
9211
+ },
9212
+ {
9213
+ "kind": "method",
9214
+ "name": "revealCell",
9215
+ "privacy": "public",
9216
+ "return": {
9217
+ "type": {
9218
+ "text": "void"
9219
+ }
9220
+ },
9221
+ "parameters": [
9222
+ {
9223
+ "name": "node",
9224
+ "type": {
9225
+ "text": "ActiveNode<T>"
9226
+ }
9227
+ }
9228
+ ],
9229
+ "description": "Scrolls the cell at `node` into view clear of the sticky chrome without\nmoving the active cell: the cell itself when it is rendered, else its row\nfirst and the cell once the virtualizer has rendered it. For a feature\nthat moves something other than the active cell with the keyboard (range\nextension), so it scrolls the way arrow navigation does."
9230
+ },
9231
+ {
9232
+ "kind": "method",
9233
+ "name": "towardsInlineEnd",
9234
+ "privacy": "public",
9235
+ "return": {
9236
+ "type": {
9237
+ "text": "boolean"
9238
+ }
9239
+ },
9240
+ "parameters": [
9241
+ {
9242
+ "name": "key",
9243
+ "type": {
9244
+ "text": "string"
9245
+ }
9246
+ }
9247
+ ],
9248
+ "description": "Whether ArrowLeft or ArrowRight steps towards the end of the column\norder: ArrowRight in a left-to-right grid, ArrowLeft in a right-to-left\none. The rule every inline arrow key on this grid follows."
9249
+ },
9250
+ {
9251
+ "kind": "method",
9252
+ "name": "scrollInsets",
9253
+ "privacy": "public",
9254
+ "return": {
9255
+ "type": {
9256
+ "text": "ScrollInsets"
9257
+ }
9258
+ },
9259
+ "description": "How much of the scroll container's scrollport the sticky chrome covers\n(toolbar, headers and the pinned-top band above, the pinned-bottom band\nand the paginator below, pinned columns on either side). Keyboard scrolls\nuse it as scroll-padding, so a row or cell the keyboard moves to is never\nparked underneath that chrome. Measured right before each keyboard scroll\nbecause any of those bands can change size between key presses. Public\nso a feature scrolling the body itself (drag auto-scroll) measures the\nsame chrome."
9260
+ },
9261
+ {
9262
+ "kind": "method",
9263
+ "name": "focusActiveCell",
9264
+ "privacy": "public",
9265
+ "return": {
9266
+ "type": {
9267
+ "text": "void"
9268
+ }
9269
+ },
9270
+ "parameters": [
9271
+ {
9272
+ "name": "reveal",
9273
+ "default": "false",
9274
+ "description": "also scroll the cell into view once it exists, for jumps\nwhose target row was not rendered when the scroll started."
9275
+ }
9276
+ ],
9277
+ "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 and, when the cell is not in the DOM yet\n(a long jump), for the virtualizer to finish laying out the new range.\nNo-op while no cell is active (the scroll container keeps focus as the\nentry point)."
9278
+ },
9279
+ {
9280
+ "kind": "method",
9281
+ "name": "#focusActive",
9282
+ "privacy": "private",
9283
+ "return": {
9284
+ "type": {
9285
+ "text": "Promise<void>"
9286
+ }
9287
+ },
9288
+ "parameters": [
9289
+ {
9290
+ "name": "reveal",
9291
+ "default": "false"
9292
+ }
9293
+ ],
9294
+ "description": "focusActiveCell, settling once the focus moved or was given up."
9295
+ },
9296
+ {
9297
+ "kind": "field",
9298
+ "name": "active",
9299
+ "privacy": "public"
9300
+ },
9301
+ {
9302
+ "kind": "field",
9303
+ "name": "ownsFocus",
9304
+ "type": {
9305
+ "text": "boolean"
9306
+ },
9307
+ "privacy": "public",
9308
+ "description": "Whether this grid's body holds focus: the body itself, one of its cells\nor an editor in one, not a grid nested in a detail panel. Tracked from\nthe body's focus events (focusEntered, focusLeft). A\nfocus loss a re-bind caused (it removed the focused editor while a\nreconcile is running) keeps it until that reconcile has run, so it can\nput focus back under row recycling. Any other loss clears it: a click\nelsewhere, the window losing focus, a template removing its own focused\nelement, the grid leaving the document. Focus is never taken back once\nit left the grid.",
9309
+ "readonly": true
9310
+ },
9311
+ {
9312
+ "kind": "field",
9313
+ "name": "#ownsFocus",
9314
+ "privacy": "private",
9315
+ "type": {
9316
+ "text": "boolean"
9317
+ },
9318
+ "default": "false"
9319
+ },
9320
+ {
9321
+ "kind": "method",
9322
+ "name": "#settleLoss",
9323
+ "privacy": "private",
9324
+ "return": {
9325
+ "type": {
9326
+ "text": "void"
9327
+ }
9328
+ },
9329
+ "description": "Clears ownsFocus when focus went nowhere with nothing pending to\nrepair it. Chromium reports a focused element removed or moved in the\nDOM with a `focusout` (focusLeft decides then); Firefox and\nWebKit drop focus silently, so the loss is noticed here, the next time\nanything asks."
9330
+ },
9331
+ {
9332
+ "kind": "field",
9333
+ "name": "#focusedRecord",
9334
+ "privacy": "private",
9335
+ "type": {
9336
+ "text": "T | null"
9337
+ },
9338
+ "default": "null",
9339
+ "description": "The record the focused row showed when focus arrived, for the reconcile."
9340
+ },
9341
+ {
9342
+ "kind": "field",
9343
+ "name": "#focusTarget",
9344
+ "privacy": "private",
9345
+ "type": {
9346
+ "text": "{ el: Element; row: ApexGridRow<T> | undefined } | null"
9347
+ },
9348
+ "default": "null",
9349
+ "description": "The element focus arrived on and the row it stood in, for the reconcile."
9350
+ },
9351
+ {
9352
+ "kind": "field",
9353
+ "name": "#blurred",
9354
+ "privacy": "private",
9355
+ "type": {
9356
+ "text": "Element | null"
9357
+ },
9358
+ "default": "null",
9359
+ "description": "The element that lost focus to nowhere in this task, until a microtask\ntells a removal (no longer in the document) from a blur (still there)."
9360
+ },
9361
+ {
9362
+ "kind": "field",
9363
+ "name": "#moved",
9364
+ "privacy": "private",
9365
+ "type": {
9366
+ "text": "Element | null"
9367
+ },
9368
+ "default": "null",
9369
+ "description": "An element that lost focus by moving into another row with its record\nwhile a reconcile was running, for the reconcile to focus again."
9370
+ },
9371
+ {
9372
+ "kind": "field",
9373
+ "name": "#reconcile",
9374
+ "privacy": "private",
9375
+ "type": {
9376
+ "text": "number"
9377
+ },
9378
+ "default": "0",
9379
+ "description": "Bumped by every reconcileFocus, so only the latest one acts."
9380
+ },
9381
+ {
9382
+ "kind": "field",
9383
+ "name": "#reconciling",
9384
+ "privacy": "private",
9385
+ "type": {
9386
+ "text": "number"
9387
+ },
9388
+ "default": "0",
9389
+ "description": "The token of the reconcile still to run, or 0 when none is."
9390
+ },
9391
+ {
9392
+ "kind": "field",
9393
+ "name": "#parked",
9394
+ "privacy": "private",
9395
+ "type": {
9396
+ "text": "{ record: T | null } | null"
9397
+ },
9398
+ "default": "null",
9399
+ "description": "Set while a page change holds focus in the body (see parkFocus)."
9400
+ },
9401
+ {
9402
+ "kind": "field",
9403
+ "name": "#focusingBody",
9404
+ "privacy": "private",
9405
+ "type": {
9406
+ "text": "boolean"
9407
+ },
9408
+ "default": "false",
9409
+ "description": "Set while this controller focuses the body itself, which must not forward."
9410
+ },
9411
+ {
9412
+ "kind": "field",
9413
+ "name": "#detached",
9414
+ "privacy": "private",
9415
+ "type": {
9416
+ "text": "{ node: ActiveNode<T> } | null"
9417
+ },
9418
+ "default": "null",
9419
+ "description": "A focused grid's active cell when it was detached, until it is re-attached."
9420
+ },
9421
+ {
9422
+ "kind": "field",
9423
+ "name": "forwardsBodyFocus",
9424
+ "type": {
9425
+ "text": "boolean"
9426
+ },
9427
+ "privacy": "public",
9428
+ "description": "Whether focus arriving on the body itself should move on to the active\ncell (the roving tab stop). Not while a page change holds focus in the\nbody, or while this controller puts it there.",
9429
+ "readonly": true
9430
+ },
9431
+ {
9432
+ "kind": "method",
9433
+ "name": "focusEntered",
9434
+ "privacy": "public",
9435
+ "return": {
9436
+ "type": {
9437
+ "text": "void"
9438
+ }
9439
+ },
9440
+ "parameters": [
9441
+ {
9442
+ "name": "event",
9443
+ "type": {
9444
+ "text": "FocusEvent"
9445
+ }
9446
+ },
9447
+ {
9448
+ "name": "owned",
9449
+ "type": {
9450
+ "text": "boolean"
9451
+ }
9452
+ }
9453
+ ],
9454
+ "description": "Focus arrived in the body. `owned` is whether the event is this grid's\nrather than a nested grid's (the grid's `ownsEvent`)."
9455
+ },
9456
+ {
9457
+ "kind": "method",
9458
+ "name": "focusLeft",
9459
+ "privacy": "public",
8521
9460
  "return": {
8522
9461
  "type": {
8523
- "text": "Keys<T>"
9462
+ "text": "void"
8524
9463
  }
8525
9464
  },
8526
9465
  "parameters": [
8527
9466
  {
8528
- "name": "key",
9467
+ "name": "event",
8529
9468
  "type": {
8530
- "text": "Keys<T>"
9469
+ "text": "FocusEvent"
8531
9470
  }
8532
- }
8533
- ]
8534
- },
8535
- {
8536
- "kind": "method",
8537
- "name": "findRow",
8538
- "privacy": "protected",
8539
- "parameters": [
9471
+ },
8540
9472
  {
8541
- "name": "index",
9473
+ "name": "owned",
8542
9474
  "type": {
8543
- "text": "number"
9475
+ "text": "boolean"
8544
9476
  }
8545
9477
  }
8546
9478
  ],
8547
- "description": "The rendered body row at `index`, when the virtualizer has it in the DOM."
9479
+ "description": "Focus left something in the body. Focus moving to another element is\nfollowed by its `focusin`, which sets ownsFocus again when that\nelement is this body's. Focus going nowhere is a blur when the element\nis still in the document a microtask later, and a removal otherwise. A\nremoval keeps ownsFocus only while a reconcile is running, which\nthen decides; with none, nothing would repair it, so a later reconcile\nmust not either."
8548
9480
  },
8549
9481
  {
8550
9482
  "kind": "method",
8551
- "name": "findCell",
8552
- "privacy": "protected",
9483
+ "name": "reconcileFocus",
9484
+ "privacy": "public",
8553
9485
  "return": {
8554
9486
  "type": {
8555
- "text": "HTMLElement | undefined"
9487
+ "text": "void"
8556
9488
  }
8557
9489
  },
8558
- "parameters": [
8559
- {
8560
- "name": "node",
8561
- "type": {
8562
- "text": "ActiveNode<T>"
8563
- }
8564
- }
8565
- ],
8566
- "description": "The element that stands for `node` in the DOM: the cell, or for a row a\nfeature module renders full width (a group header, a total row) the\nrow's single focus target, whatever the column."
9490
+ "description": "Row recycling: after the rows re-render, puts focus back in the body when\nthe render took it away. A re-bind keeps every row element in place, so\nfocus usually stays where it was, on the cell at the active position; it\nis lost only when the focused element left the document (an editor whose\nslot now shows another record) or stands on a row that now shows another\nrecord without being active. Then focus goes to the edited record's\neditor when it is rendered, else the active cell when its row is, else\nthe body. Acts only while the body owns focus, so it never takes focus\nback from outside the grid or off a nested grid. A loss it leaves\nunrepaired clears ownsFocus."
8567
9491
  },
8568
9492
  {
8569
9493
  "kind": "method",
8570
- "name": "scrollToCell",
8571
- "privacy": "protected",
8572
- "parameters": [
8573
- {
8574
- "name": "node",
8575
- "type": {
8576
- "text": "ActiveNode<T>"
8577
- }
9494
+ "name": "#restoreFocus",
9495
+ "privacy": "private",
9496
+ "return": {
9497
+ "type": {
9498
+ "text": "Promise<void>"
8578
9499
  }
8579
- ]
9500
+ },
9501
+ "description": "Focus on what moved with the focused record (a detail panel's input),\nelse the edited record's editor, else the active cell, else the body."
8580
9502
  },
8581
9503
  {
8582
9504
  "kind": "method",
8583
- "name": "scrollToRow",
8584
- "privacy": "protected",
8585
- "parameters": [
8586
- {
8587
- "name": "index",
8588
- "type": {
8589
- "text": "number"
8590
- }
9505
+ "name": "#silentlyMoved",
9506
+ "privacy": "private",
9507
+ "return": {
9508
+ "type": {
9509
+ "text": "Element | null"
8591
9510
  }
8592
- ],
8593
- "description": "Scrolls body row `index` into view, rendered or not."
9511
+ },
9512
+ "description": "The focused element when it moved into another row without a `focusout`\n(Firefox, WebKit), which focusLeft records as #moved in\nChromium: focus went nowhere and the element is back in the document in\nanother row."
8594
9513
  },
8595
9514
  {
8596
- "kind": "field",
8597
- "name": "#revealing",
8598
- "privacy": "private",
8599
- "type": {
8600
- "text": "ActiveNode<T> | null"
9515
+ "kind": "method",
9516
+ "name": "parkFocus",
9517
+ "privacy": "public",
9518
+ "return": {
9519
+ "type": {
9520
+ "text": "(() => Promise<void>) | null"
9521
+ }
8601
9522
  },
8602
- "default": "null",
8603
- "description": "The cell revealCell last asked for, so a late reveal yields to a newer one."
9523
+ "description": "Row recycling: a page change re-binds every row to the new page's\nrecords, so a focused cell would stay focused on another record. Holds\nfocus in the body across the change: the body does not forward focus to\nthe active cell, and the post-render reconcile waits. Returns what to\ncall once the change has run its pipeline: focus then moves to the body\nunless it rests on an editor or on a cell still showing the record it\nshowed before. Returns `null`, holding nothing, without row recycling or\nwhile the body does not own focus."
8604
9524
  },
8605
9525
  {
8606
9526
  "kind": "method",
8607
- "name": "revealCell",
8608
- "privacy": "public",
9527
+ "name": "#focusBody",
9528
+ "privacy": "private",
8609
9529
  "return": {
8610
9530
  "type": {
8611
9531
  "text": "void"
8612
9532
  }
8613
9533
  },
8614
- "parameters": [
8615
- {
8616
- "name": "node",
8617
- "type": {
8618
- "text": "ActiveNode<T>"
8619
- }
8620
- }
8621
- ],
8622
- "description": "Scrolls the cell at `node` into view clear of the sticky chrome without\nmoving the active cell: the cell itself when it is rendered, else its row\nfirst and the cell once the virtualizer has rendered it. For a feature\nthat moves something other than the active cell with the keyboard (range\nextension), so it scrolls the way arrow navigation does."
9534
+ "description": "Focuses the body itself, without its forward to the active cell."
8623
9535
  },
8624
9536
  {
8625
9537
  "kind": "method",
8626
- "name": "towardsInlineEnd",
8627
- "privacy": "public",
9538
+ "name": "#lost",
9539
+ "privacy": "private",
8628
9540
  "return": {
8629
9541
  "type": {
8630
9542
  "text": "boolean"
8631
9543
  }
8632
9544
  },
8633
- "parameters": [
8634
- {
8635
- "name": "key",
8636
- "type": {
8637
- "text": "string"
8638
- }
8639
- }
8640
- ],
8641
- "description": "Whether ArrowLeft or ArrowRight steps towards the end of the column\norder: ArrowRight in a left-to-right grid, ArrowLeft in a right-to-left\none. The rule every inline arrow key on this grid follows."
9545
+ "description": "Whether focus has gone nowhere."
8642
9546
  },
8643
9547
  {
8644
9548
  "kind": "method",
8645
- "name": "scrollInsets",
8646
- "privacy": "public",
9549
+ "name": "#renderedRows",
9550
+ "privacy": "private",
8647
9551
  "return": {
8648
9552
  "type": {
8649
- "text": "ScrollInsets"
9553
+ "text": "ApexGridRow<T>[]"
8650
9554
  }
8651
- },
8652
- "description": "How much of the scroll container's scrollport the sticky chrome covers\n(toolbar, headers and the pinned-top band above, the pinned-bottom band\nand the paginator below, pinned columns on either side). Keyboard scrolls\nuse it as scroll-padding, so a row or cell the keyboard moves to is never\nparked underneath that chrome. Measured right before each keyboard scroll\nbecause any of those bands can change size between key presses. Public\nso a feature scrolling the body itself (drag auto-scroll) measures the\nsame chrome."
9555
+ }
8653
9556
  },
8654
9557
  {
8655
9558
  "kind": "method",
8656
- "name": "focusActiveCell",
8657
- "privacy": "public",
9559
+ "name": "#locate",
9560
+ "privacy": "private",
8658
9561
  "return": {
8659
9562
  "type": {
8660
- "text": "void"
9563
+ "text": "{ row?: ApexGridRow<T>; cell?: ApexGridRow<T>['cells'][number] } | null"
8661
9564
  }
8662
9565
  },
8663
9566
  "parameters": [
8664
9567
  {
8665
- "name": "reveal",
8666
- "default": "false",
8667
- "description": "also scroll the cell into view once it exists, for jumps\nwhose target row was not rendered when the scroll started."
9568
+ "name": "el",
9569
+ "type": {
9570
+ "text": "EventTarget | null"
9571
+ }
8668
9572
  }
8669
9573
  ],
8670
- "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 and, when the cell is not in the DOM yet\n(a long jump), for the virtualizer to finish laying out the new range.\nNo-op while no cell is active (the scroll container keeps focus as the\nentry point)."
8671
- },
8672
- {
8673
- "kind": "field",
8674
- "name": "active",
8675
- "privacy": "public"
9574
+ "description": "Where `el` stands in this grid's body: the row and cell holding it, or\nneither for the body itself. `null` when it is not in this body, which\nincludes a grid nested in one of its rows (its own body comes first on\nthe way up)."
8676
9575
  },
8677
9576
  {
8678
9577
  "kind": "method",
@@ -8812,6 +9711,25 @@
8812
9711
  "name": "hostDisconnected",
8813
9712
  "privacy": "public"
8814
9713
  },
9714
+ {
9715
+ "kind": "method",
9716
+ "name": "#refocusAfterMove",
9717
+ "privacy": "private",
9718
+ "return": {
9719
+ "type": {
9720
+ "text": "void"
9721
+ }
9722
+ },
9723
+ "parameters": [
9724
+ {
9725
+ "name": "node",
9726
+ "type": {
9727
+ "text": "ActiveNode<T>"
9728
+ }
9729
+ }
9730
+ ],
9731
+ "description": "Restores the active cell a moved grid had and focuses it (the body when\nno cell was active, or its row is not rendered), unless something else\ntook focus in the meantime."
9732
+ },
8815
9733
  {
8816
9734
  "kind": "field",
8817
9735
  "name": "editing",
@@ -8862,6 +9780,25 @@
8862
9780
  ],
8863
9781
  "description": "Keyboard row reorder: Space grabs the active row, arrows move it, Space /\nEnter drops, Escape cancels. Returns `true` when the event was consumed.\nOnly active when `rowReordering.enabled` (so it never shadows Space-to-select\non grids without reordering)."
8864
9782
  },
9783
+ {
9784
+ "kind": "method",
9785
+ "name": "#followRecord",
9786
+ "privacy": "private",
9787
+ "return": {
9788
+ "type": {
9789
+ "text": "void"
9790
+ }
9791
+ },
9792
+ "parameters": [
9793
+ {
9794
+ "name": "record",
9795
+ "type": {
9796
+ "text": "T"
9797
+ }
9798
+ }
9799
+ ],
9800
+ "description": "After a keyboard grab moves `record` (or Escape puts it back), puts the\nactive row on the record's view index and real focus on its cell, once\nthe re-run pipeline has rendered. The move re-renders the rows, which\ncan drop focus or leave it on an element now showing another record.\nYields when the active cell changed in the meantime (a newer key)."
9801
+ },
8865
9802
  {
8866
9803
  "kind": "method",
8867
9804
  "name": "navigate",
@@ -8943,7 +9880,7 @@
8943
9880
  "text": "number"
8944
9881
  },
8945
9882
  "privacy": "public",
8946
- "description": "The total number of records before pagination is applied.",
9883
+ "description": "The number of rows paged through (see ApexGrid.totalItems).",
8947
9884
  "readonly": true
8948
9885
  },
8949
9886
  {
@@ -8966,6 +9903,31 @@
8966
9903
  "description": "Returns the resolved PaginationState for the current host.",
8967
9904
  "readonly": true
8968
9905
  },
9906
+ {
9907
+ "kind": "method",
9908
+ "name": "#stateFor",
9909
+ "privacy": "private",
9910
+ "return": {
9911
+ "type": {
9912
+ "text": "PaginationState"
9913
+ }
9914
+ },
9915
+ "parameters": [
9916
+ {
9917
+ "name": "page",
9918
+ "type": {
9919
+ "text": "number"
9920
+ }
9921
+ },
9922
+ {
9923
+ "name": "pageSize",
9924
+ "type": {
9925
+ "text": "number"
9926
+ }
9927
+ }
9928
+ ],
9929
+ "description": "The state for `page` and `pageSize` over the rows the grid holds now."
9930
+ },
8969
9931
  {
8970
9932
  "kind": "method",
8971
9933
  "name": "clamp",
@@ -9018,8 +9980,28 @@
9018
9980
  },
9019
9981
  {
9020
9982
  "kind": "method",
9021
- "name": "#emitChanged",
9022
- "privacy": "private"
9983
+ "name": "#apply",
9984
+ "privacy": "private",
9985
+ "return": {
9986
+ "type": {
9987
+ "text": "Promise<void>"
9988
+ }
9989
+ },
9990
+ "parameters": [
9991
+ {
9992
+ "name": "page",
9993
+ "type": {
9994
+ "text": "number"
9995
+ }
9996
+ },
9997
+ {
9998
+ "name": "pageSize",
9999
+ "type": {
10000
+ "text": "number"
10001
+ }
10002
+ }
10003
+ ],
10004
+ "description": "Applies `page` and `pageSize`, then fires `pageChanged` for that change\nonce it rendered. The detail is this change, not whatever page a later\ncall moved to meanwhile, so two unawaited calls report two pages. In\nlocal mode the body slice is read from ApexGrid.pageItems on\nrender, so the data pipeline does not rerun; in remote mode it does, so\na pipeline hook that fetches the page by `grid.page` sees the new page."
9023
10005
  },
9024
10006
  {
9025
10007
  "kind": "method",
@@ -9039,7 +10021,7 @@
9039
10021
  "description": "The target zero-based page index. Out-of-range values are clamped."
9040
10022
  }
9041
10023
  ],
9042
- "description": "Navigates to `page`, emitting the cancellable `pageChanging` event first and\nthe `pageChanged` event after the pipeline has applied."
10024
+ "description": "Navigates to `page`, emitting the cancellable `pageChanging` event first and\nthe `pageChanged` event after the change rendered."
9043
10025
  },
9044
10026
  {
9045
10027
  "kind": "method",
@@ -9551,6 +10533,16 @@
9551
10533
  "description": "Whether row pinning is enabled at the grid level.",
9552
10534
  "readonly": true
9553
10535
  },
10536
+ {
10537
+ "kind": "field",
10538
+ "name": "version",
10539
+ "type": {
10540
+ "text": "number"
10541
+ },
10542
+ "privacy": "public",
10543
+ "default": "0",
10544
+ "description": "Bumped whenever either band's contents change, so a view derived from the\npins (the body's ApexGrid.pageItems) knows when to recompute.\nRead only."
10545
+ },
9554
10546
  {
9555
10547
  "kind": "field",
9556
10548
  "name": "hasPinnedRows",
@@ -9809,6 +10801,42 @@
9809
10801
  "kind": "javascript-module",
9810
10802
  "path": "src/controllers/row-reorder.ts",
9811
10803
  "declarations": [
10804
+ {
10805
+ "kind": "function",
10806
+ "name": "captureRowGhost",
10807
+ "return": {
10808
+ "type": {
10809
+ "text": "RowGhostInit"
10810
+ }
10811
+ },
10812
+ "parameters": [
10813
+ {
10814
+ "name": "row",
10815
+ "type": {
10816
+ "text": "Element"
10817
+ }
10818
+ },
10819
+ {
10820
+ "name": "cells",
10821
+ "type": {
10822
+ "text": "ReadonlyArray<Element>"
10823
+ }
10824
+ },
10825
+ {
10826
+ "name": "clientX",
10827
+ "type": {
10828
+ "text": "number"
10829
+ }
10830
+ },
10831
+ {
10832
+ "name": "clientY",
10833
+ "type": {
10834
+ "text": "number"
10835
+ }
10836
+ }
10837
+ ],
10838
+ "description": "Snapshots a row element for the floating ghost: its bounding rect and each\ncell's rendered text, width and alignment. A cell renders into its own\nshadow root, so the text is read from there."
10839
+ },
9812
10840
  {
9813
10841
  "kind": "class",
9814
10842
  "description": "Reactive controller backing row drag-reorder and a manual row order.",
@@ -9879,7 +10907,7 @@
9879
10907
  "name": "#pending",
9880
10908
  "privacy": "private",
9881
10909
  "type": {
9882
- "text": "{\n data: T;\n getGhost: () => RowGhostInit;\n startX: number;\n startY: number;\n pointerId: number;\n } | null"
10910
+ "text": "{\n data: T;\n getGhost: () => RowGhostInit | null;\n startX: number;\n startY: number;\n pointerId: number;\n } | null"
9883
10911
  },
9884
10912
  "default": "null",
9885
10913
  "description": "In-flight pointer-drag gesture. The move/up listeners live on the **grid\nhost** (a stable element), not the row, so a live-swap that recycles the\nsource row's DOM can't tear the drag down mid-gesture."
@@ -10182,7 +11210,7 @@
10182
11210
  {
10183
11211
  "name": "getGhost",
10184
11212
  "type": {
10185
- "text": "() => RowGhostInit"
11213
+ "text": "() => RowGhostInit | null"
10186
11214
  }
10187
11215
  },
10188
11216
  {
@@ -10192,13 +11220,32 @@
10192
11220
  }
10193
11221
  }
10194
11222
  ],
10195
- "description": "Arms a pointer drag from a row press. Called by the row on `pointerdown`\n(from the grip in handle mode, or anywhere in whole-row mode). The move\nlistener is bound to the **grid host**, so the gesture is immune to the\nsource row's DOM being recycled by a live-swap; the up / cancel listeners\nare bound to the document, so a release outside the grid ends it too, as\ndoes a move with the primary button no longer held. `getGhost` is a thunk\nthe controller invokes once, the instant the drag engages, to snapshot the\nrow's cells (the row is still in place then)."
11223
+ "description": "Arms a pointer drag from a row press. Called by the row on `pointerdown`\n(from the grip in handle mode, or anywhere in whole-row mode). The move\nlistener is bound to the **grid host**, so the gesture is immune to the\nsource row's DOM being recycled by a live-swap; the up / cancel listeners\nare bound to the document, so a release outside the grid ends it too, as\ndoes a move with the primary button no longer held. The ghost is\nsnapshotted once, the instant the drag engages, from the row element that\nrenders `data` then; `getGhost` is the pressed row's own snapshot, used\nwhen no rendered row shows `data`, and returns `null` once that row shows\nanother record."
10196
11224
  },
10197
11225
  {
10198
11226
  "kind": "field",
10199
11227
  "name": "#onHostPointerMove",
10200
11228
  "privacy": "private"
10201
11229
  },
11230
+ {
11231
+ "kind": "method",
11232
+ "name": "#ghostAtEngage",
11233
+ "privacy": "private",
11234
+ "return": {
11235
+ "type": {
11236
+ "text": "RowGhostInit | null"
11237
+ }
11238
+ },
11239
+ "parameters": [
11240
+ {
11241
+ "name": "pending",
11242
+ "type": {
11243
+ "text": "{\n data: T;\n getGhost: () => RowGhostInit | null;\n startX: number;\n startY: number;\n }"
11244
+ }
11245
+ }
11246
+ ],
11247
+ "description": "The ghost snapshot for an engaging drag, taken from the row element that\nrenders the pressed record now. A re-bind between the press and the\nengage (a sort, a data change) can leave another record in the pressed\nelement, so the element is found by record, not kept from the press."
11248
+ },
10202
11249
  {
10203
11250
  "kind": "field",
10204
11251
  "name": "#onPointerUp",
@@ -10455,6 +11502,14 @@
10455
11502
  }
10456
11503
  ],
10457
11504
  "exports": [
11505
+ {
11506
+ "kind": "js",
11507
+ "name": "captureRowGhost",
11508
+ "declaration": {
11509
+ "name": "captureRowGhost",
11510
+ "module": "src/controllers/row-reorder.ts"
11511
+ }
11512
+ },
10458
11513
  {
10459
11514
  "kind": "js",
10460
11515
  "name": "RowReorderController",
@@ -10499,11 +11554,27 @@
10499
11554
  "default": "null",
10500
11555
  "description": "Anchor row for Shift+click range selection. Set whenever a single row\nis toggled / picked so a follow-up Shift+click knows where to start."
10501
11556
  },
11557
+ {
11558
+ "kind": "field",
11559
+ "name": "#seen",
11560
+ "privacy": "private",
11561
+ "type": {
11562
+ "text": "[unknown, unknown]"
11563
+ },
11564
+ "default": "[undefined, undefined]",
11565
+ "description": "The selection config and data the selection was last checked against."
11566
+ },
10502
11567
  {
10503
11568
  "kind": "method",
10504
11569
  "name": "hostConnected",
10505
11570
  "privacy": "public"
10506
11571
  },
11572
+ {
11573
+ "kind": "method",
11574
+ "name": "hostUpdated",
11575
+ "privacy": "public",
11576
+ "description": "Drops selected rows the `isRowSelectable` predicate rejects once\n`selection` or `data` is reassigned. Runs after the render, so the\n`rowSelecting`/`rowSelected` listeners (and any grid property they\nwrite) start a normal update. Without a predicate nothing is checked,\nand a mode switch never trims the selection here."
11577
+ },
10507
11578
  {
10508
11579
  "kind": "field",
10509
11580
  "name": "enabled",
@@ -10553,6 +11624,63 @@
10553
11624
  ],
10554
11625
  "description": "Whether the given row is currently selected."
10555
11626
  },
11627
+ {
11628
+ "kind": "method",
11629
+ "name": "isSelectable",
11630
+ "privacy": "public",
11631
+ "return": {
11632
+ "type": {
11633
+ "text": "boolean"
11634
+ }
11635
+ },
11636
+ "parameters": [
11637
+ {
11638
+ "name": "row",
11639
+ "type": {
11640
+ "text": "T"
11641
+ }
11642
+ }
11643
+ ],
11644
+ "description": "Whether `row` can be selected: a data record (see\nStateController.isDataRow) that `selection.isRowSelectable`, when\nset, accepts."
11645
+ },
11646
+ {
11647
+ "kind": "method",
11648
+ "name": "selectable",
11649
+ "privacy": "public",
11650
+ "return": {
11651
+ "type": {
11652
+ "text": "ReadonlyArray<T>"
11653
+ }
11654
+ },
11655
+ "parameters": [
11656
+ {
11657
+ "name": "rows",
11658
+ "type": {
11659
+ "text": "ReadonlyArray<T>"
11660
+ }
11661
+ }
11662
+ ],
11663
+ "description": "The selectable rows of `rows` (see isSelectable), in order.\nReturns `rows` itself when nothing filters them (the community grid\nwithout a predicate)."
11664
+ },
11665
+ {
11666
+ "kind": "method",
11667
+ "name": "#accepted",
11668
+ "privacy": "private",
11669
+ "return": {
11670
+ "type": {
11671
+ "text": "ReadonlyArray<T>"
11672
+ }
11673
+ },
11674
+ "parameters": [
11675
+ {
11676
+ "name": "rows",
11677
+ "type": {
11678
+ "text": "ReadonlyArray<T>"
11679
+ }
11680
+ }
11681
+ ],
11682
+ "description": "The rows `selection.isRowSelectable` accepts; `rows` itself when unset."
11683
+ },
10556
11684
  {
10557
11685
  "kind": "method",
10558
11686
  "name": "selectedRows",
@@ -10573,7 +11701,7 @@
10573
11701
  "text": "boolean"
10574
11702
  }
10575
11703
  },
10576
- "description": "Whether every data record the current view covers is selected, including\nthe leaves of collapsed groups (see StateController.viewRecords).\n`false` when the view covers none. Used by the header checkbox to render\nits \"all\" state."
11704
+ "description": "Whether every selectable record the current view covers is selected,\nincluding the leaves of collapsed groups (see\nStateController.viewRecords). `false` when the view covers none.\nUsed by the header checkbox to render its \"all\" state."
10577
11705
  },
10578
11706
  {
10579
11707
  "kind": "method",
@@ -10690,7 +11818,7 @@
10690
11818
  "text": "Promise<boolean>"
10691
11819
  }
10692
11820
  },
10693
- "description": "Selects every data record the current view (ApexGrid.dataView)\ncovers, including the leaves of collapsed groups. No-op in `'single'`\nmode."
11821
+ "description": "Selects every selectable record the current view\n(ApexGrid.dataView) covers, including the leaves of collapsed\ngroups. No-op in `'single'` mode."
10694
11822
  },
10695
11823
  {
10696
11824
  "kind": "method",
@@ -10734,18 +11862,7 @@
10734
11862
  },
10735
11863
  {
10736
11864
  "kind": "method",
10737
- "name": "#records",
10738
- "privacy": "private",
10739
- "return": {
10740
- "type": {
10741
- "text": "ReadonlyArray<T>"
10742
- }
10743
- },
10744
- "description": "The data records the current view covers, collapsed group leaves included."
10745
- },
10746
- {
10747
- "kind": "method",
10748
- "name": "#isDataRow",
11865
+ "name": "#togglable",
10749
11866
  "privacy": "private",
10750
11867
  "return": {
10751
11868
  "type": {
@@ -10759,7 +11876,19 @@
10759
11876
  "text": "T"
10760
11877
  }
10761
11878
  }
10762
- ]
11879
+ ],
11880
+ "description": "Whether a toggle may act on `row`: a selected row can always be\ndeselected, even one the predicate has since come to reject (a row\npinned or edited in place), so it never gets stuck selected."
11881
+ },
11882
+ {
11883
+ "kind": "method",
11884
+ "name": "#records",
11885
+ "privacy": "private",
11886
+ "return": {
11887
+ "type": {
11888
+ "text": "ReadonlyArray<T>"
11889
+ }
11890
+ },
11891
+ "description": "The selectable records the current view covers, collapsed group leaves included."
10763
11892
  },
10764
11893
  {
10765
11894
  "kind": "method",
@@ -11347,16 +12476,6 @@
11347
12476
  "privacy": "public",
11348
12477
  "readonly": true
11349
12478
  },
11350
- {
11351
- "kind": "field",
11352
- "name": "pinOffsets",
11353
- "type": {
11354
- "text": "Map<unknown, number>"
11355
- },
11356
- "privacy": "public",
11357
- "description": "Cumulative pin offsets (in px) keyed by column key. Populated by the\nGridDOMController after each layout.",
11358
- "readonly": true
11359
- },
11360
12479
  {
11361
12480
  "kind": "method",
11362
12481
  "name": "init",
@@ -11382,6 +12501,32 @@
11382
12501
  "default": "[]",
11383
12502
  "description": "The transformers that can synthesize rows. Empty for the community grid."
11384
12503
  },
12504
+ {
12505
+ "kind": "field",
12506
+ "name": "#hooks",
12507
+ "privacy": "private",
12508
+ "default": "new Map<unknown, unknown[]>()",
12509
+ "description": "The controllers each hook guard matched, keyed by the guard."
12510
+ },
12511
+ {
12512
+ "kind": "method",
12513
+ "name": "#withHook",
12514
+ "privacy": "private",
12515
+ "return": {
12516
+ "type": {
12517
+ "text": "C[]"
12518
+ }
12519
+ },
12520
+ "parameters": [
12521
+ {
12522
+ "name": "guard",
12523
+ "type": {
12524
+ "text": "(controller: unknown) => controller is C"
12525
+ }
12526
+ }
12527
+ ],
12528
+ "description": "The module controllers implementing a hook, in registration order. The\nmodule set is fixed once init returns (modules are passed to the\nconstructor only), so each hook's list is resolved on first use and the\nper-row and per-cell dispatchers walk it instead of guarding every module."
12529
+ },
11385
12530
  {
11386
12531
  "kind": "method",
11387
12532
  "name": "module",
@@ -11502,6 +12647,26 @@
11502
12647
  ],
11503
12648
  "description": "Asks feature modules implementing RowPresenter whether they render\nthe given row as full-width custom content (e.g. a group header). Returns\nthe first non-null result, or `null` when no module owns the row."
11504
12649
  },
12650
+ {
12651
+ "kind": "field",
12652
+ "name": "colCount",
12653
+ "type": {
12654
+ "text": "number"
12655
+ },
12656
+ "privacy": "public",
12657
+ "description": "Columns in the `aria-colindex` sequence: the visible columns plus the\nselection and expansion chrome columns. Shared by `aria-colcount` and the\ncells that span a whole row.",
12658
+ "readonly": true
12659
+ },
12660
+ {
12661
+ "kind": "field",
12662
+ "name": "hierarchical",
12663
+ "type": {
12664
+ "text": "boolean"
12665
+ },
12666
+ "privacy": "public",
12667
+ "description": "Whether rows carry tree semantics (`aria-level` / `aria-expanded`), which\nonly a `treegrid` supports: the core tree, master-detail, or a feature\nmodule that reports RowPresenter.hierarchical (row grouping, a\npivot tree, server-side groups). The grid role is read from here.",
12668
+ "readonly": true
12669
+ },
11505
12670
  {
11506
12671
  "kind": "method",
11507
12672
  "name": "describeRow",
@@ -11615,6 +12780,16 @@
11615
12780
  "description": "Whether any feature module implementing ColumnMenuProvider offers a\ncolumn header menu. The header uses this to show its kebab button even on\ncolumns that are neither sortable nor resizable, so a module (the enterprise\ncontext menu) can surface pin / hide / group / chart actions. Always `false`\nfor the community grid (no modules).",
11616
12781
  "readonly": true
11617
12782
  },
12783
+ {
12784
+ "kind": "field",
12785
+ "name": "hasCellDecorators",
12786
+ "type": {
12787
+ "text": "boolean"
12788
+ },
12789
+ "privacy": "public",
12790
+ "description": "Whether any feature module implements CellDecorator, so a cell can\nskip decoration altogether when none does (the community grid).",
12791
+ "readonly": true
12792
+ },
11618
12793
  {
11619
12794
  "kind": "method",
11620
12795
  "name": "decorateCell",
@@ -12409,9 +13584,9 @@
12409
13584
  "kind": "variable",
12410
13585
  "name": "EN_LOCALE",
12411
13586
  "type": {
12412
- "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 'setFilter.more': 'Showing {shown} of {total} values. Search to narrow the list.',\n\n // Enterprise: advanced filter builder\n 'filterBuilder.and': 'AND',\n 'filterBuilder.or': 'OR',\n 'filterBuilder.column': 'Column',\n 'filterBuilder.operator': 'Operator',\n 'filterBuilder.value': 'Value',\n 'filterBuilder.addCondition': 'Condition',\n 'filterBuilder.addGroup': 'Group',\n 'filterBuilder.remove': 'Remove',\n 'filterBuilder.removeGroup': 'Remove group',\n 'filterBuilder.apply': 'Apply',\n 'filterBuilder.clear': 'Clear',\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.valueColumn': 'Use as value',\n 'toolPanel.columnLabelColumn': 'Use as column label',\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.rangeHandle': 'Resize chart source range',\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.mapCategoryNone': 'None',\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 'pivot.total': 'Total',\n 'pivot.grandTotal': 'Grand Total',\n 'pivot.columnsTruncated': 'Showing {shown} of {total} pivot columns',\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}"
13587
+ "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 'setFilter.more': 'Showing {shown} of {total} values. Search to narrow the list.',\n\n // Enterprise: advanced filter builder\n 'filterBuilder.and': 'AND',\n 'filterBuilder.or': 'OR',\n 'filterBuilder.column': 'Column',\n 'filterBuilder.operator': 'Operator',\n 'filterBuilder.value': 'Value',\n 'filterBuilder.addCondition': 'Condition',\n 'filterBuilder.addGroup': 'Group',\n 'filterBuilder.remove': 'Remove',\n 'filterBuilder.removeGroup': 'Remove group',\n 'filterBuilder.apply': 'Apply',\n 'filterBuilder.clear': 'Clear',\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.valueColumn': 'Use as value',\n 'toolPanel.columnLabelColumn': 'Use as column label',\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.rangeHandle': 'Resize chart source range',\n 'chart.rangeResized': 'Chart source range: {rows} × {cols} cells',\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.mapCategoryNone': 'None',\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 'pivot.total': 'Total',\n 'pivot.grandTotal': 'Grand Total',\n 'pivot.columnsTruncated': 'Showing {shown} of {total} pivot columns',\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.cancelled': 'Cancelled.',\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}"
12413
13588
  },
12414
- "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)', 'setFilter.more': 'Showing {shown} of {total} values. Search to narrow the list.', // Enterprise: advanced filter builder 'filterBuilder.and': 'AND', 'filterBuilder.or': 'OR', 'filterBuilder.column': 'Column', 'filterBuilder.operator': 'Operator', 'filterBuilder.value': 'Value', 'filterBuilder.addCondition': 'Condition', 'filterBuilder.addGroup': 'Group', 'filterBuilder.remove': 'Remove', 'filterBuilder.removeGroup': 'Remove group', 'filterBuilder.apply': 'Apply', 'filterBuilder.clear': 'Clear', // 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.valueColumn': 'Use as value', 'toolPanel.columnLabelColumn': 'Use as column label', '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.rangeHandle': 'Resize chart source range', '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.mapCategoryNone': 'None', '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)', 'pivot.total': 'Total', 'pivot.grandTotal': 'Grand Total', 'pivot.columnsTruncated': 'Showing {shown} of {total} pivot columns', // 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', }",
13589
+ "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)', 'setFilter.more': 'Showing {shown} of {total} values. Search to narrow the list.', // Enterprise: advanced filter builder 'filterBuilder.and': 'AND', 'filterBuilder.or': 'OR', 'filterBuilder.column': 'Column', 'filterBuilder.operator': 'Operator', 'filterBuilder.value': 'Value', 'filterBuilder.addCondition': 'Condition', 'filterBuilder.addGroup': 'Group', 'filterBuilder.remove': 'Remove', 'filterBuilder.removeGroup': 'Remove group', 'filterBuilder.apply': 'Apply', 'filterBuilder.clear': 'Clear', // 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.valueColumn': 'Use as value', 'toolPanel.columnLabelColumn': 'Use as column label', '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.rangeHandle': 'Resize chart source range', 'chart.rangeResized': 'Chart source range: {rows} × {cols} cells', '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.mapCategoryNone': 'None', '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)', 'pivot.total': 'Total', 'pivot.grandTotal': 'Grand Total', 'pivot.columnsTruncated': 'Showing {shown} of {total} pivot columns', // 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.cancelled': 'Cancelled.', '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', }",
12415
13590
  "description": "Default English locale dictionary: the single source of truth for every\nbuilt-in, user-facing string the community grid renders."
12416
13591
  }
12417
13592
  ],
@@ -12436,7 +13611,7 @@
12436
13611
  "type": {
12437
13612
  "text": "GridLocaleText"
12438
13613
  },
12439
- "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)', 'setFilter.more': 'Mostrando {shown} de {total} valores. Busque para acotar la lista.', // Enterprise: constructor de filtros avanzado 'filterBuilder.and': 'Y', 'filterBuilder.or': 'O', 'filterBuilder.column': 'Columna', 'filterBuilder.operator': 'Operador', 'filterBuilder.value': 'Valor', 'filterBuilder.addCondition': 'Condición', 'filterBuilder.addGroup': 'Grupo', 'filterBuilder.remove': 'Eliminar', 'filterBuilder.removeGroup': 'Eliminar grupo', 'filterBuilder.apply': 'Aplicar', 'filterBuilder.clear': 'Borrar', // 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.valueColumn': 'Usar como valor', 'toolPanel.columnLabelColumn': 'Usar como etiqueta de 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.rangeHandle': 'Redimensionar el rango de origen del gráfico', '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.mapCategoryNone': 'Ninguna', '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)', 'pivot.total': 'Total', 'pivot.grandTotal': 'Total general', 'pivot.columnsTruncated': 'Se muestran {shown} de {total} columnas dinámicas', // 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', }",
13614
+ "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)', 'setFilter.more': 'Mostrando {shown} de {total} valores. Busque para acotar la lista.', // Enterprise: constructor de filtros avanzado 'filterBuilder.and': 'Y', 'filterBuilder.or': 'O', 'filterBuilder.column': 'Columna', 'filterBuilder.operator': 'Operador', 'filterBuilder.value': 'Valor', 'filterBuilder.addCondition': 'Condición', 'filterBuilder.addGroup': 'Grupo', 'filterBuilder.remove': 'Eliminar', 'filterBuilder.removeGroup': 'Eliminar grupo', 'filterBuilder.apply': 'Aplicar', 'filterBuilder.clear': 'Borrar', // 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.valueColumn': 'Usar como valor', 'toolPanel.columnLabelColumn': 'Usar como etiqueta de 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.rangeHandle': 'Redimensionar el rango de origen del gráfico', 'chart.rangeResized': 'Rango de origen del gráfico: {rows} × {cols} celdas', '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.mapCategoryNone': 'Ninguna', '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)', 'pivot.total': 'Total', 'pivot.grandTotal': 'Total general', 'pivot.columnsTruncated': 'Se muestran {shown} de {total} columnas dinámicas', // 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.cancelled': 'Cancelado.', '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', }",
12440
13615
  "description": "Spanish (Español) translation of the grid's built-in UI text."
12441
13616
  }
12442
13617
  ],
@@ -12901,6 +14076,136 @@
12901
14076
  }
12902
14077
  ]
12903
14078
  },
14079
+ {
14080
+ "kind": "javascript-module",
14081
+ "path": "src/internal/design-system.ts",
14082
+ "declarations": [
14083
+ {
14084
+ "kind": "function",
14085
+ "name": "registerDesignSystem",
14086
+ "return": {
14087
+ "type": {
14088
+ "text": "void"
14089
+ }
14090
+ },
14091
+ "parameters": [
14092
+ {
14093
+ "name": "styles",
14094
+ "type": {
14095
+ "text": "DesignSystemStyles"
14096
+ }
14097
+ }
14098
+ ],
14099
+ "description": "Registers a design-system add-on. The first registration wins: a second\nimport of the same add-on (or of another one) changes nothing."
14100
+ },
14101
+ {
14102
+ "kind": "function",
14103
+ "name": "designSystemName",
14104
+ "return": {
14105
+ "type": {
14106
+ "text": "string | null"
14107
+ }
14108
+ },
14109
+ "description": "The id of the registered design-system add-on, or null when none is loaded."
14110
+ },
14111
+ {
14112
+ "kind": "function",
14113
+ "name": "onDesignSystemRegistered",
14114
+ "return": {
14115
+ "type": {
14116
+ "text": "() => void"
14117
+ }
14118
+ },
14119
+ "parameters": [
14120
+ {
14121
+ "name": "listener",
14122
+ "type": {
14123
+ "text": "() => void"
14124
+ }
14125
+ }
14126
+ ],
14127
+ "description": "Calls `listener` when a design-system add-on registers (an import after the\ngrids connected). Returns the function that stops listening."
14128
+ },
14129
+ {
14130
+ "kind": "function",
14131
+ "name": "connectDesignSystem",
14132
+ "return": {
14133
+ "type": {
14134
+ "text": "void"
14135
+ }
14136
+ },
14137
+ "parameters": [
14138
+ {
14139
+ "name": "grid",
14140
+ "type": {
14141
+ "text": "HTMLElement"
14142
+ }
14143
+ }
14144
+ ],
14145
+ "description": "Called by every grid as it connects, after its own document styles."
14146
+ },
14147
+ {
14148
+ "kind": "function",
14149
+ "name": "disconnectDesignSystem",
14150
+ "return": {
14151
+ "type": {
14152
+ "text": "void"
14153
+ }
14154
+ },
14155
+ "parameters": [
14156
+ {
14157
+ "name": "grid",
14158
+ "type": {
14159
+ "text": "HTMLElement"
14160
+ }
14161
+ }
14162
+ ],
14163
+ "description": "Called by every grid as it disconnects."
14164
+ }
14165
+ ],
14166
+ "exports": [
14167
+ {
14168
+ "kind": "js",
14169
+ "name": "registerDesignSystem",
14170
+ "declaration": {
14171
+ "name": "registerDesignSystem",
14172
+ "module": "src/internal/design-system.ts"
14173
+ }
14174
+ },
14175
+ {
14176
+ "kind": "js",
14177
+ "name": "designSystemName",
14178
+ "declaration": {
14179
+ "name": "designSystemName",
14180
+ "module": "src/internal/design-system.ts"
14181
+ }
14182
+ },
14183
+ {
14184
+ "kind": "js",
14185
+ "name": "onDesignSystemRegistered",
14186
+ "declaration": {
14187
+ "name": "onDesignSystemRegistered",
14188
+ "module": "src/internal/design-system.ts"
14189
+ }
14190
+ },
14191
+ {
14192
+ "kind": "js",
14193
+ "name": "connectDesignSystem",
14194
+ "declaration": {
14195
+ "name": "connectDesignSystem",
14196
+ "module": "src/internal/design-system.ts"
14197
+ }
14198
+ },
14199
+ {
14200
+ "kind": "js",
14201
+ "name": "disconnectDesignSystem",
14202
+ "declaration": {
14203
+ "name": "disconnectDesignSystem",
14204
+ "module": "src/internal/design-system.ts"
14205
+ }
14206
+ }
14207
+ ]
14208
+ },
12904
14209
  {
12905
14210
  "kind": "javascript-module",
12906
14211
  "path": "src/internal/document-styles.ts",
@@ -13133,17 +14438,41 @@
13133
14438
  }
13134
14439
  },
13135
14440
  {
13136
- "name": "opts",
14441
+ "name": "opts",
14442
+ "type": {
14443
+ "text": "ExportOptions<T>"
14444
+ }
14445
+ }
14446
+ ],
14447
+ "description": "Resolves the export value for a single cell, applying the user-supplied\nformatter when present and falling back to defaultExportFormat."
14448
+ },
14449
+ {
14450
+ "kind": "function",
14451
+ "name": "formatDateForCSV",
14452
+ "return": {
14453
+ "type": {
14454
+ "text": "string"
14455
+ }
14456
+ },
14457
+ "parameters": [
14458
+ {
14459
+ "name": "column",
14460
+ "type": {
14461
+ "text": "ColumnConfiguration<T>"
14462
+ }
14463
+ },
14464
+ {
14465
+ "name": "value",
13137
14466
  "type": {
13138
- "text": "ExportOptions<T>"
14467
+ "text": "Date"
13139
14468
  }
13140
14469
  }
13141
14470
  ],
13142
- "description": "Resolves the export value for a single cell, applying the user-supplied\nformatter when present and falling back to defaultExportFormat."
14471
+ "description": "Formats a `Date` into the configured date style for CSV output."
13143
14472
  },
13144
14473
  {
13145
14474
  "kind": "function",
13146
- "name": "formatDateForCSV",
14475
+ "name": "formatDisplayText",
13147
14476
  "return": {
13148
14477
  "type": {
13149
14478
  "text": "string"
@@ -13159,11 +14488,11 @@
13159
14488
  {
13160
14489
  "name": "value",
13161
14490
  "type": {
13162
- "text": "Date"
14491
+ "text": "unknown"
13163
14492
  }
13164
14493
  }
13165
14494
  ],
13166
- "description": "Formats a `Date` into the configured date style for CSV output."
14495
+ "description": "A cell value as CSV export writes it, before escaping: a date in the\ncolumn's date style, a select option's label, a number as a number, and\nblank for no value. Chart category labels read the same text."
13167
14496
  },
13168
14497
  {
13169
14498
  "kind": "function",
@@ -13312,6 +14641,14 @@
13312
14641
  "module": "src/internal/export.ts"
13313
14642
  }
13314
14643
  },
14644
+ {
14645
+ "kind": "js",
14646
+ "name": "formatDisplayText",
14647
+ "declaration": {
14648
+ "name": "formatDisplayText",
14649
+ "module": "src/internal/export.ts"
14650
+ }
14651
+ },
13315
14652
  {
13316
14653
  "kind": "js",
13317
14654
  "name": "escapeFormula",
@@ -13566,6 +14903,67 @@
13566
14903
  "kind": "javascript-module",
13567
14904
  "path": "src/internal/flip.ts",
13568
14905
  "declarations": [
14906
+ {
14907
+ "kind": "variable",
14908
+ "name": "FLIP_ID_Y",
14909
+ "type": {
14910
+ "text": "string"
14911
+ },
14912
+ "default": "'apex-flip-y'",
14913
+ "description": "Animation id of a vertical (row) FLIP."
14914
+ },
14915
+ {
14916
+ "kind": "variable",
14917
+ "name": "FLIP_ID_X",
14918
+ "type": {
14919
+ "text": "string"
14920
+ },
14921
+ "default": "'apex-flip-x'",
14922
+ "description": "Animation id of a horizontal (column) FLIP."
14923
+ },
14924
+ {
14925
+ "kind": "variable",
14926
+ "name": "FLIP_ID_BOTH",
14927
+ "type": {
14928
+ "text": "string"
14929
+ },
14930
+ "default": "'apex-flip'",
14931
+ "description": "Animation id of a FLIP that may move on both axes."
14932
+ },
14933
+ {
14934
+ "kind": "function",
14935
+ "name": "hasFlipsInFlight",
14936
+ "return": {
14937
+ "type": {
14938
+ "text": "boolean"
14939
+ }
14940
+ },
14941
+ "description": "Whether any FLIP animation is running right now."
14942
+ },
14943
+ {
14944
+ "kind": "function",
14945
+ "name": "cancelFlips",
14946
+ "return": {
14947
+ "type": {
14948
+ "text": "void"
14949
+ }
14950
+ },
14951
+ "parameters": [
14952
+ {
14953
+ "name": "element",
14954
+ "type": {
14955
+ "text": "Element"
14956
+ }
14957
+ },
14958
+ {
14959
+ "name": "id",
14960
+ "type": {
14961
+ "text": "string"
14962
+ }
14963
+ }
14964
+ ],
14965
+ "description": "Cancels the running FLIP animations with `id` on `element` (not its subtree)."
14966
+ },
13569
14967
  {
13570
14968
  "kind": "function",
13571
14969
  "name": "playFlip",
@@ -13581,7 +14979,7 @@
13581
14979
  "name": "axis",
13582
14980
  "default": "'both'",
13583
14981
  "type": {
13584
- "text": "'x' | 'y' | 'both'"
14982
+ "text": "FlipAxis"
13585
14983
  },
13586
14984
  "description": "`'x'` for horizontal motion (column reorder), `'y'` for\nvertical motion (row sort), `'both'` for diagonal motion if either axis\ncould move."
13587
14985
  }
@@ -13619,6 +15017,24 @@
13619
15017
  ],
13620
15018
  "description": "Awaits a set of child elements' `updateComplete` promises."
13621
15019
  },
15020
+ {
15021
+ "kind": "function",
15022
+ "name": "settleRowsForFlip",
15023
+ "return": {
15024
+ "type": {
15025
+ "text": "Promise<void>"
15026
+ }
15027
+ },
15028
+ "parameters": [
15029
+ {
15030
+ "name": "host",
15031
+ "type": {
15032
+ "text": "GridHost<T>"
15033
+ }
15034
+ }
15035
+ ],
15036
+ "description": "Waits until the rows can be measured for a row FLIP's \"Last\" rects, after\na sort or a row move: the pipeline run it started and the grid's render of\nthe result, then the body's rows render (new items reach the rows only once\nthe layout reports the range) and update. Rows outside the body (pinned\nrows) are awaited too. Sort and row reorder both use this one wait."
15037
+ },
13622
15038
  {
13623
15039
  "kind": "function",
13624
15040
  "name": "playKeyedFlip",
@@ -13641,15 +15057,55 @@
13641
15057
  "name": "axis",
13642
15058
  "default": "'both'",
13643
15059
  "type": {
13644
- "text": "'x' | 'y' | 'both'"
15060
+ "text": "FlipAxis"
13645
15061
  },
13646
- "description": "Same semantics as {@link playFlip}.\n "
15062
+ "description": "Same semantics as {@link playFlip}.\n *\n * "
13647
15063
  }
13648
15064
  ],
13649
15065
  "description": "Plays a FLIP animation against elements located by key after a DOM\nmutation has settled. Used for row sort, where DOM elements get recycled\nacross the mutation and can only be found by data identity."
13650
15066
  }
13651
15067
  ],
13652
15068
  "exports": [
15069
+ {
15070
+ "kind": "js",
15071
+ "name": "FLIP_ID_Y",
15072
+ "declaration": {
15073
+ "name": "FLIP_ID_Y",
15074
+ "module": "src/internal/flip.ts"
15075
+ }
15076
+ },
15077
+ {
15078
+ "kind": "js",
15079
+ "name": "FLIP_ID_X",
15080
+ "declaration": {
15081
+ "name": "FLIP_ID_X",
15082
+ "module": "src/internal/flip.ts"
15083
+ }
15084
+ },
15085
+ {
15086
+ "kind": "js",
15087
+ "name": "FLIP_ID_BOTH",
15088
+ "declaration": {
15089
+ "name": "FLIP_ID_BOTH",
15090
+ "module": "src/internal/flip.ts"
15091
+ }
15092
+ },
15093
+ {
15094
+ "kind": "js",
15095
+ "name": "hasFlipsInFlight",
15096
+ "declaration": {
15097
+ "name": "hasFlipsInFlight",
15098
+ "module": "src/internal/flip.ts"
15099
+ }
15100
+ },
15101
+ {
15102
+ "kind": "js",
15103
+ "name": "cancelFlips",
15104
+ "declaration": {
15105
+ "name": "cancelFlips",
15106
+ "module": "src/internal/flip.ts"
15107
+ }
15108
+ },
13653
15109
  {
13654
15110
  "kind": "js",
13655
15111
  "name": "playFlip",
@@ -13674,6 +15130,14 @@
13674
15130
  "module": "src/internal/flip.ts"
13675
15131
  }
13676
15132
  },
15133
+ {
15134
+ "kind": "js",
15135
+ "name": "settleRowsForFlip",
15136
+ "declaration": {
15137
+ "name": "settleRowsForFlip",
15138
+ "module": "src/internal/flip.ts"
15139
+ }
15140
+ },
13677
15141
  {
13678
15142
  "kind": "js",
13679
15143
  "name": "playKeyedFlip",
@@ -13743,6 +15207,30 @@
13743
15207
  }
13744
15208
  ]
13745
15209
  },
15210
+ {
15211
+ "kind": "javascript-module",
15212
+ "path": "src/internal/ignite-ui.ts",
15213
+ "declarations": [
15214
+ {
15215
+ "kind": "variable",
15216
+ "name": "IGNITE_UI_STYLES",
15217
+ "type": {
15218
+ "text": "DesignSystemStyles"
15219
+ },
15220
+ "description": "The add-on as the grid registers it."
15221
+ }
15222
+ ],
15223
+ "exports": [
15224
+ {
15225
+ "kind": "js",
15226
+ "name": "IGNITE_UI_STYLES",
15227
+ "declaration": {
15228
+ "name": "IGNITE_UI_STYLES",
15229
+ "module": "src/internal/ignite-ui.ts"
15230
+ }
15231
+ }
15232
+ ]
15233
+ },
13746
15234
  {
13747
15235
  "kind": "javascript-module",
13748
15236
  "path": "src/internal/index.ts",
@@ -13836,6 +15324,30 @@
13836
15324
  "module": "./constants.js"
13837
15325
  }
13838
15326
  },
15327
+ {
15328
+ "kind": "js",
15329
+ "name": "DesignSystemStyles",
15330
+ "declaration": {
15331
+ "name": "DesignSystemStyles",
15332
+ "module": "./design-system.js"
15333
+ }
15334
+ },
15335
+ {
15336
+ "kind": "js",
15337
+ "name": "designSystemName",
15338
+ "declaration": {
15339
+ "name": "designSystemName",
15340
+ "module": "./design-system.js"
15341
+ }
15342
+ },
15343
+ {
15344
+ "kind": "js",
15345
+ "name": "onDesignSystemRegistered",
15346
+ "declaration": {
15347
+ "name": "onDesignSystemRegistered",
15348
+ "module": "./design-system.js"
15349
+ }
15350
+ },
13839
15351
  {
13840
15352
  "kind": "js",
13841
15353
  "name": "ExportCellValue",
@@ -13884,6 +15396,14 @@
13884
15396
  "module": "./export.js"
13885
15397
  }
13886
15398
  },
15399
+ {
15400
+ "kind": "js",
15401
+ "name": "formatDisplayText",
15402
+ "declaration": {
15403
+ "name": "formatDisplayText",
15404
+ "module": "./export.js"
15405
+ }
15406
+ },
13887
15407
  {
13888
15408
  "kind": "js",
13889
15409
  "name": "getColumnLabel",
@@ -14299,6 +15819,14 @@
14299
15819
  "name": "getDisplayColumns",
14300
15820
  "module": "./utils.js"
14301
15821
  }
15822
+ },
15823
+ {
15824
+ "kind": "js",
15825
+ "name": "isRTL",
15826
+ "declaration": {
15827
+ "name": "isRTL",
15828
+ "module": "./utils.js"
15829
+ }
14302
15830
  }
14303
15831
  ]
14304
15832
  },
@@ -15829,111 +17357,6 @@
15829
17357
  }
15830
17358
  ]
15831
17359
  },
15832
- {
15833
- "kind": "javascript-module",
15834
- "path": "src/operations/pagination.ts",
15835
- "declarations": [
15836
- {
15837
- "kind": "class",
15838
- "description": "Built-in pagination data operation.",
15839
- "name": "PaginationDataOperation",
15840
- "members": [
15841
- {
15842
- "kind": "method",
15843
- "name": "apply",
15844
- "privacy": "public",
15845
- "return": {
15846
- "type": {
15847
- "text": "T[]"
15848
- }
15849
- },
15850
- "parameters": [
15851
- {
15852
- "name": "data",
15853
- "type": {
15854
- "text": "T[]"
15855
- },
15856
- "description": "The post-filter, post-sort dataset."
15857
- },
15858
- {
15859
- "name": "state",
15860
- "type": {
15861
- "text": "PaginationState"
15862
- },
15863
- "description": "The resolved pagination state."
15864
- }
15865
- ],
15866
- "description": "Returns the slice of `data` corresponding to the given pagination `state`.",
15867
- "inheritedFrom": {
15868
- "name": "DataOperation",
15869
- "module": "src/operations/base.ts"
15870
- }
15871
- },
15872
- {
15873
- "kind": "method",
15874
- "name": "resolveValue",
15875
- "privacy": "protected",
15876
- "parameters": [
15877
- {
15878
- "name": "record",
15879
- "type": {
15880
- "text": "T"
15881
- }
15882
- },
15883
- {
15884
- "name": "key",
15885
- "type": {
15886
- "text": "K"
15887
- }
15888
- }
15889
- ],
15890
- "inheritedFrom": {
15891
- "name": "DataOperation",
15892
- "module": "src/operations/base.ts"
15893
- }
15894
- },
15895
- {
15896
- "kind": "method",
15897
- "name": "resolveCase",
15898
- "privacy": "protected",
15899
- "parameters": [
15900
- {
15901
- "name": "value",
15902
- "type": {
15903
- "text": "U"
15904
- }
15905
- },
15906
- {
15907
- "name": "caseSensitive",
15908
- "optional": true,
15909
- "type": {
15910
- "text": "boolean"
15911
- }
15912
- }
15913
- ],
15914
- "inheritedFrom": {
15915
- "name": "DataOperation",
15916
- "module": "src/operations/base.ts"
15917
- }
15918
- }
15919
- ],
15920
- "superclass": {
15921
- "name": "DataOperation",
15922
- "module": "/src/operations/base.js"
15923
- }
15924
- }
15925
- ],
15926
- "exports": [
15927
- {
15928
- "kind": "js",
15929
- "name": "default",
15930
- "declaration": {
15931
- "name": "PaginationDataOperation",
15932
- "module": "src/operations/pagination.ts"
15933
- }
15934
- }
15935
- ]
15936
- },
15937
17360
  {
15938
17361
  "kind": "javascript-module",
15939
17362
  "path": "src/operations/quick-filter.ts",