@fluentui/react-tabster 9.0.0-rc.6 → 9.0.0-rc.9
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 +95 -4
- package/CHANGELOG.md +117 -86
- package/README.md +4 -11
- package/dist/{react-tabster.d.ts → index.d.ts} +11 -5
- package/lib/{symbols.d.ts → focus/constants.d.ts} +4 -0
- package/lib/{symbols.js → focus/constants.js} +5 -1
- package/lib/focus/constants.js.map +1 -0
- package/lib/focus/createCustomFocusIndicatorStyle.d.ts +12 -0
- package/lib/focus/createCustomFocusIndicatorStyle.js +18 -0
- package/lib/focus/createCustomFocusIndicatorStyle.js.map +1 -0
- package/{lib-commonjs/hooks/useFocusIndicatorStyle.d.ts → lib/focus/createFocusOutlineStyle.d.ts} +4 -13
- package/lib/{hooks/useFocusIndicatorStyle.js → focus/createFocusOutlineStyle.js} +14 -33
- package/lib/focus/createFocusOutlineStyle.js.map +1 -0
- package/lib/focus/index.d.ts +2 -0
- package/lib/focus/index.js +3 -0
- package/lib/focus/index.js.map +1 -0
- package/lib/hooks/index.d.ts +0 -1
- package/lib/hooks/index.js +0 -1
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useArrowNavigationGroup.d.ts +4 -0
- package/lib/hooks/useArrowNavigationGroup.js +2 -1
- package/lib/hooks/useArrowNavigationGroup.js.map +1 -1
- package/lib/hooks/useKeyboardNavAttribute.js +1 -1
- package/lib/hooks/useKeyboardNavAttribute.js.map +1 -1
- package/lib/index.d.ts +4 -2
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib-commonjs/{symbols.d.ts → focus/constants.d.ts} +4 -0
- package/lib-commonjs/{symbols.js → focus/constants.js} +6 -2
- package/lib-commonjs/focus/constants.js.map +1 -0
- package/lib-commonjs/focus/createCustomFocusIndicatorStyle.d.ts +12 -0
- package/lib-commonjs/focus/createCustomFocusIndicatorStyle.js +28 -0
- package/lib-commonjs/focus/createCustomFocusIndicatorStyle.js.map +1 -0
- package/{lib/hooks/useFocusIndicatorStyle.d.ts → lib-commonjs/focus/createFocusOutlineStyle.d.ts} +4 -13
- package/lib-commonjs/{hooks/useFocusIndicatorStyle.js → focus/createFocusOutlineStyle.js} +18 -38
- package/lib-commonjs/focus/createFocusOutlineStyle.js.map +1 -0
- package/lib-commonjs/focus/index.d.ts +2 -0
- package/lib-commonjs/focus/index.js +12 -0
- package/lib-commonjs/focus/index.js.map +1 -0
- package/lib-commonjs/hooks/index.d.ts +0 -1
- package/lib-commonjs/hooks/index.js +0 -2
- package/lib-commonjs/hooks/index.js.map +1 -1
- package/lib-commonjs/hooks/useArrowNavigationGroup.d.ts +4 -0
- package/lib-commonjs/hooks/useArrowNavigationGroup.js +2 -1
- package/lib-commonjs/hooks/useArrowNavigationGroup.js.map +1 -1
- package/lib-commonjs/hooks/useKeyboardNavAttribute.js +3 -3
- package/lib-commonjs/hooks/useKeyboardNavAttribute.js.map +1 -1
- package/lib-commonjs/index.d.ts +4 -2
- package/lib-commonjs/index.js +16 -13
- package/lib-commonjs/index.js.map +1 -1
- package/package.json +7 -7
- package/lib/hooks/useFocusIndicatorStyle.js.map +0 -1
- package/lib/symbols.js.map +0 -1
- package/lib-commonjs/hooks/useFocusIndicatorStyle.js.map +0 -1
- package/lib-commonjs/symbols.js.map +0 -1
package/README.md
CHANGED
@@ -4,15 +4,12 @@
|
|
4
4
|
|
5
5
|
Library for focus management that leverages [tabster](https://github.com/microsoft/tabster).
|
6
6
|
|
7
|
-
The provider needs to be wrapped around your application:
|
8
|
-
|
9
|
-
```tsx
|
10
|
-
<TabsterProvider>{children}</TabsterProvider>
|
11
|
-
```
|
12
|
-
|
13
7
|
The API currently only supports declarative data-\* attributes that are returned using the exported react hooks:
|
14
8
|
|
15
9
|
```tsx
|
10
|
+
import * as React from 'react';
|
11
|
+
import { useArrowNavigationGroup } from '@fluentui/react-tabster';
|
12
|
+
|
16
13
|
const Item: React.FC = ({ children }) => <div tabIndex={0}>Item</div>;
|
17
14
|
|
18
15
|
const ArrowNavigationExample: React.FC = ({ children }) => {
|
@@ -31,10 +28,6 @@ const ArrowNavigationExample: React.FC = ({ children }) => {
|
|
31
28
|
};
|
32
29
|
|
33
30
|
const App: React.FC = () => {
|
34
|
-
return
|
35
|
-
<TabsterProvider>
|
36
|
-
<ArrowNavigationExample />
|
37
|
-
</TabsterProvider>
|
38
|
-
);
|
31
|
+
return <ArrowNavigationExample />;
|
39
32
|
};
|
40
33
|
```
|
@@ -9,9 +9,9 @@ import { Types } from 'tabster';
|
|
9
9
|
* @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes
|
10
10
|
* @param options - Configure the style of the focus outline
|
11
11
|
*/
|
12
|
-
export declare const createCustomFocusIndicatorStyle: (style: GriffelStyle,
|
12
|
+
export declare const createCustomFocusIndicatorStyle: (style: GriffelStyle, { selector }?: CreateCustomFocusIndicatorStyleOptions) => GriffelStyle;
|
13
13
|
|
14
|
-
export declare interface
|
14
|
+
export declare interface CreateCustomFocusIndicatorStyleOptions {
|
15
15
|
selector?: 'focus' | 'focus-within';
|
16
16
|
}
|
17
17
|
|
@@ -22,9 +22,11 @@ export declare interface CreateFocusIndicatorStyleRuleOptions {
|
|
22
22
|
* @param options - Configure the style of the focus outline
|
23
23
|
* @returns focus outline styles object for @see makeStyles
|
24
24
|
*/
|
25
|
-
export declare const createFocusOutlineStyle: (
|
26
|
-
|
27
|
-
|
25
|
+
export declare const createFocusOutlineStyle: ({ selector, style, }?: CreateFocusOutlineStyleOptions) => GriffelStyle;
|
26
|
+
|
27
|
+
export declare interface CreateFocusOutlineStyleOptions extends CreateCustomFocusIndicatorStyleOptions {
|
28
|
+
style?: Partial<FocusOutlineStyleOptions>;
|
29
|
+
}
|
28
30
|
|
29
31
|
export declare type FocusOutlineOffset = Record<'top' | 'bottom' | 'left' | 'right', string>;
|
30
32
|
|
@@ -60,6 +62,10 @@ export declare interface UseArrowNavigationGroupOptions {
|
|
60
62
|
* available) when tabbing from outside of the group
|
61
63
|
*/
|
62
64
|
memorizeCurrent?: boolean;
|
65
|
+
/**
|
66
|
+
* Allow tabbing within the arrow navigation group items.
|
67
|
+
*/
|
68
|
+
tabbable?: boolean;
|
63
69
|
}
|
64
70
|
|
65
71
|
/**
|
@@ -1,3 +1,7 @@
|
|
1
1
|
export const KEYBOARD_NAV_ATTRIBUTE = 'data-keyboard-nav';
|
2
2
|
export const KEYBOARD_NAV_SELECTOR = `:global([${KEYBOARD_NAV_ATTRIBUTE}])`;
|
3
|
-
|
3
|
+
export const defaultOptions = {
|
4
|
+
style: {},
|
5
|
+
selector: 'focus'
|
6
|
+
};
|
7
|
+
//# sourceMappingURL=constants.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["focus/constants.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,sBAAsB,GAAG,mBAA/B;AACP,OAAO,MAAM,qBAAqB,GAAG,YAAY,sBAAsB,IAAhE;AACP,OAAO,MAAM,cAAc,GAAG;AAC5B,EAAA,KAAK,EAAE,EADqB;AAE5B,EAAA,QAAQ,EAAE;AAFkB,CAAvB","sourcesContent":["export const KEYBOARD_NAV_ATTRIBUTE = 'data-keyboard-nav' as const;\nexport const KEYBOARD_NAV_SELECTOR = `:global([${KEYBOARD_NAV_ATTRIBUTE}])` as const;\nexport const defaultOptions = {\n style: {},\n selector: 'focus',\n} as const;\n"],"sourceRoot":"../src/"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import type { GriffelStyle } from '@griffel/react';
|
2
|
+
export interface CreateCustomFocusIndicatorStyleOptions {
|
3
|
+
selector?: 'focus' | 'focus-within';
|
4
|
+
}
|
5
|
+
/**
|
6
|
+
* Creates a style for @see makeStyles that includes the necessary selectors for focus.
|
7
|
+
* Should be used only when @see createFocusOutlineStyle does not fit requirements
|
8
|
+
*
|
9
|
+
* @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes
|
10
|
+
* @param options - Configure the style of the focus outline
|
11
|
+
*/
|
12
|
+
export declare const createCustomFocusIndicatorStyle: (style: GriffelStyle, { selector }?: CreateCustomFocusIndicatorStyleOptions) => GriffelStyle;
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { KEYBOARD_NAV_SELECTOR, defaultOptions } from './constants';
|
2
|
+
/**
|
3
|
+
* Creates a style for @see makeStyles that includes the necessary selectors for focus.
|
4
|
+
* Should be used only when @see createFocusOutlineStyle does not fit requirements
|
5
|
+
*
|
6
|
+
* @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes
|
7
|
+
* @param options - Configure the style of the focus outline
|
8
|
+
*/
|
9
|
+
|
10
|
+
export const createCustomFocusIndicatorStyle = (style, {
|
11
|
+
selector = defaultOptions.selector
|
12
|
+
} = defaultOptions) => ({
|
13
|
+
':focus-visible': {
|
14
|
+
outlineStyle: 'none'
|
15
|
+
},
|
16
|
+
[`${KEYBOARD_NAV_SELECTOR} :${selector}`]: style
|
17
|
+
});
|
18
|
+
//# sourceMappingURL=createCustomFocusIndicatorStyle.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["focus/createCustomFocusIndicatorStyle.ts"],"names":[],"mappings":"AAAA,SAAS,qBAAT,EAAgC,cAAhC,QAAsD,aAAtD;AAOA;;;;;;AAMG;;AACH,OAAO,MAAM,+BAA+B,GAAG,CAC7C,KAD6C,EAE7C;AAAE,EAAA,QAAQ,GAAG,cAAc,CAAC;AAA5B,IAAiF,cAFpC,MAG3B;AAClB,oBAAkB;AAChB,IAAA,YAAY,EAAE;AADE,GADA;AAIlB,GAAC,GAAG,qBAAqB,KAAK,QAAQ,EAAtC,GAA2C;AAJzB,CAH2B,CAAxC","sourcesContent":["import { KEYBOARD_NAV_SELECTOR, defaultOptions } from './constants';\nimport type { GriffelStyle } from '@griffel/react';\n\nexport interface CreateCustomFocusIndicatorStyleOptions {\n selector?: 'focus' | 'focus-within';\n}\n\n/**\n * Creates a style for @see makeStyles that includes the necessary selectors for focus.\n * Should be used only when @see createFocusOutlineStyle does not fit requirements\n *\n * @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes\n * @param options - Configure the style of the focus outline\n */\nexport const createCustomFocusIndicatorStyle = (\n style: GriffelStyle,\n { selector = defaultOptions.selector }: CreateCustomFocusIndicatorStyleOptions = defaultOptions,\n): GriffelStyle => ({\n ':focus-visible': {\n outlineStyle: 'none',\n },\n [`${KEYBOARD_NAV_SELECTOR} :${selector}`]: style,\n});\n"],"sourceRoot":"../src/"}
|
package/{lib-commonjs/hooks/useFocusIndicatorStyle.d.ts → lib/focus/createFocusOutlineStyle.d.ts}
RENAMED
@@ -1,4 +1,5 @@
|
|
1
1
|
import type { GriffelStyle } from '@griffel/react';
|
2
|
+
import { CreateCustomFocusIndicatorStyleOptions } from './createCustomFocusIndicatorStyle';
|
2
3
|
export declare type FocusOutlineOffset = Record<'top' | 'bottom' | 'left' | 'right', string>;
|
3
4
|
export declare type FocusOutlineStyleOptions = {
|
4
5
|
/**
|
@@ -10,8 +11,8 @@ export declare type FocusOutlineStyleOptions = {
|
|
10
11
|
outlineWidth: string;
|
11
12
|
outlineOffset?: string | FocusOutlineOffset;
|
12
13
|
};
|
13
|
-
export interface
|
14
|
-
|
14
|
+
export interface CreateFocusOutlineStyleOptions extends CreateCustomFocusIndicatorStyleOptions {
|
15
|
+
style?: Partial<FocusOutlineStyleOptions>;
|
15
16
|
}
|
16
17
|
/**
|
17
18
|
* NOTE: The element with the focus outline needs to have `position: relative` so that the
|
@@ -20,14 +21,4 @@ export interface CreateFocusIndicatorStyleRuleOptions {
|
|
20
21
|
* @param options - Configure the style of the focus outline
|
21
22
|
* @returns focus outline styles object for @see makeStyles
|
22
23
|
*/
|
23
|
-
export declare const createFocusOutlineStyle: (
|
24
|
-
style: Partial<FocusOutlineStyleOptions>;
|
25
|
-
} & CreateFocusIndicatorStyleRuleOptions) => GriffelStyle;
|
26
|
-
/**
|
27
|
-
* Creates a style for @see makeStyles that includes the necessary selectors for focus.
|
28
|
-
* Should be used only when @see createFocusOutlineStyle does not fit requirements
|
29
|
-
*
|
30
|
-
* @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes
|
31
|
-
* @param options - Configure the style of the focus outline
|
32
|
-
*/
|
33
|
-
export declare const createCustomFocusIndicatorStyle: (style: GriffelStyle, options?: CreateFocusIndicatorStyleRuleOptions) => GriffelStyle;
|
24
|
+
export declare const createFocusOutlineStyle: ({ selector, style, }?: CreateFocusOutlineStyleOptions) => GriffelStyle;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { tokens } from '@fluentui/react-theme';
|
2
|
-
import { KEYBOARD_NAV_SELECTOR } from '../symbols';
|
3
2
|
import { shorthands } from '@griffel/react';
|
3
|
+
import { createCustomFocusIndicatorStyle } from './createCustomFocusIndicatorStyle';
|
4
|
+
import { defaultOptions } from './constants';
|
4
5
|
/**
|
5
6
|
* NOTE: the element with the focus outline needs to have `position: relative` so that the
|
6
7
|
* pseudo element can be properly positioned.
|
@@ -39,10 +40,6 @@ const getFocusOutlineStyles = options => {
|
|
39
40
|
}
|
40
41
|
};
|
41
42
|
};
|
42
|
-
|
43
|
-
const defaultOptions = {
|
44
|
-
selector: 'focus'
|
45
|
-
};
|
46
43
|
/**
|
47
44
|
* NOTE: The element with the focus outline needs to have `position: relative` so that the
|
48
45
|
* pseudo element can be properly positioned.
|
@@ -51,33 +48,17 @@ const defaultOptions = {
|
|
51
48
|
* @returns focus outline styles object for @see makeStyles
|
52
49
|
*/
|
53
50
|
|
54
|
-
export const createFocusOutlineStyle = (options = {
|
55
|
-
style: {},
|
56
|
-
...defaultOptions
|
57
|
-
}) => ({
|
58
|
-
':focus-visible': {
|
59
|
-
outlineStyle: 'none'
|
60
|
-
},
|
61
|
-
[`${KEYBOARD_NAV_SELECTOR} :${options.selector || defaultOptions.selector}`]: getFocusOutlineStyles({
|
62
|
-
outlineColor: tokens.colorStrokeFocus2,
|
63
|
-
outlineRadius: tokens.borderRadiusMedium,
|
64
|
-
// FIXME: tokens.strokeWidthThick causes some weird bugs
|
65
|
-
outlineWidth: '2px',
|
66
|
-
...options.style
|
67
|
-
})
|
68
|
-
});
|
69
|
-
/**
|
70
|
-
* Creates a style for @see makeStyles that includes the necessary selectors for focus.
|
71
|
-
* Should be used only when @see createFocusOutlineStyle does not fit requirements
|
72
|
-
*
|
73
|
-
* @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes
|
74
|
-
* @param options - Configure the style of the focus outline
|
75
|
-
*/
|
76
51
|
|
77
|
-
export const
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
52
|
+
export const createFocusOutlineStyle = ({
|
53
|
+
selector = defaultOptions.selector,
|
54
|
+
style = defaultOptions.style
|
55
|
+
} = defaultOptions) => createCustomFocusIndicatorStyle(getFocusOutlineStyles({
|
56
|
+
outlineColor: tokens.colorStrokeFocus2,
|
57
|
+
outlineRadius: tokens.borderRadiusMedium,
|
58
|
+
// FIXME: tokens.strokeWidthThick causes some weird bugs
|
59
|
+
outlineWidth: '2px',
|
60
|
+
...style
|
61
|
+
}), {
|
62
|
+
selector
|
82
63
|
});
|
83
|
-
//# sourceMappingURL=
|
64
|
+
//# sourceMappingURL=createFocusOutlineStyle.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["focus/createFocusOutlineStyle.ts"],"names":[],"mappings":"AAAA,SAAS,MAAT,QAAuB,uBAAvB;AACA,SAAS,UAAT,QAA2B,gBAA3B;AAEA,SACE,+BADF,QAGO,mCAHP;AAIA,SAAS,cAAT,QAA+B,aAA/B;AAiBA;;;;;;AAMG;;AACH,MAAM,qBAAqB,GAAI,OAAD,IAAoD;;;AAChF,QAAM;AAAE,IAAA,aAAF;AAAiB,IAAA,YAAjB;AAA+B,IAAA,aAA/B;AAA8C,IAAA;AAA9C,MAA+D,OAArE;AAEA,QAAM,gBAAgB,GAAG,CAAA,CAAA,EAAA,GAAC,aAAD,MAAqC,IAArC,IAAqC,EAAA,KAAA,KAAA,CAArC,GAAqC,KAAA,CAArC,GAAqC,EAAA,CAAE,GAAvC,KAA8C,aAAvE;AACA,QAAM,mBAAmB,GAAG,CAAA,CAAA,EAAA,GAAC,aAAD,MAAqC,IAArC,IAAqC,EAAA,KAAA,KAAA,CAArC,GAAqC,KAAA,CAArC,GAAqC,EAAA,CAAE,MAAvC,KAAiD,aAA7E;AACA,QAAM,iBAAiB,GAAG,CAAA,CAAA,EAAA,GAAC,aAAD,MAAqC,IAArC,IAAqC,EAAA,KAAA,KAAA,CAArC,GAAqC,KAAA,CAArC,GAAqC,EAAA,CAAE,IAAvC,KAA+C,aAAzE;AACA,QAAM,kBAAkB,GAAG,CAAA,CAAA,EAAA,GAAC,aAAD,MAAqC,IAArC,IAAqC,EAAA,KAAA,KAAA,CAArC,GAAqC,KAAA,CAArC,GAAqC,EAAA,CAAE,KAAvC,KAAgD,aAA3E;AAEA,SAAO,EACL,GAAG,UAAU,CAAC,WAAX,CAAuB,aAAvB,CADE;AAEL,cAAU;AACR,MAAA,OAAO,EAAE,IADD;AAER,MAAA,QAAQ,EAAE,UAFF;AAGR,MAAA,aAAa,EAAE,MAHP;AAIR,MAAA,MAAM,EAAE,CAJA;AAMR,SAAG,UAAU,CAAC,WAAX,CAAuB,OAAvB,CANK;AAOR,SAAG,UAAU,CAAC,WAAX,CAAuB,YAAvB,CAPK;AAQR,SAAG,UAAU,CAAC,YAAX,CAAwB,aAAxB,CARK;AASR,SAAG,UAAU,CAAC,WAAX,CAAuB,YAAvB,CATK;AAWR,MAAA,GAAG,EAAE,CAAC,aAAD,GAAiB,IAAI,YAAY,EAAjC,GAAsC,cAAc,YAAY,MAAM,gBAAgB,GAXnF;AAYR,MAAA,MAAM,EAAE,CAAC,aAAD,GAAiB,IAAI,YAAY,EAAjC,GAAsC,cAAc,YAAY,MAAM,mBAAmB,GAZzF;AAaR,MAAA,IAAI,EAAE,CAAC,aAAD,GAAiB,IAAI,YAAY,EAAjC,GAAsC,cAAc,YAAY,MAAM,iBAAiB,GAbrF;AAcR,MAAA,KAAK,EAAE,CAAC,aAAD,GAAiB,IAAI,YAAY,EAAjC,GAAsC,cAAc,YAAY,MAAM,kBAAkB;AAdvF;AAFL,GAAP;AAmBD,CA3BD;AA6BA;;;;;;AAMG;;;AACH,OAAO,MAAM,uBAAuB,GAAG,CAAC;AACtC,EAAA,QAAQ,GAAG,cAAc,CAAC,QADY;AAEtC,EAAA,KAAK,GAAG,cAAc,CAAC;AAFe,IAGJ,cAHG,KAIrC,+BAA+B,CAC7B,qBAAqB,CAAC;AACpB,EAAA,YAAY,EAAE,MAAM,CAAC,iBADD;AAEpB,EAAA,aAAa,EAAE,MAAM,CAAC,kBAFF;AAGpB;AACA,EAAA,YAAY,EAAE,KAJM;AAKpB,KAAG;AALiB,CAAD,CADQ,EAQ7B;AAAE,EAAA;AAAF,CAR6B,CAJ1B","sourcesContent":["import { tokens } from '@fluentui/react-theme';\nimport { shorthands } from '@griffel/react';\nimport type { GriffelStyle } from '@griffel/react';\nimport {\n createCustomFocusIndicatorStyle,\n CreateCustomFocusIndicatorStyleOptions,\n} from './createCustomFocusIndicatorStyle';\nimport { defaultOptions } from './constants';\n\nexport type FocusOutlineOffset = Record<'top' | 'bottom' | 'left' | 'right', string>;\nexport type FocusOutlineStyleOptions = {\n /**\n * Only property not supported by the native CSS `outline`, if this is no longer needed\n * we can just go native instead\n */\n outlineRadius: string;\n outlineColor: string;\n outlineWidth: string;\n outlineOffset?: string | FocusOutlineOffset;\n};\nexport interface CreateFocusOutlineStyleOptions extends CreateCustomFocusIndicatorStyleOptions {\n style?: Partial<FocusOutlineStyleOptions>;\n}\n\n/**\n * NOTE: the element with the focus outline needs to have `position: relative` so that the\n * pseudo element can be properly positioned.\n *\n * @param options - Configures the style of the focus outline\n * @returns focus outline styles object\n */\nconst getFocusOutlineStyles = (options: FocusOutlineStyleOptions): GriffelStyle => {\n const { outlineRadius, outlineColor, outlineOffset, outlineWidth } = options;\n\n const outlineOffsetTop = (outlineOffset as FocusOutlineOffset)?.top || outlineOffset;\n const outlineOffsetBottom = (outlineOffset as FocusOutlineOffset)?.bottom || outlineOffset;\n const outlineOffsetLeft = (outlineOffset as FocusOutlineOffset)?.left || outlineOffset;\n const outlineOffsetRight = (outlineOffset as FocusOutlineOffset)?.right || outlineOffset;\n\n return {\n ...shorthands.borderColor('transparent'),\n ':after': {\n content: '\"\"',\n position: 'absolute',\n pointerEvents: 'none',\n zIndex: 1,\n\n ...shorthands.borderStyle('solid'),\n ...shorthands.borderWidth(outlineWidth),\n ...shorthands.borderRadius(outlineRadius),\n ...shorthands.borderColor(outlineColor),\n\n top: !outlineOffset ? `-${outlineWidth}` : `calc(0px - ${outlineWidth} - ${outlineOffsetTop})`,\n bottom: !outlineOffset ? `-${outlineWidth}` : `calc(0px - ${outlineWidth} - ${outlineOffsetBottom})`,\n left: !outlineOffset ? `-${outlineWidth}` : `calc(0px - ${outlineWidth} - ${outlineOffsetLeft})`,\n right: !outlineOffset ? `-${outlineWidth}` : `calc(0px - ${outlineWidth} - ${outlineOffsetRight})`,\n },\n };\n};\n\n/**\n * NOTE: The element with the focus outline needs to have `position: relative` so that the\n * pseudo element can be properly positioned.\n *\n * @param options - Configure the style of the focus outline\n * @returns focus outline styles object for @see makeStyles\n */\nexport const createFocusOutlineStyle = ({\n selector = defaultOptions.selector,\n style = defaultOptions.style,\n}: CreateFocusOutlineStyleOptions = defaultOptions): GriffelStyle =>\n createCustomFocusIndicatorStyle(\n getFocusOutlineStyles({\n outlineColor: tokens.colorStrokeFocus2,\n outlineRadius: tokens.borderRadiusMedium,\n // FIXME: tokens.strokeWidthThick causes some weird bugs\n outlineWidth: '2px',\n ...style,\n }),\n { selector },\n );\n"],"sourceRoot":"../src/"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../src/","sources":["focus/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,2BAA2B,CAAC","sourcesContent":["export * from './createCustomFocusIndicatorStyle';\nexport * from './createFocusOutlineStyle';\n"]}
|
package/lib/hooks/index.d.ts
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
export * from './useArrowNavigationGroup';
|
2
2
|
export * from './useFocusableGroup';
|
3
3
|
export * from './useFocusFinders';
|
4
|
-
export * from './useFocusIndicatorStyle';
|
5
4
|
export * from './useKeyboardNavAttribute';
|
6
5
|
export * from './useModalAttributes';
|
7
6
|
export * from './useTabsterAttributes';
|
package/lib/hooks/index.js
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
export * from './useArrowNavigationGroup';
|
2
2
|
export * from './useFocusableGroup';
|
3
3
|
export * from './useFocusFinders';
|
4
|
-
export * from './useFocusIndicatorStyle';
|
5
4
|
export * from './useKeyboardNavAttribute';
|
6
5
|
export * from './useModalAttributes';
|
7
6
|
export * from './useTabsterAttributes';
|
package/lib/hooks/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../src/","sources":["hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../src/","sources":["hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC","sourcesContent":["export * from './useArrowNavigationGroup';\nexport * from './useFocusableGroup';\nexport * from './useFocusFinders';\nexport * from './useKeyboardNavAttribute';\nexport * from './useModalAttributes';\nexport * from './useTabsterAttributes';\n"]}
|
@@ -14,6 +14,10 @@ export interface UseArrowNavigationGroupOptions {
|
|
14
14
|
* available) when tabbing from outside of the group
|
15
15
|
*/
|
16
16
|
memorizeCurrent?: boolean;
|
17
|
+
/**
|
18
|
+
* Allow tabbing within the arrow navigation group items.
|
19
|
+
*/
|
20
|
+
tabbable?: boolean;
|
17
21
|
}
|
18
22
|
/**
|
19
23
|
* A hook that returns the necessary tabster attributes to support arrow key navigation
|
@@ -19,7 +19,8 @@ export const useArrowNavigationGroup = options => {
|
|
19
19
|
mover: {
|
20
20
|
cyclic: !!(options === null || options === void 0 ? void 0 : options.circular),
|
21
21
|
direction: axisToMoverDirection((_a = options === null || options === void 0 ? void 0 : options.axis) !== null && _a !== void 0 ? _a : 'vertical'),
|
22
|
-
memorizeCurrent: options === null || options === void 0 ? void 0 : options.memorizeCurrent
|
22
|
+
memorizeCurrent: options === null || options === void 0 ? void 0 : options.memorizeCurrent,
|
23
|
+
tabbable: options === null || options === void 0 ? void 0 : options.tabbable
|
23
24
|
}
|
24
25
|
});
|
25
26
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["hooks/useArrowNavigationGroup.ts"],"names":[],"mappings":"AAAA,SAAS,KAAT,EAAgB,QAAhB,QAAgC,SAAhC;AACA,SAAS,oBAAT,QAAqC,wBAArC;AACA,SAAS,UAAT,QAA2B,cAA3B;
|
1
|
+
{"version":3,"sources":["hooks/useArrowNavigationGroup.ts"],"names":[],"mappings":"AAAA,SAAS,KAAT,EAAgB,QAAhB,QAAgC,SAAhC;AACA,SAAS,oBAAT,QAAqC,wBAArC;AACA,SAAS,UAAT,QAA2B,cAA3B;AAuBA;;;AAGG;;AACH,OAAO,MAAM,uBAAuB,GAAI,OAAD,IAAwE;;;AAC7G,QAAM,OAAO,GAAG,UAAU,EAA1B;;AAEA,MAAI,OAAJ,EAAa;AACX,IAAA,QAAQ,CAAC,OAAD,CAAR;AACD;;AAED,SAAO,oBAAoB,CAAC;AAC1B,IAAA,KAAK,EAAE;AACL,MAAA,MAAM,EAAE,CAAC,EAAC,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,QAAV,CADJ;AAEL,MAAA,SAAS,EAAE,oBAAoB,CAAC,CAAA,EAAA,GAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,IAAT,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,EAAb,GAAiB,UAAlB,CAF1B;AAGL,MAAA,eAAe,EAAE,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,eAHrB;AAIL,MAAA,QAAQ,EAAE,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE;AAJd;AADmB,GAAD,CAA3B;AAQD,CAfM;;AAiBP,SAAS,oBAAT,CAA8B,IAA9B,EAA0E;AACxE,UAAQ,IAAR;AACE,SAAK,YAAL;AACE,aAAO,KAAK,CAAC,eAAN,CAAsB,UAA7B;;AACF,SAAK,MAAL;AACE,aAAO,KAAK,CAAC,eAAN,CAAsB,IAA7B;;AAEF,SAAK,UAAL;AACA;AACE,aAAO,KAAK,CAAC,eAAN,CAAsB,QAA7B;AARJ;AAUD","sourcesContent":["import { Types, getMover } from 'tabster';\nimport { useTabsterAttributes } from './useTabsterAttributes';\nimport { useTabster } from './useTabster';\n\nexport interface UseArrowNavigationGroupOptions {\n /**\n * Focus will navigate vertically, horizontally or in both directions (grid), defaults to horizontally\n * @defaultValue vertical\n */\n axis?: 'vertical' | 'horizontal' | 'grid';\n /**\n * Focus will cycle to the first/last elements of the group without stopping\n */\n circular?: boolean;\n /**\n * Last focused element in the group will be remembered and focused (if still\n * available) when tabbing from outside of the group\n */\n memorizeCurrent?: boolean;\n /**\n * Allow tabbing within the arrow navigation group items.\n */\n tabbable?: boolean;\n}\n\n/**\n * A hook that returns the necessary tabster attributes to support arrow key navigation\n * @param options - Options to configure keyboard navigation\n */\nexport const useArrowNavigationGroup = (options?: UseArrowNavigationGroupOptions): Types.TabsterDOMAttribute => {\n const tabster = useTabster();\n\n if (tabster) {\n getMover(tabster);\n }\n\n return useTabsterAttributes({\n mover: {\n cyclic: !!options?.circular,\n direction: axisToMoverDirection(options?.axis ?? 'vertical'),\n memorizeCurrent: options?.memorizeCurrent,\n tabbable: options?.tabbable,\n },\n });\n};\n\nfunction axisToMoverDirection(axis: UseArrowNavigationGroupOptions['axis']): Types.MoverDirection {\n switch (axis) {\n case 'horizontal':\n return Types.MoverDirections.Horizontal;\n case 'grid':\n return Types.MoverDirections.Grid;\n\n case 'vertical':\n default:\n return Types.MoverDirections.Vertical;\n }\n}\n"],"sourceRoot":"../src/"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { createKeyborg } from 'keyborg';
|
2
2
|
import { useEffect, useMemo, useRef } from 'react';
|
3
|
-
import { KEYBOARD_NAV_ATTRIBUTE } from '../
|
3
|
+
import { KEYBOARD_NAV_ATTRIBUTE } from '../focus/constants';
|
4
4
|
import { useFluent } from '@fluentui/react-shared-contexts';
|
5
5
|
/**
|
6
6
|
* instantiates keyborg and add attribute to ensure focus indicator synced to keyborg logic
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["hooks/useKeyboardNavAttribute.ts"],"names":[],"mappings":"AAAA,SAAS,aAAT,QAA8B,SAA9B;AACA,SAAS,SAAT,EAAoB,OAApB,EAA6B,MAA7B,QAA2C,OAA3C;AACA,SAAS,sBAAT,QAAuC,
|
1
|
+
{"version":3,"sources":["hooks/useKeyboardNavAttribute.ts"],"names":[],"mappings":"AAAA,SAAS,aAAT,QAA8B,SAA9B;AACA,SAAS,SAAT,EAAoB,OAApB,EAA6B,MAA7B,QAA2C,OAA3C;AACA,SAAS,sBAAT,QAAuC,oBAAvC;AACA,SAAS,SAAT,QAA0B,iCAA1B;AAIA;;AAEG;;AACH,OAAM,SAAU,uBAAV,GAAiC;AACrC,QAAM;AAAE,IAAA;AAAF,MAAqB,SAAS,EAApC;AACA,QAAM,OAAO,GAAG,OAAO,CAAC,MAAM,cAAc,IAAI,aAAa,CAAC,cAAc,CAAC,WAAhB,CAAtC,EAAqE,CAAC,cAAD,CAArE,CAAvB;AACA,QAAM,GAAG,GAAG,MAAM,CAAI,IAAJ,CAAlB;AACA,EAAA,SAAS,CAAC,MAAK;AACb,QAAI,OAAJ,EAAa;AACX,MAAA,mBAAmB,CAAC,GAAD,EAAM,sBAAN,EAA8B,OAAO,CAAC,wBAAR,EAA9B,CAAnB;;AACA,YAAM,EAAE,GAAoB,IAAI,IAAG;AACjC,QAAA,mBAAmB,CAAC,GAAD,EAAM,sBAAN,EAA8B,IAA9B,CAAnB;AACD,OAFD;;AAGA,MAAA,OAAO,CAAC,SAAR,CAAkB,EAAlB;AACA,aAAO,MAAM,OAAO,CAAC,WAAR,CAAoB,EAApB,CAAb;AACD;AACF,GATQ,EASN,CAAC,OAAD,CATM,CAAT;AAUA,SAAO,GAAP;AACD;;AAED,SAAS,mBAAT,CAA6B,UAA7B,EAAiE,SAAjE,EAAoF,KAApF,EAAkG;AAChG,MAAI,CAAC,UAAU,CAAC,OAAhB,EAAyB;AACvB;AACD;;AACD,MAAI,KAAJ,EAAW;AACT,IAAA,UAAU,CAAC,OAAX,CAAmB,YAAnB,CAAgC,SAAhC,EAA2C,EAA3C;AACD,GAFD,MAEO;AACL,IAAA,UAAU,CAAC,OAAX,CAAmB,eAAnB,CAAmC,SAAnC;AACD;AACF","sourcesContent":["import { createKeyborg } from 'keyborg';\nimport { useEffect, useMemo, useRef } from 'react';\nimport { KEYBOARD_NAV_ATTRIBUTE } from '../focus/constants';\nimport { useFluent } from '@fluentui/react-shared-contexts';\nimport type { KeyborgCallback } from 'keyborg/dist/Keyborg';\nimport type { RefObject } from 'react';\n\n/**\n * instantiates keyborg and add attribute to ensure focus indicator synced to keyborg logic\n */\nexport function useKeyboardNavAttribute<E extends HTMLElement>() {\n const { targetDocument } = useFluent();\n const keyborg = useMemo(() => targetDocument && createKeyborg(targetDocument.defaultView!), [targetDocument]);\n const ref = useRef<E>(null);\n useEffect(() => {\n if (keyborg) {\n setBooleanAttribute(ref, KEYBOARD_NAV_ATTRIBUTE, keyborg.isNavigatingWithKeyboard());\n const cb: KeyborgCallback = next => {\n setBooleanAttribute(ref, KEYBOARD_NAV_ATTRIBUTE, next);\n };\n keyborg.subscribe(cb);\n return () => keyborg.unsubscribe(cb);\n }\n }, [keyborg]);\n return ref;\n}\n\nfunction setBooleanAttribute(elementRef: RefObject<HTMLElement>, attribute: string, value: boolean) {\n if (!elementRef.current) {\n return;\n }\n if (value) {\n elementRef.current.setAttribute(attribute, '');\n } else {\n elementRef.current.removeAttribute(attribute);\n }\n}\n"],"sourceRoot":"../src/"}
|
package/lib/index.d.ts
CHANGED
@@ -1,2 +1,4 @@
|
|
1
|
-
export {
|
2
|
-
export type {
|
1
|
+
export { useArrowNavigationGroup, useFocusableGroup, useFocusFinders, useKeyboardNavAttribute, useModalAttributes, useTabsterAttributes, } from './hooks/index';
|
2
|
+
export type { UseArrowNavigationGroupOptions, UseFocusableGroupOptions, UseModalAttributesOptions, } from './hooks/index';
|
3
|
+
export { createCustomFocusIndicatorStyle, createFocusOutlineStyle } from './focus/index';
|
4
|
+
export type { CreateCustomFocusIndicatorStyleOptions, CreateFocusOutlineStyleOptions, FocusOutlineOffset, FocusOutlineStyleOptions, } from './focus/index';
|
package/lib/index.js
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
export {
|
1
|
+
export { useArrowNavigationGroup, useFocusableGroup, useFocusFinders, useKeyboardNavAttribute, useModalAttributes, useTabsterAttributes } from './hooks/index';
|
2
|
+
export { createCustomFocusIndicatorStyle, createFocusOutlineStyle } from './focus/index';
|
2
3
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,SACE
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,SACE,uBADF,EAEE,iBAFF,EAGE,eAHF,EAIE,uBAJF,EAKE,kBALF,EAME,oBANF,QAOO,eAPP;AAcA,SAAS,+BAAT,EAA0C,uBAA1C,QAAyE,eAAzE","sourcesContent":["export {\n useArrowNavigationGroup,\n useFocusableGroup,\n useFocusFinders,\n useKeyboardNavAttribute,\n useModalAttributes,\n useTabsterAttributes,\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"],"sourceRoot":"../src/"}
|
@@ -3,7 +3,11 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.KEYBOARD_NAV_SELECTOR = exports.KEYBOARD_NAV_ATTRIBUTE = void 0;
|
6
|
+
exports.defaultOptions = exports.KEYBOARD_NAV_SELECTOR = exports.KEYBOARD_NAV_ATTRIBUTE = void 0;
|
7
7
|
exports.KEYBOARD_NAV_ATTRIBUTE = 'data-keyboard-nav';
|
8
8
|
exports.KEYBOARD_NAV_SELECTOR = `:global([${exports.KEYBOARD_NAV_ATTRIBUTE}])`;
|
9
|
-
|
9
|
+
exports.defaultOptions = {
|
10
|
+
style: {},
|
11
|
+
selector: 'focus'
|
12
|
+
};
|
13
|
+
//# sourceMappingURL=constants.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["focus/constants.ts"],"names":[],"mappings":";;;;;;AAAa,OAAA,CAAA,sBAAA,GAAyB,mBAAzB;AACA,OAAA,CAAA,qBAAA,GAAwB,YAAY,OAAA,CAAA,sBAAsB,IAA1D;AACA,OAAA,CAAA,cAAA,GAAiB;AAC5B,EAAA,KAAK,EAAE,EADqB;AAE5B,EAAA,QAAQ,EAAE;AAFkB,CAAjB","sourcesContent":["export const KEYBOARD_NAV_ATTRIBUTE = 'data-keyboard-nav' as const;\nexport const KEYBOARD_NAV_SELECTOR = `:global([${KEYBOARD_NAV_ATTRIBUTE}])` as const;\nexport const defaultOptions = {\n style: {},\n selector: 'focus',\n} as const;\n"],"sourceRoot":"../src/"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import type { GriffelStyle } from '@griffel/react';
|
2
|
+
export interface CreateCustomFocusIndicatorStyleOptions {
|
3
|
+
selector?: 'focus' | 'focus-within';
|
4
|
+
}
|
5
|
+
/**
|
6
|
+
* Creates a style for @see makeStyles that includes the necessary selectors for focus.
|
7
|
+
* Should be used only when @see createFocusOutlineStyle does not fit requirements
|
8
|
+
*
|
9
|
+
* @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes
|
10
|
+
* @param options - Configure the style of the focus outline
|
11
|
+
*/
|
12
|
+
export declare const createCustomFocusIndicatorStyle: (style: GriffelStyle, { selector }?: CreateCustomFocusIndicatorStyleOptions) => GriffelStyle;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.createCustomFocusIndicatorStyle = void 0;
|
7
|
+
|
8
|
+
const constants_1 = /*#__PURE__*/require("./constants");
|
9
|
+
/**
|
10
|
+
* Creates a style for @see makeStyles that includes the necessary selectors for focus.
|
11
|
+
* Should be used only when @see createFocusOutlineStyle does not fit requirements
|
12
|
+
*
|
13
|
+
* @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes
|
14
|
+
* @param options - Configure the style of the focus outline
|
15
|
+
*/
|
16
|
+
|
17
|
+
|
18
|
+
const createCustomFocusIndicatorStyle = (style, {
|
19
|
+
selector = constants_1.defaultOptions.selector
|
20
|
+
} = constants_1.defaultOptions) => ({
|
21
|
+
':focus-visible': {
|
22
|
+
outlineStyle: 'none'
|
23
|
+
},
|
24
|
+
[`${constants_1.KEYBOARD_NAV_SELECTOR} :${selector}`]: style
|
25
|
+
});
|
26
|
+
|
27
|
+
exports.createCustomFocusIndicatorStyle = createCustomFocusIndicatorStyle;
|
28
|
+
//# sourceMappingURL=createCustomFocusIndicatorStyle.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["focus/createCustomFocusIndicatorStyle.ts"],"names":[],"mappings":";;;;;;;AAAA,MAAA,WAAA,gBAAA,OAAA,CAAA,aAAA,CAAA;AAOA;;;;;;AAMG;;;AACI,MAAM,+BAA+B,GAAG,CAC7C,KAD6C,EAE7C;AAAE,EAAA,QAAQ,GAAG,WAAA,CAAA,cAAA,CAAe;AAA5B,IAAiF,WAAA,CAAA,cAFpC,MAG3B;AAClB,oBAAkB;AAChB,IAAA,YAAY,EAAE;AADE,GADA;AAIlB,GAAC,GAAG,WAAA,CAAA,qBAAqB,KAAK,QAAQ,EAAtC,GAA2C;AAJzB,CAH2B,CAAxC;;AAAM,OAAA,CAAA,+BAAA,GAA+B,+BAA/B","sourcesContent":["import { KEYBOARD_NAV_SELECTOR, defaultOptions } from './constants';\nimport type { GriffelStyle } from '@griffel/react';\n\nexport interface CreateCustomFocusIndicatorStyleOptions {\n selector?: 'focus' | 'focus-within';\n}\n\n/**\n * Creates a style for @see makeStyles that includes the necessary selectors for focus.\n * Should be used only when @see createFocusOutlineStyle does not fit requirements\n *\n * @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes\n * @param options - Configure the style of the focus outline\n */\nexport const createCustomFocusIndicatorStyle = (\n style: GriffelStyle,\n { selector = defaultOptions.selector }: CreateCustomFocusIndicatorStyleOptions = defaultOptions,\n): GriffelStyle => ({\n ':focus-visible': {\n outlineStyle: 'none',\n },\n [`${KEYBOARD_NAV_SELECTOR} :${selector}`]: style,\n});\n"],"sourceRoot":"../src/"}
|
package/{lib/hooks/useFocusIndicatorStyle.d.ts → lib-commonjs/focus/createFocusOutlineStyle.d.ts}
RENAMED
@@ -1,4 +1,5 @@
|
|
1
1
|
import type { GriffelStyle } from '@griffel/react';
|
2
|
+
import { CreateCustomFocusIndicatorStyleOptions } from './createCustomFocusIndicatorStyle';
|
2
3
|
export declare type FocusOutlineOffset = Record<'top' | 'bottom' | 'left' | 'right', string>;
|
3
4
|
export declare type FocusOutlineStyleOptions = {
|
4
5
|
/**
|
@@ -10,8 +11,8 @@ export declare type FocusOutlineStyleOptions = {
|
|
10
11
|
outlineWidth: string;
|
11
12
|
outlineOffset?: string | FocusOutlineOffset;
|
12
13
|
};
|
13
|
-
export interface
|
14
|
-
|
14
|
+
export interface CreateFocusOutlineStyleOptions extends CreateCustomFocusIndicatorStyleOptions {
|
15
|
+
style?: Partial<FocusOutlineStyleOptions>;
|
15
16
|
}
|
16
17
|
/**
|
17
18
|
* NOTE: The element with the focus outline needs to have `position: relative` so that the
|
@@ -20,14 +21,4 @@ export interface CreateFocusIndicatorStyleRuleOptions {
|
|
20
21
|
* @param options - Configure the style of the focus outline
|
21
22
|
* @returns focus outline styles object for @see makeStyles
|
22
23
|
*/
|
23
|
-
export declare const createFocusOutlineStyle: (
|
24
|
-
style: Partial<FocusOutlineStyleOptions>;
|
25
|
-
} & CreateFocusIndicatorStyleRuleOptions) => GriffelStyle;
|
26
|
-
/**
|
27
|
-
* Creates a style for @see makeStyles that includes the necessary selectors for focus.
|
28
|
-
* Should be used only when @see createFocusOutlineStyle does not fit requirements
|
29
|
-
*
|
30
|
-
* @param style - styling applied on focus, defaults to @see getDefaultFocusOutlineStyes
|
31
|
-
* @param options - Configure the style of the focus outline
|
32
|
-
*/
|
33
|
-
export declare const createCustomFocusIndicatorStyle: (style: GriffelStyle, options?: CreateFocusIndicatorStyleRuleOptions) => GriffelStyle;
|
24
|
+
export declare const createFocusOutlineStyle: ({ selector, style, }?: CreateFocusOutlineStyleOptions) => GriffelStyle;
|
@@ -3,13 +3,15 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
6
|
+
exports.createFocusOutlineStyle = void 0;
|
7
7
|
|
8
8
|
const react_theme_1 = /*#__PURE__*/require("@fluentui/react-theme");
|
9
9
|
|
10
|
-
const symbols_1 = /*#__PURE__*/require("../symbols");
|
11
|
-
|
12
10
|
const react_1 = /*#__PURE__*/require("@griffel/react");
|
11
|
+
|
12
|
+
const createCustomFocusIndicatorStyle_1 = /*#__PURE__*/require("./createCustomFocusIndicatorStyle");
|
13
|
+
|
14
|
+
const constants_1 = /*#__PURE__*/require("./constants");
|
13
15
|
/**
|
14
16
|
* NOTE: the element with the focus outline needs to have `position: relative` so that the
|
15
17
|
* pseudo element can be properly positioned.
|
@@ -49,10 +51,6 @@ const getFocusOutlineStyles = options => {
|
|
49
51
|
}
|
50
52
|
};
|
51
53
|
};
|
52
|
-
|
53
|
-
const defaultOptions = {
|
54
|
-
selector: 'focus'
|
55
|
-
};
|
56
54
|
/**
|
57
55
|
* NOTE: The element with the focus outline needs to have `position: relative` so that the
|
58
56
|
* pseudo element can be properly positioned.
|
@@ -61,37 +59,19 @@ const defaultOptions = {
|
|
61
59
|
* @returns focus outline styles object for @see makeStyles
|
62
60
|
*/
|
63
61
|
|
64
|
-
const createFocusOutlineStyle = (options = {
|
65
|
-
style: {},
|
66
|
-
...defaultOptions
|
67
|
-
}) => ({
|
68
|
-
':focus-visible': {
|
69
|
-
outlineStyle: 'none'
|
70
|
-
},
|
71
|
-
[`${symbols_1.KEYBOARD_NAV_SELECTOR} :${options.selector || defaultOptions.selector}`]: getFocusOutlineStyles({
|
72
|
-
outlineColor: react_theme_1.tokens.colorStrokeFocus2,
|
73
|
-
outlineRadius: react_theme_1.tokens.borderRadiusMedium,
|
74
|
-
// FIXME: tokens.strokeWidthThick causes some weird bugs
|
75
|
-
outlineWidth: '2px',
|
76
|
-
...options.style
|
77
|
-
})
|
78
|
-
});
|
79
62
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
outlineStyle: 'none'
|
92
|
-
},
|
93
|
-
[`${symbols_1.KEYBOARD_NAV_SELECTOR} :${options.selector || defaultOptions.selector}`]: style
|
63
|
+
const createFocusOutlineStyle = ({
|
64
|
+
selector = constants_1.defaultOptions.selector,
|
65
|
+
style = constants_1.defaultOptions.style
|
66
|
+
} = constants_1.defaultOptions) => createCustomFocusIndicatorStyle_1.createCustomFocusIndicatorStyle(getFocusOutlineStyles({
|
67
|
+
outlineColor: react_theme_1.tokens.colorStrokeFocus2,
|
68
|
+
outlineRadius: react_theme_1.tokens.borderRadiusMedium,
|
69
|
+
// FIXME: tokens.strokeWidthThick causes some weird bugs
|
70
|
+
outlineWidth: '2px',
|
71
|
+
...style
|
72
|
+
}), {
|
73
|
+
selector
|
94
74
|
});
|
95
75
|
|
96
|
-
exports.
|
97
|
-
//# sourceMappingURL=
|
76
|
+
exports.createFocusOutlineStyle = createFocusOutlineStyle;
|
77
|
+
//# sourceMappingURL=createFocusOutlineStyle.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["focus/createFocusOutlineStyle.ts"],"names":[],"mappings":"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","sourcesContent":["import { tokens } from '@fluentui/react-theme';\nimport { shorthands } from '@griffel/react';\nimport type { GriffelStyle } from '@griffel/react';\nimport {\n createCustomFocusIndicatorStyle,\n CreateCustomFocusIndicatorStyleOptions,\n} from './createCustomFocusIndicatorStyle';\nimport { defaultOptions } from './constants';\n\nexport type FocusOutlineOffset = Record<'top' | 'bottom' | 'left' | 'right', string>;\nexport type FocusOutlineStyleOptions = {\n /**\n * Only property not supported by the native CSS `outline`, if this is no longer needed\n * we can just go native instead\n */\n outlineRadius: string;\n outlineColor: string;\n outlineWidth: string;\n outlineOffset?: string | FocusOutlineOffset;\n};\nexport interface CreateFocusOutlineStyleOptions extends CreateCustomFocusIndicatorStyleOptions {\n style?: Partial<FocusOutlineStyleOptions>;\n}\n\n/**\n * NOTE: the element with the focus outline needs to have `position: relative` so that the\n * pseudo element can be properly positioned.\n *\n * @param options - Configures the style of the focus outline\n * @returns focus outline styles object\n */\nconst getFocusOutlineStyles = (options: FocusOutlineStyleOptions): GriffelStyle => {\n const { outlineRadius, outlineColor, outlineOffset, outlineWidth } = options;\n\n const outlineOffsetTop = (outlineOffset as FocusOutlineOffset)?.top || outlineOffset;\n const outlineOffsetBottom = (outlineOffset as FocusOutlineOffset)?.bottom || outlineOffset;\n const outlineOffsetLeft = (outlineOffset as FocusOutlineOffset)?.left || outlineOffset;\n const outlineOffsetRight = (outlineOffset as FocusOutlineOffset)?.right || outlineOffset;\n\n return {\n ...shorthands.borderColor('transparent'),\n ':after': {\n content: '\"\"',\n position: 'absolute',\n pointerEvents: 'none',\n zIndex: 1,\n\n ...shorthands.borderStyle('solid'),\n ...shorthands.borderWidth(outlineWidth),\n ...shorthands.borderRadius(outlineRadius),\n ...shorthands.borderColor(outlineColor),\n\n top: !outlineOffset ? `-${outlineWidth}` : `calc(0px - ${outlineWidth} - ${outlineOffsetTop})`,\n bottom: !outlineOffset ? `-${outlineWidth}` : `calc(0px - ${outlineWidth} - ${outlineOffsetBottom})`,\n left: !outlineOffset ? `-${outlineWidth}` : `calc(0px - ${outlineWidth} - ${outlineOffsetLeft})`,\n right: !outlineOffset ? `-${outlineWidth}` : `calc(0px - ${outlineWidth} - ${outlineOffsetRight})`,\n },\n };\n};\n\n/**\n * NOTE: The element with the focus outline needs to have `position: relative` so that the\n * pseudo element can be properly positioned.\n *\n * @param options - Configure the style of the focus outline\n * @returns focus outline styles object for @see makeStyles\n */\nexport const createFocusOutlineStyle = ({\n selector = defaultOptions.selector,\n style = defaultOptions.style,\n}: CreateFocusOutlineStyleOptions = defaultOptions): GriffelStyle =>\n createCustomFocusIndicatorStyle(\n getFocusOutlineStyles({\n outlineColor: tokens.colorStrokeFocus2,\n outlineRadius: tokens.borderRadiusMedium,\n // FIXME: tokens.strokeWidthThick causes some weird bugs\n outlineWidth: '2px',\n ...style,\n }),\n { selector },\n );\n"],"sourceRoot":"../src/"}
|
@@ -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("./createCustomFocusIndicatorStyle"), exports);
|
10
|
+
|
11
|
+
tslib_1.__exportStar(require("./createFocusOutlineStyle"), exports);
|
12
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["focus/index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,mCAAA,CAAA,EAAA,OAAA;;AACA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,2BAAA,CAAA,EAAA,OAAA","sourcesContent":["export * from './createCustomFocusIndicatorStyle';\nexport * from './createFocusOutlineStyle';\n"],"sourceRoot":"../src/"}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
export * from './useArrowNavigationGroup';
|
2
2
|
export * from './useFocusableGroup';
|
3
3
|
export * from './useFocusFinders';
|
4
|
-
export * from './useFocusIndicatorStyle';
|
5
4
|
export * from './useKeyboardNavAttribute';
|
6
5
|
export * from './useModalAttributes';
|
7
6
|
export * from './useTabsterAttributes';
|
@@ -12,8 +12,6 @@ tslib_1.__exportStar(require("./useFocusableGroup"), exports);
|
|
12
12
|
|
13
13
|
tslib_1.__exportStar(require("./useFocusFinders"), exports);
|
14
14
|
|
15
|
-
tslib_1.__exportStar(require("./useFocusIndicatorStyle"), exports);
|
16
|
-
|
17
15
|
tslib_1.__exportStar(require("./useKeyboardNavAttribute"), exports);
|
18
16
|
|
19
17
|
tslib_1.__exportStar(require("./useModalAttributes"), exports);
|