@primer/css 0.0.0-20220604193344 → 0.0.0-20220608022059

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 (57) hide show
  1. package/CHANGELOG.md +4 -26
  2. package/actionlist/action-list-item.scss +0 -21
  3. package/{segmented-control → app}/README.md +4 -4
  4. package/app/app-footer.scss +0 -0
  5. package/app/app-frame.scss +170 -0
  6. package/app/app-header.scss +332 -0
  7. package/app/index.scss +4 -0
  8. package/autocomplete/autocomplete.scss +0 -3
  9. package/core/index.scss +0 -1
  10. package/dist/actionlist.css +1 -1
  11. package/dist/actionlist.css.map +1 -1
  12. package/dist/app.css +2 -0
  13. package/dist/app.css.map +1 -0
  14. package/dist/app.js +1 -0
  15. package/dist/autocomplete.css.map +1 -1
  16. package/dist/color-modes.css +1 -1
  17. package/dist/color-modes.css.map +1 -1
  18. package/dist/core.css +1 -1
  19. package/dist/core.css.map +1 -1
  20. package/dist/forms.css +1 -1
  21. package/dist/forms.css.map +1 -1
  22. package/dist/marketing-buttons.css +1 -1
  23. package/dist/marketing-buttons.css.map +1 -1
  24. package/dist/marketing.css +1 -1
  25. package/dist/marketing.css.map +1 -1
  26. package/dist/meta.json +71 -82
  27. package/dist/primer.css +4 -4
  28. package/dist/primer.css.map +1 -1
  29. package/dist/product.css +1 -1
  30. package/dist/product.css.map +1 -1
  31. package/dist/stats/actionlist.json +1 -1
  32. package/dist/stats/app.json +1 -0
  33. package/dist/stats/color-modes.json +1 -1
  34. package/dist/stats/core.json +1 -1
  35. package/dist/stats/forms.json +1 -1
  36. package/dist/stats/marketing-buttons.json +1 -1
  37. package/dist/stats/marketing.json +1 -1
  38. package/dist/stats/primer.json +1 -1
  39. package/dist/stats/product.json +1 -1
  40. package/forms/form-control.scss +1 -2
  41. package/forms/index.scss +0 -2
  42. package/marketing/buttons/button.scss +1 -3
  43. package/package.json +2 -2
  44. package/product/index.scss +1 -1
  45. package/dist/segmented-control.css +0 -2
  46. package/dist/segmented-control.css.map +0 -1
  47. package/dist/segmented-control.js +0 -1
  48. package/dist/stats/segmented-control.json +0 -1
  49. package/dist/stats/toggle-switch.json +0 -1
  50. package/dist/toggle-switch.css +0 -2
  51. package/dist/toggle-switch.css.map +0 -1
  52. package/dist/toggle-switch.js +0 -1
  53. package/forms/FormControl.scss +0 -382
  54. package/segmented-control/index.scss +0 -3
  55. package/segmented-control/segmented-control.scss +0 -160
  56. package/toggle-switch/index.scss +0 -2
  57. package/toggle-switch/toggle-switch.scss +0 -243
package/CHANGELOG.md CHANGED
@@ -1,36 +1,14 @@
1
1
  # @primer/css
2
2
 
3
- ## 0.0.0-20220604193344
4
-
5
- ### Patch Changes
6
-
7
- - [#2083](https://github.com/primer/css/pull/2083) [`ec54b855`](https://github.com/primer/css/commit/ec54b8559d2d4f8389a4c8187521df29006f33da) Thanks [@simurai](https://github.com/simurai)! - Add `SegmentedControl` component
8
-
9
- * Fake entry to force publishing
10
-
11
- - [#2077](https://github.com/primer/css/pull/2077) [`ab078a58`](https://github.com/primer/css/commit/ab078a58c6ebe4118f917bed4c71fbbb56f0634f) Thanks [@mlynam](https://github.com/mlynam)! - Make .form-control elements render as disabled when a parent fieldset is disabled
12
-
13
- ## 20.2.2
14
-
15
- ### Patch Changes
16
-
17
- - [#2075](https://github.com/primer/css/pull/2075) [`9f576a3c`](https://github.com/primer/css/commit/9f576a3c33479fa0beb5ef4fe9b794f67a58070c) Thanks [@langermank](https://github.com/langermank)! - FormControl + Autocomplete component updates
18
-
19
- ## 20.2.1
20
-
21
- ### Patch Changes
22
-
23
- - [#2094](https://github.com/primer/css/pull/2094) [`33f799f1`](https://github.com/primer/css/commit/33f799f13edad2e7434425913a8d445aa27213de) Thanks [@camertron](https://github.com/camertron)! - Add missing ToggleSwitch--checked styles
24
-
25
- * [#2091](https://github.com/primer/css/pull/2091) [`f740d008`](https://github.com/primer/css/commit/f740d00827fa854062f6ce3449ca6745fae9bea8) Thanks [@tobiasahlin](https://github.com/tobiasahlin)! - Marketing: Bump font size of large buttons
26
-
27
- ## 20.2.0
3
+ ## 0.0.0-20220608022059
28
4
 
29
5
  ### Minor Changes
30
6
 
31
7
  - [#2087](https://github.com/primer/css/pull/2087) [`8354de5c`](https://github.com/primer/css/commit/8354de5c5eeb60e447712c04e25c2ef370206488) Thanks [@vdepizzol](https://github.com/vdepizzol)! - Changing `PageLayout--isPaneSticky` to `PageLayout--sticky`.
32
8
 
33
- * [#2074](https://github.com/primer/css/pull/2074) [`5cfae2c2`](https://github.com/primer/css/commit/5cfae2c2193885c34af97dd61da201c400bc8549) Thanks [@camertron](https://github.com/camertron)! - Add styles for the ToggleSwitch component
9
+ ### Patch Changes
10
+
11
+ - Fake entry to force publishing
34
12
 
35
13
  ## 20.1.1
36
14
 
@@ -235,27 +235,6 @@
235
235
  }
236
236
  }
237
237
 
238
- // disabled
239
- &[aria-disabled='true'] {
240
- .ActionList-item-content {
241
- .ActionList-item-label,
242
- .ActionList-item-description {
243
- color: var(--color-primer-fg-disabled);
244
- }
245
-
246
- .ActionList-item-visual {
247
- fill: var(--color-primer-fg-disabled);
248
- }
249
-
250
- @media (hover: hover) {
251
- &:hover {
252
- cursor: not-allowed;
253
- background-color: transparent;
254
- }
255
- }
256
- }
257
- }
258
-
259
238
  // variants
260
239
 
261
240
  // danger
@@ -1,21 +1,21 @@
1
1
  ---
2
- bundle: "segmented-control"
2
+ bundle: "app"
3
3
  generated: true
4
4
  ---
5
5
 
6
- # Primer CSS: `segmented-control` bundle
6
+ # Primer CSS: `app` bundle
7
7
 
8
8
  ## Usage
9
9
 
10
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
11
 
12
12
  ```scss
13
- @import "@primer/css/segmented-control/index.scss";
13
+ @import "@primer/css/app/index.scss";
14
14
  ```
15
15
 
16
16
  ## Build
17
17
 
18
- The `@primer/css` npm package includes a standalone CSS build of this module in `dist/segmented-control.css`.
18
+ The `@primer/css` npm package includes a standalone CSS build of this module in `dist/app.css`.
19
19
 
20
20
  ## License
21
21
 
File without changes
@@ -0,0 +1,170 @@
1
+ // stylelint-disable max-nesting-depth
2
+ // stylelint-disable selector-max-specificity
3
+ // stylelint-disable no-duplicate-selectors
4
+
5
+ .AppFrame {
6
+
7
+ // Accessibility navigation
8
+
9
+ .AppFrame-a11yNav {
10
+ position: absolute;
11
+ padding: var(--base-size-16) var(--base-size-16) var(--base-size-8);
12
+ top: calc(var(--base-size-128) * -1);
13
+ left: 0;
14
+ background: #F6F8FA; /* fixme */
15
+ z-index: 1000;
16
+ width: 100%;
17
+
18
+ ul, li {
19
+ list-style: none;
20
+ margin: 0;
21
+ padding: 0;
22
+ }
23
+
24
+ ul {
25
+ display: flex;
26
+ align-items: center;
27
+ gap: var(--base-size-8);
28
+ }
29
+
30
+ &:focus-within {
31
+ top: 0;
32
+
33
+ // Narrow viewport
34
+ @media (max-width: #{map-get($breakpoints, 'md') - 0.02px}) {
35
+ ul {
36
+ justify-content: center;
37
+ }
38
+ }
39
+ }
40
+ }
41
+
42
+ .AppFrame-a11yLink {
43
+ transition: none;
44
+
45
+ &:not(:focus) {
46
+ width: var(--base-size-8);
47
+ height: var(--base-size-8);
48
+ display: block;
49
+ overflow: hidden;
50
+ text-indent: var(--base-size-128);
51
+ border-radius: 100%;
52
+ background: var(--color-border-default);
53
+ pointer-events: none;
54
+ }
55
+
56
+ &:focus {
57
+ display: grid;
58
+ z-index: 20;
59
+ width: auto;
60
+ height: auto;
61
+ overflow: auto;
62
+ border-radius: var(--base-size-24);
63
+ min-height: var(--base-size-32);
64
+ align-items: center;
65
+ padding: 0 var(--base-size-16);
66
+ background: var(--color-accent-fg);
67
+ color: var(--color-fg-on-emphasis);
68
+
69
+ @media (pointer: coarse) {
70
+ &:after {
71
+ // pull from minTouchTarget design token
72
+ @include minTouchTarget(var(--primer-control-minTarget-coarse));
73
+ }
74
+ }
75
+
76
+ @media (prefers-reduced-motion: no-preference) {
77
+ animation: AppFrame-a11yLink-focus 200ms ease-out;
78
+ }
79
+
80
+ @keyframes AppFrame-a11yLink-focus {
81
+ 0% {
82
+ transform: scale(0.3, 0.25);
83
+ color: var(--color-accent-fg);
84
+ }
85
+ 50% {
86
+ transform: scale(1, 1);
87
+ color: var(--color-accent-fg);
88
+ }
89
+ 55% {
90
+ color: var(--color-fg-on-emphasis);
91
+ }
92
+ 100% {
93
+ transform: scaleX(1);
94
+ }
95
+ }
96
+ }
97
+ }
98
+
99
+ .AppFrame-main {
100
+ display: flex;
101
+ flex-direction: column;
102
+ min-height: 100vh;
103
+ }
104
+
105
+ .AppFrame-header-wrapper {
106
+ position: relative;
107
+ overflow: visible;
108
+ height: min-content;
109
+
110
+ .AppFrame-header {
111
+ position: sticky;
112
+ top: 0;
113
+ z-index: 1;
114
+ }
115
+ }
116
+
117
+ .AppFrame-header {
118
+ flex: 0 0 auto;
119
+ }
120
+
121
+ .AppFrame-tray {
122
+ overflow: hidden;
123
+ flex: 0 0 auto;
124
+ background: linear-gradient(to bottom, var(--color-border-default) -#{$spacer-3}, var(--color-canvas-inset) #{$spacer-2});
125
+
126
+ @keyframes flash-tray--appear {
127
+ from {
128
+ opacity: 0;
129
+ transform: translateY(-$spacer-4);
130
+ }
131
+ to {
132
+ opacity: 1;
133
+ }
134
+ }
135
+
136
+ @include breakpoint(md) {
137
+ padding: $spacer-2 $spacer-3;
138
+ border-bottom: $border-width $border-style var(--color-border-default);
139
+
140
+ .Flash {
141
+ animation: flash-tray--appear 160ms 80ms both cubic-bezier(0.33, 1, 0.68, 1);
142
+
143
+ & + .Flash {
144
+ margin-top: $spacer-2;
145
+ animation-delay: 160ms;
146
+ }
147
+ }
148
+ }
149
+
150
+ &:empty {
151
+ display: none;
152
+ }
153
+
154
+ // FIXME: use theme-high-contrast mixin
155
+ @at-root :is([data-color-mode="light"][data-light-theme$='high_contrast'], [data-color-mode="dark"][data-dark-theme$='high_contrast']) & {
156
+ background: var(--color-canvas-inset);
157
+ }
158
+ }
159
+
160
+ .AppFrame-body {
161
+ flex: 1 0;
162
+ height: 100%;
163
+ }
164
+
165
+ .AppFrame-footer {
166
+ border-top: $border-width $border-style var(--color-border-default);
167
+ background: var(--color-canvas-inset);
168
+ padding: $spacer-3;
169
+ }
170
+ }
@@ -0,0 +1,332 @@
1
+ .AppHeader {
2
+ --AppHeader-bg: #F6F8FA; /* bg.subtle? */
3
+ --AppHeader-bg: var(--color-canvas-inset);
4
+
5
+ background: var(--AppHeader-bg);
6
+ color: var(--color-fg-default);
7
+
8
+ // Global bar
9
+
10
+ .AppHeader-globalBar {
11
+ padding: var(--base-size-16, 16px);
12
+ display: flex;
13
+ gap: var(--base-size-12, 12px);
14
+
15
+ // #region [ logo + avatar ]
16
+
17
+ .AppHeader-logo, .AppHeader-user {
18
+ flex: 0 0 auto;
19
+ display: grid;
20
+ width: var(--base-size-32, 32px);
21
+ height: var(--base-size-32, 32px);
22
+
23
+ button, a {
24
+ grid-area: 1 / 1;
25
+ display: block;
26
+ width: var(--base-size-32, 32px);
27
+ height: var(--base-size-32, 32px);
28
+ }
29
+
30
+ button {
31
+ background: transparent;
32
+ padding: 0;
33
+ border: none;
34
+ border-radius: 100%;
35
+ outline-offset: var(--primer-borderWidth-normal, 2px);
36
+ }
37
+
38
+ a {
39
+ grid-area: 1 / 1;
40
+ position: relative;
41
+ overflow: hidden;
42
+ text-indent: var(--base-size-128, 128px);
43
+ color: transparent;
44
+
45
+ @media (pointer: coarse) {
46
+ &:after {
47
+ // pull from minTouchTarget design token
48
+ @include minTouchTarget(var(--primer-control-minTarget-coarse, 44px), var(--primer-control-minTarget-coarse, 44px));
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ .AppHeader-logo svg {
55
+ width: var(--base-size-32, 32px);
56
+ height: var(--base-size-32, 32px);
57
+ }
58
+
59
+ .AppHeader-user {
60
+ background: var(--color-neutral-muted);
61
+ border-radius: 100%;
62
+ position: relative;
63
+
64
+ img {
65
+ display: block;
66
+ position: relative;
67
+ width: 100%;
68
+ height: 100%;
69
+ border-radius: 100%;
70
+ }
71
+
72
+ &:before {
73
+ pointer-events: none;
74
+ content: "";
75
+ display: block;
76
+ position: absolute;
77
+ z-index: 2;
78
+ top: 0;
79
+ left: 0;
80
+ width: 100%;
81
+ height: 100%;
82
+ border-radius: 100%;
83
+ box-shadow: inset 0 0 0 var(--primer-borderWidth-thin, 1px) var(--color-border-subtle);
84
+ }
85
+ }
86
+
87
+ // #endregion [ logo + avatar ]
88
+
89
+ // #region [ Context ]
90
+ // Breadcrumb, title, any contextual information directly after the logo
91
+
92
+ .AppHeader-context {
93
+ flex: 1 1 auto;
94
+ height: var(--base-size-32, 32px);
95
+ //background: #ececec;
96
+ }
97
+
98
+ // #endregion [ Context ]
99
+
100
+ // #region [ Search ]
101
+
102
+ .AppHeader-search {
103
+ position: relative;
104
+ width: 400px;
105
+
106
+ .AppHeader-search-wrap {
107
+ display: grid;
108
+ }
109
+
110
+ .AppHeader-search-label {
111
+ grid-area: 1 / 1;
112
+ display: block;
113
+ font-weight: normal;
114
+ color: var(--color-fg-subtle); // non-essential
115
+ pointer-events: none;
116
+ z-index: 1;
117
+ padding-block: var(--primer-control-medium-paddingBlock);
118
+ padding-inline: calc(var(--primer-control-medium-paddingInline-condensed) + var(--base-size-16) + var(--primer-control-medium-gap));
119
+ line-height: var(--primer-text-body-lineHeight-medium, 20px);
120
+ width: 100%;
121
+ white-space: nowrap;
122
+ overflow: hidden;
123
+ text-overflow: ellipsis;
124
+
125
+ kbd {
126
+ display: inline-grid;
127
+ align-items: center;
128
+ justify-content: center;
129
+ background: transparent;
130
+ border-radius: var(--primer-borderRadius-small);
131
+ vertical-align: baseline;
132
+ width: var(--base-size-12);
133
+ height: var(--base-size-16);
134
+ border: var(--primer-borderWidth-thin, 1px) solid var(--color-fg-subtle);
135
+ color: inherit;
136
+ padding: 0;
137
+ box-shadow: none;
138
+ }
139
+ }
140
+
141
+ .AppHeader-search-control {
142
+ grid-area: 1 / 1;
143
+ position: relative;
144
+ z-index: 2;
145
+ }
146
+
147
+ .AppHeader-search-visual--leading {
148
+ position: absolute;
149
+ display: block;
150
+ width: var(--base-size-16, 16px);
151
+ height: var(--base-size-16, 16px);
152
+ top: var(--base-size-8, 8px);
153
+ left: var(--base-size-8, 8px);
154
+ color: var(--color-fg-muted);
155
+ pointer-events: none;
156
+
157
+ svg {
158
+ display: block !important;
159
+ }
160
+ }
161
+
162
+ input[type="search"] {
163
+ width: 100%;
164
+ padding-block: calc(var(--primer-control-medium-paddingBlock) - var(--primer-borderWidth-thin));
165
+ padding-inline: calc(var(--primer-control-medium-paddingInline-condensed) + var(--base-size-16) + var(--primer-control-medium-gap) - var(--primer-borderWidth-thin));
166
+ transition: none;
167
+
168
+ &:placeholder-shown {
169
+ background: transparent;
170
+ }
171
+
172
+ &:not(:placeholder-shown) {
173
+ background: var(--color-canvas-default);
174
+ }
175
+
176
+ &::placeholder {
177
+ opacity: 1;
178
+ color: transparent;
179
+ }
180
+
181
+ &:focus {
182
+ background: var(--color-canvas-default);
183
+
184
+ &::placeholder {
185
+ color: var(--color-fg-subtle);
186
+ }
187
+
188
+ &:-moz-placeholder {
189
+ opacity: 1;
190
+ color: var(--color-fg-subtle);
191
+ }
192
+ }
193
+ }
194
+
195
+ .AppHeader-search-action--trailing {
196
+ display: grid;
197
+ align-items: center;
198
+ justify-content: center;
199
+ position: absolute;
200
+ top: var(--base-size-4, 4px);
201
+ right: var(--base-size-4, 4px);
202
+ z-index: 4;
203
+ width: var(--primer-control-xsmall-size, 24px);
204
+ height: var(--primer-control-xsmall-size, 24px);
205
+ padding: 0;
206
+ border: none;
207
+ border-radius: var(--primer-borderRadius-small);
208
+ background: transparent;
209
+ color: var(--color-fg-muted);
210
+
211
+ &:hover {
212
+ background: var(--color-action-list-item-default-hover-bg);
213
+ }
214
+
215
+ &:active {
216
+ background: var(--color-action-list-item-default-active-bg);
217
+ }
218
+
219
+ &:before {
220
+ content: "";
221
+ display: block;
222
+ position: absolute;
223
+ top: calc((var(--primer-control-xsmall-size) - var(--base-size-16)) / 2);
224
+ left: calc(var(--base-size-4, 4px) * -1);
225
+ width: var(--primer-borderWidth-thin);
226
+ height: var(--base-size-16);
227
+ background: var(--color-border-default);
228
+ }
229
+
230
+ &:after {
231
+ @include minTouchTarget(var(--primer-control-medium-size), var(--primer-control-medium-size));
232
+
233
+ @media (pointer: coarse) {
234
+ min-width: var(--primer-control-minTarget-coarse);
235
+ min-height: var(--primer-control-minTarget-coarse);
236
+ }
237
+ }
238
+
239
+ svg {
240
+ color: inherit;
241
+ }
242
+ }
243
+ }
244
+ // #endregion [ Search ]
245
+
246
+ // #region [ Actions ]
247
+
248
+ .AppHeader-divider {
249
+ height: var(--base-size-20, 20px);
250
+ width: var(--primer-borderWidth-thin, 1px);
251
+ height: var(--base-size-20, 20px);
252
+ background: var(--color-border-default);
253
+ margin: calc((var(--primer-control-medium-size) - var(--base-size-20)) / 2) 0;
254
+ }
255
+
256
+ .AppHeader-actions {
257
+ display: grid;
258
+ grid-auto-flow: column;
259
+ gap: var(--primer-controlStack-medium-gap-auto);
260
+ }
261
+
262
+ // #endregion [ Actions ]
263
+
264
+ }
265
+
266
+ // Local bar
267
+
268
+ .AppHeader-localBar {
269
+ padding: 0 var(--base-size-16, 16px) var(--base-size-16, 16px);
270
+ //background: lightcyan;
271
+ box-shadow: inset 0 calc(var(--primer-borderWidth-thin, 1px) * -1) var(--color-border-default);
272
+ }
273
+
274
+ // AppHeader items
275
+
276
+ .AppHeader-item {
277
+ flex: 0 0 auto;
278
+ background: lightpink;
279
+ }
280
+
281
+ .AppHeader-item--full {
282
+ flex-grow: 1;
283
+ }
284
+
285
+ .AppHeader-button {
286
+ position: relative;
287
+ display: grid;
288
+ width: var(--base-size-32);
289
+ height: var(--base-size-32);
290
+ border: var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);
291
+ border-radius: var(--primer-borderRadius-medium, 6px);
292
+ color: var(--color-fg-muted);
293
+ align-items: center;
294
+ justify-content: center;
295
+
296
+ svg {
297
+ display: block !important;
298
+ color: inherit !important;
299
+ width: var(--base-size-16);
300
+ height: var(--base-size-16);
301
+ }
302
+
303
+ &:hover {
304
+ background: var(--color-action-list-item-default-hover-bg);
305
+ }
306
+
307
+ &:active {
308
+ background: var(--color-action-list-item-default-active-bg);
309
+ }
310
+
311
+ @media (pointer: coarse) {
312
+ &:after {
313
+ // pull from minTouchTarget design token
314
+ @include minTouchTarget(var(--primer-control-minTarget-coarse, 44px), var(--primer-control-minTarget-coarse, 44px));
315
+ }
316
+ }
317
+
318
+ &.AppHeader-button--hasIndicator:before {
319
+ position: absolute;
320
+ content: "";
321
+ display: block;
322
+ top: -2px;
323
+ right: -2px;
324
+ z-index: 2;
325
+ background: var(--color-accent-fg);
326
+ border-radius: 100%;
327
+ width: 8px;
328
+ height: 8px;
329
+ box-shadow: 0 0 0 2px var(--AppHeader-bg);
330
+ }
331
+ }
332
+ }
package/app/index.scss ADDED
@@ -0,0 +1,4 @@
1
+ @import '../support/index.scss';
2
+ @import './app-frame.scss';
3
+ @import './app-header.scss';
4
+ @import './app-footer.scss';
@@ -1,6 +1,3 @@
1
- // This file can be deprecated when AutoComplete is upstreamed to PVC + rolled out to dotcom https://github.com/github/primer/issues/796
2
- // AutoComplete relies on FormControl, Overlay and ActionList CSS
3
-
4
1
  // Stacked label (default)
5
2
  .autocomplete-label-stacked {
6
3
  display: block;
package/core/index.scss CHANGED
@@ -22,7 +22,6 @@
22
22
  @import '../links/index.scss';
23
23
  @import '../navigation/index.scss';
24
24
  @import '../pagination/index.scss';
25
- @import '../segmented-control/index.scss';
26
25
  @import '../tooltips/index.scss';
27
26
  @import '../truncate/index.scss';
28
27
  @import '../overlay/index.scss';