@fluentui/react-tabster 9.26.15 → 9.26.17

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 (118) hide show
  1. package/CHANGELOG.md +25 -2
  2. package/dist/index.d.cts +1583 -0
  3. package/dist/index.d.ts +3 -1
  4. package/lib/focus/createCustomFocusIndicatorStyle.js +1 -1
  5. package/lib/focus/createCustomFocusIndicatorStyle.js.map +1 -1
  6. package/lib/focus/createFocusOutlineStyle.js +4 -4
  7. package/lib/focus/createFocusOutlineStyle.js.map +1 -1
  8. package/lib/focus/focusVisiblePolyfill.js +3 -3
  9. package/lib/focus/focusVisiblePolyfill.js.map +1 -1
  10. package/lib/focus/focusWithinPolyfill.js +2 -2
  11. package/lib/focus/focusWithinPolyfill.js.map +1 -1
  12. package/lib/focus/index.js +4 -4
  13. package/lib/focus/index.js.map +1 -1
  14. package/lib/hooks/index.js +19 -19
  15. package/lib/hooks/index.js.map +1 -1
  16. package/lib/hooks/useActivateModal.js +4 -4
  17. package/lib/hooks/useActivateModal.js.map +1 -1
  18. package/lib/hooks/useArrowNavigationGroup.js +3 -3
  19. package/lib/hooks/useArrowNavigationGroup.js.map +1 -1
  20. package/lib/hooks/useFocusFinders.js +3 -3
  21. package/lib/hooks/useFocusFinders.js.map +1 -1
  22. package/lib/hooks/useFocusObserved.js +3 -3
  23. package/lib/hooks/useFocusObserved.js.map +1 -1
  24. package/lib/hooks/useFocusVisible.js +3 -3
  25. package/lib/hooks/useFocusVisible.js.map +1 -1
  26. package/lib/hooks/useFocusWithin.js +3 -3
  27. package/lib/hooks/useFocusWithin.js.map +1 -1
  28. package/lib/hooks/useFocusableGroup.js +3 -3
  29. package/lib/hooks/useFocusableGroup.js.map +1 -1
  30. package/lib/hooks/useFocusedElementChange.js +5 -5
  31. package/lib/hooks/useFocusedElementChange.js.map +1 -1
  32. package/lib/hooks/useIsNavigatingWithKeyboard.js +2 -2
  33. package/lib/hooks/useIsNavigatingWithKeyboard.js.map +1 -1
  34. package/lib/hooks/useKeyboardNavAttribute.js +4 -4
  35. package/lib/hooks/useKeyboardNavAttribute.js.map +1 -1
  36. package/lib/hooks/useKeyborgRef.js +3 -3
  37. package/lib/hooks/useMergeTabsterAttributes.js +40 -56
  38. package/lib/hooks/useMergeTabsterAttributes.js.map +1 -1
  39. package/lib/hooks/useModalAttributes.js +5 -5
  40. package/lib/hooks/useModalAttributes.js.map +1 -1
  41. package/lib/hooks/useObservedElement.js +3 -3
  42. package/lib/hooks/useObservedElement.js.map +1 -1
  43. package/lib/hooks/useOnKeyboardNavigationChange.js +3 -3
  44. package/lib/hooks/useOnKeyboardNavigationChange.js.map +1 -1
  45. package/lib/hooks/useRestoreFocus.js +2 -2
  46. package/lib/hooks/useRestoreFocus.js.map +1 -1
  47. package/lib/hooks/useSetKeyboardNavigation.js +2 -2
  48. package/lib/hooks/useSetKeyboardNavigation.js.map +1 -1
  49. package/lib/hooks/useTabster.js +4 -4
  50. package/lib/hooks/useTabsterAttributes.js +3 -3
  51. package/lib/hooks/useTabsterAttributes.js.map +1 -1
  52. package/lib/hooks/useUncontrolledFocus.js +2 -2
  53. package/lib/hooks/useUncontrolledFocus.js.map +1 -1
  54. package/lib/index.js +6 -6
  55. package/lib/index.js.map +1 -1
  56. package/lib-commonjs/focus/{createCustomFocusIndicatorStyle.js → createCustomFocusIndicatorStyle.cjs} +1 -1
  57. package/lib-commonjs/focus/{createFocusOutlineStyle.js → createFocusOutlineStyle.cjs} +2 -2
  58. package/lib-commonjs/focus/{focusVisiblePolyfill.js → focusVisiblePolyfill.cjs} +1 -1
  59. package/lib-commonjs/focus/{focusWithinPolyfill.js → focusWithinPolyfill.cjs} +1 -1
  60. package/lib-commonjs/focus/{index.js → index.cjs} +4 -4
  61. package/lib-commonjs/hooks/{index.js → index.cjs} +19 -19
  62. package/lib-commonjs/hooks/{useActivateModal.js → useActivateModal.cjs} +1 -1
  63. package/lib-commonjs/hooks/{useArrowNavigationGroup.js → useArrowNavigationGroup.cjs} +2 -2
  64. package/lib-commonjs/hooks/{useFocusFinders.js → useFocusFinders.cjs} +1 -1
  65. package/lib-commonjs/hooks/{useFocusObserved.js → useFocusObserved.cjs} +1 -1
  66. package/lib-commonjs/hooks/{useFocusVisible.js → useFocusVisible.cjs} +1 -1
  67. package/lib-commonjs/hooks/{useFocusWithin.js → useFocusWithin.cjs} +1 -1
  68. package/lib-commonjs/hooks/{useFocusableGroup.js → useFocusableGroup.cjs} +2 -2
  69. package/lib-commonjs/hooks/{useFocusedElementChange.js → useFocusedElementChange.cjs} +1 -1
  70. package/lib-commonjs/hooks/{useIsNavigatingWithKeyboard.js → useIsNavigatingWithKeyboard.cjs} +1 -1
  71. package/lib-commonjs/hooks/{useKeyboardNavAttribute.js → useKeyboardNavAttribute.cjs} +1 -1
  72. package/lib-commonjs/hooks/useMergeTabsterAttributes.cjs +65 -0
  73. package/lib-commonjs/hooks/useMergeTabsterAttributes.cjs.map +1 -0
  74. package/lib-commonjs/hooks/{useModalAttributes.js → useModalAttributes.cjs} +3 -3
  75. package/lib-commonjs/hooks/{useObservedElement.js → useObservedElement.cjs} +2 -2
  76. package/lib-commonjs/hooks/{useOnKeyboardNavigationChange.js → useOnKeyboardNavigationChange.cjs} +1 -1
  77. package/lib-commonjs/hooks/{useRestoreFocus.js → useRestoreFocus.cjs} +1 -1
  78. package/lib-commonjs/hooks/{useSetKeyboardNavigation.js → useSetKeyboardNavigation.cjs} +1 -1
  79. package/lib-commonjs/hooks/{useTabsterAttributes.js → useTabsterAttributes.cjs} +1 -1
  80. package/lib-commonjs/hooks/{useUncontrolledFocus.js → useUncontrolledFocus.cjs} +1 -1
  81. package/lib-commonjs/{index.js → index.cjs} +3 -3
  82. package/package.json +16 -10
  83. package/lib-commonjs/hooks/useMergeTabsterAttributes.js +0 -83
  84. package/lib-commonjs/hooks/useMergeTabsterAttributes.js.map +0 -1
  85. /package/lib-commonjs/focus/{constants.js → constants.cjs} +0 -0
  86. /package/lib-commonjs/focus/{constants.js.map → constants.cjs.map} +0 -0
  87. /package/lib-commonjs/focus/{createCustomFocusIndicatorStyle.js.map → createCustomFocusIndicatorStyle.cjs.map} +0 -0
  88. /package/lib-commonjs/focus/{createFocusOutlineStyle.js.map → createFocusOutlineStyle.cjs.map} +0 -0
  89. /package/lib-commonjs/focus/{focusVisiblePolyfill.js.map → focusVisiblePolyfill.cjs.map} +0 -0
  90. /package/lib-commonjs/focus/{focusWithinPolyfill.js.map → focusWithinPolyfill.cjs.map} +0 -0
  91. /package/lib-commonjs/focus/{index.js.map → index.cjs.map} +0 -0
  92. /package/lib-commonjs/hooks/{index.js.map → index.cjs.map} +0 -0
  93. /package/lib-commonjs/hooks/{useActivateModal.js.map → useActivateModal.cjs.map} +0 -0
  94. /package/lib-commonjs/hooks/{useArrowNavigationGroup.js.map → useArrowNavigationGroup.cjs.map} +0 -0
  95. /package/lib-commonjs/hooks/{useDangerousNeverHidden.js → useDangerousNeverHidden.cjs} +0 -0
  96. /package/lib-commonjs/hooks/{useDangerousNeverHidden.js.map → useDangerousNeverHidden.cjs.map} +0 -0
  97. /package/lib-commonjs/hooks/{useFocusFinders.js.map → useFocusFinders.cjs.map} +0 -0
  98. /package/lib-commonjs/hooks/{useFocusObserved.js.map → useFocusObserved.cjs.map} +0 -0
  99. /package/lib-commonjs/hooks/{useFocusVisible.js.map → useFocusVisible.cjs.map} +0 -0
  100. /package/lib-commonjs/hooks/{useFocusWithin.js.map → useFocusWithin.cjs.map} +0 -0
  101. /package/lib-commonjs/hooks/{useFocusableGroup.js.map → useFocusableGroup.cjs.map} +0 -0
  102. /package/lib-commonjs/hooks/{useFocusedElementChange.js.map → useFocusedElementChange.cjs.map} +0 -0
  103. /package/lib-commonjs/hooks/{useIsNavigatingWithKeyboard.js.map → useIsNavigatingWithKeyboard.cjs.map} +0 -0
  104. /package/lib-commonjs/hooks/{useKeyboardNavAttribute.js.map → useKeyboardNavAttribute.cjs.map} +0 -0
  105. /package/lib-commonjs/hooks/{useKeyborgRef.js → useKeyborgRef.cjs} +0 -0
  106. /package/lib-commonjs/hooks/{useKeyborgRef.js.map → useKeyborgRef.cjs.map} +0 -0
  107. /package/lib-commonjs/hooks/{useModalAttributes.js.map → useModalAttributes.cjs.map} +0 -0
  108. /package/lib-commonjs/hooks/{useObservedElement.js.map → useObservedElement.cjs.map} +0 -0
  109. /package/lib-commonjs/hooks/{useOnKeyboardNavigationChange.js.map → useOnKeyboardNavigationChange.cjs.map} +0 -0
  110. /package/lib-commonjs/hooks/{useRestoreFocus.js.map → useRestoreFocus.cjs.map} +0 -0
  111. /package/lib-commonjs/hooks/{useSetKeyboardNavigation.js.map → useSetKeyboardNavigation.cjs.map} +0 -0
  112. /package/lib-commonjs/hooks/{useTabster.js → useTabster.cjs} +0 -0
  113. /package/lib-commonjs/hooks/{useTabster.js.map → useTabster.cjs.map} +0 -0
  114. /package/lib-commonjs/hooks/{useTabsterAttributes.js.map → useTabsterAttributes.cjs.map} +0 -0
  115. /package/lib-commonjs/hooks/{useUncontrolledFocus.js.map → useUncontrolledFocus.cjs.map} +0 -0
  116. /package/lib-commonjs/{index.js.map → index.cjs.map} +0 -0
  117. /package/lib-commonjs/{tabster-types-6.0.1-do-not-use.js → tabster-types-6.0.1-do-not-use.cjs} +0 -0
  118. /package/lib-commonjs/{tabster-types-6.0.1-do-not-use.js.map → tabster-types-6.0.1-do-not-use.cjs.map} +0 -0
@@ -1,37 +1,56 @@
1
1
  'use client';
2
- import * as React from 'react';
3
- import { TABSTER_ATTRIBUTE_NAME } from 'tabster';
2
+ import * as React from "react";
3
+ import { TABSTER_ATTRIBUTE_NAME } from "tabster";
4
4
  /**
5
5
  * Merges a collection of tabster attributes.
6
6
  *
7
- * ⚠️The attributes passed as arguments to this hook cannot change at runtime.
7
+ * The result is memoized and only recomputed when the contributing attributes
8
+ * actually change, so both the values and the number of attributes may change
9
+ * at runtime.
8
10
  * @internal
9
11
  * @param attributes - collection of tabster attributes from other react-tabster hooks
10
12
  * @returns single merged tabster attribute
11
13
  */ export const useMergedTabsterAttributes_unstable = (...attributes)=>{
12
- 'use no memo';
13
- const stringAttributes = attributes.reduce((acc, curr)=>{
14
- if (curr === null || curr === void 0 ? void 0 : curr[TABSTER_ATTRIBUTE_NAME]) {
15
- acc.push(curr[TABSTER_ATTRIBUTE_NAME]);
14
+ // The collected attributes are reduced to a single primitive `key` so the
15
+ // `React.useMemo` dependency list keeps a constant size, even when the number
16
+ // of contributing attributes changes between renders. The array and the key
17
+ // are built in a single pass.
18
+ const stringAttributes = [];
19
+ let key = '';
20
+ for (const attribute of attributes){
21
+ const value = attribute === null || attribute === void 0 ? void 0 : attribute[TABSTER_ATTRIBUTE_NAME];
22
+ if (value) {
23
+ stringAttributes.push(value);
24
+ key += value + MERGE_KEY_SEPARATOR;
16
25
  }
17
- return acc;
18
- }, []);
19
- if (process.env.NODE_ENV !== 'production') {
20
- // ignoring rules of hooks because this is a condition based on the environment
21
- // it's safe to ignore the rule
22
- // eslint-disable-next-line react-hooks/rules-of-hooks
23
- useWarnIfUnstableAttributes(stringAttributes);
24
26
  }
25
27
  return React.useMemo(()=>({
26
- [TABSTER_ATTRIBUTE_NAME]: stringAttributes.length > 0 ? stringAttributes.reduce(mergeJSONStrings) : undefined
27
- }), // disable exhaustive-deps because we want to memoize the result of the reduction
28
- // this is safe because the collection of attributes is not expected to change at runtime
29
- // eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo
30
- stringAttributes);
28
+ [TABSTER_ATTRIBUTE_NAME]: mergeAttributes(stringAttributes)
29
+ }), // `key` fully captures the contents of `stringAttributes`, which is rebuilt
30
+ // on every render and therefore cannot be a dependency itself.
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ [
33
+ key
34
+ ]);
31
35
  };
32
36
  /**
33
- * Merges two JSON strings into one.
34
- */ const mergeJSONStrings = (a, b)=>JSON.stringify(Object.assign(safelyParseJSON(a), safelyParseJSON(b)));
37
+ * `NUL` separator used to build the memoization key. It is a safe separator
38
+ * because the attribute values originate from `JSON.stringify`, which escapes
39
+ * control characters, so a literal `NUL` can never appear inside one of them.
40
+ */ const MERGE_KEY_SEPARATOR = '\u0000';
41
+ /**
42
+ * Merges a collection of tabster attribute JSON strings into a single one.
43
+ * Later attributes take priority over earlier ones.
44
+ */ const mergeAttributes = (stringAttributes)=>{
45
+ if (stringAttributes.length === 0) {
46
+ return undefined;
47
+ }
48
+ // common case: a single hook contributed an attribute, no parsing required
49
+ if (stringAttributes.length === 1) {
50
+ return stringAttributes[0];
51
+ }
52
+ return JSON.stringify(Object.assign({}, ...stringAttributes.map(safelyParseJSON)));
53
+ };
35
54
  /**
36
55
  * Tries to parse a JSON string and returns an object.
37
56
  * If the JSON string is invalid, an empty object is returned.
@@ -42,38 +61,3 @@ import { TABSTER_ATTRIBUTE_NAME } from 'tabster';
42
61
  return {};
43
62
  }
44
63
  };
45
- /**
46
- * Helper hook that ensures that the attributes passed to the hook are stable.
47
- * This is necessary because the attributes are expected to not change at runtime.
48
- *
49
- * This hook will console.warn if the attributes change at runtime.
50
- */ const useWarnIfUnstableAttributes = (attributes)=>{
51
- 'use no memo';
52
- const initialAttributesRef = React.useRef(attributes);
53
- // eslint-disable-next-line react-hooks/refs
54
- let isStable = initialAttributesRef.current.length === attributes.length;
55
- // eslint-disable-next-line react-hooks/refs
56
- if (initialAttributesRef.current !== attributes && isStable) {
57
- for(let i = 0; i < attributes.length; i++){
58
- // eslint-disable-next-line react-hooks/refs
59
- if (initialAttributesRef.current[i] !== attributes[i]) {
60
- isStable = false;
61
- break;
62
- }
63
- }
64
- }
65
- React.useEffect(()=>{
66
- if (!isStable) {
67
- const error = new Error();
68
- // eslint-disable-next-line no-console
69
- console.warn(/** #__DE-INDENT__ */ `
70
- @fluentui/react-tabster [useMergedTabsterAttributes]:
71
- The attributes passed to the hook changed at runtime.
72
- This might lead to unexpected behavior, please ensure that the attributes are stable.
73
- ${error.stack}
74
- `);
75
- }
76
- }, [
77
- isStable
78
- ]);
79
- };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useMergeTabsterAttributes.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { Types } from 'tabster';\nimport { TABSTER_ATTRIBUTE_NAME } from 'tabster';\n\n/**\n * Merges a collection of tabster attributes.\n *\n * ⚠️The attributes passed as arguments to this hook cannot change at runtime.\n * @internal\n * @param attributes - collection of tabster attributes from other react-tabster hooks\n * @returns single merged tabster attribute\n */\nexport const useMergedTabsterAttributes_unstable = (\n ...attributes: (Partial<Types.TabsterDOMAttribute> | null | undefined)[]\n): Types.TabsterDOMAttribute => {\n 'use no memo';\n\n const stringAttributes = attributes.reduce<string[]>((acc, curr) => {\n if (curr?.[TABSTER_ATTRIBUTE_NAME]) {\n acc.push(curr[TABSTER_ATTRIBUTE_NAME]);\n }\n return acc;\n }, []);\n\n if (process.env.NODE_ENV !== 'production') {\n // ignoring rules of hooks because this is a condition based on the environment\n // it's safe to ignore the rule\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWarnIfUnstableAttributes(stringAttributes);\n }\n\n return React.useMemo(\n () => ({\n [TABSTER_ATTRIBUTE_NAME]: stringAttributes.length > 0 ? stringAttributes.reduce(mergeJSONStrings) : undefined,\n }),\n // disable exhaustive-deps because we want to memoize the result of the reduction\n // this is safe because the collection of attributes is not expected to change at runtime\n // eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo\n stringAttributes,\n );\n};\n\n/**\n * Merges two JSON strings into one.\n */\nconst mergeJSONStrings = (a: string, b: string): string =>\n JSON.stringify(Object.assign(safelyParseJSON(a), safelyParseJSON(b)));\n\n/**\n * Tries to parse a JSON string and returns an object.\n * If the JSON string is invalid, an empty object is returned.\n */\nconst safelyParseJSON = (json: string): object => {\n try {\n return JSON.parse(json);\n } catch {\n return {};\n }\n};\n\n/**\n * Helper hook that ensures that the attributes passed to the hook are stable.\n * This is necessary because the attributes are expected to not change at runtime.\n *\n * This hook will console.warn if the attributes change at runtime.\n */\nconst useWarnIfUnstableAttributes = (attributes: string[]) => {\n 'use no memo';\n\n const initialAttributesRef = React.useRef(attributes);\n\n // eslint-disable-next-line react-hooks/refs\n let isStable = initialAttributesRef.current.length === attributes.length;\n // eslint-disable-next-line react-hooks/refs\n if (initialAttributesRef.current !== attributes && isStable) {\n for (let i = 0; i < attributes.length; i++) {\n // eslint-disable-next-line react-hooks/refs\n if (initialAttributesRef.current[i] !== attributes[i]) {\n isStable = false;\n break;\n }\n }\n }\n React.useEffect(() => {\n if (!isStable) {\n const error = new Error();\n // eslint-disable-next-line no-console\n console.warn(/** #__DE-INDENT__ */ `\n @fluentui/react-tabster [useMergedTabsterAttributes]:\n The attributes passed to the hook changed at runtime.\n This might lead to unexpected behavior, please ensure that the attributes are stable.\n ${error.stack}\n `);\n }\n }, [isStable]);\n};\n"],"names":["React","TABSTER_ATTRIBUTE_NAME","useMergedTabsterAttributes_unstable","attributes","stringAttributes","reduce","acc","curr","push","process","env","NODE_ENV","useWarnIfUnstableAttributes","useMemo","length","mergeJSONStrings","undefined","a","b","JSON","stringify","Object","assign","safelyParseJSON","json","parse","initialAttributesRef","useRef","isStable","current","i","useEffect","error","Error","console","warn","stack"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,sBAAsB,QAAQ,UAAU;AAEjD;;;;;;;CAOC,GACD,OAAO,MAAMC,sCAAsC,CACjD,GAAGC;IAEH;IAEA,MAAMC,mBAAmBD,WAAWE,MAAM,CAAW,CAACC,KAAKC;QACzD,IAAIA,iBAAAA,2BAAAA,IAAM,CAACN,uBAAuB,EAAE;YAClCK,IAAIE,IAAI,CAACD,IAAI,CAACN,uBAAuB;QACvC;QACA,OAAOK;IACT,GAAG,EAAE;IAEL,IAAIG,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;QACzC,+EAA+E;QAC/E,+BAA+B;QAC/B,sDAAsD;QACtDC,4BAA4BR;IAC9B;IAEA,OAAOJ,MAAMa,OAAO,CAClB,IAAO,CAAA;YACL,CAACZ,uBAAuB,EAAEG,iBAAiBU,MAAM,GAAG,IAAIV,iBAAiBC,MAAM,CAACU,oBAAoBC;QACtG,CAAA,GACA,iFAAiF;IACjF,yFAAyF;IACzF,6EAA6E;IAC7EZ;AAEJ,EAAE;AAEF;;CAEC,GACD,MAAMW,mBAAmB,CAACE,GAAWC,IACnCC,KAAKC,SAAS,CAACC,OAAOC,MAAM,CAACC,gBAAgBN,IAAIM,gBAAgBL;AAEnE;;;CAGC,GACD,MAAMK,kBAAkB,CAACC;IACvB,IAAI;QACF,OAAOL,KAAKM,KAAK,CAACD;IACpB,EAAE,OAAM;QACN,OAAO,CAAC;IACV;AACF;AAEA;;;;;CAKC,GACD,MAAMZ,8BAA8B,CAACT;IACnC;IAEA,MAAMuB,uBAAuB1B,MAAM2B,MAAM,CAACxB;IAE1C,4CAA4C;IAC5C,IAAIyB,WAAWF,qBAAqBG,OAAO,CAACf,MAAM,KAAKX,WAAWW,MAAM;IACxE,4CAA4C;IAC5C,IAAIY,qBAAqBG,OAAO,KAAK1B,cAAcyB,UAAU;QAC3D,IAAK,IAAIE,IAAI,GAAGA,IAAI3B,WAAWW,MAAM,EAAEgB,IAAK;YAC1C,4CAA4C;YAC5C,IAAIJ,qBAAqBG,OAAO,CAACC,EAAE,KAAK3B,UAAU,CAAC2B,EAAE,EAAE;gBACrDF,WAAW;gBACX;YACF;QACF;IACF;IACA5B,MAAM+B,SAAS,CAAC;QACd,IAAI,CAACH,UAAU;YACb,MAAMI,QAAQ,IAAIC;YAClB,sCAAsC;YACtCC,QAAQC,IAAI,CAAC,mBAAmB,GAAG,CAAC;;;;QAIlC,EAAEH,MAAMI,KAAK,CAAC;MAChB,CAAC;QACH;IACF,GAAG;QAACR;KAAS;AACf"}
1
+ {"version":3,"sources":["../src/hooks/useMergeTabsterAttributes.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { Types } from 'tabster';\nimport { TABSTER_ATTRIBUTE_NAME } from 'tabster';\n\n/**\n * Merges a collection of tabster attributes.\n *\n * The result is memoized and only recomputed when the contributing attributes\n * actually change, so both the values and the number of attributes may change\n * at runtime.\n * @internal\n * @param attributes - collection of tabster attributes from other react-tabster hooks\n * @returns single merged tabster attribute\n */\nexport const useMergedTabsterAttributes_unstable = (\n ...attributes: (Partial<Types.TabsterDOMAttribute> | null | undefined)[]\n): Types.TabsterDOMAttribute => {\n // The collected attributes are reduced to a single primitive `key` so the\n // `React.useMemo` dependency list keeps a constant size, even when the number\n // of contributing attributes changes between renders. The array and the key\n // are built in a single pass.\n const stringAttributes: string[] = [];\n let key = '';\n for (const attribute of attributes) {\n const value = attribute?.[TABSTER_ATTRIBUTE_NAME];\n if (value) {\n stringAttributes.push(value);\n key += value + MERGE_KEY_SEPARATOR;\n }\n }\n\n return React.useMemo(\n () => ({ [TABSTER_ATTRIBUTE_NAME]: mergeAttributes(stringAttributes) }),\n // `key` fully captures the contents of `stringAttributes`, which is rebuilt\n // on every render and therefore cannot be a dependency itself.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [key],\n );\n};\n\n/**\n * `NUL` separator used to build the memoization key. It is a safe separator\n * because the attribute values originate from `JSON.stringify`, which escapes\n * control characters, so a literal `NUL` can never appear inside one of them.\n */\nconst MERGE_KEY_SEPARATOR = '\\u0000';\n\n/**\n * Merges a collection of tabster attribute JSON strings into a single one.\n * Later attributes take priority over earlier ones.\n */\nconst mergeAttributes = (stringAttributes: string[]): string | undefined => {\n if (stringAttributes.length === 0) {\n return undefined;\n }\n // common case: a single hook contributed an attribute, no parsing required\n if (stringAttributes.length === 1) {\n return stringAttributes[0];\n }\n return JSON.stringify(Object.assign({}, ...stringAttributes.map(safelyParseJSON)));\n};\n\n/**\n * Tries to parse a JSON string and returns an object.\n * If the JSON string is invalid, an empty object is returned.\n */\nconst safelyParseJSON = (json: string): object => {\n try {\n return JSON.parse(json);\n } catch {\n return {};\n }\n};\n"],"names":["React","TABSTER_ATTRIBUTE_NAME","useMergedTabsterAttributes_unstable","attributes","stringAttributes","key","attribute","value","push","MERGE_KEY_SEPARATOR","useMemo","mergeAttributes","length","undefined","JSON","stringify","Object","assign","map","safelyParseJSON","json","parse"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,sBAAsB,QAAQ,UAAU;AAEjD;;;;;;;;;CASC,GACD,OAAO,MAAMC,sCAAsC,CACjD,GAAGC;IAEH,0EAA0E;IAC1E,8EAA8E;IAC9E,4EAA4E;IAC5E,8BAA8B;IAC9B,MAAMC,mBAA6B,EAAE;IACrC,IAAIC,MAAM;IACV,KAAK,MAAMC,aAAaH,WAAY;QAClC,MAAMI,QAAQD,sBAAAA,gCAAAA,SAAW,CAACL,uBAAuB;QACjD,IAAIM,OAAO;YACTH,iBAAiBI,IAAI,CAACD;YACtBF,OAAOE,QAAQE;QACjB;IACF;IAEA,OAAOT,MAAMU,OAAO,CAClB,IAAO,CAAA;YAAE,CAACT,uBAAuB,EAAEU,gBAAgBP;QAAkB,CAAA,GACrE,4EAA4E;IAC5E,+DAA+D;IAC/D,uDAAuD;IACvD;QAACC;KAAI;AAET,EAAE;AAEF;;;;CAIC,GACD,MAAMI,sBAAsB;AAE5B;;;CAGC,GACD,MAAME,kBAAkB,CAACP;IACvB,IAAIA,iBAAiBQ,MAAM,KAAK,GAAG;QACjC,OAAOC;IACT;IACA,2EAA2E;IAC3E,IAAIT,iBAAiBQ,MAAM,KAAK,GAAG;QACjC,OAAOR,gBAAgB,CAAC,EAAE;IAC5B;IACA,OAAOU,KAAKC,SAAS,CAACC,OAAOC,MAAM,CAAC,CAAC,MAAMb,iBAAiBc,GAAG,CAACC;AAClE;AAEA;;;CAGC,GACD,MAAMA,kBAAkB,CAACC;IACvB,IAAI;QACF,OAAON,KAAKO,KAAK,CAACD;IACpB,EAAE,OAAM;QACN,OAAO,CAAC;IACV;AACF"}
@@ -1,9 +1,9 @@
1
1
  'use client';
2
- import { getModalizer, getRestorer, RestorerTypes } from 'tabster';
3
- import { useId } from '@fluentui/react-utilities';
4
- import { useTabsterAttributes } from './useTabsterAttributes';
5
- import { useTabster } from './useTabster';
6
- import { DangerousNeverHiddenAttribute } from './useDangerousNeverHidden';
2
+ import { getModalizer, getRestorer, RestorerTypes } from "tabster";
3
+ import { useId } from "@fluentui/react-utilities";
4
+ import { useTabsterAttributes } from "./useTabsterAttributes.js";
5
+ import { useTabster } from "./useTabster.js";
6
+ import { DangerousNeverHiddenAttribute } from "./useDangerousNeverHidden.js";
7
7
  const tabsterAccessibleCheck = (element)=>{
8
8
  return element.hasAttribute(DangerousNeverHiddenAttribute);
9
9
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useModalAttributes.ts"],"sourcesContent":["'use client';\n\nimport { getModalizer, getRestorer, RestorerTypes } from 'tabster';\nimport type { Types as TabsterTypes } from 'tabster';\n\nimport { useId } from '@fluentui/react-utilities';\nimport { useTabsterAttributes } from './useTabsterAttributes';\nimport { useTabster } from './useTabster';\nimport { DangerousNeverHiddenAttribute } from './useDangerousNeverHidden';\n\nexport interface UseModalAttributesOptions {\n /**\n * Traps focus inside the elements the attributes are applied.\n * it forbids users to tab out of the focus trap into the actual browser.\n */\n trapFocus?: boolean;\n\n /**\n * Traps focus inside the elements the attributes are applied.\n * This prop enables traditional force-focus behavior to match previous versions of Fluent.\n * Without this, users can tab out of the focus trap and into the browser chrome.\n * This matches the behavior of the native <dialog> element and inert.\n * We recommend setting this to true based on user feedback and consistency.\n */\n legacyTrapFocus?: boolean;\n\n /**\n * Always reachabled in Tab order\n */\n alwaysFocusable?: boolean;\n\n /**\n * Id to use for the modalizer. An id will be generated if not provided.\n */\n id?: string;\n}\n\nconst tabsterAccessibleCheck: TabsterTypes.ModalizerElementAccessibleCheck = element => {\n return element.hasAttribute(DangerousNeverHiddenAttribute);\n};\n\nfunction initTabsterModules(tabster: TabsterTypes.TabsterCore) {\n getModalizer(tabster, undefined, tabsterAccessibleCheck);\n getRestorer(tabster);\n}\n\n/**\n * Applies modal dialog behaviour through DOM attributes\n * Modal element will focus trap and hide other content on the page\n * The trigger element will be focused if focus is lost after the modal element is removed\n *\n * @returns DOM attributes to apply to the modal element and its trigger\n */\nexport const useModalAttributes = (\n options: UseModalAttributesOptions = {},\n): { modalAttributes: TabsterTypes.TabsterDOMAttribute; triggerAttributes: TabsterTypes.TabsterDOMAttribute } => {\n const { trapFocus, alwaysFocusable, legacyTrapFocus } = options;\n\n // Initializes the modalizer and restorer APIs\n useTabster(initTabsterModules);\n\n const id = useId('modal-', options.id);\n const modalAttributes = useTabsterAttributes({\n restorer: { type: RestorerTypes.Source },\n ...(trapFocus && {\n modalizer: {\n id,\n isOthersAccessible: !trapFocus,\n isAlwaysAccessible: alwaysFocusable,\n isTrapped: legacyTrapFocus && trapFocus,\n },\n }),\n });\n\n const triggerAttributes = useTabsterAttributes({\n restorer: { type: RestorerTypes.Target },\n });\n\n return { modalAttributes, triggerAttributes };\n};\n"],"names":["getModalizer","getRestorer","RestorerTypes","useId","useTabsterAttributes","useTabster","DangerousNeverHiddenAttribute","tabsterAccessibleCheck","element","hasAttribute","initTabsterModules","tabster","undefined","useModalAttributes","options","trapFocus","alwaysFocusable","legacyTrapFocus","id","modalAttributes","restorer","type","Source","modalizer","isOthersAccessible","isAlwaysAccessible","isTrapped","triggerAttributes","Target"],"mappings":"AAAA;AAEA,SAASA,YAAY,EAAEC,WAAW,EAAEC,aAAa,QAAQ,UAAU;AAGnE,SAASC,KAAK,QAAQ,4BAA4B;AAClD,SAASC,oBAAoB,QAAQ,yBAAyB;AAC9D,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,6BAA6B,QAAQ,4BAA4B;AA6B1E,MAAMC,yBAAuEC,CAAAA;IAC3E,OAAOA,QAAQC,YAAY,CAACH;AAC9B;AAEA,SAASI,mBAAmBC,OAAiC;IAC3DX,aAAaW,SAASC,WAAWL;IACjCN,YAAYU;AACd;AAEA;;;;;;CAMC,GACD,OAAO,MAAME,qBAAqB,CAChCC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EAAEC,SAAS,EAAEC,eAAe,EAAEC,eAAe,EAAE,GAAGH;IAExD,8CAA8C;IAC9CT,WAAWK;IAEX,MAAMQ,KAAKf,MAAM,UAAUW,QAAQI,EAAE;IACrC,MAAMC,kBAAkBf,qBAAqB;QAC3CgB,UAAU;YAAEC,MAAMnB,cAAcoB,MAAM;QAAC;QACvC,GAAIP,aAAa;YACfQ,WAAW;gBACTL;gBACAM,oBAAoB,CAACT;gBACrBU,oBAAoBT;gBACpBU,WAAWT,mBAAmBF;YAChC;QACF,CAAC;IACH;IAEA,MAAMY,oBAAoBvB,qBAAqB;QAC7CgB,UAAU;YAAEC,MAAMnB,cAAc0B,MAAM;QAAC;IACzC;IAEA,OAAO;QAAET;QAAiBQ;IAAkB;AAC9C,EAAE"}
1
+ {"version":3,"sources":["../src/hooks/useModalAttributes.ts"],"sourcesContent":["'use client';\n\nimport { getModalizer, getRestorer, RestorerTypes } from 'tabster';\nimport type { Types as TabsterTypes } from 'tabster';\n\nimport { useId } from '@fluentui/react-utilities';\nimport { useTabsterAttributes } from './useTabsterAttributes';\nimport { useTabster } from './useTabster';\nimport { DangerousNeverHiddenAttribute } from './useDangerousNeverHidden';\n\nexport interface UseModalAttributesOptions {\n /**\n * Traps focus inside the elements the attributes are applied.\n * it forbids users to tab out of the focus trap into the actual browser.\n */\n trapFocus?: boolean;\n\n /**\n * Traps focus inside the elements the attributes are applied.\n * This prop enables traditional force-focus behavior to match previous versions of Fluent.\n * Without this, users can tab out of the focus trap and into the browser chrome.\n * This matches the behavior of the native <dialog> element and inert.\n * We recommend setting this to true based on user feedback and consistency.\n */\n legacyTrapFocus?: boolean;\n\n /**\n * Always reachabled in Tab order\n */\n alwaysFocusable?: boolean;\n\n /**\n * Id to use for the modalizer. An id will be generated if not provided.\n */\n id?: string;\n}\n\nconst tabsterAccessibleCheck: TabsterTypes.ModalizerElementAccessibleCheck = element => {\n return element.hasAttribute(DangerousNeverHiddenAttribute);\n};\n\nfunction initTabsterModules(tabster: TabsterTypes.TabsterCore) {\n getModalizer(tabster, undefined, tabsterAccessibleCheck);\n getRestorer(tabster);\n}\n\n/**\n * Applies modal dialog behaviour through DOM attributes\n * Modal element will focus trap and hide other content on the page\n * The trigger element will be focused if focus is lost after the modal element is removed\n *\n * @returns DOM attributes to apply to the modal element and its trigger\n */\nexport const useModalAttributes = (\n options: UseModalAttributesOptions = {},\n): { modalAttributes: TabsterTypes.TabsterDOMAttribute; triggerAttributes: TabsterTypes.TabsterDOMAttribute } => {\n const { trapFocus, alwaysFocusable, legacyTrapFocus } = options;\n\n // Initializes the modalizer and restorer APIs\n useTabster(initTabsterModules);\n\n const id = useId('modal-', options.id);\n const modalAttributes = useTabsterAttributes({\n restorer: { type: RestorerTypes.Source },\n ...(trapFocus && {\n modalizer: {\n id,\n isOthersAccessible: !trapFocus,\n isAlwaysAccessible: alwaysFocusable,\n isTrapped: legacyTrapFocus && trapFocus,\n },\n }),\n });\n\n const triggerAttributes = useTabsterAttributes({\n restorer: { type: RestorerTypes.Target },\n });\n\n return { modalAttributes, triggerAttributes };\n};\n"],"names":["getModalizer","getRestorer","RestorerTypes","useId","useTabsterAttributes","useTabster","DangerousNeverHiddenAttribute","tabsterAccessibleCheck","element","hasAttribute","initTabsterModules","tabster","undefined","useModalAttributes","options","trapFocus","alwaysFocusable","legacyTrapFocus","id","modalAttributes","restorer","type","Source","modalizer","isOthersAccessible","isAlwaysAccessible","isTrapped","triggerAttributes","Target"],"mappings":"AAAA;AAEA,SAASA,YAAY,EAAEC,WAAW,EAAEC,aAAa,QAAQ,UAAU;AAGnE,SAASC,KAAK,QAAQ,4BAA4B;AAClD,SAASC,oBAAoB,QAAQ,4BAAyB;AAC9D,SAASC,UAAU,QAAQ,kBAAe;AAC1C,SAASC,6BAA6B,QAAQ,+BAA4B;AA6B1E,MAAMC,yBAAuEC,CAAAA;IAC3E,OAAOA,QAAQC,YAAY,CAACH;AAC9B;AAEA,SAASI,mBAAmBC,OAAiC;IAC3DX,aAAaW,SAASC,WAAWL;IACjCN,YAAYU;AACd;AAEA;;;;;;CAMC,GACD,OAAO,MAAME,qBAAqB,CAChCC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EAAEC,SAAS,EAAEC,eAAe,EAAEC,eAAe,EAAE,GAAGH;IAExD,8CAA8C;IAC9CT,WAAWK;IAEX,MAAMQ,KAAKf,MAAM,UAAUW,QAAQI,EAAE;IACrC,MAAMC,kBAAkBf,qBAAqB;QAC3CgB,UAAU;YAAEC,MAAMnB,cAAcoB,MAAM;QAAC;QACvC,GAAIP,aAAa;YACfQ,WAAW;gBACTL;gBACAM,oBAAoB,CAACT;gBACrBU,oBAAoBT;gBACpBU,WAAWT,mBAAmBF;YAChC;QACF,CAAC;IACH;IAEA,MAAMY,oBAAoBvB,qBAAqB;QAC7CgB,UAAU;YAAEC,MAAMnB,cAAc0B,MAAM;QAAC;IACzC;IAEA,OAAO;QAAET;QAAiBQ;IAAkB;AAC9C,EAAE"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { getObservedElement } from 'tabster';
3
- import { useTabster } from './useTabster';
4
- import { useTabsterAttributes } from './useTabsterAttributes';
2
+ import { getObservedElement } from "tabster";
3
+ import { useTabster } from "./useTabster.js";
4
+ import { useTabsterAttributes } from "./useTabsterAttributes.js";
5
5
  export function useObservedElement(name) {
6
6
  useTabster(getObservedElement);
7
7
  return useTabsterAttributes({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useObservedElement.ts"],"sourcesContent":["'use client';\n\nimport type { Types as TabsterTypes } from 'tabster';\nimport { getObservedElement } from 'tabster';\n\nimport { useTabster } from './useTabster';\nimport { useTabsterAttributes } from './useTabsterAttributes';\n\nexport function useObservedElement(name: string | string[]): TabsterTypes.TabsterDOMAttribute {\n useTabster(getObservedElement);\n\n return useTabsterAttributes({ observed: { names: Array.isArray(name) ? name : [name] } });\n}\n"],"names":["getObservedElement","useTabster","useTabsterAttributes","useObservedElement","name","observed","names","Array","isArray"],"mappings":"AAAA;AAGA,SAASA,kBAAkB,QAAQ,UAAU;AAE7C,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,oBAAoB,QAAQ,yBAAyB;AAE9D,OAAO,SAASC,mBAAmBC,IAAuB;IACxDH,WAAWD;IAEX,OAAOE,qBAAqB;QAAEG,UAAU;YAAEC,OAAOC,MAAMC,OAAO,CAACJ,QAAQA,OAAO;gBAACA;aAAK;QAAC;IAAE;AACzF"}
1
+ {"version":3,"sources":["../src/hooks/useObservedElement.ts"],"sourcesContent":["'use client';\n\nimport type { Types as TabsterTypes } from 'tabster';\nimport { getObservedElement } from 'tabster';\n\nimport { useTabster } from './useTabster';\nimport { useTabsterAttributes } from './useTabsterAttributes';\n\nexport function useObservedElement(name: string | string[]): TabsterTypes.TabsterDOMAttribute {\n useTabster(getObservedElement);\n\n return useTabsterAttributes({ observed: { names: Array.isArray(name) ? name : [name] } });\n}\n"],"names":["getObservedElement","useTabster","useTabsterAttributes","useObservedElement","name","observed","names","Array","isArray"],"mappings":"AAAA;AAGA,SAASA,kBAAkB,QAAQ,UAAU;AAE7C,SAASC,UAAU,QAAQ,kBAAe;AAC1C,SAASC,oBAAoB,QAAQ,4BAAyB;AAE9D,OAAO,SAASC,mBAAmBC,IAAuB;IACxDH,WAAWD;IAEX,OAAOE,qBAAqB;QAAEG,UAAU;YAAEC,OAAOC,MAAMC,OAAO,CAACJ,QAAQA,OAAO;gBAACA;aAAK;QAAC;IAAE;AACzF"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import * as React from 'react';
3
- import { useEventCallback } from '@fluentui/react-utilities';
4
- import { useKeyborgRef } from './useKeyborgRef';
2
+ import * as React from "react";
3
+ import { useEventCallback } from "@fluentui/react-utilities";
4
+ import { useKeyborgRef } from "./useKeyborgRef.js";
5
5
  /**
6
6
  * Instantiates [keyborg](https://github.com/microsoft/keyborg) and subscribes to changes
7
7
  * in the keyboard navigation mode.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useOnKeyboardNavigationChange.ts"],"sourcesContent":["'use client';\n\nimport type { KeyborgCallback } from 'keyborg';\nimport * as React from 'react';\nimport { useEventCallback } from '@fluentui/react-utilities';\n\nimport { useKeyborgRef } from './useKeyborgRef';\n\n/**\n * Instantiates [keyborg](https://github.com/microsoft/keyborg) and subscribes to changes\n * in the keyboard navigation mode.\n *\n * @param callback - called every time the keyboard navigation state changes\n */\nexport function useOnKeyboardNavigationChange(callback: (isNavigatingWithKeyboard: boolean) => void): void {\n const keyborgRef = useKeyborgRef();\n const eventCallback = useEventCallback(callback);\n\n React.useEffect(() => {\n const keyborg = keyborgRef.current;\n\n if (keyborg) {\n const cb: KeyborgCallback = next => {\n eventCallback(next);\n };\n\n keyborg.subscribe(cb);\n cb(keyborg.isNavigatingWithKeyboard());\n\n return () => {\n keyborg.unsubscribe(cb);\n };\n }\n }, [keyborgRef, eventCallback]);\n}\n"],"names":["React","useEventCallback","useKeyborgRef","useOnKeyboardNavigationChange","callback","keyborgRef","eventCallback","useEffect","keyborg","current","cb","next","subscribe","isNavigatingWithKeyboard","unsubscribe"],"mappings":"AAAA;AAGA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,QAAQ,4BAA4B;AAE7D,SAASC,aAAa,QAAQ,kBAAkB;AAEhD;;;;;CAKC,GACD,OAAO,SAASC,8BAA8BC,QAAqD;IACjG,MAAMC,aAAaH;IACnB,MAAMI,gBAAgBL,iBAAiBG;IAEvCJ,MAAMO,SAAS,CAAC;QACd,MAAMC,UAAUH,WAAWI,OAAO;QAElC,IAAID,SAAS;YACX,MAAME,KAAsBC,CAAAA;gBAC1BL,cAAcK;YAChB;YAEAH,QAAQI,SAAS,CAACF;YAClBA,GAAGF,QAAQK,wBAAwB;YAEnC,OAAO;gBACLL,QAAQM,WAAW,CAACJ;YACtB;QACF;IACF,GAAG;QAACL;QAAYC;KAAc;AAChC"}
1
+ {"version":3,"sources":["../src/hooks/useOnKeyboardNavigationChange.ts"],"sourcesContent":["'use client';\n\nimport type { KeyborgCallback } from 'keyborg';\nimport * as React from 'react';\nimport { useEventCallback } from '@fluentui/react-utilities';\n\nimport { useKeyborgRef } from './useKeyborgRef';\n\n/**\n * Instantiates [keyborg](https://github.com/microsoft/keyborg) and subscribes to changes\n * in the keyboard navigation mode.\n *\n * @param callback - called every time the keyboard navigation state changes\n */\nexport function useOnKeyboardNavigationChange(callback: (isNavigatingWithKeyboard: boolean) => void): void {\n const keyborgRef = useKeyborgRef();\n const eventCallback = useEventCallback(callback);\n\n React.useEffect(() => {\n const keyborg = keyborgRef.current;\n\n if (keyborg) {\n const cb: KeyborgCallback = next => {\n eventCallback(next);\n };\n\n keyborg.subscribe(cb);\n cb(keyborg.isNavigatingWithKeyboard());\n\n return () => {\n keyborg.unsubscribe(cb);\n };\n }\n }, [keyborgRef, eventCallback]);\n}\n"],"names":["React","useEventCallback","useKeyborgRef","useOnKeyboardNavigationChange","callback","keyborgRef","eventCallback","useEffect","keyborg","current","cb","next","subscribe","isNavigatingWithKeyboard","unsubscribe"],"mappings":"AAAA;AAGA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,QAAQ,4BAA4B;AAE7D,SAASC,aAAa,QAAQ,qBAAkB;AAEhD;;;;;CAKC,GACD,OAAO,SAASC,8BAA8BC,QAAqD;IACjG,MAAMC,aAAaH;IACnB,MAAMI,gBAAgBL,iBAAiBG;IAEvCJ,MAAMO,SAAS,CAAC;QACd,MAAMC,UAAUH,WAAWI,OAAO;QAElC,IAAID,SAAS;YACX,MAAME,KAAsBC,CAAAA;gBAC1BL,cAAcK;YAChB;YAEAH,QAAQI,SAAS,CAACF;YAClBA,GAAGF,QAAQK,wBAAwB;YAEnC,OAAO;gBACLL,QAAQM,WAAW,CAACJ;YACtB;QACF;IACF,GAAG;QAACL;QAAYC;KAAc;AAChC"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { getRestorer, getTabsterAttribute, RestorerTypes } from 'tabster';
3
- import { useTabster } from './useTabster';
2
+ import { getRestorer, getTabsterAttribute, RestorerTypes } from "tabster";
3
+ import { useTabster } from "./useTabster.js";
4
4
  /**
5
5
  * Focus will be restored to the most recent target element when it is lost from a source
6
6
  * @returns Attribute to apply to the target element where focus is restored
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useRestoreFocus.ts"],"sourcesContent":["'use client';\n\nimport type { Types as TabsterTypes } from 'tabster';\nimport { getRestorer, getTabsterAttribute, RestorerTypes } from 'tabster';\nimport { useTabster } from './useTabster';\n\n/**\n * Focus will be restored to the most recent target element when it is lost from a source\n * @returns Attribute to apply to the target element where focus is restored\n */\nexport function useRestoreFocusTarget(): TabsterTypes.TabsterDOMAttribute {\n // Initializes the restorer API\n useTabster(getRestorer);\n\n return getTabsterAttribute({ restorer: { type: RestorerTypes.Target } });\n}\n\n/**\n * Focus will be restored to the most recent target element when it is lost from a source\n * @returns Attribute to apply to the element that might lose focus\n */\nexport function useRestoreFocusSource(): TabsterTypes.TabsterDOMAttribute {\n // Initializes the restorer API\n useTabster(getRestorer);\n\n return getTabsterAttribute({ restorer: { type: RestorerTypes.Source } });\n}\n"],"names":["getRestorer","getTabsterAttribute","RestorerTypes","useTabster","useRestoreFocusTarget","restorer","type","Target","useRestoreFocusSource","Source"],"mappings":"AAAA;AAGA,SAASA,WAAW,EAAEC,mBAAmB,EAAEC,aAAa,QAAQ,UAAU;AAC1E,SAASC,UAAU,QAAQ,eAAe;AAE1C;;;CAGC,GACD,OAAO,SAASC;IACd,+BAA+B;IAC/BD,WAAWH;IAEX,OAAOC,oBAAoB;QAAEI,UAAU;YAAEC,MAAMJ,cAAcK,MAAM;QAAC;IAAE;AACxE;AAEA;;;CAGC,GACD,OAAO,SAASC;IACd,+BAA+B;IAC/BL,WAAWH;IAEX,OAAOC,oBAAoB;QAAEI,UAAU;YAAEC,MAAMJ,cAAcO,MAAM;QAAC;IAAE;AACxE"}
1
+ {"version":3,"sources":["../src/hooks/useRestoreFocus.ts"],"sourcesContent":["'use client';\n\nimport type { Types as TabsterTypes } from 'tabster';\nimport { getRestorer, getTabsterAttribute, RestorerTypes } from 'tabster';\nimport { useTabster } from './useTabster';\n\n/**\n * Focus will be restored to the most recent target element when it is lost from a source\n * @returns Attribute to apply to the target element where focus is restored\n */\nexport function useRestoreFocusTarget(): TabsterTypes.TabsterDOMAttribute {\n // Initializes the restorer API\n useTabster(getRestorer);\n\n return getTabsterAttribute({ restorer: { type: RestorerTypes.Target } });\n}\n\n/**\n * Focus will be restored to the most recent target element when it is lost from a source\n * @returns Attribute to apply to the element that might lose focus\n */\nexport function useRestoreFocusSource(): TabsterTypes.TabsterDOMAttribute {\n // Initializes the restorer API\n useTabster(getRestorer);\n\n return getTabsterAttribute({ restorer: { type: RestorerTypes.Source } });\n}\n"],"names":["getRestorer","getTabsterAttribute","RestorerTypes","useTabster","useRestoreFocusTarget","restorer","type","Target","useRestoreFocusSource","Source"],"mappings":"AAAA;AAGA,SAASA,WAAW,EAAEC,mBAAmB,EAAEC,aAAa,QAAQ,UAAU;AAC1E,SAASC,UAAU,QAAQ,kBAAe;AAE1C;;;CAGC,GACD,OAAO,SAASC;IACd,+BAA+B;IAC/BD,WAAWH;IAEX,OAAOC,oBAAoB;QAAEI,UAAU;YAAEC,MAAMJ,cAAcK,MAAM;QAAC;IAAE;AACxE;AAEA;;;CAGC,GACD,OAAO,SAASC;IACd,+BAA+B;IAC/BL,WAAWH;IAEX,OAAOC,oBAAoB;QAAEI,UAAU;YAAEC,MAAMJ,cAAcO,MAAM;QAAC;IAAE;AACxE"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import * as React from 'react';
3
- import { useKeyborgRef } from './useKeyborgRef';
2
+ import * as React from "react";
3
+ import { useKeyborgRef } from "./useKeyborgRef.js";
4
4
  /**
5
5
  */ export function useSetKeyboardNavigation() {
6
6
  const keyborgRef = useKeyborgRef();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useSetKeyboardNavigation.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useKeyborgRef } from './useKeyborgRef';\n\n/**\n */\nexport function useSetKeyboardNavigation(): (isNavigatingWithKeyboard: boolean) => void {\n const keyborgRef = useKeyborgRef();\n\n return React.useCallback(\n (isNavigatingWithKeyboard: boolean) => {\n keyborgRef.current?.setVal(isNavigatingWithKeyboard);\n },\n [keyborgRef],\n );\n}\n"],"names":["React","useKeyborgRef","useSetKeyboardNavigation","keyborgRef","useCallback","isNavigatingWithKeyboard","current","setVal"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,aAAa,QAAQ,kBAAkB;AAEhD;CACC,GACD,OAAO,SAASC;IACd,MAAMC,aAAaF;IAEnB,OAAOD,MAAMI,WAAW,CACtB,CAACC;YACCF;SAAAA,sBAAAA,WAAWG,OAAO,cAAlBH,0CAAAA,oBAAoBI,MAAM,CAACF;IAC7B,GACA;QAACF;KAAW;AAEhB"}
1
+ {"version":3,"sources":["../src/hooks/useSetKeyboardNavigation.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useKeyborgRef } from './useKeyborgRef';\n\n/**\n */\nexport function useSetKeyboardNavigation(): (isNavigatingWithKeyboard: boolean) => void {\n const keyborgRef = useKeyborgRef();\n\n return React.useCallback(\n (isNavigatingWithKeyboard: boolean) => {\n keyborgRef.current?.setVal(isNavigatingWithKeyboard);\n },\n [keyborgRef],\n );\n}\n"],"names":["React","useKeyborgRef","useSetKeyboardNavigation","keyborgRef","useCallback","isNavigatingWithKeyboard","current","setVal"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,aAAa,QAAQ,qBAAkB;AAEhD;CACC,GACD,OAAO,SAASC;IACd,MAAMC,aAAaF;IAEnB,OAAOD,MAAMI,WAAW,CACtB,CAACC;YACCF;SAAAA,sBAAAA,WAAWG,OAAO,cAAlBH,0CAAAA,oBAAoBI,MAAM,CAACF;IAC7B,GACA;QAACF;KAAW;AAEhB"}
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import * as React from 'react';
3
- import { createTabster, disposeTabster } from 'tabster';
4
- import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';
5
- import { getParent, useIsomorphicLayoutEffect, usePrevious } from '@fluentui/react-utilities';
2
+ import * as React from "react";
3
+ import { createTabster, disposeTabster } from "tabster";
4
+ import { useFluent_unstable as useFluent } from "@fluentui/react-shared-contexts";
5
+ import { getParent, useIsomorphicLayoutEffect, usePrevious } from "@fluentui/react-utilities";
6
6
  const DEFAULT_FACTORY = (tabster)=>{
7
7
  return tabster;
8
8
  };
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { getTabsterAttribute, TABSTER_ATTRIBUTE_NAME } from 'tabster';
3
- import { useTabster } from './useTabster';
4
- import * as React from 'react';
2
+ import { getTabsterAttribute, TABSTER_ATTRIBUTE_NAME } from "tabster";
3
+ import { useTabster } from "./useTabster.js";
4
+ import * as React from "react";
5
5
  /**
6
6
  * Hook that returns tabster attributes while ensuring tabster exists
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useTabsterAttributes.ts"],"sourcesContent":["'use client';\n\nimport type { Types as TabsterTypes } from 'tabster';\nimport { getTabsterAttribute, TABSTER_ATTRIBUTE_NAME } from 'tabster';\nimport { useTabster } from './useTabster';\nimport * as React from 'react';\n\n/**\n * Hook that returns tabster attributes while ensuring tabster exists\n *\n * @internal\n */\nexport const useTabsterAttributes = (props: TabsterTypes.TabsterAttributeProps): TabsterTypes.TabsterDOMAttribute => {\n // A tabster instance is not necessary to generate tabster attributes\n // but calling the hook will ensure that a tabster instance exists internally and avoids consumers doing the same\n useTabster();\n\n const strAttr = getTabsterAttribute(props, true);\n\n return React.useMemo(\n () => ({\n [TABSTER_ATTRIBUTE_NAME]: strAttr,\n }),\n [strAttr],\n );\n};\n"],"names":["getTabsterAttribute","TABSTER_ATTRIBUTE_NAME","useTabster","React","useTabsterAttributes","props","strAttr","useMemo"],"mappings":"AAAA;AAGA,SAASA,mBAAmB,EAAEC,sBAAsB,QAAQ,UAAU;AACtE,SAASC,UAAU,QAAQ,eAAe;AAC1C,YAAYC,WAAW,QAAQ;AAE/B;;;;CAIC,GACD,OAAO,MAAMC,uBAAuB,CAACC;IACnC,qEAAqE;IACrE,iHAAiH;IACjHH;IAEA,MAAMI,UAAUN,oBAAoBK,OAAO;IAE3C,OAAOF,MAAMI,OAAO,CAClB,IAAO,CAAA;YACL,CAACN,uBAAuB,EAAEK;QAC5B,CAAA,GACA;QAACA;KAAQ;AAEb,EAAE"}
1
+ {"version":3,"sources":["../src/hooks/useTabsterAttributes.ts"],"sourcesContent":["'use client';\n\nimport type { Types as TabsterTypes } from 'tabster';\nimport { getTabsterAttribute, TABSTER_ATTRIBUTE_NAME } from 'tabster';\nimport { useTabster } from './useTabster';\nimport * as React from 'react';\n\n/**\n * Hook that returns tabster attributes while ensuring tabster exists\n *\n * @internal\n */\nexport const useTabsterAttributes = (props: TabsterTypes.TabsterAttributeProps): TabsterTypes.TabsterDOMAttribute => {\n // A tabster instance is not necessary to generate tabster attributes\n // but calling the hook will ensure that a tabster instance exists internally and avoids consumers doing the same\n useTabster();\n\n const strAttr = getTabsterAttribute(props, true);\n\n return React.useMemo(\n () => ({\n [TABSTER_ATTRIBUTE_NAME]: strAttr,\n }),\n [strAttr],\n );\n};\n"],"names":["getTabsterAttribute","TABSTER_ATTRIBUTE_NAME","useTabster","React","useTabsterAttributes","props","strAttr","useMemo"],"mappings":"AAAA;AAGA,SAASA,mBAAmB,EAAEC,sBAAsB,QAAQ,UAAU;AACtE,SAASC,UAAU,QAAQ,kBAAe;AAC1C,YAAYC,WAAW,QAAQ;AAE/B;;;;CAIC,GACD,OAAO,MAAMC,uBAAuB,CAACC;IACnC,qEAAqE;IACrE,iHAAiH;IACjHH;IAEA,MAAMI,UAAUN,oBAAoBK,OAAO;IAE3C,OAAOF,MAAMI,OAAO,CAClB,IAAO,CAAA;YACL,CAACN,uBAAuB,EAAEK;QAC5B,CAAA,GACA;QAACA;KAAQ;AAEb,EAAE"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { getTabsterAttribute } from 'tabster';
3
- import { useTabster } from './useTabster';
2
+ import { getTabsterAttribute } from "tabster";
3
+ import { useTabster } from "./useTabster.js";
4
4
  /**
5
5
  * Designates an area where tabster does not control focus
6
6
  * @returns Attribute to apply to the target element that should be uncontrolled by tabster
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useUncontrolledFocus.ts"],"sourcesContent":["'use client';\n\nimport type { Types as TabsterTypes } from 'tabster';\nimport { getTabsterAttribute } from 'tabster';\nimport { useTabster } from './useTabster';\n\n/**\n * Designates an area where tabster does not control focus\n * @returns Attribute to apply to the target element that should be uncontrolled by tabster\n */\nexport function useUncontrolledFocus(): TabsterTypes.TabsterDOMAttribute {\n useTabster();\n\n return getTabsterAttribute({ uncontrolled: {} });\n}\n"],"names":["getTabsterAttribute","useTabster","useUncontrolledFocus","uncontrolled"],"mappings":"AAAA;AAGA,SAASA,mBAAmB,QAAQ,UAAU;AAC9C,SAASC,UAAU,QAAQ,eAAe;AAE1C;;;CAGC,GACD,OAAO,SAASC;IACdD;IAEA,OAAOD,oBAAoB;QAAEG,cAAc,CAAC;IAAE;AAChD"}
1
+ {"version":3,"sources":["../src/hooks/useUncontrolledFocus.ts"],"sourcesContent":["'use client';\n\nimport type { Types as TabsterTypes } from 'tabster';\nimport { getTabsterAttribute } from 'tabster';\nimport { useTabster } from './useTabster';\n\n/**\n * Designates an area where tabster does not control focus\n * @returns Attribute to apply to the target element that should be uncontrolled by tabster\n */\nexport function useUncontrolledFocus(): TabsterTypes.TabsterDOMAttribute {\n useTabster();\n\n return getTabsterAttribute({ uncontrolled: {} });\n}\n"],"names":["getTabsterAttribute","useTabster","useUncontrolledFocus","uncontrolled"],"mappings":"AAAA;AAGA,SAASA,mBAAmB,QAAQ,UAAU;AAC9C,SAASC,UAAU,QAAQ,kBAAe;AAE1C;;;CAGC,GACD,OAAO,SAASC;IACdD;IAEA,OAAOD,oBAAoB;QAAEG,cAAc,CAAC;IAAE;AAChD"}
package/lib/index.js CHANGED
@@ -1,12 +1,12 @@
1
- export { useArrowNavigationGroup, useFocusableGroup, useFocusFinders, useFocusVisible, useFocusWithin, useKeyboardNavAttribute, useDangerousNeverHidden_unstable, useModalAttributes, useTabsterAttributes, useObservedElement, useFocusObserved, useMergedTabsterAttributes_unstable, useRestoreFocusSource, useRestoreFocusTarget, useUncontrolledFocus, useOnKeyboardNavigationChange, useIsNavigatingWithKeyboard, useSetKeyboardNavigation, useFocusedElementChange, useActivateModal } from './hooks/index';
2
- export { createCustomFocusIndicatorStyle, createFocusOutlineStyle } from './focus/index';
3
- export { applyFocusVisiblePolyfill } from './focus/index';
4
- import { dispatchGroupperMoveFocusEvent, dispatchMoverMoveFocusEvent, MoverMoveFocusEventName, MoverMoveFocusEvent, MoverKeys, GroupperMoveFocusEventName, GroupperMoveFocusEvent, GroupperMoveFocusActions, MoverMemorizedElementEventName, MoverMemorizedElementEvent, TabsterMoveFocusEventName, TabsterMoveFocusEvent } from 'tabster';
5
- export { KEYBORG_FOCUSIN } from 'keyborg';
1
+ export { useArrowNavigationGroup, useFocusableGroup, useFocusFinders, useFocusVisible, useFocusWithin, useKeyboardNavAttribute, useDangerousNeverHidden_unstable, useModalAttributes, useTabsterAttributes, useObservedElement, useFocusObserved, useMergedTabsterAttributes_unstable, useRestoreFocusSource, useRestoreFocusTarget, useUncontrolledFocus, useOnKeyboardNavigationChange, useIsNavigatingWithKeyboard, useSetKeyboardNavigation, useFocusedElementChange, useActivateModal } from "./hooks/index.js";
2
+ export { createCustomFocusIndicatorStyle, createFocusOutlineStyle } from "./focus/index.js";
3
+ export { applyFocusVisiblePolyfill } from "./focus/index.js";
4
+ import { dispatchGroupperMoveFocusEvent, dispatchMoverMoveFocusEvent, MoverMoveFocusEventName, MoverMoveFocusEvent, MoverKeys, GroupperMoveFocusEventName, GroupperMoveFocusEvent, GroupperMoveFocusActions, MoverMemorizedElementEventName, MoverMemorizedElementEvent, TabsterMoveFocusEventName, TabsterMoveFocusEvent } from "tabster";
5
+ export { KEYBORG_FOCUSIN } from "keyborg";
6
6
  // WARNING! ATTENTION! Tabster.Types was exported from here by mistake. To avoid breaking changes,
7
7
  // we are putting a snapshot of Tabster.Types@6.0.1 and marking the entire export as deprecated.
8
8
  // eslint-disable-next-line @typescript-eslint/naming-convention
9
- import * as TabsterTypes6_0_1_DoNotUse from './tabster-types-6.0.1-do-not-use';
9
+ import * as TabsterTypes6_0_1_DoNotUse from "./tabster-types-6.0.1-do-not-use.js";
10
10
  export { /** @deprecated (Do not use! Exposed by mistake and will be removed in the next major version.) */ TabsterTypes6_0_1_DoNotUse as TabsterTypes, /** @deprecated Use element.dispatchEvent(new GroupperMoveFocusEvent({ action: GroupperMoveFocusActions.Escape })) */ dispatchGroupperMoveFocusEvent, /** @deprecated Use element.dispatchEvent(new MoverMoveFocusEvent({ key: MoverKeys.ArrowDown })) */ dispatchMoverMoveFocusEvent };
11
11
  /**
12
12
  * For all exports below, we don't do wildcard exports to keep Tabster API flexible. We export only required
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n useArrowNavigationGroup,\n useFocusableGroup,\n useFocusFinders,\n useFocusVisible,\n useFocusWithin,\n useKeyboardNavAttribute,\n useDangerousNeverHidden_unstable,\n useModalAttributes,\n useTabsterAttributes,\n useObservedElement,\n useFocusObserved,\n useMergedTabsterAttributes_unstable,\n useRestoreFocusSource,\n useRestoreFocusTarget,\n useUncontrolledFocus,\n useOnKeyboardNavigationChange,\n useIsNavigatingWithKeyboard,\n useSetKeyboardNavigation,\n useFocusedElementChange,\n useActivateModal,\n} from './hooks/index';\nexport type {\n UseArrowNavigationGroupOptions,\n UseFocusableGroupOptions,\n UseModalAttributesOptions,\n} from './hooks/index';\n\nexport { createCustomFocusIndicatorStyle, createFocusOutlineStyle } from './focus/index';\n\nexport type {\n CreateCustomFocusIndicatorStyleOptions,\n CreateFocusOutlineStyleOptions,\n FocusOutlineOffset,\n FocusOutlineStyleOptions,\n} from './focus/index';\n\nexport { applyFocusVisiblePolyfill } from './focus/index';\nimport {\n type Types,\n type EventsTypes,\n dispatchGroupperMoveFocusEvent,\n dispatchMoverMoveFocusEvent,\n MoverMoveFocusEventName,\n MoverMoveFocusEvent,\n MoverKeys,\n GroupperMoveFocusEventName,\n GroupperMoveFocusEvent,\n GroupperMoveFocusActions,\n MoverMemorizedElementEventName,\n MoverMemorizedElementEvent,\n TabsterMoveFocusEventName,\n TabsterMoveFocusEvent,\n} from 'tabster';\n\nexport type TabsterDOMAttribute = Types.TabsterDOMAttribute;\n\nexport type { KeyborgFocusInEvent } from 'keyborg';\nexport { KEYBORG_FOCUSIN } from 'keyborg';\n\n// WARNING! ATTENTION! Tabster.Types was exported from here by mistake. To avoid breaking changes,\n// we are putting a snapshot of Tabster.Types@6.0.1 and marking the entire export as deprecated.\n// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as TabsterTypes6_0_1_DoNotUse from './tabster-types-6.0.1-do-not-use';\nexport {\n /** @deprecated (Do not use! Exposed by mistake and will be removed in the next major version.) */\n TabsterTypes6_0_1_DoNotUse as TabsterTypes,\n /** @deprecated Use element.dispatchEvent(new GroupperMoveFocusEvent({ action: GroupperMoveFocusActions.Escape })) */\n dispatchGroupperMoveFocusEvent,\n /** @deprecated Use element.dispatchEvent(new MoverMoveFocusEvent({ key: MoverKeys.ArrowDown })) */\n dispatchMoverMoveFocusEvent,\n};\n\n/**\n * For all exports below, we don't do wildcard exports to keep Tabster API flexible. We export only required\n * parts when they are needed.\n */\n\nexport { MoverMoveFocusEventName, MoverMoveFocusEvent, MoverKeys };\nexport type MoverMoveFocusEventDetail = EventsTypes.MoverMoveFocusEventDetail;\n\nexport { GroupperMoveFocusEventName, GroupperMoveFocusEvent, GroupperMoveFocusActions };\nexport type GroupperMoveFocusEventDetail = EventsTypes.GroupperMoveFocusEventDetail;\n\nexport { MoverMemorizedElementEventName, MoverMemorizedElementEvent };\nexport type MoverMemorizedElementEventDetail = EventsTypes.MoverMemorizedElementEventDetail;\n\nexport { TabsterMoveFocusEventName, TabsterMoveFocusEvent };\nexport type TabsterMoveFocusEventDetail = EventsTypes.TabsterMoveFocusEventDetail;\n"],"names":["useArrowNavigationGroup","useFocusableGroup","useFocusFinders","useFocusVisible","useFocusWithin","useKeyboardNavAttribute","useDangerousNeverHidden_unstable","useModalAttributes","useTabsterAttributes","useObservedElement","useFocusObserved","useMergedTabsterAttributes_unstable","useRestoreFocusSource","useRestoreFocusTarget","useUncontrolledFocus","useOnKeyboardNavigationChange","useIsNavigatingWithKeyboard","useSetKeyboardNavigation","useFocusedElementChange","useActivateModal","createCustomFocusIndicatorStyle","createFocusOutlineStyle","applyFocusVisiblePolyfill","dispatchGroupperMoveFocusEvent","dispatchMoverMoveFocusEvent","MoverMoveFocusEventName","MoverMoveFocusEvent","MoverKeys","GroupperMoveFocusEventName","GroupperMoveFocusEvent","GroupperMoveFocusActions","MoverMemorizedElementEventName","MoverMemorizedElementEvent","TabsterMoveFocusEventName","TabsterMoveFocusEvent","KEYBORG_FOCUSIN","TabsterTypes6_0_1_DoNotUse","TabsterTypes"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,iBAAiB,EACjBC,eAAe,EACfC,eAAe,EACfC,cAAc,EACdC,uBAAuB,EACvBC,gCAAgC,EAChCC,kBAAkB,EAClBC,oBAAoB,EACpBC,kBAAkB,EAClBC,gBAAgB,EAChBC,mCAAmC,EACnCC,qBAAqB,EACrBC,qBAAqB,EACrBC,oBAAoB,EACpBC,6BAA6B,EAC7BC,2BAA2B,EAC3BC,wBAAwB,EACxBC,uBAAuB,EACvBC,gBAAgB,QACX,gBAAgB;AAOvB,SAASC,+BAA+B,EAAEC,uBAAuB,QAAQ,gBAAgB;AASzF,SAASC,yBAAyB,QAAQ,gBAAgB;AAC1D,SAGEC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,uBAAuB,EACvBC,mBAAmB,EACnBC,SAAS,EACTC,0BAA0B,EAC1BC,sBAAsB,EACtBC,wBAAwB,EACxBC,8BAA8B,EAC9BC,0BAA0B,EAC1BC,yBAAyB,EACzBC,qBAAqB,QAChB,UAAU;AAKjB,SAASC,eAAe,QAAQ,UAAU;AAE1C,kGAAkG;AAClG,gGAAgG;AAChG,gEAAgE;AAChE,YAAYC,gCAAgC,mCAAmC;AAC/E,SACE,iGAAiG,GACjGA,8BAA8BC,YAAY,EAC1C,mHAAmH,GACnHd,8BAA8B,EAC9B,iGAAiG,GACjGC,2BAA2B,GAC3B;AAEF;;;CAGC,GAED,SAASC,uBAAuB,EAAEC,mBAAmB,EAAEC,SAAS,GAAG;AAGnE,SAASC,0BAA0B,EAAEC,sBAAsB,EAAEC,wBAAwB,GAAG;AAGxF,SAASC,8BAA8B,EAAEC,0BAA0B,GAAG;AAGtE,SAASC,yBAAyB,EAAEC,qBAAqB,GAAG"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n useArrowNavigationGroup,\n useFocusableGroup,\n useFocusFinders,\n useFocusVisible,\n useFocusWithin,\n useKeyboardNavAttribute,\n useDangerousNeverHidden_unstable,\n useModalAttributes,\n useTabsterAttributes,\n useObservedElement,\n useFocusObserved,\n useMergedTabsterAttributes_unstable,\n useRestoreFocusSource,\n useRestoreFocusTarget,\n useUncontrolledFocus,\n useOnKeyboardNavigationChange,\n useIsNavigatingWithKeyboard,\n useSetKeyboardNavigation,\n useFocusedElementChange,\n useActivateModal,\n} from './hooks/index';\nexport type {\n UseArrowNavigationGroupOptions,\n UseFocusableGroupOptions,\n UseModalAttributesOptions,\n} from './hooks/index';\n\nexport { createCustomFocusIndicatorStyle, createFocusOutlineStyle } from './focus/index';\n\nexport type {\n CreateCustomFocusIndicatorStyleOptions,\n CreateFocusOutlineStyleOptions,\n FocusOutlineOffset,\n FocusOutlineStyleOptions,\n} from './focus/index';\n\nexport { applyFocusVisiblePolyfill } from './focus/index';\nimport {\n type Types,\n type EventsTypes,\n dispatchGroupperMoveFocusEvent,\n dispatchMoverMoveFocusEvent,\n MoverMoveFocusEventName,\n MoverMoveFocusEvent,\n MoverKeys,\n GroupperMoveFocusEventName,\n GroupperMoveFocusEvent,\n GroupperMoveFocusActions,\n MoverMemorizedElementEventName,\n MoverMemorizedElementEvent,\n TabsterMoveFocusEventName,\n TabsterMoveFocusEvent,\n} from 'tabster';\n\nexport type TabsterDOMAttribute = Types.TabsterDOMAttribute;\n\nexport type { KeyborgFocusInEvent } from 'keyborg';\nexport { KEYBORG_FOCUSIN } from 'keyborg';\n\n// WARNING! ATTENTION! Tabster.Types was exported from here by mistake. To avoid breaking changes,\n// we are putting a snapshot of Tabster.Types@6.0.1 and marking the entire export as deprecated.\n// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as TabsterTypes6_0_1_DoNotUse from './tabster-types-6.0.1-do-not-use';\nexport {\n /** @deprecated (Do not use! Exposed by mistake and will be removed in the next major version.) */\n TabsterTypes6_0_1_DoNotUse as TabsterTypes,\n /** @deprecated Use element.dispatchEvent(new GroupperMoveFocusEvent({ action: GroupperMoveFocusActions.Escape })) */\n dispatchGroupperMoveFocusEvent,\n /** @deprecated Use element.dispatchEvent(new MoverMoveFocusEvent({ key: MoverKeys.ArrowDown })) */\n dispatchMoverMoveFocusEvent,\n};\n\n/**\n * For all exports below, we don't do wildcard exports to keep Tabster API flexible. We export only required\n * parts when they are needed.\n */\n\nexport { MoverMoveFocusEventName, MoverMoveFocusEvent, MoverKeys };\nexport type MoverMoveFocusEventDetail = EventsTypes.MoverMoveFocusEventDetail;\n\nexport { GroupperMoveFocusEventName, GroupperMoveFocusEvent, GroupperMoveFocusActions };\nexport type GroupperMoveFocusEventDetail = EventsTypes.GroupperMoveFocusEventDetail;\n\nexport { MoverMemorizedElementEventName, MoverMemorizedElementEvent };\nexport type MoverMemorizedElementEventDetail = EventsTypes.MoverMemorizedElementEventDetail;\n\nexport { TabsterMoveFocusEventName, TabsterMoveFocusEvent };\nexport type TabsterMoveFocusEventDetail = EventsTypes.TabsterMoveFocusEventDetail;\n"],"names":["useArrowNavigationGroup","useFocusableGroup","useFocusFinders","useFocusVisible","useFocusWithin","useKeyboardNavAttribute","useDangerousNeverHidden_unstable","useModalAttributes","useTabsterAttributes","useObservedElement","useFocusObserved","useMergedTabsterAttributes_unstable","useRestoreFocusSource","useRestoreFocusTarget","useUncontrolledFocus","useOnKeyboardNavigationChange","useIsNavigatingWithKeyboard","useSetKeyboardNavigation","useFocusedElementChange","useActivateModal","createCustomFocusIndicatorStyle","createFocusOutlineStyle","applyFocusVisiblePolyfill","dispatchGroupperMoveFocusEvent","dispatchMoverMoveFocusEvent","MoverMoveFocusEventName","MoverMoveFocusEvent","MoverKeys","GroupperMoveFocusEventName","GroupperMoveFocusEvent","GroupperMoveFocusActions","MoverMemorizedElementEventName","MoverMemorizedElementEvent","TabsterMoveFocusEventName","TabsterMoveFocusEvent","KEYBORG_FOCUSIN","TabsterTypes6_0_1_DoNotUse","TabsterTypes"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,iBAAiB,EACjBC,eAAe,EACfC,eAAe,EACfC,cAAc,EACdC,uBAAuB,EACvBC,gCAAgC,EAChCC,kBAAkB,EAClBC,oBAAoB,EACpBC,kBAAkB,EAClBC,gBAAgB,EAChBC,mCAAmC,EACnCC,qBAAqB,EACrBC,qBAAqB,EACrBC,oBAAoB,EACpBC,6BAA6B,EAC7BC,2BAA2B,EAC3BC,wBAAwB,EACxBC,uBAAuB,EACvBC,gBAAgB,QACX,mBAAgB;AAOvB,SAASC,+BAA+B,EAAEC,uBAAuB,QAAQ,mBAAgB;AASzF,SAASC,yBAAyB,QAAQ,mBAAgB;AAC1D,SAGEC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,uBAAuB,EACvBC,mBAAmB,EACnBC,SAAS,EACTC,0BAA0B,EAC1BC,sBAAsB,EACtBC,wBAAwB,EACxBC,8BAA8B,EAC9BC,0BAA0B,EAC1BC,yBAAyB,EACzBC,qBAAqB,QAChB,UAAU;AAKjB,SAASC,eAAe,QAAQ,UAAU;AAE1C,kGAAkG;AAClG,gGAAgG;AAChG,gEAAgE;AAChE,YAAYC,gCAAgC,sCAAmC;AAC/E,SACE,iGAAiG,GACjGA,8BAA8BC,YAAY,EAC1C,mHAAmH,GACnHd,8BAA8B,EAC9B,iGAAiG,GACjGC,2BAA2B,GAC3B;AAEF;;;CAGC,GAED,SAASC,uBAAuB,EAAEC,mBAAmB,EAAEC,SAAS,GAAG;AAGnE,SAASC,0BAA0B,EAAEC,sBAAsB,EAAEC,wBAAwB,GAAG;AAGxF,SAASC,8BAA8B,EAAEC,0BAA0B,GAAG;AAGtE,SAASC,yBAAyB,EAAEC,qBAAqB,GAAG"}
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "createCustomFocusIndicatorStyle", {
8
8
  return createCustomFocusIndicatorStyle;
9
9
  }
10
10
  });
11
- const _constants = require("./constants");
11
+ const _constants = require("./constants.cjs");
12
12
  function createCustomFocusIndicatorStyle(style, { selector: selectorType = _constants.defaultOptions.selector, customizeSelector = _constants.defaultOptions.customizeSelector } = _constants.defaultOptions) {
13
13
  return {
14
14
  [customizeSelector(createBaseSelector(selectorType))]: style
@@ -10,8 +10,8 @@ Object.defineProperty(exports, "createFocusOutlineStyle", {
10
10
  });
11
11
  const _reacttheme = require("@fluentui/react-theme");
12
12
  const _react = require("@griffel/react");
13
- const _createCustomFocusIndicatorStyle = require("./createCustomFocusIndicatorStyle");
14
- const _constants = require("./constants");
13
+ const _createCustomFocusIndicatorStyle = require("./createCustomFocusIndicatorStyle.cjs");
14
+ const _constants = require("./constants.cjs");
15
15
  /**
16
16
  * Get the position of the focus outline
17
17
  *
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "applyFocusVisiblePolyfill", {
10
10
  });
11
11
  const _reactutilities = require("@fluentui/react-utilities");
12
12
  const _keyborg = require("keyborg");
13
- const _constants = require("./constants");
13
+ const _constants = require("./constants.cjs");
14
14
  function applyFocusVisiblePolyfill(scope, targetWindow) {
15
15
  if (alreadyInScope(scope)) {
16
16
  // Focus visible polyfill already applied at this scope
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "applyFocusWithinPolyfill", {
9
9
  }
10
10
  });
11
11
  const _keyborg = require("keyborg");
12
- const _constants = require("./constants");
12
+ const _constants = require("./constants.cjs");
13
13
  function applyFocusWithinPolyfill(element, win) {
14
14
  const keyborg = (0, _keyborg.createKeyborg)(win);
15
15
  // When navigation mode changes to mouse, remove the focus-within selector
@@ -22,7 +22,7 @@ _export(exports, {
22
22
  return _createFocusOutlineStyle.createFocusOutlineStyle;
23
23
  }
24
24
  });
25
- const _createCustomFocusIndicatorStyle = require("./createCustomFocusIndicatorStyle");
26
- const _createFocusOutlineStyle = require("./createFocusOutlineStyle");
27
- const _focusVisiblePolyfill = require("./focusVisiblePolyfill");
28
- const _focusWithinPolyfill = require("./focusWithinPolyfill");
25
+ const _createCustomFocusIndicatorStyle = require("./createCustomFocusIndicatorStyle.cjs");
26
+ const _createFocusOutlineStyle = require("./createFocusOutlineStyle.cjs");
27
+ const _focusVisiblePolyfill = require("./focusVisiblePolyfill.cjs");
28
+ const _focusWithinPolyfill = require("./focusWithinPolyfill.cjs");
@@ -70,22 +70,22 @@ _export(exports, {
70
70
  return _useUncontrolledFocus.useUncontrolledFocus;
71
71
  }
72
72
  });
73
- const _useArrowNavigationGroup = require("./useArrowNavigationGroup");
74
- const _useFocusableGroup = require("./useFocusableGroup");
75
- const _useFocusFinders = require("./useFocusFinders");
76
- const _useFocusVisible = require("./useFocusVisible");
77
- const _useFocusWithin = require("./useFocusWithin");
78
- const _useKeyboardNavAttribute = require("./useKeyboardNavAttribute");
79
- const _useOnKeyboardNavigationChange = require("./useOnKeyboardNavigationChange");
80
- const _useModalAttributes = require("./useModalAttributes");
81
- const _useDangerousNeverHidden = require("./useDangerousNeverHidden");
82
- const _useTabsterAttributes = require("./useTabsterAttributes");
83
- const _useObservedElement = require("./useObservedElement");
84
- const _useMergeTabsterAttributes = require("./useMergeTabsterAttributes");
85
- const _useFocusObserved = require("./useFocusObserved");
86
- const _useRestoreFocus = require("./useRestoreFocus");
87
- const _useUncontrolledFocus = require("./useUncontrolledFocus");
88
- const _useIsNavigatingWithKeyboard = require("./useIsNavigatingWithKeyboard");
89
- const _useSetKeyboardNavigation = require("./useSetKeyboardNavigation");
90
- const _useFocusedElementChange = require("./useFocusedElementChange");
91
- const _useActivateModal = require("./useActivateModal");
73
+ const _useArrowNavigationGroup = require("./useArrowNavigationGroup.cjs");
74
+ const _useFocusableGroup = require("./useFocusableGroup.cjs");
75
+ const _useFocusFinders = require("./useFocusFinders.cjs");
76
+ const _useFocusVisible = require("./useFocusVisible.cjs");
77
+ const _useFocusWithin = require("./useFocusWithin.cjs");
78
+ const _useKeyboardNavAttribute = require("./useKeyboardNavAttribute.cjs");
79
+ const _useOnKeyboardNavigationChange = require("./useOnKeyboardNavigationChange.cjs");
80
+ const _useModalAttributes = require("./useModalAttributes.cjs");
81
+ const _useDangerousNeverHidden = require("./useDangerousNeverHidden.cjs");
82
+ const _useTabsterAttributes = require("./useTabsterAttributes.cjs");
83
+ const _useObservedElement = require("./useObservedElement.cjs");
84
+ const _useMergeTabsterAttributes = require("./useMergeTabsterAttributes.cjs");
85
+ const _useFocusObserved = require("./useFocusObserved.cjs");
86
+ const _useRestoreFocus = require("./useRestoreFocus.cjs");
87
+ const _useUncontrolledFocus = require("./useUncontrolledFocus.cjs");
88
+ const _useIsNavigatingWithKeyboard = require("./useIsNavigatingWithKeyboard.cjs");
89
+ const _useSetKeyboardNavigation = require("./useSetKeyboardNavigation.cjs");
90
+ const _useFocusedElementChange = require("./useFocusedElementChange.cjs");
91
+ const _useActivateModal = require("./useActivateModal.cjs");
@@ -13,7 +13,7 @@ const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildc
13
13
  const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
14
  const _tabster = require("tabster");
15
15
  const _reactutilities = require("@fluentui/react-utilities");
16
- const _useTabster = require("./useTabster");
16
+ const _useTabster = require("./useTabster.cjs");
17
17
  function useActivateModal() {
18
18
  const modalizerRefAPI = (0, _useTabster.useTabster)(_tabster.getModalizer);
19
19
  const [setActivateModalTimeout] = (0, _reactutilities.useTimeout)();
@@ -10,8 +10,8 @@ Object.defineProperty(exports, "useArrowNavigationGroup", {
10
10
  }
11
11
  });
12
12
  const _tabster = require("tabster");
13
- const _useTabsterAttributes = require("./useTabsterAttributes");
14
- const _useTabster = require("./useTabster");
13
+ const _useTabsterAttributes = require("./useTabsterAttributes.cjs");
14
+ const _useTabster = require("./useTabster.cjs");
15
15
  const useArrowNavigationGroup = (options = {})=>{
16
16
  const { circular, axis, memorizeCurrent = true, tabbable, ignoreDefaultKeydown, // eslint-disable-next-line @typescript-eslint/naming-convention
17
17
  unstable_hasDefault } = options;
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "useFocusFinders", {
12
12
  const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
13
  const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
14
  const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
15
- const _useTabster = require("./useTabster");
15
+ const _useTabster = require("./useTabster.cjs");
16
16
  const useFocusFinders = ()=>{
17
17
  const tabsterRef = (0, _useTabster.useTabster)();
18
18
  const { targetDocument } = (0, _reactsharedcontexts.useFluent_unstable)();
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "useFocusObserved", {
12
12
  const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
13
  const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
14
  const _tabster = require("tabster");
15
- const _useTabster = require("./useTabster");
15
+ const _useTabster = require("./useTabster.cjs");
16
16
  function useFocusObserved(name, options = {}) {
17
17
  const { timeout = 1000 } = options;
18
18
  const observedAPIRef = (0, _useTabster.useTabster)(_tabster.getObservedElement);
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "useFocusVisible", {
12
12
  const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
13
  const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
14
  const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
15
- const _focusVisiblePolyfill = require("../focus/focusVisiblePolyfill");
15
+ const _focusVisiblePolyfill = require("../focus/focusVisiblePolyfill.cjs");
16
16
  function useFocusVisible(options = {}) {
17
17
  const contextValue = (0, _reactsharedcontexts.useFluent_unstable)();
18
18
  const scopeRef = _react.useRef(null);
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "useFocusWithin", {
12
12
  const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
13
  const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
14
  const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
15
- const _focusWithinPolyfill = require("../focus/focusWithinPolyfill");
15
+ const _focusWithinPolyfill = require("../focus/focusWithinPolyfill.cjs");
16
16
  function useFocusWithin() {
17
17
  const { targetDocument } = (0, _reactsharedcontexts.useFluent_unstable)();
18
18
  const elementRef = _react.useRef(null);
@@ -10,8 +10,8 @@ Object.defineProperty(exports, "useFocusableGroup", {
10
10
  }
11
11
  });
12
12
  const _tabster = require("tabster");
13
- const _useTabsterAttributes = require("./useTabsterAttributes");
14
- const _useTabster = require("./useTabster");
13
+ const _useTabsterAttributes = require("./useTabsterAttributes.cjs");
14
+ const _useTabster = require("./useTabster.cjs");
15
15
  const useFocusableGroup = (options)=>{
16
16
  (0, _useTabster.useTabster)(_tabster.getGroupper);
17
17
  return (0, _useTabsterAttributes.useTabsterAttributes)({
@@ -14,7 +14,7 @@ const _tabster = require("tabster");
14
14
  const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
15
15
  const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
16
16
  const _reactutilities = require("@fluentui/react-utilities");
17
- const _useTabster = require("./useTabster");
17
+ const _useTabster = require("./useTabster.cjs");
18
18
  function useFocusedElementChange(callback) {
19
19
  const { targetDocument } = (0, _reactsharedcontexts.useFluent_unstable)();
20
20
  const listener = (0, _reactutilities.useEventCallback)(callback);
@@ -11,7 +11,7 @@ Object.defineProperty(exports, "useIsNavigatingWithKeyboard", {
11
11
  });
12
12
  const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
13
  const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
- const _useKeyborgRef = require("./useKeyborgRef");
14
+ const _useKeyborgRef = require("./useKeyborgRef.cjs");
15
15
  function useIsNavigatingWithKeyboard() {
16
16
  const keyborgRef = (0, _useKeyborgRef.useKeyborgRef)();
17
17
  return _react.useCallback(()=>{