@fluentui/react-tabster 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.
- package/CHANGELOG.json +1981 -0
- package/CHANGELOG.md +821 -0
- package/LICENSE +15 -0
- package/README.md +42 -0
- package/dist/react-tabster.d.ts +122 -0
- package/lib/hooks/index.d.ts +7 -0
- package/lib/hooks/index.js +8 -0
- package/lib/hooks/index.js.map +1 -0
- package/lib/hooks/useArrowNavigationGroup.d.ts +22 -0
- package/lib/hooks/useArrowNavigationGroup.js +37 -0
- package/lib/hooks/useArrowNavigationGroup.js.map +1 -0
- package/lib/hooks/useFocusFinders.d.ts +11 -0
- package/lib/hooks/useFocusFinders.js +36 -0
- package/lib/hooks/useFocusFinders.js.map +1 -0
- package/lib/hooks/useFocusIndicatorStyle.d.ts +33 -0
- package/lib/hooks/useFocusIndicatorStyle.js +84 -0
- package/lib/hooks/useFocusIndicatorStyle.js.map +1 -0
- package/lib/hooks/useFocusableGroup.d.ts +12 -0
- package/lib/hooks/useFocusableGroup.js +38 -0
- package/lib/hooks/useFocusableGroup.js.map +1 -0
- package/lib/hooks/useKeyboardNavAttribute.d.ts +5 -0
- package/lib/hooks/useKeyboardNavAttribute.js +41 -0
- package/lib/hooks/useKeyboardNavAttribute.js.map +1 -0
- package/lib/hooks/useModalAttributes.d.ts +22 -0
- package/lib/hooks/useModalAttributes.js +42 -0
- package/lib/hooks/useModalAttributes.js.map +1 -0
- package/lib/hooks/useTabster.d.ts +9 -0
- package/lib/hooks/useTabster.js +30 -0
- package/lib/hooks/useTabster.js.map +1 -0
- package/lib/hooks/useTabsterAttributes.d.ts +5 -0
- package/lib/hooks/useTabsterAttributes.js +13 -0
- package/lib/hooks/useTabsterAttributes.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/symbols.d.ts +2 -0
- package/lib/symbols.js +3 -0
- package/lib/symbols.js.map +1 -0
- package/lib/tsdoc-metadata.json +11 -0
- package/lib-commonjs/hooks/index.d.ts +7 -0
- package/lib-commonjs/hooks/index.js +22 -0
- package/lib-commonjs/hooks/index.js.map +1 -0
- package/lib-commonjs/hooks/useArrowNavigationGroup.d.ts +22 -0
- package/lib-commonjs/hooks/useArrowNavigationGroup.js +49 -0
- package/lib-commonjs/hooks/useArrowNavigationGroup.js.map +1 -0
- package/lib-commonjs/hooks/useFocusFinders.d.ts +11 -0
- package/lib-commonjs/hooks/useFocusFinders.js +47 -0
- package/lib-commonjs/hooks/useFocusFinders.js.map +1 -0
- package/lib-commonjs/hooks/useFocusIndicatorStyle.d.ts +33 -0
- package/lib-commonjs/hooks/useFocusIndicatorStyle.js +97 -0
- package/lib-commonjs/hooks/useFocusIndicatorStyle.js.map +1 -0
- package/lib-commonjs/hooks/useFocusableGroup.d.ts +12 -0
- package/lib-commonjs/hooks/useFocusableGroup.js +50 -0
- package/lib-commonjs/hooks/useFocusableGroup.js.map +1 -0
- package/lib-commonjs/hooks/useKeyboardNavAttribute.d.ts +5 -0
- package/lib-commonjs/hooks/useKeyboardNavAttribute.js +54 -0
- package/lib-commonjs/hooks/useKeyboardNavAttribute.js.map +1 -0
- package/lib-commonjs/hooks/useModalAttributes.d.ts +22 -0
- package/lib-commonjs/hooks/useModalAttributes.js +55 -0
- package/lib-commonjs/hooks/useModalAttributes.js.map +1 -0
- package/lib-commonjs/hooks/useTabster.d.ts +9 -0
- package/lib-commonjs/hooks/useTabster.js +41 -0
- package/lib-commonjs/hooks/useTabster.js.map +1 -0
- package/lib-commonjs/hooks/useTabsterAttributes.d.ts +5 -0
- package/lib-commonjs/hooks/useTabsterAttributes.js +24 -0
- package/lib-commonjs/hooks/useTabsterAttributes.js.map +1 -0
- package/lib-commonjs/index.d.ts +1 -0
- package/lib-commonjs/index.js +10 -0
- package/lib-commonjs/index.js.map +1 -0
- package/lib-commonjs/symbols.d.ts +2 -0
- package/lib-commonjs/symbols.js +9 -0
- package/lib-commonjs/symbols.js.map +1 -0
- package/package.json +59 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.useModalAttributes = void 0;
|
7
|
+
|
8
|
+
const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
|
9
|
+
|
10
|
+
const useTabsterAttributes_1 = /*#__PURE__*/require("./useTabsterAttributes");
|
11
|
+
|
12
|
+
const tabster_1 = /*#__PURE__*/require("tabster");
|
13
|
+
|
14
|
+
const useTabster_1 = /*#__PURE__*/require("./useTabster");
|
15
|
+
/**
|
16
|
+
* Applies modal dialog behaviour through DOM attributes
|
17
|
+
* Modal element will focus trap and hide other content on the page
|
18
|
+
* The trigger element will be focused if focus is lost after the modal element is removed
|
19
|
+
*
|
20
|
+
* @returns DOM attributes to apply to the modal element and its trigger
|
21
|
+
*/
|
22
|
+
|
23
|
+
|
24
|
+
const useModalAttributes = (options = {}) => {
|
25
|
+
const {
|
26
|
+
trapFocus,
|
27
|
+
alwaysFocusable
|
28
|
+
} = options;
|
29
|
+
const tabster = useTabster_1.useTabster(); // Initializes the modalizer and deloser APIs
|
30
|
+
|
31
|
+
if (tabster) {
|
32
|
+
tabster_1.getModalizer(tabster);
|
33
|
+
tabster_1.getDeloser(tabster);
|
34
|
+
}
|
35
|
+
|
36
|
+
const id = react_utilities_1.useId('modal-');
|
37
|
+
const modalAttributes = useTabsterAttributes_1.useTabsterAttributes({
|
38
|
+
deloser: {},
|
39
|
+
modalizer: {
|
40
|
+
id,
|
41
|
+
isOthersAccessible: !trapFocus,
|
42
|
+
isAlwaysAccessible: alwaysFocusable
|
43
|
+
}
|
44
|
+
});
|
45
|
+
const triggerAttributes = useTabsterAttributes_1.useTabsterAttributes({
|
46
|
+
deloser: {}
|
47
|
+
});
|
48
|
+
return {
|
49
|
+
modalAttributes,
|
50
|
+
triggerAttributes
|
51
|
+
};
|
52
|
+
};
|
53
|
+
|
54
|
+
exports.useModalAttributes = useModalAttributes;
|
55
|
+
//# sourceMappingURL=useModalAttributes.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["hooks/useModalAttributes.ts"],"names":[],"mappings":";;;;;;;AAAA,MAAA,iBAAA,gBAAA,OAAA,CAAA,2BAAA,CAAA;;AACA,MAAA,sBAAA,gBAAA,OAAA,CAAA,wBAAA,CAAA;;AACA,MAAA,SAAA,gBAAA,OAAA,CAAA,SAAA,CAAA;;AACA,MAAA,YAAA,gBAAA,OAAA,CAAA,cAAA,CAAA;AAcA;;;;;;AAMG;;;AACI,MAAM,kBAAkB,GAAG,CAChC,OAAA,GAAqC,EADL,KAE8E;AAC9G,QAAM;AAAE,IAAA,SAAF;AAAa,IAAA;AAAb,MAAiC,OAAvC;AACA,QAAM,OAAO,GAAG,YAAA,CAAA,UAAA,EAAhB,CAF8G,CAG9G;;AACA,MAAI,OAAJ,EAAa;AACX,IAAA,SAAA,CAAA,YAAA,CAAa,OAAb;AACA,IAAA,SAAA,CAAA,UAAA,CAAW,OAAX;AACD;;AAED,QAAM,EAAE,GAAG,iBAAA,CAAA,KAAA,CAAM,QAAN,CAAX;AACA,QAAM,eAAe,GAAG,sBAAA,CAAA,oBAAA,CAAqB;AAC3C,IAAA,OAAO,EAAE,EADkC;AAE3C,IAAA,SAAS,EAAE;AAAE,MAAA,EAAF;AAAM,MAAA,kBAAkB,EAAE,CAAC,SAA3B;AAAsC,MAAA,kBAAkB,EAAE;AAA1D;AAFgC,GAArB,CAAxB;AAKA,QAAM,iBAAiB,GAAG,sBAAA,CAAA,oBAAA,CAAqB;AAC7C,IAAA,OAAO,EAAE;AADoC,GAArB,CAA1B;AAIA,SAAO;AAAE,IAAA,eAAF;AAAmB,IAAA;AAAnB,GAAP;AACD,CAtBM;;AAAM,OAAA,CAAA,kBAAA,GAAkB,kBAAlB","sourcesContent":["import { useId } from '@fluentui/react-utilities';\nimport { useTabsterAttributes } from './useTabsterAttributes';\nimport { getDeloser, getModalizer, Types as TabsterTypes } from 'tabster';\nimport { useTabster } from './useTabster';\n\nexport interface UseModalAttributesOptions {\n /**\n * Traps focus inside the elements the attributes are applied\n */\n trapFocus?: boolean;\n\n /**\n * Always reachabled in Tab order\n */\n alwaysFocusable?: boolean;\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 } = options;\n const tabster = useTabster();\n // Initializes the modalizer and deloser APIs\n if (tabster) {\n getModalizer(tabster);\n getDeloser(tabster);\n }\n\n const id = useId('modal-');\n const modalAttributes = useTabsterAttributes({\n deloser: {},\n modalizer: { id, isOthersAccessible: !trapFocus, isAlwaysAccessible: alwaysFocusable },\n });\n\n const triggerAttributes = useTabsterAttributes({\n deloser: {},\n });\n\n return { modalAttributes, triggerAttributes };\n};\n"],"sourceRoot":"../src/"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { Types as TabsterTypes } from 'tabster';
|
2
|
+
/**
|
3
|
+
* Tries to get a tabster instance on the current window or creates a new one
|
4
|
+
* Since Tabster is single instance only, feel free to call this hook to ensure Tabster exists if necessary
|
5
|
+
*
|
6
|
+
* @internal
|
7
|
+
* @returns Tabster core instance
|
8
|
+
*/
|
9
|
+
export declare const useTabster: () => TabsterTypes.TabsterCore | null;
|
@@ -0,0 +1,41 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.useTabster = void 0;
|
7
|
+
|
8
|
+
const react_shared_contexts_1 = /*#__PURE__*/require("@fluentui/react-shared-contexts");
|
9
|
+
|
10
|
+
const tabster_1 = /*#__PURE__*/require("tabster");
|
11
|
+
/**
|
12
|
+
* Tries to get a tabster instance on the current window or creates a new one
|
13
|
+
* Since Tabster is single instance only, feel free to call this hook to ensure Tabster exists if necessary
|
14
|
+
*
|
15
|
+
* @internal
|
16
|
+
* @returns Tabster core instance
|
17
|
+
*/
|
18
|
+
|
19
|
+
|
20
|
+
const useTabster = () => {
|
21
|
+
var _a;
|
22
|
+
|
23
|
+
const {
|
24
|
+
targetDocument
|
25
|
+
} = react_shared_contexts_1.useFluent();
|
26
|
+
const defaultView = (targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.defaultView) || undefined;
|
27
|
+
const tabsterOptions = {
|
28
|
+
autoRoot: {},
|
29
|
+
controlTab: false
|
30
|
+
};
|
31
|
+
|
32
|
+
if (!defaultView) {
|
33
|
+
return null;
|
34
|
+
} // TODO: worth memoizing once more tabster options are used
|
35
|
+
|
36
|
+
|
37
|
+
return (_a = tabster_1.getCurrentTabster(defaultView)) !== null && _a !== void 0 ? _a : tabster_1.createTabster(defaultView, tabsterOptions);
|
38
|
+
};
|
39
|
+
|
40
|
+
exports.useTabster = useTabster;
|
41
|
+
//# sourceMappingURL=useTabster.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["hooks/useTabster.ts"],"names":[],"mappings":";;;;;;;AAAA,MAAA,uBAAA,gBAAA,OAAA,CAAA,iCAAA,CAAA;;AACA,MAAA,SAAA,gBAAA,OAAA,CAAA,SAAA,CAAA;AAEA;;;;;;AAMG;;;AACI,MAAM,UAAU,GAAG,MAAsC;;;AAC9D,QAAM;AAAE,IAAA;AAAF,MAAqB,uBAAA,CAAA,SAAA,EAA3B;AAEA,QAAM,WAAW,GAAG,CAAA,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAA,cAAc,CAAE,WAAhB,KAA+B,SAAnD;AACA,QAAM,cAAc,GAAkC;AAAE,IAAA,QAAQ,EAAE,EAAZ;AAAgB,IAAA,UAAU,EAAE;AAA5B,GAAtD;;AAEA,MAAI,CAAC,WAAL,EAAkB;AAChB,WAAO,IAAP;AACD,GAR6D,CAU9D;;;AACA,SAAO,CAAA,EAAA,GAAA,SAAA,CAAA,iBAAA,CAAkB,WAAlB,CAAA,MAA8B,IAA9B,IAA8B,EAAA,KAAA,KAAA,CAA9B,GAA8B,EAA9B,GAAkC,SAAA,CAAA,aAAA,CAAc,WAAd,EAA2B,cAA3B,CAAzC;AACD,CAZM;;AAAM,OAAA,CAAA,UAAA,GAAU,UAAV","sourcesContent":["import { useFluent } from '@fluentui/react-shared-contexts';\nimport { getCurrentTabster, createTabster, Types as TabsterTypes } from 'tabster';\n\n/**\n * Tries to get a tabster instance on the current window or creates a new one\n * Since Tabster is single instance only, feel free to call this hook to ensure Tabster exists if necessary\n *\n * @internal\n * @returns Tabster core instance\n */\nexport const useTabster = (): TabsterTypes.TabsterCore | null => {\n const { targetDocument } = useFluent();\n\n const defaultView = targetDocument?.defaultView || undefined;\n const tabsterOptions: TabsterTypes.TabsterCoreProps = { autoRoot: {}, controlTab: false };\n\n if (!defaultView) {\n return null;\n }\n\n // TODO: worth memoizing once more tabster options are used\n return getCurrentTabster(defaultView) ?? createTabster(defaultView, tabsterOptions);\n};\n"],"sourceRoot":"../src/"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.useTabsterAttributes = void 0;
|
7
|
+
|
8
|
+
const tabster_1 = /*#__PURE__*/require("tabster");
|
9
|
+
|
10
|
+
const useTabster_1 = /*#__PURE__*/require("./useTabster");
|
11
|
+
/**
|
12
|
+
* Hook that returns tabster attributes while ensuring tabster exists
|
13
|
+
*/
|
14
|
+
|
15
|
+
|
16
|
+
const useTabsterAttributes = props => {
|
17
|
+
// A tabster instance is not necessary to generate tabster attributes
|
18
|
+
// but calling the hook will ensure that a tabster instance exists internally and avoids consumers doing the same
|
19
|
+
useTabster_1.useTabster();
|
20
|
+
return tabster_1.getTabsterAttribute(props);
|
21
|
+
};
|
22
|
+
|
23
|
+
exports.useTabsterAttributes = useTabsterAttributes;
|
24
|
+
//# sourceMappingURL=useTabsterAttributes.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["hooks/useTabsterAttributes.ts"],"names":[],"mappings":";;;;;;;AAAA,MAAA,SAAA,gBAAA,OAAA,CAAA,SAAA,CAAA;;AACA,MAAA,YAAA,gBAAA,OAAA,CAAA,cAAA,CAAA;AAEA;;AAEG;;;AACI,MAAM,oBAAoB,GAAI,KAAD,IAAgF;AAClH;AACA;AACA,EAAA,YAAA,CAAA,UAAA;AAEA,SAAO,SAAA,CAAA,mBAAA,CAAoB,KAApB,CAAP;AACD,CANM;;AAAM,OAAA,CAAA,oBAAA,GAAoB,oBAApB","sourcesContent":["import { getTabsterAttribute, Types as TabsterTypes } from 'tabster';\nimport { useTabster } from './useTabster';\n\n/**\n * Hook that returns tabster attributes while ensuring tabster exists\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 return getTabsterAttribute(props);\n};\n"],"sourceRoot":"../src/"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './hooks/index';
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,eAAA,CAAA,EAAA,OAAA","sourcesContent":["export * from './hooks/index';\n"],"sourceRoot":"../src/"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.KEYBOARD_NAV_SELECTOR = exports.KEYBOARD_NAV_ATTRIBUTE = void 0;
|
7
|
+
exports.KEYBOARD_NAV_ATTRIBUTE = 'data-keyboard-nav';
|
8
|
+
exports.KEYBOARD_NAV_SELECTOR = `:global([${exports.KEYBOARD_NAV_ATTRIBUTE}])`;
|
9
|
+
//# sourceMappingURL=symbols.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["symbols.ts"],"names":[],"mappings":";;;;;;AAAa,OAAA,CAAA,sBAAA,GAAyB,mBAAzB;AACA,OAAA,CAAA,qBAAA,GAAwB,YAAY,OAAA,CAAA,sBAAsB,IAA1D","sourcesContent":["export const KEYBOARD_NAV_ATTRIBUTE = 'data-keyboard-nav' as const;\nexport const KEYBOARD_NAV_SELECTOR = `:global([${KEYBOARD_NAV_ATTRIBUTE}])` as const;\n"],"sourceRoot":"../src/"}
|
package/package.json
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
{
|
2
|
+
"name": "@fluentui/react-tabster",
|
3
|
+
"version": "0.0.0-nightly-20220302-0405.1",
|
4
|
+
"description": "Utilities for focus management and facade for tabster",
|
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
|
+
"storybook": "node ../../scripts/storybook/runner",
|
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-tabster/src && yarn docs",
|
24
|
+
"start": "yarn storybook",
|
25
|
+
"type-check": "tsc -b tsconfig.json"
|
26
|
+
},
|
27
|
+
"devDependencies": {
|
28
|
+
"@fluentui/eslint-plugin": "*",
|
29
|
+
"@fluentui/scripts": "^1.0.0",
|
30
|
+
"@types/react": "16.9.42",
|
31
|
+
"@types/react-dom": "16.9.10",
|
32
|
+
"@types/react-test-renderer": "^16.0.0",
|
33
|
+
"react": "16.8.6",
|
34
|
+
"react-dom": "16.8.6",
|
35
|
+
"react-test-renderer": "^16.3.0"
|
36
|
+
},
|
37
|
+
"dependencies": {
|
38
|
+
"@griffel/react": "1.0.0",
|
39
|
+
"@fluentui/react-shared-contexts": "0.0.0-nightly-20220302-0405.1",
|
40
|
+
"@fluentui/react-theme": "0.0.0-nightly-20220302-0405.1",
|
41
|
+
"@fluentui/react-utilities": "0.0.0-nightly-20220302-0405.1",
|
42
|
+
"keyborg": "^1.1.0",
|
43
|
+
"tabster": "^1.1.1",
|
44
|
+
"tslib": "^2.1.0"
|
45
|
+
},
|
46
|
+
"peerDependencies": {
|
47
|
+
"@types/react": ">=16.8.0 <18.0.0",
|
48
|
+
"@types/react-dom": ">=16.8.0 <18.0.0",
|
49
|
+
"react": ">=16.8.0 <18.0.0",
|
50
|
+
"react-dom": ">=16.8.0 <18.0.0"
|
51
|
+
},
|
52
|
+
"beachball": {
|
53
|
+
"disallowedChangeTypes": [
|
54
|
+
"major",
|
55
|
+
"minor",
|
56
|
+
"patch"
|
57
|
+
]
|
58
|
+
}
|
59
|
+
}
|