@rogieking/figui3 3.4.3 → 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 +237 -32
  2. package/dist/fig.js +29 -29
  3. package/fig.js +399 -81
  4. package/package.json +1 -1
package/components.css CHANGED
@@ -1229,7 +1229,9 @@ fig-chit {
1229
1229
 
1230
1230
  /* Large gradient/image: also fill the area */
1231
1231
  &[data-type="gradient"]::after,
1232
- &[data-type="image"]::after {
1232
+ &[data-type="image"]::after,
1233
+ &[data-type="gradient"]::before,
1234
+ &[data-type="image"]::before {
1233
1235
  width: var(--size);
1234
1236
  height: var(--size);
1235
1237
  border-radius: var(--radius-medium);
@@ -1241,6 +1243,20 @@ fig-chit {
1241
1243
  opacity: 0.5;
1242
1244
  }
1243
1245
 
1246
+ &::before {
1247
+ content: "";
1248
+ width: 0.875rem;
1249
+ height: 0.875rem;
1250
+ border-radius: 0.125rem;
1251
+ grid-area: 1/1;
1252
+ place-self: center;
1253
+ }
1254
+ &[size="large"]::before {
1255
+ width: var(--size);
1256
+ height: var(--size);
1257
+ border-radius: var(--radius-medium);
1258
+ }
1259
+
1244
1260
  /* Gradient/Image types - inset thumbnail with hidden input */
1245
1261
  &[data-type="gradient"],
1246
1262
  &[data-type="image"] {
@@ -1250,6 +1266,7 @@ fig-chit {
1250
1266
  content: "";
1251
1267
  width: 0.875rem;
1252
1268
  height: 0.875rem;
1269
+
1253
1270
  background: var(--chit-background);
1254
1271
  background-size: var(--chit-bg-size);
1255
1272
  background-position: var(--chit-bg-position);
@@ -1288,9 +1305,10 @@ fig-chit {
1288
1305
  }
1289
1306
 
1290
1307
  /* Checkerboard for empty/missing images */
1291
- &[data-type="image"]:not([background])::after,
1292
- &[data-type="image"][background=""]::after,
1293
- &[data-type="image"][background="url()"]::after {
1308
+ &[data-type="image"]:not([background])::before,
1309
+ &[data-type="image"][background=""]::before,
1310
+ &[data-type="image"][background="url()"]::before,
1311
+ &[checkerboard]:not([checkerboard="false"])::before {
1294
1312
  background: var(--checkerboard);
1295
1313
  }
1296
1314
  }
@@ -2176,15 +2194,28 @@ fig-slider {
2176
2194
  --slider-field-height: 1.5rem;
2177
2195
  --slider-height: 1rem;
2178
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
+ );
2179
2208
  --slider-percent: calc(var(--slider-complete) * 100%);
2180
2209
  --start-percent: calc(var(--default, 0) * 100%);
2181
- --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);
2182
2212
  --slider-handle-shadow:
2183
- 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),
2184
2214
  0px 0 0 0.5px rgba(0, 0, 0, 0.1), var(--figma-elevation-100);
2185
2215
  --slider-handle-shadow-focus:
2186
- inset 0 0 0 4px var(--handle-color), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
2187
- 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);
2188
2219
  --slider-transition: none;
2189
2220
  --handle-transition: var(--slider-transition);
2190
2221
 
@@ -2201,7 +2232,7 @@ fig-slider {
2201
2232
  width: 100%;
2202
2233
  transition: var(--slider-transition);
2203
2234
  background: var(--figma-color-bg-secondary);
2204
- border-radius: 0.5rem;
2235
+ border-radius: var(--slider-border-radius);
2205
2236
  box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
2206
2237
 
2207
2238
  /* Track */
@@ -2213,7 +2244,7 @@ fig-slider {
2213
2244
  top: 0;
2214
2245
  pointer-events: none;
2215
2246
  bottom: 0;
2216
- border-radius: 0.5rem;
2247
+ border-radius: var(--slider-border-radius);
2217
2248
  min-width: var(--slider-height);
2218
2249
  box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
2219
2250
  width: calc(
@@ -2235,8 +2266,8 @@ fig-slider {
2235
2266
  datalist option {
2236
2267
  position: absolute;
2237
2268
  margin: 0;
2238
- left: calc(var(--start-percent) - var(--slider-tick-size) / 2);
2239
- 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);
2240
2271
  }
2241
2272
  .fig-slider-input-container {
2242
2273
  &::before {
@@ -2275,7 +2306,7 @@ fig-slider {
2275
2306
  height: var(--slider-height);
2276
2307
  appearance: none;
2277
2308
  -webkit-appearance: none;
2278
- border-radius: calc(var(--slider-height) / 2);
2309
+ border-radius: var(--slider-border-radius);
2279
2310
  display: block;
2280
2311
  width: 100%;
2281
2312
  background-color: transparent;
@@ -2297,16 +2328,19 @@ fig-slider {
2297
2328
  -webkit-appearance: none;
2298
2329
  color-scheme: inherit;
2299
2330
  transition: var(--handle-transition);
2300
- border-radius: 100%;
2301
- height: var(--slider-thumb-size);
2302
- width: var(--slider-thumb-size);
2303
- 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
+ );
2304
2337
  aspect-ratio: 1;
2305
2338
  border: none;
2306
2339
  position: relative;
2307
2340
  z-index: 1;
2308
2341
  cursor: default;
2309
2342
  box-shadow: var(--slider-handle-shadow);
2343
+ opacity: var(--slider-thumb-opacity);
2310
2344
  }
2311
2345
 
2312
2346
  &:disabled {
@@ -2332,7 +2366,7 @@ fig-slider {
2332
2366
  height: var(--slider-height);
2333
2367
  background-color: transparent;
2334
2368
  transition: var(--slider-transition);
2335
- border-radius: calc(var(--slider-height) / 2);
2369
+ border-radius: var(--slider-border-radius);
2336
2370
  }
2337
2371
 
2338
2372
  &.hue::-webkit-slider-runnable-track {
@@ -2351,7 +2385,7 @@ fig-slider {
2351
2385
  height: var(--slider-height);
2352
2386
  appearance: none;
2353
2387
  -moz-appearance: none;
2354
- border-radius: calc(var(--slider-height) / 2);
2388
+ border-radius: var(--slider-border-radius);
2355
2389
  display: block;
2356
2390
  width: 100%;
2357
2391
  background-color: transparent;
@@ -2372,9 +2406,9 @@ fig-slider {
2372
2406
  appearance: none;
2373
2407
  -moz-appearance: none;
2374
2408
  background: transparent;
2375
- border-radius: 100%;
2376
- height: var(--slider-thumb-size);
2377
- width: var(--slider-thumb-size);
2409
+ border-radius: var(--slider-thumb-radius);
2410
+ height: var(--slider-thumb-height);
2411
+ width: var(--slider-thumb-width);
2378
2412
  aspect-ratio: 1;
2379
2413
  border: none;
2380
2414
  position: relative;
@@ -2382,6 +2416,7 @@ fig-slider {
2382
2416
  cursor: default;
2383
2417
  box-shadow: var(--slider-handle-shadow);
2384
2418
  transition: var(--handle-transition);
2419
+ opacity: var(--slider-thumb-opacity);
2385
2420
  }
2386
2421
 
2387
2422
  &:disabled {
@@ -2405,7 +2440,7 @@ fig-slider {
2405
2440
  &::-moz-range-track {
2406
2441
  height: var(--slider-height);
2407
2442
  background-color: transparent;
2408
- border-radius: calc(var(--slider-height) / 2);
2443
+ border-radius: var(--slider-border-radius);
2409
2444
  transition: var(--slider-transition);
2410
2445
  }
2411
2446
 
@@ -2431,7 +2466,7 @@ fig-slider {
2431
2466
  margin: 0;
2432
2467
  border: 0;
2433
2468
  appearance: none;
2434
- padding: 0 calc((var(--slider-height) / 2) - var(--slider-tick-size) / 2);
2469
+ padding: 0 var(--slider-stepper-padding);
2435
2470
  height: var(--slider-height);
2436
2471
  pointer-events: none;
2437
2472
  justify-content: space-between;
@@ -2439,14 +2474,14 @@ fig-slider {
2439
2474
 
2440
2475
  & option {
2441
2476
  appearance: none;
2442
- width: var(--slider-tick-size);
2443
- height: var(--slider-tick-size);
2444
- aspect-ratio: 1;
2477
+ width: var(--slider-tick-width);
2478
+ height: var(--slider-tick-height);
2445
2479
  padding: 0;
2446
2480
  border: 0;
2447
- border-radius: 100%;
2481
+ border-radius: var(--slider-tick-radius);
2448
2482
  font-size: 0;
2449
2483
  background: var(--figma-color-icon-tertiary);
2484
+ opacity: var(--slider-tick-opacity);
2450
2485
  display: block;
2451
2486
  &[default] {
2452
2487
  background: var(--figma-color-icon);
@@ -2461,11 +2496,13 @@ fig-slider {
2461
2496
  &[variant="minimal"] {
2462
2497
  --slider-height: 0.375rem;
2463
2498
  --slider-thumb-size: 0.75rem;
2464
- --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);
2465
2501
  --handle-transition: none;
2466
2502
  --slider-transition: none;
2467
2503
  --slider-handle-shadow:
2468
- 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),
2469
2506
  0 0 0 0.75px rgba(0, 0, 0, 0.075), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
2470
2507
  var(--figma-elevation-100);
2471
2508
 
@@ -2490,11 +2527,13 @@ fig-slider {
2490
2527
  &[variant="neue"] {
2491
2528
  --slider-height: 0.375rem;
2492
2529
  --slider-thumb-size: 0.75rem;
2493
- --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);
2494
2532
  --handle-transition: none;
2495
2533
  --slider-transition: none;
2496
2534
  --slider-handle-shadow:
2497
- 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),
2498
2537
  0 0 0 0.75px rgba(0, 0, 0, 0.075), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
2499
2538
  var(--figma-elevation-100);
2500
2539
 
@@ -3159,6 +3198,11 @@ fig-field,
3159
3198
  flex: 1 1 auto;
3160
3199
  }
3161
3200
 
3201
+ &:not(:has(> label)) > [full]:not([full="false"]) {
3202
+ width: 100%;
3203
+ align-self: stretch;
3204
+ }
3205
+
3162
3206
  & > label {
3163
3207
  flex: 0;
3164
3208
  padding: var(--spacer-1) 0;
@@ -3198,6 +3242,10 @@ fig-field,
3198
3242
  & > label ~ * {
3199
3243
  grid-column: 2 / span 2;
3200
3244
  }
3245
+
3246
+ &:not(:has(> label)) > * {
3247
+ grid-column: 1 / -1;
3248
+ }
3201
3249
  }
3202
3250
  &[columns="half"] {
3203
3251
  display: grid;
@@ -3211,6 +3259,163 @@ fig-field,
3211
3259
  & > label ~ * {
3212
3260
  grid-column: 2 / span 2;
3213
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
+ }
3214
3419
  }
3215
3420
  }
3216
3421
  }