@boopdoopgoop/design-system 0.0.0-stage → 0.2.0

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,133 @@
1
+ {
2
+ "$description": "Semantic aliases. App chrome and risograph paper are independent named tiers, not light/dark modes. Font choices are fixed for this release.",
3
+ "color": {
4
+ "$type": "color",
5
+ "app": {
6
+ "$description": "theme.css lines 6–32. App chrome only.",
7
+ "canvas": { "$value": "{primitive.color.white}" },
8
+ "paper": { "$value": "{primitive.color.white}" },
9
+ "ink": { "$value": "{primitive.color.ink}" },
10
+ "muted": { "$value": "{primitive.color.muted}" },
11
+ "mist": { "$value": "{primitive.color.mist}" },
12
+ "line": { "$value": "{primitive.color.line}" },
13
+ "control-line": { "$value": "{primitive.color.control-line}" },
14
+ "placeholder": { "$value": "{primitive.color.placeholder}" },
15
+ "signal": { "$value": "{primitive.color.signal}" },
16
+ "on-signal": { "$value": "{primitive.color.white}" },
17
+ "focus": { "$value": "{primitive.color.ink}" },
18
+ "warning": { "$value": "{primitive.color.warning}" },
19
+ "success": { "$value": "{primitive.color.success}" },
20
+ "danger": { "$value": "{primitive.color.danger}" },
21
+ "info": { "$value": "{primitive.color.info}" },
22
+ "tile-sage": { "$value": "{primitive.color.sage}" },
23
+ "tile-sage-ink": { "$value": "{primitive.color.sage-ink}" },
24
+ "tile-slate": { "$value": "{primitive.color.slate}" },
25
+ "tile-slate-ink": { "$value": "{primitive.color.slate-ink}" },
26
+ "tile-ochre": { "$value": "{primitive.color.ochre}" },
27
+ "tile-ochre-ink": { "$value": "{primitive.color.ochre-ink}" },
28
+ "tile-clay": { "$value": "{primitive.color.clay}" },
29
+ "tile-clay-ink": { "$value": "{primitive.color.clay-ink}" },
30
+ "tile-mauve": { "$value": "{primitive.color.mauve}" },
31
+ "tile-mauve-ink": { "$value": "{primitive.color.mauve-ink}" },
32
+ "tile-stone": { "$value": "{primitive.color.stone}" },
33
+ "tile-stone-ink": { "$value": "{primitive.color.stone-ink}" }
34
+ },
35
+ "riso": {
36
+ "$description": "risograph.css lines 12–18. A single black drum at three densities and marker yellow.",
37
+ "paper": { "$value": "{primitive.color.paper}" },
38
+ "sheet": { "$value": "{primitive.color.sheet}" },
39
+ "ink": { "$value": "{primitive.color.black}" },
40
+ "ink-2": { "$value": "{primitive.color.ink-70}" },
41
+ "tint-35": { "$value": "{primitive.color.ink-35}" },
42
+ "tint-18": { "$value": "{primitive.color.ink-18}" },
43
+ "highlight": { "$value": "{primitive.color.yellow}" }
44
+ }
45
+ },
46
+ "font": {
47
+ "$type": "fontFamily",
48
+ "display": { "$value": "{primitive.font.display}" },
49
+ "body": { "$value": "{primitive.font.body}" },
50
+ "sans": { "$value": "{font.body}" },
51
+ "ui": { "$value": "{font.body}" },
52
+ "mono": { "$value": "{primitive.font.mono}" }
53
+ },
54
+ "text": {
55
+ "$type": "dimension",
56
+ "display": { "$value": "{primitive.size.32}" },
57
+ "heading": { "$value": "{primitive.size.24}" },
58
+ "body": { "$value": "{primitive.size.15}" },
59
+ "ui": { "$value": "{primitive.size.14}" },
60
+ "mono": { "$value": "{primitive.size.12}" },
61
+ "label": { "$value": "{primitive.size.11}" }
62
+ },
63
+ "leading": {
64
+ "$type": "number",
65
+ "display": { "$value": "{primitive.ratio.display}" },
66
+ "body": { "$value": "{primitive.ratio.body}" },
67
+ "ui": { "$value": "{primitive.ratio.copy}" },
68
+ "label": { "$value": "{primitive.ratio.label}" }
69
+ },
70
+ "font-weight": {
71
+ "$type": "fontWeight",
72
+ "black": { "$value": "{primitive.weight.black}" },
73
+ "regular": { "$value": "{primitive.weight.regular}" },
74
+ "medium": { "$value": "{primitive.weight.medium}" },
75
+ "semibold": { "$value": "{primitive.weight.semibold}" },
76
+ "bold": { "$value": "{primitive.weight.bold}" }
77
+ },
78
+ "radius": {
79
+ "$type": "dimension",
80
+ "control": { "$value": "{primitive.dimension.zero}" }
81
+ },
82
+ "border": {
83
+ "$type": "dimension",
84
+ "app": { "$value": "{primitive.dimension.one}" },
85
+ "riso": { "$value": "{primitive.dimension.three}" }
86
+ },
87
+ "focus": {
88
+ "$type": "dimension",
89
+ "app-width": { "$value": "{primitive.dimension.two}" },
90
+ "app-offset": { "$value": "{primitive.dimension.two}" },
91
+ "riso-width": { "$value": "{primitive.dimension.three}" },
92
+ "riso-offset": { "$value": "{primitive.dimension.three}" }
93
+ },
94
+ "space": {
95
+ "$type": "dimension",
96
+ "xs": { "$value": "{primitive.space.4}" },
97
+ "hint": { "$value": "{primitive.space.6}" },
98
+ "sm": { "$value": "{primitive.space.8}" },
99
+ "tag-inline": { "$value": "{primitive.space.10}" },
100
+ "md": { "$value": "{primitive.space.12}" },
101
+ "lg": { "$value": "{primitive.space.16}" },
102
+ "panel": { "$value": "{primitive.space.20}" },
103
+ "modal": { "$value": "{primitive.space.24}" },
104
+ "viewport": { "$value": "{primitive.space.32}" }
105
+ },
106
+ "size": {
107
+ "$type": "dimension",
108
+ "control": { "$value": "{primitive.component-size.control}" },
109
+ "icon": { "$value": "{primitive.size.12}" },
110
+ "close-icon": { "$value": "{primitive.size.14}" },
111
+ "close": { "$value": "{primitive.size.32}" },
112
+ "textarea": { "$value": "{primitive.component-size.textarea}" },
113
+ "modal": { "$value": "{primitive.component-size.modal}" }
114
+ },
115
+ "layer": {
116
+ "$type": "number",
117
+ "modal": { "$value": "{primitive.layer.modal}" }
118
+ },
119
+ "tracking": {
120
+ "$type": "number",
121
+ "control": { "$value": "{primitive.ratio.tracking-control}" },
122
+ "label": { "$value": "{primitive.ratio.tracking-label}" },
123
+ "panel": { "$value": "{primitive.ratio.tracking-panel}" }
124
+ },
125
+ "opacity": {
126
+ "$type": "number",
127
+ "riso-grain": { "$value": "{primitive.ratio.grain}" },
128
+ "hover": { "$value": "{primitive.ratio.hover}" },
129
+ "overlay": { "$value": "{primitive.ratio.overlay}" },
130
+ "disabled": { "$value": "{primitive.ratio.disabled}" },
131
+ "disabled-close": { "$value": "{primitive.ratio.overlay}" }
132
+ }
133
+ }
@@ -0,0 +1,290 @@
1
+ /* Opt in after theme.css. Layers allow consumer utilities to override recipes. */
2
+ @layer components {
3
+ :where(
4
+ .ds-button,
5
+ .ds-control,
6
+ .ds-tag,
7
+ .ds-panel,
8
+ .ds-modal,
9
+ .ds-modal-close
10
+ ) {
11
+ box-sizing: border-box;
12
+ border-radius: var(--ds-radius-control);
13
+ }
14
+
15
+ :where(.ds-button, .ds-control, .ds-modal-close):focus-visible {
16
+ outline: var(--ds-focus-app-width) solid var(--ds-color-focus);
17
+ outline-offset: var(--ds-focus-app-offset);
18
+ }
19
+
20
+ :where(.ds-button, .ds-control, .ds-modal-close):disabled {
21
+ cursor: not-allowed;
22
+ opacity: var(--ds-opacity-disabled);
23
+ }
24
+
25
+ .ds-button {
26
+ display: inline-flex;
27
+ min-height: var(--ds-size-control);
28
+ flex-direction: row-reverse;
29
+ align-items: center;
30
+ justify-content: center;
31
+ gap: var(--ds-space-sm);
32
+ border: var(--ds-border-app) solid var(--ds-color-control-line);
33
+ padding: var(--ds-space-sm) var(--ds-space-lg);
34
+ background: var(--ds-color-paper);
35
+ color: var(--ds-color-ink);
36
+ font-family: var(--ds-font-mono);
37
+ font-size: var(--ds-text-label);
38
+ line-height: var(--ds-leading-label);
39
+ font-weight: var(--ds-font-weight-regular);
40
+ text-transform: uppercase;
41
+ letter-spacing: calc(var(--ds-tracking-control) * 1em);
42
+ text-decoration: none;
43
+ cursor: pointer;
44
+ }
45
+
46
+ .ds-button > svg {
47
+ width: var(--ds-size-icon);
48
+ height: var(--ds-size-icon);
49
+ flex-shrink: 0;
50
+ }
51
+
52
+ .ds-button--primary {
53
+ border-color: var(--ds-color-signal);
54
+ background: var(--ds-color-signal);
55
+ color: var(--ds-color-on-signal);
56
+ }
57
+
58
+ .ds-button--primary:hover:not(:disabled) {
59
+ background: var(--ds-color-ink);
60
+ border-color: var(--ds-color-ink);
61
+ }
62
+
63
+ .ds-button--danger {
64
+ color: var(--ds-color-app-danger);
65
+ border-color: var(--ds-color-app-danger);
66
+ }
67
+
68
+ :where(.ds-button--secondary, .ds-button--danger):hover:not(:disabled) {
69
+ background: var(--ds-color-sheet);
70
+ background: color-mix(
71
+ in srgb,
72
+ var(--ds-color-paper),
73
+ var(--ds-color-ink) calc(var(--ds-opacity-hover) * 100%)
74
+ );
75
+ }
76
+
77
+ .ds-control {
78
+ display: block;
79
+ width: 100%;
80
+ min-width: 0;
81
+ min-height: var(--ds-size-control);
82
+ border: var(--ds-border-app) solid var(--ds-color-control-line);
83
+ padding: var(--ds-space-sm) var(--ds-space-md);
84
+ background: var(--ds-color-paper);
85
+ color: var(--ds-color-ink);
86
+ caret-color: var(--ds-color-focus);
87
+ font-family: var(--ds-font-ui);
88
+ font-size: var(--ds-text-ui);
89
+ line-height: var(--ds-leading-ui);
90
+ }
91
+
92
+ .ds-control::placeholder {
93
+ color: var(--ds-color-muted);
94
+ opacity: 1;
95
+ }
96
+
97
+ .ds-control[aria-invalid='true'] {
98
+ border-color: var(--ds-color-app-danger);
99
+ }
100
+
101
+ .ds-textarea {
102
+ min-height: var(--ds-size-textarea);
103
+ resize: vertical;
104
+ }
105
+
106
+ .ds-tag {
107
+ display: inline-flex;
108
+ align-items: center;
109
+ border: var(--ds-border-app) solid currentColor;
110
+ padding: var(--ds-space-xs) var(--ds-space-tag-inline);
111
+ color: var(--ds-color-muted);
112
+ font-family: var(--ds-font-mono);
113
+ font-size: var(--ds-text-label);
114
+ line-height: var(--ds-leading-label);
115
+ text-transform: uppercase;
116
+ letter-spacing: calc(var(--ds-tracking-label) * 1em);
117
+ }
118
+
119
+ .ds-tag--neutral {
120
+ border-color: var(--ds-color-control-line);
121
+ }
122
+ .ds-tag--success {
123
+ color: var(--ds-color-app-success);
124
+ }
125
+ .ds-tag--warning {
126
+ color: var(--ds-color-app-warning);
127
+ background: var(--ds-color-app-paper);
128
+ }
129
+ .ds-tag--danger {
130
+ color: var(--ds-color-app-danger);
131
+ }
132
+ .ds-tag--info {
133
+ color: var(--ds-color-app-info);
134
+ }
135
+
136
+ .ds-panel {
137
+ border: var(--ds-border-app) solid var(--ds-color-line);
138
+ background: var(--ds-color-paper);
139
+ color: var(--ds-color-ink);
140
+ font-family: var(--ds-font-body);
141
+ font-size: var(--ds-text-body);
142
+ line-height: var(--ds-leading-body);
143
+ }
144
+
145
+ .ds-panel-header {
146
+ display: flex;
147
+ align-items: center;
148
+ justify-content: space-between;
149
+ gap: var(--ds-space-lg);
150
+ border-bottom: var(--ds-border-app) solid var(--ds-color-line);
151
+ padding: var(--ds-space-md) var(--ds-space-panel);
152
+ color: var(--ds-color-muted);
153
+ font-family: var(--ds-font-mono);
154
+ font-size: var(--ds-text-label);
155
+ line-height: var(--ds-leading-label);
156
+ font-weight: var(--ds-font-weight-regular);
157
+ text-transform: uppercase;
158
+ letter-spacing: calc(var(--ds-tracking-panel) * 1em);
159
+ }
160
+
161
+ .ds-panel-body {
162
+ padding: var(--ds-space-panel);
163
+ }
164
+ .ds-field-wrapper,
165
+ .ds-field-label,
166
+ .ds-field-control,
167
+ .ds-field-hint,
168
+ .ds-field-error {
169
+ display: block;
170
+ }
171
+ .ds-field-label {
172
+ color: var(--ds-color-muted);
173
+ font-family: var(--ds-font-mono);
174
+ font-size: var(--ds-text-label);
175
+ line-height: var(--ds-leading-label);
176
+ text-transform: uppercase;
177
+ letter-spacing: calc(var(--ds-tracking-label) * 1em);
178
+ }
179
+ .ds-field-control {
180
+ margin-top: var(--ds-space-sm);
181
+ }
182
+ .ds-field-hint,
183
+ .ds-field-error {
184
+ margin-top: var(--ds-space-hint);
185
+ color: var(--ds-color-muted);
186
+ font-family: var(--ds-font-body);
187
+ font-size: var(--ds-text-ui);
188
+ line-height: var(--ds-leading-ui);
189
+ }
190
+ .ds-field-error {
191
+ color: var(--ds-color-app-danger);
192
+ }
193
+
194
+ .ds-modal-overlay {
195
+ position: fixed;
196
+ inset: 0;
197
+ z-index: var(--ds-layer-modal);
198
+ display: flex;
199
+ align-items: center;
200
+ justify-content: center;
201
+ padding-inline: var(--ds-space-lg);
202
+ background: color-mix(
203
+ in srgb,
204
+ var(--ds-primitive-color-black) calc(var(--ds-opacity-overlay) * 100%),
205
+ transparent
206
+ );
207
+ }
208
+ .ds-modal {
209
+ width: 100%;
210
+ max-width: var(--ds-size-modal);
211
+ border: var(--ds-border-app) solid var(--ds-color-line);
212
+ background: var(--ds-color-paper);
213
+ color: var(--ds-color-ink);
214
+ font-family: var(--ds-font-body);
215
+ font-size: var(--ds-text-body);
216
+ line-height: var(--ds-leading-body);
217
+ }
218
+ .ds-modal-dialog {
219
+ outline: none;
220
+ }
221
+ .ds-modal--with-footer {
222
+ display: flex;
223
+ max-height: calc(100dvh - var(--ds-space-viewport) * 2);
224
+ flex-direction: column;
225
+ }
226
+ .ds-modal--with-footer .ds-modal-dialog {
227
+ display: flex;
228
+ min-height: 0;
229
+ flex: 1;
230
+ flex-direction: column;
231
+ }
232
+ .ds-modal-header {
233
+ display: flex;
234
+ align-items: flex-start;
235
+ justify-content: space-between;
236
+ gap: var(--ds-space-lg);
237
+ padding: var(--ds-space-panel) var(--ds-space-modal) var(--ds-space-md);
238
+ }
239
+ .ds-modal-title {
240
+ margin: 0;
241
+ font-family: var(--ds-font-display);
242
+ font-size: var(--ds-text-heading);
243
+ font-weight: var(--ds-font-weight-black);
244
+ line-height: var(--ds-leading-display);
245
+ overflow-wrap: anywhere;
246
+ }
247
+ .ds-modal-close {
248
+ display: flex;
249
+ width: var(--ds-size-close);
250
+ height: var(--ds-size-close);
251
+ flex-shrink: 0;
252
+ align-items: center;
253
+ justify-content: center;
254
+ padding: 0;
255
+ border: var(--ds-border-app) solid var(--ds-color-line);
256
+ background: var(--ds-color-paper);
257
+ color: var(--ds-color-ink);
258
+ cursor: pointer;
259
+ }
260
+ .ds-modal-close:hover:not(:disabled) {
261
+ background: var(--ds-color-sheet);
262
+ }
263
+ .ds-modal-close:disabled {
264
+ opacity: var(--ds-opacity-disabled-close);
265
+ }
266
+ .ds-modal-close > svg {
267
+ width: var(--ds-size-close-icon);
268
+ height: var(--ds-size-close-icon);
269
+ }
270
+ .ds-modal-body {
271
+ padding: var(--ds-space-xs) var(--ds-space-modal) var(--ds-space-modal);
272
+ }
273
+ .ds-modal-body > * + * {
274
+ margin-top: var(--ds-space-lg);
275
+ }
276
+ .ds-modal--with-footer .ds-modal-body {
277
+ min-height: 0;
278
+ flex: 1;
279
+ overflow-y: auto;
280
+ }
281
+ .ds-modal-footer {
282
+ display: flex;
283
+ flex-shrink: 0;
284
+ flex-wrap: wrap;
285
+ justify-content: flex-end;
286
+ gap: var(--ds-space-sm);
287
+ border-top: var(--ds-border-app) solid var(--ds-color-line);
288
+ padding: var(--ds-space-md) var(--ds-space-modal);
289
+ }
290
+ }
@@ -0,0 +1,8 @@
1
+ /* Explicit, opt-in loading. Fontsource owns and serves the font binaries. */
2
+ @import '@fontsource/big-shoulders-display/900';
3
+ @import '@fontsource/archivo/400';
4
+ @import '@fontsource/archivo/500';
5
+ @import '@fontsource/archivo/600';
6
+ @import '@fontsource/archivo/700';
7
+ @import '@fontsource/spline-sans-mono/400';
8
+ @import '@fontsource/spline-sans-mono/500';