@symbo.ls/mcp 1.0.10 → 1.0.11

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.
@@ -1,496 +0,0 @@
1
- # Default design system
2
-
3
- This document describes every token defined in `smbls/designSystem/` and how they are used in Symbols.app.
4
-
5
- ## Files
6
-
7
- | File | Purpose |
8
- | ---------------- | ----------------------------------------------------------- |
9
- | `COLOR.js` | Named color palette |
10
- | `GRADIENT.js` | Gradient definitions (empty by default) |
11
- | `THEME.js` | Semantic surface themes (document, dialog, field, primary…) |
12
- | `FONT.js` | Custom font faces |
13
- | `FONT_FAMILY.js` | Font family stacks |
14
- | `TYPOGRAPHY.js` | Type scale configuration |
15
- | `SPACING.js` | Spacing scale configuration |
16
- | `TIMING.js` | Easing curves |
17
- | `CLASS.js` | Utility CSS class overrides (empty by default) |
18
- | `GRID.js` | Grid presets (empty by default) |
19
- | `SHAPE.js` | Shape/border-radius presets (empty by default) |
20
- | `ANIMATION.js` | Named keyframe animations |
21
- | `MEDIA.js` | Custom media query breakpoints |
22
- | `CASES.js` | Conditional cases (environment flags) |
23
- | `RESET.js` | Global CSS reset overrides (empty by default) |
24
-
25
- ---
26
-
27
- ## COLOR
28
-
29
- File: `smbls/designSystem/COLOR.js`
30
-
31
- Named hex values and semantic adaptive colors used everywhere via `color`, `background`, `borderColor`, and `theme` props.
32
-
33
- ### Static colors
34
-
35
- | Token | Value | Usage |
36
- | ------------- | --------------- | -------------------------- |
37
- | `green` | `#389d34` | Success states |
38
- | `red` | `#e15c55` | Warning/error states |
39
- | `yellow` | `#EDCB38` | Attention states |
40
- | `orange` | `#e97c16` | Accent states |
41
- | `blue` | `#0474f2` | Primary interactive color |
42
- | `phosphorus` | `#4db852` | Alternate success |
43
- | `black` | `black` | Pure black |
44
- | `white` | `#ffffff` | Pure white |
45
- | `gray` | `#4e4e50` | Neutral mid-tone base |
46
- | `codGray` | `#171717` | Near-black page background |
47
- | `solitude` | `#e5f1ff` | Light blue tint |
48
- | `anakiwa` | `#a3cdfd` | Light blue accent |
49
- | `concrete` | `#f2f2f2` | Light neutral |
50
- | `transparent` | `rgba(0,0,0,0)` | Fully transparent |
51
-
52
- ### Adaptive semantic colors
53
-
54
- These tokens resolve to different values in dark and light mode. The `[dark, light]` tuple is applied automatically via the theme system.
55
-
56
- | Token | Dark value | Light value | Usage |
57
- | ----------- | -------------------------- | -------------------------- | -------------------- |
58
- | `title` | `gray 1 −168` (near-white) | `gray 1 +168` (near-black) | Primary text |
59
- | `caption` | `gray 1 −68` | `gray 1 +68` | Secondary/meta text |
60
- | `paragraph` | `gray 1 −42` | `gray 1 +42` | Body copy |
61
- | `disabled` | `gray 1 −26` | `gray 1 +26` | Disabled state text |
62
- | `line` | `gray 1 −16` | `gray 1 +16` | Dividers and borders |
63
-
64
- The `gray X ±Y` notation is a Symbols color function: start from `gray` at opacity `X`, then lighten or darken by `Y` steps.
65
-
66
- ### Usage in components
67
-
68
- ```js
69
- // Static color
70
- Text: {
71
- color: "blue";
72
- }
73
-
74
- // Adaptive semantic color
75
- Caption: {
76
- color: "caption";
77
- }
78
-
79
- // Inline tint/shade
80
- Box: {
81
- background: "gray 0.1";
82
- }
83
- ```
84
-
85
- ---
86
-
87
- ## THEME
88
-
89
- File: `smbls/designSystem/THEME.js`
90
-
91
- Themes define paired `background` + `color` (and optional effects) for dark and light modes. Apply with `theme: 'name'` on any element.
92
-
93
- ### Available themes
94
-
95
- #### `document`
96
-
97
- The page root surface.
98
-
99
- | Mode | Background | Text |
100
- | ----- | -------------------------- | ------- |
101
- | dark | `codGray` (`#171717`) | `title` |
102
- | light | `gray 1 +168` (near-white) | `title` |
103
-
104
- ```js
105
- Page: { extends: 'Flex', theme: 'document', minHeight: '100dvh' }
106
- ```
107
-
108
- #### `dialog`
109
-
110
- Elevated card or panel surface, with glass blur.
111
-
112
- | Mode | Background | Text | Blur |
113
- | ----- | --------------- | ------- | ----------- |
114
- | dark | `gray 0.95 −68` | `title` | `blur(3px)` |
115
- | light | `gray .95 +150` | `title` | `blur(3px)` |
116
-
117
- ```js
118
- Card: { extends: 'Flex', theme: 'dialog', round: 'A', padding: 'A' }
119
- ```
120
-
121
- #### `dialog-elevated`
122
-
123
- Higher elevation than `dialog`, used for active/selected states in tab bars.
124
-
125
- | Mode | Background | Text |
126
- | ----- | ---------------- | ------- |
127
- | dark | `gray 1 +68` | `title` |
128
- | light | `gray 0.95 +140` | `title` |
129
-
130
- ```js
131
- Tab: { '.isActive': { theme: 'dialog-elevated' } }
132
- ```
133
-
134
- #### `field`
135
-
136
- Input control surface.
137
-
138
- | Mode | Background | Text | Placeholder |
139
- | ----- | --------------- | ------- | ------------- |
140
- | dark | `gray 0.95 −65` | `white` | `white 1 −78` |
141
- | light | transparent | `black` | `gray 1 −68` |
142
-
143
- ```js
144
- Input: {
145
- theme: "field";
146
- }
147
- ```
148
-
149
- #### `field-dialog`
150
-
151
- Slightly elevated input variant, used inside dialog panels.
152
-
153
- | Mode | Background | Text |
154
- | ----- | ------------ | ------- |
155
- | dark | `gray 1 −16` | `title` |
156
- | light | `gray 1 −96` | `title` |
157
-
158
- #### `primary`
159
-
160
- Main call-to-action color (blue background, white text).
161
-
162
- | Mode | Background | Text |
163
- | ----- | ---------- | ------- |
164
- | dark | `blue` | `white` |
165
- | light | `blue` | `white` |
166
-
167
- ```js
168
- Button: { theme: 'primary', text: 'Save' }
169
- ```
170
-
171
- #### `warning`
172
-
173
- Destructive or alert state (red background, white text).
174
-
175
- | Mode | Background | Text |
176
- | ----- | ---------- | ------- |
177
- | dark | `red` | `white` |
178
- | light | `red` | `white` |
179
-
180
- ```js
181
- Badge: { theme: 'warning', text: 'Error' }
182
- ```
183
-
184
- #### `success`
185
-
186
- Positive confirmation state (green background, white text).
187
-
188
- | Mode | Background | Text |
189
- | ----- | ---------- | ------- |
190
- | dark | `green` | `white` |
191
- | light | `green` | `white` |
192
-
193
- #### `transparent`
194
-
195
- No background, inherits current text color.
196
-
197
- ```js
198
- Button: { theme: 'transparent', text: 'Cancel' }
199
- ```
200
-
201
- #### `bordered`
202
-
203
- Transparent background with a 1 px border.
204
-
205
- | Mode | Border |
206
- | ----- | ------------------- |
207
- | dark | `1px solid #4e4e50` |
208
- | light | `1px solid #a3cdfd` |
209
-
210
- ```js
211
- Card: {
212
- theme: "bordered";
213
- }
214
- ```
215
-
216
- #### `none`
217
-
218
- Resets both color and background to `none`.
219
-
220
- ---
221
-
222
- ## FONT
223
-
224
- File: `smbls/designSystem/FONT.js`
225
-
226
- Declares custom font faces loaded via the design system's `useFontImport` option.
227
-
228
- | Font | URL | Weight | Variable |
229
- | --------------------- | ----------- | ------ | -------- |
230
- | `AvenirNext_Variable` | Symbols CDN | 400 | yes |
231
-
232
- The variable font covers all weights from a single file. It is used as the default UI font across the design system.
233
-
234
- ```js
235
- // In component
236
- Text: {
237
- fontFamily: "AvenirNext_Variable";
238
- }
239
- ```
240
-
241
- ---
242
-
243
- ## FONT_FAMILY
244
-
245
- File: `smbls/designSystem/FONT_FAMILY.js`
246
-
247
- Defines font stack aliases.
248
-
249
- | Token | Stack | Type | Default |
250
- | --------- | ------------------------------------------------- | ------------ | ------- |
251
- | `Default` | `San Francisco, Helvetica Neue, Helvetica, Arial` | `sans-serif` | yes |
252
-
253
- The `Default` stack is the system UI fallback used before `AvenirNext_Variable` loads.
254
-
255
- ```js
256
- Text: {
257
- fontFamily: "Default";
258
- }
259
- ```
260
-
261
- ---
262
-
263
- ## TYPOGRAPHY
264
-
265
- File: `smbls/designSystem/TYPOGRAPHY.js`
266
-
267
- Controls the font-size scale used for all typographic tokens (`A`, `B`, `C`, `Z1`, `W2`, etc.).
268
-
269
- ```js
270
- {
271
- '@default': {
272
- base: 16, // 16 px root font size
273
- ratio: 1.25, // Major Third scale
274
- range: [-5, 12],
275
- subSequence: true
276
- }
277
- }
278
- ```
279
-
280
- The scale generates tokens from `W4` (smallest) to `C2` (largest) using the Fibonacci-like progression:
281
-
282
- | Token | Approx size |
283
- | --------- | ----------- |
284
- | `W4`–`W1` | ~8–10 px |
285
- | `W`–`Z4` | ~10–11 px |
286
- | `Z3`–`Z` | ~11–12 px |
287
- | `Y4`–`A` | ~12–16 px |
288
- | `A1`–`B` | ~18–24 px |
289
- | `B1`–`C` | ~28–40 px |
290
- | `C1`–`C2` | ~48–64 px |
291
-
292
- Use these tokens as `fontSize` values on any text element.
293
-
294
- ```js
295
- Heading: {
296
- fontSize: "C";
297
- }
298
- Caption: {
299
- fontSize: "Z2";
300
- }
301
- ```
302
-
303
- ---
304
-
305
- ## SPACING
306
-
307
- File: `smbls/designSystem/SPACING.js`
308
-
309
- Controls the spacing scale used for all layout tokens (`padding`, `margin`, `gap`, `width`, `height`, `boxSize`, etc.).
310
-
311
- ```js
312
- {
313
- '@default': {
314
- base: 16, // 16 px root unit
315
- ratio: 1.618, // Golden Ratio
316
- range: [-5, 15]
317
- }
318
- }
319
- ```
320
-
321
- The Golden Ratio produces a wider scale than typography. Common tokens:
322
-
323
- | Token | Approx value | Common use |
324
- | -------- | ------------ | ------------------------------- |
325
- | `W2`–`W` | 2–4 px | Micro gaps, offsets |
326
- | `X4`–`X` | 4–6 px | Icon padding, tight gaps |
327
- | `Y4`–`Y` | 6–10 px | Small gaps |
328
- | `Z4`–`Z` | 10–16 px | Compact padding |
329
- | `A`–`A4` | 16–26 px | Default padding, gutters |
330
- | `B`–`B4` | 26–42 px | Section padding |
331
- | `C`–`C4` | 42–68 px | Container padding, avatar sizes |
332
- | `D`–`D4` | 68–110 px | Large sections |
333
- | `E`–`F` | 110–178 px | Hero padding, max-widths |
334
- | `G`–`H` | 178–288 px | Wide containers |
335
-
336
- Compound tokens are written with `+` (e.g., `A+W2` means A plus the W2 step).
337
-
338
- ```js
339
- Box: {
340
- padding: "A B2";
341
- } // top/bottom A, left/right B2
342
- Flex: {
343
- gap: "Z";
344
- } // gap = ~16 px
345
- Avatar: {
346
- boxSize: "C2";
347
- } // ~68 px square
348
- ```
349
-
350
- ---
351
-
352
- ## TIMING
353
-
354
- File: `smbls/designSystem/TIMING.js`
355
-
356
- Named easing curves for CSS transitions and animations.
357
-
358
- | Token | Value | Character |
359
- | --------------- | ---------------------------------- | --------------- |
360
- | `defaultBezier` | `cubic-bezier(.29, .67, .51, .97)` | Smooth ease-out |
361
-
362
- ```js
363
- Box: { transition: 'B defaultBezier', transitionProperty: 'opacity, transform' }
364
- ```
365
-
366
- ---
367
-
368
- ## ANIMATION
369
-
370
- File: `smbls/designSystem/ANIMATION.js`
371
-
372
- Named keyframe animations available via `animation` prop.
373
-
374
- | Name | From | To | Use |
375
- | ------------- | ------------------------------- | ------------------------------- | ---------------- |
376
- | `fadeInUp` | `opacity: 0, translateY(12.5%)` | `opacity: 1, translateY(0)` | Entrance |
377
- | `fadeOutDown` | `opacity: 1, translateY(0)` | `opacity: 0, translateY(12.5%)` | Exit |
378
- | `marquee` | `translateX(0)` | `translateX(-50%)` | Scrolling ticker |
379
-
380
- ```js
381
- Modal: {
382
- animation: "fadeInUp B defaultBezier";
383
- }
384
- Ticker: {
385
- animation: "marquee 8s linear infinite";
386
- }
387
- ```
388
-
389
- ---
390
-
391
- ## MEDIA
392
-
393
- File: `smbls/designSystem/MEDIA.js`
394
-
395
- Custom named breakpoints that extend the built-in set.
396
-
397
- | Token | Query |
398
- | ---------- | ------------------ |
399
- | `mobileL` | `min-width: 480px` |
400
- | `tabletSm` | `min-width: 728px` |
401
-
402
- Use with `@` prefix in any element:
403
-
404
- ```js
405
- Grid: {
406
- columns: '1fr',
407
- '@tabletSm': { columns: 'repeat(2, 1fr)' },
408
- '@mobileL': { columns: 'repeat(3, 1fr)' }
409
- }
410
- ```
411
-
412
- Built-in breakpoints from the default config also apply (`@mobile`, `@tablet`, `@desktop`, etc.).
413
-
414
- ---
415
-
416
- ## CASES
417
-
418
- File: `smbls/designSystem/CASES.js`
419
-
420
- Conditional environment flags evaluated at runtime. Used as boolean props (`.caseName`) or state conditionals.
421
-
422
- | Case | Condition |
423
- | ---------- | ------------------------------------------------------ |
424
- | `isSafari` | `true` when the browser is Safari (not Chrome/Android) |
425
-
426
- ```js
427
- Element: {
428
- $isSafari: { top: 'Z2', right: 'Z2' }
429
- }
430
- ```
431
-
432
- ---
433
-
434
- ## Design system flags
435
-
436
- Set in `smbls/designSystem/index.js`:
437
-
438
- | Flag | Default | Effect |
439
- | ------------------ | ------- | -------------------------------------------- |
440
- | `useReset` | `true` | Apply a CSS reset |
441
- | `useVariable` | `true` | Emit CSS custom properties for all tokens |
442
- | `useFontImport` | `true` | Load `FONT` entries via `@font-face` |
443
- | `useIconSprite` | `true` | Inline the `ICONS` SVG sprite into the DOM |
444
- | `useSvgSprite` | `true` | Inline any SVG sprite definitions |
445
- | `useDefaultConfig` | `true` | Merge the smbls default design system config |
446
- | `useDocumentTheme` | `true` | Apply `document` theme to `<html>` |
447
- | `verbose` | `false` | Suppress design system debug output |
448
-
449
- ---
450
-
451
- ## Cross-cutting token conventions
452
-
453
- ### Shorthand spacing
454
-
455
- Spacing props accept 1–4 tokens just like CSS shorthand:
456
-
457
- ```js
458
- padding: "A"; // all sides
459
- padding: "A B"; // vertical | horizontal
460
- padding: "A B C"; // top | horizontal | bottom
461
- padding: "A B C D"; // top | right | bottom | left
462
- margin: "- - - auto"; // use '-' to skip a side (no-op)
463
- ```
464
-
465
- ### Color modifier syntax
466
-
467
- ```
468
- 'gray 0.95 -68' // gray at 95% opacity, darkened by 68 steps
469
- 'gray 1 +168' // gray at full opacity, lightened by 168 steps
470
- 'white 1 -78' // white darkened 78 steps
471
- ```
472
-
473
- ### Theme + mode targeting
474
-
475
- ```js
476
- Box: {
477
- '@dark': { background: 'codGray' },
478
- '@light': { background: 'concrete' }
479
- }
480
- ```
481
-
482
- ### Responsive overrides
483
-
484
- ```js
485
- Grid: {
486
- columns: 'repeat(4, 1fr)',
487
- '@tabletSm': { columns: 'repeat(2, 1fr)' },
488
- '@mobileL': { columns: '1fr' }
489
- }
490
- ```
491
-
492
- ---
493
-
494
- ## Supplemental
495
-
496
- Component usage is documented in [DEFAULT_COMPONENTS.md](DEFAULT_COMPONENTS.md). Built-in atoms are documented in [BUILT_IN_COMPONENTS.md](BUILT_IN_COMPONENTS.md). General conventions are in [CLAUDE.md](CLAUDE.md).