@rogieking/figui3 3.9.2 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. package/README.md +36 -3
  2. package/components.css +618 -300
  3. package/dist/fig.js +137 -80
  4. package/fig.js +1824 -291
  5. package/package.json +1 -1
package/components.css CHANGED
@@ -327,6 +327,7 @@
327
327
  --icon-close: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.2242 7.08154C16.4182 6.95348 16.6823 6.97551 16.8531 7.146C17.024 7.31683 17.0457 7.58084 16.9176 7.7749L16.8531 7.85303L12.7067 11.9995L16.8531 16.146L16.9176 16.2241C17.0457 16.4182 17.024 16.6822 16.8531 16.853C16.6823 17.0239 16.4183 17.0456 16.2242 16.9175L16.1461 16.853L11.9996 12.7065L7.85315 16.853C7.65789 17.0483 7.34138 17.0483 7.14612 16.853C6.95128 16.6577 6.95101 16.3411 7.14612 16.146L11.2926 11.9995L7.14612 7.85303L7.08167 7.7749C6.95389 7.58087 6.97541 7.3167 7.14612 7.146C7.31683 6.97532 7.58101 6.95376 7.77502 7.08154L7.85315 7.146L11.9996 11.2925L16.1461 7.146L16.2242 7.08154Z' fill='currentColor'/%3E%3C/svg%3E");
328
328
  --icon-rotate: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.2325 6.47442C11.2088 5.49811 12.7917 5.49811 13.768 6.47442L15.2931 7.99955H14.0002C13.7241 7.99955 13.5002 8.2234 13.5002 8.49955C13.5002 8.77569 13.7241 8.99955 14.0002 8.99955H16.5002C16.7764 8.99955 17.0002 8.77569 17.0002 8.49955V5.99955C17.0002 5.7234 16.7764 5.49955 16.5002 5.49955C16.2241 5.49955 16.0002 5.7234 16.0002 5.99955V7.29244L14.4751 5.76731C13.1083 4.40048 10.8922 4.40048 9.52537 5.76731L7.14669 8.14599C6.95143 8.34126 6.95143 8.65784 7.14669 8.8531C7.34195 9.04836 7.65854 9.04836 7.8538 8.8531L10.2325 6.47442ZM13.0609 9.64599C12.4751 9.06021 11.5254 9.06021 10.9396 9.64599L7.64669 12.9389C7.06091 13.5247 7.0609 14.4744 7.64669 15.0602L10.9396 18.3531C11.5254 18.9389 12.4751 18.9389 13.0609 18.3531L16.3538 15.0602C16.9396 14.4744 16.9396 13.5247 16.3538 12.9389L13.0609 9.64599ZM11.6467 10.3531C11.842 10.1578 12.1585 10.1578 12.3538 10.3531L15.6467 13.646C15.842 13.8413 15.842 14.1578 15.6467 14.3531L12.3538 17.646C12.1585 17.8413 11.842 17.8413 11.6467 17.646L8.3538 14.3531C8.15854 14.1578 8.15854 13.8413 8.3538 13.646L11.6467 10.3531Z' fill='currentColor'/%3E%3C/svg%3E");
329
329
  --icon-swap: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.35355 6.35355C8.54882 6.15829 8.54882 5.84171 8.35355 5.64645C8.15829 5.45118 7.84171 5.45118 7.64645 5.64645L5.14645 8.14645C4.95118 8.34171 4.95118 8.65829 5.14645 8.85355L7.64645 11.3536C7.84171 11.5488 8.15829 11.5488 8.35355 11.3536C8.54882 11.1583 8.54882 10.8417 8.35355 10.6464L6.70711 9H18.5C18.7761 9 19 8.77614 19 8.5C19 8.22386 18.7761 8 18.5 8H6.70711L8.35355 6.35355ZM15.6464 13.3536C15.4512 13.1583 15.4512 12.8417 15.6464 12.6464C15.8417 12.4512 16.1583 12.4512 16.3536 12.6464L18.8536 15.1464C19.0488 15.3417 19.0488 15.6583 18.8536 15.8536L16.3536 18.3536C16.1583 18.5488 15.8417 18.5488 15.6464 18.3536C15.4512 18.1583 15.4512 17.8417 15.6464 17.6464L17.2929 16H5.5C5.22386 16 5 15.7761 5 15.5C5 15.2239 5.22386 15 5.5 15H17.2929L15.6464 13.3536Z' fill='currentColor'/%3E%3C/svg%3E");
330
+ --tip-pointer: path("M3 3L0 0H6L3 3Z");
330
331
 
331
332
  /* Elevations — light-dark() handles theme switching inline */
332
333
  --figma-elevation-100:
@@ -601,7 +602,7 @@ input[type="text"][list] {
601
602
  margin: 0 calc(var(--spacer-1) * -1);
602
603
  margin-left: calc((var(--spacer-1) * 2 + var(--spacer-1)) * -1);
603
604
  }
604
- &:not(:first-child) {
605
+ &:not(:first-child):not(:first-of-type) {
605
606
  margin-top: var(--spacer-2);
606
607
  padding-top: var(--spacer-3);
607
608
 
@@ -1066,6 +1067,7 @@ fig-tab-content,
1066
1067
  /* Avatar */
1067
1068
  fig-avatar,
1068
1069
  .fig-avatar {
1070
+ contain: layout paint;
1069
1071
  --size: 1.5rem;
1070
1072
  width: var(--size);
1071
1073
  display: inline-grid;
@@ -1173,6 +1175,7 @@ input[type="color"] {
1173
1175
  }
1174
1176
 
1175
1177
  fig-chit {
1178
+ contain: layout paint;
1176
1179
  --size: 1.5rem;
1177
1180
  --chit-background: #d9d9d9;
1178
1181
  --chit-bg-size: cover;
@@ -1907,6 +1910,7 @@ fig-origin-grid {
1907
1910
 
1908
1911
  /* Switch */
1909
1912
  input[type="checkbox"].switch {
1913
+ contain: strict;
1910
1914
  display: inline-flex;
1911
1915
  margin: 0;
1912
1916
  vertical-align: middle;
@@ -1976,6 +1980,7 @@ input[type="checkbox"].switch:checked:focus {
1976
1980
 
1977
1981
  /* Checkbox */
1978
1982
  input[type="checkbox"]:not(.switch) {
1983
+ contain: strict;
1979
1984
  --size: 1rem;
1980
1985
  appearance: none;
1981
1986
  border-radius: var(--radius-medium);
@@ -2040,6 +2045,7 @@ label.checkbox:has([type="checkbox"]) {
2040
2045
 
2041
2046
  /* Radio */
2042
2047
  input[type="radio"] {
2048
+ contain: strict;
2043
2049
  appearance: none;
2044
2050
  border-radius: 0.5rem;
2045
2051
  width: 1rem;
@@ -2569,6 +2575,7 @@ fig-slider {
2569
2575
  dialog,
2570
2576
  .popover,
2571
2577
  [popover] {
2578
+ contain: layout;
2572
2579
  padding: 0;
2573
2580
  outline: 0;
2574
2581
  border: 0;
@@ -2659,6 +2666,7 @@ dialog[is="fig-dialog"] {
2659
2666
  }
2660
2667
 
2661
2668
  dialog[is="fig-popup"] {
2669
+ contain: layout;
2662
2670
  --z-index: 999999;
2663
2671
  --beak-offset: 1px;
2664
2672
  z-index: var(--z-index);
@@ -2739,6 +2747,7 @@ dialog[is="fig-popup"] {
2739
2747
  }
2740
2748
 
2741
2749
  dialog[is="fig-toast"] {
2750
+ contain: layout paint;
2742
2751
  --z-index: 999999;
2743
2752
  z-index: var(--z-index);
2744
2753
  box-shadow: var(--figma-elevation-100);
@@ -2808,8 +2817,10 @@ fig-tooltip {
2808
2817
  display: contents;
2809
2818
  }
2810
2819
  .fig-tooltip {
2820
+ contain: layout;
2811
2821
  inset: unset;
2812
2822
  display: inline-block;
2823
+ overflow: visible;
2813
2824
  color: var(--color-tooltip);
2814
2825
  background-color: var(--bg-tooltip);
2815
2826
  padding: var(--spacer-1) var(--spacer-2);
@@ -2818,6 +2829,10 @@ fig-tooltip {
2818
2829
  border-radius: var(--radius-medium, 0.3125rem);
2819
2830
  max-width: 180px;
2820
2831
  width: max-content;
2832
+ box-shadow: inset 0 0.5px 0 0 rgba(255, 255, 255, 0.1);
2833
+ filter: drop-shadow(0px 1px 1.5px rgba(0, 0, 0, 0.1))
2834
+ drop-shadow(0px 2.5px 6px rgba(0, 0, 0, 0.13))
2835
+ drop-shadow(0px 0px 0.5px rgba(0, 0, 0, 0.15));
2821
2836
 
2822
2837
  & > span {
2823
2838
  text-wrap: balance;
@@ -2831,47 +2846,14 @@ fig-tooltip {
2831
2846
  width: auto;
2832
2847
  }
2833
2848
 
2834
- &:after {
2835
- content: "";
2836
- background-color: var(--bg-tooltip);
2837
- clip-path: path(
2838
- "M16 0H0L0 1H0.757359C1.55301 1 2.31607 1.31607 2.87868 1.87868L6.29587 5.29587C7.23704 6.23704 8.76296 6.23704 9.70413 5.29587L13.1213 1.87868C13.6839 1.31607 14.447 1 15.2426 1H16V0Z"
2839
- );
2840
- width: 1rem;
2841
- height: 6px;
2842
- position: absolute;
2843
- top: calc(100% - 1px);
2844
- left: var(--beak-offset, 50%);
2845
- z-index: 2;
2846
- transform: translate(-50%);
2847
- }
2848
-
2849
- &[position="bottom"] {
2850
- &:after {
2851
- top: 1px;
2852
- left: var(--beak-offset, 50%);
2853
- transform: translate(-50%, -100%) scaleY(-1);
2854
- }
2855
- }
2856
- }
2857
-
2858
- .fig-tooltip {
2859
- overflow: visible;
2860
- box-shadow: inset 0 0.5px 0 0 rgba(255, 255, 255, 0.1);
2861
- filter: drop-shadow(0px 1px 1.5px rgba(0, 0, 0, 0.1))
2862
- drop-shadow(0px 2.5px 6px rgba(0, 0, 0, 0.13))
2863
- drop-shadow(0px 0px 0.5px rgba(0, 0, 0, 0.15));
2864
-
2865
2849
  &:after {
2866
2850
  content: "";
2867
2851
  background-color: inherit;
2868
- clip-path: path(
2869
- "M16 0H0L0 1H0.757359C1.55301 1 2.31607 1.31607 2.87868 1.87868L6.29587 5.29587C7.23704 6.23704 8.76296 6.23704 9.70413 5.29587L13.1213 1.87868C13.6839 1.31607 14.447 1 15.2426 1H16V0Z"
2870
- );
2871
- width: 1rem;
2872
- height: 6px;
2852
+ clip-path: var(--tip-pointer);
2853
+ width: 6px;
2854
+ height: 3px;
2873
2855
  position: absolute;
2874
- top: calc(100% - 1px);
2856
+ top: 100%;
2875
2857
  left: var(--beak-offset, 50%);
2876
2858
  z-index: 2;
2877
2859
  transform: translate(-50%);
@@ -2879,7 +2861,7 @@ fig-tooltip {
2879
2861
 
2880
2862
  &[position="bottom"] {
2881
2863
  &:after {
2882
- top: 1px;
2864
+ top: 0px;
2883
2865
  left: var(--beak-offset, 50%);
2884
2866
  transform: translate(-50%, -100%) scaleY(-1);
2885
2867
  }
@@ -2892,6 +2874,7 @@ fig-icon {
2892
2874
  }
2893
2875
 
2894
2876
  fig-icon.close {
2877
+ contain: strict;
2895
2878
  width: 1rem;
2896
2879
  height: 1rem;
2897
2880
  background-color: var(--figma-color-text);
@@ -2906,6 +2889,7 @@ fig-content,
2906
2889
  fig-slider,
2907
2890
  fig-switch,
2908
2891
  fig-input-color,
2892
+ fig-input-gradient,
2909
2893
  fig-input-fill,
2910
2894
  fig-checkbox,
2911
2895
  fig-radio,
@@ -3121,14 +3105,39 @@ fig-input-text[type="number"] > [slot] {
3121
3105
  }
3122
3106
 
3123
3107
  fig-input-color,
3108
+ fig-input-gradient,
3124
3109
  fig-input-fill {
3110
+ background-color: var(--figma-color-bg-secondary);
3111
+ border-radius: var(--radius-medium);
3112
+ box-shadow: none !important;
3113
+ &:focus,
3114
+ &:focus-within,
3115
+ &.has-popup-open {
3116
+ outline: 1px solid var(--figma-color-border-selected) !important;
3117
+ outline-offset: -1px !important;
3118
+ }
3119
+
3125
3120
  & > .input-combo > fig-chit:not(:only-child),
3126
- & > .input-combo > fig-chit:not(:only-child) > input,
3121
+ & > .input-combo > fig-chit:not(:only-child) input,
3127
3122
  & > .input-combo > fig-fill-picker:not(:only-child),
3128
3123
  & > .input-combo > fig-fill-picker:not(:only-child) > fig-chit > input,
3129
- & fig-fill-picker:not(:only-child) {
3130
- border-top-right-radius: 0 !important;
3131
- border-bottom-right-radius: 0 !important;
3124
+ & > .input-combo > label,
3125
+ & fig-fill-picker:not(:only-child),
3126
+ fig-input-text,
3127
+ fig-chit {
3128
+ &,
3129
+ &:focus,
3130
+ &:hover {
3131
+ background-color: transparent !important;
3132
+ box-shadow: none !important;
3133
+ border: 0 !important;
3134
+ }
3135
+ }
3136
+ fig-chit ~ fig-input-text > input,
3137
+ fig-chit ~ label,
3138
+ fig-fill-picker ~ fig-input-text > input,
3139
+ fig-fill-picker ~ label {
3140
+ padding-left: 0 !important;
3132
3141
  }
3133
3142
 
3134
3143
  & > .input-combo {
@@ -3139,6 +3148,8 @@ fig-input-fill {
3139
3148
  fig-input-number {
3140
3149
  flex: 0;
3141
3150
  flex-basis: 3rem;
3151
+ box-shadow: inset 1px 0 0 0 var(--figma-color-bg) !important;
3152
+ background-color: transparent !important;
3142
3153
  }
3143
3154
 
3144
3155
  &[disabled]:not([disabled="false"]) {
@@ -3152,6 +3163,45 @@ fig-input-fill {
3152
3163
  min-width: 0;
3153
3164
  }
3154
3165
  }
3166
+ fig-input-gradient {
3167
+ position: relative;
3168
+
3169
+ &:focus,
3170
+ &:active,
3171
+ &:focus-within {
3172
+ outline: 1px solid var(--figma-color-border-selected) !important;
3173
+ outline-offset: -1px !important;
3174
+ }
3175
+ fig-chit {
3176
+ flex: 1 1 auto;
3177
+ width: 100%;
3178
+ min-width: 0;
3179
+ &::before,
3180
+ &::after {
3181
+ width: auto;
3182
+ height: auto;
3183
+ place-self: stretch;
3184
+ border-radius: var(--radius-large) !important;
3185
+ }
3186
+ &[data-type="gradient"]::after {
3187
+ width: calc(100% - 0.625rem);
3188
+ height: 0.875rem;
3189
+ justify-self: center;
3190
+ align-self: center;
3191
+ }
3192
+ }
3193
+
3194
+ .fig-input-gradient-track {
3195
+ position: absolute;
3196
+ inset: calc(var(--spacer-1) + 2px) var(--spacer-2-5);
3197
+ pointer-events: auto;
3198
+
3199
+ fig-handle {
3200
+ pointer-events: auto;
3201
+ cursor: default;
3202
+ }
3203
+ }
3204
+ }
3155
3205
 
3156
3206
  fig-slider {
3157
3207
  display: flex;
@@ -3439,6 +3489,7 @@ fig-spinner {
3439
3489
  /* Segmented control */
3440
3490
  .segmented-control,
3441
3491
  fig-segmented-control {
3492
+ contain: layout paint;
3442
3493
  display: inline-flex;
3443
3494
  user-select: none;
3444
3495
  background-color: var(--figma-color-bg-secondary);
@@ -3756,23 +3807,39 @@ fig-joystick {
3756
3807
  fig-handle {
3757
3808
  position: absolute;
3758
3809
  z-index: 4;
3759
- transform: translate(-50%, -50%);
3760
3810
  }
3761
3811
  }
3762
3812
 
3763
3813
  fig-input-angle {
3764
3814
  --size: 1.5rem;
3765
3815
  display: inline-flex;
3816
+ align-items: center;
3766
3817
  gap: var(--spacer-2);
3767
3818
  user-select: none;
3768
3819
 
3820
+ > fig-input-number {
3821
+ flex: 0 0 auto;
3822
+ width: auto;
3823
+ }
3824
+
3825
+ &[full]:not([full="false"]) {
3826
+ display: flex;
3827
+ width: 100%;
3828
+
3829
+ > fig-input-number {
3830
+ flex: 1 1 auto;
3831
+ min-width: 0;
3832
+ width: auto;
3833
+ }
3834
+ }
3835
+
3769
3836
  /* When inside horizontal fig-field, grow to fill and let inputs expand */
3770
3837
  fig-field[direction="horizontal"] & {
3771
3838
  flex: 1;
3772
3839
  min-width: 0;
3773
3840
 
3774
3841
  fig-input-number {
3775
- flex: 1;
3842
+ flex: 0 0 auto;
3776
3843
  width: auto;
3777
3844
  }
3778
3845
  }
@@ -3939,17 +4006,42 @@ fig-layer {
3939
4006
  }
3940
4007
  }
3941
4008
  }
3942
-
4009
+ @keyframes fig-shimmer-text {
4010
+ from {
4011
+ background-position: var(--shimmer-text-from, 100% 0%);
4012
+ }
4013
+ to {
4014
+ background-position: var(--shimmer-text-to, 0% 0%);
4015
+ }
4016
+ }
4017
+ @keyframes fig-shimmer-mask {
4018
+ from {
4019
+ mask-position: var(--shimmer-mask-from, 100% 0%);
4020
+ }
4021
+ to {
4022
+ mask-position: var(--shimmer-mask-to, 0% 0%);
4023
+ }
4024
+ }
3943
4025
  /* Shimmer */
3944
4026
  fig-shimmer {
3945
4027
  display: contents;
3946
4028
  --shimmer-angle: 90deg;
3947
4029
  --shimmer-size: 250% 100%;
3948
4030
  --shimmer-duration: 1.5s;
4031
+ --shimmer-mask-from: 100% 0%;
4032
+ --shimmer-mask-to: 0% 0%;
4033
+ --shimmer-text-from: 100% 0%;
4034
+ --shimmer-text-to: 0% 0%;
4035
+ --shimmer-subtle-fill-color: var(--figma-color-bg-transparent);
4036
+ --shimmer-bright-fill-color: var(--figma-color-bg-tertiary);
4037
+ --shimmer-subtle-text-color: var(--figma-color-text-tertiary);
4038
+ --shimmer-bright-text-color: var(--figma-color-text);
3949
4039
 
3950
4040
  &[direction="vertical"] {
3951
4041
  --shimmer-angle: 180deg;
3952
4042
  --shimmer-size: 100% 250%;
4043
+ --shimmer-mask-from: 0% 100%;
4044
+ --shimmer-text-from: 0% 100%;
3953
4045
  }
3954
4046
  &[direction="diagonal"] {
3955
4047
  --shimmer-angle: 135deg;
@@ -3957,30 +4049,116 @@ fig-shimmer {
3957
4049
  }
3958
4050
 
3959
4051
  /* When not playing, remove shimmer effect entirely */
3960
- &[playing="false"] > * {
4052
+ &[playing="false"] * {
3961
4053
  background: none;
4054
+ background-size: unset;
4055
+ animation: none;
4056
+ }
4057
+ &[playing="false"] :where(*:not(:has(*)):not(:empty)) {
3962
4058
  -webkit-background-clip: unset;
3963
4059
  background-clip: unset;
3964
4060
  -webkit-text-fill-color: unset;
3965
- animation: none;
4061
+ }
4062
+ /* Only apply shimmer when playing (default) or playing="true" */
4063
+ &:not([playing="false"]) :where(*:has(*), *:empty) {
4064
+ mask: linear-gradient(
4065
+ var(--shimmer-angle),
4066
+ var(--shimmer-subtle-fill-color) 0%,
4067
+ var(--shimmer-subtle-fill-color) 40%,
4068
+ var(--shimmer-bright-fill-color) 50%,
4069
+ var(--shimmer-subtle-fill-color) 60%,
4070
+ var(--shimmer-subtle-fill-color) 100%
4071
+ );
4072
+ mask-size: var(--shimmer-size);
4073
+ animation: fig-shimmer-mask var(--shimmer-duration) linear infinite;
4074
+ }
4075
+ &:not([playing="false"]) :where(*:not(:has(*)):not(:empty)) {
4076
+ mask: none;
4077
+ background: linear-gradient(
4078
+ var(--shimmer-angle),
4079
+ var(--shimmer-subtle-text-color) 0%,
4080
+ var(--shimmer-subtle-text-color) 40%,
4081
+ var(--shimmer-bright-text-color) 50%,
4082
+ var(--shimmer-subtle-text-color) 60%,
4083
+ var(--shimmer-subtle-text-color) 100%
4084
+ );
4085
+ background-size: var(--shimmer-size);
4086
+ animation: fig-shimmer-text var(--shimmer-duration) linear infinite;
4087
+ -webkit-background-clip: text !important;
4088
+ background-clip: text !important;
4089
+ -webkit-text-fill-color: transparent !important;
3966
4090
  }
3967
4091
  }
4092
+ /* Skeleton */
4093
+ fig-skeleton {
4094
+ display: contents;
4095
+ --shimmer-angle: 90deg;
4096
+ --shimmer-size: 250% 100%;
4097
+ --shimmer-duration: 1.5s;
4098
+ --shimmer-mask-from: 100% 0%;
4099
+ --shimmer-mask-to: 0% 0%;
4100
+ --shimmer-subtle-mask-color: rgba(0, 0, 0, 0.75);
4101
+ --shimmer-bright-mask-color: rgba(0, 0, 0, 1);
3968
4102
 
3969
- /* Only apply shimmer when playing (default) or playing="true" */
3970
- fig-shimmer:not([playing="false"]) > * {
3971
- background: linear-gradient(
3972
- var(--shimmer-angle),
3973
- var(--figma-color-text-tertiary) 0%,
3974
- var(--figma-color-text-tertiary) 40%,
3975
- var(--figma-color-text) 50%,
3976
- var(--figma-color-text-tertiary) 60%,
3977
- var(--figma-color-text-tertiary) 100%
3978
- );
3979
- background-size: var(--shimmer-size);
3980
- -webkit-background-clip: text;
3981
- background-clip: text;
3982
- -webkit-text-fill-color: transparent;
3983
- animation: fig-shimmer var(--shimmer-duration) linear infinite;
4103
+ &[direction="vertical"] {
4104
+ --shimmer-angle: 180deg;
4105
+ --shimmer-size: 100% 400%;
4106
+ --shimmer-mask-from: 0% 100%;
4107
+ }
4108
+ &[direction="diagonal"] {
4109
+ --shimmer-angle: 135deg;
4110
+ --shimmer-size: 250% 250%;
4111
+ }
4112
+
4113
+ &:not([playing="false"]) * {
4114
+ mask: linear-gradient(
4115
+ var(--shimmer-angle),
4116
+ var(--shimmer-subtle-mask-color) 0%,
4117
+ var(--shimmer-subtle-mask-color) 40%,
4118
+ var(--shimmer-bright-mask-color) 50%,
4119
+ var(--shimmer-subtle-mask-color) 60%,
4120
+ var(--shimmer-subtle-mask-color) 100%
4121
+ );
4122
+ mask-size: var(--shimmer-size);
4123
+ animation: fig-shimmer-mask var(--shimmer-duration) linear infinite;
4124
+ * {
4125
+ color: transparent;
4126
+ }
4127
+ }
4128
+ label,
4129
+ h3,
4130
+ h2,
4131
+ p,
4132
+ span {
4133
+ background: var(--figma-color-bg-secondary);
4134
+ border-radius: var(--radius-medium);
4135
+ }
4136
+
4137
+ *:not(fig-field, fig-header) {
4138
+ background: var(--figma-color-bg-secondary) !important;
4139
+ box-shadow: none !important;
4140
+ border-radius: var(--radius-medium);
4141
+ color: var(--figma-color-bg-secondary) !important;
4142
+ pointer-events: none;
4143
+ user-select: none;
4144
+ }
4145
+ *::placeholder {
4146
+ color: transparent !important;
4147
+ }
4148
+ *::after,
4149
+ *::before,
4150
+ *::marker,
4151
+ *::picker-icon,
4152
+ *::-webkit-slider-thumb,
4153
+ *::-webkit-slider-runnable-track,
4154
+ *::-webkit-color-swatch,
4155
+ *::-webkit-color-swatch-wrapper,
4156
+ *::-webkit-details-marker,
4157
+ *::-webkit-inner-spin-button,
4158
+ *::-webkit-outer-spin-button,
4159
+ *::-webkit-calendar-picker-indicator {
4160
+ display: none !important;
4161
+ }
3984
4162
  }
3985
4163
 
3986
4164
  /* Fill Picker */
@@ -3992,11 +4170,39 @@ fig-fill-picker {
3992
4170
  }
3993
4171
  }
3994
4172
 
4173
+ fig-preview {
4174
+ display: inline-grid;
4175
+ place-items: center;
4176
+ aspect-ratio: 1;
4177
+ width: calc(100% - var(--spacer-3) * 2);
4178
+ margin: 0 var(--spacer-3);
4179
+ margin-top: var(--spacer-2);
4180
+ margin-bottom: var(--spacer-2);
4181
+ border-radius: var(--radius-medium);
4182
+ position: relative;
4183
+ &::before,
4184
+ &::after,
4185
+ > * {
4186
+ grid-area: 1/1;
4187
+ place-self: center;
4188
+ width: 100%;
4189
+ height: 100%;
4190
+ border-radius: inherit;
4191
+ }
4192
+ &::after {
4193
+ content: "";
4194
+ grid-area: 1/1;
4195
+ place-self: center;
4196
+ box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
4197
+ }
4198
+ }
4199
+
3995
4200
  .fig-fill-picker-dialog {
4201
+ contain: layout;
3996
4202
  width: 240px;
3997
4203
  padding: 0;
3998
4204
 
3999
- fig-header {
4205
+ & > fig-header {
4000
4206
  padding: var(--spacer-2);
4001
4207
  display: flex;
4002
4208
  justify-content: space-between;
@@ -4007,294 +4213,298 @@ fig-fill-picker {
4007
4213
  font-size: 0.6875rem;
4008
4214
  padding: var(--spacer-1) var(--spacer-1);
4009
4215
  }
4010
- }
4011
-
4012
- .fig-fill-picker-type-label {
4013
- font-size: var(--font-size-small);
4014
- font-weight: var(--font-weight-medium);
4015
- color: var(--figma-color-text);
4016
- padding: var(--spacer-1) var(--spacer-2);
4017
- }
4018
-
4019
- .fig-fill-picker-content {
4020
- padding: var(--spacer-3);
4021
- }
4022
-
4023
- .fig-fill-picker-tab {
4024
- display: none;
4216
+ & > fig-content {
4217
+ padding-bottom: var(--spacer-2-5);
4218
+ }
4219
+ .fig-fill-picker-type-label {
4220
+ font-size: var(--font-size-small);
4221
+ font-weight: var(--font-weight-medium);
4222
+ color: var(--figma-color-text);
4223
+ padding: var(--spacer-1) var(--spacer-2);
4224
+ }
4025
4225
 
4026
- &:first-child {
4027
- display: block;
4226
+ .fig-fill-picker-gamut {
4227
+ margin-left: auto;
4028
4228
  }
4029
- }
4030
4229
 
4031
- /* Solid Tab */
4032
- .fig-fill-picker-color-area {
4033
- position: relative;
4034
- width: 100%;
4035
- aspect-ratio: 1;
4036
- border-radius: var(--radius-medium);
4037
- overflow: visible;
4038
- margin-bottom: var(--spacer-2);
4230
+ .fig-fill-picker-tab {
4231
+ display: none;
4039
4232
 
4040
- canvas {
4041
- width: 100%;
4042
- height: 100%;
4043
- border-radius: var(--radius-medium);
4233
+ &:first-child {
4234
+ display: block;
4235
+ }
4044
4236
  }
4045
- }
4046
4237
 
4047
- .fig-fill-picker-handle {
4048
- position: absolute;
4049
- width: 1rem;
4050
- height: 1rem;
4051
- border-radius: 50%;
4052
- background: var(--picker-color);
4053
- box-shadow:
4054
- inset 0 0 0 0.125rem var(--handle-color),
4055
- 0px 0 0 0.5px rgba(0, 0, 0, 0.1),
4056
- var(--elevation-100-canvas);
4057
- transform: translate(-50%, -50%);
4058
- z-index: 1;
4059
- &:hover {
4060
- transform: translate(-50%, -50%);
4238
+ .fig-fill-picker-color-area {
4239
+ canvas {
4240
+ width: 100%;
4241
+ height: 100%;
4242
+ border-radius: var(--radius-medium);
4243
+ }
4061
4244
  }
4062
- }
4063
-
4064
- .fig-fill-picker-sliders {
4065
- display: flex;
4066
- flex-direction: column;
4067
- gap: var(--spacer-2);
4068
- margin-bottom: var(--spacer-2);
4069
4245
 
4070
- fig-slider {
4071
- width: 100%;
4246
+ .fig-fill-picker-color-area fig-handle {
4247
+ --width: 1rem;
4248
+ --height: 1rem;
4249
+ --border-radius: 50%;
4250
+ --box-shadow:
4251
+ inset 0 0 0 0.125rem var(--handle-color),
4252
+ 0px 0 0 0.5px rgba(0, 0, 0, 0.1), var(--elevation-100-canvas);
4253
+ z-index: 1;
4072
4254
  }
4073
- }
4074
4255
 
4075
- .fig-fill-picker-inputs {
4076
- display: flex;
4077
- gap: var(--spacer-1);
4078
- align-items: center;
4256
+ .fig-fill-picker-sliders {
4257
+ display: grid;
4258
+ grid-template-columns: calc(3.5rem + var(--spacer-3)) 1fr;
4259
+ grid-template-rows: 1fr 1fr;
4260
+ align-items: center;
4261
+ padding-right: var(--spacer-3);
4262
+ gap: var(--spacer-2);
4263
+ padding-bottom: var(--spacer-1);
4079
4264
 
4080
- .fig-fill-picker-color-input {
4081
- flex: 1;
4265
+ .fig-fill-picker-eyedropper {
4266
+ grid-column: 1;
4267
+ grid-row: 1 / 3;
4268
+ place-self: center;
4269
+ margin-right: calc(var(--spacer-3) * -1);
4270
+ width: 3.5rem;
4271
+ aspect-ratio: 1 / 1;
4272
+ height: 3.5rem;
4273
+ }
4274
+
4275
+ fig-slider {
4276
+ grid-column: 2;
4277
+ min-width: 0;
4278
+ }
4082
4279
  }
4083
- }
4084
4280
 
4085
- /* Gradient Tab */
4086
- .fig-fill-picker-gradient-header {
4087
- display: flex;
4088
- gap: var(--spacer-2);
4089
- align-items: center;
4090
- margin-bottom: var(--spacer-2);
4281
+ .fig-fill-picker-inputs {
4282
+ .fig-fill-picker-input-mode {
4283
+ width: 3.5rem;
4284
+ }
4285
+ .fig-fill-picker-input-fields {
4286
+ flex: 1;
4287
+ min-width: 0;
4288
+ display: flex;
4091
4289
 
4092
- & > *:last-child fig-button {
4093
- margin-left: auto;
4094
- }
4290
+ .input-combo {
4291
+ flex: 1;
4292
+ min-width: 0;
4293
+ }
4095
4294
 
4096
- .fig-fill-picker-gradient-center {
4097
- fig-input-number {
4098
- width: 48px;
4295
+ fig-input-text {
4296
+ flex: 1;
4297
+ min-width: 0;
4298
+ }
4099
4299
  }
4100
4300
  }
4101
- }
4102
-
4103
- .fig-fill-picker-gradient-preview {
4104
- position: relative;
4105
- width: 100%;
4106
- aspect-ratio: 1;
4107
- border-radius: var(--radius-medium);
4108
- overflow: hidden;
4109
- margin-bottom: var(--spacer-2);
4110
- }
4111
4301
 
4112
- .fig-fill-picker-gradient-bar {
4113
- position: absolute;
4114
- inset: 0;
4115
- border-radius: var(--radius-medium);
4116
- background: linear-gradient(90deg, #d9d9d9 0%, #737373 100%);
4117
- }
4302
+ /* Gradient Tab */
4303
+ .fig-fill-picker-gradient-header {
4304
+ .fig-fill-picker-gradient-type {
4305
+ flex: 1;
4306
+ min-width: 0;
4307
+ }
4118
4308
 
4119
- .fig-fill-picker-gradient-stops-handles {
4120
- position: absolute;
4121
- top: 0;
4122
- left: 0;
4123
- right: 0;
4124
- bottom: 0;
4125
- pointer-events: none;
4126
- }
4309
+ & > *:last-child fig-button {
4310
+ margin-left: auto;
4311
+ }
4127
4312
 
4128
- .fig-fill-picker-gradient-stops {
4129
- .fig-fill-picker-gradient-stops-header {
4130
- display: flex;
4131
- justify-content: space-between;
4132
- align-items: center;
4133
- margin-bottom: var(--spacer-1);
4134
- font-size: 0.75rem;
4135
- color: var(--figma-color-text-secondary);
4313
+ .fig-fill-picker-gradient-center {
4314
+ fig-input-number {
4315
+ width: 48px;
4316
+ }
4317
+ }
4136
4318
  }
4137
- }
4138
-
4139
- .fig-fill-picker-gradient-stops-list {
4140
- display: flex;
4141
- flex-direction: column;
4142
- gap: var(--spacer-1);
4143
- }
4144
4319
 
4145
- .fig-fill-picker-gradient-stop-row {
4146
- display: flex;
4147
- gap: var(--spacer-1);
4148
- align-items: center;
4320
+ .fig-fill-picker-gradient-bar {
4321
+ background: linear-gradient(90deg, #d9d9d9 0%, #737373 100%);
4322
+ }
4149
4323
 
4150
- & > .fig-fill-picker-stop-position {
4151
- flex: 0;
4152
- flex-basis: 3rem;
4153
- min-width: 0;
4154
- width: 3rem;
4324
+ .fig-fill-picker-gradient-stops-handles {
4325
+ position: absolute;
4326
+ top: 0;
4327
+ left: 0;
4328
+ right: 0;
4329
+ bottom: 0;
4330
+ pointer-events: none;
4155
4331
  }
4156
4332
 
4157
- .fig-fill-picker-stop-color {
4158
- flex: 1;
4159
- min-width: 0;
4160
- fig-input-text {
4161
- min-width: 0;
4333
+ .fig-fill-picker-gradient-stops {
4334
+ .fig-fill-picker-gradient-stops-header {
4335
+ > span {
4336
+ flex: 1;
4337
+ }
4162
4338
  }
4163
4339
  }
4164
4340
 
4165
- .fig-fill-picker-stop-remove {
4166
- flex-shrink: 0;
4341
+ .fig-fill-picker-gradient-stops-list {
4342
+ display: flex;
4343
+ flex-direction: column;
4344
+ gap: var(--spacer-1);
4167
4345
  }
4168
- }
4169
4346
 
4170
- /* Media Tabs (Image/Video/Webcam) */
4171
- .fig-fill-picker-media-header {
4172
- display: flex;
4173
- gap: var(--spacer-1);
4174
- align-items: center;
4175
- margin-bottom: var(--spacer-2);
4347
+ .fig-fill-picker-gradient-stop-row {
4348
+ padding-right: var(--spacer-2);
4349
+ & > .fig-fill-picker-stop-position {
4350
+ flex: 0;
4351
+ flex-basis: 3rem;
4352
+ min-width: 0;
4353
+ width: 3rem;
4354
+ }
4176
4355
 
4177
- .fig-fill-picker-scale-mode {
4178
- flex: 1;
4179
- }
4356
+ .fig-fill-picker-stop-color {
4357
+ flex: 1;
4358
+ min-width: 0;
4359
+ fig-input-text {
4360
+ min-width: 0;
4361
+ }
4362
+ }
4180
4363
 
4181
- .fig-fill-picker-scale {
4182
- width: 56px;
4364
+ .fig-fill-picker-stop-remove {
4365
+ flex-shrink: 0;
4366
+ }
4183
4367
  }
4184
- }
4185
4368
 
4186
- .fig-fill-picker-media-preview {
4187
- position: relative;
4188
- aspect-ratio: 1;
4189
- border-radius: var(--radius-medium);
4190
- overflow: hidden;
4191
- display: flex;
4192
- align-items: center;
4193
- justify-content: center;
4369
+ /* Media Tabs (Image/Video/Webcam) */
4370
+ .fig-fill-picker-media-header {
4371
+ .fig-fill-picker-scale-mode {
4372
+ flex: 1;
4373
+ }
4194
4374
 
4195
- &.dragover {
4196
- outline: 2px dashed var(--figma-color-border-brand);
4197
- outline-offset: -2px;
4375
+ .fig-fill-picker-scale {
4376
+ width: 56px;
4377
+ }
4198
4378
  }
4199
4379
 
4200
- &.has-media {
4201
- fig-button {
4202
- visibility: hidden;
4380
+ .fig-fill-picker-media-preview {
4381
+ position: relative;
4382
+ aspect-ratio: 1;
4383
+ margin: var(--spacer-1) var(--spacer-3);
4384
+ border-radius: var(--radius-medium);
4385
+ overflow: hidden;
4386
+ display: flex;
4387
+ align-items: center;
4388
+ justify-content: center;
4389
+
4390
+ &.dragover {
4391
+ outline: 2px dashed var(--figma-color-border-brand);
4392
+ outline-offset: -2px;
4203
4393
  }
4204
- &:hover {
4394
+
4395
+ &.has-media {
4205
4396
  fig-button {
4206
- visibility: visible;
4397
+ visibility: hidden;
4398
+ }
4399
+ &:hover {
4400
+ fig-button {
4401
+ visibility: visible;
4402
+ }
4207
4403
  }
4208
4404
  }
4209
4405
  }
4210
- }
4211
4406
 
4212
- .fig-fill-picker-checkerboard {
4213
- position: absolute;
4214
- inset: 0;
4215
- background-image:
4216
- linear-gradient(45deg, var(--figma-color-bg-tertiary) 25%, transparent 25%),
4217
- linear-gradient(
4218
- -45deg,
4219
- var(--figma-color-bg-tertiary) 25%,
4220
- transparent 25%
4221
- ),
4222
- linear-gradient(45deg, transparent 75%, var(--figma-color-bg-tertiary) 75%),
4223
- linear-gradient(-45deg, transparent 75%, var(--figma-color-bg-tertiary) 75%);
4224
- background-size: 16px 16px;
4225
- background-position:
4226
- 0 0,
4227
- 0 8px,
4228
- 8px -8px,
4229
- -8px 0px;
4230
- }
4407
+ .fig-fill-picker-checkerboard {
4408
+ position: absolute;
4409
+ inset: 0;
4410
+ background-image:
4411
+ linear-gradient(
4412
+ 45deg,
4413
+ var(--figma-color-bg-tertiary) 25%,
4414
+ transparent 25%
4415
+ ),
4416
+ linear-gradient(
4417
+ -45deg,
4418
+ var(--figma-color-bg-tertiary) 25%,
4419
+ transparent 25%
4420
+ ),
4421
+ linear-gradient(
4422
+ 45deg,
4423
+ transparent 75%,
4424
+ var(--figma-color-bg-tertiary) 75%
4425
+ ),
4426
+ linear-gradient(
4427
+ -45deg,
4428
+ transparent 75%,
4429
+ var(--figma-color-bg-tertiary) 75%
4430
+ );
4431
+ background-size: 16px 16px;
4432
+ background-position:
4433
+ 0 0,
4434
+ 0 8px,
4435
+ 8px -8px,
4436
+ -8px 0px;
4437
+ }
4231
4438
 
4232
- .fig-fill-picker-image-preview {
4233
- position: absolute;
4234
- inset: 0;
4235
- width: 100%;
4236
- height: 100%;
4237
- display: none;
4238
- }
4439
+ .fig-fill-picker-image-preview {
4440
+ position: absolute;
4441
+ inset: 0;
4442
+ width: 100%;
4443
+ height: 100%;
4444
+ display: none;
4445
+ }
4239
4446
 
4240
- .fig-fill-picker-video-preview {
4241
- position: absolute;
4242
- inset: 0;
4243
- width: 100%;
4244
- height: 100%;
4245
- object-fit: cover;
4246
- display: none;
4247
- }
4447
+ .fig-fill-picker-video-preview {
4448
+ position: absolute;
4449
+ inset: 0;
4450
+ width: 100%;
4451
+ height: 100%;
4452
+ object-fit: cover;
4453
+ display: none;
4454
+ }
4248
4455
 
4249
- .fig-fill-picker-upload {
4250
- position: relative;
4251
- z-index: 1;
4252
- }
4456
+ .fig-fill-picker-upload {
4457
+ position: relative;
4458
+ z-index: 1;
4459
+ }
4253
4460
 
4254
- /* Webcam Tab */
4255
- .fig-fill-picker-webcam-preview {
4256
- position: relative;
4257
- aspect-ratio: 1;
4258
- border-radius: var(--radius-medium);
4259
- overflow: hidden;
4260
- margin-bottom: var(--spacer-2);
4261
- }
4461
+ /* Webcam Tab */
4462
+ .fig-fill-picker-webcam-preview {
4463
+ position: relative;
4464
+ aspect-ratio: 1;
4465
+ margin: 0 var(--spacer-3);
4466
+ border-radius: var(--radius-medium);
4467
+ overflow: hidden;
4468
+ margin-bottom: var(--spacer-2);
4469
+ }
4262
4470
 
4263
- .fig-fill-picker-webcam-video {
4264
- position: absolute;
4265
- inset: 0;
4266
- width: 100%;
4267
- height: 100%;
4268
- object-fit: cover;
4269
- }
4471
+ .fig-fill-picker-webcam-video {
4472
+ position: absolute;
4473
+ inset: 0;
4474
+ width: 100%;
4475
+ height: 100%;
4476
+ object-fit: cover;
4477
+ }
4270
4478
 
4271
- .fig-fill-picker-webcam-status {
4272
- position: absolute;
4273
- inset: 0;
4274
- display: flex;
4275
- align-items: center;
4276
- justify-content: center;
4277
- background: var(--figma-color-bg-secondary);
4278
- color: var(--figma-color-text-secondary);
4279
- font-size: 0.75rem;
4280
- }
4479
+ .fig-fill-picker-webcam-status {
4480
+ position: absolute;
4481
+ inset: 0;
4482
+ display: flex;
4483
+ align-items: center;
4484
+ justify-content: center;
4485
+ background: var(--figma-color-bg-secondary);
4486
+ color: var(--figma-color-text-secondary);
4487
+ font-size: 0.75rem;
4488
+ }
4281
4489
 
4282
- .fig-fill-picker-webcam-controls {
4283
- display: flex;
4284
- gap: var(--spacer-1);
4490
+ .fig-fill-picker-webcam-controls {
4491
+ display: flex;
4492
+ gap: var(--spacer-1);
4285
4493
 
4286
- .fig-fill-picker-camera-select {
4287
- flex: 1;
4288
- }
4494
+ .fig-fill-picker-camera-select {
4495
+ flex: 1;
4496
+ }
4289
4497
 
4290
- .fig-fill-picker-webcam-capture {
4291
- flex-shrink: 0;
4498
+ .fig-fill-picker-webcam-capture {
4499
+ flex-shrink: 0;
4500
+ }
4292
4501
  }
4293
4502
  }
4294
4503
 
4295
4504
  /* Utilities */
4296
4505
 
4297
4506
  .fig-mask-icon {
4507
+ contain: strict;
4298
4508
  --size: var(--spacer-4);
4299
4509
  --icon: var(--icon-add);
4300
4510
  display: inline-flex;
@@ -4533,12 +4743,14 @@ fig-choice {
4533
4743
  }
4534
4744
 
4535
4745
  fig-handle {
4746
+ contain: strict;
4536
4747
  --width: 0.75rem;
4537
4748
  --height: 0.75rem;
4538
4749
  --fill: var(--figma-color-bg-brand);
4539
4750
  --border-radius: 50%;
4751
+ --ring-width: 1.25px;
4540
4752
  --box-shadow:
4541
- inset 0 0 0 0.09375rem var(--handle-color),
4753
+ inset 0 0 0 var(--ring-width) var(--handle-color),
4542
4754
  0px 0 0 0.5px rgba(0, 0, 0, 0.1), var(--elevation-100-canvas);
4543
4755
  --outline: none;
4544
4756
  --border: none;
@@ -4551,13 +4763,119 @@ fig-handle {
4551
4763
  box-shadow: var(--box-shadow);
4552
4764
  outline: var(--outline);
4553
4765
  border: var(--border);
4766
+
4767
+ &[size="small"] {
4768
+ --width: 0.5625rem;
4769
+ --height: 0.5625rem;
4770
+ }
4771
+
4772
+ &[drag]:not([drag="false"]) {
4773
+ position: absolute;
4774
+ touch-action: none;
4775
+ }
4776
+
4777
+ &[selected]:not([selected="false"]) {
4778
+ outline: var(--ring-width) solid var(--figma-color-border-selected);
4779
+ outline-offset: var(--ring-width);
4780
+ }
4781
+
4782
+ &[disabled]:not([disabled="false"]),
4783
+ &[aria-disabled="true"] {
4784
+ pointer-events: none;
4785
+ opacity: 0.4;
4786
+ cursor: default;
4787
+ }
4788
+
4789
+ &[type="color"] {
4790
+ contain: layout style;
4791
+ overflow: visible;
4792
+ position: relative;
4793
+
4794
+ fig-color-tip {
4795
+ position: absolute;
4796
+ bottom: calc(100% + 6px);
4797
+ left: 50%;
4798
+ transform: translateX(-50%);
4799
+ z-index: 10;
4800
+ }
4801
+ }
4554
4802
  }
4555
4803
 
4556
- @keyframes fig-shimmer {
4557
- 0% {
4558
- background-position: 100% 100%;
4804
+ fig-color-tip {
4805
+ --tip-selection-width: 1px;
4806
+ --tip-selection-scale: 1;
4807
+ --beak-offset: 50%;
4808
+
4809
+ contain: layout;
4810
+ inset: unset;
4811
+ display: inline-grid;
4812
+ place-items: center;
4813
+ overflow: visible;
4814
+ position: relative;
4815
+ color: var(--text-primary);
4816
+ color-scheme: light only;
4817
+ aspect-ratio: 1 / 1;
4818
+ flex-shrink: 0;
4819
+ min-width: max-content;
4820
+ min-height: max-content;
4821
+ background-color: var(--figma-color-bg);
4822
+ border-radius: var(--radius-medium, 0.3125rem);
4823
+ box-shadow: inset 0 0.5px 0 0 rgba(255, 255, 255, 0.1);
4824
+ filter: drop-shadow(0px 1px 1.5px rgba(0, 0, 0, 0.1))
4825
+ drop-shadow(0px 2.5px 6px rgba(0, 0, 0, 0.13))
4826
+ drop-shadow(0px 0px 0.5px rgba(0, 0, 0, 0.15));
4827
+
4828
+ fig-chit {
4829
+ input[type="color"] {
4830
+ background: transparent;
4831
+ }
4559
4832
  }
4560
- 100% {
4561
- background-position: 0% 0%;
4833
+
4834
+ &[selected]:not([selected="false"]) {
4835
+ outline: var(--tip-selection-width) solid var(--figma-color-border-selected);
4836
+ }
4837
+
4838
+ &[selected]:not([selected="false"]):before {
4839
+ content: "";
4840
+ background: var(--figma-color-border-selected);
4841
+ clip-path: var(--tip-pointer);
4842
+ width: 6px;
4843
+ height: 3px;
4844
+ position: absolute;
4845
+ top: calc(100% + 1px);
4846
+ left: var(--beak-offset, 50%);
4847
+ z-index: 1;
4848
+ pointer-events: none;
4849
+ transform: translate(-50%, 0) scale(var(--tip-selection-scale));
4850
+ transform-origin: 50% 0;
4851
+ }
4852
+
4853
+ &:after {
4854
+ content: "";
4855
+ background-color: inherit;
4856
+ clip-path: var(--tip-pointer);
4857
+ width: 6px;
4858
+ height: 3px;
4859
+ position: absolute;
4860
+ top: 100%;
4861
+ left: var(--beak-offset, 50%);
4862
+ z-index: 2;
4863
+ transform: translate(-50%);
4864
+ }
4865
+
4866
+ &[position="bottom"] {
4867
+ &[selected]:not([selected="false"]):before {
4868
+ top: 1px;
4869
+ left: var(--beak-offset, 50%);
4870
+ transform: translate(-50%, -100%) scale(var(--tip-selection-scale))
4871
+ scaleY(-1);
4872
+ transform-origin: 50% 100%;
4873
+ }
4874
+
4875
+ &:after {
4876
+ top: 1px;
4877
+ left: var(--beak-offset, 50%);
4878
+ transform: translate(-50%, -100%) scaleY(-1);
4879
+ }
4562
4880
  }
4563
4881
  }