@fluentui/web-components 2.5.5 → 2.5.6

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 (34) hide show
  1. package/CHANGELOG.json +16 -1
  2. package/CHANGELOG.md +11 -2
  3. package/dist/dts/styles/focus.d.ts +13 -0
  4. package/dist/dts/styles/index.d.ts +1 -0
  5. package/dist/esm/accordion/accordion-item/accordion-item.styles.js +8 -10
  6. package/dist/esm/breadcrumb-item/breadcrumb-item.styles.js +6 -10
  7. package/dist/esm/checkbox/checkbox.styles.js +4 -8
  8. package/dist/esm/combobox/combobox.styles.js +17 -8
  9. package/dist/esm/data-grid/data-grid-cell.styles.js +6 -9
  10. package/dist/esm/flipper/flipper.styles.js +5 -6
  11. package/dist/esm/listbox/listbox.styles.js +3 -4
  12. package/dist/esm/listbox-option/listbox-option.styles.js +9 -6
  13. package/dist/esm/menu/menu.styles.js +1 -1
  14. package/dist/esm/menu-item/menu-item.styles.js +5 -9
  15. package/dist/esm/progress/progress/progress.styles.js +0 -1
  16. package/dist/esm/progress/progress-ring/progress-ring.styles.js +0 -1
  17. package/dist/esm/radio/radio.styles.js +4 -9
  18. package/dist/esm/select/select.styles.js +4 -12
  19. package/dist/esm/styles/focus.js +21 -0
  20. package/dist/esm/styles/index.js +1 -0
  21. package/dist/esm/styles/patterns/button.styles.js +13 -21
  22. package/dist/esm/styles/patterns/input.styles.js +1 -9
  23. package/dist/esm/switch/switch.styles.js +5 -17
  24. package/dist/esm/tabs/tab/tab.styles.js +4 -6
  25. package/dist/esm/text-area/text-area.stories.js +2 -2
  26. package/dist/esm/toolbar/toolbar.styles.js +4 -3
  27. package/dist/esm/tree-item/tree-item.styles.js +4 -14
  28. package/dist/esm/tree-view/tree-view.styles.js +0 -4
  29. package/dist/fluent-web-components.api.json +52 -0
  30. package/dist/web-components.d.ts +15 -0
  31. package/dist/web-components.js +78 -51
  32. package/dist/web-components.min.js +150 -139
  33. package/docs/api-report.md +6 -0
  34. package/package.json +1 -1
package/CHANGELOG.json CHANGED
@@ -2,7 +2,22 @@
2
2
  "name": "@fluentui/web-components",
3
3
  "entries": [
4
4
  {
5
- "date": "Wed, 07 Sep 2022 07:53:27 GMT",
5
+ "date": "Mon, 19 Sep 2022 07:45:53 GMT",
6
+ "tag": "@fluentui/web-components_v2.5.6",
7
+ "version": "2.5.6",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "47367562+bheston@users.noreply.github.com",
12
+ "package": "@fluentui/web-components",
13
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d",
14
+ "comment": "Standardized focus treatment to use `outline` instead of a combination of `border` and `box-shadow`"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
6
21
  "tag": "@fluentui/web-components_v2.5.5",
7
22
  "version": "2.5.5",
8
23
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,21 @@
1
1
  # Change Log - @fluentui/web-components
2
2
 
3
- This log was last generated on Wed, 07 Sep 2022 07:53:27 GMT and should not be manually modified.
3
+ This log was last generated on Mon, 19 Sep 2022 07:45:53 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## [2.5.6](https://github.com/microsoft/fluentui/tree/@fluentui/web-components_v2.5.6)
8
+
9
+ Mon, 19 Sep 2022 07:45:53 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/web-components_v2.5.5..@fluentui/web-components_v2.5.6)
11
+
12
+ ### Patches
13
+
14
+ - Standardized focus treatment to use `outline` instead of a combination of `border` and `box-shadow` ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by 47367562+bheston@users.noreply.github.com)
15
+
7
16
  ## [2.5.5](https://github.com/microsoft/fluentui/tree/@fluentui/web-components_v2.5.5)
8
17
 
9
- Wed, 07 Sep 2022 07:53:27 GMT
18
+ Wed, 07 Sep 2022 07:54:43 GMT
10
19
  [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/web-components_v2.5.4..@fluentui/web-components_v2.5.5)
11
20
 
12
21
  ### Patches
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Partial CSS for the focus treatment for most typical sized components like Button, Menu Item, etc.
3
+ *
4
+ * @public
5
+ */
6
+ export declare const focusTreatmentBase: import("@microsoft/fast-element").CSSDirective;
7
+ /**
8
+ * Partial CSS for the focus treatment for tighter components with spacing constraints, like Checkbox
9
+ * and Radio, or plain text like Hypertext appearance Anchor or Breadcrumb Item.
10
+ *
11
+ * @public
12
+ */
13
+ export declare const focusTreatmentTight: import("@microsoft/fast-element").CSSDirective;
@@ -1,4 +1,5 @@
1
1
  export * from './direction';
2
2
  export * from './elevation';
3
+ export * from './focus';
3
4
  export * from './patterns/';
4
5
  export * from './size';
@@ -1,7 +1,8 @@
1
1
  import { css } from '@microsoft/fast-element';
2
2
  import { DesignToken, display, focusVisible, forcedColorsStylesheetBehavior, } from '@microsoft/fast-foundation';
3
3
  import { SystemColors } from '@microsoft/fast-web-utilities';
4
- import { controlCornerRadius, designUnit, focusStrokeOuter, focusStrokeWidth, layerCornerRadius, neutralFillLayerAltRest, neutralFillLayerRecipe, neutralFillLayerRest, neutralFillStealthRecipe, neutralForegroundRest, neutralStrokeLayerRest, strokeWidth, } from '../../design-tokens';
4
+ import { controlCornerRadius, designUnit, layerCornerRadius, neutralFillLayerAltRest, neutralFillLayerRecipe, neutralFillLayerRest, neutralFillStealthRecipe, neutralForegroundRest, neutralStrokeLayerRest, strokeWidth, } from '../../design-tokens';
5
+ import { focusTreatmentBase } from '../../styles/focus';
5
6
  import { typeRampBase } from '../../styles/patterns/type-ramp';
6
7
  import { heightNumber } from '../../styles/size';
7
8
  const neutralFillStealthRestOnNeutralFillLayerRest = DesignToken.create('neutral-fill-stealth-rest-on-neutral-fill-layer-rest').withDefault((target) => {
@@ -61,18 +62,16 @@ export const accordionItemStyles = (context, definition) => css `
61
62
  .button::before {
62
63
  content: '';
63
64
  position: absolute;
64
- top: 0;
65
- left: 0;
66
- right: 0;
67
- bottom: 0;
65
+ top: calc(${strokeWidth} * -1px);
66
+ left: calc(${strokeWidth} * -1px);
67
+ right: calc(${strokeWidth} * -1px);
68
+ bottom: calc(${strokeWidth} * -1px);
68
69
  cursor: pointer;
69
70
  }
70
71
 
71
72
  .button:${focusVisible}::before {
72
- outline: none;
73
- border: calc(${strokeWidth} * 1px) solid ${focusStrokeOuter};
73
+ ${focusTreatmentBase}
74
74
  border-radius: calc(${layerCornerRadius} * 1px);
75
- box-shadow: 0 0 0 calc((${focusStrokeWidth} - ${strokeWidth}) * 1px) ${focusStrokeOuter};
76
75
  }
77
76
 
78
77
  :host(.expanded) .button:${focusVisible}::before {
@@ -147,8 +146,7 @@ export const accordionItemStyles = (context, definition) => css `
147
146
  }
148
147
  `.withBehaviors(forcedColorsStylesheetBehavior(css `
149
148
  .button:${focusVisible}::before {
150
- border-color: ${SystemColors.Highlight};
151
- box-shadow: 0 0 0 calc((${focusStrokeWidth} - ${strokeWidth}) * 1px) ${SystemColors.Highlight};
149
+ outline-color: ${SystemColors.Highlight};
152
150
  }
153
151
  .icon {
154
152
  fill: ${SystemColors.ButtonText};
@@ -1,9 +1,10 @@
1
1
  import { css } from '@microsoft/fast-element';
2
2
  import { display, focusVisible, forcedColorsStylesheetBehavior, } from '@microsoft/fast-foundation';
3
3
  import { SystemColors } from '@microsoft/fast-web-utilities';
4
- import { controlCornerRadius, focusStrokeOuter, focusStrokeWidth, neutralForegroundActive, neutralForegroundHover, neutralForegroundRest, strokeWidth, } from '../design-tokens';
4
+ import { controlCornerRadius, neutralForegroundActive, neutralForegroundHover, neutralForegroundRest, } from '../design-tokens';
5
5
  import { typeRampBase } from '../styles/patterns/type-ramp';
6
6
  import { heightNumber } from '../styles/index';
7
+ import { focusTreatmentTight } from '../styles/focus';
7
8
  export const breadcrumbItemStyles = (context, definition) => css `
8
9
  ${display('inline-flex')} :host {
9
10
  background: transparent;
@@ -13,7 +14,6 @@ export const breadcrumbItemStyles = (context, definition) => css `
13
14
  ${typeRampBase};
14
15
  min-width: calc(${heightNumber} * 1px);
15
16
  border-radius: calc(${controlCornerRadius} * 1px);
16
- outline: none;
17
17
  }
18
18
 
19
19
  .listitem {
@@ -44,12 +44,8 @@ export const breadcrumbItemStyles = (context, definition) => css `
44
44
  color: ${neutralForegroundActive};
45
45
  }
46
46
 
47
- .control:${focusVisible}::after {
48
- content: '';
49
- position: absolute;
50
- inset: calc(${strokeWidth} * -1px);
51
- box-shadow: 0 0 0 calc(${focusStrokeWidth} * 1px) ${focusStrokeOuter} inset;
52
- border-radius: inherit;
47
+ .control:${focusVisible} {
48
+ ${focusTreatmentTight}
53
49
  }
54
50
 
55
51
  :host(:not([href])),
@@ -94,7 +90,7 @@ export const breadcrumbItemStyles = (context, definition) => css `
94
90
  color: ${SystemColors.HighlightText};
95
91
  fill: currentcolor;
96
92
  }
97
- :host([href]) .control:${focusVisible}::after {
98
- box-shadow: 0 0 0 calc(${focusStrokeWidth} * 1px) ${SystemColors.LinkText} inset;
93
+ .control:${focusVisible} {
94
+ outline-color: ${SystemColors.LinkText};
99
95
  }
100
96
  `));
@@ -2,8 +2,9 @@ import { css } from '@microsoft/fast-element';
2
2
  import { disabledCursor, display, focusVisible, forcedColorsStylesheetBehavior, } from '@microsoft/fast-foundation';
3
3
  import { SystemColors } from '@microsoft/fast-web-utilities';
4
4
  import { heightNumber } from '../styles';
5
- import { accentFillActive, accentFillHover, accentFillRest, controlCornerRadius, designUnit, disabledOpacity, fillColor, focusStrokeOuter, foregroundOnAccentRest, neutralFillInputAltActive, neutralFillInputAltFocus, neutralFillInputAltHover, neutralFillInputAltRest, neutralForegroundRest, neutralStrokeStrongActive, neutralStrokeStrongHover, neutralStrokeStrongRest, strokeWidth, } from '../design-tokens';
5
+ import { accentFillActive, accentFillHover, accentFillRest, controlCornerRadius, designUnit, disabledOpacity, foregroundOnAccentRest, neutralFillInputAltActive, neutralFillInputAltFocus, neutralFillInputAltHover, neutralFillInputAltRest, neutralForegroundRest, neutralStrokeStrongActive, neutralStrokeStrongHover, neutralStrokeStrongRest, strokeWidth, } from '../design-tokens';
6
6
  import { typeRampBase } from '../styles/patterns/type-ramp';
7
+ import { focusTreatmentTight } from '../styles/focus';
7
8
  export const checkboxStyles = (context, definition) => css `
8
9
  ${display('inline-flex')} :host {
9
10
  align-items: center;
@@ -23,7 +24,6 @@ export const checkboxStyles = (context, definition) => css `
23
24
  border-radius: calc(${controlCornerRadius} * 1px);
24
25
  border: calc(${strokeWidth} * 1px) solid ${neutralStrokeStrongRest};
25
26
  background: ${neutralFillInputAltRest};
26
- outline: none;
27
27
  cursor: pointer;
28
28
  }
29
29
 
@@ -74,9 +74,8 @@ export const checkboxStyles = (context, definition) => css `
74
74
  }
75
75
 
76
76
  :host(:${focusVisible}) .control {
77
- box-shadow: 0 0 0 1px ${fillColor}, 0 0 0 3px ${focusStrokeOuter};
78
77
  background: ${neutralFillInputAltFocus};
79
- border-color: ${focusStrokeOuter};
78
+ ${focusTreatmentTight}
80
79
  }
81
80
 
82
81
  :host(.checked) .control {
@@ -125,7 +124,7 @@ export const checkboxStyles = (context, definition) => css `
125
124
  }
126
125
  :host(:${focusVisible}) .control {
127
126
  forced-color-adjust: none;
128
- box-shadow: 0 0 0 1px ${SystemColors.Field}, 0 0 0 3px ${SystemColors.FieldText};
127
+ outline-color: ${SystemColors.FieldText};
129
128
  background: ${SystemColors.Field};
130
129
  border-color: ${SystemColors.Highlight};
131
130
  }
@@ -138,9 +137,6 @@ export const checkboxStyles = (context, definition) => css `
138
137
  background: ${SystemColors.HighlightText};
139
138
  border-color: ${SystemColors.Highlight};
140
139
  }
141
- :host(.checked:${focusVisible}) .control {
142
- box-shadow: 0 0 0 1px ${SystemColors.Field}, 0 0 0 3px ${SystemColors.FieldText};
143
- }
144
140
  :host(.checked) slot[name='checked-indicator'],
145
141
  :host(.checked) slot[name='indeterminate-indicator'] {
146
142
  fill: ${SystemColors.HighlightText};
@@ -1,12 +1,27 @@
1
1
  import { css } from '@microsoft/fast-element';
2
- import { disabledCursor, focusVisible } from '@microsoft/fast-foundation';
2
+ import { disabledCursor } from '@microsoft/fast-foundation';
3
3
  import { selectFilledStyles, selectStyles } from '../select/select.styles';
4
4
  import { appearanceBehavior } from '../utilities/behaviors';
5
- import { strokeWidth } from '../design-tokens';
5
+ import { neutralFillInputActive, neutralFillInputHover, neutralFillInputRest, neutralStrokeInputActive, neutralStrokeInputHover, neutralStrokeInputRest, strokeWidth } from '../design-tokens';
6
6
  import { typeRampBase } from '../styles/patterns/type-ramp';
7
7
  export const comboboxStyles = (context, definition) => css `
8
8
  ${selectStyles(context, definition)}
9
9
 
10
+ :host {
11
+ background: padding-box linear-gradient(${neutralFillInputRest}, ${neutralFillInputRest}),
12
+ border-box ${neutralStrokeInputRest};
13
+ }
14
+
15
+ :host(:not([disabled]):not([open]):hover) {
16
+ background: padding-box linear-gradient(${neutralFillInputHover}, ${neutralFillInputHover}),
17
+ border-box ${neutralStrokeInputHover};
18
+ }
19
+
20
+ :host(:not([disabled]):not([open]):active) {
21
+ background: padding-box linear-gradient(${neutralFillInputActive}, ${neutralFillInputActive}),
22
+ border-box ${neutralStrokeInputActive};
23
+ }
24
+
10
25
  :host(:empty) .listbox {
11
26
  display: none;
12
27
  }
@@ -30,12 +45,6 @@ export const comboboxStyles = (context, definition) => css `
30
45
  height: calc(100% - ${strokeWidth} * 1px));
31
46
  margin: auto 0;
32
47
  width: 100%;
33
- }
34
-
35
- .selected-value:hover,
36
- .selected-value:${focusVisible},
37
- .selected-value:disabled,
38
- .selected-value:active {
39
48
  outline: none;
40
49
  }
41
50
  `.withBehaviors(appearanceBehavior('filled', selectFilledStyles(context, definition)));
@@ -1,17 +1,17 @@
1
1
  import { css } from '@microsoft/fast-element';
2
2
  import { SystemColors } from '@microsoft/fast-web-utilities';
3
3
  import { focusVisible, forcedColorsStylesheetBehavior, } from '@microsoft/fast-foundation';
4
- import { controlCornerRadius, designUnit, focusStrokeOuter, focusStrokeWidth, neutralForegroundRest, } from '../design-tokens';
4
+ import { controlCornerRadius, designUnit, focusStrokeWidth, neutralForegroundRest, strokeWidth, } from '../design-tokens';
5
5
  import { typeRampBase } from '../styles/patterns/type-ramp';
6
+ import { focusTreatmentBase } from '../styles/focus';
6
7
  export const dataGridCellStyles = (context, definition) => css `
7
8
  :host {
8
- padding: calc(${designUnit} * 1px) calc(${designUnit} * 3px);
9
+ padding: calc((${designUnit} + ${focusStrokeWidth} - ${strokeWidth}) * 1px) calc(((${designUnit} * 3) + ${focusStrokeWidth} - ${strokeWidth}) * 1px);
9
10
  color: ${neutralForegroundRest};
10
11
  box-sizing: border-box;
11
12
  ${typeRampBase}
12
- border: transparent calc(${focusStrokeWidth} * 1px) solid;
13
+ border: transparent calc(${strokeWidth} * 1px) solid;
13
14
  overflow: hidden;
14
- outline: none;
15
15
  white-space: nowrap;
16
16
  border-radius: calc(${controlCornerRadius} * 1px);
17
17
  }
@@ -21,19 +21,16 @@ export const dataGridCellStyles = (context, definition) => css `
21
21
  }
22
22
 
23
23
  :host(:${focusVisible}) {
24
- border-color: ${focusStrokeOuter};
24
+ ${focusTreatmentBase}
25
25
  }
26
26
  `.withBehaviors(forcedColorsStylesheetBehavior(css `
27
27
  :host {
28
28
  forced-color-adjust: none;
29
- border-color: transparent;
30
29
  background: ${SystemColors.Field};
31
30
  color: ${SystemColors.FieldText};
32
31
  }
33
32
 
34
33
  :host(:${focusVisible}) {
35
- border-color: ${SystemColors.FieldText};
36
- box-shadow: 0 0 0 2px inset ${SystemColors.Field};
37
- color: ${SystemColors.FieldText};
34
+ outline-color: ${SystemColors.FieldText};
38
35
  }
39
36
  `));
@@ -2,7 +2,8 @@ import { css } from '@microsoft/fast-element';
2
2
  import { disabledCursor, display, focusVisible, forcedColorsStylesheetBehavior, } from '@microsoft/fast-foundation';
3
3
  import { SystemColors } from '@microsoft/fast-web-utilities';
4
4
  import { heightNumber } from '../styles';
5
- import { controlCornerRadius, designUnit, disabledOpacity, focusStrokeOuter, focusStrokeWidth, neutralFillRest, neutralFillStrongActive, neutralFillStrongHover, neutralFillStrongRest, neutralStrokeControlRest, } from '../design-tokens';
5
+ import { controlCornerRadius, designUnit, disabledOpacity, neutralFillRest, neutralFillStrongActive, neutralFillStrongHover, neutralFillStrongRest, neutralStrokeControlRest, strokeWidth, } from '../design-tokens';
6
+ import { focusTreatmentBase } from '../styles/focus';
6
7
  export const flipperStyles = (context, definition) => css `
7
8
  ${display('inline-flex')} :host {
8
9
  height: calc((${heightNumber} + ${designUnit}) * 1px);
@@ -13,9 +14,8 @@ export const flipperStyles = (context, definition) => css `
13
14
  background: padding-box linear-gradient(${neutralFillRest}, ${neutralFillRest}),
14
15
  border-box ${neutralStrokeControlRest};
15
16
  box-sizing: border-box;
16
- border: calc(${focusStrokeWidth} * 1px) solid transparent;
17
+ border: calc(${strokeWidth} * 1px) solid transparent;
17
18
  border-radius: calc(${controlCornerRadius} * 1px);
18
- outline: none;
19
19
  padding: 0;
20
20
  }
21
21
 
@@ -43,7 +43,7 @@ export const flipperStyles = (context, definition) => css `
43
43
  }
44
44
 
45
45
  :host(:${focusVisible}) {
46
- border-color: ${focusStrokeOuter};
46
+ ${focusTreatmentBase}
47
47
  }
48
48
 
49
49
  :host::-moz-focus-inner {
@@ -79,7 +79,6 @@ export const flipperStyles = (context, definition) => css `
79
79
  }
80
80
  :host(:${focusVisible}) {
81
81
  forced-color-adjust: none;
82
- border-color: ${SystemColors.Highlight};
83
- box-shadow: 0 0 0 2px ${SystemColors.ButtonFace}, 0 0 0 4px ${SystemColors.ButtonText};
82
+ outline-color: ${SystemColors.Highlight};
84
83
  }
85
84
  `));
@@ -1,6 +1,7 @@
1
1
  import { css } from '@microsoft/fast-element';
2
2
  import { display, ListboxOption } from '@microsoft/fast-foundation';
3
- import { controlCornerRadius, designUnit, focusStrokeOuter, neutralStrokeRest, strokeWidth, } from '../design-tokens';
3
+ import { controlCornerRadius, designUnit, neutralStrokeRest, strokeWidth, } from '../design-tokens';
4
+ import { focusTreatmentBase } from '../styles/focus';
4
5
  export const listboxStyles = (context, definition) => css `
5
6
  ${display('inline-flex')} :host {
6
7
  border: calc(${strokeWidth} * 1px) solid ${neutralStrokeRest};
@@ -8,7 +9,6 @@ export const listboxStyles = (context, definition) => css `
8
9
  box-sizing: border-box;
9
10
  flex-direction: column;
10
11
  padding: calc(${designUnit} * 1px) 0;
11
- outline: none;
12
12
  }
13
13
 
14
14
  ::slotted(${context.tagFor(ListboxOption)}) {
@@ -16,7 +16,6 @@ export const listboxStyles = (context, definition) => css `
16
16
  }
17
17
 
18
18
  :host(:focus-within:not([disabled])) {
19
- border-color: ${focusStrokeOuter};
20
- box-shadow: 0 0 0 1px ${focusStrokeOuter} inset;
19
+ ${focusTreatmentBase}
21
20
  }
22
21
  `;
@@ -2,24 +2,24 @@ import { css } from '@microsoft/fast-element';
2
2
  import { disabledCursor, display, focusVisible, forcedColorsStylesheetBehavior, } from '@microsoft/fast-foundation';
3
3
  import { SystemColors } from '@microsoft/fast-web-utilities';
4
4
  import { heightNumber } from '../styles/size';
5
- import { accentFillRest, controlCornerRadius, designUnit, disabledOpacity, focusStrokeOuter, focusStrokeWidth, neutralFillSecondaryActive, neutralFillSecondaryHover, neutralFillSecondaryRest, neutralFillStealthActive, neutralFillStealthFocus, neutralFillStealthHover, neutralFillStealthRest, neutralForegroundRest, } from '../design-tokens';
5
+ import { accentFillRest, controlCornerRadius, designUnit, disabledOpacity, focusStrokeWidth, neutralFillSecondaryActive, neutralFillSecondaryHover, neutralFillSecondaryRest, neutralFillStealthActive, neutralFillStealthFocus, neutralFillStealthHover, neutralFillStealthRest, neutralForegroundRest, strokeWidth, } from '../design-tokens';
6
6
  import { typeRampBase } from '../styles/patterns/type-ramp';
7
+ import { focusTreatmentBase } from '../styles/focus';
7
8
  export const optionStyles = (context, definition) => css `
8
9
  ${display('inline-flex')} :host {
9
10
  position: relative;
10
11
  ${typeRampBase}
11
12
  background: ${neutralFillStealthRest};
12
13
  border-radius: calc(${controlCornerRadius} * 1px);
13
- border: calc(${focusStrokeWidth} * 1px) solid transparent;
14
+ border: calc(${strokeWidth} * 1px) solid transparent;
14
15
  box-sizing: border-box;
15
16
  color: ${neutralForegroundRest};
16
17
  cursor: pointer;
17
18
  fill: currentcolor;
18
19
  height: calc(${heightNumber} * 1px);
19
- outline: none;
20
20
  overflow: hidden;
21
21
  align-items: center;
22
- padding: 0 calc(${designUnit} * 2.25px);
22
+ padding: 0 calc(((${designUnit} * 3) - ${strokeWidth} - 1) * 1px);
23
23
  user-select: none;
24
24
  white-space: nowrap;
25
25
  }
@@ -28,7 +28,7 @@ export const optionStyles = (context, definition) => css `
28
28
  content: '';
29
29
  display: block;
30
30
  position: absolute;
31
- left: 0;
31
+ left: calc((${focusStrokeWidth} - ${strokeWidth}) * 1px);
32
32
  top: calc((${heightNumber} / 4) - ${focusStrokeWidth} * 1px);
33
33
  width: 3px;
34
34
  height: calc((${heightNumber} / 2) * 1px);
@@ -54,7 +54,7 @@ export const optionStyles = (context, definition) => css `
54
54
  }
55
55
 
56
56
  :host(:${focusVisible}) {
57
- border-color: ${focusStrokeOuter};
57
+ ${focusTreatmentBase}
58
58
  background: ${neutralFillStealthFocus};
59
59
  }
60
60
 
@@ -127,4 +127,7 @@ export const optionStyles = (context, definition) => css `
127
127
  fill: currentcolor;
128
128
  opacity: 1;
129
129
  }
130
+ :host(:${focusVisible}) {
131
+ outline-color: ${SystemColors.CanvasText};
132
+ }
130
133
  `));
@@ -9,7 +9,7 @@ export const menuStyles = (context, definition) => css `
9
9
  border: calc(${strokeWidth} * 1px) solid transparent;
10
10
  border-radius: calc(${layerCornerRadius} * 1px);
11
11
  box-shadow: ${elevationShadowFlyout};
12
- padding: calc(${designUnit} * 1px) 0;
12
+ padding: calc((${designUnit} - ${strokeWidth}) * 1px) 0;
13
13
  max-width: 368px;
14
14
  min-width: 64px;
15
15
  }
@@ -2,14 +2,14 @@ import { css } from '@microsoft/fast-element';
2
2
  import { disabledCursor, display, focusVisible, forcedColorsStylesheetBehavior, } from '@microsoft/fast-foundation';
3
3
  import { SystemColors } from '@microsoft/fast-web-utilities';
4
4
  import { DirectionalStyleSheetBehavior, heightNumber } from '../styles/index';
5
- import { controlCornerRadius, disabledOpacity, focusStrokeOuter, focusStrokeWidth, neutralFillStealthActive, neutralFillStealthHover, neutralForegroundHint, neutralForegroundRest, strokeWidth, } from '../design-tokens';
5
+ import { controlCornerRadius, disabledOpacity, neutralFillStealthActive, neutralFillStealthHover, neutralForegroundHint, neutralForegroundRest, strokeWidth, } from '../design-tokens';
6
6
  import { typeRampBase } from '../styles/patterns/type-ramp';
7
+ import { focusTreatmentBase } from '../styles/focus';
7
8
  export const menuItemStyles = (context, definition) => css `
8
9
  ${display('grid')} :host {
9
10
  contain: layout;
10
11
  overflow: visible;
11
12
  ${typeRampBase}
12
- outline: none;
13
13
  box-sizing: border-box;
14
14
  height: calc(${heightNumber} * 1px);
15
15
  grid-template-columns: minmax(32px, auto) 1fr minmax(32px, auto);
@@ -64,8 +64,7 @@ export const menuItemStyles = (context, definition) => css `
64
64
  }
65
65
 
66
66
  :host(:${focusVisible}) {
67
- border: calc(${strokeWidth} * 1px) solid ${focusStrokeOuter};
68
- box-shadow: 0 0 0 calc((${focusStrokeWidth} - ${strokeWidth}) * 1px) ${focusStrokeOuter};
67
+ ${focusTreatmentBase}
69
68
  }
70
69
 
71
70
  :host(:not([disabled]):hover) {
@@ -151,7 +150,6 @@ export const menuItemStyles = (context, definition) => css `
151
150
  justify-content: center;
152
151
  position: relative;
153
152
  box-sizing: border-box;
154
- outline: none;
155
153
  }
156
154
 
157
155
  :host .checkbox-indicator,
@@ -197,13 +195,11 @@ export const menuItemStyles = (context, definition) => css `
197
195
  }
198
196
  :host(.expanded) {
199
197
  background: ${SystemColors.Highlight};
200
- border-color: ${SystemColors.Highlight};
201
198
  color: ${SystemColors.HighlightText};
202
199
  }
203
200
  :host(:${focusVisible}) {
204
201
  background: ${SystemColors.Highlight};
205
- border-color: ${SystemColors.ButtonText};
206
- box-shadow: 0 0 0 calc(${strokeWidth} * 1px) inset ${SystemColors.HighlightText};
202
+ outline-color: ${SystemColors.ButtonText};
207
203
  color: ${SystemColors.HighlightText};
208
204
  fill: currentcolor;
209
205
  }
@@ -219,7 +215,7 @@ export const menuItemStyles = (context, definition) => css `
219
215
  opacity: 1;
220
216
  }
221
217
  :host([disabled]:${focusVisible}) {
222
- border-color: ${SystemColors.GrayText};
218
+ outline-color: ${SystemColors.GrayText};
223
219
  }
224
220
  :host .expanded-toggle,
225
221
  :host .checkbox,
@@ -5,7 +5,6 @@ import { accentFillRest, designUnit, neutralForegroundHint, neutralStrokeStrongR
5
5
  export const progressStyles = (context, definition) => css `
6
6
  ${display('flex')} :host {
7
7
  align-items: center;
8
- outline: none;
9
8
  height: calc((${strokeWidth} * 3) * 1px);
10
9
  }
11
10
 
@@ -6,7 +6,6 @@ import { accentFillRest, neutralForegroundHint } from '../../design-tokens';
6
6
  export const progressRingStyles = (context, definition) => css `
7
7
  ${display('flex')} :host {
8
8
  align-items: center;
9
- outline: none;
10
9
  height: calc(${heightNumber} * 1px);
11
10
  width: calc(${heightNumber} * 1px);
12
11
  }
@@ -2,8 +2,9 @@ import { css } from '@microsoft/fast-element';
2
2
  import { SystemColors } from '@microsoft/fast-web-utilities';
3
3
  import { disabledCursor, display, focusVisible, forcedColorsStylesheetBehavior, } from '@microsoft/fast-foundation';
4
4
  import { heightNumber } from '../styles';
5
- import { accentFillActive, accentFillHover, accentFillRest, designUnit, disabledOpacity, fillColor, focusStrokeOuter, foregroundOnAccentRest, neutralFillInputAltActive, neutralFillInputAltFocus, neutralFillInputAltHover, neutralFillInputAltRest, neutralForegroundRest, neutralStrokeStrongActive, neutralStrokeStrongHover, neutralStrokeStrongRest, strokeWidth, } from '../design-tokens';
5
+ import { accentFillActive, accentFillHover, accentFillRest, designUnit, disabledOpacity, foregroundOnAccentRest, neutralFillInputAltActive, neutralFillInputAltFocus, neutralFillInputAltHover, neutralFillInputAltRest, neutralForegroundRest, neutralStrokeStrongActive, neutralStrokeStrongHover, neutralStrokeStrongRest, strokeWidth, } from '../design-tokens';
6
6
  import { typeRampBase } from '../styles/patterns/type-ramp';
7
+ import { focusTreatmentTight } from '../styles/focus';
7
8
  export const radioStyles = (context, definition) => css `
8
9
  ${display('inline-flex')} :host {
9
10
  --input-size: calc((${heightNumber} / 2) + ${designUnit});
@@ -27,7 +28,6 @@ export const radioStyles = (context, definition) => css `
27
28
  border-radius: 50%;
28
29
  border: calc(${strokeWidth} * 1px) solid ${neutralStrokeStrongRest};
29
30
  background: ${neutralFillInputAltRest};
30
- outline: none;
31
31
  cursor: pointer;
32
32
  }
33
33
 
@@ -76,9 +76,8 @@ export const radioStyles = (context, definition) => css `
76
76
  }
77
77
 
78
78
  :host(:${focusVisible}) .control {
79
- box-shadow: 0 0 0 1px ${fillColor}, 0 0 0 3px ${focusStrokeOuter};
79
+ ${focusTreatmentTight}
80
80
  background: ${neutralFillInputAltFocus};
81
- border-color: ${focusStrokeOuter};
82
81
  }
83
82
 
84
83
  :host(.checked) .control {
@@ -121,18 +120,14 @@ export const radioStyles = (context, definition) => css `
121
120
  }
122
121
  :host(:${focusVisible}) .control {
123
122
  forced-color-adjust: none;
124
- box-shadow: 0 0 0 1px ${SystemColors.Field}, 0 0 0 3px ${SystemColors.FieldText};
125
123
  background: ${SystemColors.Field};
126
- border-color: ${SystemColors.Highlight};
124
+ outline-color: ${SystemColors.FieldText};
127
125
  }
128
126
  :host(.checked:not(.disabled):hover) .control,
129
127
  :host(.checked:not(.disabled):active) .control {
130
128
  border-color: ${SystemColors.Highlight};
131
129
  background: ${SystemColors.Highlight};
132
130
  }
133
- :host(.checked:${focusVisible}) .control {
134
- box-shadow: 0 0 0 1px ${SystemColors.Field}, 0 0 0 3px ${SystemColors.FieldText};
135
- }
136
131
  :host(.checked) slot[name='checked-indicator'] {
137
132
  fill: ${SystemColors.Highlight};
138
133
  }
@@ -4,8 +4,9 @@ import { SystemColors } from '@microsoft/fast-web-utilities';
4
4
  import { elevationShadowFlyout } from '../styles/elevation';
5
5
  import { heightNumber } from '../styles/size';
6
6
  import { appearanceBehavior } from '../utilities/behaviors';
7
- import { bodyFont, controlCornerRadius, designUnit, disabledOpacity, fillColor, focusStrokeOuter, layerCornerRadius, neutralFillActive, neutralFillHover, neutralFillRest, neutralFillSecondaryActive, neutralFillSecondaryHover, neutralFillSecondaryRest, neutralFillStealthActive, neutralFillStealthHover, neutralFillStealthRest, neutralForegroundRest, neutralStrokeControlActive, neutralStrokeControlHover, neutralStrokeControlRest, strokeWidth, } from '../design-tokens';
7
+ import { bodyFont, controlCornerRadius, designUnit, disabledOpacity, fillColor, layerCornerRadius, neutralFillActive, neutralFillHover, neutralFillRest, neutralFillSecondaryActive, neutralFillSecondaryHover, neutralFillSecondaryRest, neutralFillStealthActive, neutralFillStealthHover, neutralFillStealthRest, neutralForegroundRest, neutralStrokeControlActive, neutralStrokeControlHover, neutralStrokeControlRest, strokeWidth, } from '../design-tokens';
8
8
  import { typeRampBase } from '../styles/patterns/type-ramp';
9
+ import { focusTreatmentBase } from '../styles/focus';
9
10
  export const selectFilledStyles = (context, definition) => css `
10
11
  :host {
11
12
  background: ${neutralFillSecondaryRest};
@@ -29,12 +30,6 @@ export const selectFilledStyles = (context, definition) => css `
29
30
  :host(:not([disabled]):not([open]):active) {
30
31
  border-color: ${SystemColors.Highlight};
31
32
  }
32
- :host(:${focusVisible}) {
33
- forced-color-adjust: none;
34
- background: transparent;
35
- border-color: ${SystemColors.Highlight};
36
- box-shadow: 0 0 0 1px inset ${SystemColors.Highlight};
37
- }
38
33
  `));
39
34
  export const selectStealthStyles = (context, definition) => css `
40
35
  :host {
@@ -113,9 +108,7 @@ export const selectStyles = (context, definition) => css `
113
108
  }
114
109
 
115
110
  :host(:${focusVisible}) {
116
- border-color: ${focusStrokeOuter};
117
- outline: none;
118
- box-shadow: 0 0 0 1px inset ${focusStrokeOuter};
111
+ ${focusTreatmentBase}
119
112
  }
120
113
 
121
114
  :host([disabled]) {
@@ -188,8 +181,7 @@ export const selectStyles = (context, definition) => css `
188
181
  }
189
182
  :host(:${focusVisible}) {
190
183
  forced-color-adjust: none;
191
- border-color: ${SystemColors.Highlight};
192
- box-shadow: 0 0 0 1px inset ${SystemColors.Highlight};
184
+ outline-color: ${SystemColors.Highlight};
193
185
  }
194
186
  :host([open]) .listbox {
195
187
  background: ${SystemColors.ButtonFace};
@@ -0,0 +1,21 @@
1
+ import { cssPartial } from '@microsoft/fast-element';
2
+ import { focusStrokeOuter, focusStrokeWidth, strokeWidth } from '../design-tokens';
3
+ /**
4
+ * Partial CSS for the focus treatment for most typical sized components like Button, Menu Item, etc.
5
+ *
6
+ * @public
7
+ */
8
+ export const focusTreatmentBase = cssPartial `
9
+ outline: calc(${focusStrokeWidth} * 1px) solid ${focusStrokeOuter};
10
+ outline-offset: calc(${focusStrokeWidth} * -1px);
11
+ `;
12
+ /**
13
+ * Partial CSS for the focus treatment for tighter components with spacing constraints, like Checkbox
14
+ * and Radio, or plain text like Hypertext appearance Anchor or Breadcrumb Item.
15
+ *
16
+ * @public
17
+ */
18
+ export const focusTreatmentTight = cssPartial `
19
+ outline: calc(${focusStrokeWidth} * 1px) solid ${focusStrokeOuter};
20
+ outline-offset: calc(${strokeWidth} * 1px);
21
+ `;
@@ -1,4 +1,5 @@
1
1
  export * from './direction';
2
2
  export * from './elevation';
3
+ export * from './focus';
3
4
  export * from './patterns/';
4
5
  export * from './size';