@waggylabs/yumekit 0.5.0-beta.81 → 0.5.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.
package/CHANGELOG.md CHANGED
@@ -111,12 +111,16 @@ Delete any empty sections before publishing.
111
111
 
112
112
  - `y-progress`: expanded to a multi-mode indicator supporting `bar`, `ring`, and `pie` shapes plus multi-value rendering.
113
113
 
114
+ - `y-rating`: selected icons now render with the thickest stroke weight, making them easier to distinguish from the unselected outlines beyond color alone.
115
+
114
116
  - **Breaking** `y-appbar`: vertical sidebar mode removed — migrate vertical navigation to the new `y-sidebar`. `sticky="start"` / `sticky="end"` now refer to the top / bottom edges, and `menu-direction` defaults to `"down"`.
115
117
 
116
118
  - **Breaking** `y-stack`: refocused as a flexbox-only primitive. Migration: `<y-stack mode="grid" …>` → `<y-grid …>`; `<y-stack mode="masonry" …>` → `<y-masonry …>`. The `mode` and `columns` attributes and the related `--component-stack-*` variables are removed.
117
119
 
118
120
  ### Fixed
119
121
 
122
+ - Property setters that back a JSON attribute no longer double-encode a string value. Assigning a JSON string (e.g. `el.ticks = "[0,25,50]"`, as React 19 does for matching properties) previously ran it through `JSON.stringify` again, producing an unparseable attribute and a blank render. Setters now mirror string input directly, matching `y-progress`. Affects `y-slider` (`ticks`), `y-appbar`/`y-sidebar`/`y-dock`/`y-stepper`/`y-breadcrumbs` (`items`), `y-tabs` (`options`), `y-paginator` (`pageSizeOptions`), and `y-color`/`y-colorpicker` (`formats`).
123
+
120
124
  - `y-avatar`: when the image at `src` fails to load, the component now falls back to the initials rendering rather than displaying the browser's broken-image graphic.
121
125
 
122
126
  - Orphaned CSS custom properties across several components now resolve to real design tokens instead of only their inline fallbacks. `y-dialog`, `y-banner`, `y-droplist`, `y-gallery`, `y-breadcrumbs`, `y-dock`, `y-input`, `y-progress`, `y-slider`, `y-stepper`, and `y-table` referenced `--component-*` variables that were never defined in the token pipeline; these are now themeable. Also fixed `y-gallery`'s broken `--neutral-black-translucent` fallback and stale `--y-color-*` references in the `y-droplist` stories.
@@ -127,14 +127,6 @@ class YumeButton extends HTMLElement {
127
127
  // Public
128
128
  // -------------------------------------------------------------------------
129
129
 
130
- /**
131
- * Sets the button options from an array of objects.
132
- * @param {Array<Object>} options
133
- */
134
- setOptions(options) {
135
- this.setAttribute("options", JSON.stringify(options));
136
- }
137
-
138
130
  // -------------------------------------------------------------------------
139
131
  // Private
140
132
  // -------------------------------------------------------------------------
@@ -1527,7 +1519,9 @@ class YumeAppbar extends HTMLElement {
1527
1519
  }
1528
1520
  }
1529
1521
  set items(val) {
1530
- this.setAttribute("items", JSON.stringify(val));
1522
+ if (val === null || val === undefined) this.removeAttribute("items");
1523
+ else if (typeof val === "string") this.setAttribute("items", val);
1524
+ else this.setAttribute("items", JSON.stringify(val));
1531
1525
  }
1532
1526
 
1533
1527
  /**
@@ -127,14 +127,6 @@ class YumeButton extends HTMLElement {
127
127
  // Public
128
128
  // -------------------------------------------------------------------------
129
129
 
130
- /**
131
- * Sets the button options from an array of objects.
132
- * @param {Array<Object>} options
133
- */
134
- setOptions(options) {
135
- this.setAttribute("options", JSON.stringify(options));
136
- }
137
-
138
130
  // -------------------------------------------------------------------------
139
131
  // Private
140
132
  // -------------------------------------------------------------------------
@@ -399,7 +399,9 @@ class YumeBreadcrumbs extends HTMLElement {
399
399
  }
400
400
  }
401
401
  set items(val) {
402
- this.setAttribute("items", JSON.stringify(val));
402
+ if (val === null || val === undefined) this.removeAttribute("items");
403
+ else if (typeof val === "string") this.setAttribute("items", val);
404
+ else this.setAttribute("items", JSON.stringify(val));
403
405
  }
404
406
 
405
407
  /** Maximum visible items before collapsing. */
@@ -33,11 +33,6 @@ export class YumeButton extends HTMLElement {
33
33
  set value(newVal: any);
34
34
  /** The current selected value(s), comma-separated when 'multiple' is set. */
35
35
  get value(): any;
36
- /**
37
- * Sets the button options from an array of objects.
38
- * @param {Array<Object>} options
39
- */
40
- setOptions(options: Array<any>): void;
41
36
  _addEventListeners(): void;
42
37
  _applyCustomColorStyles(color: any, styleType: any, size: any): void;
43
38
  _applyFilledInteractionStyles(vars: any): void;
@@ -33,11 +33,6 @@ export class YumeButton extends HTMLElement {
33
33
  set value(newVal: any);
34
34
  /** The current selected value(s), comma-separated when 'multiple' is set. */
35
35
  get value(): any;
36
- /**
37
- * Sets the button options from an array of objects.
38
- * @param {Array<Object>} options
39
- */
40
- setOptions(options: Array<any>): void;
41
36
  _addEventListeners(): void;
42
37
  _applyCustomColorStyles(color: any, styleType: any, size: any): void;
43
38
  _applyFilledInteractionStyles(vars: any): void;
@@ -127,14 +127,6 @@ class YumeButton extends HTMLElement {
127
127
  // Public
128
128
  // -------------------------------------------------------------------------
129
129
 
130
- /**
131
- * Sets the button options from an array of objects.
132
- * @param {Array<Object>} options
133
- */
134
- setOptions(options) {
135
- this.setAttribute("options", JSON.stringify(options));
136
- }
137
-
138
130
  // -------------------------------------------------------------------------
139
131
  // Private
140
132
  // -------------------------------------------------------------------------
@@ -1776,7 +1776,9 @@ class YumeColorpicker extends HTMLElement {
1776
1776
  }
1777
1777
  }
1778
1778
  set formats(val) {
1779
- this.setAttribute("formats", JSON.stringify(val));
1779
+ if (val === null || val === undefined) this.removeAttribute("formats");
1780
+ else if (typeof val === "string") this.setAttribute("formats", val);
1781
+ else this.setAttribute("formats", JSON.stringify(val));
1780
1782
  }
1781
1783
 
1782
1784
  get showAlpha() {
@@ -2823,7 +2825,9 @@ class YumeColor extends HTMLElement {
2823
2825
  }
2824
2826
  }
2825
2827
  set formats(v) {
2826
- this.setAttribute("formats", JSON.stringify(v));
2828
+ if (v === null || v === undefined) this.removeAttribute("formats");
2829
+ else if (typeof v === "string") this.setAttribute("formats", v);
2830
+ else this.setAttribute("formats", JSON.stringify(v));
2827
2831
  }
2828
2832
 
2829
2833
  get invalid() {
@@ -1776,7 +1776,9 @@ class YumeColorpicker extends HTMLElement {
1776
1776
  }
1777
1777
  }
1778
1778
  set formats(val) {
1779
- this.setAttribute("formats", JSON.stringify(val));
1779
+ if (val === null || val === undefined) this.removeAttribute("formats");
1780
+ else if (typeof val === "string") this.setAttribute("formats", val);
1781
+ else this.setAttribute("formats", JSON.stringify(val));
1780
1782
  }
1781
1783
 
1782
1784
  get showAlpha() {
@@ -127,14 +127,6 @@ class YumeButton extends HTMLElement {
127
127
  // Public
128
128
  // -------------------------------------------------------------------------
129
129
 
130
- /**
131
- * Sets the button options from an array of objects.
132
- * @param {Array<Object>} options
133
- */
134
- setOptions(options) {
135
- this.setAttribute("options", JSON.stringify(options));
136
- }
137
-
138
130
  // -------------------------------------------------------------------------
139
131
  // Private
140
132
  // -------------------------------------------------------------------------
@@ -127,14 +127,6 @@ class YumeButton extends HTMLElement {
127
127
  // Public
128
128
  // -------------------------------------------------------------------------
129
129
 
130
- /**
131
- * Sets the button options from an array of objects.
132
- * @param {Array<Object>} options
133
- */
134
- setOptions(options) {
135
- this.setAttribute("options", JSON.stringify(options));
136
- }
137
-
138
130
  // -------------------------------------------------------------------------
139
131
  // Private
140
132
  // -------------------------------------------------------------------------
@@ -423,7 +423,9 @@ class YumeDock extends HTMLElement {
423
423
  }
424
424
  }
425
425
  set items(val) {
426
- this.setAttribute("items", JSON.stringify(val));
426
+ if (val === null || val === undefined) this.removeAttribute("items");
427
+ else if (typeof val === "string") this.setAttribute("items", val);
428
+ else this.setAttribute("items", JSON.stringify(val));
427
429
  }
428
430
 
429
431
  /** Which edge of the viewport the dock anchors to. */
@@ -127,14 +127,6 @@ class YumeButton extends HTMLElement {
127
127
  // Public
128
128
  // -------------------------------------------------------------------------
129
129
 
130
- /**
131
- * Sets the button options from an array of objects.
132
- * @param {Array<Object>} options
133
- */
134
- setOptions(options) {
135
- this.setAttribute("options", JSON.stringify(options));
136
- }
137
-
138
130
  // -------------------------------------------------------------------------
139
131
  // Private
140
132
  // -------------------------------------------------------------------------
@@ -2082,6 +2074,7 @@ class YumePaginator extends HTMLElement {
2082
2074
  }
2083
2075
  set pageSizeOptions(v) {
2084
2076
  if (v == null) this.removeAttribute("page-size-options");
2077
+ else if (typeof v === "string") this.setAttribute("page-size-options", v);
2085
2078
  else this.setAttribute("page-size-options", JSON.stringify(v));
2086
2079
  }
2087
2080
 
@@ -349,6 +349,13 @@ class YumeRating extends HTMLElement {
349
349
  color: ${filledColor};
350
350
  }
351
351
 
352
+ /* Selected icons use the thickest stroke (matches y-icon's "x-thick")
353
+ so they read as bolder than the unselected outlines. */
354
+ .icon.filled svg,
355
+ .icon.filled svg * {
356
+ stroke-width: 3 !important;
357
+ }
358
+
352
359
  .icon svg {
353
360
  width: 100%;
354
361
  height: 100%;
@@ -127,14 +127,6 @@ class YumeButton extends HTMLElement {
127
127
  // Public
128
128
  // -------------------------------------------------------------------------
129
129
 
130
- /**
131
- * Sets the button options from an array of objects.
132
- * @param {Array<Object>} options
133
- */
134
- setOptions(options) {
135
- this.setAttribute("options", JSON.stringify(options));
136
- }
137
-
138
130
  // -------------------------------------------------------------------------
139
131
  // Private
140
132
  // -------------------------------------------------------------------------
@@ -1528,7 +1520,9 @@ class YumeSidebar extends HTMLElement {
1528
1520
  }
1529
1521
  }
1530
1522
  set items(val) {
1531
- this.setAttribute("items", JSON.stringify(val));
1523
+ if (val === null || val === undefined) this.removeAttribute("items");
1524
+ else if (typeof val === "string") this.setAttribute("items", val);
1525
+ else this.setAttribute("items", JSON.stringify(val));
1532
1526
  }
1533
1527
 
1534
1528
  /**
@@ -514,6 +514,11 @@ class YumeSlider extends HTMLElement {
514
514
  this.setAttribute("ticks", "true");
515
515
  } else if (typeof val === "number") {
516
516
  this.setAttribute("ticks", String(val));
517
+ } else if (typeof val === "string") {
518
+ // Mirror the attribute form directly. React 19 (and any property
519
+ // assignment) routes strings like "5" or "[0,25,50]" here; JSON
520
+ // -stringifying them would double-encode and break _resolveTicks.
521
+ this.setAttribute("ticks", val);
517
522
  } else {
518
523
  this.setAttribute("ticks", JSON.stringify(val));
519
524
  }
@@ -419,7 +419,9 @@ class YumeStepper extends HTMLElement {
419
419
  }
420
420
  }
421
421
  set items(val) {
422
- this.setAttribute("items", JSON.stringify(val));
422
+ if (val === null || val === undefined) this.removeAttribute("items");
423
+ else if (typeof val === "string") this.setAttribute("items", val);
424
+ else this.setAttribute("items", JSON.stringify(val));
423
425
  }
424
426
 
425
427
  /** When set, users can only advance via next() or complete(). */
@@ -389,7 +389,9 @@ class YumeTabs extends HTMLElement {
389
389
  }
390
390
  }
391
391
  set options(val) {
392
- this.setAttribute("options", JSON.stringify(val));
392
+ if (val === null || val === undefined) this.removeAttribute("options");
393
+ else if (typeof val === "string") this.setAttribute("options", val);
394
+ else this.setAttribute("options", JSON.stringify(val));
393
395
  this.render();
394
396
  }
395
397
 
package/dist/index.js CHANGED
@@ -1730,14 +1730,6 @@ class YumeButton extends HTMLElement {
1730
1730
  // Public
1731
1731
  // -------------------------------------------------------------------------
1732
1732
 
1733
- /**
1734
- * Sets the button options from an array of objects.
1735
- * @param {Array<Object>} options
1736
- */
1737
- setOptions(options) {
1738
- this.setAttribute("options", JSON.stringify(options));
1739
- }
1740
-
1741
1733
  // -------------------------------------------------------------------------
1742
1734
  // Private
1743
1735
  // -------------------------------------------------------------------------
@@ -3111,7 +3103,9 @@ class YumeAppbar extends HTMLElement {
3111
3103
  }
3112
3104
  }
3113
3105
  set items(val) {
3114
- this.setAttribute("items", JSON.stringify(val));
3106
+ if (val === null || val === undefined) this.removeAttribute("items");
3107
+ else if (typeof val === "string") this.setAttribute("items", val);
3108
+ else this.setAttribute("items", JSON.stringify(val));
3115
3109
  }
3116
3110
 
3117
3111
  /**
@@ -4234,7 +4228,9 @@ class YumeSidebar extends HTMLElement {
4234
4228
  }
4235
4229
  }
4236
4230
  set items(val) {
4237
- this.setAttribute("items", JSON.stringify(val));
4231
+ if (val === null || val === undefined) this.removeAttribute("items");
4232
+ else if (typeof val === "string") this.setAttribute("items", val);
4233
+ else this.setAttribute("items", JSON.stringify(val));
4238
4234
  }
4239
4235
 
4240
4236
  /**
@@ -5582,7 +5578,9 @@ class YumeBreadcrumbs extends HTMLElement {
5582
5578
  }
5583
5579
  }
5584
5580
  set items(val) {
5585
- this.setAttribute("items", JSON.stringify(val));
5581
+ if (val === null || val === undefined) this.removeAttribute("items");
5582
+ else if (typeof val === "string") this.setAttribute("items", val);
5583
+ else this.setAttribute("items", JSON.stringify(val));
5586
5584
  }
5587
5585
 
5588
5586
  /** Maximum visible items before collapsing. */
@@ -7888,7 +7886,9 @@ class YumeColorpicker extends HTMLElement {
7888
7886
  }
7889
7887
  }
7890
7888
  set formats(val) {
7891
- this.setAttribute("formats", JSON.stringify(val));
7889
+ if (val === null || val === undefined) this.removeAttribute("formats");
7890
+ else if (typeof val === "string") this.setAttribute("formats", val);
7891
+ else this.setAttribute("formats", JSON.stringify(val));
7892
7892
  }
7893
7893
 
7894
7894
  get showAlpha() {
@@ -8935,7 +8935,9 @@ class YumeColor extends HTMLElement {
8935
8935
  }
8936
8936
  }
8937
8937
  set formats(v) {
8938
- this.setAttribute("formats", JSON.stringify(v));
8938
+ if (v === null || v === undefined) this.removeAttribute("formats");
8939
+ else if (typeof v === "string") this.setAttribute("formats", v);
8940
+ else this.setAttribute("formats", JSON.stringify(v));
8939
8941
  }
8940
8942
 
8941
8943
  get invalid() {
@@ -15083,7 +15085,9 @@ class YumeDock extends HTMLElement {
15083
15085
  }
15084
15086
  }
15085
15087
  set items(val) {
15086
- this.setAttribute("items", JSON.stringify(val));
15088
+ if (val === null || val === undefined) this.removeAttribute("items");
15089
+ else if (typeof val === "string") this.setAttribute("items", val);
15090
+ else this.setAttribute("items", JSON.stringify(val));
15087
15091
  }
15088
15092
 
15089
15093
  /** Which edge of the viewport the dock anchors to. */
@@ -17221,6 +17225,7 @@ class YumePaginator extends HTMLElement {
17221
17225
  }
17222
17226
  set pageSizeOptions(v) {
17223
17227
  if (v == null) this.removeAttribute("page-size-options");
17228
+ else if (typeof v === "string") this.setAttribute("page-size-options", v);
17224
17229
  else this.setAttribute("page-size-options", JSON.stringify(v));
17225
17230
  }
17226
17231
 
@@ -19643,6 +19648,13 @@ class YumeRating extends HTMLElement {
19643
19648
  color: ${filledColor};
19644
19649
  }
19645
19650
 
19651
+ /* Selected icons use the thickest stroke (matches y-icon's "x-thick")
19652
+ so they read as bolder than the unselected outlines. */
19653
+ .icon.filled svg,
19654
+ .icon.filled svg * {
19655
+ stroke-width: 3 !important;
19656
+ }
19657
+
19646
19658
  .icon svg {
19647
19659
  width: 100%;
19648
19660
  height: 100%;
@@ -20419,6 +20431,11 @@ class YumeSlider extends HTMLElement {
20419
20431
  this.setAttribute("ticks", "true");
20420
20432
  } else if (typeof val === "number") {
20421
20433
  this.setAttribute("ticks", String(val));
20434
+ } else if (typeof val === "string") {
20435
+ // Mirror the attribute form directly. React 19 (and any property
20436
+ // assignment) routes strings like "5" or "[0,25,50]" here; JSON
20437
+ // -stringifying them would double-encode and break _resolveTicks.
20438
+ this.setAttribute("ticks", val);
20422
20439
  } else {
20423
20440
  this.setAttribute("ticks", JSON.stringify(val));
20424
20441
  }
@@ -22314,7 +22331,9 @@ class YumeStepper extends HTMLElement {
22314
22331
  }
22315
22332
  }
22316
22333
  set items(val) {
22317
- this.setAttribute("items", JSON.stringify(val));
22334
+ if (val === null || val === undefined) this.removeAttribute("items");
22335
+ else if (typeof val === "string") this.setAttribute("items", val);
22336
+ else this.setAttribute("items", JSON.stringify(val));
22318
22337
  }
22319
22338
 
22320
22339
  /** When set, users can only advance via next() or complete(). */
@@ -24011,7 +24030,9 @@ class YumeTabs extends HTMLElement {
24011
24030
  }
24012
24031
  }
24013
24032
  set options(val) {
24014
- this.setAttribute("options", JSON.stringify(val));
24033
+ if (val === null || val === undefined) this.removeAttribute("options");
24034
+ else if (typeof val === "string") this.setAttribute("options", val);
24035
+ else this.setAttribute("options", JSON.stringify(val));
24015
24036
  this.render();
24016
24037
  }
24017
24038