@rogieking/figui3 9.4.4 → 9.4.6

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.
@@ -83,6 +83,7 @@ useEffect(() => {
83
83
  ```
84
84
 
85
85
  - `display: contents`. Reorders **direct children**. `axis` `vertical` | `horizontal`. `items` selector limits which children reorder (e.g. `items=".row"` to skip headers); `refresh()` re-syncs. Omit `handle` to drag whole rows; set it when rows contain sliders/handles.
86
+ - With fewer than two matching items, children keep `role="listitem"` but drag cursors, handles, focus, and move labels stay inactive until another item is added.
86
87
  - Event `reorder`: `{ oldIndex, newIndex, item }` (indices among matching items). Nested drag is ignored for sliders, handles, and canvas controls.
87
88
 
88
89
  ## AI composer
@@ -59,6 +59,8 @@ Observed: `axis`, `handle`, `items`, `disabled`.
59
59
 
60
60
  `items`: CSS selector for which direct children are reorderable (default: all). Non-matching children stay in place and get `role="none"` unless they have a role. Class/attribute changes on children re-sync automatically; call `refresh()` to force it.
61
61
 
62
+ With fewer than two matching items, matching children retain `role="listitem"` but remain non-draggable and receive no generated focus or move label.
63
+
62
64
  Event `reorder`: `{ oldIndex, newIndex, item }`. Indices count matching items, not DOM positions.
63
65
 
64
66
  Nested drag is ignored for sliders, handles, and canvas controls so inner gestures still work. If a row is still stolen, set `handle` to a drag-affordance selector.
@@ -380,12 +380,18 @@ Handlers below assume `onInput` / `onChange` / `onClick` from [react.md](react.m
380
380
  aria-label="Design tools"
381
381
  onChange={onChange}
382
382
  >
383
+ <fig-toolbelt-item slot="prepend" value="select">
384
+ Select
385
+ </fig-toolbelt-item>
383
386
  <fig-toolbelt-group aria-label="Transform tools">
384
387
  <fig-toolbelt-item value="move" selected={tool === "move" || undefined}>
385
388
  Move
386
389
  </fig-toolbelt-item>
387
390
  <fig-toolbelt-item value="frame">Frame</fig-toolbelt-item>
388
391
  </fig-toolbelt-group>
392
+ <fig-toolbelt-item slot="append" value="settings">
393
+ Settings
394
+ </fig-toolbelt-item>
389
395
  </fig-toolbelt>
390
396
  ```
391
397
 
@@ -394,6 +400,7 @@ Handlers below assume `onInput` / `onChange` / `onClick` from [react.md](react.m
394
400
  - Item attrs: `value`, `selected`, `disabled`
395
401
  - ArrowLeft/ArrowRight move focus horizontally; ArrowUp/ArrowDown move focus vertically; Enter/Space selects
396
402
  - Items stay in light DOM; the internal `part="viewport"` owns scrolling and overflow fades
403
+ - `slot="prepend"` and `slot="append"` keep authored content fixed outside the viewport; slotted items remain selectable and keyboard-navigable
397
404
  - Overflow buttons are generated outside the viewport for `overflow="buttons"`
398
405
  - Events: `input` / `change` → `currentTarget.value`
399
406
 
@@ -79,6 +79,7 @@ Public API: `README.md`. React recipes: [components.md](components.md).
79
79
  - Events: bubbling `input` and `change` with the selected value
80
80
  - `overflow="scrollbar"` is the default and uses buttonless scrolling with the scrollbar hidden; `overflow="buttons"` adds direction-aware paging controls
81
81
  - Internal `part="viewport"` owns scrolling and fades; authored items remain direct light-DOM children
82
+ - `slot="prepend"` and `slot="append"` keep authored items, groups, or custom content fixed outside the viewport; slotted items remain in selection and roving keyboard order
82
83
 
83
84
  ## `.fig-overflow-fade`
84
85
 
package/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [9.4.6]
6
+
7
+ ### Added
8
+
9
+ - Added fixed `prepend` and `append` slots to `fig-toolbelt`; slotted items remain selectable and keyboard-navigable outside the scrolling fade viewport.
10
+
11
+ ### Changed
12
+
13
+ - Toolbelt items now delegate horizontal padding to nested controls and preserve variant-aware selected button colors.
14
+ - Toolbelt paging controls honor padding tokens, and slotted groups receive direction-aware separator borders.
15
+
16
+ ### Fixed
17
+
18
+ - Single-item `fig-reorder` lists retain list semantics without exposing inactive drag handles, cursors, focus, or move labels.
19
+
20
+ ## [9.4.5]
21
+
22
+ ### Fixed
23
+
24
+ - Avatar images now participate in normal layout instead of using absolute positioning.
25
+
5
26
  ## [9.4.4]
6
27
 
7
28
  ### Changed
package/README.md CHANGED
@@ -785,17 +785,20 @@ A selectable horizontal or vertical toolbar that keeps authored items in the lig
785
785
 
786
786
  Wrap related items in `fig-toolbelt-group`; adjacent groups receive a direction-aware separator. Add `aria-label` to groups when the grouping has a meaningful name. Items support `value`, `selected`, and `disabled`. `input` and `change` bubble from the toolbelt with the selected value. ArrowLeft/ArrowRight navigate horizontal toolbelts; ArrowUp/ArrowDown navigate vertical toolbelts. Home and End move to the edges; Enter or Space selects the focused item.
787
787
 
788
+ Place an item, group, or custom element in `slot="prepend"` or `slot="append"` to keep it fixed outside the scrolling and faded viewport. Slotted toolbelt items remain part of selection and keyboard navigation.
789
+
788
790
  Use `--fig-toolbelt-gap`, `--fig-toolbelt-group-gap`, `--fig-toolbelt-group-separator-color`, `--fig-toolbelt-overflow-fade-size`, `--fig-toolbelt-padding-block`, `--fig-toolbelt-padding-inline`, `--fig-toolbelt-item-height`, and `--fig-toolbelt-item-padding` to customize layout. The toolbelt fade defaults to `calc(var(--spacer-6) + var(--spacer-2))`.
789
791
 
790
792
  ```html
791
793
  <fig-toolbelt layout="horizontal" overflow="buttons" value="move" aria-label="Design tools">
794
+ <fig-toolbelt-item slot="prepend" value="move" selected>Move</fig-toolbelt-item>
792
795
  <fig-toolbelt-group aria-label="Transform tools">
793
- <fig-toolbelt-item value="move" selected>Move</fig-toolbelt-item>
794
796
  <fig-toolbelt-item value="frame">Frame</fig-toolbelt-item>
795
797
  </fig-toolbelt-group>
796
798
  <fig-toolbelt-group aria-label="Shape tools">
797
799
  <fig-toolbelt-item value="shape">Shape</fig-toolbelt-item>
798
800
  </fig-toolbelt-group>
801
+ <fig-toolbelt-item slot="append" value="settings">Settings</fig-toolbelt-item>
799
802
  </fig-toolbelt>
800
803
  ```
801
804
 
package/components.css CHANGED
@@ -1290,70 +1290,6 @@ fig-tab {
1290
1290
  cursor: default;
1291
1291
  }
1292
1292
  }
1293
-
1294
-
1295
-
1296
- fig-toolbelt-item {
1297
- display: inline-flex;
1298
- flex-shrink: 0;
1299
- align-items: center;
1300
- justify-content: center;
1301
- height: var(--fig-toolbelt-item-height, var(--control-height));
1302
- padding-inline: var(--fig-toolbelt-item-padding, var(--spacer-2));
1303
- border-radius: var(--radius-medium);
1304
- color: var(--figma-color-text-secondary);
1305
- line-height: var(--line-height);
1306
- cursor: default;
1307
- user-select: none;
1308
-
1309
- &:has(> fig-tooltip > fig-button[icon]:not([icon="false"])) {
1310
- padding-inline: 0;
1311
- }
1312
-
1313
- &[selected]:not([selected="false"]) {
1314
- color: var(--figma-color-text);
1315
- background-color: var(--figma-color-bg-secondary);
1316
-
1317
- fig-button{
1318
- color: var(--figma-color-icon-onbrand);
1319
- background-color: var(--figma-color-bg-brand);
1320
- }
1321
- }
1322
-
1323
- &:hover {
1324
- background-color: var(--figma-color-bg-secondary);
1325
- }
1326
-
1327
- &:focus-visible,
1328
- &[data-focus-visible] {
1329
- outline: var(--figma-focus-outline);
1330
- outline-offset: var(--figma-focus-outline-offset);
1331
- }
1332
-
1333
- &[disabled]:not([disabled="false"]) {
1334
- opacity: 0.4;
1335
- pointer-events: none;
1336
- }
1337
- }
1338
-
1339
- fig-toolbelt-group {
1340
- display: inline-flex;
1341
- flex-flow: row nowrap;
1342
- flex-shrink: 0;
1343
- align-items: stretch;
1344
- gap: var(--fig-toolbelt-gap);
1345
- min-width: 0;
1346
-
1347
- & + fig-toolbelt-group {
1348
- margin-inline-start: calc(
1349
- var(--fig-toolbelt-group-gap) - var(--fig-toolbelt-gap)
1350
- );
1351
- padding-inline-start: var(--fig-toolbelt-group-gap);
1352
- border-inline-start: 1px solid
1353
- var(--fig-toolbelt-group-separator-color);
1354
- }
1355
- }
1356
-
1357
1293
  fig-tab-content {
1358
1294
  display: block;
1359
1295
  width: 100%;
@@ -1474,171 +1410,6 @@ fig-tabs,
1474
1410
  }
1475
1411
  }
1476
1412
 
1477
- fig-toolbelt {
1478
- --fig-toolbelt-gap: var(--spacer-1);
1479
- --fig-toolbelt-group-gap: var(--spacer-2);
1480
- --fig-toolbelt-group-separator-color: var(--figma-color-border);
1481
- --fig-toolbelt-overflow-fade-size: calc(var(--spacer-6) + var(--spacer-2));
1482
- --fig-toolbelt-padding-block: var(--spacer-2);
1483
- --fig-toolbelt-padding-inline: var(--spacer-2);
1484
-
1485
- position: relative;
1486
- display: inline-block;
1487
- box-sizing: border-box;
1488
- width: 100%;
1489
- min-width: 0;
1490
- margin: 0;
1491
- background: var(--figma-color-bg) !important;
1492
- border-radius: var(--radius-large);
1493
-
1494
- &::after{
1495
- content: "";
1496
- position: absolute;
1497
- inset: 0;
1498
- pointer-events: none;
1499
- z-index: 10;
1500
- box-shadow: var(--figma-elevation-100-canvas);
1501
- border-radius: var(--radius-large);
1502
- }
1503
-
1504
- &[disabled]:not([disabled="false"]) {
1505
- pointer-events: none;
1506
- }
1507
-
1508
- &::part(frame) {
1509
- position: relative;
1510
- display: flex;
1511
- flex-flow: row nowrap;
1512
- width: 100%;
1513
- height: 100%;
1514
- min-width: 0;
1515
- min-height: 0;
1516
- }
1517
-
1518
- &::part(viewport) {
1519
- display: flex;
1520
- flex: 1 1 auto;
1521
- flex-flow: row nowrap;
1522
- box-sizing: border-box;
1523
- gap: var(--fig-toolbelt-gap);
1524
- width: 100%;
1525
- min-width: 0;
1526
- padding: var(--fig-toolbelt-padding-block)
1527
- var(--fig-toolbelt-padding-inline);
1528
- overflow: auto hidden;
1529
- scrollbar-width: none;
1530
- }
1531
-
1532
- &::part(viewport)::-webkit-scrollbar {
1533
- display: none;
1534
- }
1535
-
1536
- > .fig-overflow {
1537
- position: absolute;
1538
- top: 0;
1539
- bottom: 0;
1540
- z-index: 3;
1541
- width: var(--control-height);
1542
- height: auto;
1543
- margin: 0;
1544
- }
1545
-
1546
- > .fig-overflow-start {
1547
- left: 0;
1548
- right: auto;
1549
- box-shadow: 1px 0 0 0 var(--figma-color-bordertranslucent);
1550
-
1551
- &::before {
1552
- border-radius: var(--radius-medium) 0 0 var(--radius-medium);
1553
- }
1554
-
1555
- .fig-overflow-chevron {
1556
- rotate: 90deg;
1557
- }
1558
- }
1559
-
1560
- > .fig-overflow-end {
1561
- right: 0;
1562
- left: auto;
1563
- box-shadow: -1px 0 0 0 var(--figma-color-bordertranslucent);
1564
-
1565
- &::before {
1566
- border-radius: 0 var(--radius-medium) var(--radius-medium) 0;
1567
- }
1568
-
1569
- .fig-overflow-chevron {
1570
- rotate: -90deg;
1571
- }
1572
- }
1573
-
1574
- &[layout="vertical"] {
1575
- width: fit-content;
1576
- max-width: 100%;
1577
-
1578
- &::part(frame),
1579
- &::part(viewport) {
1580
- flex-flow: column nowrap;
1581
- }
1582
-
1583
- &::part(viewport) {
1584
- overflow: hidden auto;
1585
- }
1586
-
1587
- fig-toolbelt-group {
1588
- flex-flow: column nowrap;
1589
- width: 100%;
1590
-
1591
- & + fig-toolbelt-group {
1592
- margin-block-start: calc(
1593
- var(--fig-toolbelt-group-gap) - var(--fig-toolbelt-gap)
1594
- );
1595
- margin-inline-start: 0;
1596
- padding-block-start: var(--fig-toolbelt-group-gap);
1597
- padding-inline-start: 0;
1598
- border-block-start: 1px solid
1599
- var(--fig-toolbelt-group-separator-color);
1600
- border-inline-start: 0;
1601
- }
1602
- }
1603
-
1604
- > .fig-overflow {
1605
- top: auto;
1606
- right: 0;
1607
- left: 0;
1608
- width: auto;
1609
- height: var(--control-height);
1610
- }
1611
-
1612
- > .fig-overflow-start {
1613
- top: 0;
1614
- bottom: auto;
1615
- box-shadow: 0 1px 0 0 var(--figma-color-bordertranslucent);
1616
-
1617
- &::before {
1618
- border-radius: var(--radius-medium) var(--radius-medium) 0 0;
1619
- }
1620
-
1621
- .fig-overflow-chevron {
1622
- rotate: 180deg;
1623
- }
1624
- }
1625
-
1626
- > .fig-overflow-end {
1627
- top: auto;
1628
- bottom: 0;
1629
- box-shadow: 0 -1px 0 0 var(--figma-color-bordertranslucent);
1630
-
1631
- &::before {
1632
- border-radius: 0 0 var(--radius-medium) var(--radius-medium);
1633
- }
1634
-
1635
- .fig-overflow-chevron {
1636
- rotate: 0deg;
1637
- }
1638
- }
1639
- }
1640
- }
1641
-
1642
1413
  /* Avatar */
1643
1414
  fig-avatar,
1644
1415
  .fig-avatar {
@@ -1657,7 +1428,6 @@ fig-avatar,
1657
1428
  img {
1658
1429
  width: var(--size);
1659
1430
  height: var(--size);
1660
- position: absolute;
1661
1431
  border-radius: 100%;
1662
1432
  &:not([src]) {
1663
1433
  background: var(--checkerboard);
@@ -5610,13 +5380,6 @@ fig-skeleton {
5610
5380
  overflow-y: auto;
5611
5381
  }
5612
5382
 
5613
- fig-toolbelt::part(viewport) {
5614
- --fig-overflow-fade-size: var(--fig-toolbelt-overflow-fade-size);
5615
- --fig-overflow-fade-clear-top: 0px;
5616
-
5617
- overflow-y: auto;
5618
- }
5619
-
5620
5383
  .fig-overflow-fade.fig-overflow-fade-horizontal {
5621
5384
  --fig-overflow-fade-clear-left: 0px;
5622
5385
 
@@ -5624,11 +5387,325 @@ fig-toolbelt::part(viewport) {
5624
5387
  overflow-y: hidden;
5625
5388
  }
5626
5389
 
5627
- fig-toolbelt:not([layout="vertical"])::part(viewport) {
5628
- --fig-overflow-fade-clear-left: 0px;
5390
+ /* Toolbelt */
5391
+ fig-toolbelt-item {
5392
+ display: inline-flex;
5393
+ flex-shrink: 0;
5394
+ align-items: center;
5395
+ justify-content: center;
5396
+ height: var(--fig-toolbelt-item-height, var(--control-height));
5397
+ padding-inline: 0;
5398
+ border-radius: var(--radius-medium);
5399
+ color: var(--figma-color-text-secondary);
5400
+ line-height: var(--line-height);
5401
+ cursor: default;
5402
+ user-select: none;
5629
5403
 
5630
- overflow-x: auto;
5631
- overflow-y: hidden;
5404
+ &:has(> fig-tooltip > fig-button[icon]:not([icon="false"])) {
5405
+ padding-inline: 0;
5406
+ }
5407
+
5408
+ &[selected]:not([selected="false"]) {
5409
+ color: var(--figma-color-text);
5410
+ background-color: var(--figma-color-bg-secondary);
5411
+
5412
+ fig-button,
5413
+ fig-button:hover {
5414
+ color: var(--figma-color-icon-onbrand);
5415
+ background-color: var(--figma-color-bg-brand);
5416
+ }
5417
+ fig-button[variant="secondary"],
5418
+ fig-button[variant="ghost"],
5419
+ fig-button[variant="secondary"]:hover,
5420
+ fig-button[variant="ghost"]:hover {
5421
+ color: var(--figma-color-icon-selected);
5422
+ background-color: var(--figma-color-bg-selected);
5423
+ }
5424
+ }
5425
+
5426
+ &:hover {
5427
+ background-color: var(--figma-color-bg-secondary);
5428
+ }
5429
+
5430
+ &:focus-visible,
5431
+ &[data-focus-visible] {
5432
+ outline: var(--figma-focus-outline);
5433
+ outline-offset: var(--figma-focus-outline-offset);
5434
+ }
5435
+
5436
+ &[disabled]:not([disabled="false"]) {
5437
+ opacity: 0.4;
5438
+ pointer-events: none;
5439
+ }
5440
+ }
5441
+
5442
+ fig-toolbelt-group {
5443
+ display: inline-flex;
5444
+ flex-flow: row nowrap;
5445
+ flex-shrink: 0;
5446
+ align-items: stretch;
5447
+ gap: var(--fig-toolbelt-gap);
5448
+ min-width: 0;
5449
+
5450
+ &:is(:not([slot]), [slot=""])
5451
+ + fig-toolbelt-group:is(:not([slot]), [slot=""]),
5452
+ &[slot="prepend"] + fig-toolbelt-group[slot="prepend"],
5453
+ &[slot="append"] + fig-toolbelt-group[slot="append"] {
5454
+ margin-inline-start: calc(
5455
+ var(--fig-toolbelt-group-gap) - var(--fig-toolbelt-gap)
5456
+ );
5457
+ padding-inline-start: var(--fig-toolbelt-group-gap);
5458
+ border-inline-start: 1px solid
5459
+ var(--fig-toolbelt-group-separator-color);
5460
+ }
5461
+
5462
+ &[slot="prepend"] {
5463
+ padding-inline-end: var(--fig-toolbelt-group-gap);
5464
+ border-inline-end: 1px solid
5465
+ var(--fig-toolbelt-group-separator-color);
5466
+ }
5467
+
5468
+ &[slot="append"] {
5469
+ padding-inline-start: var(--fig-toolbelt-group-gap);
5470
+ border-inline-start: 1px solid
5471
+ var(--fig-toolbelt-group-separator-color);
5472
+ }
5473
+ }
5474
+
5475
+ fig-toolbelt {
5476
+ --fig-toolbelt-gap: var(--spacer-1);
5477
+ --fig-toolbelt-group-gap: var(--spacer-2);
5478
+ --fig-toolbelt-group-separator-color: var(--figma-color-border);
5479
+ --fig-toolbelt-overflow-fade-size: calc(var(--spacer-6) + var(--spacer-2));
5480
+ --fig-toolbelt-padding-block: var(--spacer-2);
5481
+ --fig-toolbelt-padding-inline: var(--spacer-2);
5482
+
5483
+ position: relative;
5484
+ display: inline-block;
5485
+ box-sizing: border-box;
5486
+ width: 100%;
5487
+ min-width: 0;
5488
+ margin: 0;
5489
+ background: var(--figma-color-bg) !important;
5490
+ border-radius: var(--radius-large);
5491
+
5492
+ &::after {
5493
+ content: "";
5494
+ position: absolute;
5495
+ inset: 0;
5496
+ pointer-events: none;
5497
+ z-index: 10;
5498
+ box-shadow: var(--figma-elevation-100-canvas);
5499
+ border-radius: var(--radius-large);
5500
+ }
5501
+
5502
+ &[disabled]:not([disabled="false"]) {
5503
+ pointer-events: none;
5504
+ }
5505
+
5506
+ &::part(frame),
5507
+ &::part(scroll-region) {
5508
+ position: relative;
5509
+ display: flex;
5510
+ flex-flow: row nowrap;
5511
+ width: 100%;
5512
+ height: 100%;
5513
+ min-width: 0;
5514
+ min-height: 0;
5515
+ }
5516
+
5517
+ &::part(scroll-region) {
5518
+ flex: 1 1 auto;
5519
+ }
5520
+
5521
+ &::part(prepend),
5522
+ &::part(append) {
5523
+ display: flex;
5524
+ flex: 0 0 auto;
5525
+ align-items: stretch;
5526
+ gap: var(--fig-toolbelt-gap);
5527
+ padding-block: var(--fig-toolbelt-padding-block);
5528
+ }
5529
+
5530
+ &::part(prepend) {
5531
+ padding-inline-start: var(--fig-toolbelt-padding-inline);
5532
+ }
5533
+
5534
+ &::part(append) {
5535
+ padding-inline-end: var(--fig-toolbelt-padding-inline);
5536
+ }
5537
+
5538
+ &::part(viewport) {
5539
+ --fig-overflow-fade-size: var(--fig-toolbelt-overflow-fade-size);
5540
+ --fig-overflow-fade-clear-top: 0px;
5541
+
5542
+ display: flex;
5543
+ flex: 1 1 auto;
5544
+ flex-flow: row nowrap;
5545
+ box-sizing: border-box;
5546
+ gap: var(--fig-toolbelt-gap);
5547
+ width: 100%;
5548
+ min-width: 0;
5549
+ padding: var(--fig-toolbelt-padding-block)
5550
+ var(--fig-toolbelt-padding-inline);
5551
+ overflow: auto;
5552
+ scrollbar-width: none;
5553
+ }
5554
+
5555
+ &::part(viewport)::-webkit-scrollbar {
5556
+ display: none;
5557
+ }
5558
+
5559
+ &:not([layout="vertical"])::part(viewport) {
5560
+ --fig-overflow-fade-clear-left: 0px;
5561
+
5562
+ overflow-x: auto;
5563
+ overflow-y: hidden;
5564
+ }
5565
+
5566
+ > .fig-overflow {
5567
+ position: absolute;
5568
+ top: var(--fig-toolbelt-padding-block);
5569
+ bottom: var(--fig-toolbelt-padding-block);
5570
+ z-index: 3;
5571
+ width: var(--control-height);
5572
+ height: auto;
5573
+ margin: 0;
5574
+ }
5575
+
5576
+ > .fig-overflow-start {
5577
+ left: 0;
5578
+ right: auto;
5579
+ box-shadow: 1px 0 0 0 var(--figma-color-bordertranslucent);
5580
+
5581
+ &::before {
5582
+ border-radius: var(--radius-medium) 0 0 var(--radius-medium);
5583
+ }
5584
+
5585
+ .fig-overflow-chevron {
5586
+ rotate: 90deg;
5587
+ }
5588
+ }
5589
+
5590
+ > .fig-overflow-end {
5591
+ right: 0;
5592
+ left: auto;
5593
+ box-shadow: -1px 0 0 0 var(--figma-color-bordertranslucent);
5594
+
5595
+ &::before {
5596
+ border-radius: 0 var(--radius-medium) var(--radius-medium) 0;
5597
+ }
5598
+
5599
+ .fig-overflow-chevron {
5600
+ rotate: -90deg;
5601
+ }
5602
+ }
5603
+
5604
+ &[layout="vertical"] {
5605
+ width: fit-content;
5606
+ max-width: 100%;
5607
+
5608
+ &::part(frame),
5609
+ &::part(scroll-region),
5610
+ &::part(viewport) {
5611
+ flex-flow: column nowrap;
5612
+ }
5613
+
5614
+ &::part(prepend),
5615
+ &::part(append) {
5616
+ flex-flow: column nowrap;
5617
+ padding-block: 0;
5618
+ padding-inline: var(--fig-toolbelt-padding-inline);
5619
+ }
5620
+
5621
+ &::part(prepend) {
5622
+ padding-block-start: var(--fig-toolbelt-padding-block);
5623
+ }
5624
+
5625
+ &::part(append) {
5626
+ padding-block-end: var(--fig-toolbelt-padding-block);
5627
+ }
5628
+
5629
+ &::part(viewport) {
5630
+ overflow: hidden auto;
5631
+ }
5632
+
5633
+ fig-toolbelt-group {
5634
+ flex-flow: column nowrap;
5635
+ width: 100%;
5636
+
5637
+ &:is(:not([slot]), [slot=""])
5638
+ + fig-toolbelt-group:is(:not([slot]), [slot=""]),
5639
+ &[slot="prepend"] + fig-toolbelt-group[slot="prepend"],
5640
+ &[slot="append"] + fig-toolbelt-group[slot="append"] {
5641
+ margin-block-start: calc(
5642
+ var(--fig-toolbelt-group-gap) - var(--fig-toolbelt-gap)
5643
+ );
5644
+ margin-inline-start: 0;
5645
+ padding-block-start: var(--fig-toolbelt-group-gap);
5646
+ padding-inline-start: 0;
5647
+ border-block-start: 1px solid
5648
+ var(--fig-toolbelt-group-separator-color);
5649
+ border-inline-start: 0;
5650
+ }
5651
+
5652
+ &[slot="prepend"] {
5653
+ padding-block-end: calc(
5654
+ var(--fig-toolbelt-group-gap) - var(--fig-toolbelt-gap)
5655
+ );
5656
+ padding-inline-end: 0;
5657
+ border-block-end: 1px solid
5658
+ var(--fig-toolbelt-group-separator-color);
5659
+ border-inline-end: 0;
5660
+ }
5661
+
5662
+ &[slot="append"] {
5663
+ padding-block-start: calc(
5664
+ var(--fig-toolbelt-group-gap) - var(--fig-toolbelt-gap)
5665
+ );
5666
+ padding-inline-start: 0;
5667
+ border-block-start: 1px solid
5668
+ var(--fig-toolbelt-group-separator-color);
5669
+ border-inline-start: 0;
5670
+ }
5671
+ }
5672
+
5673
+ > .fig-overflow {
5674
+ top: auto;
5675
+ right: var(--fig-toolbelt-padding-inline);
5676
+ left: var(--fig-toolbelt-padding-inline);
5677
+ width: auto;
5678
+ height: var(--control-height);
5679
+ }
5680
+
5681
+ > .fig-overflow-start {
5682
+ top: 0;
5683
+ bottom: auto;
5684
+ box-shadow: 0 1px 0 0 var(--figma-color-bordertranslucent);
5685
+
5686
+ &::before {
5687
+ border-radius: var(--radius-medium) var(--radius-medium) 0 0;
5688
+ }
5689
+
5690
+ .fig-overflow-chevron {
5691
+ rotate: 180deg;
5692
+ }
5693
+ }
5694
+
5695
+ > .fig-overflow-end {
5696
+ top: auto;
5697
+ bottom: 0;
5698
+ box-shadow: 0 -1px 0 0 var(--figma-color-bordertranslucent);
5699
+
5700
+ &::before {
5701
+ border-radius: 0 0 var(--radius-medium) var(--radius-medium);
5702
+ }
5703
+
5704
+ .fig-overflow-chevron {
5705
+ rotate: 0deg;
5706
+ }
5707
+ }
5708
+ }
5632
5709
  }
5633
5710
 
5634
5711
  @supports (animation-timeline: scroll(self block)) {