@fluentui/react-aria 0.0.0-nightly-20220302-0405.1

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 (38) hide show
  1. package/CHANGELOG.json +1307 -0
  2. package/CHANGELOG.md +530 -0
  3. package/LICENSE +15 -0
  4. package/README.md +5 -0
  5. package/Spec.md +63 -0
  6. package/dist/react-aria.d.ts +25 -0
  7. package/lib/hooks/index.d.ts +1 -0
  8. package/lib/hooks/index.js +2 -0
  9. package/lib/hooks/index.js.map +1 -0
  10. package/lib/hooks/useARIAButton.d.ts +11 -0
  11. package/lib/hooks/useARIAButton.js +103 -0
  12. package/lib/hooks/useARIAButton.js.map +1 -0
  13. package/lib/index.d.ts +2 -0
  14. package/lib/index.js +3 -0
  15. package/lib/index.js.map +1 -0
  16. package/lib/tsdoc-metadata.json +11 -0
  17. package/lib/utils/index.d.ts +1 -0
  18. package/lib/utils/index.js +2 -0
  19. package/lib/utils/index.js.map +1 -0
  20. package/lib/utils/mergeARIADisabled.d.ts +7 -0
  21. package/lib/utils/mergeARIADisabled.js +15 -0
  22. package/lib/utils/mergeARIADisabled.js.map +1 -0
  23. package/lib-commonjs/hooks/index.d.ts +1 -0
  24. package/lib-commonjs/hooks/index.js +10 -0
  25. package/lib-commonjs/hooks/index.js.map +1 -0
  26. package/lib-commonjs/hooks/useARIAButton.d.ts +11 -0
  27. package/lib-commonjs/hooks/useARIAButton.js +114 -0
  28. package/lib-commonjs/hooks/useARIAButton.js.map +1 -0
  29. package/lib-commonjs/index.d.ts +2 -0
  30. package/lib-commonjs/index.js +12 -0
  31. package/lib-commonjs/index.js.map +1 -0
  32. package/lib-commonjs/utils/index.d.ts +1 -0
  33. package/lib-commonjs/utils/index.js +10 -0
  34. package/lib-commonjs/utils/index.js.map +1 -0
  35. package/lib-commonjs/utils/mergeARIADisabled.d.ts +7 -0
  36. package/lib-commonjs/utils/mergeARIADisabled.js +24 -0
  37. package/lib-commonjs/utils/mergeARIADisabled.js.map +1 -0
  38. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"../src/","sources":["hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC","sourcesContent":["export * from './useARIAButton';\n"]}
@@ -0,0 +1,11 @@
1
+ import type { ExtractSlotProps, ResolveShorthandFunction, Slot } from '@fluentui/react-utilities';
2
+ export declare type ARIAButtonSlotProps = ExtractSlotProps<Slot<'button', 'a'>> & {
3
+ disabled?: boolean;
4
+ disabledFocusable?: boolean;
5
+ };
6
+ /**
7
+ * Button keyboard handling, role, disabled and tabIndex implementation that ensures ARIA spec
8
+ * for multiple scenarios of shorthand properties. Ensuring 1st rule of ARIA for cases
9
+ * where no attribute addition is required.
10
+ */
11
+ export declare const useARIAButton: ResolveShorthandFunction<ARIAButtonSlotProps>;
@@ -0,0 +1,103 @@
1
+ import { Enter, Space } from '@fluentui/keyboard-keys';
2
+ import { resolveShorthand, useEventCallback } from '@fluentui/react-utilities';
3
+ /**
4
+ * Button keyboard handling, role, disabled and tabIndex implementation that ensures ARIA spec
5
+ * for multiple scenarios of shorthand properties. Ensuring 1st rule of ARIA for cases
6
+ * where no attribute addition is required.
7
+ */
8
+
9
+ export const useARIAButton = (shorthand, options) => {
10
+ var _a;
11
+
12
+ const shorthandProps = resolveShorthand(shorthand, options);
13
+ const {
14
+ disabled,
15
+ disabledFocusable,
16
+ onClick,
17
+ onKeyDown,
18
+ onKeyUp,
19
+ tabIndex
20
+ } = shorthandProps || {};
21
+ const onClickHandler = useEventCallback(ev => {
22
+ if (disabled || disabledFocusable) {
23
+ ev.preventDefault();
24
+ ev.stopPropagation();
25
+ } else {
26
+ onClick === null || onClick === void 0 ? void 0 : onClick(ev);
27
+ }
28
+ });
29
+ const onKeyDownHandler = useEventCallback(ev => {
30
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(ev);
31
+
32
+ if (ev.isDefaultPrevented()) {
33
+ return;
34
+ }
35
+
36
+ const key = ev.key;
37
+
38
+ if ((disabled || disabledFocusable) && (key === Enter || key === Space)) {
39
+ ev.preventDefault();
40
+ ev.stopPropagation();
41
+ return;
42
+ }
43
+
44
+ if (key === Space) {
45
+ ev.preventDefault();
46
+ return;
47
+ } // If enter is pressed, activate the button
48
+ else if (key === Enter) {
49
+ ev.preventDefault();
50
+ ev.currentTarget.click();
51
+ }
52
+ });
53
+ const onKeyupHandler = useEventCallback(ev => {
54
+ onKeyUp === null || onKeyUp === void 0 ? void 0 : onKeyUp(ev);
55
+
56
+ if (ev.isDefaultPrevented()) {
57
+ return;
58
+ }
59
+
60
+ const key = ev.key;
61
+
62
+ if ((disabled || disabledFocusable) && (key === Enter || key === Space)) {
63
+ ev.preventDefault();
64
+ ev.stopPropagation();
65
+ return;
66
+ }
67
+
68
+ if (key === Space) {
69
+ ev.preventDefault();
70
+ ev.currentTarget.click();
71
+ }
72
+ });
73
+
74
+ if (shorthandProps) {
75
+ // If a <button> tag is to be rendered we just need to set disabled and aria-disabled correctly
76
+ if (shorthandProps.as === 'button' || shorthandProps.as === undefined) {
77
+ shorthandProps.disabled = disabled && !disabledFocusable;
78
+ shorthandProps['aria-disabled'] = disabledFocusable ? true : undefined; // Undefine events if disabledFocusable is passed in
79
+
80
+ if (disabledFocusable) {
81
+ shorthandProps.onClick = undefined;
82
+ shorthandProps.onKeyDown = undefined;
83
+ shorthandProps.onKeyUp = undefined;
84
+ }
85
+ } // If an <a> tag is to be rendered we have to remove disabled and type, and set aria-disabled, role and tabIndex.
86
+ else {
87
+ delete shorthandProps.disabled;
88
+ shorthandProps['aria-disabled'] = disabled || disabledFocusable;
89
+ shorthandProps.href = disabled ? undefined : shorthandProps.href;
90
+ shorthandProps.onClick = onClickHandler;
91
+ shorthandProps.onKeyDown = onKeyDownHandler;
92
+ shorthandProps.onKeyUp = onKeyupHandler;
93
+ shorthandProps.role = (_a = shorthandProps.role) !== null && _a !== void 0 ? _a : 'button';
94
+ shorthandProps.tabIndex = disabled && !disabledFocusable ? undefined : tabIndex !== null && tabIndex !== void 0 ? tabIndex : 0;
95
+ } // Remove non-DOM disabledFocusable prop
96
+
97
+
98
+ delete shorthandProps.disabledFocusable;
99
+ }
100
+
101
+ return shorthandProps;
102
+ };
103
+ //# sourceMappingURL=useARIAButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["hooks/useARIAButton.ts"],"names":[],"mappings":"AAAA,SAAS,KAAT,EAAgB,KAAhB,QAA6B,yBAA7B;AACA,SAAS,gBAAT,EAA2B,gBAA3B,QAAmD,2BAAnD;AAQA;;;;AAIG;;AACH,OAAO,MAAM,aAAa,GAAkD,CAAC,SAAD,EAAY,OAAZ,KAAuB;;;AACjG,QAAM,cAAc,GAAG,gBAAgB,CAAC,SAAD,EAAY,OAAZ,CAAvC;AAEA,QAAM;AAAE,IAAA,QAAF;AAAY,IAAA,iBAAZ;AAA+B,IAAA,OAA/B;AAAwC,IAAA,SAAxC;AAAmD,IAAA,OAAnD;AAA4D,IAAA;AAA5D,MAA0E,cAAc,IAC5F,EADF;AAGA,QAAM,cAAc,GAAmC,gBAAgB,CAAC,EAAE,IAAG;AAC3E,QAAI,QAAQ,IAAI,iBAAhB,EAAmC;AACjC,MAAA,EAAE,CAAC,cAAH;AACA,MAAA,EAAE,CAAC,eAAH;AACD,KAHD,MAGO;AACL,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAG,EAAH,CAAP;AACD;AACF,GAPsE,CAAvE;AASA,QAAM,gBAAgB,GAAqC,gBAAgB,CAAC,EAAE,IAAG;AAC/E,IAAA,SAAS,KAAA,IAAT,IAAA,SAAS,KAAA,KAAA,CAAT,GAAS,KAAA,CAAT,GAAA,SAAS,CAAG,EAAH,CAAT;;AAEA,QAAI,EAAE,CAAC,kBAAH,EAAJ,EAA6B;AAC3B;AACD;;AAED,UAAM,GAAG,GAAG,EAAE,CAAC,GAAf;;AAEA,QAAI,CAAC,QAAQ,IAAI,iBAAb,MAAoC,GAAG,KAAK,KAAR,IAAiB,GAAG,KAAK,KAA7D,CAAJ,EAAyE;AACvE,MAAA,EAAE,CAAC,cAAH;AACA,MAAA,EAAE,CAAC,eAAH;AACA;AACD;;AAED,QAAI,GAAG,KAAK,KAAZ,EAAmB;AACjB,MAAA,EAAE,CAAC,cAAH;AACA;AACD,KAHD,CAKA;AALA,SAMK,IAAI,GAAG,KAAK,KAAZ,EAAmB;AACtB,MAAA,EAAE,CAAC,cAAH;AACA,MAAA,EAAE,CAAC,aAAH,CAAiB,KAAjB;AACD;AACF,GAzB0E,CAA3E;AA2BA,QAAM,cAAc,GAAmC,gBAAgB,CAAC,EAAE,IAAG;AAC3E,IAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAG,EAAH,CAAP;;AAEA,QAAI,EAAE,CAAC,kBAAH,EAAJ,EAA6B;AAC3B;AACD;;AAED,UAAM,GAAG,GAAG,EAAE,CAAC,GAAf;;AAEA,QAAI,CAAC,QAAQ,IAAI,iBAAb,MAAoC,GAAG,KAAK,KAAR,IAAiB,GAAG,KAAK,KAA7D,CAAJ,EAAyE;AACvE,MAAA,EAAE,CAAC,cAAH;AACA,MAAA,EAAE,CAAC,eAAH;AACA;AACD;;AAED,QAAI,GAAG,KAAK,KAAZ,EAAmB;AACjB,MAAA,EAAE,CAAC,cAAH;AACA,MAAA,EAAE,CAAC,aAAH,CAAiB,KAAjB;AACD;AACF,GAnBsE,CAAvE;;AAqBA,MAAI,cAAJ,EAAoB;AAClB;AACA,QAAI,cAAc,CAAC,EAAf,KAAsB,QAAtB,IAAkC,cAAc,CAAC,EAAf,KAAsB,SAA5D,EAAuE;AACrE,MAAA,cAAc,CAAC,QAAf,GAA0B,QAAQ,IAAI,CAAC,iBAAvC;AACA,MAAA,cAAc,CAAC,eAAD,CAAd,GAAkC,iBAAiB,GAAG,IAAH,GAAU,SAA7D,CAFqE,CAIrE;;AACA,UAAI,iBAAJ,EAAuB;AACrB,QAAA,cAAc,CAAC,OAAf,GAAyB,SAAzB;AACA,QAAA,cAAc,CAAC,SAAf,GAA2B,SAA3B;AACA,QAAA,cAAc,CAAC,OAAf,GAAyB,SAAzB;AACD;AACF,KAVD,CAYA;AAZA,SAaK;AACH,aAAO,cAAc,CAAC,QAAtB;AACA,MAAA,cAAc,CAAC,eAAD,CAAd,GAAkC,QAAQ,IAAI,iBAA9C;AACC,MAAA,cAA6C,CAAC,IAA9C,GAAqD,QAAQ,GAC1D,SAD0D,GAEzD,cAA6C,CAAC,IAFlD;AAGD,MAAA,cAAc,CAAC,OAAf,GAAyB,cAAzB;AACA,MAAA,cAAc,CAAC,SAAf,GAA2B,gBAA3B;AACA,MAAA,cAAc,CAAC,OAAf,GAAyB,cAAzB;AACA,MAAA,cAAc,CAAC,IAAf,GAAsB,CAAA,EAAA,GAAA,cAAc,CAAC,IAAf,MAAmB,IAAnB,IAAmB,EAAA,KAAA,KAAA,CAAnB,GAAmB,EAAnB,GAAuB,QAA7C;AACA,MAAA,cAAc,CAAC,QAAf,GAA0B,QAAQ,IAAI,CAAC,iBAAb,GAAiC,SAAjC,GAA6C,QAAQ,KAAA,IAAR,IAAA,QAAQ,KAAA,KAAA,CAAR,GAAA,QAAA,GAAY,CAAnF;AACD,KA1BiB,CA4BlB;;;AACA,WAAO,cAAc,CAAC,iBAAtB;AACD;;AAED,SAAO,cAAP;AACD,CAhGM","sourcesContent":["import { Enter, Space } from '@fluentui/keyboard-keys';\nimport { resolveShorthand, useEventCallback } from '@fluentui/react-utilities';\nimport type { ExtractSlotProps, ResolveShorthandFunction, Slot } from '@fluentui/react-utilities';\n\nexport type ARIAButtonSlotProps = ExtractSlotProps<Slot<'button', 'a'>> & {\n disabled?: boolean;\n disabledFocusable?: boolean;\n};\n\n/**\n * Button keyboard handling, role, disabled and tabIndex implementation that ensures ARIA spec\n * for multiple scenarios of shorthand properties. Ensuring 1st rule of ARIA for cases\n * where no attribute addition is required.\n */\nexport const useARIAButton: ResolveShorthandFunction<ARIAButtonSlotProps> = (shorthand, options) => {\n const shorthandProps = resolveShorthand(shorthand, options);\n\n const { disabled, disabledFocusable, onClick, onKeyDown, onKeyUp, tabIndex } = (shorthandProps ||\n {}) as ARIAButtonSlotProps;\n\n const onClickHandler: ARIAButtonSlotProps['onClick'] = useEventCallback(ev => {\n if (disabled || disabledFocusable) {\n ev.preventDefault();\n ev.stopPropagation();\n } else {\n onClick?.(ev);\n }\n });\n\n const onKeyDownHandler: ARIAButtonSlotProps['onKeyDown'] = useEventCallback(ev => {\n onKeyDown?.(ev);\n\n if (ev.isDefaultPrevented()) {\n return;\n }\n\n const key = ev.key;\n\n if ((disabled || disabledFocusable) && (key === Enter || key === Space)) {\n ev.preventDefault();\n ev.stopPropagation();\n return;\n }\n\n if (key === Space) {\n ev.preventDefault();\n return;\n }\n\n // If enter is pressed, activate the button\n else if (key === Enter) {\n ev.preventDefault();\n ev.currentTarget.click();\n }\n });\n\n const onKeyupHandler: ARIAButtonSlotProps['onKeyUp'] = useEventCallback(ev => {\n onKeyUp?.(ev);\n\n if (ev.isDefaultPrevented()) {\n return;\n }\n\n const key = ev.key;\n\n if ((disabled || disabledFocusable) && (key === Enter || key === Space)) {\n ev.preventDefault();\n ev.stopPropagation();\n return;\n }\n\n if (key === Space) {\n ev.preventDefault();\n ev.currentTarget.click();\n }\n });\n\n if (shorthandProps) {\n // If a <button> tag is to be rendered we just need to set disabled and aria-disabled correctly\n if (shorthandProps.as === 'button' || shorthandProps.as === undefined) {\n shorthandProps.disabled = disabled && !disabledFocusable;\n shorthandProps['aria-disabled'] = disabledFocusable ? true : undefined;\n\n // Undefine events if disabledFocusable is passed in\n if (disabledFocusable) {\n shorthandProps.onClick = undefined;\n shorthandProps.onKeyDown = undefined;\n shorthandProps.onKeyUp = undefined;\n }\n }\n\n // If an <a> tag is to be rendered we have to remove disabled and type, and set aria-disabled, role and tabIndex.\n else {\n delete shorthandProps.disabled;\n shorthandProps['aria-disabled'] = disabled || disabledFocusable;\n (shorthandProps as JSX.IntrinsicElements['a']).href = disabled\n ? undefined\n : (shorthandProps as JSX.IntrinsicElements['a']).href;\n shorthandProps.onClick = onClickHandler;\n shorthandProps.onKeyDown = onKeyDownHandler;\n shorthandProps.onKeyUp = onKeyupHandler;\n shorthandProps.role = shorthandProps.role ?? 'button';\n shorthandProps.tabIndex = disabled && !disabledFocusable ? undefined : tabIndex ?? 0;\n }\n\n // Remove non-DOM disabledFocusable prop\n delete shorthandProps.disabledFocusable;\n }\n\n return shorthandProps;\n};\n"],"sourceRoot":"../src/"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './hooks/index';
2
+ export * from './utils/index';
package/lib/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './hooks/index';
2
+ export * from './utils/index';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"../src/","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC","sourcesContent":["export * from './hooks/index';\nexport * from './utils/index';\n"]}
@@ -0,0 +1,11 @@
1
+ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.
2
+ // It should be published with your NPM package. It should not be tracked by Git.
3
+ {
4
+ "tsdocVersion": "0.12",
5
+ "toolPackages": [
6
+ {
7
+ "packageName": "@microsoft/api-extractor",
8
+ "packageVersion": "7.18.1"
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1 @@
1
+ export * from './mergeARIADisabled';
@@ -0,0 +1,2 @@
1
+ export * from './mergeARIADisabled';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"../src/","sources":["utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC","sourcesContent":["export * from './mergeARIADisabled';\n"]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Merges disabled declaration with `aria-disabled`
3
+ */
4
+ export declare function mergeARIADisabled(shorthand: {
5
+ 'aria-disabled'?: string | boolean;
6
+ disabled?: boolean;
7
+ }): boolean;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Merges disabled declaration with `aria-disabled`
3
+ */
4
+ export function mergeARIADisabled(shorthand) {
5
+ var _a;
6
+
7
+ const disabled = (_a = shorthand.disabled) !== null && _a !== void 0 ? _a : shorthand['aria-disabled'];
8
+
9
+ if (typeof disabled === 'string') {
10
+ return disabled === 'false' ? false : true;
11
+ }
12
+
13
+ return disabled !== null && disabled !== void 0 ? disabled : false;
14
+ }
15
+ //# sourceMappingURL=mergeARIADisabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils/mergeARIADisabled.ts"],"names":[],"mappings":"AAAA;;AAEG;AACH,OAAM,SAAU,iBAAV,CAA4B,SAA5B,EAAiG;;;AACrG,QAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,QAAV,MAAkB,IAAlB,IAAkB,EAAA,KAAA,KAAA,CAAlB,GAAkB,EAAlB,GAAsB,SAAS,CAAC,eAAD,CAAhD;;AACA,MAAI,OAAO,QAAP,KAAoB,QAAxB,EAAkC;AAChC,WAAO,QAAQ,KAAK,OAAb,GAAuB,KAAvB,GAA+B,IAAtC;AACD;;AACD,SAAO,QAAQ,KAAA,IAAR,IAAA,QAAQ,KAAA,KAAA,CAAR,GAAA,QAAA,GAAY,KAAnB;AACD","sourcesContent":["/**\n * Merges disabled declaration with `aria-disabled`\n */\nexport function mergeARIADisabled(shorthand: { 'aria-disabled'?: string | boolean; disabled?: boolean }) {\n const disabled = shorthand.disabled ?? shorthand['aria-disabled'];\n if (typeof disabled === 'string') {\n return disabled === 'false' ? false : true;\n }\n return disabled ?? false;\n}\n"],"sourceRoot":"../src/"}
@@ -0,0 +1 @@
1
+ export * from './useARIAButton';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ const tslib_1 = /*#__PURE__*/require("tslib");
8
+
9
+ tslib_1.__exportStar(require("./useARIAButton"), exports);
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["hooks/index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,EAAA,OAAA","sourcesContent":["export * from './useARIAButton';\n"],"sourceRoot":"../src/"}
@@ -0,0 +1,11 @@
1
+ import type { ExtractSlotProps, ResolveShorthandFunction, Slot } from '@fluentui/react-utilities';
2
+ export declare type ARIAButtonSlotProps = ExtractSlotProps<Slot<'button', 'a'>> & {
3
+ disabled?: boolean;
4
+ disabledFocusable?: boolean;
5
+ };
6
+ /**
7
+ * Button keyboard handling, role, disabled and tabIndex implementation that ensures ARIA spec
8
+ * for multiple scenarios of shorthand properties. Ensuring 1st rule of ARIA for cases
9
+ * where no attribute addition is required.
10
+ */
11
+ export declare const useARIAButton: ResolveShorthandFunction<ARIAButtonSlotProps>;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useARIAButton = void 0;
7
+
8
+ const keyboard_keys_1 = /*#__PURE__*/require("@fluentui/keyboard-keys");
9
+
10
+ const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
11
+ /**
12
+ * Button keyboard handling, role, disabled and tabIndex implementation that ensures ARIA spec
13
+ * for multiple scenarios of shorthand properties. Ensuring 1st rule of ARIA for cases
14
+ * where no attribute addition is required.
15
+ */
16
+
17
+
18
+ const useARIAButton = (shorthand, options) => {
19
+ var _a;
20
+
21
+ const shorthandProps = react_utilities_1.resolveShorthand(shorthand, options);
22
+ const {
23
+ disabled,
24
+ disabledFocusable,
25
+ onClick,
26
+ onKeyDown,
27
+ onKeyUp,
28
+ tabIndex
29
+ } = shorthandProps || {};
30
+ const onClickHandler = react_utilities_1.useEventCallback(ev => {
31
+ if (disabled || disabledFocusable) {
32
+ ev.preventDefault();
33
+ ev.stopPropagation();
34
+ } else {
35
+ onClick === null || onClick === void 0 ? void 0 : onClick(ev);
36
+ }
37
+ });
38
+ const onKeyDownHandler = react_utilities_1.useEventCallback(ev => {
39
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(ev);
40
+
41
+ if (ev.isDefaultPrevented()) {
42
+ return;
43
+ }
44
+
45
+ const key = ev.key;
46
+
47
+ if ((disabled || disabledFocusable) && (key === keyboard_keys_1.Enter || key === keyboard_keys_1.Space)) {
48
+ ev.preventDefault();
49
+ ev.stopPropagation();
50
+ return;
51
+ }
52
+
53
+ if (key === keyboard_keys_1.Space) {
54
+ ev.preventDefault();
55
+ return;
56
+ } // If enter is pressed, activate the button
57
+ else if (key === keyboard_keys_1.Enter) {
58
+ ev.preventDefault();
59
+ ev.currentTarget.click();
60
+ }
61
+ });
62
+ const onKeyupHandler = react_utilities_1.useEventCallback(ev => {
63
+ onKeyUp === null || onKeyUp === void 0 ? void 0 : onKeyUp(ev);
64
+
65
+ if (ev.isDefaultPrevented()) {
66
+ return;
67
+ }
68
+
69
+ const key = ev.key;
70
+
71
+ if ((disabled || disabledFocusable) && (key === keyboard_keys_1.Enter || key === keyboard_keys_1.Space)) {
72
+ ev.preventDefault();
73
+ ev.stopPropagation();
74
+ return;
75
+ }
76
+
77
+ if (key === keyboard_keys_1.Space) {
78
+ ev.preventDefault();
79
+ ev.currentTarget.click();
80
+ }
81
+ });
82
+
83
+ if (shorthandProps) {
84
+ // If a <button> tag is to be rendered we just need to set disabled and aria-disabled correctly
85
+ if (shorthandProps.as === 'button' || shorthandProps.as === undefined) {
86
+ shorthandProps.disabled = disabled && !disabledFocusable;
87
+ shorthandProps['aria-disabled'] = disabledFocusable ? true : undefined; // Undefine events if disabledFocusable is passed in
88
+
89
+ if (disabledFocusable) {
90
+ shorthandProps.onClick = undefined;
91
+ shorthandProps.onKeyDown = undefined;
92
+ shorthandProps.onKeyUp = undefined;
93
+ }
94
+ } // If an <a> tag is to be rendered we have to remove disabled and type, and set aria-disabled, role and tabIndex.
95
+ else {
96
+ delete shorthandProps.disabled;
97
+ shorthandProps['aria-disabled'] = disabled || disabledFocusable;
98
+ shorthandProps.href = disabled ? undefined : shorthandProps.href;
99
+ shorthandProps.onClick = onClickHandler;
100
+ shorthandProps.onKeyDown = onKeyDownHandler;
101
+ shorthandProps.onKeyUp = onKeyupHandler;
102
+ shorthandProps.role = (_a = shorthandProps.role) !== null && _a !== void 0 ? _a : 'button';
103
+ shorthandProps.tabIndex = disabled && !disabledFocusable ? undefined : tabIndex !== null && tabIndex !== void 0 ? tabIndex : 0;
104
+ } // Remove non-DOM disabledFocusable prop
105
+
106
+
107
+ delete shorthandProps.disabledFocusable;
108
+ }
109
+
110
+ return shorthandProps;
111
+ };
112
+
113
+ exports.useARIAButton = useARIAButton;
114
+ //# sourceMappingURL=useARIAButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["hooks/useARIAButton.ts"],"names":[],"mappings":"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","sourcesContent":["import { Enter, Space } from '@fluentui/keyboard-keys';\nimport { resolveShorthand, useEventCallback } from '@fluentui/react-utilities';\nimport type { ExtractSlotProps, ResolveShorthandFunction, Slot } from '@fluentui/react-utilities';\n\nexport type ARIAButtonSlotProps = ExtractSlotProps<Slot<'button', 'a'>> & {\n disabled?: boolean;\n disabledFocusable?: boolean;\n};\n\n/**\n * Button keyboard handling, role, disabled and tabIndex implementation that ensures ARIA spec\n * for multiple scenarios of shorthand properties. Ensuring 1st rule of ARIA for cases\n * where no attribute addition is required.\n */\nexport const useARIAButton: ResolveShorthandFunction<ARIAButtonSlotProps> = (shorthand, options) => {\n const shorthandProps = resolveShorthand(shorthand, options);\n\n const { disabled, disabledFocusable, onClick, onKeyDown, onKeyUp, tabIndex } = (shorthandProps ||\n {}) as ARIAButtonSlotProps;\n\n const onClickHandler: ARIAButtonSlotProps['onClick'] = useEventCallback(ev => {\n if (disabled || disabledFocusable) {\n ev.preventDefault();\n ev.stopPropagation();\n } else {\n onClick?.(ev);\n }\n });\n\n const onKeyDownHandler: ARIAButtonSlotProps['onKeyDown'] = useEventCallback(ev => {\n onKeyDown?.(ev);\n\n if (ev.isDefaultPrevented()) {\n return;\n }\n\n const key = ev.key;\n\n if ((disabled || disabledFocusable) && (key === Enter || key === Space)) {\n ev.preventDefault();\n ev.stopPropagation();\n return;\n }\n\n if (key === Space) {\n ev.preventDefault();\n return;\n }\n\n // If enter is pressed, activate the button\n else if (key === Enter) {\n ev.preventDefault();\n ev.currentTarget.click();\n }\n });\n\n const onKeyupHandler: ARIAButtonSlotProps['onKeyUp'] = useEventCallback(ev => {\n onKeyUp?.(ev);\n\n if (ev.isDefaultPrevented()) {\n return;\n }\n\n const key = ev.key;\n\n if ((disabled || disabledFocusable) && (key === Enter || key === Space)) {\n ev.preventDefault();\n ev.stopPropagation();\n return;\n }\n\n if (key === Space) {\n ev.preventDefault();\n ev.currentTarget.click();\n }\n });\n\n if (shorthandProps) {\n // If a <button> tag is to be rendered we just need to set disabled and aria-disabled correctly\n if (shorthandProps.as === 'button' || shorthandProps.as === undefined) {\n shorthandProps.disabled = disabled && !disabledFocusable;\n shorthandProps['aria-disabled'] = disabledFocusable ? true : undefined;\n\n // Undefine events if disabledFocusable is passed in\n if (disabledFocusable) {\n shorthandProps.onClick = undefined;\n shorthandProps.onKeyDown = undefined;\n shorthandProps.onKeyUp = undefined;\n }\n }\n\n // If an <a> tag is to be rendered we have to remove disabled and type, and set aria-disabled, role and tabIndex.\n else {\n delete shorthandProps.disabled;\n shorthandProps['aria-disabled'] = disabled || disabledFocusable;\n (shorthandProps as JSX.IntrinsicElements['a']).href = disabled\n ? undefined\n : (shorthandProps as JSX.IntrinsicElements['a']).href;\n shorthandProps.onClick = onClickHandler;\n shorthandProps.onKeyDown = onKeyDownHandler;\n shorthandProps.onKeyUp = onKeyupHandler;\n shorthandProps.role = shorthandProps.role ?? 'button';\n shorthandProps.tabIndex = disabled && !disabledFocusable ? undefined : tabIndex ?? 0;\n }\n\n // Remove non-DOM disabledFocusable prop\n delete shorthandProps.disabledFocusable;\n }\n\n return shorthandProps;\n};\n"],"sourceRoot":"../src/"}
@@ -0,0 +1,2 @@
1
+ export * from './hooks/index';
2
+ export * from './utils/index';
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ const tslib_1 = /*#__PURE__*/require("tslib");
8
+
9
+ tslib_1.__exportStar(require("./hooks/index"), exports);
10
+
11
+ tslib_1.__exportStar(require("./utils/index"), exports);
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,eAAA,CAAA,EAAA,OAAA;;AACA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,eAAA,CAAA,EAAA,OAAA","sourcesContent":["export * from './hooks/index';\nexport * from './utils/index';\n"],"sourceRoot":"../src/"}
@@ -0,0 +1 @@
1
+ export * from './mergeARIADisabled';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ const tslib_1 = /*#__PURE__*/require("tslib");
8
+
9
+ tslib_1.__exportStar(require("./mergeARIADisabled"), exports);
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils/index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,qBAAA,CAAA,EAAA,OAAA","sourcesContent":["export * from './mergeARIADisabled';\n"],"sourceRoot":"../src/"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Merges disabled declaration with `aria-disabled`
3
+ */
4
+ export declare function mergeARIADisabled(shorthand: {
5
+ 'aria-disabled'?: string | boolean;
6
+ disabled?: boolean;
7
+ }): boolean;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.mergeARIADisabled = void 0;
7
+ /**
8
+ * Merges disabled declaration with `aria-disabled`
9
+ */
10
+
11
+ function mergeARIADisabled(shorthand) {
12
+ var _a;
13
+
14
+ const disabled = (_a = shorthand.disabled) !== null && _a !== void 0 ? _a : shorthand['aria-disabled'];
15
+
16
+ if (typeof disabled === 'string') {
17
+ return disabled === 'false' ? false : true;
18
+ }
19
+
20
+ return disabled !== null && disabled !== void 0 ? disabled : false;
21
+ }
22
+
23
+ exports.mergeARIADisabled = mergeARIADisabled;
24
+ //# sourceMappingURL=mergeARIADisabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils/mergeARIADisabled.ts"],"names":[],"mappings":";;;;;;AAAA;;AAEG;;AACH,SAAgB,iBAAhB,CAAkC,SAAlC,EAAuG;;;AACrG,QAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,QAAV,MAAkB,IAAlB,IAAkB,EAAA,KAAA,KAAA,CAAlB,GAAkB,EAAlB,GAAsB,SAAS,CAAC,eAAD,CAAhD;;AACA,MAAI,OAAO,QAAP,KAAoB,QAAxB,EAAkC;AAChC,WAAO,QAAQ,KAAK,OAAb,GAAuB,KAAvB,GAA+B,IAAtC;AACD;;AACD,SAAO,QAAQ,KAAA,IAAR,IAAA,QAAQ,KAAA,KAAA,CAAR,GAAA,QAAA,GAAY,KAAnB;AACD;;AAND,OAAA,CAAA,iBAAA,GAAA,iBAAA","sourcesContent":["/**\n * Merges disabled declaration with `aria-disabled`\n */\nexport function mergeARIADisabled(shorthand: { 'aria-disabled'?: string | boolean; disabled?: boolean }) {\n const disabled = shorthand.disabled ?? shorthand['aria-disabled'];\n if (typeof disabled === 'string') {\n return disabled === 'false' ? false : true;\n }\n return disabled ?? false;\n}\n"],"sourceRoot":"../src/"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@fluentui/react-aria",
3
+ "version": "0.0.0-nightly-20220302-0405.1",
4
+ "description": "React helper to ensure ARIA",
5
+ "main": "lib-commonjs/index.js",
6
+ "module": "lib/index.js",
7
+ "typings": "lib/index.d.ts",
8
+ "sideEffects": false,
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/microsoft/fluentui"
12
+ },
13
+ "license": "MIT",
14
+ "scripts": {
15
+ "build": "just-scripts build",
16
+ "clean": "just-scripts clean",
17
+ "code-style": "just-scripts code-style",
18
+ "just": "just-scripts",
19
+ "lint": "just-scripts lint",
20
+ "start": "yarn storybook",
21
+ "test": "jest --passWithNoTests",
22
+ "docs": "api-extractor run --config=config/api-extractor.local.json --local",
23
+ "build:local": "tsc -p ./tsconfig.lib.json --module esnext --emitDeclarationOnly && node ../../scripts/typescript/normalize-import --output ./dist/packages/react-aria/src && yarn docs",
24
+ "storybook": "node ../../scripts/storybook/runner",
25
+ "type-check": "tsc -b tsconfig.json"
26
+ },
27
+ "devDependencies": {
28
+ "@fluentui/eslint-plugin": "*",
29
+ "@fluentui/react-conformance": "*",
30
+ "@fluentui/scripts": "^1.0.0",
31
+ "@types/enzyme": "3.10.3",
32
+ "@types/enzyme-adapter-react-16": "1.0.3",
33
+ "@types/react": "16.9.42",
34
+ "@types/react-dom": "16.9.10",
35
+ "@types/react-test-renderer": "^16.0.0",
36
+ "enzyme": "~3.10.0",
37
+ "enzyme-adapter-react-16": "^1.15.0",
38
+ "react": "16.8.6",
39
+ "react-dom": "16.8.6",
40
+ "react-test-renderer": "^16.3.0"
41
+ },
42
+ "dependencies": {
43
+ "@fluentui/keyboard-keys": "0.0.0-nightly-20220302-0405.1",
44
+ "@fluentui/react-utilities": "0.0.0-nightly-20220302-0405.1",
45
+ "tslib": "^2.1.0"
46
+ },
47
+ "peerDependencies": {
48
+ "@types/react": ">=16.8.0 <18.0.0",
49
+ "@types/react-dom": ">=16.8.0 <18.0.0",
50
+ "react": ">=16.8.0 <18.0.0",
51
+ "react-dom": ">=16.8.0 <18.0.0"
52
+ },
53
+ "beachball": {
54
+ "disallowedChangeTypes": [
55
+ "major",
56
+ "minor",
57
+ "patch"
58
+ ]
59
+ }
60
+ }