@rogieking/figui3 8.2.1 → 8.4.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.
- package/README.md +5 -4
- package/components.css +41 -71
- package/dist/components.css +1 -1
- package/dist/fig-editor.css +1 -1
- package/dist/fig-editor.js +3 -193
- package/dist/fig-lab.js +2 -59
- package/dist/fig.css +1 -1
- package/dist/fig.js +33 -272
- package/fig-editor.css +129 -28
- package/fig-editor.js +1303 -354
- package/fig-lab.js +319 -133
- package/fig.js +883 -831
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -132,7 +132,7 @@ Minimal example:
|
|
|
132
132
|
| [Popup](#popup) | `<fig-popup>` | Anchored floating surface |
|
|
133
133
|
| [Toast](#toast) | `<fig-toast>` | Toast notification |
|
|
134
134
|
| [Tooltip](#tooltip) | `<fig-tooltip>` | Hover/click tooltip |
|
|
135
|
-
| [Separator](#separator) | `<fig-separator>` | Visual divider with an optional label |
|
|
135
|
+
| [Separator](#separator) | `<fig-separator>` / `<fig-menu-separator>` | Visual divider with an optional label |
|
|
136
136
|
| [Menu](#menu) | `<fig-menu>` | Triggered menu with keyboard navigation |
|
|
137
137
|
| [Header](#header) | `<fig-header>` | Section header |
|
|
138
138
|
| [Layer](#layer) | `<fig-layer>` | Collapsible layer list item from `fig-layer.js` |
|
|
@@ -1381,19 +1381,20 @@ Escape dismisses an open tooltip and returns focus to its trigger.
|
|
|
1381
1381
|
|
|
1382
1382
|
`<fig-separator>` — [demo](https://rog.ie/figui3/#separator)
|
|
1383
1383
|
|
|
1384
|
-
A visual divider between content groups. The optional `label` attribute adds a group label and accessible name. Add `borderless` to hide the separator line.
|
|
1384
|
+
A visual divider between content groups. The optional `label` attribute adds a group label and accessible name. Add `borderless` to hide the separator line. `<fig-menu-separator>` is a backwards-compatible alias.
|
|
1385
1385
|
|
|
1386
1386
|
```html
|
|
1387
1387
|
<fig-separator></fig-separator>
|
|
1388
1388
|
<fig-separator label="More"></fig-separator>
|
|
1389
1389
|
<fig-separator label="First group" borderless></fig-separator>
|
|
1390
|
+
<fig-menu-separator></fig-menu-separator>
|
|
1390
1391
|
```
|
|
1391
1392
|
|
|
1392
1393
|
---
|
|
1393
1394
|
|
|
1394
1395
|
#### Menu
|
|
1395
1396
|
|
|
1396
|
-
`<fig-menu>` / `<fig-menu-item>` / `<fig-separator>` — [demo](https://rog.ie/figui3/#menu)
|
|
1397
|
+
`<fig-menu>` / `<fig-menu-item>` / `<fig-separator>` / `<fig-menu-separator>` — [demo](https://rog.ie/figui3/#menu)
|
|
1397
1398
|
|
|
1398
1399
|
Triggered menu with native keyboard patterns. The trigger gets `aria-haspopup="menu"`, `aria-expanded`, and `aria-controls`; menu items use `role="menuitem"` and disabled items are skipped by keyboard navigation.
|
|
1399
1400
|
|
|
@@ -1422,7 +1423,7 @@ Triggered menu with native keyboard patterns. The trigger gets `aria-haspopup="m
|
|
|
1422
1423
|
</fig-menu>
|
|
1423
1424
|
```
|
|
1424
1425
|
|
|
1425
|
-
`fig-separator`
|
|
1426
|
+
`fig-separator` and `fig-menu-separator` accept optional `label` — renders the rule, then secondary group text underneath.
|
|
1426
1427
|
|
|
1427
1428
|
---
|
|
1428
1429
|
|
package/components.css
CHANGED
|
@@ -982,6 +982,8 @@ fig-button {
|
|
|
982
982
|
[variant="destructiveGhost"]
|
|
983
983
|
):not(
|
|
984
984
|
[variant="destructiveLink"]
|
|
985
|
+
):not(
|
|
986
|
+
[variant="ghost"]
|
|
985
987
|
) {
|
|
986
988
|
color: var(--figma-color-text-ondisabled);
|
|
987
989
|
box-shadow: none;
|
|
@@ -1648,6 +1650,12 @@ fig-video {
|
|
|
1648
1650
|
width: 100%;
|
|
1649
1651
|
}
|
|
1650
1652
|
|
|
1653
|
+
/* An explicit size wins over full/aspect-ratio stretching, which would
|
|
1654
|
+
otherwise collapse to 0 inside a shrink-to-fit parent (e.g. fig-choice). */
|
|
1655
|
+
&[size]:not([size=""]):not([size="auto"]) {
|
|
1656
|
+
width: var(--fig-media-size);
|
|
1657
|
+
}
|
|
1658
|
+
|
|
1651
1659
|
> fig-preview {
|
|
1652
1660
|
--fig-preview-fit: var(--fig-media-fit);
|
|
1653
1661
|
width: 100%;
|
|
@@ -1692,7 +1700,7 @@ fig-video {
|
|
|
1692
1700
|
pointer-events: none;
|
|
1693
1701
|
}
|
|
1694
1702
|
|
|
1695
|
-
&:
|
|
1703
|
+
&:not(:has(> fig-preview > video.fig-media-element[data-generated][src]:not([src=""]))):is(:not([poster]), [poster=""])
|
|
1696
1704
|
> fig-preview > video.fig-media-element[data-generated] {
|
|
1697
1705
|
opacity: 0;
|
|
1698
1706
|
pointer-events: none;
|
|
@@ -1732,7 +1740,11 @@ fig-video {
|
|
|
1732
1740
|
&:has(> [slot="overlay"]:is(:focus, :focus-within, :active)) > [slot="overlay"],
|
|
1733
1741
|
&:has(> fig-input-file[variant="overlay"]:is(:focus, :focus-within, :active)) > fig-input-file[variant="overlay"],
|
|
1734
1742
|
> [slot="overlay"]:focus-within,
|
|
1735
|
-
> fig-input-file[variant="overlay"]:focus-within
|
|
1743
|
+
> fig-input-file[variant="overlay"]:focus-within,
|
|
1744
|
+
/* The overlay is a sibling of fig-preview, so hovering it drops the
|
|
1745
|
+
preview's :hover. Keep it shown to avoid a show/hide flicker loop. */
|
|
1746
|
+
> [slot="overlay"]:hover,
|
|
1747
|
+
> fig-input-file[variant="overlay"]:hover {
|
|
1736
1748
|
opacity: 1;
|
|
1737
1749
|
pointer-events: all;
|
|
1738
1750
|
}
|
|
@@ -2697,6 +2709,7 @@ fig-slider {
|
|
|
2697
2709
|
--slider-stepper-padding: calc(
|
|
2698
2710
|
(var(--slider-height) / 2) - var(--slider-tick-width) / 2
|
|
2699
2711
|
);
|
|
2712
|
+
--slider-track-color: var(--figma-color-bg-secondary);
|
|
2700
2713
|
--slider-percent: calc(var(--slider-complete) * 100%);
|
|
2701
2714
|
--start-percent: calc(var(--default, 0) * 100%);
|
|
2702
2715
|
--slider-tick-width: calc(var(--slider-height) / 4);
|
|
@@ -2741,7 +2754,7 @@ fig-slider {
|
|
|
2741
2754
|
flex: 1 1 0;
|
|
2742
2755
|
min-width: 0;
|
|
2743
2756
|
transition: var(--slider-transition);
|
|
2744
|
-
background: var(--
|
|
2757
|
+
background: var(--slider-track-color);
|
|
2745
2758
|
border-radius: var(--slider-border-radius);
|
|
2746
2759
|
box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
|
|
2747
2760
|
|
|
@@ -2764,6 +2777,13 @@ fig-slider {
|
|
|
2764
2777
|
max-width: 100%;
|
|
2765
2778
|
}
|
|
2766
2779
|
}
|
|
2780
|
+
|
|
2781
|
+
/* Disabled: progress fill blends into the track so the bar stays legible */
|
|
2782
|
+
&:has(input[type="range"]:disabled) .fig-slider-input-container::before {
|
|
2783
|
+
background: var(--slider-track-color);
|
|
2784
|
+
box-shadow: none;
|
|
2785
|
+
}
|
|
2786
|
+
|
|
2767
2787
|
&[type="stepper"] {
|
|
2768
2788
|
.fig-slider-input-container {
|
|
2769
2789
|
&::before {
|
|
@@ -2877,12 +2897,7 @@ fig-slider {
|
|
|
2877
2897
|
}
|
|
2878
2898
|
|
|
2879
2899
|
&:disabled::-webkit-slider-runnable-track {
|
|
2880
|
-
background:
|
|
2881
|
-
to right,
|
|
2882
|
-
var(--figma-color-bg-secondary) 0%,
|
|
2883
|
-
var(--figma-color-bg-secondary) var(--slider-percent),
|
|
2884
|
-
var(--figma-color-bg) var(--slider-percent)
|
|
2885
|
-
);
|
|
2900
|
+
background-color: transparent;
|
|
2886
2901
|
}
|
|
2887
2902
|
|
|
2888
2903
|
&.hue::-webkit-slider-runnable-track {
|
|
@@ -2932,12 +2947,7 @@ fig-slider {
|
|
|
2932
2947
|
}
|
|
2933
2948
|
|
|
2934
2949
|
&:disabled::-moz-range-track {
|
|
2935
|
-
background:
|
|
2936
|
-
to right,
|
|
2937
|
-
var(--figma-color-bg-secondary) 0%,
|
|
2938
|
-
var(--figma-color-bg-secondary) var(--slider-percent),
|
|
2939
|
-
var(--figma-color-bg) var(--slider-percent)
|
|
2940
|
-
);
|
|
2950
|
+
background-color: transparent;
|
|
2941
2951
|
}
|
|
2942
2952
|
|
|
2943
2953
|
&.hue::-moz-range-track {
|
|
@@ -3003,6 +3013,7 @@ fig-slider {
|
|
|
3003
3013
|
0 0 0 0.75px rgba(0, 0, 0, 0.075), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
|
|
3004
3014
|
var(--figma-elevation-100);
|
|
3005
3015
|
--slider-checkerboard: var(--checkerboard-slider);
|
|
3016
|
+
--slider-track-color: var(--figma-color-bg-tertiary);
|
|
3006
3017
|
|
|
3007
3018
|
background-color: var(--figma-color-bg-secondary);
|
|
3008
3019
|
border-radius: var(--radius-medium);
|
|
@@ -3018,7 +3029,7 @@ fig-slider {
|
|
|
3018
3029
|
display: block;
|
|
3019
3030
|
width: 100%;
|
|
3020
3031
|
box-shadow: none;
|
|
3021
|
-
background-color: var(--
|
|
3032
|
+
background-color: var(--slider-track-color);
|
|
3022
3033
|
}
|
|
3023
3034
|
fig-input-text,
|
|
3024
3035
|
fig-input-number {
|
|
@@ -3511,7 +3522,7 @@ fig-footer {
|
|
|
3511
3522
|
justify-content: flex-end;
|
|
3512
3523
|
gap: var(--spacer-2);
|
|
3513
3524
|
padding: var(--spacer-2-5);
|
|
3514
|
-
box-shadow:
|
|
3525
|
+
box-shadow: 0 -1px 0 0 var(--figma-color-border);
|
|
3515
3526
|
|
|
3516
3527
|
& h3 {
|
|
3517
3528
|
font-weight: var(--body-medium-strong-fontWeight);
|
|
@@ -3563,6 +3574,7 @@ fig-footer {
|
|
|
3563
3574
|
z-index: 10;
|
|
3564
3575
|
margin-top: auto;
|
|
3565
3576
|
background: var(--figma-color-bg);
|
|
3577
|
+
border-radius: 0 0 var(--radius-large) var(--radius-large)
|
|
3566
3578
|
}
|
|
3567
3579
|
}
|
|
3568
3580
|
|
|
@@ -3578,13 +3590,17 @@ fig-content {
|
|
|
3578
3590
|
&:has(>fig-group[name]:last-child){
|
|
3579
3591
|
padding-bottom: 0;
|
|
3580
3592
|
}
|
|
3593
|
+
&>p{
|
|
3594
|
+
padding-inline: var(--spacer-3);
|
|
3595
|
+
}
|
|
3581
3596
|
}
|
|
3582
3597
|
|
|
3583
3598
|
fig-content[padding]:not([padding="false"]):not(:empty) {
|
|
3584
3599
|
padding-inline: var(--spacer-3);
|
|
3585
3600
|
}
|
|
3586
3601
|
|
|
3587
|
-
fig-content:empty
|
|
3602
|
+
fig-content:empty,
|
|
3603
|
+
fig-content:not(:has(*)) {
|
|
3588
3604
|
padding: 0;
|
|
3589
3605
|
}
|
|
3590
3606
|
|
|
@@ -4317,52 +4333,6 @@ fig-spinner {
|
|
|
4317
4333
|
}
|
|
4318
4334
|
}
|
|
4319
4335
|
|
|
4320
|
-
fig-interpolation-swatch {
|
|
4321
|
-
position: relative;
|
|
4322
|
-
display: inline-flex;
|
|
4323
|
-
align-items: center;
|
|
4324
|
-
justify-content: center;
|
|
4325
|
-
width: 1.5rem;
|
|
4326
|
-
height: 1.5rem;
|
|
4327
|
-
flex: 0 0 auto;
|
|
4328
|
-
color: var(--figma-color-bordertranslucent);
|
|
4329
|
-
overflow: visible;
|
|
4330
|
-
|
|
4331
|
-
&[size="large"] {
|
|
4332
|
-
width: 2rem;
|
|
4333
|
-
height: 2rem;
|
|
4334
|
-
|
|
4335
|
-
.fig-interpolation-swatch-svg,
|
|
4336
|
-
.fig-interpolation-swatch-fill {
|
|
4337
|
-
width: 1.25rem;
|
|
4338
|
-
height: 1.25rem;
|
|
4339
|
-
}
|
|
4340
|
-
}
|
|
4341
|
-
|
|
4342
|
-
.fig-interpolation-swatch-svg {
|
|
4343
|
-
display: block;
|
|
4344
|
-
width: 1rem;
|
|
4345
|
-
height: 1rem;
|
|
4346
|
-
overflow: visible;
|
|
4347
|
-
}
|
|
4348
|
-
|
|
4349
|
-
.fig-interpolation-swatch-fill {
|
|
4350
|
-
position: absolute;
|
|
4351
|
-
top: 50%;
|
|
4352
|
-
left: 50%;
|
|
4353
|
-
transform: translate(-50%, -50%);
|
|
4354
|
-
width: 1rem;
|
|
4355
|
-
height: 1rem;
|
|
4356
|
-
background: linear-gradient(90deg, #ff0000, #4f9eff);
|
|
4357
|
-
-webkit-mask-size: 100% 100%;
|
|
4358
|
-
mask-size: 100% 100%;
|
|
4359
|
-
-webkit-mask-repeat: no-repeat;
|
|
4360
|
-
mask-repeat: no-repeat;
|
|
4361
|
-
-webkit-mask-position: center;
|
|
4362
|
-
mask-position: center;
|
|
4363
|
-
}
|
|
4364
|
-
}
|
|
4365
|
-
|
|
4366
4336
|
/* Segmented control */
|
|
4367
4337
|
.segmented-control,
|
|
4368
4338
|
fig-segmented-control {
|
|
@@ -5539,7 +5509,7 @@ fig-menu {
|
|
|
5539
5509
|
display: contents;
|
|
5540
5510
|
|
|
5541
5511
|
& > fig-menu-item,
|
|
5542
|
-
& > fig-separator {
|
|
5512
|
+
& > :is(fig-separator, fig-menu-separator) {
|
|
5543
5513
|
display: none;
|
|
5544
5514
|
}
|
|
5545
5515
|
}
|
|
@@ -5582,7 +5552,7 @@ fig-menu-item {
|
|
|
5582
5552
|
}
|
|
5583
5553
|
}
|
|
5584
5554
|
|
|
5585
|
-
fig-separator {
|
|
5555
|
+
:is(fig-separator, fig-menu-separator) {
|
|
5586
5556
|
--fig-separator-color: var(--figma-color-border);
|
|
5587
5557
|
--fig-separator-label-color: var(--figma-color-text-secondary);
|
|
5588
5558
|
--fig-menu-inline-padding: 0 var(--spacer-3);
|
|
@@ -5638,18 +5608,18 @@ fig-separator {
|
|
|
5638
5608
|
}
|
|
5639
5609
|
|
|
5640
5610
|
dialog[is="fig-popup"][theme="menu"]
|
|
5641
|
-
fig-separator:first-child[label]:not([label=""])::before,
|
|
5642
|
-
fig-select-options > fig-separator:first-child[label]:not([label=""])::before {
|
|
5611
|
+
:is(fig-separator, fig-menu-separator):first-child[label]:not([label=""])::before,
|
|
5612
|
+
fig-select-options > :is(fig-separator, fig-menu-separator):first-child[label]:not([label=""])::before {
|
|
5643
5613
|
display: none;
|
|
5644
5614
|
}
|
|
5645
5615
|
|
|
5646
|
-
dialog[is="fig-popup"][theme="menu"] fig-separator,
|
|
5647
|
-
fig-select-options > fig-separator {
|
|
5616
|
+
dialog[is="fig-popup"][theme="menu"] :is(fig-separator, fig-menu-separator),
|
|
5617
|
+
fig-select-options > :is(fig-separator, fig-menu-separator) {
|
|
5648
5618
|
--fig-separator-color: var(--figma-color-border-menu);
|
|
5649
5619
|
--fig-separator-label-color: var(--figma-color-text-menu-secondary);
|
|
5650
5620
|
}
|
|
5651
5621
|
|
|
5652
|
-
dialog[is="fig-popup"][theme="menu"] fig-separator {
|
|
5622
|
+
dialog[is="fig-popup"][theme="menu"] :is(fig-separator, fig-menu-separator) {
|
|
5653
5623
|
--fig-menu-inline-padding: 0
|
|
5654
5624
|
var(--fig-menu-item-padding, var(--spacer-4));
|
|
5655
5625
|
|