@rogieking/figui3 11.3.0 → 11.3.2

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.
@@ -219,6 +219,7 @@ Handlers below assume `onInput` / `onChange` / `onClick` from [react.md](react.m
219
219
  ```
220
220
 
221
221
  - Attrs: `type` (`range`, `opacity`, `hue`, `stepper`, `delta`), `min`, `max`, `step`, `text`, `units`, `transform`, `color`, `default`, `variant` (`classic`), `placeholder`, `full`, `disabled`
222
+ - A valid explicit `default` adds a tick and native snap target for range, opacity, and hue sliders. Inferred defaults do not render a tick.
222
223
  - Events: `input` / `change` → `currentTarget.value`
223
224
  - React: keep `value` a string; do not remount during drag. Opacity: set `color`. Delta: set `default`. Stepper: include a `<datalist>` of stops.
224
225
 
@@ -55,6 +55,7 @@ Public API: `README.md`. React recipes: [components.md](components.md).
55
55
  - Always set `min`, `max`, `step`; `units` when displayed
56
56
  - `transform` when internal scale ≠ UI scale
57
57
  - `variant="classic"` for the older appearance
58
+ - Valid explicit `default` values add a tick and native snap target for range, opacity, and hue; inferred defaults do not
58
59
  - Opacity: set `color` and usually `units="%"`
59
60
  - Delta: include `default` and typically symmetric min/max
60
61
  - Stepper: include a `<datalist>` of stops
package/CHANGELOG.md CHANGED
@@ -2,6 +2,31 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [11.3.2]
6
+
7
+ ### Changed
8
+
9
+ - Refined the default slider track, thumb, and tick proportions.
10
+
11
+ ### Fixed
12
+
13
+ - Aligned generated default ticks with snapped slider values and variant-specific endpoints.
14
+
15
+ ## [11.3.1]
16
+
17
+ ### Added
18
+
19
+ - Added explicit `fig-slider` default ticks and native snap targets for valid range, hue, and opacity defaults.
20
+ - Added an optional slider default control to the playground.
21
+
22
+ ### Changed
23
+
24
+ - Made `fig-input-number` steppers repeat while held, emitting continuous input updates and one change event on release.
25
+
26
+ ### Fixed
27
+
28
+ - Kept generated slider default ticks within variant-specific track endpoints.
29
+
5
30
  ## [11.3.0]
6
31
 
7
32
  ### Added
package/README.md CHANGED
@@ -356,7 +356,7 @@ The suggestion trigger uses `fig-select` when `fig-editor.js` is registered and
356
356
  | `min` | number | `0` | Minimum |
357
357
  | `max` | number | `100` | Maximum |
358
358
  | `step` | number | `1` | Step increment |
359
- | `default` | number | — | Default/reset value (shown as marker) |
359
+ | `default` | number | — | Explicit reference value; adds a tick and native snap target when valid |
360
360
  | `text` | boolean | `true` | Show text input; set `text="false"` to hide |
361
361
  | `placeholder` | string | `"##"` | Text input placeholder |
362
362
  | `units` | string | — | Unit label (e.g. `"%"`, `"px"`) |
@@ -369,12 +369,12 @@ The suggestion trigger uses `fig-select` when `fig-editor.js` is registered and
369
369
  **Events:** `input` (continuous), `change` (on release), with detail `{ value, angle, units }`. Event values are rounded to `precision`; the component retains its higher-precision internal value.
370
370
 
371
371
  ```html
372
- <fig-slider min="0" max="100" value="50" units="%"></fig-slider>
372
+ <fig-slider min="0" max="100" value="50" default="25" units="%"></fig-slider>
373
373
  <fig-slider type="hue" value="180" text="false"></fig-slider>
374
374
  <fig-slider type="opacity" value="75" color="#FF5733" units="%"></fig-slider>
375
375
  ```
376
376
 
377
- For `type="range"`, omitting `value` follows native range behavior and starts at the midpoint of `min` and `max`. Arrow keys move by `step`; hold Shift to move by a larger step.
377
+ For `type="range"`, omitting `value` follows native range behavior and starts at the midpoint of `min` and `max`. An explicitly authored, in-range, step-aligned `default` renders a tick and is passed to the native range input as a snap target; internally inferred defaults do not. Arrow keys move by `step`; hold Shift to move by a larger step.
378
378
 
379
379
  ---
380
380
 
package/components.css CHANGED
@@ -3157,7 +3157,7 @@ fig-slider {
3157
3157
  --slider-tick-radius: 100%;
3158
3158
  --slider-border-radius: calc(var(--slider-height) / 2);
3159
3159
  --slider-stepper-padding: calc(
3160
- (var(--slider-height) / 2) - var(--slider-tick-width) / 2
3160
+ (var(--slider-thumb-size) / 2) - var(--slider-tick-width) / 2
3161
3161
  );
3162
3162
  --slider-track-color: var(--figma-color-bg-secondary);
3163
3163
  --slider-percent: calc(var(--slider-complete) * 100%);
@@ -3332,6 +3332,7 @@ fig-slider {
3332
3332
  cursor: default;
3333
3333
  box-shadow: var(--slider-handle-shadow);
3334
3334
  opacity: var(--slider-thumb-opacity);
3335
+ transform: translateX(calc(var(--slider-complete) * 50% - 25%));
3335
3336
  }
3336
3337
 
3337
3338
  &:disabled::-webkit-slider-thumb {
@@ -3383,6 +3384,7 @@ fig-slider {
3383
3384
  cursor: default;
3384
3385
  box-shadow: var(--slider-handle-shadow);
3385
3386
  opacity: var(--slider-thumb-opacity);
3387
+ transform: translateX(calc(var(--slider-complete) * 50% - 25%));
3386
3388
  }
3387
3389
 
3388
3390
  &:disabled::-moz-range-thumb {
@@ -3422,11 +3424,13 @@ fig-slider {
3422
3424
  margin: 0;
3423
3425
  border: 0;
3424
3426
  appearance: none;
3425
- padding: 0 var(--slider-stepper-padding);
3427
+ padding: 0;
3426
3428
  height: var(--slider-height);
3427
3429
  pointer-events: none;
3428
3430
  justify-content: space-between;
3429
- width: 100%;
3431
+ width: auto;
3432
+ left: calc(var(--slider-height) / 2);
3433
+ right: calc(var(--slider-height) / 2);
3430
3434
 
3431
3435
  & option {
3432
3436
  appearance: none;
@@ -3438,6 +3442,7 @@ fig-slider {
3438
3442
  font-size: 0;
3439
3443
  background: var(--figma-color-icon-tertiary);
3440
3444
  opacity: var(--slider-tick-opacity);
3445
+ box-shadow: 0 0 0 0.75px rgba(0, 0, 0, 0.075);
3441
3446
  display: block;
3442
3447
  &[default] {
3443
3448
  background: var(--figma-color-icon);
@@ -3449,16 +3454,37 @@ fig-slider {
3449
3454
  }
3450
3455
  }
3451
3456
 
3457
+ datalist[data-generated="slider-default"] {
3458
+ left: calc(var(--slider-height) / 2);
3459
+ right: calc(var(--slider-height) / 2);
3460
+ width: auto;
3461
+ padding-inline: 0;
3462
+
3463
+ option:first-child:last-child {
3464
+ position: absolute;
3465
+ margin: 0;
3466
+ left: var(--start-percent);
3467
+ top: calc(50% - var(--slider-tick-height) / 2);
3468
+ transform: translateX(-50%);
3469
+ }
3470
+ }
3471
+
3472
+ &:not([variant="classic"]):is(:not([min]), [min="0"])
3473
+ datalist[data-generated="slider-default"]
3474
+ option[value="0"] {
3475
+ transform: translateX(-0.125rem);
3476
+ }
3477
+
3452
3478
  &:not([variant="classic"]) {
3453
- --slider-height: 0.375rem;
3454
- --slider-thumb-size: 0.75rem;
3455
- --slider-tick-width: calc(var(--slider-height) / 2);
3456
- --slider-tick-height: calc(var(--slider-height) / 2);
3479
+ --slider-height: 0.5rem;
3480
+ --slider-thumb-size: 0.875rem;
3481
+ --slider-tick-width: calc(var(--slider-height) - 4px);
3482
+ --slider-tick-height: calc(var(--slider-height) - 4px);
3457
3483
  --slider-number-width: var(--input-opacity-width);
3458
3484
  --handle-transition: none;
3459
3485
  --slider-transition: none;
3460
3486
  --slider-handle-shadow:
3461
- inset 0 0 0 calc(6px + 0.5rem * var(--unchanged))
3487
+ inset 0 0 0 calc(var(--slider-thumb-size) / 2 + 0.5rem * var(--unchanged))
3462
3488
  var(--slider-thumb-color),
3463
3489
  0 0 0 0.75px rgba(0, 0, 0, 0.075), inset 0 0 0 5px rgba(0, 0, 0, 0.1),
3464
3490
  var(--figma-elevation-100);