apex-grid 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +29 -0
  3. package/components/cell.d.ts +2 -2
  4. package/components/cell.js +30 -2
  5. package/components/cell.js.map +1 -1
  6. package/components/filter-row.js +65 -6
  7. package/components/filter-row.js.map +1 -1
  8. package/components/grid.d.ts +5 -0
  9. package/components/grid.js +34 -2
  10. package/components/grid.js.map +1 -1
  11. package/components/header.js +80 -9
  12. package/components/header.js.map +1 -1
  13. package/controllers/expansion.js +4 -4
  14. package/controllers/expansion.js.map +1 -1
  15. package/controllers/filter.js +11 -0
  16. package/controllers/filter.js.map +1 -1
  17. package/controllers/history.js +11 -4
  18. package/controllers/history.js.map +1 -1
  19. package/controllers/navigation.d.ts +34 -2
  20. package/controllers/navigation.js +92 -3
  21. package/controllers/navigation.js.map +1 -1
  22. package/controllers/pagination.js +1 -1
  23. package/controllers/pagination.js.map +1 -1
  24. package/controllers/row-pin.js +2 -2
  25. package/controllers/row-pin.js.map +1 -1
  26. package/controllers/row-reorder.js +6 -6
  27. package/controllers/row-reorder.js.map +1 -1
  28. package/controllers/selection.js +3 -3
  29. package/controllers/selection.js.map +1 -1
  30. package/controllers/sort.js +4 -2
  31. package/controllers/sort.js.map +1 -1
  32. package/custom-elements.json +223 -7
  33. package/docs/assets/hierarchy.js +1 -1
  34. package/docs/assets/search.js +1 -1
  35. package/docs/functions/localize.html +2 -2
  36. package/docs/hierarchy.html +1 -1
  37. package/docs/index.html +62 -1
  38. package/docs/interfaces/BaseApexCellContext.html +1 -1
  39. package/docs/interfaces/BaseApexEditorContext.html +1 -1
  40. package/docs/interfaces/CSVExportOptions.html +1 -1
  41. package/docs/interfaces/ExportOptions.html +1 -1
  42. package/docs/interfaces/PaginationState.html +1 -1
  43. package/docs/media/package.json +2 -2
  44. package/docs/variables/EN_LOCALE.html +2 -2
  45. package/i18n/en.d.ts +95 -1
  46. package/i18n/en.js +95 -1
  47. package/i18n/en.js.map +1 -1
  48. package/i18n/es.js +95 -1
  49. package/i18n/es.js.map +1 -1
  50. package/internal/column-types.js +1 -1
  51. package/internal/column-types.js.map +1 -1
  52. package/package.json +1 -1
  53. package/styles/body-cell/body-cell.css.js +1 -1
  54. package/styles/body-cell/body-cell.css.js.map +1 -1
@@ -12,7 +12,7 @@ import { DataOperationsController } from '../controllers/data-operation.js';
12
12
  import { GridDOMController } from '../controllers/dom.js';
13
13
  import { gridStateContext, StateController } from '../controllers/state.js';
14
14
  import { localize as resolveLocaleText, } from '../i18n/index.js';
15
- import { DEFAULT_COLUMN_CONFIG, PIPELINE } from '../internal/constants.js';
15
+ import { DEFAULT_COLUMN_CONFIG, PIPELINE, SENTINEL_NODE } from '../internal/constants.js';
16
16
  import { buildCSV, downloadBlob, } from '../internal/export.js';
17
17
  import { EventEmitterBase } from '../internal/mixins/event-emitter.js';
18
18
  import { registerComponent } from '../internal/register.js';
@@ -68,6 +68,7 @@ export class ApexGrid extends EventEmitterBase {
68
68
  this.columnSeparator = true;
69
69
  this.coordinateHints = false;
70
70
  this.columnMenu = true;
71
+ this.#autoAriaLabel = null;
71
72
  this.#stateChangedListeners = 0;
72
73
  this.#lastStateJson = null;
73
74
  }
@@ -271,8 +272,28 @@ export class ApexGrid extends EventEmitterBase {
271
272
  const extras = (this.stateController.selection.showCheckboxColumn ? 1 : 0) +
272
273
  (this.stateController.expansion.showToggleColumn ? 1 : 0);
273
274
  this.setAttribute('aria-colcount', String(visibleColumns + extras));
275
+ const selection = this.stateController.selection;
276
+ if (selection.enabled && selection.mode === 'multiple') {
277
+ this.setAttribute('aria-multiselectable', 'true');
278
+ }
279
+ else {
280
+ this.removeAttribute('aria-multiselectable');
281
+ }
282
+ if (this.scrollContainer) {
283
+ this.scrollContainer.tabIndex = this.stateController.active === SENTINEL_NODE ? 0 : -1;
284
+ }
285
+ const currentLabel = this.getAttribute('aria-label');
286
+ const authorLabeled = this.hasAttribute('aria-labelledby') ||
287
+ (currentLabel !== null && currentLabel !== this.#autoAriaLabel);
288
+ if (!authorLabeled) {
289
+ const label = this.localize('grid.label');
290
+ if (currentLabel !== label)
291
+ this.setAttribute('aria-label', label);
292
+ this.#autoAriaLabel = label;
293
+ }
274
294
  this.#emitStateChangedIfNeeded();
275
295
  }
296
+ #autoAriaLabel;
276
297
  #stateChangedListeners;
277
298
  #lastStateJson;
278
299
  addEventListener(type, listener, options) {
@@ -716,13 +737,23 @@ export class ApexGrid extends EventEmitterBase {
716
737
  column: target.column.key,
717
738
  row: target.row.index,
718
739
  };
740
+ if (!target.editing)
741
+ target.focus({ preventScroll: true });
719
742
  }
720
743
  }
721
744
  bodyKeydownHandler(event) {
722
- if (this.scrollContainer.isSameNode(event.target)) {
745
+ const origin = event.composedPath()[0];
746
+ const fromBody = this.scrollContainer.isSameNode(event.target);
747
+ const fromCell = origin instanceof ApexGridCell && !origin.editing;
748
+ if (fromBody || fromCell) {
723
749
  this.stateController.navigation.navigate(event);
724
750
  }
725
751
  }
752
+ bodyFocusHandler(event) {
753
+ if (this.scrollContainer.isSameNode(event.target)) {
754
+ this.stateController.navigation.focusActiveCell();
755
+ }
756
+ }
726
757
  bodyPointerHandler(event) {
727
758
  if (this.stateController.modules.size === 0)
728
759
  return;
@@ -772,6 +803,7 @@ export class ApexGrid extends EventEmitterBase {
772
803
  .renderItem=${this.DOM.rowRenderer}
773
804
  @click=${this.bodyClickHandler}
774
805
  @keydown=${this.bodyKeydownHandler}
806
+ @focusin=${this.bodyFocusHandler}
775
807
  @pointerdown=${this.bodyPointerHandler}
776
808
  @pointermove=${this.bodyPointerHandler}
777
809
  @pointerup=${this.bodyPointerHandler}