@rogieking/figui3 8.9.48 → 8.10.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/fig-lab.css CHANGED
@@ -217,6 +217,48 @@ fig-chat-message {
217
217
  }
218
218
  }
219
219
 
220
+ :is(
221
+ propskit-switch,
222
+ propskit-color,
223
+ propskit-fill,
224
+ propskit-gradient,
225
+ propskit-palette,
226
+ propskit-select,
227
+ propskit-easing,
228
+ propskit-text,
229
+ propskit-number,
230
+ propskit-origin,
231
+ propskit-position,
232
+ propskit-joystick,
233
+ propskit-spring,
234
+ propskit-color-point,
235
+ propskit-point-radius,
236
+ propskit-point-radius-angle,
237
+ propskit-point-point,
238
+ propskit-group,
239
+ propskit-slider,
240
+ propskit-wheel,
241
+ propskit-oscillator
242
+ ) {
243
+ --figma-focus-outline-radius: var(--radius-medium-large);
244
+ user-select: none;
245
+
246
+ :is(
247
+ input:not([type]),
248
+ input[type="text"],
249
+ input[type="number"],
250
+ input[type="email"],
251
+ input[type="password"],
252
+ input[type="search"],
253
+ input[type="tel"],
254
+ input[type="url"],
255
+ textarea,
256
+ [contenteditable="true"]
257
+ ) {
258
+ user-select: text;
259
+ }
260
+ }
261
+
220
262
  propskit-group {
221
263
  display: block;
222
264
  width: 100%;
@@ -249,7 +291,6 @@ propskit-group {
249
291
 
250
292
  & > fig-header {
251
293
  cursor: default;
252
- padding-left: var(--spacer-3);
253
294
  gap: 0;
254
295
 
255
296
  &:focus-visible {
@@ -363,9 +404,13 @@ fig-content:has(> propskit-group[name]:last-child) {
363
404
  propskit-fill,
364
405
  propskit-gradient,
365
406
  propskit-select,
407
+ propskit-easing,
366
408
  propskit-text,
367
409
  propskit-number,
410
+ propskit-origin,
368
411
  propskit-position,
412
+ propskit-joystick,
413
+ propskit-spring,
369
414
  propskit-color-point,
370
415
  propskit-point-radius,
371
416
  propskit-point-radius-angle,
@@ -380,58 +425,70 @@ fig-content:has(> propskit-group[name]:last-child) {
380
425
  box-shadow: none;
381
426
  }
382
427
 
383
- /* Large is the default size: use wider field padding and nudge trailing
384
- controls in from the right. propskit-select uses shared label padding. */
385
- :is(
386
- propskit-switch,
387
- propskit-color,
388
- propskit-fill,
389
- propskit-gradient,
390
- propskit-text,
391
- propskit-number,
392
- propskit-slider
393
- ):not([size="small"]) {
394
- fig-field:not([direction="vertical"]) {
395
- padding-left: var(--spacer-2-5);
396
- }
397
- }
398
-
399
- /* Flex-positioned numbers — margin works. Absolute numbers use right: calc(...) below. */
400
- propskit-number {
401
- fig-field fig-input-number {
402
- margin-right: var(--spacer-1);
403
- }
404
- }
405
-
406
- propskit-text {
407
- fig-field > fig-input-text {
408
- margin-right: var(--spacer-1);
409
- }
410
- }
411
-
412
428
  propskit-switch {
413
429
  --propskit-switch-height: 2rem;
414
- --propskit-switch-vertical-padding: var(--spacer-1);
415
- --propskit-switch-horizontal-padding: var(--spacer-3);
430
+ --_propskit-padding-block: var(
431
+ --propskit-switch-padding-block,
432
+ var(--propskit-padding-block, var(--spacer-1))
433
+ );
434
+ --_propskit-padding-inline: var(
435
+ --propskit-switch-padding-inline,
436
+ var(--propskit-padding-inline, var(--spacer-3))
437
+ );
438
+ --_propskit-background: var(
439
+ --propskit-switch-background,
440
+ var(--propskit-background, var(--figma-color-bg-secondary))
441
+ );
442
+ --_propskit-border: var(
443
+ --propskit-switch-border,
444
+ var(--propskit-border, 0 solid transparent)
445
+ );
446
+ --_propskit-color: var(
447
+ --propskit-switch-color,
448
+ var(--propskit-color, var(--figma-color-text-secondary))
449
+ );
450
+ --_propskit-hover-background: var(
451
+ --propskit-switch-hover-background,
452
+ var(--propskit-hover-background, var(--_propskit-background))
453
+ );
454
+ --_propskit-hover-border: var(
455
+ --propskit-switch-hover-border,
456
+ var(
457
+ --propskit-hover-border,
458
+ 1px solid var(--figma-color-bordertranslucent)
459
+ )
460
+ );
461
+ --_propskit-hover-color: var(
462
+ --propskit-switch-hover-color,
463
+ var(--propskit-hover-color, var(--_propskit-color))
464
+ );
465
+ --_propskit-label-inline-size: var(
466
+ --propskit-switch-label-inline-size,
467
+ var(--propskit-label-inline-size, 75%)
468
+ );
469
+ --_propskit-input-inline-size: var(
470
+ --propskit-switch-input-inline-size,
471
+ var(
472
+ --propskit-input-inline-size,
473
+ var(--_propskit-switch-control-inline-size, 2rem)
474
+ )
475
+ );
416
476
 
417
477
  display: block;
478
+ box-sizing: border-box;
418
479
  width: 100%;
419
480
  height: calc(
420
- var(--propskit-switch-height) + var(--propskit-switch-vertical-padding) * 2
481
+ var(--propskit-switch-height) + var(--_propskit-padding-block) * 2
421
482
  );
422
- padding: var(--propskit-switch-vertical-padding)
423
- var(--propskit-switch-horizontal-padding);
483
+ padding-block: var(--_propskit-padding-block);
484
+ padding-inline: var(--_propskit-padding-inline);
424
485
 
425
- &:not([size="small"]) fig-field:not([direction="vertical"]) {
426
- padding-right: var(--spacer-1);
486
+ &[variant="segmented-control"] {
487
+ --_propskit-switch-control-inline-size: 4.5rem;
427
488
  }
428
489
 
429
- &[size="small"] {
430
- --propskit-switch-height: 1.5rem;
431
-
432
- fig-field:not([direction="vertical"]) {
433
- padding-right: 0;
434
- }
490
+ &:not([variant="segmented-control"]) .propskit-switch-surface {
491
+ padding-inline-end: var(--spacer-2);
435
492
  }
436
493
 
437
494
  &[disabled]:not([disabled="false"]) {
@@ -442,25 +499,33 @@ propskit-switch {
442
499
  }
443
500
  }
444
501
 
445
- fig-field:not([direction="vertical"]) {
502
+ .propskit-switch-surface {
446
503
  position: relative;
447
504
  display: flex;
448
505
  align-items: center;
449
506
  height: 100%;
450
- padding: 0 0 0 var(--spacer-2);
451
- border-radius: var(--radius-medium);
452
- background-color: var(--figma-color-bg-secondary);
507
+ padding-inline: var(--spacer-2-5) var(--spacer-1);
508
+ border-radius: var(--radius-medium-large);
509
+ background: var(--_propskit-background);
510
+ color: var(--_propskit-color);
511
+ cursor: default;
453
512
 
454
513
  &::after {
455
514
  content: "";
456
515
  position: absolute;
457
516
  inset: 0;
458
517
  border-radius: inherit;
518
+ border: var(--_propskit-border);
459
519
  pointer-events: none;
460
520
  }
461
521
 
462
- &:hover::after {
463
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
522
+ &:hover {
523
+ background: var(--_propskit-hover-background);
524
+ color: var(--_propskit-hover-color);
525
+
526
+ &::after {
527
+ border: var(--_propskit-hover-border);
528
+ }
464
529
  }
465
530
 
466
531
  & > label {
@@ -470,9 +535,9 @@ propskit-switch {
470
535
  flex: 1 1 auto;
471
536
  min-width: 0;
472
537
  margin: 0;
473
- padding: 0;
474
538
  overflow: hidden;
475
- color: var(--figma-color-text-secondary);
539
+ max-inline-size: var(--_propskit-label-inline-size);
540
+ color: inherit;
476
541
  text-overflow: ellipsis;
477
542
  white-space: nowrap;
478
543
  pointer-events: none;
@@ -482,32 +547,125 @@ propskit-switch {
482
547
  }
483
548
  }
484
549
 
485
- fig-segmented-control {
550
+ :is(fig-switch, fig-segmented-control) {
486
551
  flex: 0 0 auto;
487
- margin-left: auto;
488
- min-width: 4.5rem;
552
+ margin-inline-start: auto;
553
+ inline-size: var(--_propskit-input-inline-size);
554
+ min-inline-size: var(--_propskit-input-inline-size);
555
+ }
556
+
557
+ fig-switch {
558
+ justify-content: flex-end;
559
+ padding-block: 0;
489
560
  }
490
561
  }
491
562
  }
492
563
 
564
+ propskit-color {
565
+ --_propskit-padding-block: var(
566
+ --propskit-color-padding-block,
567
+ var(--propskit-padding-block, var(--spacer-1))
568
+ );
569
+ --_propskit-padding-inline: var(
570
+ --propskit-color-padding-inline,
571
+ var(--propskit-padding-inline, var(--spacer-3))
572
+ );
573
+ --_propskit-background: var(
574
+ --propskit-color-background,
575
+ var(--propskit-background, var(--figma-color-bg-secondary))
576
+ );
577
+ --_propskit-border: var(
578
+ --propskit-color-border,
579
+ var(--propskit-border, 0 solid transparent)
580
+ );
581
+ --_propskit-color: var(
582
+ --propskit-color-color,
583
+ var(--propskit-color, var(--figma-color-text-secondary))
584
+ );
585
+ --_propskit-hover-background: var(
586
+ --propskit-color-hover-background,
587
+ var(--propskit-hover-background, var(--_propskit-background))
588
+ );
589
+ --_propskit-hover-border: var(
590
+ --propskit-color-hover-border,
591
+ var(
592
+ --propskit-hover-border,
593
+ 1px solid var(--figma-color-bordertranslucent)
594
+ )
595
+ );
596
+ --_propskit-hover-color: var(
597
+ --propskit-color-hover-color,
598
+ var(--propskit-hover-color, var(--_propskit-color))
599
+ );
600
+ --_propskit-label-inline-size: var(
601
+ --propskit-color-label-inline-size,
602
+ var(--propskit-label-inline-size, 40%)
603
+ );
604
+ --_propskit-input-inline-size: var(
605
+ --propskit-color-input-inline-size,
606
+ var(--propskit-input-inline-size, 33%)
607
+ );
608
+ }
609
+
610
+ propskit-fill {
611
+ --_propskit-padding-block: var(
612
+ --propskit-fill-padding-block,
613
+ var(--propskit-padding-block, var(--spacer-1))
614
+ );
615
+ --_propskit-padding-inline: var(
616
+ --propskit-fill-padding-inline,
617
+ var(--propskit-padding-inline, var(--spacer-3))
618
+ );
619
+ --_propskit-background: var(
620
+ --propskit-fill-background,
621
+ var(--propskit-background, var(--figma-color-bg-secondary))
622
+ );
623
+ --_propskit-border: var(
624
+ --propskit-fill-border,
625
+ var(--propskit-border, 0 solid transparent)
626
+ );
627
+ --_propskit-color: var(
628
+ --propskit-fill-color,
629
+ var(--propskit-color, var(--figma-color-text-secondary))
630
+ );
631
+ --_propskit-hover-background: var(
632
+ --propskit-fill-hover-background,
633
+ var(--propskit-hover-background, var(--_propskit-background))
634
+ );
635
+ --_propskit-hover-border: var(
636
+ --propskit-fill-hover-border,
637
+ var(
638
+ --propskit-hover-border,
639
+ 1px solid var(--figma-color-bordertranslucent)
640
+ )
641
+ );
642
+ --_propskit-hover-color: var(
643
+ --propskit-fill-hover-color,
644
+ var(--propskit-hover-color, var(--_propskit-color))
645
+ );
646
+ --_propskit-label-inline-size: var(
647
+ --propskit-fill-label-inline-size,
648
+ var(--propskit-label-inline-size, 40%)
649
+ );
650
+ --_propskit-input-inline-size: var(
651
+ --propskit-fill-input-inline-size,
652
+ var(--propskit-input-inline-size, 33%)
653
+ );
654
+ }
655
+
493
656
  propskit-color,
494
657
  propskit-fill {
495
658
  --propskit-color-height: 2rem;
496
- --propskit-color-vertical-padding: var(--spacer-1);
497
- --propskit-color-horizontal-padding: var(--spacer-3);
498
659
  --figma-focus-outline-offset: 1px;
499
660
 
500
661
  display: block;
662
+ box-sizing: border-box;
501
663
  width: 100%;
502
664
  height: calc(
503
- var(--propskit-color-height) + var(--propskit-color-vertical-padding) * 2
665
+ var(--propskit-color-height) + var(--_propskit-padding-block) * 2
504
666
  );
505
- padding: var(--propskit-color-vertical-padding)
506
- var(--propskit-color-horizontal-padding);
507
-
508
- &[size="small"] {
509
- --propskit-color-height: 1.5rem;
510
- }
667
+ padding-block: var(--_propskit-padding-block);
668
+ padding-inline: var(--_propskit-padding-inline);
511
669
 
512
670
  &[disabled]:not([disabled="false"]) {
513
671
  pointer-events: none;
@@ -517,26 +675,33 @@ propskit-fill {
517
675
  }
518
676
  }
519
677
 
520
- fig-field:not([direction="vertical"]) {
678
+ :is(.propskit-color-surface, .propskit-fill-surface) {
521
679
  position: relative;
522
680
  display: flex;
523
681
  align-items: center;
524
682
  gap: var(--spacer-2);
525
683
  height: 100%;
526
- padding: 0 0 0 var(--spacer-2);
527
- border-radius: var(--radius-medium);
528
- background-color: var(--figma-color-bg-secondary);
684
+ padding-inline-start: var(--spacer-2-5);
685
+ border-radius: var(--radius-medium-large);
686
+ background: var(--_propskit-background);
687
+ color: var(--_propskit-color);
529
688
 
530
689
  &::after {
531
690
  content: "";
532
691
  position: absolute;
533
692
  inset: 0;
534
693
  border-radius: inherit;
694
+ border: var(--_propskit-border);
535
695
  pointer-events: none;
536
696
  }
537
697
 
538
- &:hover::after {
539
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
698
+ &:hover {
699
+ background: var(--_propskit-hover-background);
700
+ color: var(--_propskit-hover-color);
701
+
702
+ &::after {
703
+ border: var(--_propskit-hover-border);
704
+ }
540
705
  }
541
706
 
542
707
  & > label {
@@ -545,12 +710,12 @@ propskit-fill {
545
710
  display: flex;
546
711
  align-items: center;
547
712
  flex: 0 1 auto;
548
- max-width: 40%;
713
+ max-inline-size: var(--_propskit-label-inline-size);
549
714
  min-width: 0;
550
715
  margin: 0;
551
716
  padding: 0;
552
717
  overflow: hidden;
553
- color: var(--figma-color-text-secondary);
718
+ color: inherit;
554
719
  text-overflow: ellipsis;
555
720
  white-space: nowrap;
556
721
  pointer-events: none;
@@ -566,10 +731,10 @@ propskit-fill {
566
731
 
567
732
  fig-swatch {
568
733
  position: relative;
569
- flex: 0 0 33%;
570
- width: 33%;
734
+ flex: 0 0 var(--_propskit-input-inline-size);
735
+ inline-size: var(--_propskit-input-inline-size);
571
736
  min-width: 0;
572
- margin-left: auto;
737
+ margin-inline-start: auto;
573
738
  overflow: hidden;
574
739
  contain: paint;
575
740
  --width: 100%;
@@ -584,24 +749,63 @@ propskit-fill {
584
749
 
585
750
  propskit-gradient {
586
751
  --propskit-gradient-height: 2rem;
587
- --propskit-gradient-vertical-padding: var(--spacer-1);
588
- --propskit-gradient-horizontal-padding: var(--spacer-3);
752
+ --_propskit-padding-block: var(
753
+ --propskit-gradient-padding-block,
754
+ var(--propskit-padding-block, var(--spacer-1))
755
+ );
756
+ --_propskit-padding-inline: var(
757
+ --propskit-gradient-padding-inline,
758
+ var(--propskit-padding-inline, var(--spacer-3))
759
+ );
760
+ --_propskit-background: var(
761
+ --propskit-gradient-background,
762
+ var(--propskit-background, var(--figma-color-bg-secondary))
763
+ );
764
+ --_propskit-border: var(
765
+ --propskit-gradient-border,
766
+ var(--propskit-border, 0 solid transparent)
767
+ );
768
+ --_propskit-color: var(
769
+ --propskit-gradient-color,
770
+ var(--propskit-color, var(--figma-color-text-secondary))
771
+ );
772
+ --_propskit-hover-background: var(
773
+ --propskit-gradient-hover-background,
774
+ var(--propskit-hover-background, var(--_propskit-background))
775
+ );
776
+ --_propskit-hover-border: var(
777
+ --propskit-gradient-hover-border,
778
+ var(
779
+ --propskit-hover-border,
780
+ 1px solid var(--figma-color-bordertranslucent)
781
+ )
782
+ );
783
+ --_propskit-hover-color: var(
784
+ --propskit-gradient-hover-color,
785
+ var(--propskit-hover-color, var(--_propskit-color))
786
+ );
787
+ --_propskit-label-inline-size: var(
788
+ --propskit-gradient-label-inline-size,
789
+ var(--propskit-label-inline-size, 40%)
790
+ );
791
+ --_propskit-input-inline-size: var(
792
+ --propskit-gradient-input-inline-size,
793
+ var(--propskit-input-inline-size, 33%)
794
+ );
589
795
  --figma-focus-outline-offset: 1px;
590
796
 
591
797
  display: block;
798
+ box-sizing: border-box;
592
799
  width: 100%;
593
800
  height: calc(
594
- var(--propskit-gradient-height) + var(--propskit-gradient-vertical-padding) * 2
801
+ var(--propskit-gradient-height) + var(--_propskit-padding-block) * 2
595
802
  );
596
- padding: var(--propskit-gradient-vertical-padding)
597
- var(--propskit-gradient-horizontal-padding);
598
-
599
- &[size="small"] {
600
- --propskit-gradient-height: 1.5rem;
601
- }
803
+ padding-block: var(--_propskit-padding-block);
804
+ padding-inline: var(--_propskit-padding-inline);
602
805
 
603
806
  fig-input-gradient {
604
807
  --fig-input-gradient-height: var(--propskit-gradient-height);
808
+ --fig-input-gradient-swatch-border-radius: var(--radius-medium);
605
809
  height: var(--propskit-gradient-height);
606
810
 
607
811
  fig-swatch {
@@ -619,26 +823,33 @@ propskit-gradient {
619
823
  }
620
824
  }
621
825
 
622
- fig-field:not([direction="vertical"]) {
826
+ .propskit-gradient-surface {
623
827
  position: relative;
624
828
  display: flex;
625
829
  align-items: center;
626
830
  gap: var(--spacer-2);
627
831
  height: 100%;
628
- padding: 0 0 0 var(--spacer-2);
629
- border-radius: var(--radius-medium);
630
- background-color: var(--figma-color-bg-secondary);
832
+ padding-inline-start: var(--spacer-2-5);
833
+ border-radius: var(--radius-medium-large);
834
+ background: var(--_propskit-background);
835
+ color: var(--_propskit-color);
631
836
 
632
837
  &::after {
633
838
  content: "";
634
839
  position: absolute;
635
840
  inset: 0;
636
841
  border-radius: inherit;
842
+ border: var(--_propskit-border);
637
843
  pointer-events: none;
638
844
  }
639
845
 
640
- &:hover::after {
641
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
846
+ &:hover {
847
+ background: var(--_propskit-hover-background);
848
+ color: var(--_propskit-hover-color);
849
+
850
+ &::after {
851
+ border: var(--_propskit-hover-border);
852
+ }
642
853
  }
643
854
 
644
855
  & > label {
@@ -647,12 +858,12 @@ propskit-gradient {
647
858
  display: flex;
648
859
  align-items: center;
649
860
  flex: 0 1 auto;
650
- max-width: 40%;
861
+ max-inline-size: var(--_propskit-label-inline-size);
651
862
  min-width: 0;
652
863
  margin: 0;
653
864
  padding: 0;
654
865
  overflow: hidden;
655
- color: var(--figma-color-text-secondary);
866
+ color: inherit;
656
867
  text-overflow: ellipsis;
657
868
  white-space: nowrap;
658
869
  pointer-events: none;
@@ -664,10 +875,10 @@ propskit-gradient {
664
875
 
665
876
  fig-input-gradient {
666
877
  position: relative;
667
- flex: 0 0 33%;
668
- width: 33%;
878
+ flex: 0 0 var(--_propskit-input-inline-size);
879
+ inline-size: var(--_propskit-input-inline-size);
669
880
  min-width: 0;
670
- margin-left: auto;
881
+ margin-inline-start: auto;
671
882
  border-radius: var(--radius-medium);
672
883
  background-color: transparent;
673
884
  }
@@ -678,15 +889,21 @@ propskit-gradient {
678
889
  outline: none;
679
890
 
680
891
  fig-swatch {
892
+ --border-radius: var(--radius-medium);
893
+ --fig-swatch-border-radius: var(--radius-medium);
894
+
895
+ border-radius: var(--radius-medium);
681
896
  background-color: transparent !important;
682
897
  }
683
898
 
684
- fig-field:not([direction="vertical"]) {
899
+ :is(.propskit-color-surface, .propskit-fill-surface, .propskit-gradient-surface) {
685
900
  outline: none;
686
901
  }
687
902
 
688
- &:focus-within fig-field:not([direction="vertical"]),
689
- &.has-popup-open fig-field:not([direction="vertical"]) {
903
+ &:focus-within
904
+ :is(.propskit-color-surface, .propskit-fill-surface, .propskit-gradient-surface),
905
+ &.has-popup-open
906
+ :is(.propskit-color-surface, .propskit-fill-surface, .propskit-gradient-surface) {
690
907
  outline: var(--figma-focus-outline);
691
908
  outline-offset: var(--figma-focus-outline-offset);
692
909
  }
@@ -717,59 +934,61 @@ propskit-gradient {
717
934
  }
718
935
  }
719
936
 
720
- propskit-select {
721
- --propskit-select-height: 2rem;
722
- --propskit-select-vertical-padding: var(--spacer-1);
723
- --propskit-select-horizontal-padding: var(--spacer-3);
937
+ propskit-palette {
938
+ --propskit-palette-height: 2rem;
939
+ --_propskit-padding-block: var(
940
+ --propskit-palette-padding-block,
941
+ var(--propskit-padding-block, var(--spacer-1))
942
+ );
943
+ --_propskit-padding-inline: var(
944
+ --propskit-palette-padding-inline,
945
+ var(--propskit-padding-inline, var(--spacer-3))
946
+ );
947
+ --_propskit-background: var(
948
+ --propskit-palette-background,
949
+ var(--propskit-background, var(--figma-color-bg-secondary))
950
+ );
951
+ --_propskit-border: var(
952
+ --propskit-palette-border,
953
+ var(--propskit-border, 0 solid transparent)
954
+ );
955
+ --_propskit-color: var(
956
+ --propskit-palette-color,
957
+ var(--propskit-color, var(--figma-color-text-secondary))
958
+ );
959
+ --_propskit-hover-background: var(
960
+ --propskit-palette-hover-background,
961
+ var(--propskit-hover-background, var(--_propskit-background))
962
+ );
963
+ --_propskit-hover-border: var(
964
+ --propskit-palette-hover-border,
965
+ var(
966
+ --propskit-hover-border,
967
+ 1px solid var(--figma-color-bordertranslucent)
968
+ )
969
+ );
970
+ --_propskit-hover-color: var(
971
+ --propskit-palette-hover-color,
972
+ var(--propskit-hover-color, var(--_propskit-color))
973
+ );
974
+ --_propskit-label-inline-size: var(
975
+ --propskit-palette-label-inline-size,
976
+ var(--propskit-label-inline-size, 40%)
977
+ );
978
+ --_propskit-input-inline-size: var(
979
+ --propskit-palette-input-inline-size,
980
+ var(--propskit-input-inline-size, 60%)
981
+ );
724
982
  --figma-focus-outline-offset: 1px;
725
983
 
726
984
  display: block;
985
+ box-sizing: border-box;
727
986
  width: 100%;
728
987
  height: calc(
729
- var(--propskit-select-height) + var(--propskit-select-vertical-padding) * 2
988
+ var(--propskit-palette-height) + var(--_propskit-padding-block) * 2
730
989
  );
731
- padding: var(--propskit-select-vertical-padding)
732
- var(--propskit-select-horizontal-padding);
733
-
734
- fig-field:not([direction="vertical"]) {
735
- :is(fig-select, fig-dropdown) {
736
- padding-right: var(--spacer-1);
737
-
738
- &::after {
739
- right: calc(0.25rem + var(--spacer-1));
740
- }
741
- }
742
-
743
- fig-select::part(trigger) {
744
- padding-left: var(--spacer-2-5);
745
- }
746
-
747
- fig-dropdown > select {
748
- padding-left: var(--spacer-2-5);
749
- }
750
- }
751
-
752
- &[size="small"] {
753
- --propskit-select-height: 1.5rem;
754
-
755
- fig-field:not([direction="vertical"]) {
756
- :is(fig-select, fig-dropdown) {
757
- padding-right: 0;
758
-
759
- &::after {
760
- right: 0.25rem;
761
- }
762
- }
763
-
764
- fig-select::part(trigger) {
765
- padding-left: var(--spacer-2);
766
- }
767
-
768
- fig-dropdown > select {
769
- padding-left: var(--spacer-2);
770
- }
771
- }
772
- }
990
+ padding-block: var(--_propskit-padding-block);
991
+ padding-inline: var(--_propskit-padding-inline);
773
992
 
774
993
  &[disabled]:not([disabled="false"]) {
775
994
  pointer-events: none;
@@ -779,123 +998,384 @@ propskit-select {
779
998
  }
780
999
  }
781
1000
 
782
- fig-field:not([direction="vertical"]) {
1001
+ .propskit-palette-surface {
783
1002
  position: relative;
784
1003
  display: flex;
785
1004
  align-items: center;
1005
+ gap: var(--spacer-2);
1006
+ box-sizing: border-box;
786
1007
  height: 100%;
787
- /* Reset fig-field vertical padding so select fills the chrome. */
788
- padding: 0;
789
- border-radius: var(--radius-medium);
790
- background-color: var(--figma-color-bg-secondary);
1008
+ padding-inline-start: var(--spacer-2-5);
1009
+ border-radius: var(--radius-medium-large);
1010
+ background: var(--_propskit-background);
1011
+ color: var(--_propskit-color);
1012
+ cursor: default;
791
1013
 
792
1014
  &::after {
793
1015
  content: "";
794
1016
  position: absolute;
795
1017
  inset: 0;
1018
+ border: var(--_propskit-border);
796
1019
  border-radius: inherit;
797
1020
  pointer-events: none;
798
1021
  }
799
1022
 
800
- &:hover::after {
801
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
1023
+ &:hover {
1024
+ background: var(--_propskit-hover-background);
1025
+ color: var(--_propskit-hover-color);
1026
+
1027
+ &::after {
1028
+ border: var(--_propskit-hover-border);
1029
+ }
1030
+ }
1031
+
1032
+ &:focus-within {
1033
+ outline: var(--figma-focus-outline);
1034
+ outline-offset: var(--figma-focus-outline-offset);
802
1035
  }
803
1036
 
804
- /* Label geometry comes from the shared propskit horizontal-label rules. */
805
1037
  & > label {
1038
+ position: relative;
1039
+ z-index: 1;
1040
+ display: flex;
1041
+ align-items: center;
1042
+ flex: 0 1 auto;
1043
+ max-inline-size: var(--_propskit-label-inline-size);
1044
+ min-width: 0;
1045
+ margin: 0;
1046
+ padding: 0;
1047
+ overflow: hidden;
1048
+ color: inherit;
1049
+ text-overflow: ellipsis;
1050
+ white-space: nowrap;
1051
+ pointer-events: none;
1052
+
806
1053
  fig-icon:first-child {
807
1054
  margin-left: calc(var(--spacer-1) * -1);
808
1055
  }
809
1056
  }
810
1057
 
811
- :is(fig-select, fig-dropdown) {
812
- position: relative;
1058
+ & > fig-select {
1059
+ --fig-select-trigger-width: 100%;
1060
+
1061
+ position: absolute;
1062
+ inset: 0;
1063
+ z-index: 1;
813
1064
  display: flex;
814
- flex: 1 1 auto;
815
- align-self: stretch;
816
- align-items: stretch;
817
1065
  width: 100%;
818
1066
  min-width: 0;
1067
+ max-width: none;
819
1068
  height: 100%;
820
- border-radius: var(--radius-medium);
1069
+ margin: 0;
1070
+ border-radius: inherit;
821
1071
  background: transparent;
822
1072
  box-shadow: none;
823
- }
824
-
825
- fig-select {
826
- --fig-select-trigger-width: 100%;
827
1073
 
828
- &::part(label) {
829
- text-align: right;
1074
+ &::part(trigger) {
1075
+ gap: var(--spacer-1);
1076
+ min-width: 0;
1077
+ padding-left: calc(
1078
+ var(--_propskit-label-inline-size) + var(--spacer-2)
1079
+ );
1080
+ background: transparent;
830
1081
  }
831
- }
832
1082
 
833
- /* fig-dropdown fallback: match fig-select trigger layout in the field.
834
- Native select defaults to --spacer-4; stretch it to the field height. */
835
- fig-dropdown > select {
836
- flex: 1 1 auto;
837
- align-self: stretch;
838
- box-sizing: border-box;
839
- width: 100%;
840
- height: auto;
841
- min-height: 100%;
842
- padding: 0 var(--spacer-4) 0 var(--spacer-2);
843
- text-align: right;
844
- text-align-last: right;
845
- color: inherit;
846
- background: transparent;
847
- box-shadow: none;
1083
+ &::part(prepend) {
1084
+ display: flex;
1085
+ flex: 1 1 auto;
1086
+ min-width: 0;
1087
+ margin: 0;
1088
+ }
848
1089
  }
849
1090
  }
850
- }
851
1091
 
852
- propskit-text {
853
- --propskit-text-height: 2rem;
854
- --propskit-text-vertical-padding: var(--spacer-1);
855
- --propskit-text-horizontal-padding: var(--spacer-3);
856
- --figma-focus-outline-offset: 1px;
1092
+ .propskit-palette-preview {
1093
+ --fig-input-palette-height: calc(
1094
+ var(--propskit-palette-height) - var(--spacer-2)
1095
+ );
1096
+ --fig-input-palette-padding: 0px;
857
1097
 
858
- display: block;
859
- width: 100%;
860
- height: calc(
861
- var(--propskit-text-height) + var(--propskit-text-vertical-padding) * 2
862
- );
863
- padding: var(--propskit-text-vertical-padding)
864
- var(--propskit-text-horizontal-padding);
1098
+ width: 100%;
1099
+ min-width: 0;
1100
+ border-radius: var(--radius-medium);
1101
+ opacity: 1;
1102
+ pointer-events: none;
865
1103
 
866
- &[size="small"] {
867
- --propskit-text-height: 1.5rem;
868
- }
1104
+ &[hidden] {
1105
+ display: none !important;
1106
+ }
869
1107
 
870
- &[disabled]:not([disabled="false"]) {
871
- pointer-events: none;
1108
+ & > .palette-colors-inline {
1109
+ padding: 0;
1110
+ border-radius: var(--radius-medium);
1111
+ background: transparent;
872
1112
 
873
- label,
874
- input {
875
- color: var(--figma-color-text-disabled);
1113
+ & > .palette-colors {
1114
+ border-radius: var(--radius-medium);
1115
+ }
876
1116
  }
877
1117
  }
878
1118
 
879
- fig-field:not([direction="vertical"]) {
880
- position: relative;
1119
+ .propskit-palette-options {
1120
+ fig-select-option {
1121
+ min-height: var(--propskit-palette-height);
1122
+ cursor: default;
1123
+
1124
+ & > .propskit-palette-option-preview {
1125
+ display: flex;
1126
+ flex: 1 1 auto;
1127
+ min-width: 0;
1128
+ margin-block: 0;
1129
+ margin-inline-end: 0;
1130
+ }
1131
+
1132
+ .propskit-palette-preview {
1133
+ --fig-input-palette-height: var(--spacer-4);
1134
+ --fig-input-palette-padding: 0px;
1135
+ }
1136
+ }
1137
+ }
1138
+ }
1139
+
1140
+ propskit-select {
1141
+ --propskit-select-height: 2rem;
1142
+ --_propskit-padding-block: var(
1143
+ --propskit-select-padding-block,
1144
+ var(--propskit-padding-block, var(--spacer-1))
1145
+ );
1146
+ --_propskit-padding-inline: var(
1147
+ --propskit-select-padding-inline,
1148
+ var(--propskit-padding-inline, var(--spacer-3))
1149
+ );
1150
+ --_propskit-background: var(
1151
+ --propskit-select-background,
1152
+ var(--propskit-background, var(--figma-color-bg-secondary))
1153
+ );
1154
+ --_propskit-border: var(
1155
+ --propskit-select-border,
1156
+ var(--propskit-border, 0 solid transparent)
1157
+ );
1158
+ --_propskit-color: var(
1159
+ --propskit-select-color,
1160
+ var(--propskit-color, var(--figma-color-text-secondary))
1161
+ );
1162
+ --_propskit-hover-background: var(
1163
+ --propskit-select-hover-background,
1164
+ var(--propskit-hover-background, var(--_propskit-background))
1165
+ );
1166
+ --_propskit-hover-border: var(
1167
+ --propskit-select-hover-border,
1168
+ var(
1169
+ --propskit-hover-border,
1170
+ 1px solid var(--figma-color-bordertranslucent)
1171
+ )
1172
+ );
1173
+ --_propskit-hover-color: var(
1174
+ --propskit-select-hover-color,
1175
+ var(--propskit-hover-color, var(--_propskit-color))
1176
+ );
1177
+ --_propskit-label-inline-size: var(
1178
+ --propskit-select-label-inline-size,
1179
+ var(--propskit-label-inline-size, 75%)
1180
+ );
1181
+ --_propskit-input-inline-size: var(
1182
+ --propskit-select-input-inline-size,
1183
+ var(--propskit-input-inline-size, 100%)
1184
+ );
1185
+ --figma-focus-outline-offset: 1px;
1186
+
1187
+ display: block;
1188
+ box-sizing: border-box;
1189
+ width: 100%;
1190
+ height: calc(
1191
+ var(--propskit-select-height) + var(--_propskit-padding-block) * 2
1192
+ );
1193
+ padding-block: var(--_propskit-padding-block);
1194
+ padding-inline: var(--_propskit-padding-inline);
1195
+
1196
+ .propskit-select-surface {
1197
+ fig-select {
1198
+ padding-right: var(--spacer-1);
1199
+
1200
+ &::after {
1201
+ right: calc(0.25rem + var(--spacer-1));
1202
+ }
1203
+ }
1204
+
1205
+ fig-select::part(trigger) {
1206
+ padding-left: var(--spacer-2-5);
1207
+ }
1208
+
1209
+ }
1210
+
1211
+ &[disabled]:not([disabled="false"]) {
1212
+ pointer-events: none;
1213
+
1214
+ label {
1215
+ color: var(--figma-color-text-disabled);
1216
+ }
1217
+ }
1218
+
1219
+ .propskit-select-surface {
1220
+ position: relative;
881
1221
  display: flex;
882
1222
  align-items: center;
883
- gap: var(--spacer-2);
884
1223
  height: 100%;
885
- padding-left: var(--spacer-2);
886
- border-radius: var(--radius-medium);
887
- background-color: var(--figma-color-bg-secondary);
1224
+ padding: 0;
1225
+ border-radius: var(--radius-medium-large);
1226
+ background: var(--_propskit-background);
1227
+ color: var(--_propskit-color);
1228
+
1229
+ &::after {
1230
+ content: "";
1231
+ position: absolute;
1232
+ inset: 0;
1233
+ border-radius: inherit;
1234
+ border: var(--_propskit-border);
1235
+ pointer-events: none;
1236
+ }
1237
+
1238
+ &:hover {
1239
+ background: var(--_propskit-hover-background);
1240
+ color: var(--_propskit-hover-color);
1241
+
1242
+ &::after {
1243
+ border: var(--_propskit-hover-border);
1244
+ }
1245
+ }
1246
+
1247
+ /* Label geometry comes from the shared propskit horizontal-label rules. */
1248
+ & > label {
1249
+ fig-icon:first-child {
1250
+ margin-left: calc(var(--spacer-1) * -1);
1251
+ }
1252
+ }
1253
+
1254
+ fig-select {
1255
+ position: relative;
1256
+ display: flex;
1257
+ flex: 1 1 auto;
1258
+ align-self: stretch;
1259
+ align-items: stretch;
1260
+ inline-size: var(--_propskit-input-inline-size);
1261
+ min-width: 0;
1262
+ height: 100%;
1263
+ border-radius: inherit;
1264
+ background: transparent;
1265
+ box-shadow: none;
1266
+ }
1267
+
1268
+ fig-select {
1269
+ --fig-select-trigger-width: 100%;
1270
+
1271
+ &::part(label) {
1272
+ text-align: right;
1273
+ }
1274
+ }
1275
+
1276
+ }
1277
+ }
1278
+
1279
+ propskit-text {
1280
+ --propskit-text-height: 2rem;
1281
+ --_propskit-padding-block: var(
1282
+ --propskit-text-padding-block,
1283
+ var(--propskit-padding-block, var(--spacer-1))
1284
+ );
1285
+ --_propskit-padding-inline: var(
1286
+ --propskit-text-padding-inline,
1287
+ var(--propskit-padding-inline, var(--spacer-3))
1288
+ );
1289
+ --_propskit-background: var(
1290
+ --propskit-text-background,
1291
+ var(--propskit-background, var(--figma-color-bg-secondary))
1292
+ );
1293
+ --_propskit-border: var(
1294
+ --propskit-text-border,
1295
+ var(--propskit-border, 0 solid transparent)
1296
+ );
1297
+ --_propskit-color: var(
1298
+ --propskit-text-color,
1299
+ var(--propskit-color, var(--figma-color-text-secondary))
1300
+ );
1301
+ --_propskit-hover-background: var(
1302
+ --propskit-text-hover-background,
1303
+ var(--propskit-hover-background, var(--_propskit-background))
1304
+ );
1305
+ --_propskit-hover-border: var(
1306
+ --propskit-text-hover-border,
1307
+ var(
1308
+ --propskit-hover-border,
1309
+ 1px solid var(--figma-color-bordertranslucent)
1310
+ )
1311
+ );
1312
+ --_propskit-hover-color: var(
1313
+ --propskit-text-hover-color,
1314
+ var(--propskit-hover-color, var(--_propskit-color))
1315
+ );
1316
+ --_propskit-label-inline-size: var(
1317
+ --propskit-text-label-inline-size,
1318
+ var(--propskit-label-inline-size, 50%)
1319
+ );
1320
+ --_propskit-input-inline-size: var(
1321
+ --propskit-text-input-inline-size,
1322
+ var(--propskit-input-inline-size, fit-content)
1323
+ );
1324
+ --figma-focus-outline-offset: 1px;
1325
+
1326
+ display: block;
1327
+ box-sizing: border-box;
1328
+ width: 100%;
1329
+ min-height: calc(
1330
+ var(--propskit-text-height) + var(--_propskit-padding-block) * 2
1331
+ );
1332
+ padding-block: var(--_propskit-padding-block);
1333
+ padding-inline: var(--_propskit-padding-inline);
1334
+
1335
+ &[disabled]:not([disabled="false"]) {
1336
+ pointer-events: none;
1337
+
1338
+ label,
1339
+ :is(input, textarea) {
1340
+ color: var(--figma-color-text-disabled);
1341
+ }
1342
+ }
1343
+
1344
+ .propskit-text-surface {
1345
+ position: relative;
1346
+ display: flex;
1347
+ align-items: center;
1348
+ gap: var(--spacer-2);
1349
+ box-sizing: border-box;
1350
+ min-height: var(--propskit-text-height);
1351
+ padding-block: var(--spacer-1);
1352
+ padding-inline: var(--spacer-2-5) var(--spacer-1);
1353
+ border-radius: var(--radius-medium-large);
1354
+ background: var(--_propskit-background);
1355
+ color: var(--_propskit-color);
1356
+ outline: none;
1357
+
1358
+ &:focus-within {
1359
+ outline: var(--figma-focus-outline);
1360
+ outline-offset: var(--figma-focus-outline-offset);
1361
+ }
888
1362
 
889
1363
  &::after {
890
1364
  content: "";
891
1365
  position: absolute;
892
1366
  inset: 0;
893
1367
  border-radius: inherit;
1368
+ border: var(--_propskit-border);
894
1369
  pointer-events: none;
895
1370
  }
896
1371
 
897
- &:hover::after {
898
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
1372
+ &:hover {
1373
+ background: var(--_propskit-hover-background);
1374
+ color: var(--_propskit-hover-color);
1375
+
1376
+ &::after {
1377
+ border: var(--_propskit-hover-border);
1378
+ }
899
1379
  }
900
1380
 
901
1381
  & > label {
@@ -903,14 +1383,14 @@ propskit-text {
903
1383
  z-index: 1;
904
1384
  display: flex;
905
1385
  align-items: center;
1386
+ align-self: flex-start;
906
1387
  flex: 0 0 auto;
907
- width: auto;
908
- max-width: 50%;
909
1388
  min-width: 0;
910
- margin: 0;
1389
+ margin: var(--spacer-1) 0 0;
911
1390
  padding: 0;
1391
+ max-inline-size: var(--_propskit-label-inline-size);
912
1392
  overflow: hidden;
913
- color: var(--figma-color-text-secondary);
1393
+ color: inherit;
914
1394
  text-overflow: ellipsis;
915
1395
  white-space: nowrap;
916
1396
  pointer-events: none;
@@ -926,33 +1406,39 @@ propskit-text {
926
1406
  position: relative;
927
1407
  align-self: center;
928
1408
  flex: 0 1 auto !important;
929
- width: fit-content !important;
1409
+ width: var(--_propskit-input-inline-size) !important;
930
1410
  max-width: none;
931
1411
  min-width: 0;
932
- margin-left: auto;
933
- height: var(--propskit-text-height);
1412
+ margin-inline-start: auto;
1413
+ min-height: var(--control-height);
934
1414
  border-radius: var(--radius-medium);
935
1415
  background-color: transparent;
936
1416
  box-shadow: none;
1417
+ outline: none !important;
937
1418
 
938
- &:has(input:focus) {
939
- outline: var(--figma-focus-outline) !important;
940
- outline-offset: var(--figma-focus-outline-offset) !important;
1419
+ &:has(:is(input, textarea):focus) {
1420
+ outline: none !important;
941
1421
  }
942
1422
 
943
- input {
944
- field-sizing: content;
1423
+ :is(input, textarea) {
945
1424
  width: auto;
946
1425
  max-width: 100%;
947
1426
  min-width: 0;
948
1427
  flex: 0 0 auto;
949
1428
  text-align: right;
1429
+ }
950
1430
 
951
- &:not(:focus) {
952
- overflow: hidden;
953
- text-overflow: ellipsis;
954
- white-space: nowrap;
955
- }
1431
+ input:not(:focus) {
1432
+ overflow: hidden;
1433
+ text-overflow: ellipsis;
1434
+ white-space: nowrap;
1435
+ }
1436
+
1437
+ textarea {
1438
+ min-height: 1lh;
1439
+ max-height: calc(4lh + var(--spacer-2));
1440
+ overflow-y: auto;
1441
+ white-space: pre-wrap;
956
1442
  }
957
1443
  }
958
1444
  }
@@ -960,21 +1446,59 @@ propskit-text {
960
1446
 
961
1447
  propskit-number {
962
1448
  --propskit-number-height: 2rem;
963
- --propskit-number-vertical-padding: var(--spacer-1);
964
- --propskit-number-horizontal-padding: var(--spacer-3);
1449
+ --_propskit-padding-block: var(
1450
+ --propskit-number-padding-block,
1451
+ var(--propskit-padding-block, var(--spacer-1))
1452
+ );
1453
+ --_propskit-padding-inline: var(
1454
+ --propskit-number-padding-inline,
1455
+ var(--propskit-padding-inline, var(--spacer-3))
1456
+ );
1457
+ --_propskit-background: var(
1458
+ --propskit-number-background,
1459
+ var(--propskit-background, var(--figma-color-bg-secondary))
1460
+ );
1461
+ --_propskit-border: var(
1462
+ --propskit-number-border,
1463
+ var(--propskit-border, 0 solid transparent)
1464
+ );
1465
+ --_propskit-color: var(
1466
+ --propskit-number-color,
1467
+ var(--propskit-color, var(--figma-color-text-secondary))
1468
+ );
1469
+ --_propskit-hover-background: var(
1470
+ --propskit-number-hover-background,
1471
+ var(--propskit-hover-background, var(--_propskit-background))
1472
+ );
1473
+ --_propskit-hover-border: var(
1474
+ --propskit-number-hover-border,
1475
+ var(
1476
+ --propskit-hover-border,
1477
+ 1px solid var(--figma-color-bordertranslucent)
1478
+ )
1479
+ );
1480
+ --_propskit-hover-color: var(
1481
+ --propskit-number-hover-color,
1482
+ var(--propskit-hover-color, var(--_propskit-color))
1483
+ );
1484
+ --_propskit-label-inline-size: var(
1485
+ --propskit-number-label-inline-size,
1486
+ var(--propskit-label-inline-size, 75%)
1487
+ );
1488
+ --_propskit-input-inline-size: var(
1489
+ --propskit-number-input-inline-size,
1490
+ var(--propskit-input-inline-size, fit-content)
1491
+ );
965
1492
  --figma-focus-outline-offset: 1px;
966
1493
 
967
1494
  display: block;
1495
+ box-sizing: border-box;
968
1496
  width: 100%;
969
1497
  height: calc(
970
- var(--propskit-number-height) + var(--propskit-number-vertical-padding) * 2
1498
+ var(--propskit-number-height) + var(--_propskit-padding-block) * 2
971
1499
  );
972
- padding: var(--propskit-number-vertical-padding)
973
- var(--propskit-number-horizontal-padding);
974
-
975
- &[size="small"] {
976
- --propskit-number-height: 1.5rem;
977
- }
1500
+ padding-block: var(--_propskit-padding-block);
1501
+ padding-inline: var(--_propskit-padding-inline);
978
1502
 
979
1503
  &[disabled]:not([disabled="false"]) {
980
1504
  pointer-events: none;
@@ -989,12 +1513,17 @@ propskit-number {
989
1513
  padding-right: 0;
990
1514
  }
991
1515
 
992
- fig-field:not([direction="vertical"]) {
1516
+ .propskit-number-surface {
993
1517
  position: relative;
994
1518
  display: flex;
1519
+ align-items: center;
1520
+ gap: var(--spacer-2);
1521
+ box-sizing: border-box;
995
1522
  height: 100%;
996
- border-radius: var(--radius-medium);
997
- background-color: var(--figma-color-bg-secondary);
1523
+ padding-inline: var(--spacer-2-5) var(--spacer-1);
1524
+ border-radius: var(--radius-medium-large);
1525
+ background: var(--_propskit-background);
1526
+ color: var(--_propskit-color);
998
1527
  outline: none;
999
1528
 
1000
1529
  &:focus-within {
@@ -1007,16 +1536,33 @@ propskit-number {
1007
1536
  position: absolute;
1008
1537
  inset: 0;
1009
1538
  border-radius: inherit;
1539
+ border: var(--_propskit-border);
1010
1540
  pointer-events: none;
1011
1541
  }
1012
1542
 
1013
- &:hover::after {
1014
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
1543
+ &:hover {
1544
+ background: var(--_propskit-hover-background);
1545
+ color: var(--_propskit-hover-color);
1546
+
1547
+ &::after {
1548
+ border: var(--_propskit-hover-border);
1549
+ }
1015
1550
  }
1016
1551
 
1017
- /* Label geometry comes from the shared propskit horizontal-label rules. */
1018
1552
  & > label {
1019
- color: var(--figma-color-text-secondary);
1553
+ position: relative;
1554
+ z-index: 1;
1555
+ display: flex;
1556
+ align-items: center;
1557
+ flex: 0 0 auto;
1558
+ min-width: 0;
1559
+ padding: 0;
1560
+ max-inline-size: var(--_propskit-label-inline-size);
1561
+ overflow: hidden;
1562
+ color: inherit;
1563
+ text-overflow: ellipsis;
1564
+ white-space: nowrap;
1565
+ pointer-events: none;
1020
1566
 
1021
1567
  fig-icon:first-child {
1022
1568
  margin-left: calc(var(--spacer-1) * -1);
@@ -1024,12 +1570,15 @@ propskit-number {
1024
1570
  }
1025
1571
 
1026
1572
  fig-input-number {
1573
+ --figma-focus-outline-offset: 1px;
1574
+
1027
1575
  position: relative;
1028
1576
  align-self: center;
1029
- flex: 0 0 auto;
1030
- width: fit-content;
1577
+ flex: 0 1 auto !important;
1578
+ width: var(--_propskit-input-inline-size) !important;
1579
+ max-width: none;
1031
1580
  min-width: 0;
1032
- margin-left: auto;
1581
+ margin-inline-start: auto;
1033
1582
  height: var(--control-height);
1034
1583
  border-radius: var(--radius-medium);
1035
1584
  background-color: transparent;
@@ -1043,6 +1592,7 @@ propskit-number {
1043
1592
  input {
1044
1593
  field-sizing: content;
1045
1594
  width: auto;
1595
+ max-width: 100%;
1046
1596
  min-width: 0;
1047
1597
  flex: 0 0 auto;
1048
1598
  text-align: right;
@@ -1059,8 +1609,49 @@ propskit-slider {
1059
1609
  --propskit-slider-elastic-origin: left center;
1060
1610
  --propskit-slider-elastic-transition: 0.18s cubic-bezier(0.2, 1.45, 0.35, 1);
1061
1611
  --propskit-slider-height: 2rem;
1062
- --propskit-slider-vertical-padding: var(--spacer-1);
1063
- --propskit-slider-horizontal-padding: var(--spacer-3);
1612
+ --_propskit-padding-block: var(
1613
+ --propskit-slider-padding-block,
1614
+ var(--propskit-padding-block, var(--spacer-1))
1615
+ );
1616
+ --_propskit-padding-inline: var(
1617
+ --propskit-slider-padding-inline,
1618
+ var(--propskit-padding-inline, var(--spacer-3))
1619
+ );
1620
+ --_propskit-background: var(
1621
+ --propskit-slider-background,
1622
+ var(--propskit-background, var(--figma-color-bg-secondary))
1623
+ );
1624
+ --_propskit-border: var(
1625
+ --propskit-slider-border,
1626
+ var(--propskit-border, 0 solid transparent)
1627
+ );
1628
+ --_propskit-color: var(
1629
+ --propskit-slider-color,
1630
+ var(--propskit-color, var(--figma-color-text-secondary))
1631
+ );
1632
+ --_propskit-hover-background: var(
1633
+ --propskit-slider-hover-background,
1634
+ var(--propskit-hover-background, var(--_propskit-background))
1635
+ );
1636
+ --_propskit-hover-border: var(
1637
+ --propskit-slider-hover-border,
1638
+ var(
1639
+ --propskit-hover-border,
1640
+ 1px solid var(--figma-color-bordertranslucent)
1641
+ )
1642
+ );
1643
+ --_propskit-hover-color: var(
1644
+ --propskit-slider-hover-color,
1645
+ var(--propskit-hover-color, var(--_propskit-color))
1646
+ );
1647
+ --_propskit-label-inline-size: var(
1648
+ --propskit-slider-label-inline-size,
1649
+ var(--propskit-label-inline-size, 75%)
1650
+ );
1651
+ --_propskit-input-inline-size: var(
1652
+ --propskit-slider-input-inline-size,
1653
+ var(--propskit-input-inline-size, 100%)
1654
+ );
1064
1655
  --figma-focus-outline-offset: 1px;
1065
1656
  --propskit-slider-progress-shadow: inset 0px 0.75px 0px 0px light-dark(transparent, rgba(255, 255, 255, 0.1));
1066
1657
  --field-text-shadow: 0 1px 1.5px
@@ -1079,31 +1670,22 @@ propskit-slider {
1079
1670
 
1080
1671
  display: block;
1081
1672
  position: relative;
1673
+ box-sizing: border-box;
1082
1674
  width: 100%;
1083
1675
  height: calc(
1084
- var(--propskit-slider-height) + var(--propskit-slider-vertical-padding) * 2
1676
+ var(--propskit-slider-height) + var(--_propskit-padding-block) * 2
1085
1677
  );
1086
- border-radius: var(--radius-medium);
1678
+ border-radius: var(--radius-medium-large);
1087
1679
  transform-origin: var(--propskit-slider-elastic-origin);
1088
1680
  transition: transform var(--propskit-slider-elastic-transition);
1089
- padding-top: var(--propskit-slider-vertical-padding);
1090
- padding-bottom: var(--propskit-slider-vertical-padding);
1091
- padding-left: var(--propskit-slider-horizontal-padding);
1092
- padding-right: var(--propskit-slider-horizontal-padding);
1681
+ padding-block: var(--_propskit-padding-block);
1682
+ padding-inline: var(--_propskit-padding-inline);
1093
1683
 
1094
1684
  &:hover,
1095
1685
  &:focus-within {
1096
1686
  --propskit-slider-handle-reveal: 1;
1097
1687
  }
1098
1688
 
1099
- &[size="small"] {
1100
- --propskit-slider-height: 1.5rem;
1101
- --propskit-slider-fig-slider-thumb-height: calc(
1102
- var(--propskit-slider-fig-slider-height) - var(--spacer-2-5)
1103
- );
1104
- --propskit-slider-number-right: 2px;
1105
- }
1106
-
1107
1689
  label {
1108
1690
  pointer-events: none;
1109
1691
  z-index: 1;
@@ -1134,19 +1716,27 @@ propskit-slider {
1134
1716
  }
1135
1717
 
1136
1718
 
1137
- fig-field:not([direction="vertical"]) {
1719
+ .propskit-slider-surface {
1138
1720
  position: relative;
1139
- padding-left: var(--spacer-2);
1721
+ padding-inline-start: var(--spacer-2-5);
1140
1722
  display: flex;
1141
1723
  height: 100%;
1724
+ border-radius: var(--figma-focus-outline-radius);
1725
+ background: var(--_propskit-background);
1726
+ color: var(--_propskit-color);
1727
+ outline: none;
1728
+
1729
+ &:focus-within {
1730
+ outline: var(--figma-focus-outline);
1731
+ outline-offset: var(--figma-focus-outline-offset);
1732
+ }
1142
1733
 
1143
1734
  & > label {
1144
1735
  min-width: 0;
1145
- max-width: none;
1146
- width: 100%;
1736
+ max-width: var(--_propskit-label-inline-size);
1737
+ width: var(--_propskit-label-inline-size);
1147
1738
  flex: 1 1 auto;
1148
- color: var(--figma-color-text-secondary);
1149
- padding: 0;
1739
+ color: inherit;
1150
1740
  display: flex;
1151
1741
  align-items: center;
1152
1742
  gap: var(--spacer-1);
@@ -1159,14 +1749,18 @@ propskit-slider {
1159
1749
 
1160
1750
  fig-slider {
1161
1751
  position: absolute;
1162
- inset: 0;
1752
+ inset-block: 0;
1753
+ inset-inline-end: 0;
1754
+ inline-size: var(--_propskit-input-inline-size);
1163
1755
  padding: 0;
1164
1756
  background-color: transparent;
1757
+ border-radius: inherit;
1758
+ outline: none;
1165
1759
  --slider-height: var(--propskit-slider-fig-slider-height);
1166
1760
 
1167
- &:focus-within {
1168
- outline: var(--figma-focus-outline);
1169
- outline-offset: var(--figma-focus-outline-offset);
1761
+ &:focus-within,
1762
+ &:has(input[type="range"]:focus-visible) {
1763
+ outline: none;
1170
1764
  }
1171
1765
  --slider-field-height: var(--propskit-slider-height);
1172
1766
  --slider-thumb-width: var(--spacer-1);
@@ -1176,7 +1770,7 @@ propskit-slider {
1176
1770
  min(var(--slider-complete), calc(1 - var(--slider-complete))) * 2
1177
1771
  );*/
1178
1772
  --slider-thumb-height: var(--propskit-slider-fig-slider-thumb-height);
1179
- --slider-border-radius: var(--radius-medium);
1773
+ --slider-border-radius: var(--radius-medium-large);
1180
1774
  --slider-tick-width: 0.125rem;
1181
1775
  --slider-tick-height: var(--spacer-2);
1182
1776
  --slider-tick-radius: var(--radius-medium);
@@ -1226,17 +1820,26 @@ propskit-slider {
1226
1820
 
1227
1821
  .fig-slider-input-container {
1228
1822
  box-shadow: none !important;
1229
- background-color: var(--figma-color-bg-secondary) !important;
1823
+ background-color: var(--_propskit-background) !important;
1230
1824
  overflow: hidden;
1825
+
1826
+ &::after {
1827
+ border: var(--_propskit-border);
1828
+ }
1829
+
1231
1830
  &:hover,
1232
1831
  &:focus-within {
1832
+ background-color: var(--_propskit-hover-background) !important;
1833
+ color: var(--_propskit-hover-color);
1834
+
1233
1835
  &::after {
1234
1836
  content: "";
1235
1837
  position: absolute;
1236
1838
  inset: 0;
1237
1839
  pointer-events: none;
1238
1840
  border-radius: var(--slider-border-radius);
1239
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent) !important;
1841
+ border: var(--_propskit-hover-border);
1842
+ box-shadow: none !important;
1240
1843
  }
1241
1844
  }
1242
1845
  &::before {
@@ -1441,7 +2044,7 @@ propskit-slider {
1441
2044
  container-type: inline-size;
1442
2045
  }
1443
2046
 
1444
- fig-field:not([direction="vertical"]) > label {
2047
+ .propskit-slider-surface > label {
1445
2048
  --propskit-slider-label-fill-edge: clamp(
1446
2049
  0%,
1447
2050
  calc(var(--propskit-slider-complete, 0) * 133.333333%),
@@ -1621,8 +2224,49 @@ propskit-wheel {
1621
2224
  --propskit-wheel-elastic-transition: 0.28s
1622
2225
  cubic-bezier(0.34, 1.56, 0.64, 1);
1623
2226
  --propskit-wheel-height: 2rem;
1624
- --propskit-wheel-vertical-padding: var(--spacer-1);
1625
- --propskit-wheel-horizontal-padding: var(--spacer-3);
2227
+ --_propskit-padding-block: var(
2228
+ --propskit-wheel-padding-block,
2229
+ var(--propskit-padding-block, var(--spacer-1))
2230
+ );
2231
+ --_propskit-padding-inline: var(
2232
+ --propskit-wheel-padding-inline,
2233
+ var(--propskit-padding-inline, var(--spacer-3))
2234
+ );
2235
+ --_propskit-background: var(
2236
+ --propskit-wheel-background,
2237
+ var(--propskit-background, var(--figma-color-bg-secondary))
2238
+ );
2239
+ --_propskit-border: var(
2240
+ --propskit-wheel-border,
2241
+ var(--propskit-border, 0 solid transparent)
2242
+ );
2243
+ --_propskit-color: var(
2244
+ --propskit-wheel-color,
2245
+ var(--propskit-color, var(--figma-color-text-secondary))
2246
+ );
2247
+ --_propskit-hover-background: var(
2248
+ --propskit-wheel-hover-background,
2249
+ var(--propskit-hover-background, var(--_propskit-background))
2250
+ );
2251
+ --_propskit-hover-border: var(
2252
+ --propskit-wheel-hover-border,
2253
+ var(
2254
+ --propskit-hover-border,
2255
+ 1px solid var(--figma-color-bordertranslucent)
2256
+ )
2257
+ );
2258
+ --_propskit-hover-color: var(
2259
+ --propskit-wheel-hover-color,
2260
+ var(--propskit-hover-color, var(--_propskit-color))
2261
+ );
2262
+ --_propskit-label-inline-size: var(
2263
+ --propskit-wheel-label-inline-size,
2264
+ var(--propskit-label-inline-size, 75%)
2265
+ );
2266
+ --_propskit-input-inline-size: var(
2267
+ --propskit-wheel-input-inline-size,
2268
+ var(--propskit-input-inline-size, fit-content)
2269
+ );
1626
2270
  --propskit-wheel-number-right: calc(2px + var(--spacer-1));
1627
2271
  --propskit-wheel-track-inset: 3rem;
1628
2272
  --propskit-wheel-track-inset-left: var(--propskit-wheel-track-inset);
@@ -1634,12 +2278,12 @@ propskit-wheel {
1634
2278
  box-sizing: border-box;
1635
2279
  width: 100%;
1636
2280
  height: calc(
1637
- var(--propskit-wheel-height) + var(--propskit-wheel-vertical-padding) * 2
2281
+ var(--propskit-wheel-height) + var(--_propskit-padding-block) * 2
1638
2282
  );
1639
2283
  transform-origin: var(--propskit-wheel-elastic-origin);
1640
2284
  transition: transform var(--propskit-wheel-elastic-transition);
1641
- padding: var(--propskit-wheel-vertical-padding)
1642
- var(--propskit-wheel-horizontal-padding);
2285
+ padding-block: var(--_propskit-padding-block);
2286
+ padding-inline: var(--_propskit-padding-inline);
1643
2287
 
1644
2288
  &[data-label-empty] {
1645
2289
  --propskit-wheel-track-inset-left: var(--spacer-2);
@@ -1649,21 +2293,6 @@ propskit-wheel {
1649
2293
  --propskit-wheel-track-inset-right: var(--spacer-2);
1650
2294
  }
1651
2295
 
1652
- &[size="small"] {
1653
- --propskit-wheel-height: 1.5rem;
1654
- --propskit-wheel-number-right: 2px;
1655
-
1656
- .propskit-wheel-surface > label {
1657
- padding-left: var(--spacer-2);
1658
- }
1659
-
1660
- .propskit-wheel-surface > fig-input-wheel {
1661
- --fig-input-wheel-handle-height: calc(
1662
- var(--propskit-wheel-height) - var(--spacer-2-5)
1663
- );
1664
- }
1665
- }
1666
-
1667
2296
  &[disabled]:not([disabled="false"]) {
1668
2297
  pointer-events: none;
1669
2298
 
@@ -1679,8 +2308,9 @@ propskit-wheel {
1679
2308
  box-sizing: border-box;
1680
2309
  width: 100%;
1681
2310
  height: 100%;
1682
- border-radius: var(--radius-medium);
1683
- background-color: var(--figma-color-bg-secondary);
2311
+ border-radius: var(--radius-medium-large);
2312
+ background: var(--_propskit-background);
2313
+ color: var(--_propskit-color);
1684
2314
  overflow: hidden;
1685
2315
  cursor: ew-resize;
1686
2316
  touch-action: none;
@@ -1696,24 +2326,30 @@ propskit-wheel {
1696
2326
  position: absolute;
1697
2327
  inset: 0;
1698
2328
  border-radius: inherit;
2329
+ border: var(--_propskit-border);
1699
2330
  pointer-events: none;
1700
2331
  }
1701
2332
 
1702
- &:hover::after {
1703
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
1704
- }
2333
+ &:hover {
2334
+ background: var(--_propskit-hover-background);
2335
+ color: var(--_propskit-hover-color);
1705
2336
 
1706
- > label {
2337
+ &::after {
2338
+ border: var(--_propskit-hover-border);
2339
+ }
2340
+ }
2341
+
2342
+ > label {
1707
2343
  position: absolute;
1708
2344
  inset: 0;
1709
2345
  z-index: 1;
1710
2346
  display: block;
1711
2347
  box-sizing: border-box;
1712
- width: 75%;
1713
- max-width: 75%;
1714
- padding: 0 0 0 var(--spacer-2-5);
2348
+ width: var(--_propskit-label-inline-size);
2349
+ max-width: var(--_propskit-label-inline-size);
2350
+ padding-inline-start: var(--spacer-2-5);
1715
2351
  overflow: hidden;
1716
- color: var(--figma-color-text-secondary);
2352
+ color: inherit;
1717
2353
  text-overflow: ellipsis;
1718
2354
  white-space: nowrap;
1719
2355
  align-content: center;
@@ -1743,12 +2379,12 @@ propskit-wheel {
1743
2379
  box-shadow: none !important;
1744
2380
  font-variant-numeric: var(--font-variant-numeric);
1745
2381
  position: absolute;
1746
- right: var(--propskit-wheel-number-right);
2382
+ inset-inline-end: var(--propskit-wheel-number-right);
1747
2383
  top: 50%;
1748
2384
  bottom: auto;
1749
2385
  z-index: 2;
1750
2386
  height: var(--control-height);
1751
- width: fit-content;
2387
+ width: var(--_propskit-input-inline-size);
1752
2388
  min-width: fit-content;
1753
2389
  max-width: max-content;
1754
2390
  flex: 0 0 auto;
@@ -1803,88 +2439,28 @@ body.propskit-slider-dragging * {
1803
2439
  }
1804
2440
 
1805
2441
  :is(
1806
- propskit-switch,
1807
- propskit-color,
1808
- propskit-fill,
1809
- propskit-gradient,
1810
- propskit-select,
1811
- propskit-text,
1812
- propskit-number,
1813
- propskit-slider
1814
- ) fig-field:not([direction="vertical"]) > label {
2442
+ .propskit-switch-surface,
2443
+ .propskit-color-surface,
2444
+ .propskit-fill-surface,
2445
+ .propskit-gradient-surface,
2446
+ .propskit-select-surface,
2447
+ .propskit-slider-surface
2448
+ ) > label {
1815
2449
  position: absolute;
1816
2450
  inset: 0;
1817
2451
  z-index: 1;
1818
2452
  display: block;
1819
2453
  align-content: center;
1820
2454
  box-sizing: border-box;
1821
- width: 75%;
1822
- max-width: 75%;
1823
- padding: 0 0 0 var(--spacer-2);
2455
+ width: var(--_propskit-label-inline-size);
2456
+ max-width: var(--_propskit-label-inline-size);
2457
+ padding-inline-start: var(--spacer-2-5);
1824
2458
  overflow: hidden;
1825
2459
  text-overflow: ellipsis;
1826
2460
  white-space: nowrap;
1827
2461
  pointer-events: none;
1828
2462
  }
1829
2463
 
1830
- :is(
1831
- propskit-switch,
1832
- propskit-color,
1833
- propskit-fill,
1834
- propskit-gradient,
1835
- propskit-select,
1836
- propskit-text,
1837
- propskit-number,
1838
- propskit-slider
1839
- ) {
1840
- fig-field {
1841
- --fig-field-label-max-height: var(--spacer-5);
1842
- }
1843
-
1844
- fig-field:not([direction="vertical"]) > label {
1845
- padding-left: var(--spacer-2-5);
1846
- }
1847
- }
1848
-
1849
- :is(
1850
- propskit-switch,
1851
- propskit-color,
1852
- propskit-fill,
1853
- propskit-gradient,
1854
- propskit-select,
1855
- propskit-text,
1856
- propskit-number,
1857
- propskit-slider
1858
- )[size="small"] {
1859
- fig-field {
1860
- --fig-field-label-max-height: var(--spacer-4);
1861
- }
1862
-
1863
- fig-field:not([direction="vertical"]) > label {
1864
- padding-left: var(--spacer-2);
1865
- }
1866
- }
1867
-
1868
- :is(
1869
- propskit-switch,
1870
- propskit-color,
1871
- propskit-fill,
1872
- propskit-gradient,
1873
- propskit-text,
1874
- propskit-number,
1875
- propskit-slider
1876
- )[size="small"] {
1877
- fig-field:not([direction="vertical"]) {
1878
- padding-left: var(--spacer-2);
1879
- }
1880
- }
1881
-
1882
- :is(propskit-text, propskit-number)[size="small"] {
1883
- fig-field > :is(fig-input-text, fig-input-number) {
1884
- margin-right: 0;
1885
- }
1886
- }
1887
-
1888
2464
  propskit-color-point,
1889
2465
  propskit-point-point,
1890
2466
  propskit-point-radius,
@@ -1894,8 +2470,49 @@ propskit-point-radius-angle {
1894
2470
 
1895
2471
  propskit-position {
1896
2472
  --propskit-position-height: 2rem;
1897
- --propskit-position-vertical-padding: var(--spacer-1);
1898
- --propskit-position-horizontal-padding: var(--spacer-3);
2473
+ --_propskit-padding-block: var(
2474
+ --propskit-position-padding-block,
2475
+ var(--propskit-padding-block, var(--spacer-1))
2476
+ );
2477
+ --_propskit-padding-inline: var(
2478
+ --propskit-position-padding-inline,
2479
+ var(--propskit-padding-inline, var(--spacer-3))
2480
+ );
2481
+ --_propskit-background: var(
2482
+ --propskit-position-background,
2483
+ var(--propskit-background, var(--figma-color-bg-secondary))
2484
+ );
2485
+ --_propskit-border: var(
2486
+ --propskit-position-border,
2487
+ var(--propskit-border, 0 solid transparent)
2488
+ );
2489
+ --_propskit-color: var(
2490
+ --propskit-position-color,
2491
+ var(--propskit-color, var(--figma-color-text-secondary))
2492
+ );
2493
+ --_propskit-hover-background: var(
2494
+ --propskit-position-hover-background,
2495
+ var(--propskit-hover-background, var(--_propskit-background))
2496
+ );
2497
+ --_propskit-hover-border: var(
2498
+ --propskit-position-hover-border,
2499
+ var(
2500
+ --propskit-hover-border,
2501
+ 1px solid var(--figma-color-bordertranslucent)
2502
+ )
2503
+ );
2504
+ --_propskit-hover-color: var(
2505
+ --propskit-position-hover-color,
2506
+ var(--propskit-hover-color, var(--_propskit-color))
2507
+ );
2508
+ --_propskit-label-inline-size: var(
2509
+ --propskit-position-label-inline-size,
2510
+ var(--propskit-label-inline-size, auto)
2511
+ );
2512
+ --_propskit-input-inline-size: var(
2513
+ --propskit-position-input-inline-size,
2514
+ var(--propskit-input-inline-size, 3.85rem)
2515
+ );
1899
2516
  --figma-focus-outline-offset: 1px;
1900
2517
 
1901
2518
  display: flex;
@@ -1903,28 +2520,18 @@ propskit-position {
1903
2520
  gap: var(--spacer-1);
1904
2521
  box-sizing: border-box;
1905
2522
  width: 100%;
1906
- padding: var(--propskit-position-vertical-padding)
1907
- var(--propskit-position-horizontal-padding);
1908
-
1909
- &[size="small"] {
1910
- --propskit-position-height: 1.5rem;
1911
-
1912
- .propskit-position-row {
1913
- --fig-field-label-max-height: var(--spacer-4);
1914
- padding-left: var(--spacer-2);
1915
- }
1916
- }
2523
+ padding-block: var(--_propskit-padding-block);
2524
+ padding-inline: var(--_propskit-padding-inline);
1917
2525
 
1918
2526
  &[disabled]:not([disabled="false"]) {
1919
2527
  pointer-events: none;
1920
2528
 
1921
- .propskit-position-row > label {
2529
+ .propskit-position-surface > label {
1922
2530
  color: var(--figma-color-text-disabled);
1923
2531
  }
1924
2532
  }
1925
2533
 
1926
- .propskit-position-row {
1927
- --fig-field-label-max-height: var(--spacer-5);
2534
+ .propskit-position-surface {
1928
2535
  position: relative;
1929
2536
  display: flex;
1930
2537
  align-items: center;
@@ -1933,21 +2540,27 @@ propskit-position {
1933
2540
  min-width: 0;
1934
2541
  height: var(--propskit-position-height);
1935
2542
  min-height: var(--propskit-position-height);
1936
- padding: 0 var(--spacer-1) 0 var(--spacer-2-5);
1937
- padding-right: 0;
1938
- border-radius: var(--radius-medium);
1939
- background-color: var(--figma-color-bg-secondary);
2543
+ padding-inline-start: var(--spacer-2-5);
2544
+ border-radius: var(--radius-medium-large);
2545
+ background: var(--_propskit-background);
2546
+ color: var(--_propskit-color);
1940
2547
 
1941
2548
  &::after {
1942
2549
  content: "";
1943
2550
  position: absolute;
1944
2551
  inset: 0;
1945
2552
  border-radius: inherit;
2553
+ border: var(--_propskit-border);
1946
2554
  pointer-events: none;
1947
2555
  }
1948
2556
 
1949
- &:hover::after {
1950
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
2557
+ &:hover {
2558
+ background: var(--_propskit-hover-background);
2559
+ color: var(--_propskit-hover-color);
2560
+
2561
+ &::after {
2562
+ border: var(--_propskit-hover-border);
2563
+ }
1951
2564
  }
1952
2565
 
1953
2566
  & > label {
@@ -1956,11 +2569,12 @@ propskit-position {
1956
2569
  display: flex;
1957
2570
  align-items: center;
1958
2571
  flex: 1 1 auto;
2572
+ inline-size: var(--_propskit-label-inline-size);
1959
2573
  min-width: 0;
1960
2574
  margin: 0 auto 0 0;
1961
2575
  padding: 0;
1962
2576
  overflow: hidden;
1963
- color: var(--figma-color-text-secondary);
2577
+ color: inherit;
1964
2578
  text-overflow: ellipsis;
1965
2579
  white-space: nowrap;
1966
2580
  pointer-events: none;
@@ -1975,7 +2589,7 @@ propskit-position {
1975
2589
  }
1976
2590
 
1977
2591
  fig-input-number {
1978
- width: 3.85rem;
2592
+ width: var(--_propskit-input-inline-size);
1979
2593
  height: var(--control-height);
1980
2594
  border: 0;
1981
2595
  background-color: transparent;
@@ -1996,79 +2610,511 @@ propskit-position {
1996
2610
  }
1997
2611
  }
1998
2612
 
1999
- :is(
2000
- propskit-number,
2001
- propskit-position
2002
- ) fig-input-number:is(:focus-within, :active, :has(input:active)) {
2003
- background-color: var(--figma-color-bg);
2004
- }
2613
+ propskit-joystick {
2614
+ --_propskit-padding-block: var(
2615
+ --propskit-joystick-padding-block,
2616
+ var(--propskit-padding-block, var(--spacer-1))
2617
+ );
2618
+ --_propskit-padding-inline: var(
2619
+ --propskit-joystick-padding-inline,
2620
+ var(--propskit-padding-inline, var(--spacer-3))
2621
+ );
2622
+ --_propskit-background: var(
2623
+ --propskit-joystick-background,
2624
+ var(--propskit-background, var(--figma-color-bg-secondary))
2625
+ );
2626
+ --_propskit-border: var(
2627
+ --propskit-joystick-border,
2628
+ var(--propskit-border, 0 solid transparent)
2629
+ );
2630
+ --_propskit-color: var(
2631
+ --propskit-joystick-color,
2632
+ var(--propskit-color, var(--figma-color-text-secondary))
2633
+ );
2634
+ --_propskit-hover-background: var(
2635
+ --propskit-joystick-hover-background,
2636
+ var(--propskit-hover-background, var(--_propskit-background))
2637
+ );
2638
+ --_propskit-hover-border: var(
2639
+ --propskit-joystick-hover-border,
2640
+ var(
2641
+ --propskit-hover-border,
2642
+ 1px solid var(--figma-color-bordertranslucent)
2643
+ )
2644
+ );
2645
+ --_propskit-hover-color: var(
2646
+ --propskit-joystick-hover-color,
2647
+ var(--propskit-hover-color, var(--_propskit-color))
2648
+ );
2649
+ --_propskit-label-inline-size: var(
2650
+ --propskit-joystick-label-inline-size,
2651
+ var(--propskit-label-inline-size, 100%)
2652
+ );
2653
+ --_propskit-input-inline-size: var(
2654
+ --propskit-joystick-input-inline-size,
2655
+ var(--propskit-input-inline-size, 100%)
2656
+ );
2005
2657
 
2006
- :is(
2007
- propskit-slider,
2008
- propskit-wheel
2009
- ) fig-input-number:has(input:focus) {
2010
- background-color: var(--figma-color-bg);
2011
- }
2658
+ display: block;
2659
+ box-sizing: border-box;
2660
+ width: 100%;
2661
+ padding-block: var(--_propskit-padding-block);
2662
+ padding-inline: var(--_propskit-padding-inline);
2012
2663
 
2013
- :is(
2014
- propskit-switch,
2015
- propskit-color,
2016
- propskit-fill,
2017
- propskit-gradient,
2018
- propskit-select,
2019
- propskit-text,
2020
- propskit-number,
2021
- propskit-slider,
2022
- propskit-position,
2023
- propskit-wheel
2024
- )[variant="minimal"] {
2025
- --propskit-switch-vertical-padding: 0px;
2026
- --propskit-color-vertical-padding: 0px;
2027
- --propskit-gradient-vertical-padding: 0px;
2028
- --propskit-select-vertical-padding: 0px;
2029
- --propskit-text-vertical-padding: 0px;
2030
- --propskit-number-vertical-padding: 0px;
2031
- --propskit-slider-vertical-padding: 0px;
2032
- --propskit-position-vertical-padding: 0px;
2033
- --propskit-wheel-vertical-padding: 0px;
2034
-
2035
- & > fig-field {
2036
- background-color: transparent;
2664
+ .propskit-joystick-surface {
2665
+ position: relative;
2666
+ display: flex;
2667
+ flex-direction: column;
2668
+ align-items: stretch;
2669
+ gap: var(--spacer-2);
2670
+ box-sizing: border-box;
2671
+ width: 100%;
2672
+ min-width: 0;
2673
+ padding: var(--spacer-2);
2674
+ border-radius: var(--radius-medium-large);
2675
+ background: var(--_propskit-background);
2676
+ color: var(--_propskit-color);
2677
+
2678
+ &::after {
2679
+ content: "";
2680
+ position: absolute;
2681
+ inset: 0;
2682
+ border: var(--_propskit-border);
2683
+ border-radius: inherit;
2684
+ pointer-events: none;
2685
+ }
2037
2686
 
2038
2687
  &:hover {
2039
- background-color: var(--figma-color-bg-secondary);
2688
+ background: var(--_propskit-hover-background);
2689
+ color: var(--_propskit-hover-color);
2040
2690
 
2041
2691
  &::after {
2042
- box-shadow: none;
2692
+ border: var(--_propskit-hover-border);
2043
2693
  }
2044
2694
  }
2695
+
2696
+ & > label {
2697
+ display: block;
2698
+ width: var(--_propskit-label-inline-size);
2699
+ min-width: 0;
2700
+ margin: 0;
2701
+ padding: 0;
2702
+ padding-inline-start: calc(var(--spacer-2-5) - var(--spacer-2));
2703
+ overflow: hidden;
2704
+ color: inherit;
2705
+ text-overflow: ellipsis;
2706
+ white-space: nowrap;
2707
+ pointer-events: none;
2708
+ }
2709
+ }
2710
+
2711
+ fig-joystick {
2712
+ --size: 100%;
2713
+ align-self: flex-end;
2714
+ width: var(--_propskit-input-inline-size);
2715
+ min-width: 0;
2716
+
2717
+ .fig-input-joystick-guides {
2718
+ background-color: var(
2719
+ --propskit-bg-subfield,
2720
+ rgba(255, 255, 255, 0.05)
2721
+ );
2722
+ --figma-color-border: var(
2723
+ --propskit-color-border-subfield,
2724
+ var(--figma-color-bordertranslucent)
2725
+ );
2726
+ }
2727
+
2728
+ .joystick-values > fig-input-number {
2729
+ border: 0;
2730
+ background-color: var(
2731
+ --propskit-bg-subfield,
2732
+ rgba(255, 255, 255, 0.05)
2733
+ );
2734
+ box-shadow: none;
2735
+ }
2736
+
2737
+ .fig-joystick-reset {
2738
+ display: none;
2739
+ }
2740
+ }
2741
+
2742
+ &[variant="minimal"] .propskit-joystick-surface {
2743
+ background: transparent;
2744
+ }
2745
+
2746
+ &[disabled]:not([disabled="false"]) {
2747
+ .propskit-joystick-surface {
2748
+ color: var(--figma-color-text-disabled);
2749
+ }
2750
+
2751
+ fig-joystick {
2752
+ filter: grayscale(100%);
2753
+ opacity: 0.5;
2754
+ }
2045
2755
  }
2046
2756
  }
2047
2757
 
2048
- propskit-wheel[variant="minimal"] {
2049
- .propskit-wheel-surface {
2050
- background-color: transparent;
2758
+ propskit-origin {
2759
+ --_propskit-padding-block: var(
2760
+ --propskit-origin-padding-block,
2761
+ var(--propskit-padding-block, var(--spacer-1))
2762
+ );
2763
+ --_propskit-padding-inline: var(
2764
+ --propskit-origin-padding-inline,
2765
+ var(--propskit-padding-inline, var(--spacer-3))
2766
+ );
2767
+ --_propskit-background: var(
2768
+ --propskit-origin-background,
2769
+ var(--propskit-background, var(--figma-color-bg-secondary))
2770
+ );
2771
+ --_propskit-border: var(
2772
+ --propskit-origin-border,
2773
+ var(--propskit-border, 0 solid transparent)
2774
+ );
2775
+ --_propskit-color: var(
2776
+ --propskit-origin-color,
2777
+ var(--propskit-color, var(--figma-color-text-secondary))
2778
+ );
2779
+ --_propskit-hover-background: var(
2780
+ --propskit-origin-hover-background,
2781
+ var(--propskit-hover-background, var(--_propskit-background))
2782
+ );
2783
+ --_propskit-hover-border: var(
2784
+ --propskit-origin-hover-border,
2785
+ var(
2786
+ --propskit-hover-border,
2787
+ 1px solid var(--figma-color-bordertranslucent)
2788
+ )
2789
+ );
2790
+ --_propskit-hover-color: var(
2791
+ --propskit-origin-hover-color,
2792
+ var(--propskit-hover-color, var(--_propskit-color))
2793
+ );
2794
+ --_propskit-label-inline-size: var(
2795
+ --propskit-origin-label-inline-size,
2796
+ var(--propskit-label-inline-size, 100%)
2797
+ );
2798
+ --_propskit-input-inline-size: var(
2799
+ --propskit-origin-input-inline-size,
2800
+ var(--propskit-input-inline-size, 100%)
2801
+ );
2802
+ }
2803
+
2804
+ propskit-easing {
2805
+ --_propskit-padding-block: var(
2806
+ --propskit-easing-padding-block,
2807
+ var(--propskit-padding-block, var(--spacer-1))
2808
+ );
2809
+ --_propskit-padding-inline: var(
2810
+ --propskit-easing-padding-inline,
2811
+ var(--propskit-padding-inline, var(--spacer-3))
2812
+ );
2813
+ --_propskit-background: var(
2814
+ --propskit-easing-background,
2815
+ var(--propskit-background, var(--figma-color-bg-secondary))
2816
+ );
2817
+ --_propskit-border: var(
2818
+ --propskit-easing-border,
2819
+ var(--propskit-border, 0 solid transparent)
2820
+ );
2821
+ --_propskit-color: var(
2822
+ --propskit-easing-color,
2823
+ var(--propskit-color, var(--figma-color-text-secondary))
2824
+ );
2825
+ --_propskit-hover-background: var(
2826
+ --propskit-easing-hover-background,
2827
+ var(--propskit-hover-background, var(--_propskit-background))
2828
+ );
2829
+ --_propskit-hover-border: var(
2830
+ --propskit-easing-hover-border,
2831
+ var(
2832
+ --propskit-hover-border,
2833
+ 1px solid var(--figma-color-bordertranslucent)
2834
+ )
2835
+ );
2836
+ --_propskit-hover-color: var(
2837
+ --propskit-easing-hover-color,
2838
+ var(--propskit-hover-color, var(--_propskit-color))
2839
+ );
2840
+ --_propskit-label-inline-size: var(
2841
+ --propskit-easing-label-inline-size,
2842
+ var(--propskit-label-inline-size, 100%)
2843
+ );
2844
+ --_propskit-input-inline-size: var(
2845
+ --propskit-easing-input-inline-size,
2846
+ var(--propskit-input-inline-size, 100%)
2847
+ );
2848
+ }
2849
+
2850
+ propskit-spring {
2851
+ --_propskit-padding-block: var(
2852
+ --propskit-spring-padding-block,
2853
+ var(--propskit-padding-block, var(--spacer-1))
2854
+ );
2855
+ --_propskit-padding-inline: var(
2856
+ --propskit-spring-padding-inline,
2857
+ var(--propskit-padding-inline, var(--spacer-3))
2858
+ );
2859
+ --_propskit-background: var(
2860
+ --propskit-spring-background,
2861
+ var(--propskit-background, var(--figma-color-bg-secondary))
2862
+ );
2863
+ --_propskit-border: var(
2864
+ --propskit-spring-border,
2865
+ var(--propskit-border, 0 solid transparent)
2866
+ );
2867
+ --_propskit-color: var(
2868
+ --propskit-spring-color,
2869
+ var(--propskit-color, var(--figma-color-text-secondary))
2870
+ );
2871
+ --_propskit-hover-background: var(
2872
+ --propskit-spring-hover-background,
2873
+ var(--propskit-hover-background, var(--_propskit-background))
2874
+ );
2875
+ --_propskit-hover-border: var(
2876
+ --propskit-spring-hover-border,
2877
+ var(
2878
+ --propskit-hover-border,
2879
+ 1px solid var(--figma-color-bordertranslucent)
2880
+ )
2881
+ );
2882
+ --_propskit-hover-color: var(
2883
+ --propskit-spring-hover-color,
2884
+ var(--propskit-hover-color, var(--_propskit-color))
2885
+ );
2886
+ --_propskit-label-inline-size: var(
2887
+ --propskit-spring-label-inline-size,
2888
+ var(--propskit-label-inline-size, 100%)
2889
+ );
2890
+ --_propskit-input-inline-size: var(
2891
+ --propskit-spring-input-inline-size,
2892
+ var(--propskit-input-inline-size, 100%)
2893
+ );
2894
+ }
2895
+
2896
+ :is(propskit-origin, propskit-easing, propskit-spring) {
2897
+ display: block;
2898
+ box-sizing: border-box;
2899
+ width: 100%;
2900
+ padding-block: var(--_propskit-padding-block);
2901
+ padding-inline: var(--_propskit-padding-inline);
2902
+
2903
+ & > :is(
2904
+ .propskit-origin-surface,
2905
+ .propskit-easing-surface,
2906
+ .propskit-spring-surface
2907
+ ) {
2908
+ position: relative;
2909
+ display: flex;
2910
+ flex-direction: column;
2911
+ align-items: stretch;
2912
+ gap: var(--spacer-2);
2913
+ box-sizing: border-box;
2914
+ width: 100%;
2915
+ min-width: 0;
2916
+ padding: var(--spacer-2);
2917
+ border-radius: var(--radius-medium-large);
2918
+ background: var(--_propskit-background);
2919
+ color: var(--_propskit-color);
2920
+
2921
+ &::after {
2922
+ content: "";
2923
+ position: absolute;
2924
+ inset: 0;
2925
+ border: var(--_propskit-border);
2926
+ border-radius: inherit;
2927
+ pointer-events: none;
2928
+ }
2051
2929
 
2052
2930
  &:hover {
2053
- background-color: var(--figma-color-bg-secondary);
2931
+ background: var(--_propskit-hover-background);
2932
+ color: var(--_propskit-hover-color);
2054
2933
 
2055
2934
  &::after {
2056
- box-shadow: none;
2935
+ border: var(--_propskit-hover-border);
2057
2936
  }
2058
2937
  }
2938
+
2939
+ & > label {
2940
+ display: block;
2941
+ width: var(--_propskit-label-inline-size);
2942
+ min-width: 0;
2943
+ margin: 0;
2944
+ padding: 0;
2945
+ padding-inline-start: calc(var(--spacer-2-5) - var(--spacer-2));
2946
+ overflow: hidden;
2947
+ color: inherit;
2948
+ text-overflow: ellipsis;
2949
+ white-space: nowrap;
2950
+ pointer-events: none;
2951
+ }
2952
+ }
2953
+
2954
+ &[variant="minimal"] > :is(
2955
+ .propskit-origin-surface,
2956
+ .propskit-easing-surface,
2957
+ .propskit-spring-surface
2958
+ ) {
2959
+ background: transparent;
2960
+ }
2961
+
2962
+ &[disabled]:not([disabled="false"]) {
2963
+ & > :is(
2964
+ .propskit-origin-surface,
2965
+ .propskit-easing-surface,
2966
+ .propskit-spring-surface
2967
+ ) {
2968
+ color: var(--figma-color-text-disabled);
2969
+ }
2970
+
2971
+ :is(fig-origin-grid, fig-easing-curve) {
2972
+ filter: grayscale(100%);
2973
+ opacity: 0.5;
2974
+ }
2059
2975
  }
2060
2976
  }
2061
2977
 
2062
- propskit-slider[variant="minimal"] {
2063
- & > fig-field fig-slider .fig-slider-input-container {
2064
- background-color: transparent !important;
2978
+ propskit-origin {
2979
+ fig-origin-grid {
2980
+ --figma-color-border: var(
2981
+ --propskit-color-border-subfield,
2982
+ var(--figma-color-bordertranslucent)
2983
+ );
2065
2984
 
2066
- &:hover::after {
2067
- box-shadow: none !important;
2985
+ align-self: flex-end;
2986
+ width: var(--_propskit-input-inline-size);
2987
+ min-width: 0;
2988
+
2989
+ .origin-grid,
2990
+ .origin-values > fig-input-number {
2991
+ background-color: var(
2992
+ --propskit-bg-subfield,
2993
+ rgba(255, 255, 255, 0.05)
2994
+ );
2995
+ }
2996
+ }
2997
+ }
2998
+
2999
+ :is(propskit-easing, propskit-spring) {
3000
+ fig-easing-curve {
3001
+ --figma-color-border: var(
3002
+ --propskit-color-border-subfield,
3003
+ var(--figma-color-bordertranslucent)
3004
+ );
3005
+
3006
+ align-self: flex-end;
3007
+ width: var(--_propskit-input-inline-size);
3008
+ min-width: 0;
3009
+
3010
+ .fig-easing-curve-svg-container,
3011
+ .fig-easing-curve-value-input {
3012
+ background-color: var(
3013
+ --propskit-bg-subfield,
3014
+ rgba(255, 255, 255, 0.05)
3015
+ );
2068
3016
  }
3017
+
3018
+ .fig-easing-curve-boundary,
3019
+ .fig-easing-curve-target {
3020
+ stroke: var(
3021
+ --propskit-color-border-subfield,
3022
+ var(--figma-color-bordertranslucent)
3023
+ );
3024
+ }
3025
+ }
3026
+ }
3027
+
3028
+ :is(propskit-easing, propskit-spring)
3029
+ fig-easing-curve
3030
+ .fig-easing-curve-select {
3031
+ background-color: var(
3032
+ --propskit-bg-subfield,
3033
+ rgba(255, 255, 255, 0.05)
3034
+ );
3035
+
3036
+ &:hover:not([disabled]):not([disabled="false"]) {
3037
+ background-color: var(
3038
+ --propskit-bg-subfield,
3039
+ rgba(255, 255, 255, 0.05)
3040
+ );
2069
3041
  }
2070
3042
  }
2071
3043
 
3044
+ :is(
3045
+ propskit-number,
3046
+ propskit-position,
3047
+ propskit-joystick,
3048
+ propskit-origin
3049
+ ) fig-input-number:is(:focus-within, :active, :has(input:active)) {
3050
+ background-color: var(--figma-color-bg);
3051
+ }
3052
+
3053
+ propskit-text
3054
+ fig-input-text:is(
3055
+ :focus-within,
3056
+ :active,
3057
+ :has(:is(input, textarea):active)
3058
+ ) {
3059
+ background-color: var(--figma-color-bg);
3060
+ }
3061
+
3062
+ :is(
3063
+ propskit-slider,
3064
+ propskit-wheel
3065
+ ) fig-input-number:has(input:focus) {
3066
+ background-color: var(--figma-color-bg);
3067
+ }
3068
+
3069
+ :is(
3070
+ propskit-palette,
3071
+ propskit-select,
3072
+ propskit-text,
3073
+ propskit-number,
3074
+ propskit-slider,
3075
+ propskit-wheel
3076
+ )
3077
+ :is(
3078
+ .propskit-palette-surface,
3079
+ .propskit-select-surface,
3080
+ .propskit-text-surface,
3081
+ .propskit-number-surface,
3082
+ .propskit-slider-surface,
3083
+ .propskit-wheel-surface
3084
+ ):focus-within,
3085
+ :is(propskit-color, propskit-fill, propskit-gradient):is(
3086
+ :focus-within,
3087
+ .has-popup-open
3088
+ )
3089
+ :is(
3090
+ .propskit-color-surface,
3091
+ .propskit-fill-surface,
3092
+ .propskit-gradient-surface
3093
+ ) {
3094
+ outline: var(--figma-focus-outline);
3095
+ outline-offset: var(--figma-focus-outline-offset);
3096
+ outline-color: transparent;
3097
+ overflow: visible;
3098
+
3099
+ &::before {
3100
+ content: "";
3101
+ position: absolute;
3102
+ inset: calc(-1px - var(--figma-focus-outline-offset));
3103
+ box-sizing: border-box;
3104
+ border: var(--figma-focus-outline);
3105
+ border-radius: calc(
3106
+ var(--figma-focus-outline-radius) + var(--figma-focus-outline-offset) +
3107
+ 1px
3108
+ );
3109
+ pointer-events: none;
3110
+ z-index: 4;
3111
+ }
3112
+ }
3113
+
3114
+ :is(.propskit-palette-surface, .propskit-select-surface) fig-select::part(trigger) {
3115
+ outline: none;
3116
+ }
3117
+
2072
3118
  /* Canvas Control */
2073
3119
  body {
2074
3120
  --fig-lab-cursor: url('data:image/svg+xml,<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(%23clip0_20065_231516)"><g filter="url(%23filter0_d_20065_231516)"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.93938 2.93938C3.35531 2.52345 3.97597 2.38901 4.52673 2.59555L15.5267 6.72055C16.1416 6.95111 16.535 7.55477 16.4976 8.21034C16.4603 8.86592 16.0009 9.421 15.3638 9.58026L10.737 10.737L9.58026 15.3638C9.421 16.0009 8.86592 16.4603 8.21034 16.4976C7.55477 16.535 6.95111 16.1416 6.72055 15.5267L2.59555 4.52673C2.38901 3.97597 2.52345 3.35531 2.93938 2.93938Z" fill="white"/></g><path fill-rule="evenodd" clip-rule="evenodd" d="M4.17558 3.53185C3.99199 3.463 3.7851 3.50782 3.64646 3.64646C3.50782 3.7851 3.463 3.99199 3.53185 4.17558L7.65685 15.1756C7.7337 15.3805 7.93492 15.5117 8.15345 15.4992C8.37197 15.4868 8.557 15.3336 8.61009 15.1213L9.91232 9.91232L15.1213 8.61009C15.3336 8.557 15.4868 8.37197 15.4992 8.15345C15.5117 7.93492 15.3805 7.7337 15.1756 7.65685L4.17558 3.53185Z" fill="black"/></g><defs><filter id="filter0_d_20065_231516" x="-0.5" y="0.5" width="20" height="20" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/><feOffset dy="1"/><feGaussianBlur stdDeviation="1.5"/><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0"/><feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_20065_231516"/><feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_20065_231516" result="shape"/></filter><clipPath id="clip0_20065_231516"><rect width="32" height="32" fill="white"/></clipPath></defs></svg>') 3 3, default;
@@ -2298,7 +3344,7 @@ propskit-oscillator {
2298
3344
  --propskit-oscillator-playhead-radius: 5px;
2299
3345
 
2300
3346
  .propskit-oscillator-svg-container {
2301
- border-radius: var(--radius-medium);
3347
+ border-radius: var(--radius-medium-large);
2302
3348
  padding: var(--spacer-3) var(--spacer-5);
2303
3349
  margin-bottom: var(--spacer-2);
2304
3350
  overflow: hidden;
@@ -2309,7 +3355,7 @@ propskit-oscillator {
2309
3355
  inset: 0 var(--spacer-3);
2310
3356
  content: "";
2311
3357
  background: var(--figma-color-bg-secondary);
2312
- border-radius: var(--radius-medium);
3358
+ border-radius: var(--radius-medium-large);
2313
3359
  }
2314
3360
 
2315
3361
  &:is(:hover, :active, :focus, :focus-visible, :focus-within) {