@rogieking/figui3 3.5.0 → 3.7.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 (4) hide show
  1. package/components.css +240 -33
  2. package/dist/fig.js +29 -29
  3. package/fig.js +278 -5
  4. package/package.json +1 -1
package/components.css CHANGED
@@ -1777,6 +1777,7 @@ fig-origin-grid {
1777
1777
  --origin-overflow-nudge-base: var(--spacer-2-5);
1778
1778
  --origin-overflow-nudge-x: 0px;
1779
1779
  --origin-overflow-nudge-y: 0px;
1780
+ --origin-grid-handle-radius: var(--radius-small);
1780
1781
  --origin-overflow-nudge-x-scale: calc((100cqb / 100cqi) * -1);
1781
1782
  --origin-overflow-nudge-y-scale: calc((100cqb / 100cqi) * -1);
1782
1783
  position: absolute;
@@ -1784,10 +1785,11 @@ fig-origin-grid {
1784
1785
  top: 50%;
1785
1786
  width: var(--origin-grid-handle-size);
1786
1787
  height: var(--origin-grid-handle-size);
1787
- border-radius: var(--radius-small);
1788
+ border-radius: var(--origin-grid-handle-radius);
1788
1789
  background: var(--figma-color-bg-brand);
1789
1790
  box-shadow:
1790
- 0 0 0 1px var(--figma-color-bg),
1791
+ inset 0 0 0 0.09375rem var(--handle-color),
1792
+ 0px 0 0 0.5px rgba(0, 0, 0, 0.1),
1791
1793
  var(--elevation-100-canvas);
1792
1794
  transform: translate(
1793
1795
  calc(-50% + var(--origin-overflow-nudge-x)),
@@ -1808,6 +1810,7 @@ fig-origin-grid {
1808
1810
  -webkit-mask-size: 24px 24px;
1809
1811
  mask-size: 24px 24px;
1810
1812
  border-radius: 0;
1813
+ box-shadow: none;
1811
1814
  }
1812
1815
 
1813
1816
  &.beyond-bounds-x.overflow-right {
@@ -2194,15 +2197,30 @@ fig-slider {
2194
2197
  --slider-field-height: 1.5rem;
2195
2198
  --slider-height: 1rem;
2196
2199
  --slider-thumb-size: var(--slider-height);
2200
+ --slider-thumb-width: var(--slider-thumb-size);
2201
+ --slider-thumb-height: var(--slider-thumb-size);
2202
+ --slider-thumb-color: var(--handle-color);
2203
+ --slider-thumb-radius: calc(var(--slider-thumb-width) / 2);
2204
+ --slider-thumb-opacity: 1;
2205
+ --slider-thumb-outline: none;
2206
+ --slider-thumb-outline-offset: 2px;
2207
+ --slider-tick-opacity: 1;
2208
+ --slider-tick-radius: 100%;
2209
+ --slider-border-radius: calc(var(--slider-height) / 2);
2210
+ --slider-stepper-padding: calc(
2211
+ (var(--slider-height) / 2) - var(--slider-tick-width) / 2
2212
+ );
2197
2213
  --slider-percent: calc(var(--slider-complete) * 100%);
2198
2214
  --start-percent: calc(var(--default, 0) * 100%);
2199
- --slider-tick-size: calc(var(--slider-height) / 4);
2215
+ --slider-tick-width: calc(var(--slider-height) / 4);
2216
+ --slider-tick-height: calc(var(--slider-height) / 4);
2200
2217
  --slider-handle-shadow:
2201
- inset 0 0 0 calc(4px + 0.5rem * var(--unchanged)) var(--handle-color),
2218
+ inset 0 0 0 calc(4px + 0.5rem * var(--unchanged)) var(--slider-thumb-color),
2202
2219
  0px 0 0 0.5px rgba(0, 0, 0, 0.1), var(--figma-elevation-100);
2203
2220
  --slider-handle-shadow-focus:
2204
- inset 0 0 0 4px var(--handle-color), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
2205
- var(--handle-shadow), 0 0 0 1px var(--figma-color-border-selected);
2221
+ inset 0 0 0 4px var(--slider-thumb-color),
2222
+ inset 0 0 0 5px rgba(0, 0, 0, 0.1), var(--handle-shadow),
2223
+ 0 0 0 1px var(--figma-color-border-selected);
2206
2224
  --slider-transition: none;
2207
2225
  --handle-transition: var(--slider-transition);
2208
2226
 
@@ -2219,7 +2237,7 @@ fig-slider {
2219
2237
  width: 100%;
2220
2238
  transition: var(--slider-transition);
2221
2239
  background: var(--figma-color-bg-secondary);
2222
- border-radius: 0.5rem;
2240
+ border-radius: var(--slider-border-radius);
2223
2241
  box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
2224
2242
 
2225
2243
  /* Track */
@@ -2231,7 +2249,7 @@ fig-slider {
2231
2249
  top: 0;
2232
2250
  pointer-events: none;
2233
2251
  bottom: 0;
2234
- border-radius: 0.5rem;
2252
+ border-radius: var(--slider-border-radius);
2235
2253
  min-width: var(--slider-height);
2236
2254
  box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
2237
2255
  width: calc(
@@ -2253,8 +2271,8 @@ fig-slider {
2253
2271
  datalist option {
2254
2272
  position: absolute;
2255
2273
  margin: 0;
2256
- left: calc(var(--start-percent) - var(--slider-tick-size) / 2);
2257
- top: calc(50% - var(--slider-tick-size) / 2);
2274
+ left: calc(var(--start-percent) - var(--slider-tick-width) / 2);
2275
+ top: calc(50% - var(--slider-tick-height) / 2);
2258
2276
  }
2259
2277
  .fig-slider-input-container {
2260
2278
  &::before {
@@ -2293,7 +2311,7 @@ fig-slider {
2293
2311
  height: var(--slider-height);
2294
2312
  appearance: none;
2295
2313
  -webkit-appearance: none;
2296
- border-radius: calc(var(--slider-height) / 2);
2314
+ border-radius: var(--slider-border-radius);
2297
2315
  display: block;
2298
2316
  width: 100%;
2299
2317
  background-color: transparent;
@@ -2315,16 +2333,22 @@ fig-slider {
2315
2333
  -webkit-appearance: none;
2316
2334
  color-scheme: inherit;
2317
2335
  transition: var(--handle-transition);
2318
- border-radius: 100%;
2319
- height: var(--slider-thumb-size);
2320
- width: var(--slider-thumb-size);
2321
- margin-top: calc(var(--slider-height) / 2 - var(--slider-thumb-size) / 2);
2336
+ border-radius: var(--slider-thumb-radius);
2337
+ height: var(--slider-thumb-height);
2338
+ width: var(--slider-thumb-width);
2339
+ margin-top: calc(
2340
+ var(--slider-height) / 2 - var(--slider-thumb-height) / 2
2341
+ );
2342
+ outline: var(--slider-thumb-outline);
2343
+ outline-offset: var(--slider-thumb-outline-offset);
2344
+
2322
2345
  aspect-ratio: 1;
2323
2346
  border: none;
2324
2347
  position: relative;
2325
2348
  z-index: 1;
2326
2349
  cursor: default;
2327
2350
  box-shadow: var(--slider-handle-shadow);
2351
+ opacity: var(--slider-thumb-opacity);
2328
2352
  }
2329
2353
 
2330
2354
  &:disabled {
@@ -2350,7 +2374,7 @@ fig-slider {
2350
2374
  height: var(--slider-height);
2351
2375
  background-color: transparent;
2352
2376
  transition: var(--slider-transition);
2353
- border-radius: calc(var(--slider-height) / 2);
2377
+ border-radius: var(--slider-border-radius);
2354
2378
  }
2355
2379
 
2356
2380
  &.hue::-webkit-slider-runnable-track {
@@ -2369,7 +2393,7 @@ fig-slider {
2369
2393
  height: var(--slider-height);
2370
2394
  appearance: none;
2371
2395
  -moz-appearance: none;
2372
- border-radius: calc(var(--slider-height) / 2);
2396
+ border-radius: var(--slider-border-radius);
2373
2397
  display: block;
2374
2398
  width: 100%;
2375
2399
  background-color: transparent;
@@ -2390,9 +2414,11 @@ fig-slider {
2390
2414
  appearance: none;
2391
2415
  -moz-appearance: none;
2392
2416
  background: transparent;
2393
- border-radius: 100%;
2394
- height: var(--slider-thumb-size);
2395
- width: var(--slider-thumb-size);
2417
+ border-radius: var(--slider-thumb-radius);
2418
+ height: var(--slider-thumb-height);
2419
+ width: var(--slider-thumb-width);
2420
+ outline: var(--slider-thumb-outline);
2421
+ outline-offset: var(--slider-thumb-outline-offset);
2396
2422
  aspect-ratio: 1;
2397
2423
  border: none;
2398
2424
  position: relative;
@@ -2400,6 +2426,7 @@ fig-slider {
2400
2426
  cursor: default;
2401
2427
  box-shadow: var(--slider-handle-shadow);
2402
2428
  transition: var(--handle-transition);
2429
+ opacity: var(--slider-thumb-opacity);
2403
2430
  }
2404
2431
 
2405
2432
  &:disabled {
@@ -2423,7 +2450,7 @@ fig-slider {
2423
2450
  &::-moz-range-track {
2424
2451
  height: var(--slider-height);
2425
2452
  background-color: transparent;
2426
- border-radius: calc(var(--slider-height) / 2);
2453
+ border-radius: var(--slider-border-radius);
2427
2454
  transition: var(--slider-transition);
2428
2455
  }
2429
2456
 
@@ -2449,7 +2476,7 @@ fig-slider {
2449
2476
  margin: 0;
2450
2477
  border: 0;
2451
2478
  appearance: none;
2452
- padding: 0 calc((var(--slider-height) / 2) - var(--slider-tick-size) / 2);
2479
+ padding: 0 var(--slider-stepper-padding);
2453
2480
  height: var(--slider-height);
2454
2481
  pointer-events: none;
2455
2482
  justify-content: space-between;
@@ -2457,14 +2484,14 @@ fig-slider {
2457
2484
 
2458
2485
  & option {
2459
2486
  appearance: none;
2460
- width: var(--slider-tick-size);
2461
- height: var(--slider-tick-size);
2462
- aspect-ratio: 1;
2487
+ width: var(--slider-tick-width);
2488
+ height: var(--slider-tick-height);
2463
2489
  padding: 0;
2464
2490
  border: 0;
2465
- border-radius: 100%;
2491
+ border-radius: var(--slider-tick-radius);
2466
2492
  font-size: 0;
2467
2493
  background: var(--figma-color-icon-tertiary);
2494
+ opacity: var(--slider-tick-opacity);
2468
2495
  display: block;
2469
2496
  &[default] {
2470
2497
  background: var(--figma-color-icon);
@@ -2479,11 +2506,13 @@ fig-slider {
2479
2506
  &[variant="minimal"] {
2480
2507
  --slider-height: 0.375rem;
2481
2508
  --slider-thumb-size: 0.75rem;
2482
- --slider-tick-size: calc(var(--slider-height) / 2);
2509
+ --slider-tick-width: calc(var(--slider-height) / 2);
2510
+ --slider-tick-height: calc(var(--slider-height) / 2);
2483
2511
  --handle-transition: none;
2484
2512
  --slider-transition: none;
2485
2513
  --slider-handle-shadow:
2486
- inset 0 0 0 calc(6px + 0.5rem * var(--unchanged)) var(--handle-color),
2514
+ inset 0 0 0 calc(6px + 0.5rem * var(--unchanged))
2515
+ var(--slider-thumb-color),
2487
2516
  0 0 0 0.75px rgba(0, 0, 0, 0.075), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
2488
2517
  var(--figma-elevation-100);
2489
2518
 
@@ -2508,11 +2537,13 @@ fig-slider {
2508
2537
  &[variant="neue"] {
2509
2538
  --slider-height: 0.375rem;
2510
2539
  --slider-thumb-size: 0.75rem;
2511
- --slider-tick-size: calc(var(--slider-height) / 2);
2540
+ --slider-tick-width: calc(var(--slider-height) / 2);
2541
+ --slider-tick-height: calc(var(--slider-height) / 2);
2512
2542
  --handle-transition: none;
2513
2543
  --slider-transition: none;
2514
2544
  --slider-handle-shadow:
2515
- inset 0 0 0 calc(6px + 0.5rem * var(--unchanged)) var(--handle-color),
2545
+ inset 0 0 0 calc(6px + 0.5rem * var(--unchanged))
2546
+ var(--slider-thumb-color),
2516
2547
  0 0 0 0.75px rgba(0, 0, 0, 0.075), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
2517
2548
  var(--figma-elevation-100);
2518
2549
 
@@ -3177,6 +3208,11 @@ fig-field,
3177
3208
  flex: 1 1 auto;
3178
3209
  }
3179
3210
 
3211
+ &:not(:has(> label)) > [full]:not([full="false"]) {
3212
+ width: 100%;
3213
+ align-self: stretch;
3214
+ }
3215
+
3180
3216
  & > label {
3181
3217
  flex: 0;
3182
3218
  padding: var(--spacer-1) 0;
@@ -3216,6 +3252,10 @@ fig-field,
3216
3252
  & > label ~ * {
3217
3253
  grid-column: 2 / span 2;
3218
3254
  }
3255
+
3256
+ &:not(:has(> label)) > * {
3257
+ grid-column: 1 / -1;
3258
+ }
3219
3259
  }
3220
3260
  &[columns="half"] {
3221
3261
  display: grid;
@@ -3229,6 +3269,173 @@ fig-field,
3229
3269
  & > label ~ * {
3230
3270
  grid-column: 2 / span 2;
3231
3271
  }
3272
+
3273
+ &:not(:has(> label)) > * {
3274
+ grid-column: 1 / -1;
3275
+ }
3276
+ }
3277
+ }
3278
+ }
3279
+
3280
+ fig-field-slider {
3281
+ display: block;
3282
+ position: relative;
3283
+ width: 100%;
3284
+ --field-text-shadow: 0 1px 1.5px
3285
+ light-dark(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2));
3286
+
3287
+ label {
3288
+ pointer-events: none;
3289
+ z-index: 1;
3290
+ }
3291
+
3292
+ &[disabled]:not([disabled="false"]) {
3293
+ label,
3294
+ input {
3295
+ color: var(--figma-color-text-disabled);
3296
+ }
3297
+ fig-slider {
3298
+ filter: grayscale(100%) opacity(0.5);
3299
+ }
3300
+ }
3301
+ &[type="hue"] {
3302
+ label,
3303
+ input {
3304
+ text-shadow: var(--field-text-shadow);
3305
+ color: white;
3306
+ }
3307
+ }
3308
+
3309
+ fig-field {
3310
+ position: relative;
3311
+ padding-left: var(--spacer-2-5);
3312
+
3313
+ &[direction="horizontal"] > label {
3314
+ min-width: 0;
3315
+ max-width: none;
3316
+ width: 100%;
3317
+ flex: 1 1 auto;
3318
+ }
3319
+
3320
+ fig-slider {
3321
+ position: absolute;
3322
+ inset: 0;
3323
+ --slider-height: 2rem;
3324
+ --slider-field-height: 2rem;
3325
+ --slider-thumb-width: var(--spacer-1);
3326
+ --slider-thumb-color: light-dark(
3327
+ var(--figma-color-text-secondary),
3328
+ var(--figma-color-text)
3329
+ );
3330
+ --slider-thumb-height: calc(
3331
+ var(--spacer-2) + (var(--spacer-3) - var(--spacer-2)) *
3332
+ min(var(--slider-complete), calc(1 - var(--slider-complete))) * 2
3333
+ );
3334
+ --slider-border-radius: var(--radius-medium);
3335
+ --slider-tick-width: 0.125rem;
3336
+ --slider-tick-height: var(--spacer-2);
3337
+ --slider-tick-radius: var(--radius-medium);
3338
+ --slider-stepper-padding: 0;
3339
+ --slider-handle-shadow: inset 0 0 0 var(--slider-thumb-height)
3340
+ var(--slider-thumb-color) !important;
3341
+ --slider-thumb-opacity: calc(
3342
+ min(var(--slider-complete), calc(1 - var(--slider-complete))) * 2
3343
+ );
3344
+ --slider-tick-opacity: 1;
3345
+
3346
+ &:has(input[type="range"]:focus-within) {
3347
+ --slider-thumb-outline: 1.5px solid var(--figma-color-border-selected) !important;
3348
+ --slider-thumb-outline-offset: 2px !important;
3349
+ }
3350
+
3351
+ .fig-slider-input-container {
3352
+ box-shadow: none !important;
3353
+ &:hover,
3354
+ &:focus-within {
3355
+ &::after {
3356
+ content: "";
3357
+ position: absolute;
3358
+ inset: 0;
3359
+ pointer-events: none;
3360
+ border-radius: var(--slider-border-radius);
3361
+ box-shadow: inset 0 0 0 1px var(--figma-color-border) !important;
3362
+ }
3363
+ }
3364
+ &::before {
3365
+ background: var(--figma-color-bg-tertiary) !important;
3366
+ min-width: 0 !important;
3367
+ box-shadow: none !important;
3368
+ }
3369
+ input[type="range"] {
3370
+ border-radius: 0 !important;
3371
+ }
3372
+ }
3373
+
3374
+ &:not([type="delta"]) .fig-slider-input-container::before {
3375
+ width: var(--slider-percent) !important;
3376
+ }
3377
+
3378
+ &[type="delta"] .fig-slider-input-container::before {
3379
+ --left-start: calc(
3380
+ var(--start-percent) - var(--slider-thumb-width) / 2
3381
+ ) !important;
3382
+ left: min(
3383
+ var(--left-start),
3384
+ calc(
3385
+ var(--slider-percent) - var(--slider-complete) *
3386
+ var(--slider-thumb-width)
3387
+ )
3388
+ ) !important;
3389
+ --width: calc(var(--slider-percent) - var(--start-percent)) !important;
3390
+ --abs-width: max(
3391
+ calc(
3392
+ var(--width) + var(--slider-thumb-width) / 2 +
3393
+ (1 - var(--slider-complete)) * var(--slider-thumb-width)
3394
+ ),
3395
+ calc(
3396
+ -1 * var(--width) + var(--slider-thumb-width) / 2 +
3397
+ var(--slider-complete) * var(--slider-thumb-width)
3398
+ )
3399
+ ) !important;
3400
+ width: var(--abs-width) !important;
3401
+ }
3402
+ }
3403
+ datalist {
3404
+ mask-image: linear-gradient(
3405
+ to right,
3406
+ transparent 0,
3407
+ transparent var(--spacer-4),
3408
+ white,
3409
+ transparent calc(100% - var(--spacer-4)),
3410
+ transparent 100%
3411
+ );
3412
+ }
3413
+ fig-input-number {
3414
+ background-color: transparent;
3415
+ box-shadow: none !important;
3416
+ position: absolute;
3417
+ right: var(--spacer-1);
3418
+ width: fit-content;
3419
+ min-width: fit-content;
3420
+ max-width: max-content;
3421
+ flex: 0 0 auto;
3422
+ border-radius: var(--radius-small);
3423
+
3424
+ &:hover,
3425
+ &:has(input:focus) {
3426
+ box-shadow: none !important;
3427
+ }
3428
+ &:has(input:focus) {
3429
+ box-shadow: inset 0 0 0 1px var(--figma-color-border-selected) !important;
3430
+ }
3431
+ input {
3432
+ field-sizing: content;
3433
+ border-radius: var(--radius-small);
3434
+ width: auto;
3435
+ flex: 0 0 auto;
3436
+ text-align: right;
3437
+ color: var(--field-text-color);
3438
+ }
3232
3439
  }
3233
3440
  }
3234
3441
  }
@@ -3463,11 +3670,11 @@ fig-joystick {
3463
3670
  .fig-input-joystick-handle {
3464
3671
  position: absolute;
3465
3672
  z-index: 2;
3466
- width: 1rem;
3467
- height: 1rem;
3673
+ width: 0.75rem;
3674
+ height: 0.75rem;
3468
3675
  background: var(--figma-color-bg-brand);
3469
3676
  box-shadow:
3470
- inset 0 0 0 0.125rem var(--handle-color),
3677
+ inset 0 0 0 0.09375rem var(--handle-color),
3471
3678
  0px 0 0 0.5px rgba(0, 0, 0, 0.1),
3472
3679
  var(--elevation-100-canvas);
3473
3680
  border-radius: 50%;