@rogieking/figui3 9.4.13 → 10.0.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.
@@ -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,28 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [10.0.1]
6
+
7
+ ### Changed
8
+
9
+ - Refined the hue slider handle with an inset thumb-color ring and layered shadow.
10
+
11
+ ## [10.0.0]
12
+
13
+ ### Added
14
+
15
+ - Added a vertical separator playground example.
16
+
17
+ ### Changed
18
+
19
+ - `fig-separator` labels now render as child `<label>` elements and preserve authored labels.
20
+ - Removed the `borderless` separator attribute; leading labeled menu and select separators now omit their rule automatically.
21
+ - Refined separator spacing and sticky behavior, and reduced chooser selection-ring thickness.
22
+
23
+ ### Fixed
24
+
25
+ - Visual-only `fig-select-option` rows no longer render stray ellipses or extra height.
26
+
5
27
  ## [9.4.13]
6
28
 
7
29
  ### Changed
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
@@ -3346,6 +3346,13 @@ fig-slider {
3346
3346
  --slider-checkerboard: var(--checkerboard-slider);
3347
3347
  --slider-track-color: var(--figma-color-bg-tertiary);
3348
3348
 
3349
+ &[type="hue"]{
3350
+ --slider-handle-shadow:
3351
+ inset 0 0 0 3px var(--slider-thumb-color),
3352
+ 0 0 0 0.75px rgba(0, 0, 0, 0.075), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
3353
+ var(--figma-elevation-100);
3354
+ }
3355
+
3349
3356
  background-color: var(--figma-color-bg-secondary);
3350
3357
  border-radius: var(--radius-medium);
3351
3358
  padding-left: var(--spacer-2);
@@ -6075,7 +6082,7 @@ fig-chooser {
6075
6082
  --fig-chooser-inline-padding: var(--spacer-2);
6076
6083
  --fig-chooser-block-padding: var(--spacer-2);
6077
6084
  --fig-chooser-inline-margin: 0px;
6078
- --fig-choice-selection-ring-width: 2px;
6085
+ --fig-choice-selection-ring-width: 1.5px;
6079
6086
  --fig-choice-selection-ring-gutter: calc(
6080
6087
  var(--fig-choice-selection-ring-width) * 2
6081
6088
  );
@@ -6850,69 +6857,58 @@ fig-menu-item {
6850
6857
  :is(fig-separator, fig-menu-separator) {
6851
6858
  --fig-separator-color: var(--figma-color-border);
6852
6859
  --fig-separator-label-color: var(--figma-color-text-secondary);
6853
- --fig-separator-padding: 0 var(--spacer-4,1rem);
6860
+ --fig-separator-margin-block: var(--spacer-2,0.5rem);
6861
+ --fig-separator-padding-block: 0;
6862
+ --fig-separator-padding-inline: var(--spacer-4,1rem);
6854
6863
 
6855
6864
  display: block;
6856
6865
  box-sizing: border-box;
6857
6866
  flex-shrink: 0;
6858
6867
  width: 100%;
6859
6868
  height: 1px;
6860
- margin: var(--spacer-2,0.5rem) 0;
6861
- padding: var(--fig-separator-padding);
6869
+ margin-block: var(--fig-separator-margin-block);
6870
+ margin-inline: 0;
6871
+ padding-block: var(--fig-separator-padding-block);
6872
+ padding-inline: var(--fig-separator-padding-inline);
6862
6873
  border: 0;
6863
- background: var(--fig-separator-color);
6874
+ border-block-start: 1px solid var(--fig-separator-color);
6875
+ background: transparent;
6864
6876
  color: var(--fig-separator-label-color);
6865
6877
  font-weight: var(--body-medium-fontWeight);
6866
6878
  pointer-events: none;
6867
6879
  user-select: none;
6868
6880
 
6869
6881
  &[direction="vertical"] {
6882
+ --fig-separator-margin-block: 0;
6870
6883
  align-self: stretch;
6871
6884
  width: 1px;
6872
6885
  max-width: 1px;
6873
6886
  height: auto;
6874
6887
  min-height: var(--spacer-3);
6875
- margin: 0;
6876
6888
  padding: 0;
6889
+ border-block-start: 0;
6890
+ border-inline-start: 1px solid var(--fig-separator-color);
6877
6891
  }
6878
6892
 
6879
- &[borderless]:not([borderless="false"]) {
6880
- background: transparent;
6881
-
6882
- &[label]:not([label=""])::before {
6883
- display: none;
6884
- }
6893
+ & > label {
6894
+ display: block;
6895
+ line-height: var(--spacer-4,1rem);
6896
+ min-height: var(--spacer-4,1rem);
6897
+ overflow: hidden;
6898
+ text-overflow: ellipsis;
6899
+ white-space: nowrap;
6885
6900
  }
6886
6901
 
6887
6902
  /* Labeled: rule, then secondary group label (same pattern as menu optgroups). */
6888
- &[label]:not([label=""]) {
6889
- display: flex;
6890
- flex-direction: column;
6891
- gap: var(--spacer-2,0.5rem);
6903
+ &:has(> label) {
6904
+ --fig-separator-margin-block: var(--spacer-2,0.5rem) var(--spacer-1,0.25rem);
6905
+ --fig-separator-padding-block: var(--spacer-2,0.5rem) 0;
6892
6906
  height: auto;
6893
- margin: var(--spacer-2,0.5rem) 0;
6894
- margin-bottom: var(--spacer-1,0.25rem);
6895
- background: transparent;
6896
6907
 
6897
- &:first-of-type,
6898
- &:first-child {
6899
- margin-top: 0;
6900
- }
6901
-
6902
- &::before {
6903
- content: "";
6904
- display: block;
6905
- height: 1px;
6906
- margin-inline: calc(-1 * var(--spacer-4,1rem));
6907
- background: var(--fig-separator-color);
6908
- }
6909
-
6910
- &::after {
6911
- content: attr(label);
6912
- display: block;
6913
- color: var(--fig-separator-label-color);
6914
- line-height: var(--spacer-4,1rem);
6915
- min-height: var(--spacer-4,1rem);
6908
+ &:first-child{
6909
+ --fig-separator-padding-block: 0;
6910
+ --fig-separator-color: transparent;
6911
+ --fig-separator-margin-block: 0;
6916
6912
  }
6917
6913
 
6918
6914
  &[sticky]:not([sticky="false"]) {
@@ -6922,38 +6918,23 @@ fig-menu-item {
6922
6918
  background: var(--fig-popup-bg-color, var(--figma-color-bg));
6923
6919
 
6924
6920
  &[stuck] {
6925
- --fig-separator-padding: var(--spacer-2,0.5rem) var(--spacer-4,1rem);
6926
- &::before {
6927
- display: none;
6928
- }
6921
+ --fig-separator-padding-block: var(--fig-separator-stuck-padding-block, var(--spacer-2,0.5rem));
6922
+ --fig-separator-padding-inline: var(--spacer-4,1rem);
6923
+ --fig-separator-color: transparent;
6929
6924
  }
6930
6925
  }
6931
6926
  }
6932
6927
  }
6933
6928
 
6934
- :is(fig-select-options, .fig-menu-options, fig-menu).overflow-start
6935
- > :is(fig-separator, fig-menu-separator)[label]:not([label=""])[sticky]:not([sticky="false"]) {
6936
- top: var(--fig-vertical-overflow-size, var(--spacer-4, 1rem)) !important;
6937
- }
6938
-
6939
- dialog[is="fig-popup"][theme="menu"]
6940
- :is(fig-separator, fig-menu-separator):first-child[label]:not([label=""])::before,
6941
- fig-select-options > :is(fig-separator, fig-menu-separator):first-child[label]:not([label=""])::before {
6942
- display: none;
6943
- }
6944
-
6945
- dialog[is="fig-popup"][theme="menu"] :is(fig-separator, fig-menu-separator),
6946
- fig-menu > :is(fig-separator, fig-menu-separator),
6947
- fig-select-options > :is(fig-separator, fig-menu-separator) {
6948
- --fig-separator-color: var(--figma-color-border-menu);
6949
- --fig-separator-label-color: var(--figma-color-text-menu-secondary);
6950
- }
6951
-
6952
6929
  fig-menu > :is(fig-separator, fig-menu-separator) {
6953
- --fig-separator-padding: 0 var(--spacer-4,1rem) 0 var(--spacer-3,0.75rem);
6930
+ --fig-separator-padding-inline: var(--spacer-3,0.75rem) var(--spacer-4,1rem);
6931
+ }
6954
6932
 
6955
- &[label]:not([label=""])::before {
6956
- margin-inline-start: calc(-1 * var(--spacer-3,0.75rem));
6957
- margin-inline-end: calc(-1 * var(--spacer-4,1rem));
6958
- }
6933
+ fig-select-options > :is(fig-separator, fig-menu-separator):has(> label):first-child,
6934
+ fig-select-options > [data-fig-select-nav="start"] + :is(fig-separator, fig-menu-separator):has(> label),
6935
+ fig-menu > [slot="trigger"] + :is(fig-separator, fig-menu-separator):has(> label) {
6936
+ --fig-separator-padding-block: 0;
6937
+ --fig-separator-stuck-padding-block: 0;
6938
+ --fig-separator-color: transparent;
6939
+ --fig-separator-margin-block: 0;
6959
6940
  }