@rogieking/figui3 6.7.2 → 6.7.3

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/README.md CHANGED
@@ -645,7 +645,7 @@ Segmented controls expose a radio-group pattern. Arrow keys, Home, and End move
645
645
  `<fig-chooser>` / `<fig-choice>`
646
646
 
647
647
  A selection list controller. `<fig-choice>` elements are selectable options within a `<fig-chooser>`.
648
- When app code rebuilds a chooser by setting `fig-chooser.innerHTML`, the chooser restores its internal light-DOM overflow buttons automatically.
648
+ When app code rebuilds a chooser by setting `fig-chooser.innerHTML`, the chooser restores its overflow buttons automatically. Choices remain direct light-DOM children (React-safe).
649
649
 
650
650
  **fig-chooser attributes:**
651
651
 
package/base.css CHANGED
@@ -17,6 +17,7 @@ body,
17
17
  :host {
18
18
  font-size: var(--body-medium-fontSize);
19
19
  letter-spacing: var(--body-letter-spacing);
20
+ line-height: 1.4545em;
20
21
  }
21
22
 
22
23
  h1,
package/components.css CHANGED
@@ -1199,32 +1199,52 @@ fig-tab,
1199
1199
  fig-tabs,
1200
1200
  .tabs {
1201
1201
  --fig-overflow-size: var(--spacer-4);
1202
- display: block;
1202
+ --fig-tabs-inline-padding: var(--spacer-2);
1203
+ --fig-tabs-block-padding: var(--spacer-1);
1204
+ box-sizing: border-box;
1205
+ display: flex;
1206
+ flex-direction: row;
1207
+ align-items: stretch;
1208
+ gap: 0;
1203
1209
  min-width: 0;
1204
- position: relative;
1210
+ overflow: auto hidden;
1211
+ padding: 0;
1212
+ scrollbar-width: none;
1205
1213
  width: 100%;
1206
- overflow: hidden;
1207
1214
 
1208
- > .fig-tabs-scroll {
1209
- box-sizing: border-box;
1210
- display: flex;
1211
- gap: var(--spacer-1);
1212
- overflow: auto hidden;
1213
- padding: var(--spacer-1) var(--spacer-2);
1214
- scrollbar-width: none;
1215
- width: 100%;
1216
- min-width: 0;
1215
+ > fig-tab {
1216
+ flex-shrink: 0;
1217
+ margin-block: var(--fig-tabs-block-padding);
1218
+ }
1219
+
1220
+ > fig-tab + fig-tab {
1221
+ margin-inline-start: var(--spacer-1);
1222
+ }
1223
+
1224
+ > .fig-overflow-start + fig-tab {
1225
+ margin-inline-start: var(--fig-tabs-inline-padding);
1226
+ }
1227
+
1228
+ > fig-tab:has(+ .fig-overflow-end) {
1229
+ margin-inline-end: var(--fig-tabs-inline-padding);
1217
1230
  }
1218
1231
 
1219
1232
  > .fig-overflow {
1220
- top: 0;
1221
- bottom: 0;
1233
+ align-self: stretch;
1234
+ flex: 0 0 var(--fig-overflow-size);
1222
1235
  height: auto;
1236
+ margin-block: 0;
1237
+ position: sticky;
1238
+ top: 0;
1223
1239
  width: var(--fig-overflow-size);
1240
+ z-index: 3;
1224
1241
  }
1225
1242
 
1226
1243
  > .fig-overflow-start {
1244
+ inset-inline-start: 0;
1227
1245
  left: 0;
1246
+ margin-inline-end: calc(-1 * var(--fig-overflow-size));
1247
+ order: -1;
1228
1248
  right: auto;
1229
1249
  box-shadow: 1px 0 0 0 var(--figma-color-bordertranslucent);
1230
1250
 
@@ -1238,8 +1258,11 @@ fig-tabs,
1238
1258
  }
1239
1259
 
1240
1260
  > .fig-overflow-end {
1241
- right: 0;
1261
+ inset-inline-end: 0;
1242
1262
  left: auto;
1263
+ margin-inline-start: calc(-1 * var(--fig-overflow-size));
1264
+ order: 1;
1265
+ right: 0;
1243
1266
  box-shadow: -1px 0 0 0 var(--figma-color-bordertranslucent);
1244
1267
 
1245
1268
  &:before{
@@ -3327,6 +3350,10 @@ fig-group {
3327
3350
  display: block;
3328
3351
  margin-bottom: var(--spacer-2-5);
3329
3352
 
3353
+ p{
3354
+ margin: 0 var(--spacer-3) var(--spacer-2) var(--spacer-3);
3355
+ }
3356
+
3330
3357
  /* Sibling groups */
3331
3358
  & + fig-group {
3332
3359
  box-shadow: inset 0 1px 0 0 var(--figma-color-border);
@@ -3455,14 +3482,17 @@ fig-footer {
3455
3482
  }
3456
3483
 
3457
3484
  fig-content {
3458
- padding: var(--spacer-2) 0;
3485
+ padding: var(--spacer-2) var(--spacer-3);
3459
3486
  display: block;
3487
+ color: var(--figma-color-text-secondary);
3460
3488
 
3461
3489
  p{
3462
3490
  margin: 0 0 var(--spacer-2) 0;
3463
- padding: 0 var(--spacer-3);
3464
3491
  }
3465
3492
  }
3493
+ body>fig-content{
3494
+ padding: var(--spacer-2) 0;
3495
+ }
3466
3496
 
3467
3497
  vstack,
3468
3498
  .vstack,
@@ -4602,95 +4632,57 @@ fig-icon {
4602
4632
  fig-chooser {
4603
4633
  --chooser-fade-size: var(--spacer-4);
4604
4634
  --fig-chooser-gap: var(--spacer-2);
4635
+ --fig-chooser-inline-padding: var(--spacer-2);
4636
+ --fig-chooser-block-padding: var(--spacer-2);
4605
4637
 
4606
- display: block;
4638
+ box-sizing: border-box;
4639
+ display: flex;
4640
+ flex-direction: column;
4641
+ gap: 0;
4642
+ height: inherit;
4643
+ max-height: inherit;
4644
+ max-width: inherit;
4607
4645
  min-width: 0;
4608
- overflow: visible;
4609
- position: relative;
4646
+ overflow: hidden auto;
4647
+ padding: 0;
4648
+ scrollbar-width: none;
4649
+ width: 100%;
4610
4650
 
4611
- > .fig-chooser-scroll {
4612
- display: flex;
4613
- flex-direction: column;
4614
- gap: var(--fig-chooser-gap);
4615
- overflow: visible auto;
4616
- scrollbar-width: none;
4617
- scroll-snap-type: y mandatory;
4618
- width: 100%;
4619
- height: inherit;
4620
- max-height: inherit;
4621
- max-width: inherit;
4651
+ > :not(.fig-overflow) {
4652
+ flex-shrink: 0;
4622
4653
  min-width: 0;
4623
4654
  }
4624
4655
 
4625
- > .fig-chooser-scroll > * {
4626
- scroll-snap-align: start;
4627
- }
4628
-
4629
- &[overflow="scrollbar"] {
4630
- > .fig-chooser-scroll {
4631
- scrollbar-width: thin;
4632
- scrollbar-color: var(--figma-color-border) transparent;
4633
- }
4634
- }
4635
-
4636
- &[layout="horizontal"] {
4637
- > .fig-chooser-scroll {
4638
- flex-direction: row;
4639
- flex-wrap: nowrap;
4640
- overflow: auto hidden;
4641
- scrollbar-width: none;
4642
- scroll-snap-type: x mandatory;
4643
- }
4644
-
4645
- &[overflow="scrollbar"] {
4646
- > .fig-chooser-scroll {
4647
- scrollbar-width: thin;
4648
- scrollbar-color: var(--figma-color-border) transparent;
4649
- }
4650
- }
4651
-
4652
- > .fig-chooser-scroll > * {
4653
- flex: 1 1 0%;
4654
- }
4655
- }
4656
-
4657
- &[layout="grid"] {
4658
- > .fig-chooser-scroll {
4659
- display: grid;
4660
- grid-template-columns: repeat(
4661
- var(--fig-chooser-grid-columns, 2),
4662
- minmax(0, 1fr)
4663
- );
4664
- }
4665
-
4666
- > .fig-chooser-scroll > * {
4667
- min-width: 0;
4668
- }
4656
+ > :not(.fig-overflow) + :not(.fig-overflow) {
4657
+ margin-block-start: var(--fig-chooser-gap);
4669
4658
  }
4670
4659
 
4671
- &[full]:not([full="false"]) {
4672
- width: 100%;
4660
+ > .fig-overflow-start + :not(.fig-overflow) {
4661
+ margin-block-start: var(--fig-chooser-block-padding);
4673
4662
  }
4674
4663
 
4675
- &[disabled]:not([disabled="false"]) {
4676
- pointer-events: none;
4677
- opacity: 0.4;
4664
+ > :not(.fig-overflow):has(+ .fig-overflow-end) {
4665
+ margin-block-end: var(--fig-chooser-block-padding);
4678
4666
  }
4679
4667
 
4680
4668
  > .fig-overflow {
4681
- left: 0;
4682
- right: 0;
4683
- width: 100%;
4669
+ flex: 0 0 var(--chooser-fade-size);
4684
4670
  height: var(--chooser-fade-size);
4671
+ margin-inline: 0;
4672
+ position: sticky;
4673
+ width: 100%;
4674
+ z-index: 3;
4685
4675
  }
4686
4676
 
4687
4677
  > .fig-overflow-start {
4688
- top: 0;
4689
4678
  box-shadow: 0 1px 0 0 var(--figma-color-bordertranslucent);
4690
- &:before{
4691
- border-radius: var(--radius-medium) 0 0 var(--radius-medium);
4692
- }
4679
+ margin-block-end: calc(-1 * var(--chooser-fade-size));
4680
+ order: -1;
4681
+ top: 0;
4693
4682
 
4683
+ &:before {
4684
+ border-radius: var(--radius-medium) var(--radius-medium) 0 0;
4685
+ }
4694
4686
 
4695
4687
  .fig-overflow-chevron {
4696
4688
  rotate: 180deg;
@@ -4700,25 +4692,62 @@ fig-chooser {
4700
4692
  > .fig-overflow-end {
4701
4693
  bottom: 0;
4702
4694
  box-shadow: 0 -1px 0 0 var(--figma-color-bordertranslucent);
4703
- &:before{
4704
- border-radius: 0 var(--radius-medium) var(--radius-medium) 0;
4695
+ margin-block-start: calc(-1 * var(--chooser-fade-size));
4696
+ order: 1;
4697
+
4698
+ &:before {
4699
+ border-radius: 0 0 var(--radius-medium) var(--radius-medium);
4705
4700
  }
4706
4701
  }
4707
4702
 
4703
+ &[overflow="scrollbar"] {
4704
+ scrollbar-width: thin;
4705
+ scrollbar-color: var(--figma-color-border) transparent;
4706
+ }
4707
+
4708
4708
  &[layout="horizontal"] {
4709
+ flex-direction: row;
4710
+ overflow: auto hidden;
4711
+
4712
+ > :not(.fig-overflow) + :not(.fig-overflow) {
4713
+ margin-block-start: 0;
4714
+ margin-inline-start: var(--fig-chooser-gap);
4715
+ }
4716
+
4717
+ > .fig-overflow-start + :not(.fig-overflow) {
4718
+ margin-block-start: 0;
4719
+ margin-inline-start: var(--fig-chooser-inline-padding);
4720
+ }
4721
+
4722
+ > :not(.fig-overflow):has(+ .fig-overflow-end) {
4723
+ margin-block-end: 0;
4724
+ margin-inline-end: var(--fig-chooser-inline-padding);
4725
+ }
4726
+
4727
+ > :not(.fig-overflow) {
4728
+ flex: 0 0 auto;
4729
+ }
4730
+
4709
4731
  > .fig-overflow {
4710
- top: 0;
4711
- bottom: 0;
4732
+ align-self: stretch;
4733
+ flex: 0 0 var(--chooser-fade-size);
4712
4734
  height: auto;
4735
+ margin-block: 0;
4713
4736
  width: var(--chooser-fade-size);
4714
- align-self: stretch;
4715
- margin: 0;
4716
4737
  }
4717
4738
 
4718
4739
  > .fig-overflow-start {
4740
+ box-shadow: 1px 0 0 0 var(--figma-color-bordertranslucent);
4741
+ inset-inline-start: 0;
4719
4742
  left: 0;
4743
+ margin-block-end: 0;
4744
+ margin-inline-end: calc(-1 * var(--chooser-fade-size));
4720
4745
  right: auto;
4721
- box-shadow: 1px 0 0 0 var(--figma-color-bordertranslucent);
4746
+ top: 0;
4747
+
4748
+ &:before {
4749
+ border-radius: var(--radius-medium) 0 0 var(--radius-medium);
4750
+ }
4722
4751
 
4723
4752
  .fig-overflow-chevron {
4724
4753
  rotate: 90deg;
@@ -4726,28 +4755,74 @@ fig-chooser {
4726
4755
  }
4727
4756
 
4728
4757
  > .fig-overflow-end {
4729
- right: 0;
4730
- left: auto;
4758
+ bottom: auto;
4731
4759
  box-shadow: -1px 0 0 0 var(--figma-color-bordertranslucent);
4760
+ inset-inline-end: 0;
4761
+ left: auto;
4762
+ margin-block-start: 0;
4763
+ margin-inline-start: calc(-1 * var(--chooser-fade-size));
4764
+ right: 0;
4765
+ top: 0;
4766
+
4767
+ &:before {
4768
+ border-radius: 0 var(--radius-medium) var(--radius-medium) 0;
4769
+ }
4732
4770
 
4733
4771
  .fig-overflow-chevron {
4734
4772
  rotate: -90deg;
4735
4773
  }
4736
4774
  }
4737
4775
  }
4738
- &[layout="vertical"],
4739
- &[layout="grid"]{
4740
- > .fig-overflow-start{
4741
- &:before{
4742
- border-radius: var(--radius-medium) var(--radius-medium) 0 0;
4743
- }
4776
+
4777
+ &[layout="grid"] {
4778
+ display: grid;
4779
+ gap: var(--fig-chooser-gap);
4780
+ grid-template-columns: repeat(
4781
+ var(--fig-chooser-grid-columns, 2),
4782
+ minmax(0, 1fr)
4783
+ );
4784
+ overflow: auto;
4785
+ scroll-snap-type: none;
4786
+
4787
+ > :not(.fig-overflow) {
4788
+ margin: 0;
4789
+ }
4790
+
4791
+ > :not(.fig-overflow) + :not(.fig-overflow) {
4792
+ margin: 0;
4793
+ }
4794
+
4795
+ > .fig-overflow-start + :not(.fig-overflow),
4796
+ > :not(.fig-overflow):has(+ .fig-overflow-end) {
4797
+ margin: 0;
4798
+ }
4799
+
4800
+ > .fig-overflow {
4801
+ grid-column: 1 / -1;
4802
+ margin-inline: 0;
4803
+ }
4804
+
4805
+ > .fig-overflow-start {
4806
+ order: -1;
4744
4807
  }
4808
+
4809
+ > :not(.fig-overflow) {
4810
+ order: 0;
4811
+ }
4812
+
4745
4813
  > .fig-overflow-end {
4746
- &:before{
4747
- border-radius: 0 0 var(--radius-medium) var(--radius-medium);
4748
- }
4814
+ order: 1;
4749
4815
  }
4750
4816
  }
4817
+
4818
+ &[full]:not([full="false"]) {
4819
+ width: 100%;
4820
+ }
4821
+
4822
+ &[disabled]:not([disabled="false"]) {
4823
+ pointer-events: none;
4824
+ opacity: 0.4;
4825
+ }
4751
4826
  }
4752
4827
 
4753
4828
  fig-choice {
package/dist/base.css CHANGED
@@ -1 +1 @@
1
- html,:host{width:100%;height:100%;color:var(--figma-color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--font-family);font-size:16px;font-weight:var(--body-medium-fontWeight);letter-spacing:var(--body-letter-spacing);background-color:var(--figma-color-bg);margin:0;padding:0}body,:host{font-size:var(--body-medium-fontSize);letter-spacing:var(--body-letter-spacing)}h1,h2{font-weight:var(--body-large-strong-fontWeight);font-size:var(--body-large-fontSize)}h3{font-weight:var(--body-medium-strong-fontWeight);font-size:var(--body-medium-fontSize)}hr{background-color:var(--figma-color-border);width:100%;height:1px;margin:var(--spacer-2) 0;border:none;&[vertical]{width:1px;height:100%;margin:0 var(--spacer-2)}}iframe{background-color:#0000;border:0;flex:auto;width:100%;max-width:100%;height:max-content;min-height:0;max-height:100%;margin:0;display:block}*,:before,:after{box-sizing:border-box}::selection{background-color:var(--figma-color-text-selection)}::selection{background-color:var(--figma-color-text-selection)}::-webkit-scrollbar{width:var(--spacer-1);height:var(--spacer-1)}::-webkit-scrollbar-thumb{background-color:var(--figma-color-bg-tertiary);border-radius:calc(var(--spacer-1) / 2)}::-webkit-scrollbar-thumb:hover{background-color:var(--figma-color-bg-secondary)}*{scrollbar-width:thin;scrollbar-color:var(--figma-color-bg-tertiary) var(--figma-color-bg-secondary)}.subtle{color:var(--figma-color-text-tertiary)}p{margin:var(--spacer-2) 0;color:var(--figma-color-text-secondary);line-height:1rem;&:last-child{margin-bottom:0}}label{color:var(--figma-color-text-secondary)}h2{font-weight:var(--body-medium-strong-fontWeight);margin:var(--spacer-2) 0}a{color:var(--figma-color-text-brand);text-decoration:none;&:hover{text-decoration:underline}}
1
+ html,:host{width:100%;height:100%;color:var(--figma-color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--font-family);font-size:16px;font-weight:var(--body-medium-fontWeight);letter-spacing:var(--body-letter-spacing);background-color:var(--figma-color-bg);margin:0;padding:0}body,:host{font-size:var(--body-medium-fontSize);letter-spacing:var(--body-letter-spacing);line-height:1.4545em}h1,h2{font-weight:var(--body-large-strong-fontWeight);font-size:var(--body-large-fontSize)}h3{font-weight:var(--body-medium-strong-fontWeight);font-size:var(--body-medium-fontSize)}hr{background-color:var(--figma-color-border);width:100%;height:1px;margin:var(--spacer-2) 0;border:none;&[vertical]{width:1px;height:100%;margin:0 var(--spacer-2)}}iframe{background-color:#0000;border:0;flex:auto;width:100%;max-width:100%;height:max-content;min-height:0;max-height:100%;margin:0;display:block}*,:before,:after{box-sizing:border-box}::selection{background-color:var(--figma-color-text-selection)}::selection{background-color:var(--figma-color-text-selection)}::-webkit-scrollbar{width:var(--spacer-1);height:var(--spacer-1)}::-webkit-scrollbar-thumb{background-color:var(--figma-color-bg-tertiary);border-radius:calc(var(--spacer-1) / 2)}::-webkit-scrollbar-thumb:hover{background-color:var(--figma-color-bg-secondary)}*{scrollbar-width:thin;scrollbar-color:var(--figma-color-bg-tertiary) var(--figma-color-bg-secondary)}.subtle{color:var(--figma-color-text-tertiary)}p{margin:var(--spacer-2) 0;color:var(--figma-color-text-secondary);line-height:1rem;&:last-child{margin-bottom:0}}label{color:var(--figma-color-text-secondary)}h2{font-weight:var(--body-medium-strong-fontWeight);margin:var(--spacer-2) 0}a{color:var(--figma-color-text-brand);text-decoration:none;&:hover{text-decoration:underline}}