@rogieking/figui3 4.0.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/base.css +1 -0
  2. package/components.css +34 -326
  3. package/fig.js +182 -1831
  4. package/package.json +1 -1
package/base.css CHANGED
@@ -32,6 +32,7 @@ h3 {
32
32
  hr {
33
33
  height: 1px;
34
34
  border: none;
35
+ width: 100%;
35
36
  background-color: var(--figma-color-border);
36
37
  margin: var(--spacer-2) 0;
37
38
 
package/components.css CHANGED
@@ -319,7 +319,7 @@
319
319
  );
320
320
 
321
321
  /* Icons - colorless shapes for use with mask-image */
322
- --icon-chevron: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.87868 7.12132L8 9.24264L10.1213 7.12132' stroke='black' stroke-linecap='round'/%3E%3C/svg%3E%0A");
322
+ --icon-chevron: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.87868 7.12132L8 9.24264L10.1213 7.12132' stroke='grey' stroke-linecap='round'/%3E%3C/svg%3E%0A");
323
323
  --icon-checkmark: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.084 4.22266C11.2372 3.99292 11.5476 3.93084 11.7773 4.08398C12.0071 4.23716 12.0692 4.54758 11.916 4.77734L7.91602 10.7773C7.83292 10.902 7.6979 10.9833 7.54883 10.998C7.39993 11.0126 7.25229 10.9593 7.14648 10.8535L4.14648 7.85352C3.95126 7.65825 3.95123 7.34173 4.14648 7.14648C4.34174 6.95124 4.65825 6.95126 4.85352 7.14648L7.42188 9.71484L11.084 4.22266Z' fill='white'/%3E%3C/svg%3E%0A");
324
324
  --icon-reset: url("data:image/svg+xml,%3Csvg width='16' height='16' fill='none' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' fill-rule='evenodd' d='M6.354 2.146a.5.5 0 0 1 0 .708L5.207 4H8.5a5 5 0 1 1-5 5 .5.5 0 0 1 1 0 4 4 0 1 0 4-4H5.207l1.147 1.146a.5.5 0 1 1-.708.708l-2-2a.5.5 0 0 1 0-.708l2-2a.5.5 0 0 1 .708 0' clip-rule='evenodd'/%3E%3C/svg%3E");
325
325
  --icon-steppers: 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='M11.7245 6.08191C11.9186 5.95386 12.1826 5.97562 12.3534 6.14637L14.3534 8.14637L14.4179 8.22449C14.546 8.41852 14.5242 8.68253 14.3534 8.8534C14.1826 9.02426 13.9186 9.04601 13.7245 8.91785L13.6464 8.8534L11.9999 7.20691L10.3534 8.8534C10.1582 9.04866 9.84166 9.04866 9.6464 8.8534C9.45123 8.65813 9.45117 8.3416 9.6464 8.14637L11.6464 6.14637L11.7245 6.08191Z' fill='black'/%3E%3Cpath d='M13.7248 15.0822C13.9189 14.9541 14.1829 14.9758 14.3537 15.1467C14.5246 15.3176 14.5463 15.5815 14.4182 15.7756L14.3537 15.8537L12.3537 17.8537C12.1829 18.0246 11.9189 18.0463 11.7248 17.9182L11.6467 17.8537L9.64669 15.8537L9.58224 15.7756C9.45407 15.5815 9.47583 15.3176 9.64669 15.1467C9.81756 14.9758 10.0815 14.9541 10.2756 15.0822L10.3537 15.1467L12.0002 16.7932L13.6467 15.1467L13.7248 15.0822Z' fill='black' /%3E%3C/svg%3E%0A");
@@ -481,10 +481,12 @@ input[type="text"][list] {
481
481
  display: flex;
482
482
  appearance: none;
483
483
  align-items: center;
484
- flex: 1 0 0;
485
484
  border: 0;
486
485
  color: var(--figma-color-text);
487
486
  background-color: var(--figma-color-bg);
487
+ background: calc(100% - var(--spacer-1)) 50% / 1rem no-repeat
488
+ var(--icon-chevron);
489
+
488
490
  box-shadow: inset 0 0 0 1px var(--figma-color-border);
489
491
  accent-color: var(--figma-color-bg-brand);
490
492
  overflow: hidden;
@@ -696,14 +698,16 @@ select {
696
698
  }
697
699
 
698
700
  /* Dropdown */
701
+ fig-dropdown {
702
+ & > *:not(select) {
703
+ display: none !important;
704
+ }
705
+ }
699
706
  fig-dropdown,
707
+ select,
700
708
  .fig-dropdown {
701
709
  display: inline-flex;
702
710
  position: relative;
703
-
704
- & > *:not(select) {
705
- display: none !important;
706
- }
707
711
  > select {
708
712
  display: flex;
709
713
  align-items: center;
@@ -736,6 +740,7 @@ fig-dropdown,
736
740
 
737
741
  /* Button */
738
742
  .fig-button,
743
+ button,
739
744
  fig-button {
740
745
  color: var(--figma-color-text-onbrand);
741
746
  display: flex;
@@ -1364,10 +1369,9 @@ fig-input-file {
1364
1369
  flex-shrink: 0;
1365
1370
  }
1366
1371
 
1367
- &[dragover] {
1368
- outline: 2px dashed var(--figma-color-border-brand);
1369
- outline-offset: -2px;
1370
- border-radius: var(--radius-small);
1372
+ &[dragover] fig-button {
1373
+ outline: 1px dashed var(--figma-color-border-brand);
1374
+ outline-offset: -1px;
1371
1375
  }
1372
1376
  }
1373
1377
 
@@ -1890,6 +1894,12 @@ fig-origin-grid {
1890
1894
  }
1891
1895
 
1892
1896
  /* Combo input */
1897
+ fig-combo-input {
1898
+ display: inline-flex;
1899
+ flex: 1;
1900
+ min-width: 0;
1901
+ }
1902
+
1893
1903
  .input-combo {
1894
1904
  display: inline-flex;
1895
1905
  flex-wrap: nowrap;
@@ -2031,6 +2041,7 @@ input[type="checkbox"].switch:checked:focus {
2031
2041
  /* Checkbox */
2032
2042
  input[type="checkbox"]:not(.switch) {
2033
2043
  contain: strict;
2044
+ vertical-align: middle;
2034
2045
  --size: 1rem;
2035
2046
  appearance: none;
2036
2047
  border-radius: var(--radius-medium);
@@ -2165,11 +2176,7 @@ fieldset {
2165
2176
  padding: var(--spacer-2) 0;
2166
2177
 
2167
2178
  & > legend {
2168
- margin-top: 0.125rem;
2169
- font-weight: 500;
2170
- font-size: 0.625rem;
2171
- line-height: 0.875rem;
2172
- color: var(--figma-color-text-secondary);
2179
+ padding: 0;
2173
2180
  }
2174
2181
 
2175
2182
  & > label {
@@ -2183,6 +2190,9 @@ fieldset {
2183
2190
 
2184
2191
  /* Details */
2185
2192
  details {
2193
+ padding: 0 var(--spacer-3);
2194
+ display: block;
2195
+ width: 100%;
2186
2196
  & > summary {
2187
2197
  font-weight: var(--body-medium-strong-fontWeight);
2188
2198
  cursor: default;
@@ -2192,6 +2202,7 @@ details {
2192
2202
  height: var(--spacer-5);
2193
2203
  user-select: none;
2194
2204
  color: var(--figma-color-text-secondary);
2205
+ margin-left: calc(var(--spacer-3) * -1);
2195
2206
 
2196
2207
  &::before {
2197
2208
  content: "";
@@ -3550,171 +3561,6 @@ fig-field,
3550
3561
  }
3551
3562
  }
3552
3563
 
3553
- fig-field-slider {
3554
- display: block;
3555
- position: relative;
3556
- width: 100%;
3557
- --field-text-shadow: 0 1px 1.5px
3558
- light-dark(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2));
3559
-
3560
- label {
3561
- pointer-events: none;
3562
- z-index: 1;
3563
- }
3564
-
3565
- &[disabled]:not([disabled="false"]) {
3566
- pointer-events: none;
3567
-
3568
- label,
3569
- input {
3570
- color: var(--figma-color-text-disabled);
3571
- }
3572
- fig-slider {
3573
- filter: grayscale(100%) opacity(0.5);
3574
- }
3575
- }
3576
- &[type="hue"] {
3577
- label,
3578
- input {
3579
- text-shadow: var(--field-text-shadow);
3580
- color: white;
3581
- }
3582
- }
3583
-
3584
- fig-field {
3585
- position: relative;
3586
- padding-left: var(--spacer-2-5);
3587
-
3588
- &[direction="horizontal"] > label {
3589
- min-width: 0;
3590
- max-width: none;
3591
- width: 100%;
3592
- flex: 1 1 auto;
3593
- }
3594
-
3595
- fig-slider {
3596
- position: absolute;
3597
- inset: 0;
3598
- --slider-height: 2rem;
3599
- --slider-field-height: 2rem;
3600
- --slider-thumb-width: var(--spacer-1);
3601
- --slider-thumb-color: light-dark(
3602
- var(--figma-color-text-secondary),
3603
- var(--figma-color-text)
3604
- );
3605
- --slider-thumb-height: calc(
3606
- var(--spacer-2) + (var(--spacer-3) - var(--spacer-2)) *
3607
- min(var(--slider-complete), calc(1 - var(--slider-complete))) * 2
3608
- );
3609
- --slider-border-radius: var(--radius-medium);
3610
- --slider-tick-width: 0.125rem;
3611
- --slider-tick-height: var(--spacer-2);
3612
- --slider-tick-radius: var(--radius-medium);
3613
- --slider-stepper-padding: 0;
3614
- --slider-handle-shadow: inset 0 0 0 var(--slider-thumb-height)
3615
- var(--slider-thumb-color) !important;
3616
- --slider-thumb-opacity: calc(
3617
- min(var(--slider-complete), calc(1 - var(--slider-complete))) * 2
3618
- );
3619
- --slider-tick-opacity: 1;
3620
-
3621
- &:has(input[type="range"]:focus-within) {
3622
- --slider-thumb-outline: 1.5px solid var(--figma-color-border-selected) !important;
3623
- --slider-thumb-outline-offset: 2px !important;
3624
- }
3625
-
3626
- .fig-slider-input-container {
3627
- box-shadow: none !important;
3628
- &:hover,
3629
- &:focus-within {
3630
- &::after {
3631
- content: "";
3632
- position: absolute;
3633
- inset: 0;
3634
- pointer-events: none;
3635
- border-radius: var(--slider-border-radius);
3636
- box-shadow: inset 0 0 0 1px var(--figma-color-border) !important;
3637
- }
3638
- }
3639
- &::before {
3640
- background: var(--figma-color-bg-tertiary) !important;
3641
- min-width: 0 !important;
3642
- box-shadow: none !important;
3643
- }
3644
- input[type="range"] {
3645
- border-radius: 0 !important;
3646
- }
3647
- }
3648
-
3649
- &:not([type="delta"]) .fig-slider-input-container::before {
3650
- width: var(--slider-percent) !important;
3651
- }
3652
-
3653
- &[type="delta"] .fig-slider-input-container::before {
3654
- --left-start: calc(
3655
- var(--start-percent) - var(--slider-thumb-width) / 2
3656
- ) !important;
3657
- left: min(
3658
- var(--left-start),
3659
- calc(
3660
- var(--slider-percent) - var(--slider-complete) *
3661
- var(--slider-thumb-width)
3662
- )
3663
- ) !important;
3664
- --width: calc(var(--slider-percent) - var(--start-percent)) !important;
3665
- --abs-width: max(
3666
- calc(
3667
- var(--width) + var(--slider-thumb-width) / 2 +
3668
- (1 - var(--slider-complete)) * var(--slider-thumb-width)
3669
- ),
3670
- calc(
3671
- -1 * var(--width) + var(--slider-thumb-width) / 2 +
3672
- var(--slider-complete) * var(--slider-thumb-width)
3673
- )
3674
- ) !important;
3675
- width: var(--abs-width) !important;
3676
- }
3677
- }
3678
- datalist {
3679
- mask-image: linear-gradient(
3680
- to right,
3681
- transparent 0,
3682
- transparent var(--spacer-4),
3683
- white,
3684
- transparent calc(100% - var(--spacer-4)),
3685
- transparent 100%
3686
- );
3687
- }
3688
- fig-input-number {
3689
- background-color: transparent;
3690
- box-shadow: none !important;
3691
- position: absolute;
3692
- right: var(--spacer-1);
3693
- width: fit-content;
3694
- min-width: fit-content;
3695
- max-width: max-content;
3696
- flex: 0 0 auto;
3697
- border-radius: var(--radius-small);
3698
-
3699
- &:hover,
3700
- &:has(input:focus) {
3701
- box-shadow: none !important;
3702
- }
3703
- &:has(input:focus) {
3704
- box-shadow: inset 0 0 0 1px var(--figma-color-border-selected) !important;
3705
- }
3706
- input {
3707
- field-sizing: content;
3708
- border-radius: var(--radius-small);
3709
- width: auto;
3710
- flex: 0 0 auto;
3711
- text-align: right;
3712
- color: var(--field-text-color);
3713
- }
3714
- }
3715
- }
3716
- }
3717
-
3718
3564
  fig-spinner {
3719
3565
  width: 1rem;
3720
3566
  height: 1rem;
@@ -4045,82 +3891,15 @@ fig-joystick {
4045
3891
  }
4046
3892
  }
4047
3893
 
4048
- fig-input-angle {
4049
- --size: 1.5rem;
4050
- display: inline-flex;
4051
- align-items: center;
4052
- gap: var(--spacer-2);
4053
- user-select: none;
4054
-
4055
- > fig-input-number {
4056
- flex: 0 0 auto;
4057
- width: auto;
4058
- }
4059
-
4060
- &[full]:not([full="false"]) {
4061
- display: flex;
4062
- width: 100%;
4063
-
4064
- > fig-input-number {
4065
- flex: 1 1 auto;
4066
- min-width: 0;
4067
- width: auto;
4068
- }
4069
- }
4070
-
4071
- /* When inside horizontal fig-field, grow to fill and let inputs expand */
4072
- fig-field[direction="horizontal"] & {
4073
- flex: 1;
4074
- min-width: 0;
4075
-
4076
- fig-input-number {
4077
- flex: 0 0 auto;
4078
- width: auto;
4079
- }
4080
- }
4081
-
4082
- .fig-input-angle-plane {
4083
- display: inline-grid;
4084
- place-items: center;
4085
- width: var(--size);
4086
- height: var(--size);
4087
- aspect-ratio: 1/1;
4088
- flex-shrink: 0;
4089
- background-color: var(--figma-color-bg-secondary);
4090
- border-radius: 100%;
4091
- box-shadow: inset 0 0 0 1px var(--figma-color-border);
4092
- &:focus,
4093
- &.dragging {
4094
- outline: 0;
4095
- box-shadow: inset 0 0 0 1px var(--figma-color-border-selected);
4096
- }
4097
- }
4098
- .fig-input-angle-handle {
4099
- display: inline-grid;
4100
- place-items: center;
4101
- grid-area: 1/1;
4102
- width: calc(0.5rem + 2px);
4103
- height: calc(0.5rem + 2px);
4104
- &::before {
4105
- content: "";
4106
- display: block;
4107
- width: 0.5rem;
4108
- height: 0.5rem;
4109
- background: var(--handle-color);
4110
- box-shadow: var(--handle-shadow);
4111
- border-radius: 50%;
4112
- }
4113
- }
4114
- }
4115
-
4116
3894
  /* Layer */
4117
3895
  fig-layer {
4118
- --indent: var(--spacer-2);
3896
+ --indent: var(--spacer-3);
4119
3897
  display: block;
4120
3898
  color: var(--figma-color-text);
4121
3899
  position: relative;
4122
3900
  user-select: none;
4123
3901
  width: 100%;
3902
+ padding: 0 var(--spacer-2);
4124
3903
  border-radius: var(--radius-medium);
4125
3904
 
4126
3905
  /* When layer has children */
@@ -4137,7 +3916,7 @@ fig-layer {
4137
3916
  align-items: center;
4138
3917
  gap: var(--spacer-1);
4139
3918
  padding: var(--spacer-1) var(--spacer-2);
4140
- margin-left: 0;
3919
+ margin-left: var(--spacer-1);
4141
3920
  height: var(--spacer-4);
4142
3921
  border-radius: var(--radius-medium);
4143
3922
  position: relative;
@@ -4156,7 +3935,7 @@ fig-layer {
4156
3935
  flex-shrink: 0;
4157
3936
  transition: transform 0.15s;
4158
3937
  position: absolute;
4159
- left: calc(var(--spacer-3) * -1);
3938
+ left: calc(var(--spacer-2-5) * -1);
4160
3939
  top: var(--spacer-1);
4161
3940
  rotate: -90deg;
4162
3941
  }
@@ -4203,8 +3982,11 @@ fig-layer {
4203
3982
 
4204
3983
  /* Nested layers indentation */
4205
3984
  > fig-layer {
4206
- padding-left: var(--indent);
3985
+ padding: 0;
4207
3986
  margin-top: 1px;
3987
+ .fig-layer-row {
3988
+ padding-left: var(--indent);
3989
+ }
4208
3990
  }
4209
3991
 
4210
3992
  /* Collapsed state - hide children */
@@ -5171,77 +4953,3 @@ fig-color-tip {
5171
4953
  }
5172
4954
  }
5173
4955
  }
5174
-
5175
- /* Canvas Control */
5176
- fig-canvas-control {
5177
- display: contents;
5178
- --fig-canvas-control-line-stroke: light-dark(
5179
- rgba(255, 255, 255, 1),
5180
- rgba(255, 255, 255, 0.5)
5181
- );
5182
- --fig-canvas-control-line-stroke-hover: var(--figma-color-bg-brand);
5183
- --fig-canvas-control-line-stroke-active: var(--figma-color-bg-brand);
5184
- --fig-canvas-control-line-stroke-width: 1.25px;
5185
-
5186
- & > fig-handle,
5187
- & > fig-tooltip:has(fig-handle:not([size="small"])) {
5188
- z-index: 1;
5189
- }
5190
-
5191
- .fig-canvas-control-radius {
5192
- position: absolute;
5193
- pointer-events: none;
5194
- overflow: visible;
5195
-
5196
- circle {
5197
- fill: none;
5198
- stroke: var(--fig-canvas-control-line-stroke);
5199
- stroke-width: var(--fig-canvas-control-line-stroke-width);
5200
- paint-order: stroke fill;
5201
- filter: drop-shadow(0 0 0.5px rgba(0, 0, 0, 0.3))
5202
- drop-shadow(0 0.5px 1px rgba(0, 0, 0, 0.12));
5203
- }
5204
-
5205
- .fig-canvas-control-radius-hit {
5206
- stroke: transparent;
5207
- stroke-width: 12px;
5208
- pointer-events: stroke;
5209
- filter: none;
5210
-
5211
- &:hover ~ circle {
5212
- stroke: var(--fig-canvas-control-line-stroke-hover);
5213
- }
5214
- }
5215
- }
5216
-
5217
- &:has(.fig-canvas-control-radius-hit:hover) .fig-canvas-control-angle-line,
5218
- &.fig-canvas-control-ring-active .fig-canvas-control-angle-line {
5219
- stroke: var(--fig-canvas-control-line-stroke-active);
5220
- }
5221
-
5222
- &.fig-canvas-control-ring-active
5223
- .fig-canvas-control-radius
5224
- circle:not(.fig-canvas-control-radius-hit) {
5225
- stroke: var(--fig-canvas-control-line-stroke-active);
5226
- }
5227
-
5228
- .fig-canvas-control-angle-svg {
5229
- pointer-events: none;
5230
- }
5231
-
5232
- .fig-canvas-control-angle-line {
5233
- stroke: var(--fig-canvas-control-line-stroke);
5234
- stroke-width: var(--fig-canvas-control-line-stroke-width);
5235
- paint-order: stroke fill;
5236
- filter: drop-shadow(0 0 0.5px rgba(0, 0, 0, 0.3))
5237
- drop-shadow(0 0.5px 1px rgba(0, 0, 0, 0.12));
5238
- }
5239
-
5240
- fig-handle[size="small"] {
5241
- z-index: 2;
5242
-
5243
- .fig-handle-hit-area {
5244
- cursor: grab;
5245
- }
5246
- }
5247
- }