@rolemodel/optics 2.1.2 → 2.1.4

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 (44) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/.yarn/releases/yarn-4.8.1.cjs +935 -0
  3. package/.yarnrc.yml +1 -1
  4. package/README.md +1 -1
  5. package/dist/README.md +1 -1
  6. package/dist/css/components/accordion.css +66 -0
  7. package/dist/css/components/alert.css +171 -0
  8. package/dist/css/components/avatar.css +95 -0
  9. package/dist/css/components/badge.css +73 -0
  10. package/dist/css/components/breadcrumbs.css +37 -0
  11. package/dist/css/components/button.css +273 -0
  12. package/dist/css/components/button_group.css +47 -0
  13. package/dist/css/components/card.css +70 -0
  14. package/dist/css/components/confirm-dialog.css +80 -0
  15. package/dist/css/components/divider.css +55 -0
  16. package/dist/css/components/form.css +360 -0
  17. package/dist/css/components/icon.css +121 -0
  18. package/dist/css/components/index.css +24 -0
  19. package/dist/css/components/modal.css +149 -0
  20. package/dist/css/components/navbar.css +60 -0
  21. package/dist/css/components/pagination.css +24 -0
  22. package/dist/css/components/side_panel.css +90 -0
  23. package/dist/css/components/sidebar.css +138 -0
  24. package/dist/css/components/spinner.css +52 -0
  25. package/dist/css/components/switch.css +107 -0
  26. package/dist/css/components/tab.css +76 -0
  27. package/dist/css/components/table.css +133 -0
  28. package/dist/css/components/tag.css +168 -0
  29. package/dist/css/components/text_pair.css +55 -0
  30. package/dist/css/components/tooltip.css +134 -0
  31. package/dist/css/core/base.css +95 -0
  32. package/dist/css/core/fonts/icon_fonts.css +8 -0
  33. package/dist/css/core/fonts/index.css +8 -0
  34. package/dist/css/core/fonts/text_fonts.css +16 -0
  35. package/dist/css/core/layout.css +43 -0
  36. package/dist/css/core/tokens/base_tokens.css +338 -0
  37. package/dist/css/core/tokens/index.css +2 -0
  38. package/dist/css/core/tokens/scale_color_tokens.css +1498 -0
  39. package/dist/css/core/utilities.css +429 -0
  40. package/dist/css/optics.css +10 -2
  41. package/dist/css/optics.min.css +1 -1
  42. package/dist/package.json +3 -3
  43. package/package.json +3 -3
  44. package/.yarn/releases/yarn-4.2.2.cjs +0 -894
@@ -0,0 +1,360 @@
1
+ .form-control {
2
+ /* Public API (customizable component options) */
3
+ --_op-form-control-height-small: var(--op-input-height-small);
4
+ --_op-form-control-height-medium: var(--op-input-height-medium);
5
+ --_op-form-control-height-large: var(--op-input-height-large);
6
+ --_op-form-control-font-small: var(--op-font-x-small);
7
+ --_op-form-control-font-medium: var(--op-font-small);
8
+ --_op-form-control-font-large: var(--op-font-small);
9
+
10
+ /* Private API (component option defaults) */
11
+ --__op-form-control-height: var(--_op-form-control-height-large);
12
+ --__op-form-control-font-size: var(--_op-form-control-font-large);
13
+
14
+ min-width: var(--__op-form-control-height);
15
+ height: var(--__op-form-control-height);
16
+
17
+ /* Size Modifiers */
18
+ &.form-control--small {
19
+ --__op-form-control-height: var(--_op-form-control-height-small);
20
+ --__op-form-control-font-size: var(--_op-form-control-font-small);
21
+ }
22
+
23
+ &.form-control--medium {
24
+ --__op-form-control-height: var(--_op-form-control-height-medium);
25
+ --__op-form-control-font-size: var(--_op-form-control-font-medium);
26
+ }
27
+
28
+ &.form-control--large {
29
+ --__op-form-control-height: var(--_op-form-control-height-large);
30
+ --__op-form-control-font-size: var(--_op-form-control-font-large);
31
+ }
32
+
33
+ /* Disabled State */
34
+ &:disabled {
35
+ cursor: not-allowed;
36
+ opacity: var(--_op-form-control-opacity-disabled);
37
+ }
38
+
39
+ /* Readonly State */
40
+ &[readonly] {
41
+ padding: 0;
42
+ background: transparent;
43
+ box-shadow: none;
44
+ color: var(--op-color-on-background);
45
+ pointer-events: none;
46
+ user-select: none;
47
+
48
+ /* stylelint-disable selector-no-vendor-prefix */
49
+ &::-webkit-input-placeholder {
50
+ color: var(--op-color-on-background);
51
+ }
52
+ /* stylelint-enable selector-no-vendor-prefix */
53
+ }
54
+ }
55
+
56
+ /* Radio or Checkbox Form Control */
57
+ .form-control:is([type='radio'], [type='checkbox']) {
58
+ /* Public API (customizable component options) */
59
+ --_op-form-control-height-small: var(--op-space-medium);
60
+ --_op-form-control-height-medium: var(--op-space-large);
61
+ --_op-form-control-height-large: var(--op-space-x-large);
62
+
63
+ width: var(--__op-form-control-height);
64
+ height: var(--__op-form-control-height);
65
+ align-self: center;
66
+ margin: 0;
67
+ accent-color: var(--op-color-primary-base);
68
+ cursor: pointer;
69
+
70
+ & + label {
71
+ align-self: center;
72
+ }
73
+ }
74
+
75
+ /* Any Form Control that is not a radio or checkbox */
76
+ .form-control:not([type='radio'], [type='checkbox']) {
77
+ /* Public API (customizable component options) */
78
+ --_op-form-control-opacity-disabled: var(--op-opacity-disabled);
79
+
80
+ /* Private API (component option defaults) */
81
+ --__op-form-control-border-color: var(--op-color-neutral-plus-four);
82
+
83
+ display: block;
84
+ width: 100%;
85
+ min-width: var(--__op-form-control-height);
86
+ height: var(--__op-form-control-height);
87
+ border: none;
88
+ border-radius: var(--op-radius-medium);
89
+ appearance: none;
90
+ background-color: var(--op-color-neutral-plus-eight);
91
+ box-shadow: var(--op-border-all) var(--__op-form-control-border-color);
92
+ color: var(--op-color-neutral-on-plus-eight);
93
+ cursor: text;
94
+ font-size: var(--__op-form-control-font-size);
95
+ line-height: var(--op-line-height-base);
96
+ padding-block: var(--op-space-2x-small);
97
+ padding-inline: var(--op-space-small) var(--op-space-x-small);
98
+
99
+ /* Focus State */
100
+ &:focus,
101
+ &:focus-within,
102
+ &:focus-visible {
103
+ outline: none;
104
+ }
105
+
106
+ /* Hover State */
107
+ &:hover:not(:disabled, [readonly]) {
108
+ box-shadow: var(--op-border-all) var(--op-color-primary-plus-three);
109
+ }
110
+
111
+ &:focus-visible:not([readonly]) {
112
+ background-color: var(--op-color-primary-plus-seven);
113
+ box-shadow: var(--op-input-focus-primary);
114
+ color: var(--op-color-primary-on-plus-seven);
115
+ }
116
+
117
+ /* Borderless State */
118
+ &.form-control--no-border {
119
+ background-color: transparent;
120
+ box-shadow: none;
121
+ color: var(--op-color-primary-on-plus-max);
122
+
123
+ &:focus-visible:not([readonly]) {
124
+ background-color: var(--op-color-primary-plus-seven);
125
+ box-shadow: var(--op-input-focus-primary);
126
+ color: var(--op-color-primary-on-plus-seven);
127
+ }
128
+
129
+ /* Borderless + Hover State */
130
+ &:hover:not(:disabled, [readonly]) {
131
+ background-color: var(--op-color-primary-plus-eight);
132
+ box-shadow: inset var(--op-border-all) var(--op-color-primary-plus-two);
133
+ color: var(--op-color-primary-on-plus-eight);
134
+ }
135
+ }
136
+ }
137
+
138
+ /* Color Form Control */
139
+ .form-control[type='color'] {
140
+ padding: var(--op-space-2x-small);
141
+ cursor: pointer;
142
+
143
+ &::-webkit-color-swatch-wrapper {
144
+ padding: 0;
145
+ }
146
+
147
+ &::-webkit-color-swatch {
148
+ border: none;
149
+ border-radius: var(--op-radius-medium);
150
+ }
151
+ }
152
+
153
+ /* File Form Control */
154
+ .form-control[type='file'] {
155
+ padding-block: 0;
156
+
157
+ &::file-selector-button {
158
+ --__op-btn-base-height: var(--op-input-height-small);
159
+ --__op-btn-height: var(--__op-btn-base-height);
160
+
161
+ display: inline-flex;
162
+ min-height: var(--__op-btn-height);
163
+ align-items: center;
164
+ justify-content: center;
165
+ border: none;
166
+ border-radius: var(--op-radius-medium);
167
+ appearance: none;
168
+ background-color: var(--op-color-neutral-plus-eight);
169
+ box-shadow: inset var(--op-border-all) var(--op-color-neutral-plus-four);
170
+ color: var(--op-color-neutral-on-plus-eight);
171
+ cursor: pointer;
172
+ font-size: var(--op-font-x-small);
173
+ font-weight: var(--op-font-weight-normal);
174
+ gap: var(--op-space-x-small);
175
+ margin-block: calc((var(--__op-form-control-height) / 2) - (var(--__op-btn-height) / 2));
176
+ padding-block: 0;
177
+ padding-inline: var(--op-space-x-small);
178
+ text-align: center;
179
+ text-decoration: none;
180
+ transition: var(--op-transition-input);
181
+ white-space: nowrap;
182
+ }
183
+
184
+ &.form-control--small::file-selector-button {
185
+ --__op-btn-height: calc(var(--__op-btn-base-height) - var(--op-space-x-small));
186
+ }
187
+ }
188
+
189
+ select.form-control:not([multiple], [type='radio'], [type='checkbox']) {
190
+ appearance: none;
191
+ background-image: var(--op-encoded-images-dropdown-arrow);
192
+ background-position: center right;
193
+ background-position-x: calc(
194
+ 100% - ((var(--op-space-3x-large) / 2) - (var(--op-encoded-images-dropdown-arrow-width) / 2))
195
+ );
196
+ background-repeat: no-repeat;
197
+ cursor: pointer;
198
+ padding-inline-end: var(--op-space-3x-large);
199
+ }
200
+
201
+ select.form-control[multiple] {
202
+ min-height: calc(2 * var(--__op-form-control-height));
203
+ }
204
+
205
+ textarea.form-control:not([type='radio'], [type='checkbox']) {
206
+ max-width: 100%;
207
+ height: calc(2 * var(--__op-form-control-height));
208
+ min-height: var(--__op-form-control-height);
209
+ }
210
+
211
+ .form-label {
212
+ color: var(--op-color-on-background);
213
+ font-size: var(--op-font-x-small);
214
+ font-weight: var(--op-font-weight-normal);
215
+ letter-spacing: var(--op-letter-spacing-label);
216
+ line-height: var(--op-line-height-base);
217
+ }
218
+
219
+ .form-error {
220
+ width: fit-content;
221
+ color: var(--op-color-alerts-danger-base);
222
+ font-size: var(--op-font-x-small);
223
+ }
224
+
225
+ .form-hint {
226
+ display: block;
227
+ font-size: var(--op-font-small);
228
+ font-style: italic;
229
+ }
230
+
231
+ .form-error-summary {
232
+ padding: var(--op-space-large);
233
+ border-radius: var(--op-radius-large);
234
+ background-color: var(--op-color-alerts-danger-plus-seven);
235
+ box-shadow: var(--op-border-all) var(--op-color-alerts-danger-on-plus-seven);
236
+ color: var(--op-color-alerts-danger-on-plus-seven);
237
+ margin-block-end: var(--op-space-large);
238
+
239
+ h2 {
240
+ font-size: var(--op-font-medium);
241
+ }
242
+
243
+ ul {
244
+ margin-block-end: 0;
245
+ }
246
+ }
247
+
248
+ .form-group {
249
+ display: grid;
250
+ align-content: baseline;
251
+ gap: var(--op-space-x-small);
252
+ grid-auto-rows: auto;
253
+ grid-template-columns: auto 1fr;
254
+ padding-block: var(--op-space-small);
255
+ padding-inline: 0;
256
+
257
+ /* Group Alignment */
258
+ /* stylelint-disable no-descending-specificity */
259
+ .form-label,
260
+ .form-error,
261
+ .form-hint,
262
+ .form-control:not([type='radio'], [type='checkbox']) {
263
+ grid-column: 1 / 3;
264
+ }
265
+ /* stylelint-enable no-descending-specificity */
266
+
267
+ .form-control[type='radio'],
268
+ .form-control[type='checkbox'] {
269
+ grid-column: 1 / 1;
270
+
271
+ & + .form-label {
272
+ grid-column: 2 / 3;
273
+ grid-row: 1;
274
+ }
275
+ }
276
+ }
277
+
278
+ .form-group--inline {
279
+ align-items: center;
280
+
281
+ /* Group Alignment */
282
+
283
+ /* stylelint-disable no-descending-specificity */
284
+ .form-label {
285
+ grid-column: unset;
286
+ }
287
+
288
+ .form-error,
289
+ .form-hint {
290
+ grid-column: 1 / 3;
291
+ }
292
+
293
+ .form-control:not([type='radio'], [type='checkbox']),
294
+ .switch {
295
+ grid-column: unset;
296
+ }
297
+ /* stylelint-enable no-descending-specificity */
298
+ }
299
+
300
+ .form-group--error {
301
+ /* stylelint-disable no-descending-specificity */
302
+ .form-control {
303
+ box-shadow: var(--op-border-all) var(--op-color-alerts-danger-base);
304
+
305
+ &[type='radio'],
306
+ &[type='checkbox'] {
307
+ box-shadow: none;
308
+
309
+ & + label {
310
+ color: var(--op-color-alerts-danger-minus-three);
311
+ font-weight: var(--op-font-weight-bold);
312
+ }
313
+ }
314
+
315
+ /* Error + Hover State */
316
+ &:hover:not(:disabled, [readonly]) {
317
+ background-color: var(--op-color-alerts-danger-plus-seven);
318
+ box-shadow: var(--op-border-all) var(--op-color-alerts-danger-minus-two);
319
+ color: var(--op-color-alerts-danger-on-plus-seven);
320
+ }
321
+
322
+ /* Readonly State */
323
+ &[readonly] {
324
+ box-shadow: none;
325
+ }
326
+
327
+ /* Error + Focus State */
328
+ &:focus-visible:not([readonly]) {
329
+ background-color: var(--op-color-alerts-danger-plus-seven);
330
+ box-shadow: var(--op-input-focus-danger);
331
+ color: var(--op-color-alerts-danger-on-plus-seven);
332
+ }
333
+
334
+ /* Borderless State */
335
+ &.form-control--no-border {
336
+ border-radius: 0;
337
+ box-shadow: var(--op-border-bottom) var(--op-color-alerts-danger-base);
338
+
339
+ /* Readonly State */
340
+ &[readonly] {
341
+ box-shadow: none;
342
+ }
343
+
344
+ /* Borderless + Focus State */
345
+ &:focus-visible:not([readonly]) {
346
+ background-color: var(--op-color-alerts-danger-plus-seven);
347
+ box-shadow: var(--op-border-bottom) var(--op-color-alerts-danger-base);
348
+ color: var(--op-color-alerts-danger-on-plus-seven);
349
+ }
350
+
351
+ /* Borderless + Hover State */
352
+ &:hover:not(:disabled, [readonly]) {
353
+ background-color: var(--op-color-alerts-danger-plus-eight);
354
+ box-shadow: var(--op-border-bottom) var(--op-color-alerts-danger-base);
355
+ color: var(--op-color-alerts-danger-on-plus-eight);
356
+ }
357
+ }
358
+ }
359
+ /* stylelint-enable no-descending-specificity */
360
+ }
@@ -0,0 +1,121 @@
1
+ .icon {
2
+ /* Public API (customizable component options) */
3
+
4
+ /* Weight */
5
+ --_op-icon-weight-light: var(--op-font-weight-light);
6
+ --_op-icon-weight-normal: var(--op-font-weight-normal);
7
+ --_op-icon-weight-semi-bold: var(--op-font-weight-semi-bold);
8
+ --_op-icon-weight-bold: var(--op-font-weight-bold);
9
+
10
+ /* Fill */
11
+ --_op-icon-fill-outlined: 0;
12
+ --_op-icon-fill-filled: 1;
13
+
14
+ /* Emphasis */
15
+ --_op-icon-emphasis-low: -20;
16
+ --_op-icon-emphasis-normal: 0;
17
+ --_op-icon-emphasis-high: 200;
18
+
19
+ /* Size */
20
+ --_op-icon-font-size-small: var(--op-font-small);
21
+ --_op-icon-font-size-medium: var(--op-font-medium);
22
+ --_op-icon-font-size-large: var(--op-font-large);
23
+ --_op-icon-font-size-x-large: var(--op-font-2x-large);
24
+ --_op-icon-optical-size-small: 20;
25
+ --_op-icon-optical-size-medium: 20;
26
+ --_op-icon-optical-size-large: 40;
27
+ --_op-icon-optical-size-x-large: 48;
28
+
29
+ /* Private API (component option defaults) */
30
+ --__op-icon-weight: var(--_op-icon-weight-normal);
31
+ --__op-icon-fill: var(--_op-icon-fill-outlined);
32
+ --__op-icon-emphasis: var(--_op-icon-emphasis-normal);
33
+ --__op-icon-font-size: var(--_op-icon-font-size-medium);
34
+ --__op-icon-optical-size: var(--_op-icon-optical-size-medium);
35
+
36
+ display: inline-block;
37
+ width: var(--__op-icon-font-size);
38
+ height: var(--__op-icon-font-size);
39
+ font-size: var(--__op-icon-font-size);
40
+ font-weight: var(--__op-icon-weight);
41
+ line-height: var(--op-line-height-densest);
42
+ vertical-align: middle;
43
+
44
+ /* Fill Modifiers */
45
+ &.icon--outlined {
46
+ --__op-icon-fill: var(--_op-icon-fill-outlined);
47
+ }
48
+
49
+ &.icon--filled {
50
+ --__op-icon-fill: var(--_op-icon-fill-filled);
51
+ }
52
+
53
+ /* Weight Modifiers */
54
+ &.icon--weight-light {
55
+ --__op-icon-weight: var(--_op-icon-weight-light);
56
+ }
57
+
58
+ &.icon--weight-normal {
59
+ --__op-icon-weight: var(--_op-icon-weight-normal);
60
+ }
61
+
62
+ &.icon--weight-semi-bold {
63
+ --__op-icon-weight: var(--_op-icon-weight-semi-bold);
64
+ }
65
+
66
+ &.icon--weight-bold {
67
+ --__op-icon-weight: var(--_op-icon-weight-bold);
68
+ }
69
+
70
+ /* Emphasis */
71
+ &.icon--low-emphasis {
72
+ --__op-icon-emphasis: var(--_op-icon-emphasis-low);
73
+ }
74
+
75
+ &.icon--normal-emphasis {
76
+ --__op-icon-emphasis: var(--_op-icon-emphasis-normal);
77
+ }
78
+
79
+ &.icon--high-emphasis {
80
+ --__op-icon-emphasis: var(--_op-icon-emphasis-high);
81
+ }
82
+
83
+ /* Size Modifiers */
84
+ &.icon--small {
85
+ --__op-icon-font-size: var(--_op-icon-font-size-small);
86
+ --__op-icon-optical-size: var(--_op-icon-optical-size-small);
87
+ }
88
+
89
+ &.icon--medium {
90
+ --__op-icon-font-size: var(--_op-icon-font-size-medium);
91
+ --__op-icon-optical-size: var(--_op-icon-optical-size-medium);
92
+ }
93
+
94
+ &.icon--large {
95
+ --__op-icon-font-size: var(--_op-icon-font-size-large);
96
+ --__op-icon-optical-size: var(--_op-icon-optical-size-large);
97
+ }
98
+
99
+ &.icon--x-large {
100
+ --__op-icon-font-size: var(--_op-icon-font-size-x-large);
101
+ --__op-icon-optical-size: var(--_op-icon-optical-size-x-large);
102
+ }
103
+ }
104
+
105
+ /* Material Icons class provided by the Google Fonts CDN */
106
+ .material-symbols-outlined {
107
+ font-variation-settings:
108
+ 'FILL' var(--__op-icon-fill),
109
+ 'wght' var(--__op-icon-weight),
110
+ 'GRAD' var(--__op-icon-emphasis),
111
+ 'opsz' var(--__op-icon-optical-size);
112
+ font-weight: unset;
113
+ }
114
+
115
+ /* Custom SVG Icons app specific */
116
+ .custom-icons {
117
+ svg {
118
+ width: 100%;
119
+ height: 100%;
120
+ }
121
+ }
@@ -0,0 +1,24 @@
1
+ @import 'accordion';
2
+ @import 'alert';
3
+ @import 'avatar';
4
+ @import 'badge';
5
+ @import 'breadcrumbs';
6
+ @import 'button';
7
+ @import 'button_group';
8
+ @import 'card';
9
+ @import 'confirm-dialog';
10
+ @import 'divider';
11
+ @import 'form';
12
+ @import 'icon';
13
+ @import 'modal';
14
+ @import 'navbar';
15
+ @import 'pagination';
16
+ @import 'sidebar';
17
+ @import 'side_panel';
18
+ @import 'spinner';
19
+ @import 'switch';
20
+ @import 'tab';
21
+ @import 'table';
22
+ @import 'tag';
23
+ @import 'text_pair';
24
+ @import 'tooltip';
@@ -0,0 +1,149 @@
1
+ .modal-wrapper {
2
+ /* Public API (customizable component options) */
3
+ --_op-modal-backdrop-active-opacity: var(--op-opacity-half);
4
+
5
+ position: fixed;
6
+ z-index: var(--op-z-index-dialog);
7
+ display: flex;
8
+ overflow: hidden;
9
+ align-items: center;
10
+ justify-content: center;
11
+ inset: 0;
12
+ outline: 0;
13
+ visibility: hidden;
14
+
15
+ /* Elements */
16
+
17
+ .modal-wrapper__backdrop {
18
+ position: fixed;
19
+ z-index: var(--op-z-index-dialog-backdrop);
20
+ background: var(--op-color-black);
21
+ inset: 0;
22
+ opacity: var(--op-opacity-none);
23
+ transition: var(--op-transition-modal);
24
+ visibility: hidden;
25
+ }
26
+
27
+ /* Modifiers */
28
+
29
+ &.modal-wrapper--active {
30
+ visibility: visible;
31
+
32
+ .modal {
33
+ opacity: var(--op-opacity-full);
34
+ transform: scale(1);
35
+ }
36
+
37
+ .modal-wrapper__backdrop {
38
+ opacity: var(--_op-modal-backdrop-active-opacity);
39
+ visibility: visible;
40
+ }
41
+ }
42
+ }
43
+
44
+ /* stylelint-disable no-descending-specificity */
45
+ .modal {
46
+ /* Public API (customizable component options) */
47
+ --_op-modal-width: calc(141 * var(--op-size-unit)); /* 564px */
48
+ --_op-modal-max-height: calc(125 * var(--op-size-unit)); /* 500px */
49
+
50
+ z-index: var(--op-z-index-dialog-content);
51
+ width: var(--_op-modal-width);
52
+ border-radius: var(--op-radius-medium);
53
+ background-color: var(--op-color-background);
54
+ box-shadow: var(--op-border-all) var(--op-color-border);
55
+ color: var(--op-color-on-background);
56
+ contain: paint;
57
+ font-size: var(--op-font-medium);
58
+ line-height: var(--op-line-height-base);
59
+ opacity: var(--op-opacity-none);
60
+ transform: scale(0.7);
61
+ transition: var(--op-transition-modal);
62
+
63
+ .modal__header,
64
+ .modal__body,
65
+ .modal__footer {
66
+ padding: var(--op-space-medium);
67
+ }
68
+
69
+ .modal__header {
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: space-between;
73
+ font-size: var(--op-font-large);
74
+ font-weight: var(--op-font-weight-semi-bold);
75
+ }
76
+
77
+ .modal__body {
78
+ max-height: var(--_op-modal-max-height);
79
+ box-shadow: var(--op-border-all) var(--op-color-border);
80
+ overflow-y: auto;
81
+ }
82
+
83
+ .modal__footer {
84
+ display: flex;
85
+ align-items: center;
86
+ justify-content: flex-end;
87
+ gap: var(--op-space-small);
88
+ }
89
+ }
90
+ /* stylelint-enable no-descending-specificity */
91
+
92
+ dialog.modal {
93
+ position: fixed;
94
+ display: block;
95
+ padding: 0;
96
+ border: none;
97
+ inset: 0;
98
+
99
+ &::backdrop {
100
+ /* The Dialog backdrop does not inheret from :root so these need to be duplicated here. */
101
+ --op-color-black: hsl(0deg 0% 0%);
102
+ --_op-modal-backdrop-active-opacity: 0.5;
103
+ --op-opacity-none: 0;
104
+ --op-opacity-full: 1;
105
+
106
+ animation: show-backdrop 300ms ease-in;
107
+ background: var(--op-color-black);
108
+ opacity: var(--_op-modal-backdrop-active-opacity);
109
+ }
110
+
111
+ &[open] {
112
+ opacity: var(--op-opacity-full);
113
+ transform: scale(1);
114
+ }
115
+
116
+ &.modal--closing {
117
+ opacity: var(--op-opacity-none);
118
+ transform: scale(0.7);
119
+
120
+ &::backdrop {
121
+ animation: hide-backdrop 300ms ease-in;
122
+ opacity: var(--op-opacity-none);
123
+ }
124
+ }
125
+ }
126
+
127
+ /* Using the Dialog element */
128
+
129
+ /* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog */
130
+
131
+ @keyframes show-backdrop {
132
+ from {
133
+ opacity: var(--op-opacity-none);
134
+ }
135
+
136
+ to {
137
+ opacity: var(--_op-modal-backdrop-active-opacity);
138
+ }
139
+ }
140
+
141
+ @keyframes hide-backdrop {
142
+ from {
143
+ opacity: var(--_op-modal-backdrop-active-opacity);
144
+ }
145
+
146
+ to {
147
+ opacity: var(--op-opacity-none);
148
+ }
149
+ }
@@ -0,0 +1,60 @@
1
+ .navbar {
2
+ /* Public API (customizable component options) */
3
+
4
+ /* Normal */
5
+ --_op-navbar-background-color: var(--op-color-neutral-plus-eight);
6
+ --_op-navbar-text-color: var(--op-color-neutral-on-plus-eight);
7
+ --_op-navbar-border-color: var(--op-color-neutral-plus-four);
8
+ --_op-navbar-brand-height: calc(12 * var(--op-size-unit)); /* 48px */
9
+
10
+ /* Spacing */
11
+ --_op-navbar-horizontal-spacing: var(--op-space-x-large);
12
+ --_op-navbar-content-spacing: var(--op-space-x-small);
13
+ --_op-navbar-content-item-spacing: var(--op-space-2x-small);
14
+
15
+ display: flex;
16
+ align-items: center;
17
+ padding: var(--op-space-small) var(--_op-navbar-horizontal-spacing);
18
+ background-color: var(--_op-navbar-background-color);
19
+ box-shadow: var(--op-border-bottom) var(--_op-navbar-border-color);
20
+ color: var(--_op-navbar-text-color);
21
+ gap: var(--_op-navbar-content-spacing);
22
+
23
+ /* Elements */
24
+
25
+ .navbar__brand {
26
+ height: var(--_op-navbar-brand-height);
27
+ margin-right: var(--_op-navbar-horizontal-spacing);
28
+
29
+ img {
30
+ height: 100%;
31
+ }
32
+ }
33
+
34
+ .navbar__content {
35
+ display: flex;
36
+ flex-wrap: wrap;
37
+ align-items: center;
38
+ gap: var(--_op-navbar-content-item-spacing);
39
+
40
+ &.navbar__content--justify-start {
41
+ margin-inline-end: auto;
42
+ }
43
+
44
+ &.navbar__content--justify-center {
45
+ margin-inline: auto;
46
+ }
47
+
48
+ &.navbar__content--justify-end {
49
+ margin-inline-start: auto;
50
+ }
51
+ }
52
+
53
+ /* Modifiers */
54
+
55
+ &.navbar--primary {
56
+ --_op-navbar-background-color: var(--op-color-primary-plus-six);
57
+ --_op-navbar-text-color: var(--op-color-primary-on-plus-six);
58
+ --_op-navbar-border-color: var(--op-color-primary-plus-four);
59
+ }
60
+ }