@motion-proto/live-tokens 0.58.0 → 0.60.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.
Files changed (42) hide show
  1. package/.claude/skills/live-tokens-generate-theme/SKILL.md +15 -14
  2. package/.claude/skills/live-tokens-generate-theme/references/mood-vocabulary.md +43 -0
  3. package/.claude/skills/live-tokens-generate-theme/references/style-vocabulary.md +35 -0
  4. package/CHANGELOG.md +89 -0
  5. package/dist-plugin/generateColorsAndType/index.cjs +4 -3
  6. package/dist-plugin/generateColorsAndType/index.js +4 -3
  7. package/package.json +1 -1
  8. package/src/editor/component-editor/ImageLightboxEditor.svelte +11 -2
  9. package/src/editor/component-editor/MenuSelectEditor.svelte +2 -1
  10. package/src/editor/component-editor/scaffolding/TokenLayout.svelte +5 -3
  11. package/src/editor/component-editor/scaffolding/types.ts +6 -0
  12. package/src/editor/core/sketch/sketchLayer.ts +16 -7
  13. package/src/editor/core/sketch/sketchPresets.ts +8 -8
  14. package/src/editor/core/themes/parsers/shadow.ts +12 -4
  15. package/src/editor/docs/content/sketch-mode.md +2 -1
  16. package/src/editor/docs/content.generated.ts +1 -1
  17. package/src/editor/overlay/ColumnsOverlay.svelte +3 -0
  18. package/src/editor/ui/ColorEditPanel.svelte +13 -9
  19. package/src/editor/ui/PaletteEditor.svelte +11 -3
  20. package/src/editor/ui/UIInlineEditActions.svelte +97 -0
  21. package/src/editor/ui/UIPaletteSelector.svelte +14 -6
  22. package/src/live-tokens/data/colors-and-type/autumn.json +5 -5
  23. package/src/live-tokens/data/colors-and-type/default.json +5 -5
  24. package/src/live-tokens/data/colors-and-type/halloween.json +5 -5
  25. package/src/live-tokens/data/colors-and-type/midnight-study.json +5 -5
  26. package/src/live-tokens/data/colors-and-type/ocean.json +5 -5
  27. package/src/live-tokens/data/colors-and-type/royal-velvet.json +5 -5
  28. package/src/live-tokens/data/colors-and-type/sketchy.json +5 -5
  29. package/src/live-tokens/data/colors-and-type/spring-meadow.json +5 -5
  30. package/src/live-tokens/data/colors-and-type/sunset.json +5 -5
  31. package/src/live-tokens/data/themes/autumn.json +6 -6
  32. package/src/live-tokens/data/themes/halloween.json +6 -6
  33. package/src/live-tokens/data/themes/midnight-study.json +6 -6
  34. package/src/live-tokens/data/themes/ocean.json +6 -6
  35. package/src/live-tokens/data/themes/royal-velvet.json +6 -6
  36. package/src/live-tokens/data/themes/sketchy.json +6 -6
  37. package/src/live-tokens/data/themes/spring-meadow.json +6 -6
  38. package/src/live-tokens/data/themes/sunset.json +6 -6
  39. package/src/live-tokens/data/tokens.generated.css +5 -5
  40. package/src/system/components/ImageLightbox.svelte +26 -2
  41. package/src/system/components/MenuSelect.svelte +1 -1
  42. package/src/system/styles/tokens.css +5 -5
@@ -2317,11 +2317,11 @@
2317
2317
  "--hover-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2318
2318
  "--hover": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2319
2319
  "--hover-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2320
- "--shadow-sm": "1px 1px 2px 0px hsla(237, 18%, 3%, 0.9)",
2321
- "--shadow-md": "3px 3px 6px 0px hsla(237, 18%, 3%, 0.9)",
2322
- "--shadow-lg": "5px 5px 9px 0px hsla(237, 18%, 3%, 0.9)",
2323
- "--shadow-xl": "6px 7px 13px 0px hsla(237, 18%, 3%, 0.9)",
2324
- "--shadow-2xl": "8px 9px 16px 0px hsla(237, 18%, 3%, 0.9)"
2320
+ "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.9)",
2321
+ "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.9)",
2322
+ "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.9)",
2323
+ "--shadow-xl": "6px 7px 13px hsla(237, 18%, 3%, 0.9)",
2324
+ "--shadow-2xl": "8px 9px 16px hsla(237, 18%, 3%, 0.9)"
2325
2325
  },
2326
2326
  "fontSources": [
2327
2327
  {
@@ -3317,7 +3317,7 @@
3317
3317
  "createdAt": "2026-05-16T00:00:00.000Z",
3318
3318
  "updatedAt": "2026-08-19T22:39:32.785Z",
3319
3319
  "aliases": {
3320
- "--menuselect-menu-surface": "color-mix(in srgb, var(--surface-neutral-lower) 85%, transparent)",
3320
+ "--menuselect-menu-surface": "color-mix(in srgb, var(--surface-neutral-lower) 95%, transparent)",
3321
3321
  "--menuselect-menu-border": "--border-neutral-medium",
3322
3322
  "--menuselect-menu-border-width": "--border-width-1",
3323
3323
  "--menuselect-menu-radius": "--radius-lg",
@@ -53,11 +53,11 @@
53
53
  --hover-low: color-mix(in srgb, var(--text-primary) 5%, transparent);
54
54
  --hover: color-mix(in srgb, var(--text-primary) 10%, transparent);
55
55
  --hover-high: color-mix(in srgb, var(--text-primary) 15%, transparent);
56
- --shadow-sm: 1px 1px 2px 0px hsla(237, 18%, 3%, 0.9);
57
- --shadow-md: 3px 3px 6px 0px hsla(237, 18%, 3%, 0.9);
58
- --shadow-lg: 5px 5px 9px 0px hsla(237, 18%, 3%, 0.9);
59
- --shadow-xl: 6px 7px 13px 0px hsla(237, 18%, 3%, 0.9);
60
- --shadow-2xl: 8px 9px 16px 0px hsla(237, 18%, 3%, 0.9);
56
+ --shadow-sm: 1px 1px 2px hsla(237, 18%, 3%, 0.9);
57
+ --shadow-md: 3px 3px 6px hsla(237, 18%, 3%, 0.9);
58
+ --shadow-lg: 5px 5px 9px hsla(237, 18%, 3%, 0.9);
59
+ --shadow-xl: 6px 7px 13px hsla(237, 18%, 3%, 0.9);
60
+ --shadow-2xl: 8px 9px 16px hsla(237, 18%, 3%, 0.9);
61
61
  --color-brand-100: oklch(0.95 0.0279 355.35);
62
62
  --color-brand-200: oklch(0.8508 0.0915 355.35);
63
63
  --color-brand-300: oklch(0.7516 0.1697 355.35);
@@ -24,6 +24,13 @@
24
24
  `cover` only crops when the thumbnail has its own box (an aspect from
25
25
  `width`/`height`, or a CSS-constrained container). */
26
26
  fit?: 'contain' | 'cover';
27
+ /** Where the tile's shadow lands. Both modes read
28
+ `--imagelightbox-tile-shadow`: `box` casts it from the tile's rectangle,
29
+ `content` casts it from the image's own alpha, so art with transparency
30
+ doesn't sit on a phantom rectangle. `none` drops it. A theme that dials
31
+ a non-zero spread has no shadow under `content` — `drop-shadow()` has no
32
+ spread slot. */
33
+ shadow?: 'box' | 'content' | 'none';
27
34
  /** When true, shows a bottom toolbar (zoom in/out + percent) and a top-right close button, and enables wheel/drag zoom inside the open modal. When false, click anywhere closes. */
28
35
  extended?: boolean;
29
36
  /** Maximum zoom, as a multiple of the image's natural resolution: `1` = 100%
@@ -55,6 +62,7 @@
55
62
  images = undefined,
56
63
  maxWidth = undefined,
57
64
  fit = 'contain',
65
+ shadow = 'box',
58
66
  extended = false,
59
67
  maxZoom = undefined,
60
68
  capNatural = false,
@@ -582,6 +590,8 @@
582
590
  <button
583
591
  bind:this={thumbEl}
584
592
  class="image-lightbox-thumb"
593
+ class:shadow-box={shadow === 'box'}
594
+ class:shadow-content={shadow === 'content'}
585
595
  style:--imagelightbox-tile-object-fit={fit}
586
596
  type="button"
587
597
  aria-label={cover?.alt ? `Expand image: ${cover.alt}` : 'Expand image'}
@@ -618,6 +628,8 @@
618
628
  <div
619
629
  bind:this={stageEl}
620
630
  class="image-lightbox-stage"
631
+ class:shadow-box={shadow === 'box'}
632
+ class:shadow-content={shadow === 'content'}
621
633
  role="presentation"
622
634
  tabindex="-1"
623
635
  onclick={onStageClick}
@@ -747,12 +759,25 @@
747
759
  cursor: zoom-in;
748
760
  border: var(--imagelightbox-tile-border-width) solid var(--imagelightbox-tile-border);
749
761
  border-radius: var(--imagelightbox-tile-radius);
750
- box-shadow: var(--imagelightbox-tile-shadow);
751
762
  background: transparent;
752
763
  overflow: hidden;
753
764
  transition: transform 250ms ease;
754
765
  }
755
766
 
767
+ .image-lightbox-thumb.shadow-box,
768
+ .image-lightbox-stage.shadow-box {
769
+ box-shadow: var(--imagelightbox-tile-shadow);
770
+ }
771
+
772
+ /* Content mode traces the image's alpha. The filter goes on the tile, not the
773
+ <img>: applied to the element it runs after that element's own overflow
774
+ clip, so the shadow lands outside the box instead of being cropped by it.
775
+ The open modal stays bare — it casts against a near-opaque scrim where no
776
+ shadow reads, and a filter over the pan/zoom surface repaints every frame. */
777
+ .image-lightbox-thumb.shadow-content {
778
+ filter: drop-shadow(var(--imagelightbox-tile-shadow));
779
+ }
780
+
756
781
  .image-lightbox-thumb:hover {
757
782
  transform: scale(1.02);
758
783
  }
@@ -793,7 +818,6 @@
793
818
  cursor: zoom-out;
794
819
  border: var(--imagelightbox-tile-border-width) solid var(--imagelightbox-tile-border);
795
820
  border-radius: var(--imagelightbox-tile-radius);
796
- box-shadow: var(--imagelightbox-tile-shadow);
797
821
  background: transparent;
798
822
  }
799
823
 
@@ -72,7 +72,7 @@
72
72
 
73
73
  :global(:root) {
74
74
  /* Menu panel */
75
- --menuselect-menu-surface: color-mix(in srgb, var(--surface-neutral-lower) 85%, transparent);
75
+ --menuselect-menu-surface: color-mix(in srgb, var(--surface-neutral-lower) 95%, transparent);
76
76
  --menuselect-menu-border: var(--border-neutral-medium);
77
77
  --menuselect-menu-border-width: var(--border-width-1);
78
78
  --menuselect-menu-radius: var(--radius-md);
@@ -530,11 +530,11 @@
530
530
 
531
531
  /* Shadows (elevation scale) */
532
532
  --shadow-none: none;
533
- --shadow-sm: 1px 1px 2px 0px hsla(237, 18%, 3%, 0.9);
534
- --shadow-md: 3px 3px 6px 0px hsla(237, 18%, 3%, 0.9);
535
- --shadow-lg: 5px 5px 9px 0px hsla(237, 18%, 3%, 0.9);
536
- --shadow-xl: 6px 7px 13px 0px hsla(237, 18%, 3%, 0.9);
537
- --shadow-2xl: 8px 9px 16px 0px hsla(237, 18%, 3%, 0.9);
533
+ --shadow-sm: 1px 1px 2px hsla(237, 18%, 3%, 0.9);
534
+ --shadow-md: 3px 3px 6px hsla(237, 18%, 3%, 0.9);
535
+ --shadow-lg: 5px 5px 9px hsla(237, 18%, 3%, 0.9);
536
+ --shadow-xl: 6px 7px 13px hsla(237, 18%, 3%, 0.9);
537
+ --shadow-2xl: 8px 9px 16px hsla(237, 18%, 3%, 0.9);
538
538
 
539
539
  /* Focus rings (box-shadow outline) */
540
540
  --ring-focus-sm: 0 0 0 2px hsla(0, 78%, 60%, 0.1);