@navikt/ds-react 8.4.0 → 8.5.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 (89) hide show
  1. package/cjs/accordion/Accordion.d.ts +10 -0
  2. package/cjs/accordion/Accordion.js +2 -2
  3. package/cjs/accordion/Accordion.js.map +1 -1
  4. package/cjs/data/table/helpers/table-cell.d.ts +2 -2
  5. package/cjs/data/table/helpers/table-cell.js +2 -5
  6. package/cjs/data/table/helpers/table-cell.js.map +1 -1
  7. package/cjs/data/table/helpers/table-focus.d.ts +26 -2
  8. package/cjs/data/table/helpers/table-focus.js +60 -9
  9. package/cjs/data/table/helpers/table-focus.js.map +1 -1
  10. package/cjs/data/table/helpers/table-grid-nav.d.ts +45 -9
  11. package/cjs/data/table/helpers/table-grid-nav.js +108 -24
  12. package/cjs/data/table/helpers/table-grid-nav.js.map +1 -1
  13. package/cjs/data/table/helpers/table-keyboard.d.ts +24 -3
  14. package/cjs/data/table/helpers/table-keyboard.js +30 -5
  15. package/cjs/data/table/helpers/table-keyboard.js.map +1 -1
  16. package/cjs/data/table/hooks/useGridCache.d.ts +17 -0
  17. package/cjs/data/table/hooks/useGridCache.js +65 -0
  18. package/cjs/data/table/hooks/useGridCache.js.map +1 -0
  19. package/cjs/data/table/root/DataTableRoot.d.ts +1 -1
  20. package/cjs/data/table/root/DataTableRoot.js +2 -2
  21. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  22. package/cjs/data/table/root/useTableKeyboardNav.d.ts +9 -3
  23. package/cjs/data/table/root/useTableKeyboardNav.js +53 -95
  24. package/cjs/data/table/root/useTableKeyboardNav.js.map +1 -1
  25. package/cjs/data/table/th/DataTableTh.d.ts +1 -1
  26. package/cjs/data/table/th/DataTableTh.js +3 -1
  27. package/cjs/data/table/th/DataTableTh.js.map +1 -1
  28. package/cjs/data/table/tr/DataTableTr.d.ts +6 -2
  29. package/cjs/data/table/tr/DataTableTr.js +4 -2
  30. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  31. package/cjs/link-card/LinkCard.d.ts +13 -0
  32. package/cjs/link-card/LinkCard.js +2 -2
  33. package/cjs/link-card/LinkCard.js.map +1 -1
  34. package/cjs/process/Process.d.ts +1 -1
  35. package/cjs/utils/i18n/locales/nb.d.ts +154 -75
  36. package/cjs/utils/i18n/locales/nb.js +154 -75
  37. package/cjs/utils/i18n/locales/nb.js.map +1 -1
  38. package/esm/accordion/Accordion.d.ts +10 -0
  39. package/esm/accordion/Accordion.js +2 -2
  40. package/esm/accordion/Accordion.js.map +1 -1
  41. package/esm/data/table/helpers/table-cell.d.ts +2 -2
  42. package/esm/data/table/helpers/table-cell.js +2 -5
  43. package/esm/data/table/helpers/table-cell.js.map +1 -1
  44. package/esm/data/table/helpers/table-focus.d.ts +26 -2
  45. package/esm/data/table/helpers/table-focus.js +55 -9
  46. package/esm/data/table/helpers/table-focus.js.map +1 -1
  47. package/esm/data/table/helpers/table-grid-nav.d.ts +45 -9
  48. package/esm/data/table/helpers/table-grid-nav.js +102 -23
  49. package/esm/data/table/helpers/table-grid-nav.js.map +1 -1
  50. package/esm/data/table/helpers/table-keyboard.d.ts +24 -3
  51. package/esm/data/table/helpers/table-keyboard.js +29 -4
  52. package/esm/data/table/helpers/table-keyboard.js.map +1 -1
  53. package/esm/data/table/hooks/useGridCache.d.ts +17 -0
  54. package/esm/data/table/hooks/useGridCache.js +63 -0
  55. package/esm/data/table/hooks/useGridCache.js.map +1 -0
  56. package/esm/data/table/root/DataTableRoot.d.ts +1 -1
  57. package/esm/data/table/root/DataTableRoot.js +2 -2
  58. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  59. package/esm/data/table/root/useTableKeyboardNav.d.ts +9 -3
  60. package/esm/data/table/root/useTableKeyboardNav.js +58 -100
  61. package/esm/data/table/root/useTableKeyboardNav.js.map +1 -1
  62. package/esm/data/table/th/DataTableTh.d.ts +1 -1
  63. package/esm/data/table/th/DataTableTh.js +3 -1
  64. package/esm/data/table/th/DataTableTh.js.map +1 -1
  65. package/esm/data/table/tr/DataTableTr.d.ts +6 -2
  66. package/esm/data/table/tr/DataTableTr.js +4 -2
  67. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  68. package/esm/link-card/LinkCard.d.ts +13 -0
  69. package/esm/link-card/LinkCard.js +2 -2
  70. package/esm/link-card/LinkCard.js.map +1 -1
  71. package/esm/process/Process.d.ts +1 -1
  72. package/esm/utils/i18n/locales/nb.d.ts +154 -75
  73. package/esm/utils/i18n/locales/nb.js +154 -75
  74. package/esm/utils/i18n/locales/nb.js.map +1 -1
  75. package/package.json +3 -3
  76. package/src/accordion/Accordion.tsx +19 -2
  77. package/src/data/table/helpers/table-cell.ts +2 -7
  78. package/src/data/table/helpers/table-focus.ts +70 -9
  79. package/src/data/table/helpers/table-grid-nav.ts +146 -31
  80. package/src/data/table/helpers/table-keyboard.test.ts +27 -27
  81. package/src/data/table/helpers/table-keyboard.ts +43 -4
  82. package/src/data/table/hooks/useGridCache.ts +73 -0
  83. package/src/data/table/root/DataTableRoot.tsx +2 -3
  84. package/src/data/table/root/useTableKeyboardNav.ts +95 -125
  85. package/src/data/table/th/DataTableTh.tsx +7 -3
  86. package/src/data/table/tr/DataTableTr.tsx +7 -3
  87. package/src/link-card/LinkCard.tsx +15 -1
  88. package/src/process/Process.tsx +1 -1
  89. package/src/utils/i18n/locales/nb.ts +83 -4
@@ -48,6 +48,16 @@ interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
48
48
  * @see [📝 Documentation](https://aksel.nav.no/grunnleggende/styling/farger-tokens)
49
49
  */
50
50
  "data-color"?: Exclude<AkselColor, AkselStatusColorRole>;
51
+ /**
52
+ * Changes the HTML element used for the root element.
53
+ *
54
+ * **When using `section`, provide either `aria-label` or `aria-labelledby` for better accessibility.**
55
+ * `axe-core` might warn about unique landmarks if you have multiple Accordions on page with the same label.
56
+ * In those cases consider updating to unique `aria-label` or `aria-labelledby` props.
57
+ * @see [📝 Landmarks unique](https://dequeuniversity.com/rules/axe/4.6/landmark-unique)
58
+ * @default "div"
59
+ */
60
+ as?: "div" | "section";
51
61
  }
52
62
  /**
53
63
  * A component that displays collapsible content sections.
@@ -81,7 +81,7 @@ exports.AccordionItem = AccordionItem_1.default;
81
81
  * ```
82
82
  */
83
83
  exports.Accordion = (0, react_1.forwardRef)((_a, ref) => {
84
- var { className, variant = "default", size = "medium", indent = true } = _a, rest = __rest(_a, ["className", "variant", "size", "indent"]);
84
+ var { className, variant = "default", size = "medium", indent = true, as: Component = "div" } = _a, rest = __rest(_a, ["className", "variant", "size", "indent", "as"]);
85
85
  const localRef = (0, react_1.useRef)(null);
86
86
  const mergedRef = (0, hooks_1.useMergeRefs)(localRef, ref);
87
87
  (0, react_1.useEffect)(() => {
@@ -101,7 +101,7 @@ exports.Accordion = (0, react_1.forwardRef)((_a, ref) => {
101
101
  mounted: true,
102
102
  variant,
103
103
  } },
104
- react_1.default.createElement("div", Object.assign({}, (0, utils_external_1.omit)(rest, ["headingSize"]), { className: (0, helpers_1.cl)("aksel-accordion", className, `aksel-accordion--${size}`, { "aksel-accordion--indent": indent }), ref: mergedRef }))));
104
+ react_1.default.createElement(Component, Object.assign({}, (0, utils_external_1.omit)(rest, ["headingSize"]), { className: (0, helpers_1.cl)("aksel-accordion", className, `aksel-accordion--${size}`, { "aksel-accordion--indent": indent }), ref: mergedRef }))));
105
105
  });
106
106
  exports.Accordion.Header = AccordionHeader_1.default;
107
107
  exports.Accordion.Content = AccordionContent_1.default;
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../src/accordion/Accordion.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA6D;AAG7D,sDAAyC;AACzC,8CAAsC;AACtC,oEAAiE;AACjE,0CAA8C;AAC9C,0EAA6E;AAoIpC,2BApIlC,0BAAgB,CAoIkC;AAnIzD,yDAAsD;AACtD,wEAA0E;AAkIlD,0BAlIjB,yBAAe,CAkIiB;AAjIvC,oEAAoE;AAiI3D,wBAjIF,uBAAa,CAiIE;AA9EtB;;;;;;;;;;;;;;;;;;;GAmBG;AACU,QAAA,SAAS,GAAG,IAAA,kBAAU,EACjC,CACE,EAA2E,EAC3E,GAAG,EACH,EAAE;QAFF,EAAE,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,GAAG,QAAQ,EAAE,MAAM,GAAG,IAAI,OAAW,EAAN,IAAI,cAAzE,0CAA2E,CAAF;IAGzE,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAE9C,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QACD,IACE,MAAA,QAAQ,CAAC,OAAO,CAAC,kBAAkB,0CAAE,SAAS,CAAC,QAAQ,CACrD,iBAAiB,CAClB,EACD,CAAC;YACD,IAAA,+BAAc,EACZ,uHAAuH,EACvH,QAAQ,CAAC,OAAO,CACjB,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAA,+BAAc,EACZ,mFAAmF,EACnF,QAAQ,CAAC,OAAO,CACjB,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,8BAAC,mCAAgB,CAAC,QAAQ,IACxB,KAAK,EAAE;YACL,IAAI;YACJ,OAAO,EAAE,IAAI;YACb,OAAO;SACR;QAED,uDACM,IAAA,qBAAI,EAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,IAC/B,SAAS,EAAE,IAAA,YAAE,EACX,iBAAiB,EACjB,SAAS,EACT,oBAAoB,IAAI,EAAE,EAC1B,EAAE,yBAAyB,EAAE,MAAM,EAAE,CACtC,EACD,GAAG,EAAE,SAAS,IACd,CACwB,CAC7B,CAAC;AACJ,CAAC,CACoB,CAAC;AAExB,iBAAS,CAAC,MAAM,GAAG,yBAAe,CAAC;AACnC,iBAAS,CAAC,OAAO,GAAG,0BAAgB,CAAC;AACrC,iBAAS,CAAC,IAAI,GAAG,uBAAa,CAAC;AAE/B,kBAAe,iBAAS,CAAC"}
1
+ {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../src/accordion/Accordion.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA6D;AAG7D,sDAAyC;AACzC,8CAAsC;AACtC,oEAAiE;AACjE,0CAA8C;AAC9C,0EAA6E;AAqJpC,2BArJlC,0BAAgB,CAqJkC;AApJzD,yDAAsD;AACtD,wEAA0E;AAmJlD,0BAnJjB,yBAAe,CAmJiB;AAlJvC,oEAAoE;AAkJ3D,wBAlJF,uBAAa,CAkJE;AArFtB;;;;;;;;;;;;;;;;;;;GAmBG;AACU,QAAA,SAAS,GAAG,IAAA,kBAAU,EACjC,CACE,EAOC,EACD,GAAG,EACH,EAAE;QATF,EACE,SAAS,EACT,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,QAAQ,EACf,MAAM,GAAG,IAAI,EACb,EAAE,EAAE,SAAS,GAAG,KAAK,OAEtB,EADI,IAAI,cANT,gDAOC,CADQ;IAIT,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAE9C,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QACD,IACE,MAAA,QAAQ,CAAC,OAAO,CAAC,kBAAkB,0CAAE,SAAS,CAAC,QAAQ,CACrD,iBAAiB,CAClB,EACD,CAAC;YACD,IAAA,+BAAc,EACZ,uHAAuH,EACvH,QAAQ,CAAC,OAAO,CACjB,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAA,+BAAc,EACZ,mFAAmF,EACnF,QAAQ,CAAC,OAAO,CACjB,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,8BAAC,mCAAgB,CAAC,QAAQ,IACxB,KAAK,EAAE;YACL,IAAI;YACJ,OAAO,EAAE,IAAI;YACb,OAAO;SACR;QAED,8BAAC,SAAS,oBACJ,IAAA,qBAAI,EAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,IAC/B,SAAS,EAAE,IAAA,YAAE,EACX,iBAAiB,EACjB,SAAS,EACT,oBAAoB,IAAI,EAAE,EAC1B,EAAE,yBAAyB,EAAE,MAAM,EAAE,CACtC,EACD,GAAG,EAAE,SAAS,IACd,CACwB,CAC7B,CAAC;AACJ,CAAC,CACoB,CAAC;AAExB,iBAAS,CAAC,MAAM,GAAG,yBAAe,CAAC;AACnC,iBAAS,CAAC,OAAO,GAAG,0BAAgB,CAAC;AACrC,iBAAS,CAAC,IAAI,GAAG,uBAAa,CAAC;AAE/B,kBAAe,iBAAS,CAAC"}
@@ -1,3 +1,3 @@
1
1
  declare function getFirstCell(tableRef: HTMLTableElement): Element | null;
2
- declare function getActiveCell(tableRef: HTMLTableElement | null, activeCell: Element | null): Element | null;
3
- export { getActiveCell, getFirstCell };
2
+ declare function focusInitialTableTarget(tableRef: HTMLTableElement | null): Element | null;
3
+ export { getFirstCell, focusInitialTableTarget };
@@ -1,18 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getActiveCell = getActiveCell;
4
3
  exports.getFirstCell = getFirstCell;
4
+ exports.focusInitialTableTarget = focusInitialTableTarget;
5
5
  const table_focus_1 = require("./table-focus");
6
6
  function getFirstCell(tableRef) {
7
7
  return tableRef.querySelector("td, th");
8
8
  }
9
- function getActiveCell(tableRef, activeCell) {
9
+ function focusInitialTableTarget(tableRef) {
10
10
  if (!tableRef) {
11
11
  return null;
12
12
  }
13
- if (activeCell) {
14
- return activeCell;
15
- }
16
13
  const firstCell = getFirstCell(tableRef);
17
14
  return firstCell ? (0, table_focus_1.focusCell)(firstCell) : null;
18
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"table-cell.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-cell.ts"],"names":[],"mappings":";;AAsBS,sCAAa;AAAE,oCAAY;AAtBpC,+CAA0C;AAE1C,SAAS,YAAY,CAAC,QAA0B;IAC9C,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CACpB,QAAiC,EACjC,UAA0B;IAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,uBAAS,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"table-cell.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-cell.ts"],"names":[],"mappings":";;AAiBS,oCAAY;AAAE,0DAAuB;AAjB9C,+CAA0C;AAE1C,SAAS,YAAY,CAAC,QAA0B;IAC9C,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAAiC;IAEjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,uBAAS,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Restores the original tabIndex for a cell.
3
+ */
4
+ declare function restoreTabIndex(cell: Element): void;
1
5
  /**
2
6
  * Makes sure only focusable and non-disabled elements are targeted when navigating through the table using keyboard interactions.
3
7
  * Tries to find the most logical focus target inside a cell, by looking for commonly used interactive elements,
@@ -6,9 +10,29 @@
6
10
  * If the assumed focus target is not the cell itself, we check if that element is hidden or disabled, and fall back to the cell if so,
7
11
  * since we want to avoid/can't focus hidden/disabled elements.
8
12
  */
9
- declare function getFocusableTarget(cell: Element): HTMLElement | null;
13
+ declare function findFocusableElementInCell(cell: Element): HTMLElement | null;
14
+ /**
15
+ * Checks if an element is visually hidden (but not SR-only).
16
+ */
17
+ declare function isHiddenElement(el: HTMLElement): boolean;
18
+ /**
19
+ * Checks if an element is disabled (via aria-disabled, fieldset, or native disabled property).
20
+ */
21
+ declare function isDisabledElement(el: HTMLElement): boolean;
22
+ /**
23
+ * Determines the focus target and updates tabIndex if the cell itself should be focused.
24
+ * Returns null if no focusable target found.
25
+ */
26
+ declare function prepareCellFocus(cell: Element): HTMLElement | null;
27
+ /**
28
+ * Applies focus and scroll to an element.
29
+ */
30
+ declare function applyFocusAndScroll(element: HTMLElement): void;
31
+ /**
32
+ * Focuses a cell by finding its focusable target and applying focus with scroll.
33
+ */
10
34
  declare function focusCell(cell: Element): Element | null;
11
35
  declare function focusCellAndUpdateTabIndex(nextCell: Element, previousCell?: Element | null, { shouldFocus }?: {
12
36
  shouldFocus?: boolean;
13
37
  }): Element | null;
14
- export { focusCell, focusCellAndUpdateTabIndex, getFocusableTarget };
38
+ export { applyFocusAndScroll, focusCell, focusCellAndUpdateTabIndex, findFocusableElementInCell, isDisabledElement, isHiddenElement, prepareCellFocus, restoreTabIndex, };
@@ -1,8 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyFocusAndScroll = applyFocusAndScroll;
3
4
  exports.focusCell = focusCell;
4
5
  exports.focusCellAndUpdateTabIndex = focusCellAndUpdateTabIndex;
5
- exports.getFocusableTarget = getFocusableTarget;
6
+ exports.findFocusableElementInCell = findFocusableElementInCell;
7
+ exports.isDisabledElement = isDisabledElement;
8
+ exports.isHiddenElement = isHiddenElement;
9
+ exports.prepareCellFocus = prepareCellFocus;
10
+ exports.restoreTabIndex = restoreTabIndex;
11
+ /**
12
+ * WeakMap to store original tabIndex values for cells.
13
+ * Used to restore tabIndex when navigation moves away from a cell.
14
+ */
15
+ const originalTabIndexMap = new WeakMap();
16
+ /**
17
+ * Stores the original tabIndex of a cell if not already stored, and returns it.
18
+ */
19
+ function syncOriginalTabIndex(cell) {
20
+ if (!originalTabIndexMap.has(cell)) {
21
+ const current = cell.tabIndex;
22
+ originalTabIndexMap.set(cell, current);
23
+ }
24
+ }
25
+ /**
26
+ * Restores the original tabIndex for a cell.
27
+ */
28
+ function restoreTabIndex(cell) {
29
+ const original = originalTabIndexMap.get(cell);
30
+ if (original !== undefined) {
31
+ cell.tabIndex = original;
32
+ }
33
+ }
6
34
  /**
7
35
  * Makes sure only focusable and non-disabled elements are targeted when navigating through the table using keyboard interactions.
8
36
  * Tries to find the most logical focus target inside a cell, by looking for commonly used interactive elements,
@@ -11,7 +39,7 @@ exports.getFocusableTarget = getFocusableTarget;
11
39
  * If the assumed focus target is not the cell itself, we check if that element is hidden or disabled, and fall back to the cell if so,
12
40
  * since we want to avoid/can't focus hidden/disabled elements.
13
41
  */
14
- function getFocusableTarget(cell) {
42
+ function findFocusableElementInCell(cell) {
15
43
  const el = cell;
16
44
  if (!el || isHiddenElement(el)) {
17
45
  return null;
@@ -29,8 +57,7 @@ function getFocusableTarget(cell) {
29
57
  return el;
30
58
  }
31
59
  /**
32
- * TODO:
33
- * - validate this implementation against SR-only elements
60
+ * Checks if an element is visually hidden (but not SR-only).
34
61
  */
35
62
  function isHiddenElement(el) {
36
63
  if (el.hidden) {
@@ -39,6 +66,9 @@ function isHiddenElement(el) {
39
66
  const style = window.getComputedStyle(el);
40
67
  return style.display === "none" || style.visibility === "hidden";
41
68
  }
69
+ /**
70
+ * Checks if an element is disabled (via aria-disabled, fieldset, or native disabled property).
71
+ */
42
72
  function isDisabledElement(el) {
43
73
  if (el.getAttribute("aria-disabled") === "true") {
44
74
  return true;
@@ -54,27 +84,48 @@ function isDisabledElement(el) {
54
84
  }
55
85
  return false;
56
86
  }
57
- function focusCell(cell) {
58
- const focusTarget = getFocusableTarget(cell);
87
+ /**
88
+ * Determines the focus target and updates tabIndex if the cell itself should be focused.
89
+ * Returns null if no focusable target found.
90
+ */
91
+ function prepareCellFocus(cell) {
92
+ const focusTarget = findFocusableElementInCell(cell);
59
93
  if (!focusTarget) {
60
94
  return null;
61
95
  }
62
96
  if (focusTarget === cell) {
63
97
  cell.tabIndex = 0;
64
98
  }
65
- focusTarget.focus({
99
+ return focusTarget;
100
+ }
101
+ /**
102
+ * Applies focus and scroll to an element.
103
+ */
104
+ function applyFocusAndScroll(element) {
105
+ element.focus({
66
106
  preventScroll: true,
67
107
  });
68
- focusTarget.scrollIntoView({
108
+ element.scrollIntoView({
69
109
  behavior: "smooth",
70
110
  block: "nearest",
71
111
  inline: "nearest",
72
112
  });
113
+ }
114
+ /**
115
+ * Focuses a cell by finding its focusable target and applying focus with scroll.
116
+ */
117
+ function focusCell(cell) {
118
+ const focusTarget = prepareCellFocus(cell);
119
+ if (!focusTarget) {
120
+ return null;
121
+ }
122
+ applyFocusAndScroll(focusTarget);
73
123
  return cell;
74
124
  }
75
125
  function focusCellAndUpdateTabIndex(nextCell, previousCell, { shouldFocus = true } = {}) {
76
126
  if (previousCell && previousCell !== nextCell) {
77
- previousCell.tabIndex = -1;
127
+ syncOriginalTabIndex(previousCell);
128
+ restoreTabIndex(previousCell);
78
129
  }
79
130
  if (!shouldFocus) {
80
131
  return nextCell;
@@ -1 +1 @@
1
- {"version":3,"file":"table-focus.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-focus.ts"],"names":[],"mappings":";;AAwGS,8BAAS;AAAE,gEAA0B;AAAE,gDAAkB;AAxGlE;;;;;;;GAOG;AACH,SAAS,kBAAkB,CAAC,IAAa;IACvC,MAAM,EAAE,GAAG,IAA0B,CAAC;IACtC,IAAI,CAAC,EAAE,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,oGAAoG,CACrG,CAAC;IAEF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAgB,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,EAAe;IACtC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC;AACnE,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAe;IACxC,IAAI,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IACE,EAAE,YAAY,iBAAiB;QAC/B,EAAE,YAAY,gBAAgB;QAC9B,EAAE,YAAY,iBAAiB;QAC/B,EAAE,YAAY,mBAAmB,EACjC,CAAC;QACD,OAAO,EAAE,CAAC,QAAQ,CAAC;IACrB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,IAAa;IAC9B,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACxB,IAAoB,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,WAAW,CAAC,KAAK,CAAC;QAChB,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IAEH,WAAW,CAAC,cAAc,CAAC;QACzB,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CACjC,QAAiB,EACjB,YAA6B,EAC7B,EAAE,WAAW,GAAG,IAAI,KAAgC,EAAE;IAEtD,IAAI,YAAY,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC7C,YAA4B,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"table-focus.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-focus.ts"],"names":[],"mappings":";;AA6JE,kDAAmB;AACnB,8BAAS;AACT,gEAA0B;AAC1B,gEAA0B;AAC1B,8CAAiB;AACjB,0CAAe;AACf,4CAAgB;AAChB,0CAAe;AApKjB;;;GAGG;AACH,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAAmB,CAAC;AAE3D;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAI,IAAoB,CAAC,QAAQ,CAAC;QAC/C,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAa;IACpC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAoB,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,0BAA0B,CAAC,IAAa;IAC/C,MAAM,EAAE,GAAG,IAA0B,CAAC;IACtC,IAAI,CAAC,EAAE,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,oGAAoG,CACrG,CAAC;IAEF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAgB,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,EAAe;IACtC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,EAAe;IACxC,IAAI,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IACE,EAAE,YAAY,iBAAiB;QAC/B,EAAE,YAAY,gBAAgB;QAC9B,EAAE,YAAY,iBAAiB;QAC/B,EAAE,YAAY,mBAAmB,EACjC,CAAC;QACD,OAAO,EAAE,CAAC,QAAQ,CAAC;IACrB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAa;IACrC,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACxB,IAAoB,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAoB;IAC/C,OAAO,CAAC,KAAK,CAAC;QACZ,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IAEH,OAAO,CAAC,cAAc,CAAC;QACrB,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,IAAa;IAC9B,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CACjC,QAAiB,EACjB,YAA6B,EAC7B,EAAE,WAAW,GAAG,IAAI,KAAgC,EAAE;IAEtD,IAAI,YAAY,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9C,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACnC,eAAe,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
@@ -1,33 +1,69 @@
1
1
  /**
2
2
  * Builds a utility grid allowing for easier keyboard-navigation between cells on columns and rows
3
3
  */
4
- declare function buildTableGrid(tableRef: HTMLTableElement): {
4
+ declare function buildTableGridMap(tableRef: HTMLTableElement): {
5
5
  grid: (Element | undefined)[][];
6
6
  positions: Map<Element, {
7
7
  x: number;
8
8
  y: number;
9
9
  }>;
10
- maxCols: number;
11
10
  };
12
- type TableGrid = ReturnType<typeof buildTableGrid>;
13
11
  type GridCache = {
14
- grid: TableGrid | null;
12
+ grid: ReturnType<typeof buildTableGridMap> | null;
15
13
  dirty: boolean;
16
14
  };
17
15
  /**
18
- * Makes sure to keep a cached version of the table grid, and only rebuild it when necessary (when "dirty" flag is set)
16
+ * Pure function that calculates the next grid position given a current position and delta.
17
+ * Returns the position if valid, or null if out of bounds.
19
18
  */
20
- declare function ensureTableGrid(tableRef: HTMLTableElement, tableGridCache: GridCache): TableGrid;
19
+ declare function getNextGridPosition(grid: (Element | undefined)[][], currentPos: {
20
+ x: number;
21
+ y: number;
22
+ }, delta: {
23
+ x: number;
24
+ y: number;
25
+ }): {
26
+ x: number;
27
+ y: number;
28
+ } | null;
29
+ /**
30
+ * Checks if a cell is focusable (not the same as current cell and contains focusable elements).
31
+ * Type guard that narrows Element | undefined to Element.
32
+ */
33
+ declare function isCellFocusable(cell: Element | undefined, currentCell: Element): cell is Element;
21
34
  /**
22
35
  * Finds the next cell in the given direction, starting from the current position.
23
36
  * Skips over cells that are not focusable or are the same as the current cell.
24
37
  * Returns null if no next cell is found in the given direction.
25
38
  */
26
- declare function findNextCell(grid: (Element | undefined)[][], currentPos: {
39
+ declare function findNextFocusableCell(grid: (Element | undefined)[][], currentPos: {
27
40
  x: number;
28
41
  y: number;
29
42
  }, delta: {
30
43
  x: number;
31
44
  y: number;
32
- }, currentCell: Element, maxCols: number): Element | null;
33
- export { buildTableGrid, ensureTableGrid, findNextCell, type GridCache };
45
+ }, currentCell: Element): Element | null;
46
+ /**
47
+ * Finds the first focusable cell in the same row as the current position.
48
+ */
49
+ declare function findFirstCellInRow(grid: (Element | undefined)[][], positions: Map<Element, {
50
+ x: number;
51
+ y: number;
52
+ }>, currentCell: Element): Element | null;
53
+ /**
54
+ * Finds the last focusable cell in the same row as the current position.
55
+ */
56
+ declare function findLastCellInRow(grid: (Element | undefined)[][], positions: Map<Element, {
57
+ x: number;
58
+ y: number;
59
+ }>, currentCell: Element): Element | null;
60
+ /**
61
+ * Finds the first focusable cell in the entire table.
62
+ */
63
+ declare function findFirstCell(grid: (Element | undefined)[][], currentCell: Element): Element | null;
64
+ /**
65
+ * Finds the last focusable cell in the entire table.
66
+ */
67
+ declare function findLastCell(grid: (Element | undefined)[][], currentCell: Element): Element | null;
68
+ export { buildTableGridMap, findFirstCell, findFirstCellInRow, findLastCell, findLastCellInRow, findNextFocusableCell, getNextGridPosition, isCellFocusable, };
69
+ export type { GridCache };
@@ -1,17 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildTableGrid = buildTableGrid;
4
- exports.ensureTableGrid = ensureTableGrid;
5
- exports.findNextCell = findNextCell;
3
+ exports.buildTableGridMap = buildTableGridMap;
4
+ exports.findFirstCell = findFirstCell;
5
+ exports.findFirstCellInRow = findFirstCellInRow;
6
+ exports.findLastCell = findLastCell;
7
+ exports.findLastCellInRow = findLastCellInRow;
8
+ exports.findNextFocusableCell = findNextFocusableCell;
9
+ exports.getNextGridPosition = getNextGridPosition;
10
+ exports.isCellFocusable = isCellFocusable;
6
11
  const table_focus_1 = require("./table-focus");
7
12
  /**
8
13
  * Builds a utility grid allowing for easier keyboard-navigation between cells on columns and rows
9
14
  */
10
- function buildTableGrid(tableRef) {
15
+ function buildTableGridMap(tableRef) {
11
16
  const rows = tableRef.rows;
12
17
  const grid = [];
13
18
  const positions = new Map();
14
- let maxCols = 0;
15
19
  /* Walk trough each row in order */
16
20
  for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {
17
21
  const row = rows[rowIndex];
@@ -43,41 +47,121 @@ function buildTableGrid(tableRef) {
43
47
  positions.set(cell, { x: colIndex, y: rowIndex });
44
48
  }
45
49
  colIndex += colSpan;
46
- if (colIndex > maxCols) {
47
- maxCols = colIndex;
48
- }
49
50
  }
50
51
  }
51
- return { grid, positions, maxCols };
52
+ return { grid, positions };
52
53
  }
53
54
  /**
54
- * Makes sure to keep a cached version of the table grid, and only rebuild it when necessary (when "dirty" flag is set)
55
+ * Pure function that calculates the next grid position given a current position and delta.
56
+ * Returns the position if valid, or null if out of bounds.
55
57
  */
56
- function ensureTableGrid(tableRef, tableGridCache) {
57
- if (tableGridCache.dirty || !tableGridCache.grid) {
58
- tableGridCache.grid = buildTableGrid(tableRef);
59
- tableGridCache.dirty = false;
58
+ function getNextGridPosition(grid, currentPos, delta) {
59
+ var _a;
60
+ const x = currentPos.x + delta.x;
61
+ const y = currentPos.y + delta.y;
62
+ if (y < 0 || y >= grid.length) {
63
+ return null;
64
+ }
65
+ const row = (_a = grid[y]) !== null && _a !== void 0 ? _a : [];
66
+ if (x < 0 || x >= row.length) {
67
+ return null;
60
68
  }
61
- return tableGridCache.grid;
69
+ return { x, y };
70
+ }
71
+ /**
72
+ * Checks if a cell is focusable (not the same as current cell and contains focusable elements).
73
+ * Type guard that narrows Element | undefined to Element.
74
+ */
75
+ function isCellFocusable(cell, currentCell) {
76
+ if (!cell || cell === currentCell) {
77
+ return false;
78
+ }
79
+ return !!(0, table_focus_1.findFocusableElementInCell)(cell);
62
80
  }
63
81
  /**
64
82
  * Finds the next cell in the given direction, starting from the current position.
65
83
  * Skips over cells that are not focusable or are the same as the current cell.
66
84
  * Returns null if no next cell is found in the given direction.
67
85
  */
68
- function findNextCell(grid, currentPos, delta, currentCell, maxCols) {
86
+ function findNextFocusableCell(grid, currentPos, delta, currentCell) {
87
+ let position = currentPos;
88
+ while (true) {
89
+ const nextPos = getNextGridPosition(grid, position, delta);
90
+ if (!nextPos) {
91
+ return null;
92
+ }
93
+ const cell = grid[nextPos.y][nextPos.x];
94
+ if (isCellFocusable(cell, currentCell)) {
95
+ return cell;
96
+ }
97
+ position = nextPos;
98
+ }
99
+ }
100
+ /**
101
+ * Finds the first focusable cell in the same row as the current position.
102
+ */
103
+ function findFirstCellInRow(grid, positions, currentCell) {
69
104
  var _a;
70
- let x = currentPos.x + delta.x;
71
- let y = currentPos.y + delta.y;
72
- const maxRows = grid.length;
73
- while (y >= 0 && y < maxRows && x >= 0 && x < maxCols) {
74
- const row = (_a = grid[y]) !== null && _a !== void 0 ? _a : [];
105
+ const currentPos = positions.get(currentCell);
106
+ if (!currentPos) {
107
+ return null;
108
+ }
109
+ const row = (_a = grid[currentPos.y]) !== null && _a !== void 0 ? _a : [];
110
+ for (let x = 0; x < row.length; x += 1) {
111
+ const cell = row[x];
112
+ if (isCellFocusable(cell, currentCell)) {
113
+ return cell;
114
+ }
115
+ }
116
+ return null;
117
+ }
118
+ /**
119
+ * Finds the last focusable cell in the same row as the current position.
120
+ */
121
+ function findLastCellInRow(grid, positions, currentCell) {
122
+ var _a;
123
+ const currentPos = positions.get(currentCell);
124
+ if (!currentPos) {
125
+ return null;
126
+ }
127
+ const row = (_a = grid[currentPos.y]) !== null && _a !== void 0 ? _a : [];
128
+ for (let x = row.length - 1; x >= 0; x -= 1) {
75
129
  const cell = row[x];
76
- if (cell && cell !== currentCell && !!(0, table_focus_1.getFocusableTarget)(cell)) {
130
+ if (isCellFocusable(cell, currentCell)) {
77
131
  return cell;
78
132
  }
79
- x += delta.x;
80
- y += delta.y;
133
+ }
134
+ return null;
135
+ }
136
+ /**
137
+ * Finds the first focusable cell in the entire table.
138
+ */
139
+ function findFirstCell(grid, currentCell) {
140
+ var _a;
141
+ for (let y = 0; y < grid.length; y += 1) {
142
+ const row = (_a = grid[y]) !== null && _a !== void 0 ? _a : [];
143
+ for (let x = 0; x < row.length; x += 1) {
144
+ const cell = row[x];
145
+ if (isCellFocusable(cell, currentCell)) {
146
+ return cell;
147
+ }
148
+ }
149
+ }
150
+ return null;
151
+ }
152
+ /**
153
+ * Finds the last focusable cell in the entire table.
154
+ */
155
+ function findLastCell(grid, currentCell) {
156
+ var _a;
157
+ for (let y = grid.length - 1; y >= 0; y -= 1) {
158
+ const row = (_a = grid[y]) !== null && _a !== void 0 ? _a : [];
159
+ for (let x = row.length - 1; x >= 0; x -= 1) {
160
+ const cell = row[x];
161
+ if (isCellFocusable(cell, currentCell)) {
162
+ return cell;
163
+ }
164
+ }
81
165
  }
82
166
  return null;
83
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"table-grid-nav.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-grid-nav.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-grid-nav.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-grid-nav.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,28 @@ type Delta = {
2
2
  x: number;
3
3
  y: number;
4
4
  };
5
- declare function getDeltaFromKey(key: string): Delta | null;
5
+ type NavigationAction = {
6
+ type: "delta";
7
+ delta: Delta;
8
+ } | {
9
+ type: "home";
10
+ } | {
11
+ type: "end";
12
+ } | {
13
+ type: "tableStart";
14
+ } | {
15
+ type: "tableEnd";
16
+ };
17
+ /**
18
+ * Maps keyboard events to navigation actions.
19
+ * Supports arrow keys, Home/End (row navigation), Ctrl/Cmd+Home/End (table navigation),
20
+ * and PageUp/PageDown (multi-row navigation).
21
+ */
22
+ declare function getNavigationAction(event: KeyboardEvent): NavigationAction | null;
6
23
  /**
24
+ * Determines if keyboard navigation should be blocked based on the current focus context.
25
+ * Allows for custom blocking logic via an optional callback.
26
+ *
7
27
  * Tries to make assumptions of what the user is currently doing inside a table cell
8
28
  * Should block navigation if:
9
29
  * - Input has selection, caret is not at start/end
@@ -11,5 +31,6 @@ declare function getDeltaFromKey(key: string): Delta | null;
11
31
  * - User is navigating inside multiline textarea
12
32
  * - contenteditable attrb is in use
13
33
  */
14
- declare function shouldBlockArrowKeyNavigation(event: KeyboardEvent): boolean;
15
- export { getDeltaFromKey, shouldBlockArrowKeyNavigation };
34
+ declare function shouldBlockNavigation(event: KeyboardEvent, customBlockFn?: (event: KeyboardEvent) => boolean): boolean;
35
+ export { getNavigationAction, shouldBlockNavigation };
36
+ export type { Delta, NavigationAction };
@@ -1,20 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDeltaFromKey = getDeltaFromKey;
4
- exports.shouldBlockArrowKeyNavigation = shouldBlockArrowKeyNavigation;
3
+ exports.getNavigationAction = getNavigationAction;
4
+ exports.shouldBlockNavigation = shouldBlockNavigation;
5
5
  const keyToCoord = {
6
6
  ArrowUp: { x: 0, y: -1 },
7
7
  ArrowDown: { x: 0, y: 1 },
8
8
  ArrowLeft: { x: -1, y: 0 },
9
9
  ArrowRight: { x: 1, y: 0 },
10
10
  };
11
- function getDeltaFromKey(key) {
11
+ /**
12
+ * Maps keyboard events to navigation actions.
13
+ * Supports arrow keys, Home/End (row navigation), Ctrl/Cmd+Home/End (table navigation),
14
+ * and PageUp/PageDown (multi-row navigation).
15
+ */
16
+ function getNavigationAction(event) {
17
+ const key = event.key;
18
+ /* Arrow keys -> directional navigation */
12
19
  if (key in keyToCoord) {
13
- return keyToCoord[key];
20
+ return { type: "delta", delta: keyToCoord[key] };
21
+ }
22
+ // Home/End keys
23
+ if (key === "Home") {
24
+ return event.ctrlKey || event.metaKey
25
+ ? { type: "tableStart" }
26
+ : { type: "home" };
27
+ }
28
+ if (key === "End") {
29
+ return event.ctrlKey || event.metaKey
30
+ ? { type: "tableEnd" }
31
+ : { type: "end" };
14
32
  }
15
33
  return null;
16
34
  }
17
35
  /**
36
+ * Determines if keyboard navigation should be blocked based on the current focus context.
37
+ * Allows for custom blocking logic via an optional callback.
38
+ *
18
39
  * Tries to make assumptions of what the user is currently doing inside a table cell
19
40
  * Should block navigation if:
20
41
  * - Input has selection, caret is not at start/end
@@ -22,7 +43,11 @@ function getDeltaFromKey(key) {
22
43
  * - User is navigating inside multiline textarea
23
44
  * - contenteditable attrb is in use
24
45
  */
25
- function shouldBlockArrowKeyNavigation(event) {
46
+ function shouldBlockNavigation(event, customBlockFn) {
47
+ /* Check custom block function first */
48
+ if (customBlockFn === null || customBlockFn === void 0 ? void 0 : customBlockFn(event)) {
49
+ return true;
50
+ }
26
51
  const key = event.key;
27
52
  if (!(key in keyToCoord)) {
28
53
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"table-keyboard.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-keyboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-keyboard.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-keyboard.ts"],"names":[],"mappings":"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"}