@rogieking/figui3 9.4.12 → 10.0.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.
@@ -49,7 +49,7 @@ Data-driven (no authored options):
49
49
  ```
50
50
 
51
51
  - Auto `slot="panel"` if missing. Use `slot="panel"` when the panel is slotted (rich / verbose options).
52
- - First `fig-separator` child is auto-`borderless`. `sticky` pins the label while scrolling.
52
+ - A leading labeled `fig-separator` omits its rule. `sticky` pins the label while scrolling.
53
53
  - Overflow adds `.overflow-start` / `.overflow-end`. Sticky `top` sits below the overflow chevron (`--fig-vertical-overflow-size`).
54
54
  - Methods: `syncOverflow()`, `scrollToOption(option, behavior)`.
55
55
  - Options stay in light DOM. Author them as React children.
@@ -15,7 +15,7 @@ Observed: `value`, `disabled`, `selected`, `label`.
15
15
 
16
16
  - Auto `slot="panel"` if missing
17
17
  - Unwraps a legacy nested `fig-chooser`
18
- - First `fig-separator` child gets `borderless`
18
+ - A leading labeled `fig-separator` omits its rule
19
19
  - Overflow nav buttons: `data-fig-select-nav`, classes `overflow-start` / `overflow-end`
20
20
  - Methods: `syncOverflow()`, `scrollToOption(option, behavior)`
21
21
 
@@ -455,7 +455,8 @@ Handlers below assume `onInput` / `onChange` / `onClick` from [react.md](react.m
455
455
  <fig-separator label="Darken" sticky />
456
456
  ```
457
457
 
458
- - Attrs: `label`, `sticky`, `borderless`. First separator in a panel is auto-`borderless`.
458
+ - Attrs: `label`, `sticky`.
459
+ - `label` generates a child `<label>`; an authored child `<label>` is preserved instead.
459
460
 
460
461
  ### `fig-menu` / `fig-menu-item`
461
462
 
@@ -103,7 +103,7 @@ Toast: `theme`, `duration`, `offset`, `dismiss`, `live="polite|assertive"`, `ico
103
103
  - `position`, `offset`, `closedby="auto|any|none"`, `open`
104
104
  - Items stay in light DOM and slot into the popup (do not relocate)
105
105
  - Items: `fig-menu-item` (`value`, `disabled`, `subtle`). Also a list row outside `fig-menu` (popup, sticky separators, nested row `fig-menu`).
106
- - Dividers: `fig-separator` / `fig-menu-separator` (`label`, `sticky`, `borderless`)
106
+ - Dividers: `fig-separator` / `fig-menu-separator` (`label`, `sticky`)
107
107
  - Popup uses `popover="manual"` (top layer) and stays in the menu shadow so slots keep working
108
108
 
109
109
  ## Color / fill values
package/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [10.0.0]
6
+
7
+ ### Added
8
+
9
+ - Added a vertical separator playground example.
10
+
11
+ ### Changed
12
+
13
+ - `fig-separator` labels now render as child `<label>` elements and preserve authored labels.
14
+ - Removed the `borderless` separator attribute; leading labeled menu and select separators now omit their rule automatically.
15
+ - Refined separator spacing and sticky behavior, and reduced chooser selection-ring thickness.
16
+
17
+ ### Fixed
18
+
19
+ - Visual-only `fig-select-option` rows no longer render stray ellipses or extra height.
20
+
21
+ ## [9.4.13]
22
+
23
+ ### Changed
24
+
25
+ - `fig-menu-item` append content now aligns directly to the trailing edge without requiring a wrapper.
26
+ - Simplified the standalone menu-item checkbox example to slot the checkbox directly.
27
+
5
28
  ## [9.4.12]
6
29
 
7
30
  ### Added
package/README.md CHANGED
@@ -1386,12 +1386,11 @@ Escape dismisses an open tooltip and returns focus to its trigger.
1386
1386
 
1387
1387
  `<fig-separator>` — [demo](https://rog.ie/figui3/#separator)
1388
1388
 
1389
- A visual divider between content groups. The optional `label` attribute adds a group label and accessible name. Add `borderless` to hide the separator line. `<fig-menu-separator>` is a backwards-compatible alias.
1389
+ A visual divider between content groups. The optional `label` attribute adds a group label and accessible name. `<fig-menu-separator>` is a backwards-compatible alias.
1390
1390
 
1391
1391
  ```html
1392
1392
  <fig-separator></fig-separator>
1393
1393
  <fig-separator label="More"></fig-separator>
1394
- <fig-separator label="First group" borderless></fig-separator>
1395
1394
  <fig-menu-separator></fig-menu-separator>
1396
1395
  ```
1397
1396
 
@@ -1451,7 +1450,7 @@ Popup list (no wrapping `fig-menu`):
1451
1450
  </dialog>
1452
1451
  ```
1453
1452
 
1454
- `fig-separator` and `fig-menu-separator` accept optional `label` — renders the rule, then secondary group text underneath.
1453
+ `fig-separator` and `fig-menu-separator` accept optional `label` — renders the rule, then a generated `<label>` with secondary group text underneath. An authored child `<label>` takes precedence and is preserved.
1455
1454
 
1456
1455
  ---
1457
1456
 
package/components.css CHANGED
@@ -6075,7 +6075,7 @@ fig-chooser {
6075
6075
  --fig-chooser-inline-padding: var(--spacer-2);
6076
6076
  --fig-chooser-block-padding: var(--spacer-2);
6077
6077
  --fig-chooser-inline-margin: 0px;
6078
- --fig-choice-selection-ring-width: 2px;
6078
+ --fig-choice-selection-ring-width: 1.5px;
6079
6079
  --fig-choice-selection-ring-gutter: calc(
6080
6080
  var(--fig-choice-selection-ring-width) * 2
6081
6081
  );
@@ -6811,6 +6811,10 @@ fig-menu-item {
6811
6811
  margin-top: calc(var(--spacer-1) * -1);
6812
6812
  margin-bottom: calc(var(--spacer-1) * -1);
6813
6813
  }
6814
+ & > [slot="append"] {
6815
+ margin-left: auto;
6816
+ flex: 0 0 auto;
6817
+ }
6814
6818
 
6815
6819
  &:has(> [slot="append"]) {
6816
6820
  --fig-menu-item-padding: var(--spacer-1,0.25rem) var(--spacer-3,0.75rem) var(--spacer-1,0.25rem) var(--spacer-3,0.75rem);
@@ -6846,69 +6850,58 @@ fig-menu-item {
6846
6850
  :is(fig-separator, fig-menu-separator) {
6847
6851
  --fig-separator-color: var(--figma-color-border);
6848
6852
  --fig-separator-label-color: var(--figma-color-text-secondary);
6849
- --fig-separator-padding: 0 var(--spacer-4,1rem);
6853
+ --fig-separator-margin-block: var(--spacer-2,0.5rem);
6854
+ --fig-separator-padding-block: 0;
6855
+ --fig-separator-padding-inline: var(--spacer-4,1rem);
6850
6856
 
6851
6857
  display: block;
6852
6858
  box-sizing: border-box;
6853
6859
  flex-shrink: 0;
6854
6860
  width: 100%;
6855
6861
  height: 1px;
6856
- margin: var(--spacer-2,0.5rem) 0;
6857
- padding: var(--fig-separator-padding);
6862
+ margin-block: var(--fig-separator-margin-block);
6863
+ margin-inline: 0;
6864
+ padding-block: var(--fig-separator-padding-block);
6865
+ padding-inline: var(--fig-separator-padding-inline);
6858
6866
  border: 0;
6859
- background: var(--fig-separator-color);
6867
+ border-block-start: 1px solid var(--fig-separator-color);
6868
+ background: transparent;
6860
6869
  color: var(--fig-separator-label-color);
6861
6870
  font-weight: var(--body-medium-fontWeight);
6862
6871
  pointer-events: none;
6863
6872
  user-select: none;
6864
6873
 
6865
6874
  &[direction="vertical"] {
6875
+ --fig-separator-margin-block: 0;
6866
6876
  align-self: stretch;
6867
6877
  width: 1px;
6868
6878
  max-width: 1px;
6869
6879
  height: auto;
6870
6880
  min-height: var(--spacer-3);
6871
- margin: 0;
6872
6881
  padding: 0;
6882
+ border-block-start: 0;
6883
+ border-inline-start: 1px solid var(--fig-separator-color);
6873
6884
  }
6874
6885
 
6875
- &[borderless]:not([borderless="false"]) {
6876
- background: transparent;
6877
-
6878
- &[label]:not([label=""])::before {
6879
- display: none;
6880
- }
6886
+ & > label {
6887
+ display: block;
6888
+ line-height: var(--spacer-4,1rem);
6889
+ min-height: var(--spacer-4,1rem);
6890
+ overflow: hidden;
6891
+ text-overflow: ellipsis;
6892
+ white-space: nowrap;
6881
6893
  }
6882
6894
 
6883
6895
  /* Labeled: rule, then secondary group label (same pattern as menu optgroups). */
6884
- &[label]:not([label=""]) {
6885
- display: flex;
6886
- flex-direction: column;
6887
- gap: var(--spacer-2,0.5rem);
6896
+ &:has(> label) {
6897
+ --fig-separator-margin-block: var(--spacer-2,0.5rem) var(--spacer-1,0.25rem);
6898
+ --fig-separator-padding-block: var(--spacer-2,0.5rem) 0;
6888
6899
  height: auto;
6889
- margin: var(--spacer-2,0.5rem) 0;
6890
- margin-bottom: var(--spacer-1,0.25rem);
6891
- background: transparent;
6892
-
6893
- &:first-of-type,
6894
- &:first-child {
6895
- margin-top: 0;
6896
- }
6897
-
6898
- &::before {
6899
- content: "";
6900
- display: block;
6901
- height: 1px;
6902
- margin-inline: calc(-1 * var(--spacer-4,1rem));
6903
- background: var(--fig-separator-color);
6904
- }
6905
6900
 
6906
- &::after {
6907
- content: attr(label);
6908
- display: block;
6909
- color: var(--fig-separator-label-color);
6910
- line-height: var(--spacer-4,1rem);
6911
- min-height: var(--spacer-4,1rem);
6901
+ &:first-child{
6902
+ --fig-separator-padding-block: 0;
6903
+ --fig-separator-color: transparent;
6904
+ --fig-separator-margin-block: 0;
6912
6905
  }
6913
6906
 
6914
6907
  &[sticky]:not([sticky="false"]) {
@@ -6918,38 +6911,23 @@ fig-menu-item {
6918
6911
  background: var(--fig-popup-bg-color, var(--figma-color-bg));
6919
6912
 
6920
6913
  &[stuck] {
6921
- --fig-separator-padding: var(--spacer-2,0.5rem) var(--spacer-4,1rem);
6922
- &::before {
6923
- display: none;
6924
- }
6914
+ --fig-separator-padding-block: var(--fig-separator-stuck-padding-block, var(--spacer-2,0.5rem));
6915
+ --fig-separator-padding-inline: var(--spacer-4,1rem);
6916
+ --fig-separator-color: transparent;
6925
6917
  }
6926
6918
  }
6927
6919
  }
6928
6920
  }
6929
6921
 
6930
- :is(fig-select-options, .fig-menu-options, fig-menu).overflow-start
6931
- > :is(fig-separator, fig-menu-separator)[label]:not([label=""])[sticky]:not([sticky="false"]) {
6932
- top: var(--fig-vertical-overflow-size, var(--spacer-4, 1rem)) !important;
6933
- }
6934
-
6935
- dialog[is="fig-popup"][theme="menu"]
6936
- :is(fig-separator, fig-menu-separator):first-child[label]:not([label=""])::before,
6937
- fig-select-options > :is(fig-separator, fig-menu-separator):first-child[label]:not([label=""])::before {
6938
- display: none;
6939
- }
6940
-
6941
- dialog[is="fig-popup"][theme="menu"] :is(fig-separator, fig-menu-separator),
6942
- fig-menu > :is(fig-separator, fig-menu-separator),
6943
- fig-select-options > :is(fig-separator, fig-menu-separator) {
6944
- --fig-separator-color: var(--figma-color-border-menu);
6945
- --fig-separator-label-color: var(--figma-color-text-menu-secondary);
6946
- }
6947
-
6948
6922
  fig-menu > :is(fig-separator, fig-menu-separator) {
6949
- --fig-separator-padding: 0 var(--spacer-4,1rem) 0 var(--spacer-3,0.75rem);
6923
+ --fig-separator-padding-inline: var(--spacer-3,0.75rem) var(--spacer-4,1rem);
6924
+ }
6950
6925
 
6951
- &[label]:not([label=""])::before {
6952
- margin-inline-start: calc(-1 * var(--spacer-3,0.75rem));
6953
- margin-inline-end: calc(-1 * var(--spacer-4,1rem));
6954
- }
6926
+ fig-select-options > :is(fig-separator, fig-menu-separator):has(> label):first-child,
6927
+ fig-select-options > [data-fig-select-nav="start"] + :is(fig-separator, fig-menu-separator):has(> label),
6928
+ fig-menu > [slot="trigger"] + :is(fig-separator, fig-menu-separator):has(> label) {
6929
+ --fig-separator-padding-block: 0;
6930
+ --fig-separator-stuck-padding-block: 0;
6931
+ --fig-separator-color: transparent;
6932
+ --fig-separator-margin-block: 0;
6955
6933
  }