@rogieking/figui3 8.9.17 → 8.9.19

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.
@@ -128,7 +128,7 @@ Full fill editor. Core `fig-input-color` / `fig-input-fill` auto-open it when re
128
128
  </fig-fill-picker>
129
129
  ```
130
130
 
131
- Playground: `#fill-picker` — `all-modes`, `solid`, `gradient`, `image`, `video`, `webcam`.
131
+ Playground: `#fill-picker` — `all-modes`, `solid`, `gradient`, `image`, `video`, `webcam`, `shader` (custom `slot="mode-shader"`).
132
132
 
133
133
  | Attr | Notes |
134
134
  |---|---|
@@ -161,13 +161,12 @@ Do not use `picker` or `picker-anchor` on `fig-input-color`. Forward picker chro
161
161
  ### Custom modes (vanilla)
162
162
 
163
163
  ```html
164
- <fig-fill-picker mode="solid,tokens">
165
- <fig-swatch></fig-swatch>
164
+ <fig-input-fill mode="solid,tokens" value='{"type":"tokens"}'>
166
165
  <div slot="mode-tokens" label="Tokens">Token UI</div>
167
- </fig-fill-picker>
166
+ </fig-input-fill>
168
167
  ```
169
168
 
170
- Child `slot="mode-<name>"` plus `<name>` in `mode`. Custom content must dispatch `input` / `change` with `detail` so the picker stores mode data.
169
+ Child `slot="mode-<name>"` plus `<name>` in `mode`. `fig-input-fill` forwards those slots to the inner picker and uses image-style chrome (type label + opacity). Custom content must dispatch `input` / `change` with `detail` so the picker stores mode data.
171
170
 
172
171
  ### Custom modes (React)
173
172
 
@@ -178,7 +177,7 @@ Child `slot="mode-<name>"` plus `<name>` in `mode`. Custom content must dispatch
178
177
 
179
178
  ## `fig-interpolation-swatch`
180
179
 
181
- Preview for gradient interpolation (linear or polar hue arc). Playground attrs: `size="small|large"`. Used inside the fill picker gradient UI; can be used standalone with a gradient `value`.
180
+ Preview for gradient interpolation (linear or polar hue arc). Playground attrs: `size="small|large"`. Can be used standalone with a gradient `value`. The fill picker interpolation row is hidden for now and locks to `srgb`.
182
181
 
183
182
  ## Maintainer notes
184
183
 
@@ -138,7 +138,7 @@ Playground hashes: `/figui3#{id}`. Full attrs: [reference.md](reference.md).
138
138
  | Tag | Playground | Notes |
139
139
  |---|---|---|
140
140
  | `fig-input-color` | (propkit `#color`) | Solid color. `text`, `alpha`. Auto-detects `fig-fill-picker` |
141
- | `fig-input-fill` | `#fill-input` | Solid/gradient/image/video/webcam JSON `value`. Same `webcam` / `video.poster` shape as the picker. `webcam-mode`, `default-video`, `picker-*` forwarded if picker registered |
141
+ | `fig-input-fill` | `#fill-input` | Solid/gradient/image/video/webcam/custom JSON `value`. Custom `mode-*` slots forward to the inner picker and use image-style chrome. Same `webcam` / `video.poster` shape as the picker. `webcam-mode`, `default-video`, `picker-*` forwarded if picker registered |
142
142
  | `fig-input-palette` | (propkit `#palette`) | Multi-color. `fixed`, `open` |
143
143
  | `fig-input-gradient` | (propkit `#gradient`) | Stops. `edit`, `mode="handle\|tip"` |
144
144
  | `fig-swatch` | `#swatch` | `size`, `selected`, `alpha` |
package/components.css CHANGED
@@ -436,7 +436,7 @@
436
436
  0px 10px 16px 0px light-dark(rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0.35)),
437
437
  0px 2px 5px 0px light-dark(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.35)),
438
438
  inset 0px 0.5px 0px 0px light-dark(transparent, rgba(255, 255, 255, 0.08)),
439
- inset 0px 0.75px 0px 0px light-dark(transparent, rgba(255, 255, 255, 0.075));
439
+ inset 0px 0.75px 0px 0px light-dark(transparent, rgba(255, 255, 255, 0.1));
440
440
 
441
441
  --fig-popover-shadow:
442
442
  drop-shadow(0px 1px 1.5px light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4)))
@@ -1495,7 +1495,8 @@ input[type="color"] {
1495
1495
  }
1496
1496
  &::before {
1497
1497
  content: "";
1498
- background: var(--swatch-background);
1498
+ background-color: transparent;
1499
+ background-image: var(--swatch-background);
1499
1500
  background-size: var(--swatch-bg-size);
1500
1501
  background-position: var(--swatch-bg-position);
1501
1502
  background-repeat: no-repeat;
@@ -1780,6 +1781,18 @@ fig-media-controls {
1780
1781
  gap: var(--spacer-1);
1781
1782
  width: 100%;
1782
1783
 
1784
+ /* display:contents on fig-tooltip drops the play button out of this flex
1785
+ row until hover/reflow. Keep a real box so the control is always visible. */
1786
+ > fig-tooltip {
1787
+ display: inline-flex;
1788
+ flex-shrink: 0;
1789
+ align-items: center;
1790
+ }
1791
+
1792
+ fig-icon {
1793
+ contain: none;
1794
+ }
1795
+
1783
1796
  &[overlay]:not([overlay="false"]) {
1784
1797
  border-radius: var(--radius-medium);
1785
1798
  background-color: var(--figma-color-bg);
@@ -3153,7 +3166,6 @@ dialog[is="fig-popup"] {
3153
3166
  position: sticky;
3154
3167
  top: 0;
3155
3168
  z-index: 2;
3156
- background: var(--fig-popup-bg-color, var(--figma-color-bg));
3157
3169
  }
3158
3170
 
3159
3171
  &:has(> fig-header) {
@@ -3923,6 +3935,10 @@ fig-input-number {
3923
3935
  }
3924
3936
 
3925
3937
  fig-input-fill {
3938
+ & > [slot^="mode-"] {
3939
+ display: none;
3940
+ }
3941
+
3926
3942
  & > .input-combo > fig-fill-picker {
3927
3943
  display: contents;
3928
3944
  }
@@ -4891,7 +4907,9 @@ fig-skeleton {
4891
4907
 
4892
4908
  .fig-mask-icon,
4893
4909
  fig-icon {
4894
- contain: strict;
4910
+ /* size only — paint containment skips mask-image when `name` / `--icon` updates
4911
+ until a sibling hover (e.g. fig-preview) forces a repaint. */
4912
+ contain: size;
4895
4913
  --size: var(--spacer-4);
4896
4914
  --icon: var(--icon-24-add);
4897
4915