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
package/i18n/en.d.ts CHANGED
@@ -144,6 +144,7 @@ export declare const EN_LOCALE: {
144
144
  readonly 'chart.chartView': "Chart this view";
145
145
  readonly 'chart.selectionHint': "Chart the selection (Alt+F1)";
146
146
  readonly 'chart.rangeHandle': "Resize chart source range";
147
+ readonly 'chart.rangeResized': "Chart source range: {rows} × {cols} cells";
147
148
  readonly 'chart.countSeries': "Count";
148
149
  readonly 'chart.export': "Export";
149
150
  readonly 'chart.exportPng': "PNG image";
@@ -223,6 +224,7 @@ export declare const EN_LOCALE: {
223
224
  readonly 'ai.modeAsk': "Ask a question";
224
225
  readonly 'ai.send': "Send";
225
226
  readonly 'ai.cancel': "Cancel";
227
+ readonly 'ai.cancelled': "Cancelled.";
226
228
  readonly 'ai.thinking': "Thinking…";
227
229
  readonly 'ai.undo': "Undo";
228
230
  readonly 'ai.applied': "Applied";
package/i18n/en.js CHANGED
@@ -131,6 +131,7 @@ export const EN_LOCALE = {
131
131
  'chart.chartView': 'Chart this view',
132
132
  'chart.selectionHint': 'Chart the selection (Alt+F1)',
133
133
  'chart.rangeHandle': 'Resize chart source range',
134
+ 'chart.rangeResized': 'Chart source range: {rows} × {cols} cells',
134
135
  'chart.countSeries': 'Count',
135
136
  'chart.export': 'Export',
136
137
  'chart.exportPng': 'PNG image',
@@ -210,6 +211,7 @@ export const EN_LOCALE = {
210
211
  'ai.modeAsk': 'Ask a question',
211
212
  'ai.send': 'Send',
212
213
  'ai.cancel': 'Cancel',
214
+ 'ai.cancelled': 'Cancelled.',
213
215
  'ai.thinking': 'Thinking…',
214
216
  'ai.undo': 'Undo',
215
217
  'ai.applied': 'Applied',
package/i18n/en.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default English locale dictionary: the single source of truth for every\n * built-in, user-facing string the community grid renders.\n *\n * @remarks\n * Each key is a stable, dot-namespaced identifier. Values may contain\n * `{placeholder}` tokens that {@link localize} interpolates at render time\n * (for example `pagination.summary`). To translate or tweak the UI text,\n * pass a (possibly partial) {@link GridLocaleText} map to\n * {@link ApexGrid.localeText}; any key you omit falls back to the value here.\n *\n * A ready-made Spanish translation ships as `esLocale`.\n */\nexport const EN_LOCALE = {\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} as const;\n\n/**\n * Union of every built-in locale key. Derived from {@link EN_LOCALE} so the key\n * list and the default strings can never drift apart.\n */\nexport type GridLocaleKey = keyof typeof EN_LOCALE;\n\n/**\n * A (possibly partial) map of locale keys to translated strings.\n *\n * @remarks\n * Assign to {@link ApexGrid.localeText} to override the built-in English text.\n * Any key you leave out falls back to {@link EN_LOCALE}, so partial maps and\n * incomplete community translations are both valid.\n */\nexport type GridLocaleText = Partial<Record<GridLocaleKey, string>>;\n"]}
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default English locale dictionary: the single source of truth for every\n * built-in, user-facing string the community grid renders.\n *\n * @remarks\n * Each key is a stable, dot-namespaced identifier. Values may contain\n * `{placeholder}` tokens that {@link localize} interpolates at render time\n * (for example `pagination.summary`). To translate or tweak the UI text,\n * pass a (possibly partial) {@link GridLocaleText} map to\n * {@link ApexGrid.localeText}; any key you omit falls back to the value here.\n *\n * A ready-made Spanish translation ships as `esLocale`.\n */\nexport const EN_LOCALE = {\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} as const;\n\n/**\n * Union of every built-in locale key. Derived from {@link EN_LOCALE} so the key\n * list and the default strings can never drift apart.\n */\nexport type GridLocaleKey = keyof typeof EN_LOCALE;\n\n/**\n * A (possibly partial) map of locale keys to translated strings.\n *\n * @remarks\n * Assign to {@link ApexGrid.localeText} to override the built-in English text.\n * Any key you leave out falls back to {@link EN_LOCALE}, so partial maps and\n * incomplete community translations are both valid.\n */\nexport type GridLocaleText = Partial<Record<GridLocaleKey, string>>;\n"]}
package/i18n/es.js CHANGED
@@ -131,6 +131,7 @@ export const esLocale = {
131
131
  'chart.chartView': 'Graficar esta vista',
132
132
  'chart.selectionHint': 'Graficar la selección (Alt+F1)',
133
133
  'chart.rangeHandle': 'Redimensionar el rango de origen del gráfico',
134
+ 'chart.rangeResized': 'Rango de origen del gráfico: {rows} × {cols} celdas',
134
135
  'chart.export': 'Exportar',
135
136
  'chart.exportPng': 'Imagen PNG',
136
137
  'chart.exportSvg': 'Vector SVG',
@@ -210,6 +211,7 @@ export const esLocale = {
210
211
  'ai.modeAsk': 'Hacer una pregunta',
211
212
  'ai.send': 'Enviar',
212
213
  'ai.cancel': 'Cancelar',
214
+ 'ai.cancelled': 'Cancelado.',
213
215
  'ai.thinking': 'Pensando…',
214
216
  'ai.undo': 'Deshacer',
215
217
  'ai.applied': 'Aplicado',
package/i18n/es.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"es.js","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GridLocaleText } from './en.js';\n\n/**\n * Spanish (Español) translation of the grid's built-in UI text.\n *\n * @remarks\n * A ready-made {@link GridLocaleText} map covering every key in `EN_LOCALE`.\n * Assign it to {@link ApexGrid.localeText} to render the grid in Spanish, or\n * spread it to override individual strings:\n *\n * ```ts\n * import { esLocale } from '@apexcharts/grid';\n *\n * grid.localeText = esLocale;\n * // or, with a tweak:\n * grid.localeText = { ...esLocale, 'toolbar.export': 'Descargar' };\n * ```\n */\nexport const esLocale: GridLocaleText = {\n // Paginación\n 'pagination.label': 'Paginación de la tabla',\n 'pagination.controls': 'Controles de paginación',\n 'pagination.rowsPerPage': 'Filas por página',\n 'pagination.firstPage': 'Ir a la primera página',\n 'pagination.previousPage': 'Ir a la página anterior',\n 'pagination.nextPage': 'Ir a la página siguiente',\n 'pagination.lastPage': 'Ir a la última página',\n 'pagination.summary': '{start}-{end} de {total}',\n 'pagination.summaryEmpty': '0 de 0',\n\n // Filtrado: operadores\n 'filter.operator.contains': 'Contiene',\n 'filter.operator.doesNotContain': 'No contiene',\n 'filter.operator.startsWith': 'Empieza por',\n 'filter.operator.endsWith': 'Termina en',\n 'filter.operator.equals': 'Igual a',\n 'filter.operator.doesNotEqual': 'Distinto de',\n 'filter.operator.greaterThan': 'Mayor que',\n 'filter.operator.lessThan': 'Menor que',\n 'filter.operator.greaterThanOrEqual': 'Mayor o igual que',\n 'filter.operator.lessThanOrEqual': 'Menor o igual que',\n 'filter.operator.empty': 'Vacío',\n 'filter.operator.notEmpty': 'No vacío',\n 'filter.operator.all': 'Todos',\n 'filter.operator.true': 'Verdadero',\n 'filter.operator.false': 'Falso',\n\n // Filtrado: interfaz\n 'filter.filter': 'Filtrar',\n 'filter.reset': 'Restablecer',\n 'filter.close': 'Cerrar',\n 'filter.removeFilter': 'Quitar filtro',\n 'filter.conditionList': 'Condición de filtro',\n 'filter.changeCondition': 'Cambiar condición de filtro',\n 'filter.inputPlaceholder': 'Añadir valor de filtro',\n\n // Filas: selección / expansión\n 'row.select': 'Seleccionar fila',\n 'row.expand': 'Expandir fila',\n 'row.collapse': 'Contraer fila',\n 'row.detail': 'Detalle de la fila',\n 'header.selectAll': 'Seleccionar todas las filas',\n 'header.expandAll': 'Expandir todas las filas',\n 'header.collapseAll': 'Contraer todas las filas',\n\n // Barra de herramientas\n 'toolbar.label': 'Barra de herramientas de la tabla',\n 'toolbar.searchPlaceholder': 'Buscar…',\n 'toolbar.export': 'Exportar',\n 'toolbar.exportOptions': 'Opciones de exportación',\n 'toolbar.createChart': 'Crear gráfico',\n 'toolbar.exportXlsx': 'Exportar XLSX',\n 'toolbar.askAI': 'Preguntar a la IA',\n\n // Anfitrión de la tabla\n 'grid.label': 'Tabla de datos',\n\n // Controles de cabecera\n 'header.sortedAscending': 'Orden ascendente. Activar para orden descendente.',\n 'header.sortedDescending': 'Orden descendente. Activar para quitar el orden.',\n 'header.notSorted': 'Sin ordenar. Activar para orden ascendente.',\n 'header.filterColumn': 'Filtrar columna',\n 'header.columnMenu': 'Menú de columna',\n 'header.autosizeColumn': 'Autoajustar columna',\n\n // Editores\n 'editor.rating': 'Calificación',\n\n // Anuncios de región activa\n 'announce.sortedAscending': 'Ordenado por {label} ascendente',\n 'announce.sortedDescending': 'Ordenado por {label} descendente',\n 'announce.sortCleared': 'Orden quitado en {label}',\n 'announce.filtered': 'Filtro aplicado a {label}',\n 'announce.filterCleared': 'Filtro quitado en {label}',\n 'announce.selectionCleared': 'Selección borrada',\n 'announce.rowSelected': '1 fila seleccionada',\n 'announce.rowsSelected': '{count} filas seleccionadas',\n 'announce.page': 'Página {page} de {total}',\n 'announce.undoOne': 'Deshacer 1 cambio de celda',\n 'announce.undoMany': 'Deshacer {count} cambios de celda',\n 'announce.redoOne': 'Rehacer 1 cambio de celda',\n 'announce.redoMany': 'Rehacer {count} cambios de celda',\n 'announce.rowExpanded': 'Fila expandida',\n 'announce.rowCollapsed': 'Fila contraída',\n 'announce.rowsExpanded': '{count} filas expandidas',\n 'announce.allRowsCollapsed': 'Todas las filas contraídas',\n 'announce.rowPinnedTop': 'Fila fijada arriba',\n 'announce.rowPinnedBottom': 'Fila fijada abajo',\n 'announce.rowUnpinned': 'Fila liberada',\n 'announce.rowGrabbed':\n 'Fila agarrada. Use las flechas para mover, Enter para soltar, Escape para cancelar.',\n 'announce.rowMovedTo': 'Fila movida a la posición {position}',\n 'announce.rowDropped': 'Fila soltada',\n 'announce.reorderCancelled': 'Reordenación cancelada',\n 'announce.rowMoved': 'Fila movida',\n 'announce.manualOrderCleared': 'Orden manual de filas borrado',\n\n // Enterprise: filtro de conjunto\n 'setFilter.searchPlaceholder': 'Buscar valores…',\n 'setFilter.noValues': 'Sin valores',\n 'setFilter.selectAll': '(Seleccionar todo)',\n 'setFilter.clearFilter': 'Borrar filtro',\n 'setFilter.blanks': '(Vacíos)',\n 'setFilter.more': 'Mostrando {shown} de {total} valores. Busque para acotar la lista.',\n\n // Enterprise: constructor de filtros avanzado\n 'filterBuilder.and': 'Y',\n 'filterBuilder.or': 'O',\n 'filterBuilder.column': 'Columna',\n 'filterBuilder.operator': 'Operador',\n 'filterBuilder.value': 'Valor',\n 'filterBuilder.addCondition': 'Condición',\n 'filterBuilder.addGroup': 'Grupo',\n 'filterBuilder.remove': 'Eliminar',\n 'filterBuilder.removeGroup': 'Eliminar grupo',\n 'filterBuilder.apply': 'Aplicar',\n 'filterBuilder.clear': 'Borrar',\n\n // Enterprise: barra de estado\n 'statusBar.selectRange': 'Seleccione un rango de celdas',\n 'statusBar.count': 'Recuento',\n 'statusBar.sum': 'Suma',\n 'statusBar.average': 'Prom.',\n 'statusBar.min': 'Mín.',\n 'statusBar.max': 'Máx.',\n\n // Enterprise: panel de herramientas\n 'toolPanel.noGrid': 'Ninguna tabla conectada',\n 'toolPanel.columns': 'Columnas',\n 'toolPanel.searchPlaceholder': 'Buscar columnas…',\n 'toolPanel.pinColumn': 'Fijar columna',\n 'toolPanel.moveUp': 'Subir',\n 'toolPanel.moveDown': 'Bajar',\n 'toolPanel.groupByColumn': 'Agrupar por esta columna',\n 'toolPanel.valueColumn': 'Usar como valor',\n 'toolPanel.columnLabelColumn': 'Usar como etiqueta de columna',\n 'toolPanel.pivotMode': 'Modo dinámico',\n 'toolPanel.rowGroups': 'Grupos de filas',\n 'toolPanel.rowGroupsPivot': 'Grupos de filas (filas dinámicas)',\n 'toolPanel.values': 'Valores',\n 'toolPanel.columnLabels': 'Etiquetas de columna',\n 'toolPanel.dragColumns': 'Arrastre columnas aquí',\n 'toolPanel.removeChip': 'Quitar',\n\n // Enterprise: menú contextual\n 'contextMenu.sortAsc': 'Ordenar ascendente',\n 'contextMenu.sortDesc': 'Ordenar descendente',\n 'contextMenu.clearSort': 'Quitar orden',\n 'contextMenu.pinStart': 'Fijar al inicio',\n 'contextMenu.pinEnd': 'Fijar al final',\n 'contextMenu.unpin': 'Desfijar',\n 'contextMenu.hideColumn': 'Ocultar columna',\n 'contextMenu.copy': 'Copiar',\n\n // Enterprise: gráficos\n 'chart.close': 'Cerrar',\n 'chart.placeholder': 'Seleccione celdas, o agrupe/pivote la tabla, para graficarla.',\n 'chart.chartRange': 'Graficar rango',\n 'chart.chartView': 'Graficar esta vista',\n 'chart.selectionHint': 'Graficar la selección (Alt+F1)',\n 'chart.rangeHandle': 'Redimensionar el rango de origen del gráfico',\n 'chart.export': 'Exportar',\n 'chart.exportPng': 'Imagen PNG',\n 'chart.exportSvg': 'Vector SVG',\n 'chart.copyImage': 'Copiar imagen',\n 'chart.imageCopied': 'Imagen del gráfico copiada al portapapeles',\n 'chart.suggested': 'Sugerido',\n 'chart.suggestedHint': 'Deja que ApexGrid elija el mejor tipo de gráfico para estos datos',\n 'chart.by': 'por',\n 'chart.renameHint': 'Haz doble clic para renombrar',\n 'chart.emptyTitle': 'Aún no hay nada que graficar',\n 'chart.emptyRange': 'Selecciona un rango de celdas, o',\n 'chart.emptyView': 'agrupa o dinamiza la cuadrícula',\n 'chart.swapAxes': 'Intercambiar ejes (horizontal)',\n 'chart.swapAxesHint': 'Intercambia los ejes X e Y (barras horizontales)',\n 'chart.data': 'Datos',\n 'chart.mapCategory': 'Categoría (X)',\n 'chart.mapCategoryNone': 'Ninguna',\n 'chart.mapSeries': 'Series (Y)',\n 'chart.mapAggregation': 'Agregación',\n 'chart.secondaryAxis': 'Dibujar en el eje secundario (derecho)',\n 'chart.secondaryAxisShort': '2.º eje',\n 'chart.calcFields': 'Campos calculados',\n 'chart.calcName': 'Nombre (p. ej. Bono %)',\n 'chart.calcFormula': 'Fórmula (p. ej. B1 / A1 * 100)',\n 'chart.calcAdd': 'Añadir campo',\n 'chart.calcRemove': 'Eliminar campo calculado',\n 'chart.agg.sum': 'Suma',\n 'chart.agg.avg': 'Promedio',\n 'chart.agg.count': 'Recuento',\n 'chart.agg.min': 'Mínimo',\n 'chart.agg.max': 'Máximo',\n 'chart.agg.median': 'Mediana',\n 'chart.format': 'Formato',\n 'chart.legend': 'Leyenda',\n 'chart.dataLabels': 'Etiquetas de datos',\n 'chart.gridlines': 'Líneas de cuadrícula',\n 'chart.numberFormat': 'Formato numérico',\n 'chart.seriesColors': 'Colores',\n 'chart.format.none': 'Simple',\n 'chart.format.currency': 'Moneda',\n 'chart.format.percent': 'Porcentaje',\n 'chart.format.thousands': 'Miles',\n 'chart.trendline': 'Línea de tendencia',\n 'chart.referenceLine': 'Línea de referencia',\n 'chart.referenceBand': 'Banda de referencia',\n 'chart.bandFrom': 'Desde',\n 'chart.bandTo': 'Hasta',\n 'chart.forecast': 'Períodos de pronóstico',\n 'chart.forecastBand': 'Banda de pronóstico',\n 'chart.axisTitleX': 'Título del eje X',\n 'chart.axisTitleY': 'Título del eje Y',\n 'chart.countSeries': 'Recuento',\n 'chart.type.column': 'Columnas',\n 'chart.type.bar': 'Barras',\n 'chart.type.line': 'Líneas',\n 'chart.type.area': 'Área',\n 'chart.type.pie': 'Circular',\n 'chart.type.donut': 'Anillo',\n 'chart.type.scatter': 'Dispersión',\n 'chart.type.radar': 'Radar',\n 'chart.type.combo': 'Combinado',\n 'chart.type.auto': 'Automático',\n\n // Enterprise: agrupación de filas\n 'grouping.blank': '(vacío)',\n 'grouping.expandGroup': 'Expandir grupo',\n 'grouping.collapseGroup': 'Contraer grupo',\n 'grouping.announceExpanded': 'Grupo expandido {label}',\n 'grouping.announceCollapsed': 'Grupo contraído {label}',\n\n // Enterprise: tabla dinámica\n 'pivot.blank': '(vacío)',\n 'pivot.total': 'Total',\n 'pivot.grandTotal': 'Total general',\n 'pivot.columnsTruncated': 'Se muestran {shown} de {total} columnas dinámicas',\n\n // Enterprise: selección de rango\n 'rangeSelection.copied': 'Selección copiada al portapapeles',\n 'rangeSelection.pasted': 'Pegadas {rows} × {cols} celdas',\n\n // Enterprise: kit de IA\n 'ai.title': 'Preguntar a la IA',\n 'ai.placeholder': 'Pide a la tabla ordenar, filtrar, agrupar o responder una pregunta…',\n 'ai.modeControl': 'Cambiar la tabla',\n 'ai.modeAsk': 'Hacer una pregunta',\n 'ai.send': 'Enviar',\n 'ai.cancel': 'Cancelar',\n 'ai.thinking': 'Pensando…',\n 'ai.undo': 'Deshacer',\n 'ai.applied': 'Aplicado',\n 'ai.noChanges': 'No se aplicaron cambios.',\n 'ai.warnings': 'Notas',\n 'ai.answer': 'Respuesta',\n 'ai.error': 'Algo salió mal.',\n 'ai.close': 'Cerrar',\n 'ai.preview': 'Vista previa',\n 'ai.previewHeading': 'Se ejecutaría (no aplicado):',\n 'ai.previewEmpty': 'Nada que ejecutar.',\n 'ai.viaRule': 'Motor de reglas',\n 'ai.viaAI': 'IA',\n 'ai.history': 'Historial',\n 'ai.clearHistory': 'Borrar',\n 'ai.abstained': 'No pude convertir eso en una acción de la tabla.',\n 'ai.abstainedHint': 'Prueba a ordenar, filtrar o agrupar, o haz una pregunta sobre los datos.',\n\n // Fórmulas (enterprise)\n 'formula.editorLabel': 'Fórmula',\n 'formula.invalid': 'Fórmula no válida',\n 'formula.error.ref': 'Referencia de celda no válida',\n 'formula.error.name': 'Función desconocida',\n 'formula.error.div0': 'División por cero',\n 'formula.error.value': 'Valor no válido',\n 'formula.error.cycle': 'Referencia circular',\n};\n"]}
1
+ {"version":3,"file":"es.js","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GridLocaleText } from './en.js';\n\n/**\n * Spanish (Español) translation of the grid's built-in UI text.\n *\n * @remarks\n * A ready-made {@link GridLocaleText} map covering every key in `EN_LOCALE`.\n * Assign it to {@link ApexGrid.localeText} to render the grid in Spanish, or\n * spread it to override individual strings:\n *\n * ```ts\n * import { esLocale } from '@apexcharts/grid';\n *\n * grid.localeText = esLocale;\n * // or, with a tweak:\n * grid.localeText = { ...esLocale, 'toolbar.export': 'Descargar' };\n * ```\n */\nexport const esLocale: GridLocaleText = {\n // Paginación\n 'pagination.label': 'Paginación de la tabla',\n 'pagination.controls': 'Controles de paginación',\n 'pagination.rowsPerPage': 'Filas por página',\n 'pagination.firstPage': 'Ir a la primera página',\n 'pagination.previousPage': 'Ir a la página anterior',\n 'pagination.nextPage': 'Ir a la página siguiente',\n 'pagination.lastPage': 'Ir a la última página',\n 'pagination.summary': '{start}-{end} de {total}',\n 'pagination.summaryEmpty': '0 de 0',\n\n // Filtrado: operadores\n 'filter.operator.contains': 'Contiene',\n 'filter.operator.doesNotContain': 'No contiene',\n 'filter.operator.startsWith': 'Empieza por',\n 'filter.operator.endsWith': 'Termina en',\n 'filter.operator.equals': 'Igual a',\n 'filter.operator.doesNotEqual': 'Distinto de',\n 'filter.operator.greaterThan': 'Mayor que',\n 'filter.operator.lessThan': 'Menor que',\n 'filter.operator.greaterThanOrEqual': 'Mayor o igual que',\n 'filter.operator.lessThanOrEqual': 'Menor o igual que',\n 'filter.operator.empty': 'Vacío',\n 'filter.operator.notEmpty': 'No vacío',\n 'filter.operator.all': 'Todos',\n 'filter.operator.true': 'Verdadero',\n 'filter.operator.false': 'Falso',\n\n // Filtrado: interfaz\n 'filter.filter': 'Filtrar',\n 'filter.reset': 'Restablecer',\n 'filter.close': 'Cerrar',\n 'filter.removeFilter': 'Quitar filtro',\n 'filter.conditionList': 'Condición de filtro',\n 'filter.changeCondition': 'Cambiar condición de filtro',\n 'filter.inputPlaceholder': 'Añadir valor de filtro',\n\n // Filas: selección / expansión\n 'row.select': 'Seleccionar fila',\n 'row.expand': 'Expandir fila',\n 'row.collapse': 'Contraer fila',\n 'row.detail': 'Detalle de la fila',\n 'header.selectAll': 'Seleccionar todas las filas',\n 'header.expandAll': 'Expandir todas las filas',\n 'header.collapseAll': 'Contraer todas las filas',\n\n // Barra de herramientas\n 'toolbar.label': 'Barra de herramientas de la tabla',\n 'toolbar.searchPlaceholder': 'Buscar…',\n 'toolbar.export': 'Exportar',\n 'toolbar.exportOptions': 'Opciones de exportación',\n 'toolbar.createChart': 'Crear gráfico',\n 'toolbar.exportXlsx': 'Exportar XLSX',\n 'toolbar.askAI': 'Preguntar a la IA',\n\n // Anfitrión de la tabla\n 'grid.label': 'Tabla de datos',\n\n // Controles de cabecera\n 'header.sortedAscending': 'Orden ascendente. Activar para orden descendente.',\n 'header.sortedDescending': 'Orden descendente. Activar para quitar el orden.',\n 'header.notSorted': 'Sin ordenar. Activar para orden ascendente.',\n 'header.filterColumn': 'Filtrar columna',\n 'header.columnMenu': 'Menú de columna',\n 'header.autosizeColumn': 'Autoajustar columna',\n\n // Editores\n 'editor.rating': 'Calificación',\n\n // Anuncios de región activa\n 'announce.sortedAscending': 'Ordenado por {label} ascendente',\n 'announce.sortedDescending': 'Ordenado por {label} descendente',\n 'announce.sortCleared': 'Orden quitado en {label}',\n 'announce.filtered': 'Filtro aplicado a {label}',\n 'announce.filterCleared': 'Filtro quitado en {label}',\n 'announce.selectionCleared': 'Selección borrada',\n 'announce.rowSelected': '1 fila seleccionada',\n 'announce.rowsSelected': '{count} filas seleccionadas',\n 'announce.page': 'Página {page} de {total}',\n 'announce.undoOne': 'Deshacer 1 cambio de celda',\n 'announce.undoMany': 'Deshacer {count} cambios de celda',\n 'announce.redoOne': 'Rehacer 1 cambio de celda',\n 'announce.redoMany': 'Rehacer {count} cambios de celda',\n 'announce.rowExpanded': 'Fila expandida',\n 'announce.rowCollapsed': 'Fila contraída',\n 'announce.rowsExpanded': '{count} filas expandidas',\n 'announce.allRowsCollapsed': 'Todas las filas contraídas',\n 'announce.rowPinnedTop': 'Fila fijada arriba',\n 'announce.rowPinnedBottom': 'Fila fijada abajo',\n 'announce.rowUnpinned': 'Fila liberada',\n 'announce.rowGrabbed':\n 'Fila agarrada. Use las flechas para mover, Enter para soltar, Escape para cancelar.',\n 'announce.rowMovedTo': 'Fila movida a la posición {position}',\n 'announce.rowDropped': 'Fila soltada',\n 'announce.reorderCancelled': 'Reordenación cancelada',\n 'announce.rowMoved': 'Fila movida',\n 'announce.manualOrderCleared': 'Orden manual de filas borrado',\n\n // Enterprise: filtro de conjunto\n 'setFilter.searchPlaceholder': 'Buscar valores…',\n 'setFilter.noValues': 'Sin valores',\n 'setFilter.selectAll': '(Seleccionar todo)',\n 'setFilter.clearFilter': 'Borrar filtro',\n 'setFilter.blanks': '(Vacíos)',\n 'setFilter.more': 'Mostrando {shown} de {total} valores. Busque para acotar la lista.',\n\n // Enterprise: constructor de filtros avanzado\n 'filterBuilder.and': 'Y',\n 'filterBuilder.or': 'O',\n 'filterBuilder.column': 'Columna',\n 'filterBuilder.operator': 'Operador',\n 'filterBuilder.value': 'Valor',\n 'filterBuilder.addCondition': 'Condición',\n 'filterBuilder.addGroup': 'Grupo',\n 'filterBuilder.remove': 'Eliminar',\n 'filterBuilder.removeGroup': 'Eliminar grupo',\n 'filterBuilder.apply': 'Aplicar',\n 'filterBuilder.clear': 'Borrar',\n\n // Enterprise: barra de estado\n 'statusBar.selectRange': 'Seleccione un rango de celdas',\n 'statusBar.count': 'Recuento',\n 'statusBar.sum': 'Suma',\n 'statusBar.average': 'Prom.',\n 'statusBar.min': 'Mín.',\n 'statusBar.max': 'Máx.',\n\n // Enterprise: panel de herramientas\n 'toolPanel.noGrid': 'Ninguna tabla conectada',\n 'toolPanel.columns': 'Columnas',\n 'toolPanel.searchPlaceholder': 'Buscar columnas…',\n 'toolPanel.pinColumn': 'Fijar columna',\n 'toolPanel.moveUp': 'Subir',\n 'toolPanel.moveDown': 'Bajar',\n 'toolPanel.groupByColumn': 'Agrupar por esta columna',\n 'toolPanel.valueColumn': 'Usar como valor',\n 'toolPanel.columnLabelColumn': 'Usar como etiqueta de columna',\n 'toolPanel.pivotMode': 'Modo dinámico',\n 'toolPanel.rowGroups': 'Grupos de filas',\n 'toolPanel.rowGroupsPivot': 'Grupos de filas (filas dinámicas)',\n 'toolPanel.values': 'Valores',\n 'toolPanel.columnLabels': 'Etiquetas de columna',\n 'toolPanel.dragColumns': 'Arrastre columnas aquí',\n 'toolPanel.removeChip': 'Quitar',\n\n // Enterprise: menú contextual\n 'contextMenu.sortAsc': 'Ordenar ascendente',\n 'contextMenu.sortDesc': 'Ordenar descendente',\n 'contextMenu.clearSort': 'Quitar orden',\n 'contextMenu.pinStart': 'Fijar al inicio',\n 'contextMenu.pinEnd': 'Fijar al final',\n 'contextMenu.unpin': 'Desfijar',\n 'contextMenu.hideColumn': 'Ocultar columna',\n 'contextMenu.copy': 'Copiar',\n\n // Enterprise: gráficos\n 'chart.close': 'Cerrar',\n 'chart.placeholder': 'Seleccione celdas, o agrupe/pivote la tabla, para graficarla.',\n 'chart.chartRange': 'Graficar rango',\n 'chart.chartView': 'Graficar esta vista',\n 'chart.selectionHint': 'Graficar la selección (Alt+F1)',\n 'chart.rangeHandle': 'Redimensionar el rango de origen del gráfico',\n 'chart.rangeResized': 'Rango de origen del gráfico: {rows} × {cols} celdas',\n 'chart.export': 'Exportar',\n 'chart.exportPng': 'Imagen PNG',\n 'chart.exportSvg': 'Vector SVG',\n 'chart.copyImage': 'Copiar imagen',\n 'chart.imageCopied': 'Imagen del gráfico copiada al portapapeles',\n 'chart.suggested': 'Sugerido',\n 'chart.suggestedHint': 'Deja que ApexGrid elija el mejor tipo de gráfico para estos datos',\n 'chart.by': 'por',\n 'chart.renameHint': 'Haz doble clic para renombrar',\n 'chart.emptyTitle': 'Aún no hay nada que graficar',\n 'chart.emptyRange': 'Selecciona un rango de celdas, o',\n 'chart.emptyView': 'agrupa o dinamiza la cuadrícula',\n 'chart.swapAxes': 'Intercambiar ejes (horizontal)',\n 'chart.swapAxesHint': 'Intercambia los ejes X e Y (barras horizontales)',\n 'chart.data': 'Datos',\n 'chart.mapCategory': 'Categoría (X)',\n 'chart.mapCategoryNone': 'Ninguna',\n 'chart.mapSeries': 'Series (Y)',\n 'chart.mapAggregation': 'Agregación',\n 'chart.secondaryAxis': 'Dibujar en el eje secundario (derecho)',\n 'chart.secondaryAxisShort': '2.º eje',\n 'chart.calcFields': 'Campos calculados',\n 'chart.calcName': 'Nombre (p. ej. Bono %)',\n 'chart.calcFormula': 'Fórmula (p. ej. B1 / A1 * 100)',\n 'chart.calcAdd': 'Añadir campo',\n 'chart.calcRemove': 'Eliminar campo calculado',\n 'chart.agg.sum': 'Suma',\n 'chart.agg.avg': 'Promedio',\n 'chart.agg.count': 'Recuento',\n 'chart.agg.min': 'Mínimo',\n 'chart.agg.max': 'Máximo',\n 'chart.agg.median': 'Mediana',\n 'chart.format': 'Formato',\n 'chart.legend': 'Leyenda',\n 'chart.dataLabels': 'Etiquetas de datos',\n 'chart.gridlines': 'Líneas de cuadrícula',\n 'chart.numberFormat': 'Formato numérico',\n 'chart.seriesColors': 'Colores',\n 'chart.format.none': 'Simple',\n 'chart.format.currency': 'Moneda',\n 'chart.format.percent': 'Porcentaje',\n 'chart.format.thousands': 'Miles',\n 'chart.trendline': 'Línea de tendencia',\n 'chart.referenceLine': 'Línea de referencia',\n 'chart.referenceBand': 'Banda de referencia',\n 'chart.bandFrom': 'Desde',\n 'chart.bandTo': 'Hasta',\n 'chart.forecast': 'Períodos de pronóstico',\n 'chart.forecastBand': 'Banda de pronóstico',\n 'chart.axisTitleX': 'Título del eje X',\n 'chart.axisTitleY': 'Título del eje Y',\n 'chart.countSeries': 'Recuento',\n 'chart.type.column': 'Columnas',\n 'chart.type.bar': 'Barras',\n 'chart.type.line': 'Líneas',\n 'chart.type.area': 'Área',\n 'chart.type.pie': 'Circular',\n 'chart.type.donut': 'Anillo',\n 'chart.type.scatter': 'Dispersión',\n 'chart.type.radar': 'Radar',\n 'chart.type.combo': 'Combinado',\n 'chart.type.auto': 'Automático',\n\n // Enterprise: agrupación de filas\n 'grouping.blank': '(vacío)',\n 'grouping.expandGroup': 'Expandir grupo',\n 'grouping.collapseGroup': 'Contraer grupo',\n 'grouping.announceExpanded': 'Grupo expandido {label}',\n 'grouping.announceCollapsed': 'Grupo contraído {label}',\n\n // Enterprise: tabla dinámica\n 'pivot.blank': '(vacío)',\n 'pivot.total': 'Total',\n 'pivot.grandTotal': 'Total general',\n 'pivot.columnsTruncated': 'Se muestran {shown} de {total} columnas dinámicas',\n\n // Enterprise: selección de rango\n 'rangeSelection.copied': 'Selección copiada al portapapeles',\n 'rangeSelection.pasted': 'Pegadas {rows} × {cols} celdas',\n\n // Enterprise: kit de IA\n 'ai.title': 'Preguntar a la IA',\n 'ai.placeholder': 'Pide a la tabla ordenar, filtrar, agrupar o responder una pregunta…',\n 'ai.modeControl': 'Cambiar la tabla',\n 'ai.modeAsk': 'Hacer una pregunta',\n 'ai.send': 'Enviar',\n 'ai.cancel': 'Cancelar',\n 'ai.cancelled': 'Cancelado.',\n 'ai.thinking': 'Pensando…',\n 'ai.undo': 'Deshacer',\n 'ai.applied': 'Aplicado',\n 'ai.noChanges': 'No se aplicaron cambios.',\n 'ai.warnings': 'Notas',\n 'ai.answer': 'Respuesta',\n 'ai.error': 'Algo salió mal.',\n 'ai.close': 'Cerrar',\n 'ai.preview': 'Vista previa',\n 'ai.previewHeading': 'Se ejecutaría (no aplicado):',\n 'ai.previewEmpty': 'Nada que ejecutar.',\n 'ai.viaRule': 'Motor de reglas',\n 'ai.viaAI': 'IA',\n 'ai.history': 'Historial',\n 'ai.clearHistory': 'Borrar',\n 'ai.abstained': 'No pude convertir eso en una acción de la tabla.',\n 'ai.abstainedHint': 'Prueba a ordenar, filtrar o agrupar, o haz una pregunta sobre los datos.',\n\n // Fórmulas (enterprise)\n 'formula.editorLabel': 'Fórmula',\n 'formula.invalid': 'Fórmula no válida',\n 'formula.error.ref': 'Referencia de celda no válida',\n 'formula.error.name': 'Función desconocida',\n 'formula.error.div0': 'División por cero',\n 'formula.error.value': 'Valor no válido',\n 'formula.error.cycle': 'Referencia circular',\n};\n"]}
package/ignite-ui.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/ignite-ui.js ADDED
@@ -0,0 +1,4 @@
1
+ import { registerDesignSystem } from './internal/design-system.js';
2
+ import { IGNITE_UI_STYLES } from './internal/ignite-ui.js';
3
+ registerDesignSystem(IGNITE_UI_STYLES);
4
+ //# sourceMappingURL=ignite-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignite-ui.js","sourceRoot":"","sources":["../src/ignite-ui.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,oBAAoB,CAAC,gBAAgB,CAAC,CAAC","sourcesContent":["/**\n * `apex-grid/ignite-ui`: the Ignite UI add-on.\n *\n * Import it once and every grid on the page follows the Ignite UI theme the\n * page loads: brand, text, lines, header and popup surfaces, state colours,\n * font, light or dark. Without it the grid reads no `--ig-*` token, and an\n * Ignite UI stylesheet changes nothing.\n *\n * ```ts\n * import 'apex-grid/ignite-ui';\n * ```\n *\n * - It works in CSS: each grid adopts the add-on's rules into its shadow root\n * (a page stylesheet cannot reach them), so there is no separate `.css` file.\n * A grid connected before the import takes them at once.\n * - Ranking: an `--ag-*` token you set wins, then the family `--apx-*` tokens,\n * then Ignite UI, then the built-in values.\n * - Mode: a grid without `theme=\"dark\"` or `theme=\"light\"` follows the Ignite UI\n * variant (`--ig-theme-variant`); `theme=\"light\"` keeps a grid light.\n * - Per grid: `design-system=\"off\"` (`designSystem = false`) turns the Ignite\n * UI colours and font off (the variant still picks the mode); `tokens=\"off\"`\n * (`tokens = false`) turns off the family tokens and Ignite UI, variant\n * included.\n * - While it is loaded, the `--ag-*` tokens that follow Ignite UI leave the root\n * defaults (as `--ag-brand` and `--ag-font` always have), so page CSS that\n * reads one gives its own fallback.\n * - Other Apex products take their own add-on (`apexcharts/features/ignite-ui`,\n * `apextree/ignite-ui`, ...). The enterprise chart panel reads the theme\n * itself only when the page also imports the ApexCharts one.\n * - It registers on a shared `globalThis` slot, so it reaches every grid even\n * when the grid and this add-on come from separately built bundles.\n */\nimport { registerDesignSystem } from './internal/design-system.js';\nimport { IGNITE_UI_STYLES } from './internal/ignite-ui.js';\n\nregisterDesignSystem(IGNITE_UI_STYLES);\n"]}
@@ -23,14 +23,19 @@ export type SelectOption<V = unknown> = V | {
23
23
  * conditional-type narrowing in generic positions.
24
24
  */
25
25
  export interface ColumnTypeCellContext<T extends object> {
26
+ /** Rendered element; may later show another record (see {@link data}). */
26
27
  parent: ApexGridCell<T>;
28
+ /** Rendered element; may later show another record (see {@link data}). */
27
29
  row: ApexGridRow<T>;
28
30
  column: ColumnConfiguration<T>;
29
31
  value: unknown;
32
+ /** The record this context was built for. */
33
+ readonly data: T;
30
34
  /**
31
35
  * Commits a new value for this cell without entering edit mode. Only
32
36
  * present when the column is editable. Used by interactive display
33
- * widgets like the boolean checkbox.
37
+ * widgets like the boolean checkbox. Writes to {@link data}, also after an
38
+ * `await`.
34
39
  */
35
40
  commit?(value: unknown): Promise<boolean>;
36
41
  }
@@ -40,6 +45,11 @@ export interface ColumnTypeCellContext<T extends object> {
40
45
  * {@link EditingController}.
41
46
  */
42
47
  export interface ColumnTypeEditorContext<T extends object> extends ColumnTypeCellContext<T> {
48
+ /**
49
+ * Commits the open editor's value (see `BaseApexEditorContext.commit`).
50
+ * It commits the cell in edit when called, not {@link data}, so it should
51
+ * not run after an `await` that outlives the edit.
52
+ */
43
53
  commit(value: unknown): Promise<boolean>;
44
54
  cancel(): void;
45
55
  /**
@@ -1,4 +1,5 @@
1
1
  import { html, nothing, svg } from 'lit';
2
+ import { keyed } from 'lit/directives/keyed.js';
2
3
  import { ref } from 'lit/directives/ref.js';
3
4
  import { renderIcon } from './icons.js';
4
5
  const RATING_DEFAULT_MAX = 5;
@@ -297,12 +298,13 @@ const imageType = {
297
298
  const shape = ctx.column.shape ?? 'square';
298
299
  const colAny = ctx.column;
299
300
  const alt = colAny.alt ?? String(colAny.key ?? '');
300
- return html `<img
301
- part=${shape === 'circle' ? 'image circle' : 'image'}
302
- src=${String(value)}
303
- alt=${alt}
304
- loading="lazy"
305
- />`;
301
+ const src = String(value);
302
+ return keyed(src, html `<img
303
+ part=${shape === 'circle' ? 'image circle' : 'image'}
304
+ src=${src}
305
+ alt=${alt}
306
+ loading="lazy"
307
+ />`);
306
308
  },
307
309
  };
308
310
  function toFiniteNumber(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"column-types.js","sourceRoot":"","sources":["../../src/internal/column-types.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, svg, type TemplateResult } from 'lit';\nimport { ref } from 'lit/directives/ref.js';\nimport type ApexGridCell from '../components/cell.js';\nimport type ApexGridRow from '../components/row.js';\nimport { renderIcon } from './icons.js';\nimport type { BadgeVariant, ColumnConfiguration, StatusVariant } from './types.js';\n\nconst RATING_DEFAULT_MAX = 5;\n\n/** The star count of a `'rating'` column: its `max`, or 5. */\nexport function getRatingMax(column: { max?: number }): number {\n const max = typeof column.max === 'number' ? Math.floor(column.max) : RATING_DEFAULT_MAX;\n return max > 0 ? max : RATING_DEFAULT_MAX;\n}\n\n/** A rating value as a whole number from 0 to `max` (0 when not a number). */\nexport function clampRating(value: unknown, max: number): number {\n const n = typeof value === 'number' ? value : Number(value ?? 0);\n if (!Number.isFinite(n)) return 0;\n if (n < 0) return 0;\n if (n > max) return max;\n return Math.round(n);\n}\n\n/**\n * An option entry for a `'select'` column. May be either a bare value (the\n * displayed label is `String(value)`) or an explicit `{ value, label }` pair.\n */\nexport type SelectOption<V = unknown> = V | { value: V; label?: string };\n\n/**\n * The flat, non-distributive cell context handed to a column-type renderer's\n * `display` function. Mirrors {@link ApexCellContext} but uses `unknown` for\n * `value` so renderers can author against a single shape without\n * conditional-type narrowing in generic positions.\n */\nexport interface ColumnTypeCellContext<T extends object> {\n parent: ApexGridCell<T>;\n row: ApexGridRow<T>;\n column: ColumnConfiguration<T>;\n value: unknown;\n /**\n * Commits a new value for this cell without entering edit mode. Only\n * present when the column is editable. Used by interactive display\n * widgets like the boolean checkbox.\n */\n commit?(value: unknown): Promise<boolean>;\n}\n\n/**\n * Cell context handed to a column-type renderer's `editor` function. Adds the\n * `commit` / `cancel` / `setDraft` helpers wired through\n * {@link EditingController}.\n */\nexport interface ColumnTypeEditorContext<T extends object> extends ColumnTypeCellContext<T> {\n commit(value: unknown): Promise<boolean>;\n cancel(): void;\n /**\n * Records the editor's uncommitted value without closing the editor. The\n * cell commits it on Tab and on focus loss, `grid.commitEdit()` commits it\n * too.\n */\n setDraft(value: unknown): void;\n}\n\n/**\n * Built-in column-type renderer contract. A renderer can supply either a\n * display template, an editor template, or both. Cells fall back to the\n * column's `cellTemplate` / `editorTemplate` / built-in primitive editor if\n * the renderer is absent.\n */\nexport interface ColumnTypeRenderer<T extends object> {\n /**\n * Renders the display (read-only) representation of the cell.\n *\n * @remarks\n * Called when the cell is not in edit mode and the column has no\n * `cellTemplate`. Return any lit-renderable value.\n */\n display?(ctx: ColumnTypeCellContext<T>): TemplateResult | unknown;\n\n /**\n * Renders the inline editor while the cell is in edit mode.\n *\n * @remarks\n * Called when the cell is in edit mode and the column has no\n * `editorTemplate`. The returned template SHOULD include `data-apex-editor`\n * on its focusable element so the cell auto-focuses it. The editor is\n * responsible for calling `ctx.commit(value)` / `ctx.cancel()`.\n */\n editor?(ctx: ColumnTypeEditorContext<T>): TemplateResult | unknown;\n}\n\ninterface NormalizedSelectOption {\n value: unknown;\n label: string;\n}\n\n/**\n * Normalizes a column's `options` configuration into a uniform\n * `{ value, label }[]` list. Accepts both bare-value entries and explicit\n * `{ value, label }` pairs.\n */\nexport function getSelectOptions(column: { options?: SelectOption[] }): NormalizedSelectOption[] {\n const raw = column.options ?? [];\n return raw.map((entry) => {\n if (entry !== null && typeof entry === 'object' && 'value' in entry) {\n const opt = entry as { value: unknown; label?: string };\n return { value: opt.value, label: opt.label ?? String(opt.value) };\n }\n return { value: entry, label: String(entry) };\n });\n}\n\nconst selectType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const opts = getSelectOptions(ctx.column as { options?: SelectOption[] });\n const match = opts.find((o) => o.value === ctx.value);\n const label = match?.label ?? (ctx.value == null ? '' : String(ctx.value));\n // Closed-state display is intentionally plain text — the cell reads as\n // a normal value cell until the user double-clicks to edit. The\n // dropdown affordance appears only in edit mode (the listbox popover).\n return html`<span part=\"select-label\">${label}</span>`;\n },\n\n editor(ctx) {\n const opts = getSelectOptions(ctx.column as { options?: SelectOption[] });\n const current = ctx.value;\n const match = opts.find((o) => o.value === current);\n const label = match?.label ?? (current == null ? '' : String(current));\n const selectedIdx = Math.max(\n 0,\n opts.findIndex((o) => o.value === current)\n );\n\n // The popover is rendered as a `position: absolute` child of the cell\n // (the cell host is `position: relative`). That positions it relative\n // to the cell regardless of how the row is laid out — important\n // because the virtualizer applies `transform: translate` to each row,\n // which would re-anchor a `position: fixed` descendant onto the row.\n // The cell-level SCSS lifts `overflow: hidden` for select-type editing\n // cells so the popover can extend below the cell's box.\n const mountPopover = (el: Element | undefined) => {\n if (!el) return;\n const popover = el as HTMLElement;\n if (popover.dataset.apexFocused) return;\n popover.dataset.apexFocused = '1';\n const items = Array.from(popover.querySelectorAll<HTMLElement>('[part~=\"select-option\"]'));\n items[selectedIdx]?.focus();\n };\n\n const handleKeydown = (event: KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const list = target.closest('[part~=\"select-popover\"]') as HTMLElement | null;\n if (!list) return;\n const items = Array.from(list.querySelectorAll<HTMLElement>('[part~=\"select-option\"]'));\n const idx = items.indexOf(target);\n if (idx < 0) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n event.stopPropagation();\n items[Math.min(idx + 1, items.length - 1)]?.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n event.stopPropagation();\n items[Math.max(idx - 1, 0)]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n event.stopPropagation();\n items[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n event.stopPropagation();\n items[items.length - 1]?.focus();\n } else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n ctx.commit(opts[idx].value);\n }\n // Escape / Tab fall through to the cell-level handler which cancels /\n // exits — we don't consume them here so the standard exit flow applies.\n };\n\n return html`<span part=\"select-label\">${label}</span>\n <div\n part=\"select-popover\"\n role=\"listbox\"\n @keydown=${handleKeydown}\n ${ref(mountPopover)}\n >\n ${opts.map(\n (o, i) => html`<div\n part=${o.value === current ? 'select-option selected' : 'select-option'}\n role=\"option\"\n aria-selected=${o.value === current ? 'true' : 'false'}\n tabindex=${i === selectedIdx ? '0' : '-1'}\n data-apex-editor=${i === selectedIdx ? '' : nothing}\n @click=${() => ctx.commit(o.value)}\n >\n ${o.label}\n </div>`\n )}\n </div>`;\n },\n};\n\n/**\n * Parses a stored cell value into a `Date`, or `null` when the value can't be\n * resolved to a real date.\n *\n * @remarks\n * Accepts `Date` instances, ISO/parseable strings, and millisecond\n * timestamps. `YYYY-MM-DD` strings are interpreted as **floating dates**\n * (local midnight) rather than UTC midnight, so they render on the same\n * calendar day in every timezone.\n */\nexport function parseDate(value: unknown): Date | null {\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? null : value;\n }\n if (typeof value === 'number') {\n const d = new Date(value);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n if (typeof value === 'string') {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (match) {\n const [, y, m, d] = match;\n const date = new Date(Number(y), Number(m) - 1, Number(d));\n return Number.isNaN(date.getTime()) ? null : date;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n return null;\n}\n\nfunction toDateInputValue(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\nconst dateFormatters = new Map<string, Intl.DateTimeFormat>();\nconst currencyFormatters = new Map<string, Intl.NumberFormat>();\n\n/**\n * The cached `Intl.DateTimeFormat` for a date column's `format` style, shared\n * by the date cell and CSV export. Building a formatter costs about fifty\n * times as much as using one, so cells and export rows reuse it. An unknown\n * style falls back to `'medium'` instead of throwing on every cell.\n */\nexport function dateFormatter(style = 'medium'): Intl.DateTimeFormat {\n let formatter = dateFormatters.get(style);\n if (!formatter) {\n try {\n formatter = new Intl.DateTimeFormat(undefined, {\n dateStyle: style as Intl.DateTimeFormatOptions['dateStyle'],\n });\n } catch {\n formatter = dateFormatter();\n }\n dateFormatters.set(style, formatter);\n }\n return formatter;\n}\n\n/**\n * The cached currency formatter for a column. A malformed `locale` falls back\n * to the runtime locale and a malformed `currency` to USD, keeping whichever\n * option is valid, so a bad option shows a default format instead of\n * throwing on every cell.\n */\nfunction currencyFormatter(locale?: string, currency = 'USD'): Intl.NumberFormat {\n const key = `${locale}|${currency}`;\n let formatter = currencyFormatters.get(key);\n if (!formatter) {\n try {\n formatter = new Intl.NumberFormat(locale, { style: 'currency', currency });\n } catch {\n let localeOk = true;\n try {\n Intl.getCanonicalLocales(locale);\n } catch {\n localeOk = false;\n }\n // Only the currency is bad: keep the column's locale with USD.\n formatter =\n localeOk && currency !== 'USD'\n ? currencyFormatter(locale)\n : currencyFormatter(undefined, currency);\n }\n currencyFormatters.set(key, formatter);\n }\n return formatter;\n}\n\n/**\n * Returns a `next` value cast to the same shape as `original` (Date / number\n * timestamp / ISO string). Empty inputs commit `null` regardless of the\n * source shape, which is the simplest \"clear\" semantics.\n */\nexport function commitDateInSameShape(original: unknown, next: Date | null): unknown {\n if (next === null) return null;\n if (original instanceof Date) return next;\n if (typeof original === 'number') return next.getTime();\n return toDateInputValue(next);\n}\n\n/**\n * Date inputs the user has typed into. Chromium fires `change` on every\n * segment keystroke of `<input type=\"date\">`, so once the keyboard is used a\n * change only stages the draft; a change without typing (a pick from the\n * calendar popup) still commits at once. Keyed by the element so the state\n * survives re-renders of the editing cell.\n */\nconst typedDateInputs = new WeakSet<EventTarget>();\n\nconst dateType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const date = parseDate(ctx.value);\n return date ? dateFormatter((ctx.column as { format?: string }).format).format(date) : '';\n },\n\n editor(ctx) {\n const initial = parseDate(ctx.value);\n const initialInput = initial ? toDateInputValue(initial) : '';\n // The record value sets the shape: ctx.value is the draft when the editor\n // resumes an edit in progress, and a cleared draft (null) has no shape.\n const { key } = ctx.column as { key: string };\n const shape = (ctx.row.data as Record<string, unknown>)[key] ?? ctx.value;\n\n const read = (input: HTMLInputElement) => {\n const raw = input.value;\n return commitDateInSameShape(shape, raw ? parseDate(raw) : null);\n };\n const handleChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n // A half-typed date reads as '' (badInput); keep the last full draft\n // rather than staging a clear.\n if (input.validity.badInput) return;\n if (typedDateInputs.has(input)) {\n ctx.setDraft(read(input));\n } else {\n ctx.commit(read(input));\n }\n };\n // Escape / Tab / focus-out are handled at the cell level (Tab and focus-out\n // commit the draft); Enter commits the typed value here. Enter on a\n // half-typed date (badInput, which reads as '') keeps the editor open\n // rather than committing a clear.\n const handleKeydown = (event: KeyboardEvent) => {\n const input = event.target as HTMLInputElement;\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n if (!input.validity.badInput) ctx.commit(read(input));\n return;\n }\n if (event.key !== 'Tab' && event.key !== 'Escape') typedDateInputs.add(input);\n };\n return html`<input\n type=\"date\"\n part=\"editor\"\n data-apex-editor\n .value=${initialInput}\n @change=${handleChange}\n @keydown=${handleKeydown}\n />`;\n },\n};\n\nconst ratingType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const max = getRatingMax(ctx.column as { max?: number });\n const value = clampRating(ctx.value, max);\n const stars = Array.from({ length: max }, (_, i) => i < value);\n return html`<span part=\"rating\" role=\"img\" aria-label=\"${value} of ${max}\">\n ${stars.map(\n (filled) =>\n html`<span part=${filled ? 'rating-star filled' : 'rating-star'} aria-hidden=\"true\">\n ${renderIcon('star')}\n </span>`\n )}\n </span>`;\n },\n\n editor(ctx) {\n const max = getRatingMax(ctx.column as { max?: number });\n const current = clampRating(ctx.value, max);\n const focusRank = Math.max(current, 1);\n\n const commitTo = (next: number) => ctx.commit(clampRating(next, max));\n\n // Escape / Tab / focus-out are handled at the cell level — no per-editor\n // handlers needed here. Clicking a star is the primary commit action;\n // clicking the currently-rated star clears the rating back to 0, which\n // is the only way to get below 1 once any star is set.\n const stars = Array.from({ length: max }, (_, i) => i + 1);\n return html`<span\n part=\"rating-editor\"\n role=\"radiogroup\"\n aria-label=${ctx.parent.state?.localize('editor.rating', undefined, 'Rating') ?? 'Rating'}\n >\n ${stars.map(\n (rank) => html`<button\n type=\"button\"\n part=${rank <= current ? 'rating-star filled selected' : 'rating-star'}\n role=\"radio\"\n aria-checked=${rank === current}\n aria-label=${`${rank} of ${max}`}\n data-rating-value=${rank}\n data-apex-editor=${rank === focusRank ? '' : nothing}\n @click=${() => commitTo(rank === current ? 0 : rank)}\n >\n ${renderIcon('star')}\n </button>`\n )}\n </span>`;\n },\n};\n\nconst booleanType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const truthy = ctx.value === true;\n const editable = typeof ctx.commit === 'function';\n // For editable boolean cells the display IS the interactive control —\n // a single click toggles and commits via `ctx.commit`, no edit mode\n // dance and no visual reflow. For non-editable cells the checkbox\n // reads as a state indicator (tabindex=-1, aria-readonly, pointer-\n // events disabled via SCSS).\n return html`<input\n type=\"checkbox\"\n part=${truthy ? 'boolean-mark checked' : 'boolean-mark'}\n .checked=${truthy}\n tabindex=${editable ? '0' : '-1'}\n aria-readonly=${editable ? 'false' : 'true'}\n aria-label=${truthy ? 'true' : 'false'}\n @click=${(event: Event) => {\n // Keep the click inside the cell — we don't want it to bubble into\n // the grid body-click handler twice or trigger edit-mode logic.\n event.stopPropagation();\n }}\n @change=${\n editable\n ? async (event: Event) => {\n const target = event.target as HTMLInputElement;\n // A rejected commit (cancelled cellValueChanging, failed\n // validator) leaves the data alone, and Lit sees no binding\n // change to re-apply, so put the checkbox back by hand.\n if (!(await ctx.commit?.(target.checked))) target.checked = truthy;\n }\n : undefined\n }\n />`;\n },\n // No `editor` — boolean cells never enter edit mode (the display widget\n // commits directly). Programmatic `editCell` on a boolean column is a\n // no-op as far as the user can see.\n};\n\nconst imageType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const value = ctx.value;\n if (value == null || value === '') return html``;\n const shape = (ctx.column as { shape?: 'square' | 'circle' }).shape ?? 'square';\n const colAny = ctx.column as { alt?: string; key?: unknown };\n const alt = colAny.alt ?? String(colAny.key ?? '');\n return html`<img\n part=${shape === 'circle' ? 'image circle' : 'image'}\n src=${String(value)}\n alt=${alt}\n loading=\"lazy\"\n />`;\n },\n // Editing an image URL is just text editing — fall through to the default\n // text editor for `editable: true` image columns.\n};\n\n// ── Premium presentation renderers ─────────────────────────────────────────\n// currency / avatar / badge / progress / sparkline / status. These are display\n// presentations over primitive values; for sorting / filtering they behave as\n// their underlying value type. Styling lives in `styles/body-cell/cell-renderers.scss`.\n\nfunction toFiniteNumber(value: unknown): number | null {\n const n = typeof value === 'number' ? value : Number(value);\n return Number.isFinite(n) ? n : null;\n}\n\nfunction getPositiveMax(column: { max?: number }, fallback: number): number {\n const m = typeof column.max === 'number' ? column.max : fallback;\n return m > 0 ? m : fallback;\n}\n\n/** Stable 0–359 hue derived from a string, for per-row avatar tinting. */\nfunction hashHue(value: string): number {\n let hash = 0;\n for (let i = 0; i < value.length; i++) {\n hash = (hash * 31 + value.charCodeAt(i)) % 360;\n }\n return hash;\n}\n\n/** Heuristic fallback mapping a free-text status to a known state. */\nfunction inferStatus(value: unknown): StatusVariant {\n const s = String(value ?? '').toLowerCase();\n if (/churn|cancel|expired|inactive|lost|risk|fail|off|overdue/.test(s)) return 'churn';\n if (/trial|trialing|pending|new|invited|watch|paused/.test(s)) return 'trial';\n return 'active';\n}\n\nconst currencyType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const col = ctx.column as { currency?: string; locale?: string };\n const n = toFiniteNumber(ctx.value);\n if (n === null) return html``;\n return html`${currencyFormatter(col.locale, col.currency).format(n)}`;\n },\n // No `editor`: currency cells edit with the cell's built-in number editor.\n};\n\nconst avatarType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const label = ctx.value == null ? '' : String(ctx.value);\n const initial = label.trim().charAt(0).toUpperCase();\n if (!initial) return html``;\n return html`<span part=\"avatar\" role=\"img\" aria-label=${label} style=\"--ag-avatar-hue: ${hashHue(label)}\"\n >${initial}</span\n >`;\n },\n};\n\nconst badgeType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const value = ctx.value;\n if (value == null || value === '') return html``;\n const col = ctx.column as {\n badgeVariant?: BadgeVariant | ((value: unknown) => BadgeVariant);\n };\n const variant =\n typeof col.badgeVariant === 'function'\n ? col.badgeVariant(value)\n : (col.badgeVariant ?? 'neutral');\n return html`<span part=\"pill pill--${variant}\">${String(value)}</span>`;\n },\n};\n\nconst progressType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const n = toFiniteNumber(ctx.value);\n if (n === null) return html``;\n const max = getPositiveMax(ctx.column as { max?: number }, 100);\n const pct = Math.max(0, Math.min(100, (n / max) * 100));\n const tier = pct >= 80 ? 'good' : pct >= 65 ? 'watch' : 'risk';\n return html`<span part=\"progress\">\n <span part=\"progress-track\">\n <span part=\"progress-fill progress-fill--${tier}\" style=\"width: ${pct}%\"></span>\n </span>\n <span part=\"progress-label\">${Math.round(pct)}</span>\n </span>`;\n },\n};\n\nconst sparklineType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const series = Array.isArray(ctx.value)\n ? (ctx.value.filter((v) => typeof v === 'number' && Number.isFinite(v)) as number[])\n : [];\n if (series.length < 2) return html``;\n\n const width = 64;\n const height = 22;\n const pad = 2;\n const min = Math.min(...series);\n const max = Math.max(...series);\n const range = max - min || 1;\n const stepX = width / (series.length - 1);\n const points = series.map((value, i) => {\n const x = i * stepX;\n const y = pad + (height - 2 * pad) * (1 - (value - min) / range);\n return `${x.toFixed(1)} ${y.toFixed(1)}`;\n });\n const line = `M${points.join(' L')}`;\n const area = `${line} L${width} ${height} L0 ${height} Z`;\n\n const first = series[0];\n const last = series[series.length - 1];\n const trend = last > first ? 'up' : last < first ? 'down' : 'flat';\n // A percent change from zero is undefined, so no label then. toFixed\n // rounds a half away from zero, so a rise and a fall of the same size\n // get the same label; `|| 0` turns the '-0' of a tiny decline into 0.\n const delta = +(((last - first) / Math.abs(first)) * 100).toFixed(0) || 0;\n const showDelta = first !== 0 && (ctx.column as { showDelta?: boolean }).showDelta !== false;\n\n return html`<span part=\"spark-cell\">\n <svg\n part=\"sparkline sparkline--${trend}\"\n viewBox=\"0 0 ${width} ${height}\"\n width=${width}\n height=${height}\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n >\n ${svg`<path part=\"spark-area\" d=${area} /><path part=\"spark-line\" d=${line} />`}\n </svg>\n ${\n showDelta\n ? html`<span part=\"spark-delta spark-delta--${trend}\"\n >${delta > 0 ? '+' : ''}${delta}%</span\n >`\n : nothing\n }\n </span>`;\n },\n};\n\nconst statusType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const value = ctx.value;\n if (value == null || value === '') return html``;\n const col = ctx.column as {\n statusVariant?: StatusVariant | ((value: unknown) => StatusVariant);\n };\n const variant =\n typeof col.statusVariant === 'function'\n ? col.statusVariant(value)\n : (col.statusVariant ?? inferStatus(value));\n return html`<span part=\"status status--${variant}\">\n <span part=\"status-dot\"></span>${String(value)}\n </span>`;\n },\n};\n\nconst BUILTIN_TYPES: Record<string, ColumnTypeRenderer<object>> = {\n select: selectType,\n rating: ratingType,\n date: dateType,\n boolean: booleanType,\n image: imageType,\n currency: currencyType,\n avatar: avatarType,\n badge: badgeType,\n progress: progressType,\n sparkline: sparklineType,\n status: statusType,\n};\n\n/**\n * Returns the built-in renderer for a column `type`, or `undefined` when the\n * type has no built-in display/editor (the cell falls back to plain text /\n * the primitive editor in that case).\n */\nexport function getColumnTypeRenderer<T extends object>(\n type?: string\n): ColumnTypeRenderer<T> | undefined {\n return type ? (BUILTIN_TYPES[type] as unknown as ColumnTypeRenderer<T> | undefined) : undefined;\n}\n"]}
1
+ {"version":3,"file":"column-types.js","sourceRoot":"","sources":["../../src/internal/column-types.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, svg, type TemplateResult } from 'lit';\nimport { keyed } from 'lit/directives/keyed.js';\nimport { ref } from 'lit/directives/ref.js';\nimport type ApexGridCell from '../components/cell.js';\nimport type ApexGridRow from '../components/row.js';\nimport { renderIcon } from './icons.js';\nimport type { BadgeVariant, ColumnConfiguration, StatusVariant } from './types.js';\n\nconst RATING_DEFAULT_MAX = 5;\n\n/** The star count of a `'rating'` column: its `max`, or 5. */\nexport function getRatingMax(column: { max?: number }): number {\n const max = typeof column.max === 'number' ? Math.floor(column.max) : RATING_DEFAULT_MAX;\n return max > 0 ? max : RATING_DEFAULT_MAX;\n}\n\n/** A rating value as a whole number from 0 to `max` (0 when not a number). */\nexport function clampRating(value: unknown, max: number): number {\n const n = typeof value === 'number' ? value : Number(value ?? 0);\n if (!Number.isFinite(n)) return 0;\n if (n < 0) return 0;\n if (n > max) return max;\n return Math.round(n);\n}\n\n/**\n * An option entry for a `'select'` column. May be either a bare value (the\n * displayed label is `String(value)`) or an explicit `{ value, label }` pair.\n */\nexport type SelectOption<V = unknown> = V | { value: V; label?: string };\n\n/**\n * The flat, non-distributive cell context handed to a column-type renderer's\n * `display` function. Mirrors {@link ApexCellContext} but uses `unknown` for\n * `value` so renderers can author against a single shape without\n * conditional-type narrowing in generic positions.\n */\nexport interface ColumnTypeCellContext<T extends object> {\n /** Rendered element; may later show another record (see {@link data}). */\n parent: ApexGridCell<T>;\n /** Rendered element; may later show another record (see {@link data}). */\n row: ApexGridRow<T>;\n column: ColumnConfiguration<T>;\n value: unknown;\n /** The record this context was built for. */\n readonly data: T;\n /**\n * Commits a new value for this cell without entering edit mode. Only\n * present when the column is editable. Used by interactive display\n * widgets like the boolean checkbox. Writes to {@link data}, also after an\n * `await`.\n */\n commit?(value: unknown): Promise<boolean>;\n}\n\n/**\n * Cell context handed to a column-type renderer's `editor` function. Adds the\n * `commit` / `cancel` / `setDraft` helpers wired through\n * {@link EditingController}.\n */\nexport interface ColumnTypeEditorContext<T extends object> extends ColumnTypeCellContext<T> {\n /**\n * Commits the open editor's value (see `BaseApexEditorContext.commit`).\n * It commits the cell in edit when called, not {@link data}, so it should\n * not run after an `await` that outlives the edit.\n */\n commit(value: unknown): Promise<boolean>;\n cancel(): void;\n /**\n * Records the editor's uncommitted value without closing the editor. The\n * cell commits it on Tab and on focus loss, `grid.commitEdit()` commits it\n * too.\n */\n setDraft(value: unknown): void;\n}\n\n/**\n * Built-in column-type renderer contract. A renderer can supply either a\n * display template, an editor template, or both. Cells fall back to the\n * column's `cellTemplate` / `editorTemplate` / built-in primitive editor if\n * the renderer is absent.\n */\nexport interface ColumnTypeRenderer<T extends object> {\n /**\n * Renders the display (read-only) representation of the cell.\n *\n * @remarks\n * Called when the cell is not in edit mode and the column has no\n * `cellTemplate`. Return any lit-renderable value.\n */\n display?(ctx: ColumnTypeCellContext<T>): TemplateResult | unknown;\n\n /**\n * Renders the inline editor while the cell is in edit mode.\n *\n * @remarks\n * Called when the cell is in edit mode and the column has no\n * `editorTemplate`. The returned template SHOULD include `data-apex-editor`\n * on its focusable element so the cell auto-focuses it. The editor is\n * responsible for calling `ctx.commit(value)` / `ctx.cancel()`.\n */\n editor?(ctx: ColumnTypeEditorContext<T>): TemplateResult | unknown;\n}\n\ninterface NormalizedSelectOption {\n value: unknown;\n label: string;\n}\n\n/**\n * Normalizes a column's `options` configuration into a uniform\n * `{ value, label }[]` list. Accepts both bare-value entries and explicit\n * `{ value, label }` pairs.\n */\nexport function getSelectOptions(column: { options?: SelectOption[] }): NormalizedSelectOption[] {\n const raw = column.options ?? [];\n return raw.map((entry) => {\n if (entry !== null && typeof entry === 'object' && 'value' in entry) {\n const opt = entry as { value: unknown; label?: string };\n return { value: opt.value, label: opt.label ?? String(opt.value) };\n }\n return { value: entry, label: String(entry) };\n });\n}\n\nconst selectType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const opts = getSelectOptions(ctx.column as { options?: SelectOption[] });\n const match = opts.find((o) => o.value === ctx.value);\n const label = match?.label ?? (ctx.value == null ? '' : String(ctx.value));\n // Closed-state display is intentionally plain text — the cell reads as\n // a normal value cell until the user double-clicks to edit. The\n // dropdown affordance appears only in edit mode (the listbox popover).\n return html`<span part=\"select-label\">${label}</span>`;\n },\n\n editor(ctx) {\n const opts = getSelectOptions(ctx.column as { options?: SelectOption[] });\n const current = ctx.value;\n const match = opts.find((o) => o.value === current);\n const label = match?.label ?? (current == null ? '' : String(current));\n const selectedIdx = Math.max(\n 0,\n opts.findIndex((o) => o.value === current)\n );\n\n // The popover is rendered as a `position: absolute` child of the cell\n // (the cell host is `position: relative`). That positions it relative\n // to the cell regardless of how the row is laid out — important\n // because the virtualizer applies `transform: translate` to each row,\n // which would re-anchor a `position: fixed` descendant onto the row.\n // The cell-level SCSS lifts `overflow: hidden` for select-type editing\n // cells so the popover can extend below the cell's box.\n const mountPopover = (el: Element | undefined) => {\n if (!el) return;\n const popover = el as HTMLElement;\n if (popover.dataset.apexFocused) return;\n popover.dataset.apexFocused = '1';\n const items = Array.from(popover.querySelectorAll<HTMLElement>('[part~=\"select-option\"]'));\n items[selectedIdx]?.focus();\n };\n\n const handleKeydown = (event: KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const list = target.closest('[part~=\"select-popover\"]') as HTMLElement | null;\n if (!list) return;\n const items = Array.from(list.querySelectorAll<HTMLElement>('[part~=\"select-option\"]'));\n const idx = items.indexOf(target);\n if (idx < 0) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n event.stopPropagation();\n items[Math.min(idx + 1, items.length - 1)]?.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n event.stopPropagation();\n items[Math.max(idx - 1, 0)]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n event.stopPropagation();\n items[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n event.stopPropagation();\n items[items.length - 1]?.focus();\n } else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n ctx.commit(opts[idx].value);\n }\n // Escape / Tab fall through to the cell-level handler which cancels /\n // exits — we don't consume them here so the standard exit flow applies.\n };\n\n return html`<span part=\"select-label\">${label}</span>\n <div\n part=\"select-popover\"\n role=\"listbox\"\n @keydown=${handleKeydown}\n ${ref(mountPopover)}\n >\n ${opts.map(\n (o, i) => html`<div\n part=${o.value === current ? 'select-option selected' : 'select-option'}\n role=\"option\"\n aria-selected=${o.value === current ? 'true' : 'false'}\n tabindex=${i === selectedIdx ? '0' : '-1'}\n data-apex-editor=${i === selectedIdx ? '' : nothing}\n @click=${() => ctx.commit(o.value)}\n >\n ${o.label}\n </div>`\n )}\n </div>`;\n },\n};\n\n/**\n * Parses a stored cell value into a `Date`, or `null` when the value can't be\n * resolved to a real date.\n *\n * @remarks\n * Accepts `Date` instances, ISO/parseable strings, and millisecond\n * timestamps. `YYYY-MM-DD` strings are interpreted as **floating dates**\n * (local midnight) rather than UTC midnight, so they render on the same\n * calendar day in every timezone.\n */\nexport function parseDate(value: unknown): Date | null {\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? null : value;\n }\n if (typeof value === 'number') {\n const d = new Date(value);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n if (typeof value === 'string') {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (match) {\n const [, y, m, d] = match;\n const date = new Date(Number(y), Number(m) - 1, Number(d));\n return Number.isNaN(date.getTime()) ? null : date;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n return null;\n}\n\nfunction toDateInputValue(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\nconst dateFormatters = new Map<string, Intl.DateTimeFormat>();\nconst currencyFormatters = new Map<string, Intl.NumberFormat>();\n\n/**\n * The cached `Intl.DateTimeFormat` for a date column's `format` style, shared\n * by the date cell and CSV export. Building a formatter costs about fifty\n * times as much as using one, so cells and export rows reuse it. An unknown\n * style falls back to `'medium'` instead of throwing on every cell.\n */\nexport function dateFormatter(style = 'medium'): Intl.DateTimeFormat {\n let formatter = dateFormatters.get(style);\n if (!formatter) {\n try {\n formatter = new Intl.DateTimeFormat(undefined, {\n dateStyle: style as Intl.DateTimeFormatOptions['dateStyle'],\n });\n } catch {\n formatter = dateFormatter();\n }\n dateFormatters.set(style, formatter);\n }\n return formatter;\n}\n\n/**\n * The cached currency formatter for a column. A malformed `locale` falls back\n * to the runtime locale and a malformed `currency` to USD, keeping whichever\n * option is valid, so a bad option shows a default format instead of\n * throwing on every cell.\n */\nfunction currencyFormatter(locale?: string, currency = 'USD'): Intl.NumberFormat {\n const key = `${locale}|${currency}`;\n let formatter = currencyFormatters.get(key);\n if (!formatter) {\n try {\n formatter = new Intl.NumberFormat(locale, { style: 'currency', currency });\n } catch {\n let localeOk = true;\n try {\n Intl.getCanonicalLocales(locale);\n } catch {\n localeOk = false;\n }\n // Only the currency is bad: keep the column's locale with USD.\n formatter =\n localeOk && currency !== 'USD'\n ? currencyFormatter(locale)\n : currencyFormatter(undefined, currency);\n }\n currencyFormatters.set(key, formatter);\n }\n return formatter;\n}\n\n/**\n * Returns a `next` value cast to the same shape as `original` (Date / number\n * timestamp / ISO string). Empty inputs commit `null` regardless of the\n * source shape, which is the simplest \"clear\" semantics.\n */\nexport function commitDateInSameShape(original: unknown, next: Date | null): unknown {\n if (next === null) return null;\n if (original instanceof Date) return next;\n if (typeof original === 'number') return next.getTime();\n return toDateInputValue(next);\n}\n\n/**\n * Date inputs the user has typed into. Chromium fires `change` on every\n * segment keystroke of `<input type=\"date\">`, so once the keyboard is used a\n * change only stages the draft; a change without typing (a pick from the\n * calendar popup) still commits at once. Keyed by the element so the state\n * survives re-renders of the editing cell.\n */\nconst typedDateInputs = new WeakSet<EventTarget>();\n\nconst dateType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const date = parseDate(ctx.value);\n return date ? dateFormatter((ctx.column as { format?: string }).format).format(date) : '';\n },\n\n editor(ctx) {\n const initial = parseDate(ctx.value);\n const initialInput = initial ? toDateInputValue(initial) : '';\n // The record value sets the shape: ctx.value is the draft when the editor\n // resumes an edit in progress, and a cleared draft (null) has no shape.\n const { key } = ctx.column as { key: string };\n const shape = (ctx.row.data as Record<string, unknown>)[key] ?? ctx.value;\n\n const read = (input: HTMLInputElement) => {\n const raw = input.value;\n return commitDateInSameShape(shape, raw ? parseDate(raw) : null);\n };\n const handleChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n // A half-typed date reads as '' (badInput); keep the last full draft\n // rather than staging a clear.\n if (input.validity.badInput) return;\n if (typedDateInputs.has(input)) {\n ctx.setDraft(read(input));\n } else {\n ctx.commit(read(input));\n }\n };\n // Escape / Tab / focus-out are handled at the cell level (Tab and focus-out\n // commit the draft); Enter commits the typed value here. Enter on a\n // half-typed date (badInput, which reads as '') keeps the editor open\n // rather than committing a clear.\n const handleKeydown = (event: KeyboardEvent) => {\n const input = event.target as HTMLInputElement;\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n if (!input.validity.badInput) ctx.commit(read(input));\n return;\n }\n if (event.key !== 'Tab' && event.key !== 'Escape') typedDateInputs.add(input);\n };\n return html`<input\n type=\"date\"\n part=\"editor\"\n data-apex-editor\n .value=${initialInput}\n @change=${handleChange}\n @keydown=${handleKeydown}\n />`;\n },\n};\n\nconst ratingType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const max = getRatingMax(ctx.column as { max?: number });\n const value = clampRating(ctx.value, max);\n const stars = Array.from({ length: max }, (_, i) => i < value);\n return html`<span part=\"rating\" role=\"img\" aria-label=\"${value} of ${max}\">\n ${stars.map(\n (filled) =>\n html`<span part=${filled ? 'rating-star filled' : 'rating-star'} aria-hidden=\"true\">\n ${renderIcon('star')}\n </span>`\n )}\n </span>`;\n },\n\n editor(ctx) {\n const max = getRatingMax(ctx.column as { max?: number });\n const current = clampRating(ctx.value, max);\n const focusRank = Math.max(current, 1);\n\n const commitTo = (next: number) => ctx.commit(clampRating(next, max));\n\n // Escape / Tab / focus-out are handled at the cell level — no per-editor\n // handlers needed here. Clicking a star is the primary commit action;\n // clicking the currently-rated star clears the rating back to 0, which\n // is the only way to get below 1 once any star is set.\n const stars = Array.from({ length: max }, (_, i) => i + 1);\n return html`<span\n part=\"rating-editor\"\n role=\"radiogroup\"\n aria-label=${ctx.parent.state?.localize('editor.rating', undefined, 'Rating') ?? 'Rating'}\n >\n ${stars.map(\n (rank) => html`<button\n type=\"button\"\n part=${rank <= current ? 'rating-star filled selected' : 'rating-star'}\n role=\"radio\"\n aria-checked=${rank === current}\n aria-label=${`${rank} of ${max}`}\n data-rating-value=${rank}\n data-apex-editor=${rank === focusRank ? '' : nothing}\n @click=${() => commitTo(rank === current ? 0 : rank)}\n >\n ${renderIcon('star')}\n </button>`\n )}\n </span>`;\n },\n};\n\nconst booleanType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const truthy = ctx.value === true;\n const editable = typeof ctx.commit === 'function';\n // For editable boolean cells the display IS the interactive control —\n // a single click toggles and commits via `ctx.commit`, no edit mode\n // dance and no visual reflow. For non-editable cells the checkbox\n // reads as a state indicator (tabindex=-1, aria-readonly, pointer-\n // events disabled via SCSS).\n return html`<input\n type=\"checkbox\"\n part=${truthy ? 'boolean-mark checked' : 'boolean-mark'}\n .checked=${truthy}\n tabindex=${editable ? '0' : '-1'}\n aria-readonly=${editable ? 'false' : 'true'}\n aria-label=${truthy ? 'true' : 'false'}\n @click=${(event: Event) => {\n // Keep the click inside the cell — we don't want it to bubble into\n // the grid body-click handler twice or trigger edit-mode logic.\n event.stopPropagation();\n }}\n @change=${\n editable\n ? async (event: Event) => {\n const target = event.target as HTMLInputElement;\n // A rejected commit (cancelled cellValueChanging, failed\n // validator) leaves the data alone, and Lit sees no binding\n // change to re-apply, so put the checkbox back by hand.\n if (!(await ctx.commit?.(target.checked))) target.checked = truthy;\n }\n : undefined\n }\n />`;\n },\n // No `editor` — boolean cells never enter edit mode (the display widget\n // commits directly). Programmatic `editCell` on a boolean column is a\n // no-op as far as the user can see.\n};\n\nconst imageType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const value = ctx.value;\n if (value == null || value === '') return html``;\n const shape = (ctx.column as { shape?: 'square' | 'circle' }).shape ?? 'square';\n const colAny = ctx.column as { alt?: string; key?: unknown };\n const alt = colAny.alt ?? String(colAny.key ?? '');\n const src = String(value);\n // Keyed by the picture: a cell re-bound to another record (a recycled\n // row, a pinned band shifting up) gets a fresh `<img>` rather than a new\n // `src` on the old one, which some engines keep painting with the\n // previous record's picture until the new one has loaded.\n return keyed(\n src,\n html`<img\n part=${shape === 'circle' ? 'image circle' : 'image'}\n src=${src}\n alt=${alt}\n loading=\"lazy\"\n />`\n );\n },\n // Editing an image URL is just text editing — fall through to the default\n // text editor for `editable: true` image columns.\n};\n\n// ── Premium presentation renderers ─────────────────────────────────────────\n// currency / avatar / badge / progress / sparkline / status. These are display\n// presentations over primitive values; for sorting / filtering they behave as\n// their underlying value type. Styling lives in `styles/body-cell/cell-renderers.scss`.\n\nfunction toFiniteNumber(value: unknown): number | null {\n const n = typeof value === 'number' ? value : Number(value);\n return Number.isFinite(n) ? n : null;\n}\n\nfunction getPositiveMax(column: { max?: number }, fallback: number): number {\n const m = typeof column.max === 'number' ? column.max : fallback;\n return m > 0 ? m : fallback;\n}\n\n/** Stable 0–359 hue derived from a string, for per-row avatar tinting. */\nfunction hashHue(value: string): number {\n let hash = 0;\n for (let i = 0; i < value.length; i++) {\n hash = (hash * 31 + value.charCodeAt(i)) % 360;\n }\n return hash;\n}\n\n/** Heuristic fallback mapping a free-text status to a known state. */\nfunction inferStatus(value: unknown): StatusVariant {\n const s = String(value ?? '').toLowerCase();\n if (/churn|cancel|expired|inactive|lost|risk|fail|off|overdue/.test(s)) return 'churn';\n if (/trial|trialing|pending|new|invited|watch|paused/.test(s)) return 'trial';\n return 'active';\n}\n\nconst currencyType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const col = ctx.column as { currency?: string; locale?: string };\n const n = toFiniteNumber(ctx.value);\n if (n === null) return html``;\n return html`${currencyFormatter(col.locale, col.currency).format(n)}`;\n },\n // No `editor`: currency cells edit with the cell's built-in number editor.\n};\n\nconst avatarType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const label = ctx.value == null ? '' : String(ctx.value);\n const initial = label.trim().charAt(0).toUpperCase();\n if (!initial) return html``;\n return html`<span part=\"avatar\" role=\"img\" aria-label=${label} style=\"--ag-avatar-hue: ${hashHue(label)}\"\n >${initial}</span\n >`;\n },\n};\n\nconst badgeType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const value = ctx.value;\n if (value == null || value === '') return html``;\n const col = ctx.column as {\n badgeVariant?: BadgeVariant | ((value: unknown) => BadgeVariant);\n };\n const variant =\n typeof col.badgeVariant === 'function'\n ? col.badgeVariant(value)\n : (col.badgeVariant ?? 'neutral');\n return html`<span part=\"pill pill--${variant}\">${String(value)}</span>`;\n },\n};\n\nconst progressType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const n = toFiniteNumber(ctx.value);\n if (n === null) return html``;\n const max = getPositiveMax(ctx.column as { max?: number }, 100);\n const pct = Math.max(0, Math.min(100, (n / max) * 100));\n const tier = pct >= 80 ? 'good' : pct >= 65 ? 'watch' : 'risk';\n return html`<span part=\"progress\">\n <span part=\"progress-track\">\n <span part=\"progress-fill progress-fill--${tier}\" style=\"width: ${pct}%\"></span>\n </span>\n <span part=\"progress-label\">${Math.round(pct)}</span>\n </span>`;\n },\n};\n\nconst sparklineType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const series = Array.isArray(ctx.value)\n ? (ctx.value.filter((v) => typeof v === 'number' && Number.isFinite(v)) as number[])\n : [];\n if (series.length < 2) return html``;\n\n const width = 64;\n const height = 22;\n const pad = 2;\n const min = Math.min(...series);\n const max = Math.max(...series);\n const range = max - min || 1;\n const stepX = width / (series.length - 1);\n const points = series.map((value, i) => {\n const x = i * stepX;\n const y = pad + (height - 2 * pad) * (1 - (value - min) / range);\n return `${x.toFixed(1)} ${y.toFixed(1)}`;\n });\n const line = `M${points.join(' L')}`;\n const area = `${line} L${width} ${height} L0 ${height} Z`;\n\n const first = series[0];\n const last = series[series.length - 1];\n const trend = last > first ? 'up' : last < first ? 'down' : 'flat';\n // A percent change from zero is undefined, so no label then. toFixed\n // rounds a half away from zero, so a rise and a fall of the same size\n // get the same label; `|| 0` turns the '-0' of a tiny decline into 0.\n const delta = +(((last - first) / Math.abs(first)) * 100).toFixed(0) || 0;\n const showDelta = first !== 0 && (ctx.column as { showDelta?: boolean }).showDelta !== false;\n\n return html`<span part=\"spark-cell\">\n <svg\n part=\"sparkline sparkline--${trend}\"\n viewBox=\"0 0 ${width} ${height}\"\n width=${width}\n height=${height}\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n >\n ${svg`<path part=\"spark-area\" d=${area} /><path part=\"spark-line\" d=${line} />`}\n </svg>\n ${\n showDelta\n ? html`<span part=\"spark-delta spark-delta--${trend}\"\n >${delta > 0 ? '+' : ''}${delta}%</span\n >`\n : nothing\n }\n </span>`;\n },\n};\n\nconst statusType: ColumnTypeRenderer<object> = {\n display(ctx) {\n const value = ctx.value;\n if (value == null || value === '') return html``;\n const col = ctx.column as {\n statusVariant?: StatusVariant | ((value: unknown) => StatusVariant);\n };\n const variant =\n typeof col.statusVariant === 'function'\n ? col.statusVariant(value)\n : (col.statusVariant ?? inferStatus(value));\n return html`<span part=\"status status--${variant}\">\n <span part=\"status-dot\"></span>${String(value)}\n </span>`;\n },\n};\n\nconst BUILTIN_TYPES: Record<string, ColumnTypeRenderer<object>> = {\n select: selectType,\n rating: ratingType,\n date: dateType,\n boolean: booleanType,\n image: imageType,\n currency: currencyType,\n avatar: avatarType,\n badge: badgeType,\n progress: progressType,\n sparkline: sparklineType,\n status: statusType,\n};\n\n/**\n * Returns the built-in renderer for a column `type`, or `undefined` when the\n * type has no built-in display/editor (the cell falls back to plain text /\n * the primitive editor in that case).\n */\nexport function getColumnTypeRenderer<T extends object>(\n type?: string\n): ColumnTypeRenderer<T> | undefined {\n return type ? (BUILTIN_TYPES[type] as unknown as ColumnTypeRenderer<T> | undefined) : undefined;\n}\n"]}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * A design-system add-on (`apex-grid/ignite-ui`): the rules it adds to the
3
+ * grid's document and to each grid's shadow root.
4
+ *
5
+ * The grid ships no design-system code of its own. An add-on registers once
6
+ * on import; from then on every grid adopts its rules as it connects, and the
7
+ * grids already on the page get them right away.
8
+ */
9
+ export interface DesignSystemStyles {
10
+ /** The design system's id, such as `'igniteui'`. */
11
+ readonly name: string;
12
+ /** Rules for the grid's document, adopted after the `--ag-*` root defaults. */
13
+ readonly documentCss: string;
14
+ /** Adds the add-on's rules to one grid's shadow root, after the grid's own. */
15
+ attach(grid: HTMLElement, root: ShadowRoot): void;
16
+ }
17
+ /**
18
+ * Registers a design-system add-on. The first registration wins: a second
19
+ * import of the same add-on (or of another one) changes nothing.
20
+ */
21
+ export declare function registerDesignSystem(styles: DesignSystemStyles): void;
22
+ /** The id of the registered design-system add-on, or null when none is loaded. */
23
+ export declare function designSystemName(): string | null;
24
+ /**
25
+ * Calls `listener` when a design-system add-on registers (an import after the
26
+ * grids connected). Returns the function that stops listening.
27
+ */
28
+ export declare function onDesignSystemRegistered(listener: () => void): () => void;
29
+ /** Called by every grid as it connects, after its own document styles. */
30
+ export declare function connectDesignSystem(grid: HTMLElement): void;
31
+ /** Called by every grid as it disconnects. */
32
+ export declare function disconnectDesignSystem(grid: HTMLElement): void;