@primer/css 20.3.0-rc.a7df1fad → 20.3.0-rc.d94a0bf1

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.
@@ -0,0 +1 @@
1
+ {"size":2604,"gzipSize":743,"humanizedSize":"3KB","humanizedGzipSize":"743B","rules":{"total":20,"size":{"graph":[4,9,2,2,3,7,1,8,1,5,1,2,1,2,1,2,1,1,8,1],"max":9,"average":3.1},"selectorByRuleSizes":[{"selector":".SegmentedControl-button","declarations":9},{"selector":".SegmentedControl-button::after","declarations":8},{"selector":".SegmentedControl-content","declarations":8},{"selector":".SegmentedControl-button+.SegmentedControl-button::before","declarations":7},{"selector":".SegmentedControl-text[data-content]::before","declarations":5},{"selector":".SegmentedControl","declarations":4},{"selector":".SegmentedControl-button.SegmentedControl-button--selected","declarations":3},{"selector":".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-content","declarations":2},{"selector":".SegmentedControl-button--iconOnly .SegmentedControl-content","declarations":2},{"selector":".SegmentedControl--fullWidth .SegmentedControl-button","declarations":2},{"selector":".SegmentedControl-button:not(.SegmentedControl-button--selected):active .SegmentedControl-content","declarations":2},{"selector":".SegmentedControl-button:not(.SegmentedControl-button--selected):hover .SegmentedControl-content","declarations":2},{"selector":".SegmentedControl-button--iconOnly,.SegmentedControl--iconOnly-whenNarrow .SegmentedControl-button","declarations":1},{"selector":".SegmentedControl-button","declarations":1},{"selector":".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-text","declarations":1},{"selector":".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-button","declarations":1},{"selector":".SegmentedControl-button--iconOnly","declarations":1},{"selector":".SegmentedControl--fullWidth","declarations":1},{"selector":".SegmentedControl-leadingVisual","declarations":1},{"selector":".SegmentedControl-button.SegmentedControl-button--selected::before,.SegmentedControl-button.SegmentedControl-button--selected+.SegmentedControl-button::before","declarations":1}]},"selectors":{"total":22,"type":0,"class":22,"id":0,"pseudoClass":2,"pseudoElement":5,"values":[".SegmentedControl",".SegmentedControl-button",".SegmentedControl-button:not(.SegmentedControl-button--selected):hover .SegmentedControl-content",".SegmentedControl-button:not(.SegmentedControl-button--selected):active .SegmentedControl-content",".SegmentedControl-button.SegmentedControl-button--selected",".SegmentedControl-button+.SegmentedControl-button::before",".SegmentedControl-button.SegmentedControl-button--selected::before",".SegmentedControl-button.SegmentedControl-button--selected+.SegmentedControl-button::before",".SegmentedControl-content",".SegmentedControl-leadingVisual",".SegmentedControl-text[data-content]::before",".SegmentedControl--fullWidth",".SegmentedControl--fullWidth .SegmentedControl-button",".SegmentedControl-button--iconOnly",".SegmentedControl-button--iconOnly .SegmentedControl-content",".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-button",".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-content",".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-text",".SegmentedControl-button",".SegmentedControl-button::after",".SegmentedControl-button--iconOnly",".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-button"],"specificity":{"max":40,"average":18.40909090909091}},"declarations":{"total":62,"unique":49,"uniqueToTotalRatio":0.7903225806451613,"properties":{"display":["inline-flex","inline-flex","flex","block","flex","none"],"background-color":["var(--color-segmented-control-bg)","transparent","var(--color-segmented-control-button-hover-bg)","var(--color-segmented-control-button-active-bg)","var(--color-btn-bg)"],"border-radius":["6px","6px","6px"],"box-shadow":["inset 0 0 0 1px var(--color-border-default)"],"position":["relative","absolute","absolute"],"height":["32px","16px","100%","0","100%"],"padding":["calc(4px - 1px)","0 8px","0","0"],"font-size":["14px"],"color":["var(--color-fg-default)","var(--color-fg-muted)"],"border":["1px solid transparent"],"transition-duration":["80ms","0"],"font-weight":["600","600"],"border-color":["var(--color-segmented-control-button-selected-border)","transparent"],"inset":["1px 0 0 calc(1px*-1)"],"margin-top":["6px"],"content":["\"\"","attr(data-content)","\"\""],"border-left":["1px solid var(--color-border-default)"],"transition":["border-color 160ms cubic-bezier(0.3, 0.1, 0.5, 1)","background-color 160ms cubic-bezier(0.3, 0.1, 0.5, 1)"],"align-items":["center"],"justify-content":["center","center"],"gap":["8px"],"visibility":["hidden"],"flex":["1","1","1"],"width":["32px","32px","100%"],"min-width":["44px","unset"],"top":["50%"],"left":["50%"],"min-height":["44px"],"transform":["translateX(-50%) translateY(-50%)"]}},"mediaQueries":{"total":2,"unique":2,"values":["(max-width: 768px)","(pointer: coarse)"],"contents":[{"value":"(max-width: 768px)","rules":{"total":3,"size":{"graph":[1,2,1],"max":2,"average":1.3333333333333333},"selectorByRuleSizes":[{"selector":",.SegmentedControl--iconOnly-whenNarrow .SegmentedControl-content","declarations":2},{"selector":",.SegmentedControl--iconOnly-whenNarrow .SegmentedControl-text","declarations":1},{"selector":".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-button","declarations":1}]},"selectors":{"total":3,"type":0,"class":3,"id":0,"pseudoClass":0,"pseudoElement":0,"values":[".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-button",".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-content",".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-text"],"specificity":{"max":20,"average":20}},"declarations":{"total":4,"unique":4,"uniqueToTotalRatio":1,"properties":{"width":["32px"],"padding":["0"],"flex":["1"],"display":["none"]}}},{"value":"(pointer: coarse)","rules":{"total":3,"size":{"graph":[1,8,1],"max":8,"average":3.3333333333333335},"selectorByRuleSizes":[{"selector":",.SegmentedControl-button::after","declarations":8},{"selector":",.SegmentedControl-button--iconOnly,.SegmentedControl--iconOnly-whenNarrow .SegmentedControl-button","declarations":1},{"selector":".SegmentedControl-button","declarations":1}]},"selectors":{"total":4,"type":0,"class":4,"id":0,"pseudoClass":0,"pseudoElement":1,"values":[".SegmentedControl-button",".SegmentedControl-button::after",".SegmentedControl-button--iconOnly",".SegmentedControl--iconOnly-whenNarrow .SegmentedControl-button"],"specificity":{"max":20,"average":12.75}},"declarations":{"total":10,"unique":10,"uniqueToTotalRatio":1,"properties":{"min-width":["44px","unset"],"position":["absolute"],"top":["50%"],"left":["50%"],"width":["100%"],"height":["100%"],"min-height":["44px"],"content":["\"\""],"transform":["translateX(-50%) translateY(-50%)"]}}}]}}
@@ -18,7 +18,8 @@
18
18
  // │ │
19
19
  // │ ├─ #start-of-content
20
20
  // │ ├─ .AppFrame-body
21
- // │ ├─ .AppFrame-footer
21
+ // │
22
+ // │ .AppFrame-footer
22
23
 
23
24
  // Accessibility navigation
24
25
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer/css",
3
- "version": "20.3.0-rc.a7df1fad",
3
+ "version": "20.3.0-rc.d94a0bf1",
4
4
  "description": "The CSS implementation of GitHub's Primer Design System",
5
5
  "homepage": "https://primer.style/css",
6
6
  "author": "GitHub, Inc.",
@@ -41,26 +41,26 @@
41
41
  "storybook": "cd docs && yarn && yarn storybook"
42
42
  },
43
43
  "dependencies": {
44
- "@primer/primitives": "^7.8.4"
44
+ "@primer/primitives": "^7.9.0"
45
45
  },
46
46
  "devDependencies": {
47
- "@changesets/changelog-github": "0.4.4",
48
- "@changesets/cli": "2.22.0",
47
+ "@changesets/changelog-github": "0.4.5",
48
+ "@changesets/cli": "2.23.2",
49
49
  "@github/prettier-config": "0.0.4",
50
50
  "@koddsson/postcss-sass": "5.0.1",
51
51
  "@primer/stylelint-config": "^12.4.0",
52
52
  "autoprefixer": "10.4.7",
53
53
  "chokidar-cli": "3.0.0",
54
54
  "cssstats": "4.0.5",
55
- "eslint": "8.18.0",
55
+ "eslint": "8.20.0",
56
56
  "eslint-plugin-github": "4.3.6",
57
- "eslint-plugin-jest": "26.1.5",
58
- "eslint-plugin-prettier": "4.0.0",
57
+ "eslint-plugin-jest": "26.6.0",
58
+ "eslint-plugin-prettier": "4.2.1",
59
59
  "filesize": "9.0.11",
60
60
  "front-matter": "4.0.2",
61
61
  "fs-extra": "10.1.0",
62
- "globby": "13.1.1",
63
- "jest": "28.1.0",
62
+ "globby": "13.1.2",
63
+ "jest": "28.1.3",
64
64
  "js-yaml": "4.1.0",
65
65
  "postcss": "8.4.14",
66
66
  "postcss-calc": "8.2.4",
@@ -68,9 +68,9 @@
68
68
  "postcss-load-config": "4.0.1",
69
69
  "postcss-scss": "4.0.4",
70
70
  "postcss-simple-vars": "6.0.3",
71
- "prettier": "2.6.2",
71
+ "prettier": "2.7.1",
72
72
  "semver": "7.3.7",
73
- "stylelint": "14.8.5",
73
+ "stylelint": "14.9.1",
74
74
  "table": "6.8.0"
75
75
  },
76
76
  "jest": {
@@ -0,0 +1,25 @@
1
+ ---
2
+ bundle: "segmented-control"
3
+ generated: true
4
+ ---
5
+
6
+ # Primer CSS: `segmented-control` bundle
7
+
8
+ ## Usage
9
+
10
+ Primer CSS source files are written in [SCSS]. To include this Primer CSS module in your own build, ensure that your `node_modules` directory is listed in your Sass include paths, then import it with:
11
+
12
+ ```scss
13
+ @import "@primer/css/segmented-control/index.scss";
14
+ ```
15
+
16
+ ## Build
17
+
18
+ The `@primer/css` npm package includes a standalone CSS build of this module in `dist/segmented-control.css`.
19
+
20
+ ## License
21
+
22
+ [MIT](https://github.com/primer/css/blob/main/LICENSE) © [GitHub](https://github.com/)
23
+
24
+
25
+ [scss]: https://sass-lang.com/documentation/syntax#scss
@@ -0,0 +1,3 @@
1
+ // support files
2
+ @import '../support/index.scss';
3
+ @import './segmented-control.scss';
@@ -0,0 +1,159 @@
1
+ // SegmentedControl
2
+
3
+ .SegmentedControl {
4
+ display: inline-flex;
5
+ background-color: var(--color-segmented-control-bg);
6
+ // stylelint-disable-next-line primer/borders
7
+ border-radius: var(--primer-borderRadius-medium, $border-radius);
8
+ // stylelint-disable-next-line primer/box-shadow
9
+ box-shadow: var(--primer-borderInset-thin, inset 0 0 0 $border-width) var(--color-border-default);
10
+ }
11
+
12
+ // Button -----------------------------------------
13
+
14
+ .SegmentedControl-button {
15
+ position: relative;
16
+ display: inline-flex;
17
+ height: var(--primer-control-medium-size, 32px);
18
+ // stylelint-disable-next-line primer/spacing
19
+ padding: calc(var(--primer-control-xsmall-paddingInline-condensed, 4px) - var(--primer-borderWidth-thin, 1px));
20
+ // stylelint-disable-next-line primer/typography
21
+ font-size: var(--primer-text-body-size-medium, $body-font-size);
22
+ color: var(--color-fg-default);
23
+ background-color: transparent;
24
+ // stylelint-disable-next-line primer/borders
25
+ border: var(--primer-borderWidth-thin, $border-width) $border-style transparent;
26
+ // stylelint-disable-next-line primer/borders
27
+ border-radius: var(--primer-borderRadius-medium, $border-radius);
28
+
29
+ &:not(.SegmentedControl-button--selected):hover .SegmentedControl-content {
30
+ background-color: var(--color-segmented-control-button-hover-bg);
31
+ transition-duration: var(--primer-duration-fast, 80ms);
32
+ }
33
+
34
+ &:not(.SegmentedControl-button--selected):active .SegmentedControl-content {
35
+ background-color: var(--color-segmented-control-button-active-bg);
36
+ transition-duration: 0;
37
+ }
38
+
39
+ // Selected
40
+
41
+ &.SegmentedControl-button--selected {
42
+ // stylelint-disable-next-line primer/typography
43
+ font-weight: var(--base-text-weight-semibold, $font-weight-bold);
44
+ background-color: var(--color-btn-bg);
45
+ border-color: var(--color-segmented-control-button-selected-border);
46
+ }
47
+
48
+ // Divider
49
+
50
+ // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector
51
+ & + .SegmentedControl-button::before {
52
+ position: absolute;
53
+ inset: var(--primer-borderWidth-thin, 1px) 0 0 calc(var(--primer-borderWidth-thin, 1px) * -1);
54
+ height: var(--primer-text-body-size-large, 16px);
55
+ // stylelint-disable-next-line primer/spacing
56
+ margin-top: var(--primer-control-medium-paddingBlock, 6px);
57
+ content: '';
58
+ // stylelint-disable-next-line primer/borders
59
+ border-left: var(--primer-borderWidth-thin, $border-width) $border-style var(--color-border-default);
60
+ transition: border-color var(--primer-duration-medium, 160ms) cubic-bezier(0.3, 0.1, 0.5, 1);
61
+ }
62
+
63
+ &.SegmentedControl-button--selected::before,
64
+ &.SegmentedControl-button--selected + .SegmentedControl-button::before {
65
+ border-color: transparent;
66
+ }
67
+ }
68
+
69
+ // Content -----------------------------------------
70
+
71
+ .SegmentedControl-content {
72
+ display: flex;
73
+ align-items: center;
74
+ justify-content: center;
75
+ gap: var(--primer-control-medium-gap, $spacer-2);
76
+ height: 100%;
77
+ // stylelint-disable-next-line primer/spacing
78
+ padding: 0 var(--primer-control-medium-paddingInline-condensed, 8px);
79
+ // stylelint-disable-next-line primer/borders
80
+ border-radius: var(--primer-borderRadius-medium, $border-radius);
81
+ transition: background-color var(--primer-duration-medium, 160ms) cubic-bezier(0.3, 0.1, 0.5, 1);
82
+ }
83
+
84
+ // Leading visual -----------------------------------------
85
+
86
+ .SegmentedControl-leadingVisual {
87
+ color: var(--color-fg-muted);
88
+ }
89
+
90
+ // Text -----------------------------------------
91
+
92
+ .SegmentedControl-text {
93
+ // renders a visibly hidden "copy" of the text in bold, reserving box space for when text becomes bold on selected
94
+ &[data-content]::before {
95
+ display: block;
96
+ height: 0;
97
+ // stylelint-disable-next-line primer/typography
98
+ font-weight: var(--base-text-weight-semibold, $font-weight-bold);
99
+ visibility: hidden;
100
+ content: attr(data-content);
101
+ }
102
+ }
103
+
104
+ // Variants -----------------------------------------
105
+
106
+ // fullWidth
107
+ .SegmentedControl--fullWidth {
108
+ display: flex;
109
+
110
+ .SegmentedControl-button {
111
+ flex: 1;
112
+ justify-content: center;
113
+ }
114
+ }
115
+
116
+ // Icon only
117
+ .SegmentedControl-button--iconOnly {
118
+ width: var(--primer-control-medium-size, 32px);
119
+
120
+ .SegmentedControl-content {
121
+ padding: 0;
122
+ flex: 1;
123
+ }
124
+ }
125
+
126
+ // Icon only when narrow
127
+ @media (max-width: $width-md) {
128
+ .SegmentedControl--iconOnly-whenNarrow {
129
+ .SegmentedControl-button {
130
+ width: var(--primer-control-medium-size, 32px);
131
+ }
132
+
133
+ .SegmentedControl-content {
134
+ padding: 0;
135
+ flex: 1;
136
+ }
137
+
138
+ .SegmentedControl-text {
139
+ display: none;
140
+ }
141
+ }
142
+ }
143
+
144
+ // Increase touch target
145
+ @media (pointer: coarse) {
146
+ .SegmentedControl-button {
147
+ min-width: var(--primer-control-minTarget-coarse, 44px);
148
+
149
+ &::after {
150
+ @include minTouchTarget($min-height: var(--primer-control-minTarget-coarse, 44px));
151
+ }
152
+ }
153
+
154
+ // reset for icon-only buttons
155
+ .SegmentedControl-button--iconOnly,
156
+ .SegmentedControl--iconOnly-whenNarrow .SegmentedControl-button {
157
+ min-width: unset;
158
+ }
159
+ }