@rogieking/figui3 3.5.0 → 3.6.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 +215 -28
  2. package/dist/fig.js +29 -29
  3. package/fig.js +239 -5
  4. package/package.json +1 -1
package/components.css CHANGED
@@ -2194,15 +2194,28 @@ fig-slider {
2194
2194
  --slider-field-height: 1.5rem;
2195
2195
  --slider-height: 1rem;
2196
2196
  --slider-thumb-size: var(--slider-height);
2197
+ --slider-thumb-width: var(--slider-thumb-size);
2198
+ --slider-thumb-height: var(--slider-thumb-size);
2199
+ --slider-thumb-color: var(--handle-color);
2200
+ --slider-thumb-radius: calc(var(--slider-thumb-width) / 2);
2201
+ --slider-thumb-opacity: 1;
2202
+ --slider-tick-opacity: 1;
2203
+ --slider-tick-radius: 100%;
2204
+ --slider-border-radius: calc(var(--slider-height) / 2);
2205
+ --slider-stepper-padding: calc(
2206
+ (var(--slider-height) / 2) - var(--slider-tick-width) / 2
2207
+ );
2197
2208
  --slider-percent: calc(var(--slider-complete) * 100%);
2198
2209
  --start-percent: calc(var(--default, 0) * 100%);
2199
- --slider-tick-size: calc(var(--slider-height) / 4);
2210
+ --slider-tick-width: calc(var(--slider-height) / 4);
2211
+ --slider-tick-height: calc(var(--slider-height) / 4);
2200
2212
  --slider-handle-shadow:
2201
- inset 0 0 0 calc(4px + 0.5rem * var(--unchanged)) var(--handle-color),
2213
+ inset 0 0 0 calc(4px + 0.5rem * var(--unchanged)) var(--slider-thumb-color),
2202
2214
  0px 0 0 0.5px rgba(0, 0, 0, 0.1), var(--figma-elevation-100);
2203
2215
  --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);
2216
+ inset 0 0 0 4px var(--slider-thumb-color),
2217
+ inset 0 0 0 5px rgba(0, 0, 0, 0.1), var(--handle-shadow),
2218
+ 0 0 0 1px var(--figma-color-border-selected);
2206
2219
  --slider-transition: none;
2207
2220
  --handle-transition: var(--slider-transition);
2208
2221
 
@@ -2219,7 +2232,7 @@ fig-slider {
2219
2232
  width: 100%;
2220
2233
  transition: var(--slider-transition);
2221
2234
  background: var(--figma-color-bg-secondary);
2222
- border-radius: 0.5rem;
2235
+ border-radius: var(--slider-border-radius);
2223
2236
  box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
2224
2237
 
2225
2238
  /* Track */
@@ -2231,7 +2244,7 @@ fig-slider {
2231
2244
  top: 0;
2232
2245
  pointer-events: none;
2233
2246
  bottom: 0;
2234
- border-radius: 0.5rem;
2247
+ border-radius: var(--slider-border-radius);
2235
2248
  min-width: var(--slider-height);
2236
2249
  box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
2237
2250
  width: calc(
@@ -2253,8 +2266,8 @@ fig-slider {
2253
2266
  datalist option {
2254
2267
  position: absolute;
2255
2268
  margin: 0;
2256
- left: calc(var(--start-percent) - var(--slider-tick-size) / 2);
2257
- top: calc(50% - var(--slider-tick-size) / 2);
2269
+ left: calc(var(--start-percent) - var(--slider-tick-width) / 2);
2270
+ top: calc(50% - var(--slider-tick-height) / 2);
2258
2271
  }
2259
2272
  .fig-slider-input-container {
2260
2273
  &::before {
@@ -2293,7 +2306,7 @@ fig-slider {
2293
2306
  height: var(--slider-height);
2294
2307
  appearance: none;
2295
2308
  -webkit-appearance: none;
2296
- border-radius: calc(var(--slider-height) / 2);
2309
+ border-radius: var(--slider-border-radius);
2297
2310
  display: block;
2298
2311
  width: 100%;
2299
2312
  background-color: transparent;
@@ -2315,16 +2328,19 @@ fig-slider {
2315
2328
  -webkit-appearance: none;
2316
2329
  color-scheme: inherit;
2317
2330
  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);
2331
+ border-radius: var(--slider-thumb-radius);
2332
+ height: var(--slider-thumb-height);
2333
+ width: var(--slider-thumb-width);
2334
+ margin-top: calc(
2335
+ var(--slider-height) / 2 - var(--slider-thumb-height) / 2
2336
+ );
2322
2337
  aspect-ratio: 1;
2323
2338
  border: none;
2324
2339
  position: relative;
2325
2340
  z-index: 1;
2326
2341
  cursor: default;
2327
2342
  box-shadow: var(--slider-handle-shadow);
2343
+ opacity: var(--slider-thumb-opacity);
2328
2344
  }
2329
2345
 
2330
2346
  &:disabled {
@@ -2350,7 +2366,7 @@ fig-slider {
2350
2366
  height: var(--slider-height);
2351
2367
  background-color: transparent;
2352
2368
  transition: var(--slider-transition);
2353
- border-radius: calc(var(--slider-height) / 2);
2369
+ border-radius: var(--slider-border-radius);
2354
2370
  }
2355
2371
 
2356
2372
  &.hue::-webkit-slider-runnable-track {
@@ -2369,7 +2385,7 @@ fig-slider {
2369
2385
  height: var(--slider-height);
2370
2386
  appearance: none;
2371
2387
  -moz-appearance: none;
2372
- border-radius: calc(var(--slider-height) / 2);
2388
+ border-radius: var(--slider-border-radius);
2373
2389
  display: block;
2374
2390
  width: 100%;
2375
2391
  background-color: transparent;
@@ -2390,9 +2406,9 @@ fig-slider {
2390
2406
  appearance: none;
2391
2407
  -moz-appearance: none;
2392
2408
  background: transparent;
2393
- border-radius: 100%;
2394
- height: var(--slider-thumb-size);
2395
- width: var(--slider-thumb-size);
2409
+ border-radius: var(--slider-thumb-radius);
2410
+ height: var(--slider-thumb-height);
2411
+ width: var(--slider-thumb-width);
2396
2412
  aspect-ratio: 1;
2397
2413
  border: none;
2398
2414
  position: relative;
@@ -2400,6 +2416,7 @@ fig-slider {
2400
2416
  cursor: default;
2401
2417
  box-shadow: var(--slider-handle-shadow);
2402
2418
  transition: var(--handle-transition);
2419
+ opacity: var(--slider-thumb-opacity);
2403
2420
  }
2404
2421
 
2405
2422
  &:disabled {
@@ -2423,7 +2440,7 @@ fig-slider {
2423
2440
  &::-moz-range-track {
2424
2441
  height: var(--slider-height);
2425
2442
  background-color: transparent;
2426
- border-radius: calc(var(--slider-height) / 2);
2443
+ border-radius: var(--slider-border-radius);
2427
2444
  transition: var(--slider-transition);
2428
2445
  }
2429
2446
 
@@ -2449,7 +2466,7 @@ fig-slider {
2449
2466
  margin: 0;
2450
2467
  border: 0;
2451
2468
  appearance: none;
2452
- padding: 0 calc((var(--slider-height) / 2) - var(--slider-tick-size) / 2);
2469
+ padding: 0 var(--slider-stepper-padding);
2453
2470
  height: var(--slider-height);
2454
2471
  pointer-events: none;
2455
2472
  justify-content: space-between;
@@ -2457,14 +2474,14 @@ fig-slider {
2457
2474
 
2458
2475
  & option {
2459
2476
  appearance: none;
2460
- width: var(--slider-tick-size);
2461
- height: var(--slider-tick-size);
2462
- aspect-ratio: 1;
2477
+ width: var(--slider-tick-width);
2478
+ height: var(--slider-tick-height);
2463
2479
  padding: 0;
2464
2480
  border: 0;
2465
- border-radius: 100%;
2481
+ border-radius: var(--slider-tick-radius);
2466
2482
  font-size: 0;
2467
2483
  background: var(--figma-color-icon-tertiary);
2484
+ opacity: var(--slider-tick-opacity);
2468
2485
  display: block;
2469
2486
  &[default] {
2470
2487
  background: var(--figma-color-icon);
@@ -2479,11 +2496,13 @@ fig-slider {
2479
2496
  &[variant="minimal"] {
2480
2497
  --slider-height: 0.375rem;
2481
2498
  --slider-thumb-size: 0.75rem;
2482
- --slider-tick-size: calc(var(--slider-height) / 2);
2499
+ --slider-tick-width: calc(var(--slider-height) / 2);
2500
+ --slider-tick-height: calc(var(--slider-height) / 2);
2483
2501
  --handle-transition: none;
2484
2502
  --slider-transition: none;
2485
2503
  --slider-handle-shadow:
2486
- inset 0 0 0 calc(6px + 0.5rem * var(--unchanged)) var(--handle-color),
2504
+ inset 0 0 0 calc(6px + 0.5rem * var(--unchanged))
2505
+ var(--slider-thumb-color),
2487
2506
  0 0 0 0.75px rgba(0, 0, 0, 0.075), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
2488
2507
  var(--figma-elevation-100);
2489
2508
 
@@ -2508,11 +2527,13 @@ fig-slider {
2508
2527
  &[variant="neue"] {
2509
2528
  --slider-height: 0.375rem;
2510
2529
  --slider-thumb-size: 0.75rem;
2511
- --slider-tick-size: calc(var(--slider-height) / 2);
2530
+ --slider-tick-width: calc(var(--slider-height) / 2);
2531
+ --slider-tick-height: calc(var(--slider-height) / 2);
2512
2532
  --handle-transition: none;
2513
2533
  --slider-transition: none;
2514
2534
  --slider-handle-shadow:
2515
- inset 0 0 0 calc(6px + 0.5rem * var(--unchanged)) var(--handle-color),
2535
+ inset 0 0 0 calc(6px + 0.5rem * var(--unchanged))
2536
+ var(--slider-thumb-color),
2516
2537
  0 0 0 0.75px rgba(0, 0, 0, 0.075), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
2517
2538
  var(--figma-elevation-100);
2518
2539
 
@@ -3177,6 +3198,11 @@ fig-field,
3177
3198
  flex: 1 1 auto;
3178
3199
  }
3179
3200
 
3201
+ &:not(:has(> label)) > [full]:not([full="false"]) {
3202
+ width: 100%;
3203
+ align-self: stretch;
3204
+ }
3205
+
3180
3206
  & > label {
3181
3207
  flex: 0;
3182
3208
  padding: var(--spacer-1) 0;
@@ -3216,6 +3242,10 @@ fig-field,
3216
3242
  & > label ~ * {
3217
3243
  grid-column: 2 / span 2;
3218
3244
  }
3245
+
3246
+ &:not(:has(> label)) > * {
3247
+ grid-column: 1 / -1;
3248
+ }
3219
3249
  }
3220
3250
  &[columns="half"] {
3221
3251
  display: grid;
@@ -3229,6 +3259,163 @@ fig-field,
3229
3259
  & > label ~ * {
3230
3260
  grid-column: 2 / span 2;
3231
3261
  }
3262
+
3263
+ &:not(:has(> label)) > * {
3264
+ grid-column: 1 / -1;
3265
+ }
3266
+ }
3267
+ }
3268
+ }
3269
+
3270
+ fig-field-slider {
3271
+ display: block;
3272
+ position: relative;
3273
+ width: 100%;
3274
+ --field-text-shadow: 0 1px 1.5px
3275
+ light-dark(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2));
3276
+
3277
+ label {
3278
+ pointer-events: none;
3279
+ z-index: 1;
3280
+ }
3281
+
3282
+ &[disabled]:not([disabled="false"]) {
3283
+ label,
3284
+ input {
3285
+ color: var(--figma-color-text-disabled);
3286
+ }
3287
+ fig-slider {
3288
+ filter: grayscale(100%) opacity(0.5);
3289
+ }
3290
+ }
3291
+ &[type="hue"] {
3292
+ label,
3293
+ input {
3294
+ text-shadow: var(--field-text-shadow);
3295
+ color: white;
3296
+ }
3297
+ }
3298
+
3299
+ fig-field {
3300
+ position: relative;
3301
+ padding-left: var(--spacer-2-5);
3302
+
3303
+ &[direction="horizontal"] > label {
3304
+ min-width: 0;
3305
+ max-width: none;
3306
+ width: 100%;
3307
+ flex: 1 1 auto;
3308
+ }
3309
+
3310
+ fig-slider {
3311
+ position: absolute;
3312
+ inset: 0;
3313
+ --slider-height: 2rem;
3314
+ --slider-field-height: 2rem;
3315
+ --slider-thumb-width: var(--spacer-1);
3316
+ --slider-thumb-color: light-dark(
3317
+ var(--figma-color-text-secondary),
3318
+ var(--figma-color-text)
3319
+ );
3320
+ --slider-thumb-height: calc(
3321
+ var(--spacer-2) + (var(--spacer-3) - var(--spacer-2)) *
3322
+ min(var(--slider-complete), calc(1 - var(--slider-complete))) * 2
3323
+ );
3324
+ --slider-border-radius: var(--radius-medium);
3325
+ --slider-tick-width: 0.125rem;
3326
+ --slider-tick-height: var(--spacer-2);
3327
+ --slider-tick-radius: var(--radius-medium);
3328
+ --slider-stepper-padding: 0;
3329
+ --slider-thumb-opacity: calc(
3330
+ min(var(--slider-complete), calc(1 - var(--slider-complete))) * 2
3331
+ );
3332
+ --slider-tick-opacity: 1;
3333
+ .fig-slider-input-container {
3334
+ box-shadow: none !important;
3335
+ &:hover,
3336
+ &:focus-within {
3337
+ &::after {
3338
+ content: "";
3339
+ position: absolute;
3340
+ inset: 0;
3341
+ pointer-events: none;
3342
+ border-radius: var(--slider-border-radius);
3343
+ box-shadow: inset 0 0 0 1px var(--figma-color-border) !important;
3344
+ }
3345
+ }
3346
+ &::before {
3347
+ background: var(--figma-color-bg-tertiary) !important;
3348
+ min-width: 0 !important;
3349
+ box-shadow: none !important;
3350
+ }
3351
+ input[type="range"] {
3352
+ border-radius: 0 !important;
3353
+ }
3354
+ }
3355
+
3356
+ &:not([type="delta"]) .fig-slider-input-container::before {
3357
+ width: var(--slider-percent) !important;
3358
+ }
3359
+
3360
+ &[type="delta"] .fig-slider-input-container::before {
3361
+ --left-start: calc(
3362
+ var(--start-percent) - var(--slider-thumb-width) / 2
3363
+ ) !important;
3364
+ left: min(
3365
+ var(--left-start),
3366
+ calc(
3367
+ var(--slider-percent) - var(--slider-complete) *
3368
+ var(--slider-thumb-width)
3369
+ )
3370
+ ) !important;
3371
+ --width: calc(var(--slider-percent) - var(--start-percent)) !important;
3372
+ --abs-width: max(
3373
+ calc(
3374
+ var(--width) + var(--slider-thumb-width) / 2 +
3375
+ (1 - var(--slider-complete)) * var(--slider-thumb-width)
3376
+ ),
3377
+ calc(
3378
+ -1 * var(--width) + var(--slider-thumb-width) / 2 +
3379
+ var(--slider-complete) * var(--slider-thumb-width)
3380
+ )
3381
+ ) !important;
3382
+ width: var(--abs-width) !important;
3383
+ }
3384
+ }
3385
+ datalist {
3386
+ mask-image: linear-gradient(
3387
+ to right,
3388
+ transparent 0,
3389
+ transparent var(--spacer-4),
3390
+ white,
3391
+ transparent calc(100% - var(--spacer-4)),
3392
+ transparent 100%
3393
+ );
3394
+ }
3395
+ fig-input-number {
3396
+ background-color: transparent;
3397
+ box-shadow: none !important;
3398
+ position: absolute;
3399
+ right: var(--spacer-1);
3400
+ width: fit-content;
3401
+ min-width: fit-content;
3402
+ max-width: max-content;
3403
+ flex: 0 0 auto;
3404
+
3405
+ &:hover,
3406
+ &:has(input:focus) {
3407
+ box-shadow: none !important;
3408
+ }
3409
+ &:has(input:focus) {
3410
+ box-shadow: inset 0 0 0 1px var(--figma-color-border-selected) !important;
3411
+ }
3412
+ input {
3413
+ field-sizing: content;
3414
+ width: auto;
3415
+ flex: 0 0 auto;
3416
+ text-align: right;
3417
+ color: var(--field-text-color);
3418
+ }
3232
3419
  }
3233
3420
  }
3234
3421
  }