@rogieking/figui3 8.9.49 → 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%;
@@ -362,9 +404,13 @@ fig-content:has(> propskit-group[name]:last-child) {
362
404
  propskit-fill,
363
405
  propskit-gradient,
364
406
  propskit-select,
407
+ propskit-easing,
365
408
  propskit-text,
366
409
  propskit-number,
410
+ propskit-origin,
367
411
  propskit-position,
412
+ propskit-joystick,
413
+ propskit-spring,
368
414
  propskit-color-point,
369
415
  propskit-point-radius,
370
416
  propskit-point-radius-angle,
@@ -379,58 +425,70 @@ fig-content:has(> propskit-group[name]:last-child) {
379
425
  box-shadow: none;
380
426
  }
381
427
 
382
- /* Large is the default size: use wider field padding and nudge trailing
383
- controls in from the right. propskit-select uses shared label padding. */
384
- :is(
385
- propskit-switch,
386
- propskit-color,
387
- propskit-fill,
388
- propskit-gradient,
389
- propskit-text,
390
- propskit-number,
391
- propskit-slider
392
- ):not([size="small"]) {
393
- fig-field:not([direction="vertical"]) {
394
- padding-left: var(--spacer-2-5);
395
- }
396
- }
397
-
398
- /* Flex-positioned numbers — margin works. Absolute numbers use right: calc(...) below. */
399
- propskit-number {
400
- fig-field fig-input-number {
401
- margin-right: var(--spacer-1);
402
- }
403
- }
404
-
405
- propskit-text {
406
- fig-field > fig-input-text {
407
- margin-right: var(--spacer-1);
408
- }
409
- }
410
-
411
428
  propskit-switch {
412
429
  --propskit-switch-height: 2rem;
413
- --propskit-switch-vertical-padding: var(--spacer-1);
414
- --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
+ );
415
476
 
416
477
  display: block;
478
+ box-sizing: border-box;
417
479
  width: 100%;
418
480
  height: calc(
419
- var(--propskit-switch-height) + var(--propskit-switch-vertical-padding) * 2
481
+ var(--propskit-switch-height) + var(--_propskit-padding-block) * 2
420
482
  );
421
- padding: var(--propskit-switch-vertical-padding)
422
- var(--propskit-switch-horizontal-padding);
483
+ padding-block: var(--_propskit-padding-block);
484
+ padding-inline: var(--_propskit-padding-inline);
423
485
 
424
- &:not([size="small"]) fig-field:not([direction="vertical"]) {
425
- padding-right: var(--spacer-1);
486
+ &[variant="segmented-control"] {
487
+ --_propskit-switch-control-inline-size: 4.5rem;
426
488
  }
427
489
 
428
- &[size="small"] {
429
- --propskit-switch-height: 1.5rem;
430
-
431
- fig-field:not([direction="vertical"]) {
432
- padding-right: 0;
433
- }
490
+ &:not([variant="segmented-control"]) .propskit-switch-surface {
491
+ padding-inline-end: var(--spacer-2);
434
492
  }
435
493
 
436
494
  &[disabled]:not([disabled="false"]) {
@@ -441,25 +499,33 @@ propskit-switch {
441
499
  }
442
500
  }
443
501
 
444
- fig-field:not([direction="vertical"]) {
502
+ .propskit-switch-surface {
445
503
  position: relative;
446
504
  display: flex;
447
505
  align-items: center;
448
506
  height: 100%;
449
- padding: 0 0 0 var(--spacer-2);
450
- border-radius: var(--radius-medium);
451
- 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;
452
512
 
453
513
  &::after {
454
514
  content: "";
455
515
  position: absolute;
456
516
  inset: 0;
457
517
  border-radius: inherit;
518
+ border: var(--_propskit-border);
458
519
  pointer-events: none;
459
520
  }
460
521
 
461
- &:hover::after {
462
- 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
+ }
463
529
  }
464
530
 
465
531
  & > label {
@@ -469,9 +535,9 @@ propskit-switch {
469
535
  flex: 1 1 auto;
470
536
  min-width: 0;
471
537
  margin: 0;
472
- padding: 0;
473
538
  overflow: hidden;
474
- color: var(--figma-color-text-secondary);
539
+ max-inline-size: var(--_propskit-label-inline-size);
540
+ color: inherit;
475
541
  text-overflow: ellipsis;
476
542
  white-space: nowrap;
477
543
  pointer-events: none;
@@ -481,32 +547,125 @@ propskit-switch {
481
547
  }
482
548
  }
483
549
 
484
- fig-segmented-control {
550
+ :is(fig-switch, fig-segmented-control) {
485
551
  flex: 0 0 auto;
486
- margin-left: auto;
487
- 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;
488
560
  }
489
561
  }
490
562
  }
491
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
+
492
656
  propskit-color,
493
657
  propskit-fill {
494
658
  --propskit-color-height: 2rem;
495
- --propskit-color-vertical-padding: var(--spacer-1);
496
- --propskit-color-horizontal-padding: var(--spacer-3);
497
659
  --figma-focus-outline-offset: 1px;
498
660
 
499
661
  display: block;
662
+ box-sizing: border-box;
500
663
  width: 100%;
501
664
  height: calc(
502
- var(--propskit-color-height) + var(--propskit-color-vertical-padding) * 2
665
+ var(--propskit-color-height) + var(--_propskit-padding-block) * 2
503
666
  );
504
- padding: var(--propskit-color-vertical-padding)
505
- var(--propskit-color-horizontal-padding);
506
-
507
- &[size="small"] {
508
- --propskit-color-height: 1.5rem;
509
- }
667
+ padding-block: var(--_propskit-padding-block);
668
+ padding-inline: var(--_propskit-padding-inline);
510
669
 
511
670
  &[disabled]:not([disabled="false"]) {
512
671
  pointer-events: none;
@@ -516,26 +675,33 @@ propskit-fill {
516
675
  }
517
676
  }
518
677
 
519
- fig-field:not([direction="vertical"]) {
678
+ :is(.propskit-color-surface, .propskit-fill-surface) {
520
679
  position: relative;
521
680
  display: flex;
522
681
  align-items: center;
523
682
  gap: var(--spacer-2);
524
683
  height: 100%;
525
- padding: 0 0 0 var(--spacer-2);
526
- border-radius: var(--radius-medium);
527
- 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);
528
688
 
529
689
  &::after {
530
690
  content: "";
531
691
  position: absolute;
532
692
  inset: 0;
533
693
  border-radius: inherit;
694
+ border: var(--_propskit-border);
534
695
  pointer-events: none;
535
696
  }
536
697
 
537
- &:hover::after {
538
- 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
+ }
539
705
  }
540
706
 
541
707
  & > label {
@@ -544,12 +710,12 @@ propskit-fill {
544
710
  display: flex;
545
711
  align-items: center;
546
712
  flex: 0 1 auto;
547
- max-width: 40%;
713
+ max-inline-size: var(--_propskit-label-inline-size);
548
714
  min-width: 0;
549
715
  margin: 0;
550
716
  padding: 0;
551
717
  overflow: hidden;
552
- color: var(--figma-color-text-secondary);
718
+ color: inherit;
553
719
  text-overflow: ellipsis;
554
720
  white-space: nowrap;
555
721
  pointer-events: none;
@@ -565,10 +731,10 @@ propskit-fill {
565
731
 
566
732
  fig-swatch {
567
733
  position: relative;
568
- flex: 0 0 33%;
569
- width: 33%;
734
+ flex: 0 0 var(--_propskit-input-inline-size);
735
+ inline-size: var(--_propskit-input-inline-size);
570
736
  min-width: 0;
571
- margin-left: auto;
737
+ margin-inline-start: auto;
572
738
  overflow: hidden;
573
739
  contain: paint;
574
740
  --width: 100%;
@@ -583,24 +749,63 @@ propskit-fill {
583
749
 
584
750
  propskit-gradient {
585
751
  --propskit-gradient-height: 2rem;
586
- --propskit-gradient-vertical-padding: var(--spacer-1);
587
- --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
+ );
588
795
  --figma-focus-outline-offset: 1px;
589
796
 
590
797
  display: block;
798
+ box-sizing: border-box;
591
799
  width: 100%;
592
800
  height: calc(
593
- var(--propskit-gradient-height) + var(--propskit-gradient-vertical-padding) * 2
801
+ var(--propskit-gradient-height) + var(--_propskit-padding-block) * 2
594
802
  );
595
- padding: var(--propskit-gradient-vertical-padding)
596
- var(--propskit-gradient-horizontal-padding);
597
-
598
- &[size="small"] {
599
- --propskit-gradient-height: 1.5rem;
600
- }
803
+ padding-block: var(--_propskit-padding-block);
804
+ padding-inline: var(--_propskit-padding-inline);
601
805
 
602
806
  fig-input-gradient {
603
807
  --fig-input-gradient-height: var(--propskit-gradient-height);
808
+ --fig-input-gradient-swatch-border-radius: var(--radius-medium);
604
809
  height: var(--propskit-gradient-height);
605
810
 
606
811
  fig-swatch {
@@ -618,26 +823,33 @@ propskit-gradient {
618
823
  }
619
824
  }
620
825
 
621
- fig-field:not([direction="vertical"]) {
826
+ .propskit-gradient-surface {
622
827
  position: relative;
623
828
  display: flex;
624
829
  align-items: center;
625
830
  gap: var(--spacer-2);
626
831
  height: 100%;
627
- padding: 0 0 0 var(--spacer-2);
628
- border-radius: var(--radius-medium);
629
- 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);
630
836
 
631
837
  &::after {
632
838
  content: "";
633
839
  position: absolute;
634
840
  inset: 0;
635
841
  border-radius: inherit;
842
+ border: var(--_propskit-border);
636
843
  pointer-events: none;
637
844
  }
638
845
 
639
- &:hover::after {
640
- 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
+ }
641
853
  }
642
854
 
643
855
  & > label {
@@ -646,12 +858,12 @@ propskit-gradient {
646
858
  display: flex;
647
859
  align-items: center;
648
860
  flex: 0 1 auto;
649
- max-width: 40%;
861
+ max-inline-size: var(--_propskit-label-inline-size);
650
862
  min-width: 0;
651
863
  margin: 0;
652
864
  padding: 0;
653
865
  overflow: hidden;
654
- color: var(--figma-color-text-secondary);
866
+ color: inherit;
655
867
  text-overflow: ellipsis;
656
868
  white-space: nowrap;
657
869
  pointer-events: none;
@@ -663,10 +875,10 @@ propskit-gradient {
663
875
 
664
876
  fig-input-gradient {
665
877
  position: relative;
666
- flex: 0 0 33%;
667
- width: 33%;
878
+ flex: 0 0 var(--_propskit-input-inline-size);
879
+ inline-size: var(--_propskit-input-inline-size);
668
880
  min-width: 0;
669
- margin-left: auto;
881
+ margin-inline-start: auto;
670
882
  border-radius: var(--radius-medium);
671
883
  background-color: transparent;
672
884
  }
@@ -677,15 +889,21 @@ propskit-gradient {
677
889
  outline: none;
678
890
 
679
891
  fig-swatch {
892
+ --border-radius: var(--radius-medium);
893
+ --fig-swatch-border-radius: var(--radius-medium);
894
+
895
+ border-radius: var(--radius-medium);
680
896
  background-color: transparent !important;
681
897
  }
682
898
 
683
- fig-field:not([direction="vertical"]) {
899
+ :is(.propskit-color-surface, .propskit-fill-surface, .propskit-gradient-surface) {
684
900
  outline: none;
685
901
  }
686
902
 
687
- &:focus-within fig-field:not([direction="vertical"]),
688
- &.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) {
689
907
  outline: var(--figma-focus-outline);
690
908
  outline-offset: var(--figma-focus-outline-offset);
691
909
  }
@@ -716,59 +934,61 @@ propskit-gradient {
716
934
  }
717
935
  }
718
936
 
719
- propskit-select {
720
- --propskit-select-height: 2rem;
721
- --propskit-select-vertical-padding: var(--spacer-1);
722
- --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
+ );
723
982
  --figma-focus-outline-offset: 1px;
724
983
 
725
984
  display: block;
985
+ box-sizing: border-box;
726
986
  width: 100%;
727
987
  height: calc(
728
- var(--propskit-select-height) + var(--propskit-select-vertical-padding) * 2
988
+ var(--propskit-palette-height) + var(--_propskit-padding-block) * 2
729
989
  );
730
- padding: var(--propskit-select-vertical-padding)
731
- var(--propskit-select-horizontal-padding);
732
-
733
- fig-field:not([direction="vertical"]) {
734
- :is(fig-select, fig-dropdown) {
735
- padding-right: var(--spacer-1);
736
-
737
- &::after {
738
- right: calc(0.25rem + var(--spacer-1));
739
- }
740
- }
741
-
742
- fig-select::part(trigger) {
743
- padding-left: var(--spacer-2-5);
744
- }
745
-
746
- fig-dropdown > select {
747
- padding-left: var(--spacer-2-5);
748
- }
749
- }
750
-
751
- &[size="small"] {
752
- --propskit-select-height: 1.5rem;
753
-
754
- fig-field:not([direction="vertical"]) {
755
- :is(fig-select, fig-dropdown) {
756
- padding-right: 0;
757
-
758
- &::after {
759
- right: 0.25rem;
760
- }
761
- }
762
-
763
- fig-select::part(trigger) {
764
- padding-left: var(--spacer-2);
765
- }
766
-
767
- fig-dropdown > select {
768
- padding-left: var(--spacer-2);
769
- }
770
- }
771
- }
990
+ padding-block: var(--_propskit-padding-block);
991
+ padding-inline: var(--_propskit-padding-inline);
772
992
 
773
993
  &[disabled]:not([disabled="false"]) {
774
994
  pointer-events: none;
@@ -778,123 +998,384 @@ propskit-select {
778
998
  }
779
999
  }
780
1000
 
781
- fig-field:not([direction="vertical"]) {
1001
+ .propskit-palette-surface {
782
1002
  position: relative;
783
1003
  display: flex;
784
1004
  align-items: center;
1005
+ gap: var(--spacer-2);
1006
+ box-sizing: border-box;
785
1007
  height: 100%;
786
- /* Reset fig-field vertical padding so select fills the chrome. */
787
- padding: 0;
788
- border-radius: var(--radius-medium);
789
- 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;
790
1013
 
791
1014
  &::after {
792
1015
  content: "";
793
1016
  position: absolute;
794
1017
  inset: 0;
1018
+ border: var(--_propskit-border);
795
1019
  border-radius: inherit;
796
1020
  pointer-events: none;
797
1021
  }
798
1022
 
799
- &:hover::after {
800
- 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);
801
1035
  }
802
1036
 
803
- /* Label geometry comes from the shared propskit horizontal-label rules. */
804
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
+
805
1053
  fig-icon:first-child {
806
1054
  margin-left: calc(var(--spacer-1) * -1);
807
1055
  }
808
1056
  }
809
1057
 
810
- :is(fig-select, fig-dropdown) {
811
- position: relative;
1058
+ & > fig-select {
1059
+ --fig-select-trigger-width: 100%;
1060
+
1061
+ position: absolute;
1062
+ inset: 0;
1063
+ z-index: 1;
812
1064
  display: flex;
813
- flex: 1 1 auto;
814
- align-self: stretch;
815
- align-items: stretch;
816
1065
  width: 100%;
817
1066
  min-width: 0;
1067
+ max-width: none;
818
1068
  height: 100%;
819
- border-radius: var(--radius-medium);
1069
+ margin: 0;
1070
+ border-radius: inherit;
820
1071
  background: transparent;
821
1072
  box-shadow: none;
822
- }
823
-
824
- fig-select {
825
- --fig-select-trigger-width: 100%;
826
1073
 
827
- &::part(label) {
828
- 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;
829
1081
  }
830
- }
831
1082
 
832
- /* fig-dropdown fallback: match fig-select trigger layout in the field.
833
- Native select defaults to --spacer-4; stretch it to the field height. */
834
- fig-dropdown > select {
835
- flex: 1 1 auto;
836
- align-self: stretch;
837
- box-sizing: border-box;
838
- width: 100%;
839
- height: auto;
840
- min-height: 100%;
841
- padding: 0 var(--spacer-4) 0 var(--spacer-2);
842
- text-align: right;
843
- text-align-last: right;
844
- color: inherit;
845
- background: transparent;
846
- box-shadow: none;
1083
+ &::part(prepend) {
1084
+ display: flex;
1085
+ flex: 1 1 auto;
1086
+ min-width: 0;
1087
+ margin: 0;
1088
+ }
847
1089
  }
848
1090
  }
849
- }
850
1091
 
851
- propskit-text {
852
- --propskit-text-height: 2rem;
853
- --propskit-text-vertical-padding: var(--spacer-1);
854
- --propskit-text-horizontal-padding: var(--spacer-3);
855
- --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;
856
1097
 
857
- display: block;
858
- width: 100%;
859
- height: calc(
860
- var(--propskit-text-height) + var(--propskit-text-vertical-padding) * 2
861
- );
862
- padding: var(--propskit-text-vertical-padding)
863
- 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;
864
1103
 
865
- &[size="small"] {
866
- --propskit-text-height: 1.5rem;
867
- }
1104
+ &[hidden] {
1105
+ display: none !important;
1106
+ }
868
1107
 
869
- &[disabled]:not([disabled="false"]) {
870
- pointer-events: none;
1108
+ & > .palette-colors-inline {
1109
+ padding: 0;
1110
+ border-radius: var(--radius-medium);
1111
+ background: transparent;
871
1112
 
872
- label,
873
- input {
874
- color: var(--figma-color-text-disabled);
1113
+ & > .palette-colors {
1114
+ border-radius: var(--radius-medium);
1115
+ }
875
1116
  }
876
1117
  }
877
1118
 
878
- fig-field:not([direction="vertical"]) {
879
- 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;
880
1221
  display: flex;
881
1222
  align-items: center;
882
- gap: var(--spacer-2);
883
1223
  height: 100%;
884
- padding-left: var(--spacer-2);
885
- border-radius: var(--radius-medium);
886
- 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
+ }
887
1362
 
888
1363
  &::after {
889
1364
  content: "";
890
1365
  position: absolute;
891
1366
  inset: 0;
892
1367
  border-radius: inherit;
1368
+ border: var(--_propskit-border);
893
1369
  pointer-events: none;
894
1370
  }
895
1371
 
896
- &:hover::after {
897
- 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
+ }
898
1379
  }
899
1380
 
900
1381
  & > label {
@@ -902,14 +1383,14 @@ propskit-text {
902
1383
  z-index: 1;
903
1384
  display: flex;
904
1385
  align-items: center;
1386
+ align-self: flex-start;
905
1387
  flex: 0 0 auto;
906
- width: auto;
907
- max-width: 50%;
908
1388
  min-width: 0;
909
- margin: 0;
1389
+ margin: var(--spacer-1) 0 0;
910
1390
  padding: 0;
1391
+ max-inline-size: var(--_propskit-label-inline-size);
911
1392
  overflow: hidden;
912
- color: var(--figma-color-text-secondary);
1393
+ color: inherit;
913
1394
  text-overflow: ellipsis;
914
1395
  white-space: nowrap;
915
1396
  pointer-events: none;
@@ -925,33 +1406,39 @@ propskit-text {
925
1406
  position: relative;
926
1407
  align-self: center;
927
1408
  flex: 0 1 auto !important;
928
- width: fit-content !important;
1409
+ width: var(--_propskit-input-inline-size) !important;
929
1410
  max-width: none;
930
1411
  min-width: 0;
931
- margin-left: auto;
932
- height: var(--propskit-text-height);
1412
+ margin-inline-start: auto;
1413
+ min-height: var(--control-height);
933
1414
  border-radius: var(--radius-medium);
934
1415
  background-color: transparent;
935
1416
  box-shadow: none;
1417
+ outline: none !important;
936
1418
 
937
- &:has(input:focus) {
938
- outline: var(--figma-focus-outline) !important;
939
- outline-offset: var(--figma-focus-outline-offset) !important;
1419
+ &:has(:is(input, textarea):focus) {
1420
+ outline: none !important;
940
1421
  }
941
1422
 
942
- input {
943
- field-sizing: content;
1423
+ :is(input, textarea) {
944
1424
  width: auto;
945
1425
  max-width: 100%;
946
1426
  min-width: 0;
947
1427
  flex: 0 0 auto;
948
1428
  text-align: right;
1429
+ }
949
1430
 
950
- &:not(:focus) {
951
- overflow: hidden;
952
- text-overflow: ellipsis;
953
- white-space: nowrap;
954
- }
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;
955
1442
  }
956
1443
  }
957
1444
  }
@@ -959,21 +1446,59 @@ propskit-text {
959
1446
 
960
1447
  propskit-number {
961
1448
  --propskit-number-height: 2rem;
962
- --propskit-number-vertical-padding: var(--spacer-1);
963
- --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
+ );
964
1492
  --figma-focus-outline-offset: 1px;
965
1493
 
966
1494
  display: block;
1495
+ box-sizing: border-box;
967
1496
  width: 100%;
968
1497
  height: calc(
969
- var(--propskit-number-height) + var(--propskit-number-vertical-padding) * 2
1498
+ var(--propskit-number-height) + var(--_propskit-padding-block) * 2
970
1499
  );
971
- padding: var(--propskit-number-vertical-padding)
972
- var(--propskit-number-horizontal-padding);
973
-
974
- &[size="small"] {
975
- --propskit-number-height: 1.5rem;
976
- }
1500
+ padding-block: var(--_propskit-padding-block);
1501
+ padding-inline: var(--_propskit-padding-inline);
977
1502
 
978
1503
  &[disabled]:not([disabled="false"]) {
979
1504
  pointer-events: none;
@@ -988,12 +1513,17 @@ propskit-number {
988
1513
  padding-right: 0;
989
1514
  }
990
1515
 
991
- fig-field:not([direction="vertical"]) {
1516
+ .propskit-number-surface {
992
1517
  position: relative;
993
1518
  display: flex;
1519
+ align-items: center;
1520
+ gap: var(--spacer-2);
1521
+ box-sizing: border-box;
994
1522
  height: 100%;
995
- border-radius: var(--radius-medium);
996
- 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);
997
1527
  outline: none;
998
1528
 
999
1529
  &:focus-within {
@@ -1006,16 +1536,33 @@ propskit-number {
1006
1536
  position: absolute;
1007
1537
  inset: 0;
1008
1538
  border-radius: inherit;
1539
+ border: var(--_propskit-border);
1009
1540
  pointer-events: none;
1010
1541
  }
1011
1542
 
1012
- &:hover::after {
1013
- 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
+ }
1014
1550
  }
1015
1551
 
1016
- /* Label geometry comes from the shared propskit horizontal-label rules. */
1017
1552
  & > label {
1018
- 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;
1019
1566
 
1020
1567
  fig-icon:first-child {
1021
1568
  margin-left: calc(var(--spacer-1) * -1);
@@ -1023,12 +1570,15 @@ propskit-number {
1023
1570
  }
1024
1571
 
1025
1572
  fig-input-number {
1573
+ --figma-focus-outline-offset: 1px;
1574
+
1026
1575
  position: relative;
1027
1576
  align-self: center;
1028
- flex: 0 0 auto;
1029
- width: fit-content;
1577
+ flex: 0 1 auto !important;
1578
+ width: var(--_propskit-input-inline-size) !important;
1579
+ max-width: none;
1030
1580
  min-width: 0;
1031
- margin-left: auto;
1581
+ margin-inline-start: auto;
1032
1582
  height: var(--control-height);
1033
1583
  border-radius: var(--radius-medium);
1034
1584
  background-color: transparent;
@@ -1042,6 +1592,7 @@ propskit-number {
1042
1592
  input {
1043
1593
  field-sizing: content;
1044
1594
  width: auto;
1595
+ max-width: 100%;
1045
1596
  min-width: 0;
1046
1597
  flex: 0 0 auto;
1047
1598
  text-align: right;
@@ -1058,8 +1609,49 @@ propskit-slider {
1058
1609
  --propskit-slider-elastic-origin: left center;
1059
1610
  --propskit-slider-elastic-transition: 0.18s cubic-bezier(0.2, 1.45, 0.35, 1);
1060
1611
  --propskit-slider-height: 2rem;
1061
- --propskit-slider-vertical-padding: var(--spacer-1);
1062
- --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
+ );
1063
1655
  --figma-focus-outline-offset: 1px;
1064
1656
  --propskit-slider-progress-shadow: inset 0px 0.75px 0px 0px light-dark(transparent, rgba(255, 255, 255, 0.1));
1065
1657
  --field-text-shadow: 0 1px 1.5px
@@ -1078,31 +1670,22 @@ propskit-slider {
1078
1670
 
1079
1671
  display: block;
1080
1672
  position: relative;
1673
+ box-sizing: border-box;
1081
1674
  width: 100%;
1082
1675
  height: calc(
1083
- var(--propskit-slider-height) + var(--propskit-slider-vertical-padding) * 2
1676
+ var(--propskit-slider-height) + var(--_propskit-padding-block) * 2
1084
1677
  );
1085
- border-radius: var(--radius-medium);
1678
+ border-radius: var(--radius-medium-large);
1086
1679
  transform-origin: var(--propskit-slider-elastic-origin);
1087
1680
  transition: transform var(--propskit-slider-elastic-transition);
1088
- padding-top: var(--propskit-slider-vertical-padding);
1089
- padding-bottom: var(--propskit-slider-vertical-padding);
1090
- padding-left: var(--propskit-slider-horizontal-padding);
1091
- padding-right: var(--propskit-slider-horizontal-padding);
1681
+ padding-block: var(--_propskit-padding-block);
1682
+ padding-inline: var(--_propskit-padding-inline);
1092
1683
 
1093
1684
  &:hover,
1094
1685
  &:focus-within {
1095
1686
  --propskit-slider-handle-reveal: 1;
1096
1687
  }
1097
1688
 
1098
- &[size="small"] {
1099
- --propskit-slider-height: 1.5rem;
1100
- --propskit-slider-fig-slider-thumb-height: calc(
1101
- var(--propskit-slider-fig-slider-height) - var(--spacer-2-5)
1102
- );
1103
- --propskit-slider-number-right: 2px;
1104
- }
1105
-
1106
1689
  label {
1107
1690
  pointer-events: none;
1108
1691
  z-index: 1;
@@ -1133,19 +1716,27 @@ propskit-slider {
1133
1716
  }
1134
1717
 
1135
1718
 
1136
- fig-field:not([direction="vertical"]) {
1719
+ .propskit-slider-surface {
1137
1720
  position: relative;
1138
- padding-left: var(--spacer-2);
1721
+ padding-inline-start: var(--spacer-2-5);
1139
1722
  display: flex;
1140
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
+ }
1141
1733
 
1142
1734
  & > label {
1143
1735
  min-width: 0;
1144
- max-width: none;
1145
- width: 100%;
1736
+ max-width: var(--_propskit-label-inline-size);
1737
+ width: var(--_propskit-label-inline-size);
1146
1738
  flex: 1 1 auto;
1147
- color: var(--figma-color-text-secondary);
1148
- padding: 0;
1739
+ color: inherit;
1149
1740
  display: flex;
1150
1741
  align-items: center;
1151
1742
  gap: var(--spacer-1);
@@ -1158,14 +1749,18 @@ propskit-slider {
1158
1749
 
1159
1750
  fig-slider {
1160
1751
  position: absolute;
1161
- inset: 0;
1752
+ inset-block: 0;
1753
+ inset-inline-end: 0;
1754
+ inline-size: var(--_propskit-input-inline-size);
1162
1755
  padding: 0;
1163
1756
  background-color: transparent;
1757
+ border-radius: inherit;
1758
+ outline: none;
1164
1759
  --slider-height: var(--propskit-slider-fig-slider-height);
1165
1760
 
1166
- &:focus-within {
1167
- outline: var(--figma-focus-outline);
1168
- outline-offset: var(--figma-focus-outline-offset);
1761
+ &:focus-within,
1762
+ &:has(input[type="range"]:focus-visible) {
1763
+ outline: none;
1169
1764
  }
1170
1765
  --slider-field-height: var(--propskit-slider-height);
1171
1766
  --slider-thumb-width: var(--spacer-1);
@@ -1175,7 +1770,7 @@ propskit-slider {
1175
1770
  min(var(--slider-complete), calc(1 - var(--slider-complete))) * 2
1176
1771
  );*/
1177
1772
  --slider-thumb-height: var(--propskit-slider-fig-slider-thumb-height);
1178
- --slider-border-radius: var(--radius-medium);
1773
+ --slider-border-radius: var(--radius-medium-large);
1179
1774
  --slider-tick-width: 0.125rem;
1180
1775
  --slider-tick-height: var(--spacer-2);
1181
1776
  --slider-tick-radius: var(--radius-medium);
@@ -1225,17 +1820,26 @@ propskit-slider {
1225
1820
 
1226
1821
  .fig-slider-input-container {
1227
1822
  box-shadow: none !important;
1228
- background-color: var(--figma-color-bg-secondary) !important;
1823
+ background-color: var(--_propskit-background) !important;
1229
1824
  overflow: hidden;
1825
+
1826
+ &::after {
1827
+ border: var(--_propskit-border);
1828
+ }
1829
+
1230
1830
  &:hover,
1231
1831
  &:focus-within {
1832
+ background-color: var(--_propskit-hover-background) !important;
1833
+ color: var(--_propskit-hover-color);
1834
+
1232
1835
  &::after {
1233
1836
  content: "";
1234
1837
  position: absolute;
1235
1838
  inset: 0;
1236
1839
  pointer-events: none;
1237
1840
  border-radius: var(--slider-border-radius);
1238
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent) !important;
1841
+ border: var(--_propskit-hover-border);
1842
+ box-shadow: none !important;
1239
1843
  }
1240
1844
  }
1241
1845
  &::before {
@@ -1440,7 +2044,7 @@ propskit-slider {
1440
2044
  container-type: inline-size;
1441
2045
  }
1442
2046
 
1443
- fig-field:not([direction="vertical"]) > label {
2047
+ .propskit-slider-surface > label {
1444
2048
  --propskit-slider-label-fill-edge: clamp(
1445
2049
  0%,
1446
2050
  calc(var(--propskit-slider-complete, 0) * 133.333333%),
@@ -1620,8 +2224,49 @@ propskit-wheel {
1620
2224
  --propskit-wheel-elastic-transition: 0.28s
1621
2225
  cubic-bezier(0.34, 1.56, 0.64, 1);
1622
2226
  --propskit-wheel-height: 2rem;
1623
- --propskit-wheel-vertical-padding: var(--spacer-1);
1624
- --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
+ );
1625
2270
  --propskit-wheel-number-right: calc(2px + var(--spacer-1));
1626
2271
  --propskit-wheel-track-inset: 3rem;
1627
2272
  --propskit-wheel-track-inset-left: var(--propskit-wheel-track-inset);
@@ -1633,12 +2278,12 @@ propskit-wheel {
1633
2278
  box-sizing: border-box;
1634
2279
  width: 100%;
1635
2280
  height: calc(
1636
- var(--propskit-wheel-height) + var(--propskit-wheel-vertical-padding) * 2
2281
+ var(--propskit-wheel-height) + var(--_propskit-padding-block) * 2
1637
2282
  );
1638
2283
  transform-origin: var(--propskit-wheel-elastic-origin);
1639
2284
  transition: transform var(--propskit-wheel-elastic-transition);
1640
- padding: var(--propskit-wheel-vertical-padding)
1641
- var(--propskit-wheel-horizontal-padding);
2285
+ padding-block: var(--_propskit-padding-block);
2286
+ padding-inline: var(--_propskit-padding-inline);
1642
2287
 
1643
2288
  &[data-label-empty] {
1644
2289
  --propskit-wheel-track-inset-left: var(--spacer-2);
@@ -1648,21 +2293,6 @@ propskit-wheel {
1648
2293
  --propskit-wheel-track-inset-right: var(--spacer-2);
1649
2294
  }
1650
2295
 
1651
- &[size="small"] {
1652
- --propskit-wheel-height: 1.5rem;
1653
- --propskit-wheel-number-right: 2px;
1654
-
1655
- .propskit-wheel-surface > label {
1656
- padding-left: var(--spacer-2);
1657
- }
1658
-
1659
- .propskit-wheel-surface > fig-input-wheel {
1660
- --fig-input-wheel-handle-height: calc(
1661
- var(--propskit-wheel-height) - var(--spacer-2-5)
1662
- );
1663
- }
1664
- }
1665
-
1666
2296
  &[disabled]:not([disabled="false"]) {
1667
2297
  pointer-events: none;
1668
2298
 
@@ -1678,8 +2308,9 @@ propskit-wheel {
1678
2308
  box-sizing: border-box;
1679
2309
  width: 100%;
1680
2310
  height: 100%;
1681
- border-radius: var(--radius-medium);
1682
- background-color: var(--figma-color-bg-secondary);
2311
+ border-radius: var(--radius-medium-large);
2312
+ background: var(--_propskit-background);
2313
+ color: var(--_propskit-color);
1683
2314
  overflow: hidden;
1684
2315
  cursor: ew-resize;
1685
2316
  touch-action: none;
@@ -1695,24 +2326,30 @@ propskit-wheel {
1695
2326
  position: absolute;
1696
2327
  inset: 0;
1697
2328
  border-radius: inherit;
2329
+ border: var(--_propskit-border);
1698
2330
  pointer-events: none;
1699
2331
  }
1700
2332
 
1701
- &:hover::after {
1702
- box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
1703
- }
2333
+ &:hover {
2334
+ background: var(--_propskit-hover-background);
2335
+ color: var(--_propskit-hover-color);
1704
2336
 
1705
- > label {
2337
+ &::after {
2338
+ border: var(--_propskit-hover-border);
2339
+ }
2340
+ }
2341
+
2342
+ > label {
1706
2343
  position: absolute;
1707
2344
  inset: 0;
1708
2345
  z-index: 1;
1709
2346
  display: block;
1710
2347
  box-sizing: border-box;
1711
- width: 75%;
1712
- max-width: 75%;
1713
- 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);
1714
2351
  overflow: hidden;
1715
- color: var(--figma-color-text-secondary);
2352
+ color: inherit;
1716
2353
  text-overflow: ellipsis;
1717
2354
  white-space: nowrap;
1718
2355
  align-content: center;
@@ -1742,12 +2379,12 @@ propskit-wheel {
1742
2379
  box-shadow: none !important;
1743
2380
  font-variant-numeric: var(--font-variant-numeric);
1744
2381
  position: absolute;
1745
- right: var(--propskit-wheel-number-right);
2382
+ inset-inline-end: var(--propskit-wheel-number-right);
1746
2383
  top: 50%;
1747
2384
  bottom: auto;
1748
2385
  z-index: 2;
1749
2386
  height: var(--control-height);
1750
- width: fit-content;
2387
+ width: var(--_propskit-input-inline-size);
1751
2388
  min-width: fit-content;
1752
2389
  max-width: max-content;
1753
2390
  flex: 0 0 auto;
@@ -1802,88 +2439,28 @@ body.propskit-slider-dragging * {
1802
2439
  }
1803
2440
 
1804
2441
  :is(
1805
- propskit-switch,
1806
- propskit-color,
1807
- propskit-fill,
1808
- propskit-gradient,
1809
- propskit-select,
1810
- propskit-text,
1811
- propskit-number,
1812
- propskit-slider
1813
- ) 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 {
1814
2449
  position: absolute;
1815
2450
  inset: 0;
1816
2451
  z-index: 1;
1817
2452
  display: block;
1818
2453
  align-content: center;
1819
2454
  box-sizing: border-box;
1820
- width: 75%;
1821
- max-width: 75%;
1822
- 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);
1823
2458
  overflow: hidden;
1824
2459
  text-overflow: ellipsis;
1825
2460
  white-space: nowrap;
1826
2461
  pointer-events: none;
1827
2462
  }
1828
2463
 
1829
- :is(
1830
- propskit-switch,
1831
- propskit-color,
1832
- propskit-fill,
1833
- propskit-gradient,
1834
- propskit-select,
1835
- propskit-text,
1836
- propskit-number,
1837
- propskit-slider
1838
- ) {
1839
- fig-field {
1840
- --fig-field-label-max-height: var(--spacer-5);
1841
- }
1842
-
1843
- fig-field:not([direction="vertical"]) > label {
1844
- padding-left: var(--spacer-2-5);
1845
- }
1846
- }
1847
-
1848
- :is(
1849
- propskit-switch,
1850
- propskit-color,
1851
- propskit-fill,
1852
- propskit-gradient,
1853
- propskit-select,
1854
- propskit-text,
1855
- propskit-number,
1856
- propskit-slider
1857
- )[size="small"] {
1858
- fig-field {
1859
- --fig-field-label-max-height: var(--spacer-4);
1860
- }
1861
-
1862
- fig-field:not([direction="vertical"]) > label {
1863
- padding-left: var(--spacer-2);
1864
- }
1865
- }
1866
-
1867
- :is(
1868
- propskit-switch,
1869
- propskit-color,
1870
- propskit-fill,
1871
- propskit-gradient,
1872
- propskit-text,
1873
- propskit-number,
1874
- propskit-slider
1875
- )[size="small"] {
1876
- fig-field:not([direction="vertical"]) {
1877
- padding-left: var(--spacer-2);
1878
- }
1879
- }
1880
-
1881
- :is(propskit-text, propskit-number)[size="small"] {
1882
- fig-field > :is(fig-input-text, fig-input-number) {
1883
- margin-right: 0;
1884
- }
1885
- }
1886
-
1887
2464
  propskit-color-point,
1888
2465
  propskit-point-point,
1889
2466
  propskit-point-radius,
@@ -1893,8 +2470,49 @@ propskit-point-radius-angle {
1893
2470
 
1894
2471
  propskit-position {
1895
2472
  --propskit-position-height: 2rem;
1896
- --propskit-position-vertical-padding: var(--spacer-1);
1897
- --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
+ );
1898
2516
  --figma-focus-outline-offset: 1px;
1899
2517
 
1900
2518
  display: flex;
@@ -1902,28 +2520,18 @@ propskit-position {
1902
2520
  gap: var(--spacer-1);
1903
2521
  box-sizing: border-box;
1904
2522
  width: 100%;
1905
- padding: var(--propskit-position-vertical-padding)
1906
- var(--propskit-position-horizontal-padding);
1907
-
1908
- &[size="small"] {
1909
- --propskit-position-height: 1.5rem;
1910
-
1911
- .propskit-position-row {
1912
- --fig-field-label-max-height: var(--spacer-4);
1913
- padding-left: var(--spacer-2);
1914
- }
1915
- }
2523
+ padding-block: var(--_propskit-padding-block);
2524
+ padding-inline: var(--_propskit-padding-inline);
1916
2525
 
1917
2526
  &[disabled]:not([disabled="false"]) {
1918
2527
  pointer-events: none;
1919
2528
 
1920
- .propskit-position-row > label {
2529
+ .propskit-position-surface > label {
1921
2530
  color: var(--figma-color-text-disabled);
1922
2531
  }
1923
2532
  }
1924
2533
 
1925
- .propskit-position-row {
1926
- --fig-field-label-max-height: var(--spacer-5);
2534
+ .propskit-position-surface {
1927
2535
  position: relative;
1928
2536
  display: flex;
1929
2537
  align-items: center;
@@ -1932,21 +2540,27 @@ propskit-position {
1932
2540
  min-width: 0;
1933
2541
  height: var(--propskit-position-height);
1934
2542
  min-height: var(--propskit-position-height);
1935
- padding: 0 var(--spacer-1) 0 var(--spacer-2-5);
1936
- padding-right: 0;
1937
- border-radius: var(--radius-medium);
1938
- 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);
1939
2547
 
1940
2548
  &::after {
1941
2549
  content: "";
1942
2550
  position: absolute;
1943
2551
  inset: 0;
1944
2552
  border-radius: inherit;
2553
+ border: var(--_propskit-border);
1945
2554
  pointer-events: none;
1946
2555
  }
1947
2556
 
1948
- &:hover::after {
1949
- 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
+ }
1950
2564
  }
1951
2565
 
1952
2566
  & > label {
@@ -1955,11 +2569,12 @@ propskit-position {
1955
2569
  display: flex;
1956
2570
  align-items: center;
1957
2571
  flex: 1 1 auto;
2572
+ inline-size: var(--_propskit-label-inline-size);
1958
2573
  min-width: 0;
1959
2574
  margin: 0 auto 0 0;
1960
2575
  padding: 0;
1961
2576
  overflow: hidden;
1962
- color: var(--figma-color-text-secondary);
2577
+ color: inherit;
1963
2578
  text-overflow: ellipsis;
1964
2579
  white-space: nowrap;
1965
2580
  pointer-events: none;
@@ -1974,7 +2589,7 @@ propskit-position {
1974
2589
  }
1975
2590
 
1976
2591
  fig-input-number {
1977
- width: 3.85rem;
2592
+ width: var(--_propskit-input-inline-size);
1978
2593
  height: var(--control-height);
1979
2594
  border: 0;
1980
2595
  background-color: transparent;
@@ -1995,79 +2610,511 @@ propskit-position {
1995
2610
  }
1996
2611
  }
1997
2612
 
1998
- :is(
1999
- propskit-number,
2000
- propskit-position
2001
- ) fig-input-number:is(:focus-within, :active, :has(input:active)) {
2002
- background-color: var(--figma-color-bg);
2003
- }
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
+ );
2004
2657
 
2005
- :is(
2006
- propskit-slider,
2007
- propskit-wheel
2008
- ) fig-input-number:has(input:focus) {
2009
- background-color: var(--figma-color-bg);
2010
- }
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);
2011
2663
 
2012
- :is(
2013
- propskit-switch,
2014
- propskit-color,
2015
- propskit-fill,
2016
- propskit-gradient,
2017
- propskit-select,
2018
- propskit-text,
2019
- propskit-number,
2020
- propskit-slider,
2021
- propskit-position,
2022
- propskit-wheel
2023
- )[variant="minimal"] {
2024
- --propskit-switch-vertical-padding: 0px;
2025
- --propskit-color-vertical-padding: 0px;
2026
- --propskit-gradient-vertical-padding: 0px;
2027
- --propskit-select-vertical-padding: 0px;
2028
- --propskit-text-vertical-padding: 0px;
2029
- --propskit-number-vertical-padding: 0px;
2030
- --propskit-slider-vertical-padding: 0px;
2031
- --propskit-position-vertical-padding: 0px;
2032
- --propskit-wheel-vertical-padding: 0px;
2033
-
2034
- & > fig-field {
2035
- 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
+ }
2036
2686
 
2037
2687
  &:hover {
2038
- background-color: var(--figma-color-bg-secondary);
2688
+ background: var(--_propskit-hover-background);
2689
+ color: var(--_propskit-hover-color);
2039
2690
 
2040
2691
  &::after {
2041
- box-shadow: none;
2692
+ border: var(--_propskit-hover-border);
2042
2693
  }
2043
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
+ }
2044
2755
  }
2045
2756
  }
2046
2757
 
2047
- propskit-wheel[variant="minimal"] {
2048
- .propskit-wheel-surface {
2049
- 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
+ }
2050
2929
 
2051
2930
  &:hover {
2052
- background-color: var(--figma-color-bg-secondary);
2931
+ background: var(--_propskit-hover-background);
2932
+ color: var(--_propskit-hover-color);
2053
2933
 
2054
2934
  &::after {
2055
- box-shadow: none;
2935
+ border: var(--_propskit-hover-border);
2056
2936
  }
2057
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
+ }
2058
2975
  }
2059
2976
  }
2060
2977
 
2061
- propskit-slider[variant="minimal"] {
2062
- & > fig-field fig-slider .fig-slider-input-container {
2063
- 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
+ );
2064
2984
 
2065
- &:hover::after {
2066
- 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
+ );
2067
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
+ );
2068
3041
  }
2069
3042
  }
2070
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
+
2071
3118
  /* Canvas Control */
2072
3119
  body {
2073
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;
@@ -2297,7 +3344,7 @@ propskit-oscillator {
2297
3344
  --propskit-oscillator-playhead-radius: 5px;
2298
3345
 
2299
3346
  .propskit-oscillator-svg-container {
2300
- border-radius: var(--radius-medium);
3347
+ border-radius: var(--radius-medium-large);
2301
3348
  padding: var(--spacer-3) var(--spacer-5);
2302
3349
  margin-bottom: var(--spacer-2);
2303
3350
  overflow: hidden;
@@ -2308,7 +3355,7 @@ propskit-oscillator {
2308
3355
  inset: 0 var(--spacer-3);
2309
3356
  content: "";
2310
3357
  background: var(--figma-color-bg-secondary);
2311
- border-radius: var(--radius-medium);
3358
+ border-radius: var(--radius-medium-large);
2312
3359
  }
2313
3360
 
2314
3361
  &:is(:hover, :active, :focus, :focus-visible, :focus-within) {