@iyulab/u-widgets 0.7.0 → 0.8.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/dist/u-widgets.js CHANGED
@@ -40,51 +40,51 @@ const xe = /* @__PURE__ */ new Set([
40
40
  "chart.treemap"
41
41
  ]), _e = /* @__PURE__ */ new Set(["metric", "gauge", "progress", "header", "code", "rating", "video"]);
42
42
  function Y(e, t = 0) {
43
- const a = [], r = [];
43
+ const i = [], r = [];
44
44
  if (t > le)
45
45
  return { valid: !1, errors: ["compose children exceed maximum nesting depth (" + le + ")"], warnings: r };
46
46
  if (e == null || typeof e != "object")
47
47
  return { valid: !1, errors: ["Spec must be a non-null object"], warnings: r };
48
- const i = e;
49
- if (typeof i.widget != "string" || i.widget.length === 0)
50
- return a.push('Required field "widget" must be a non-empty string'), { valid: !1, errors: a, warnings: r };
51
- const s = i.widget;
52
- if (t === 0 && i.type !== void 0 && i.type !== "u-widget" && a.push('"type" must be "u-widget" if specified'), i.fields !== void 0 && i.formdown !== void 0 && a.push('"fields" and "formdown" are mutually exclusive'), i.data !== void 0 && ($e.has(s) && !Array.isArray(i.data) && a.push(`"${s}" expects "data" to be an array, got ${typeof i.data}`), _e.has(s) && (Array.isArray(i.data) || typeof i.data != "object") && a.push(`"${s}" expects "data" to be an object, got ${Array.isArray(i.data) ? "array" : typeof i.data}`)), s === "compose") {
53
- if (!Array.isArray(i.children))
54
- a.push('"compose" widget requires a "children" array');
48
+ const a = e;
49
+ if (typeof a.widget != "string" || a.widget.length === 0)
50
+ return i.push('Required field "widget" must be a non-empty string'), { valid: !1, errors: i, warnings: r };
51
+ const s = a.widget;
52
+ if (t === 0 && a.type !== void 0 && a.type !== "u-widget" && i.push('"type" must be "u-widget" if specified'), a.fields !== void 0 && a.formdown !== void 0 && i.push('"fields" and "formdown" are mutually exclusive'), a.data !== void 0 && ($e.has(s) && !Array.isArray(a.data) && i.push(`"${s}" expects "data" to be an array, got ${typeof a.data}`), _e.has(s) && (Array.isArray(a.data) || typeof a.data != "object") && i.push(`"${s}" expects "data" to be an object, got ${Array.isArray(a.data) ? "array" : typeof a.data}`)), s === "compose") {
53
+ if (!Array.isArray(a.children))
54
+ i.push('"compose" widget requires a "children" array');
55
55
  else
56
- for (let n = 0; n < i.children.length; n++) {
57
- const d = i.children[n];
56
+ for (let n = 0; n < a.children.length; n++) {
57
+ const d = a.children[n];
58
58
  if (d == null || typeof d != "object" || typeof d.widget != "string")
59
- a.push(`children[${n}] must be an object with a "widget" field`);
59
+ i.push(`children[${n}] must be an object with a "widget" field`);
60
60
  else {
61
61
  const c = Y(d, t + 1);
62
- c.valid || a.push(...c.errors.map((p) => `children[${n}]: ${p}`)), r.push(...c.warnings.map((p) => `children[${n}]: ${p}`));
62
+ c.valid || i.push(...c.errors.map((p) => `children[${n}]: ${p}`)), r.push(...c.warnings.map((p) => `children[${n}]: ${p}`));
63
63
  }
64
64
  }
65
- if (i.layout !== void 0) {
65
+ if (a.layout !== void 0) {
66
66
  const n = ["stack", "row", "grid"];
67
- n.includes(i.layout) || a.push(`"layout" must be one of: ${n.join(", ")}`);
67
+ n.includes(a.layout) || i.push(`"layout" must be one of: ${n.join(", ")}`);
68
68
  }
69
69
  }
70
- if (Array.isArray(i.fields))
71
- for (let n = 0; n < i.fields.length; n++) {
72
- const d = i.fields[n];
73
- d == null || typeof d != "object" || typeof d.field != "string" ? a.push(`fields[${n}] must have a "field" string property`) : d.type != null && !xe.has(d.type) && r.push(`fields[${n}].type "${d.type}" is not a recognized field type`);
70
+ if (Array.isArray(a.fields))
71
+ for (let n = 0; n < a.fields.length; n++) {
72
+ const d = a.fields[n];
73
+ d == null || typeof d != "object" || typeof d.field != "string" ? i.push(`fields[${n}] must have a "field" string property`) : d.type != null && !xe.has(d.type) && r.push(`fields[${n}].type "${d.type}" is not a recognized field type`);
74
74
  }
75
- if (typeof i.formdown == "string" && i.formdown.length > 0 && !i.fields)
75
+ if (typeof a.formdown == "string" && a.formdown.length > 0 && !a.fields)
76
76
  try {
77
- be()(i.formdown);
77
+ be()(a.formdown);
78
78
  } catch {
79
79
  r.push("formdown string could not be parsed — check syntax");
80
80
  }
81
- if (Array.isArray(i.actions))
82
- for (let n = 0; n < i.actions.length; n++) {
83
- const d = i.actions[n];
84
- (d == null || typeof d != "object" || typeof d.label != "string" || typeof d.action != "string") && a.push(`actions[${n}] must have "label" and "action" string properties`);
81
+ if (Array.isArray(a.actions))
82
+ for (let n = 0; n < a.actions.length; n++) {
83
+ const d = a.actions[n];
84
+ (d == null || typeof d != "object" || typeof d.label != "string" || typeof d.action != "string") && i.push(`actions[${n}] must have "label" and "action" string properties`);
85
85
  }
86
- if (i.mapping && typeof i.mapping == "object" && i.data) {
87
- const n = i.mapping, d = ke(i.data);
86
+ if (a.mapping && typeof a.mapping == "object" && a.data) {
87
+ const n = a.mapping, d = ke(a.data);
88
88
  if (d)
89
89
  for (const c of ["x", "y", "label", "value", "color", "size", "axis", "primary", "secondary", "icon", "avatar", "trailing"]) {
90
90
  const p = n[c];
@@ -93,7 +93,7 @@ function Y(e, t = 0) {
93
93
  typeof g == "string" && !d.has(g) && r.push(`mapping.${c} references "${g}" which is not found in data keys [${[...d].join(", ")}]`);
94
94
  }
95
95
  }
96
- return { valid: a.length === 0, errors: a, warnings: r };
96
+ return { valid: i.length === 0, errors: i, warnings: r };
97
97
  }
98
98
  function ke(e) {
99
99
  if (Array.isArray(e) && e.length > 0 && e[0] && typeof e[0] == "object")
@@ -124,20 +124,20 @@ const ce = ["B", "KB", "MB", "GB", "TB"], ze = /* @__PURE__ */ new Set([
124
124
  "XOF",
125
125
  "XPF"
126
126
  ]);
127
- function he(e, t, a) {
127
+ function he(e, t, i) {
128
128
  if (e == null) return "";
129
- const [r, i] = t?.split(":") ?? [];
129
+ const [r, a] = t?.split(":") ?? [];
130
130
  switch (r) {
131
131
  case "number":
132
- return Se(e, a);
132
+ return Se(e, i);
133
133
  case "currency":
134
- return Ae(e, i, a);
134
+ return Ae(e, a, i);
135
135
  case "percent":
136
- return Ce(e, a);
136
+ return Ce(e, i);
137
137
  case "date":
138
- return De(e, a);
138
+ return De(e, i);
139
139
  case "datetime":
140
- return je(e, a);
140
+ return je(e, i);
141
141
  case "bytes":
142
142
  return Oe(e);
143
143
  default:
@@ -145,54 +145,54 @@ function he(e, t, a) {
145
145
  }
146
146
  }
147
147
  function Se(e, t) {
148
- const a = Number(e);
149
- return isNaN(a) ? String(e) : new Intl.NumberFormat(t).format(a);
148
+ const i = Number(e);
149
+ return isNaN(i) ? String(e) : new Intl.NumberFormat(t).format(i);
150
150
  }
151
- function Ae(e, t, a) {
151
+ function Ae(e, t, i) {
152
152
  const r = Number(e);
153
153
  if (isNaN(r)) return String(e);
154
- const i = t || "USD";
154
+ const a = t || "USD";
155
155
  try {
156
- const s = ze.has(i.toUpperCase());
157
- return new Intl.NumberFormat(a, {
156
+ const s = ze.has(a.toUpperCase());
157
+ return new Intl.NumberFormat(i, {
158
158
  style: "currency",
159
- currency: i,
159
+ currency: a,
160
160
  ...s && {
161
161
  minimumFractionDigits: 0,
162
162
  maximumFractionDigits: 0
163
163
  }
164
164
  }).format(r);
165
165
  } catch {
166
- return new Intl.NumberFormat(a, {
166
+ return new Intl.NumberFormat(i, {
167
167
  style: "currency",
168
168
  currency: "USD"
169
169
  }).format(r);
170
170
  }
171
171
  }
172
172
  function Ce(e, t) {
173
- const a = Number(e);
174
- if (isNaN(a)) return String(e);
173
+ const i = Number(e);
174
+ if (isNaN(i)) return String(e);
175
175
  if (t)
176
176
  try {
177
177
  return new Intl.NumberFormat(t, {
178
178
  style: "percent",
179
179
  maximumFractionDigits: 2
180
- }).format(a / 100);
180
+ }).format(i / 100);
181
181
  } catch {
182
182
  }
183
- return a + "%";
183
+ return i + "%";
184
184
  }
185
185
  function De(e, t) {
186
186
  if (typeof e == "string" && /^\d{4}-\d{2}-\d{2}/.test(e)) {
187
187
  if (t)
188
188
  try {
189
- const a = new Date(e);
190
- if (!isNaN(a.getTime()))
189
+ const i = new Date(e);
190
+ if (!isNaN(i.getTime()))
191
191
  return new Intl.DateTimeFormat(t, {
192
192
  year: "numeric",
193
193
  month: "2-digit",
194
194
  day: "2-digit"
195
- }).format(a);
195
+ }).format(i);
196
196
  } catch {
197
197
  }
198
198
  return e.slice(0, 10);
@@ -203,15 +203,15 @@ function je(e, t) {
203
203
  if (typeof e == "string" && /^\d{4}-\d{2}-\d{2}/.test(e)) {
204
204
  if (t)
205
205
  try {
206
- const a = new Date(e);
207
- if (!isNaN(a.getTime()))
206
+ const i = new Date(e);
207
+ if (!isNaN(i.getTime()))
208
208
  return new Intl.DateTimeFormat(t, {
209
209
  year: "numeric",
210
210
  month: "2-digit",
211
211
  day: "2-digit",
212
212
  hour: "2-digit",
213
213
  minute: "2-digit"
214
- }).format(a);
214
+ }).format(i);
215
215
  } catch {
216
216
  }
217
217
  return e.slice(0, 16).replace("T", " ");
@@ -221,11 +221,11 @@ function je(e, t) {
221
221
  function Oe(e) {
222
222
  const t = Number(e);
223
223
  if (isNaN(t)) return String(e);
224
- const a = t < 0 ? "-" : "";
225
- let r = Math.abs(t), i = 0;
226
- for (; r >= 1024 && i < ce.length - 1; )
227
- r /= 1024, i++;
228
- return a + (i === 0 ? r : r.toFixed(1)) + " " + ce[i];
224
+ const i = t < 0 ? "-" : "";
225
+ let r = Math.abs(t), a = 0;
226
+ for (; r >= 1024 && a < ce.length - 1; )
227
+ r /= 1024, a++;
228
+ return i + (a === 0 ? r : r.toFixed(1)) + " " + ce[a];
229
229
  }
230
230
  const Ee = [
231
231
  "chart.bar",
@@ -266,37 +266,37 @@ const Ee = [
266
266
  function Pe(e) {
267
267
  if (!e) return;
268
268
  const t = e.toLowerCase();
269
- let a, r = 1 / 0;
269
+ let i, r = 1 / 0;
270
270
  for (const s of Ee) {
271
271
  const n = Le(t, s);
272
- n < r && (r = n, a = s);
272
+ n < r && (r = n, i = s);
273
273
  }
274
- const i = Math.min(3, Math.floor(t.length / 2));
275
- if (r <= i && r > 0)
276
- return a;
274
+ const a = Math.min(3, Math.floor(t.length / 2));
275
+ if (r <= a && r > 0)
276
+ return i;
277
277
  }
278
278
  function Le(e, t) {
279
- const a = e.length, r = t.length;
280
- if (a === 0) return r;
281
- if (r === 0) return a;
282
- const i = new Array(r + 1);
283
- for (let s = 0; s <= r; s++) i[s] = s;
284
- for (let s = 1; s <= a; s++) {
279
+ const i = e.length, r = t.length;
280
+ if (i === 0) return r;
281
+ if (r === 0) return i;
282
+ const a = new Array(r + 1);
283
+ for (let s = 0; s <= r; s++) a[s] = s;
284
+ for (let s = 1; s <= i; s++) {
285
285
  let n = s - 1;
286
- i[0] = s;
286
+ a[0] = s;
287
287
  for (let d = 1; d <= r; d++) {
288
288
  const c = e[s - 1] === t[d - 1] ? 0 : 1, p = Math.min(
289
- i[d] + 1,
289
+ a[d] + 1,
290
290
  // deletion
291
- i[d - 1] + 1,
291
+ a[d - 1] + 1,
292
292
  // insertion
293
293
  n + c
294
294
  // substitution
295
295
  );
296
- n = i[d], i[d] = p;
296
+ n = a[d], a[d] = p;
297
297
  }
298
298
  }
299
- return i[r];
299
+ return a[r];
300
300
  }
301
301
  const K = {
302
302
  // UI chrome
@@ -326,13 +326,13 @@ function me(e) {
326
326
  if (!e) return K;
327
327
  const t = e.toLowerCase();
328
328
  if (L.has(t)) return L.get(t);
329
- const a = t.split("-")[0];
330
- return a !== t && L.has(a) ? L.get(a) : K;
329
+ const i = t.split("-")[0];
330
+ return i !== t && L.has(i) ? L.get(i) : K;
331
331
  }
332
332
  function A(e, t) {
333
333
  return e.replace(
334
334
  /\{(\w+)\}/g,
335
- (a, r) => t[r] != null ? String(t[r]) : `{${r}}`
335
+ (i, r) => t[r] != null ? String(t[r]) : `{${r}}`
336
336
  );
337
337
  }
338
338
  function Ot() {
@@ -351,15 +351,15 @@ function Ie(e) {
351
351
  if (typeof document < "u" && document.documentElement?.lang)
352
352
  return document.documentElement.lang;
353
353
  }
354
- var Ne = Object.defineProperty, Fe = Object.getOwnPropertyDescriptor, Z = (e, t, a, r) => {
355
- for (var i = r > 1 ? void 0 : r ? Fe(t, a) : t, s = e.length - 1, n; s >= 0; s--)
356
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
357
- return r && i && Ne(t, a, i), i;
354
+ var Ne = Object.defineProperty, Fe = Object.getOwnPropertyDescriptor, Z = (e, t, i, r) => {
355
+ for (var a = r > 1 ? void 0 : r ? Fe(t, i) : t, s = e.length - 1, n; s >= 0; s--)
356
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
357
+ return r && a && Ne(t, i, a), a;
358
358
  };
359
359
  function de(e, t) {
360
- const a = e.value, r = e.format;
360
+ const i = e.value, r = e.format;
361
361
  return {
362
- value: r ? he(a, r, t) : a ?? 0,
362
+ value: r ? he(i, r, t) : i ?? 0,
363
363
  label: e.label,
364
364
  unit: e.unit,
365
365
  prefix: e.prefix,
@@ -385,14 +385,14 @@ let I = class extends y {
385
385
  const t = this.spec.data;
386
386
  return Array.isArray(t) ? o`
387
387
  <div class="stat-group" part="stat-group">
388
- ${t.map((a) => this.renderMetric(de(a, e)))}
388
+ ${t.map((i) => this.renderMetric(de(i, e)))}
389
389
  </div>
390
390
  ` : l;
391
391
  }
392
392
  renderMetric(e) {
393
- const t = e.trend === "up" ? "↑" : e.trend === "down" ? "↓" : e.trend === "flat" ? "→" : "", a = e.label ? `${e.label}: ${e.prefix ?? ""}${e.value}${e.unit ?? ""}${e.suffix ?? ""}` : void 0;
393
+ const t = e.trend === "up" ? "↑" : e.trend === "down" ? "↓" : e.trend === "flat" ? "→" : "", i = e.label ? `${e.label}: ${e.prefix ?? ""}${e.value}${e.unit ?? ""}${e.suffix ?? ""}` : void 0;
394
394
  return o`
395
- <div class="metric" part="metric" aria-label=${a ?? l} data-variant=${e.variant ?? l}>
395
+ <div class="metric" part="metric" aria-label=${i ?? l} data-variant=${e.variant ?? l}>
396
396
  ${e.icon ? o`<div class="metric-icon" part="icon">${e.icon}</div>` : l}
397
397
  ${e.label ? o`<div class="metric-label" part="label">${e.label}</div>` : l}
398
398
  <div class="metric-value" part="value">
@@ -410,7 +410,7 @@ I.styles = [b, w`
410
410
  :host {
411
411
  display: block;
412
412
  font-family: system-ui, -apple-system, sans-serif;
413
- container: u-metric / inline-size;
413
+ container: uw-metric / inline-size;
414
414
  }
415
415
 
416
416
  /* ── metric (single) ── */
@@ -427,7 +427,7 @@ I.styles = [b, w`
427
427
  color: var(--u-widget-text, #1a1a2e);
428
428
  }
429
429
 
430
- @container u-metric (max-width: 30rem) {
430
+ @container uw-metric (max-width: 30rem) {
431
431
  .metric-value {
432
432
  font-size: 1.5rem;
433
433
  }
@@ -494,7 +494,7 @@ I.styles = [b, w`
494
494
  padding-left: 1.5rem;
495
495
  }
496
496
 
497
- @container u-metric (max-width: 30rem) {
497
+ @container uw-metric (max-width: 30rem) {
498
498
  .stat-group {
499
499
  flex-direction: column;
500
500
  gap: 1rem;
@@ -520,17 +520,18 @@ Z([
520
520
  f({ type: String, reflect: !0 })
521
521
  ], I.prototype, "theme", 2);
522
522
  I = Z([
523
- x("u-metric")
523
+ x("uw-metric")
524
524
  ], I);
525
- var Me = Object.defineProperty, Te = Object.getOwnPropertyDescriptor, Q = (e, t, a, r) => {
526
- for (var i = r > 1 ? void 0 : r ? Te(t, a) : t, s = e.length - 1, n; s >= 0; s--)
527
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
528
- return r && i && Me(t, a, i), i;
525
+ var Me = Object.defineProperty, Te = Object.getOwnPropertyDescriptor, Q = (e, t, i, r) => {
526
+ for (var a = r > 1 ? void 0 : r ? Te(t, i) : t, s = e.length - 1, n; s >= 0; s--)
527
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
528
+ return r && a && Me(t, i, a), a;
529
529
  };
530
530
  const Ue = {
531
531
  min: 0,
532
532
  max: 100,
533
533
  unit: "",
534
+ subtitle: "",
534
535
  thresholds: []
535
536
  }, Re = {
536
537
  green: "#16a34a",
@@ -543,9 +544,9 @@ const Ue = {
543
544
  function pe(e) {
544
545
  return Re[e] ?? e;
545
546
  }
546
- function ue(e, t, a, r, i) {
547
- const s = (r - 90) * Math.PI / 180, n = (i - 90) * Math.PI / 180, d = e + a * Math.cos(s), c = t + a * Math.sin(s), p = e + a * Math.cos(n), g = t + a * Math.sin(n), m = i - r > 180 ? 1 : 0;
548
- return `M ${d} ${c} A ${a} ${a} 0 ${m} 1 ${p} ${g}`;
547
+ function ue(e, t, i, r, a) {
548
+ const s = (r - 90) * Math.PI / 180, n = (a - 90) * Math.PI / 180, d = e + i * Math.cos(s), c = t + i * Math.sin(s), p = e + i * Math.cos(n), g = t + i * Math.sin(n), m = a - r > 180 ? 1 : 0;
549
+ return `M ${d} ${c} A ${i} ${i} 0 ${m} 1 ${p} ${g}`;
549
550
  }
550
551
  let N = class extends y {
551
552
  constructor() {
@@ -562,38 +563,47 @@ let N = class extends y {
562
563
  const e = this.spec.data;
563
564
  return Number(e.value ?? 0);
564
565
  }
566
+ getActiveLabel(e, t) {
567
+ if (t.subtitle) return t.subtitle;
568
+ if (!t.thresholds?.length) return "";
569
+ const i = [...t.thresholds].sort((a, s) => a.to - s.to);
570
+ for (const a of i)
571
+ if (e <= a.to && a.label) return a.label;
572
+ return i[i.length - 1].label ?? "";
573
+ }
565
574
  renderGauge() {
566
- const e = this.getOptions(), t = this.getValue(), a = e.max - e.min, r = a > 0 ? Math.max(0, Math.min(1, (t - e.min) / a)) : 0, i = this.getThresholdColor(t, e), s = 100, n = 100, d = 80, c = 150, p = 240, g = c + p * r, m = ue(s, n, d, c, c + p), u = r > 0 ? ue(s, n, d, c, g) : null, h = typeof this.spec.title == "string" ? this.spec.title : "Gauge", v = `${t}${e.unit}`;
575
+ const e = this.getOptions(), t = this.getValue(), i = e.max - e.min, r = i > 0 ? Math.max(0, Math.min(1, (t - e.min) / i)) : 0, a = this.getThresholdColor(t, e), s = this.getActiveLabel(t, e), n = 100, d = 100, c = 80, p = 150, g = 240, m = p + g * r, u = ue(n, d, c, p, p + g), h = r > 0 ? ue(n, d, c, p, m) : null, v = typeof this.spec.title == "string" ? this.spec.title : "Gauge", $ = s ? `${t}${e.unit} ${s}` : `${t}${e.unit}`;
567
576
  return o`
568
577
  <div class="gauge-container" part="gauge"
569
578
  role="meter"
570
579
  aria-valuenow=${t}
571
580
  aria-valuemin=${e.min}
572
581
  aria-valuemax=${e.max}
573
- aria-label=${h}
574
- aria-valuetext=${v}
582
+ aria-label=${v}
583
+ aria-valuetext=${$}
575
584
  >
576
585
  <div class="gauge-wrapper">
577
586
  <div class="gauge-center">
578
587
  <div class="gauge-value" part="value">${t}</div>
579
588
  ${e.unit ? o`<div class="gauge-unit" part="unit">${e.unit}</div>` : l}
589
+ ${s ? o`<div class="gauge-subtitle" part="subtitle" style="color:${a}">${s}</div>` : l}
580
590
  </div>
581
591
  <svg class="gauge-svg" viewBox="0 0 200 195" role="presentation" aria-hidden="true">
582
- <path class="gauge-track" d="${m}" fill="none" stroke-width="12" stroke-linecap="round"></path>
583
- <path class="gauge-fill" d="${u ?? "M0 0"}" fill="none" stroke="${u ? i : "none"}" stroke-width="12" stroke-linecap="round"></path>
592
+ <path class="gauge-track" d="${u}" fill="none" stroke-width="12" stroke-linecap="round"></path>
593
+ <path class="gauge-fill" d="${h ?? "M0 0"}" fill="none" stroke="${h ? a : "none"}" stroke-width="12" stroke-linecap="round"></path>
584
594
  </svg>
585
595
  </div>
586
596
  </div>
587
597
  `;
588
598
  }
589
599
  renderProgress() {
590
- const e = this.spec.data, t = Number(e.value ?? 0), a = Number(e.max ?? this.spec.options?.max ?? 100), r = a > 0 ? Math.max(0, Math.min(100, t / a * 100)) : 0, i = this.getOptions(), s = this.getThresholdColor(t, i), n = this.formatLabel(t, r), d = typeof this.spec.title == "string" ? this.spec.title : "Progress";
600
+ const e = this.spec.data, t = Number(e.value ?? 0), i = Number(e.max ?? this.spec.options?.max ?? 100), r = i > 0 ? Math.max(0, Math.min(100, t / i * 100)) : 0, a = this.getOptions(), s = this.getThresholdColor(t, a), n = this.formatLabel(t, r), d = typeof this.spec.title == "string" ? this.spec.title : "Progress";
591
601
  return o`
592
602
  <div class="progress-container" part="progress"
593
603
  role="progressbar"
594
604
  aria-valuenow=${t}
595
605
  aria-valuemin=${0}
596
- aria-valuemax=${a}
606
+ aria-valuemax=${i}
597
607
  aria-label=${d}
598
608
  >
599
609
  <div class="progress-bar-track">
@@ -611,22 +621,22 @@ let N = class extends y {
611
621
  `;
612
622
  }
613
623
  formatLabel(e, t) {
614
- const a = this.spec.options;
615
- return a?.label ? String(a.label).replace("{value}", String(e)).replace("{percent}", String(Math.round(t))) : String(e);
624
+ const i = this.spec.options;
625
+ return i?.label ? String(i.label).replace("{value}", String(e)).replace("{percent}", String(Math.round(t))) : String(e);
616
626
  }
617
627
  getThresholdColor(e, t) {
618
628
  if (!t.thresholds?.length) return "var(--u-widget-primary, #4f46e5)";
619
- const a = [...t.thresholds].sort((r, i) => r.to - i.to);
620
- for (const r of a)
629
+ const i = [...t.thresholds].sort((r, a) => r.to - a.to);
630
+ for (const r of i)
621
631
  if (e <= r.to) return pe(r.color);
622
- return pe(a[a.length - 1].color);
632
+ return pe(i[i.length - 1].color);
623
633
  }
624
634
  };
625
635
  N.styles = [b, w`
626
636
  :host {
627
637
  display: block;
628
638
  font-family: system-ui, -apple-system, sans-serif;
629
- container: u-gauge / inline-size;
639
+ container: uw-gauge / inline-size;
630
640
  }
631
641
 
632
642
  .gauge-container {
@@ -659,6 +669,7 @@ N.styles = [b, w`
659
669
  left: 50%;
660
670
  transform: translate(-50%, -50%);
661
671
  text-align: center;
672
+ width: 65%;
662
673
  }
663
674
 
664
675
  .gauge-value {
@@ -673,6 +684,17 @@ N.styles = [b, w`
673
684
  color: var(--u-widget-text-secondary, #64748b);
674
685
  }
675
686
 
687
+ .gauge-subtitle {
688
+ font-size: 0.6875rem;
689
+ font-weight: 600;
690
+ line-height: 1.2;
691
+ margin-top: 2px;
692
+ max-width: 100%;
693
+ overflow: hidden;
694
+ text-overflow: ellipsis;
695
+ white-space: nowrap;
696
+ }
697
+
676
698
  /* ── progress bar ── */
677
699
  .progress-container {
678
700
  display: flex;
@@ -701,7 +723,7 @@ N.styles = [b, w`
701
723
  color: var(--u-widget-text-secondary, #64748b);
702
724
  }
703
725
 
704
- @container u-gauge (max-width: 10rem) {
726
+ @container uw-gauge (max-width: 10rem) {
705
727
  .gauge-value {
706
728
  font-size: 1.25rem;
707
729
  }
@@ -710,6 +732,10 @@ N.styles = [b, w`
710
732
  font-size: 0.625rem;
711
733
  }
712
734
 
735
+ .gauge-subtitle {
736
+ font-size: 0.5625rem;
737
+ }
738
+
713
739
  .progress-info {
714
740
  font-size: 0.75rem;
715
741
  }
@@ -726,25 +752,25 @@ Q([
726
752
  f({ type: String, reflect: !0 })
727
753
  ], N.prototype, "theme", 2);
728
754
  N = Q([
729
- x("u-gauge")
755
+ x("uw-gauge")
730
756
  ], N);
731
- var qe = Object.defineProperty, Be = Object.getOwnPropertyDescriptor, C = (e, t, a, r) => {
732
- for (var i = r > 1 ? void 0 : r ? Be(t, a) : t, s = e.length - 1, n; s >= 0; s--)
733
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
734
- return r && i && qe(t, a, i), i;
757
+ var qe = Object.defineProperty, Be = Object.getOwnPropertyDescriptor, C = (e, t, i, r) => {
758
+ for (var a = r > 1 ? void 0 : r ? Be(t, i) : t, s = e.length - 1, n; s >= 0; s--)
759
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
760
+ return r && a && qe(t, i, a), a;
735
761
  };
736
762
  let _ = class extends y {
737
763
  constructor() {
738
764
  super(...arguments), this.spec = null, this.theme = null, this._sortField = null, this._sortDir = null, this._page = 0, this._searchQuery = "", this._focusedIdx = 0, this._onTableKeydown = (e) => {
739
- const a = e.target.closest("tr");
740
- if (!a) return;
741
- const r = a.parentElement;
765
+ const i = e.target.closest("tr");
766
+ if (!i) return;
767
+ const r = i.parentElement;
742
768
  if (!r) return;
743
- const i = Array.from(r.querySelectorAll("tr")), s = i.indexOf(a);
769
+ const a = Array.from(r.querySelectorAll("tr")), s = a.indexOf(i);
744
770
  let n = -1;
745
771
  switch (e.key) {
746
772
  case "ArrowDown":
747
- n = Math.min(s + 1, i.length - 1);
773
+ n = Math.min(s + 1, a.length - 1);
748
774
  break;
749
775
  case "ArrowUp":
750
776
  n = Math.max(s - 1, 0);
@@ -753,7 +779,7 @@ let _ = class extends y {
753
779
  n = 0;
754
780
  break;
755
781
  case "End":
756
- n = i.length - 1;
782
+ n = a.length - 1;
757
783
  break;
758
784
  default:
759
785
  return;
@@ -762,15 +788,15 @@ let _ = class extends y {
762
788
  this.shadowRoot?.querySelectorAll("tbody tr")?.[n]?.focus();
763
789
  }));
764
790
  }, this._onListKeydown = (e) => {
765
- const a = e.target.closest(".list-item");
766
- if (!a) return;
767
- const r = a.parentElement;
791
+ const i = e.target.closest(".list-item");
792
+ if (!i) return;
793
+ const r = i.parentElement;
768
794
  if (!r) return;
769
- const i = Array.from(r.querySelectorAll(".list-item")), s = i.indexOf(a);
795
+ const a = Array.from(r.querySelectorAll(".list-item")), s = a.indexOf(i);
770
796
  let n = -1;
771
797
  switch (e.key) {
772
798
  case "ArrowDown":
773
- n = Math.min(s + 1, i.length - 1);
799
+ n = Math.min(s + 1, a.length - 1);
774
800
  break;
775
801
  case "ArrowUp":
776
802
  n = Math.max(s - 1, 0);
@@ -779,7 +805,7 @@ let _ = class extends y {
779
805
  n = 0;
780
806
  break;
781
807
  case "End":
782
- n = i.length - 1;
808
+ n = a.length - 1;
783
809
  break;
784
810
  default:
785
811
  return;
@@ -802,28 +828,28 @@ let _ = class extends y {
802
828
  return me(typeof e == "string" ? e : void 0);
803
829
  }
804
830
  renderTable() {
805
- const e = this.spec.data, t = this.getColumns(e), a = this._locale, r = this.spec.options?.sortable !== !1, i = !!this.spec.options?.searchable, s = !!this.spec.options?.compact, n = Number(this.spec.options?.pageSize) || 0, d = this._searchQuery ? this.filterData(e, t) : e, c = this._sortField && this._sortDir ? this.sortData(d) : d, p = n > 0 ? Math.max(1, Math.ceil(c.length / n)) : 1, g = Math.min(this._page, p - 1), m = n > 0 ? c.slice(g * n, (g + 1) * n) : c, u = i ? o`
831
+ const e = this.spec.data, t = this.getColumns(e), i = this._locale, r = this.spec.options?.sortable !== !1, a = !!this.spec.options?.searchable, s = !!this.spec.options?.compact, n = Number(this.spec.options?.pageSize) || 0, d = this._searchQuery ? this.filterData(e, t) : e, c = this._sortField && this._sortDir ? this.sortData(d) : d, p = n > 0 ? Math.max(1, Math.ceil(c.length / n)) : 1, g = Math.min(this._page, p - 1), m = n > 0 ? c.slice(g * n, (g + 1) * n) : c, u = a ? o`
806
832
  <div class="search-box" part="search">
807
833
  <input
808
834
  class="search-input"
809
835
  type="text"
810
- placeholder=${a.searchPlaceholder}
811
- aria-label=${a.searchTable}
836
+ placeholder=${i.searchPlaceholder}
837
+ aria-label=${i.searchTable}
812
838
  .value=${this._searchQuery}
813
839
  @input=${this._onSearch}
814
840
  />
815
841
  </div>
816
842
  ` : l, h = n > 0 && p > 1 ? o`
817
- <nav class="pagination" part="pagination" aria-label=${a.tablePagination}>
818
- <button aria-label=${a.previousPage} ?disabled=${g === 0} @click=${() => this._onPageChange(g - 1)}>${a.prev}</button>
843
+ <nav class="pagination" part="pagination" aria-label=${i.tablePagination}>
844
+ <button aria-label=${i.previousPage} ?disabled=${g === 0} @click=${() => this._onPageChange(g - 1)}>${i.prev}</button>
819
845
  <span aria-live="polite">${g + 1} / ${p}</span>
820
- <button aria-label=${a.nextPage} ?disabled=${g >= p - 1} @click=${() => this._onPageChange(g + 1)}>${a.next}</button>
846
+ <button aria-label=${i.nextPage} ?disabled=${g >= p - 1} @click=${() => this._onPageChange(g + 1)}>${i.next}</button>
821
847
  </nav>
822
848
  ` : l;
823
849
  return o`<div class="table-container${s ? " compact" : ""}">
824
850
  ${u}
825
851
  <div class="table-wrapper" part="table">
826
- <table aria-label=${this.spec.title ?? a.dataTable}>
852
+ <table aria-label=${this.spec.title ?? i.dataTable}>
827
853
  <thead>
828
854
  <tr>
829
855
  ${t.map(
@@ -872,18 +898,18 @@ let _ = class extends y {
872
898
  });
873
899
  }
874
900
  filterData(e, t) {
875
- const a = this._searchQuery.toLowerCase(), r = t.map((i) => i.field);
901
+ const i = this._searchQuery.toLowerCase(), r = t.map((a) => a.field);
876
902
  return e.filter(
877
- (i) => r.some((s) => String(i[s] ?? "").toLowerCase().includes(a))
903
+ (a) => r.some((s) => String(a[s] ?? "").toLowerCase().includes(i))
878
904
  );
879
905
  }
880
906
  _onSort(e) {
881
907
  this._sortField === e ? this._sortDir === "asc" ? this._sortDir = "desc" : (this._sortField = null, this._sortDir = null) : (this._sortField = e, this._sortDir = "asc");
882
908
  }
883
909
  sortData(e) {
884
- const t = this._sortField, a = this._sortDir;
885
- return [...e].sort((r, i) => {
886
- const s = r[t], n = i[t];
910
+ const t = this._sortField, i = this._sortDir;
911
+ return [...e].sort((r, a) => {
912
+ const s = r[t], n = a[t];
887
913
  if (s == null && n == null) return 0;
888
914
  if (s == null) return 1;
889
915
  if (n == null) return -1;
@@ -894,13 +920,13 @@ let _ = class extends y {
894
920
  const c = Number(s), p = Number(n);
895
921
  d = String(s) !== "" && String(n) !== "" && !isNaN(c) && !isNaN(p) ? c - p : String(s).localeCompare(String(n));
896
922
  }
897
- return a === "asc" ? d : -d;
923
+ return i === "asc" ? d : -d;
898
924
  });
899
925
  }
900
926
  renderList() {
901
- const e = this.spec.data, t = this.spec.mapping, a = !!this.spec.options?.compact, r = t?.primary ?? this.inferPrimaryKey(e), i = t?.secondary, s = t?.icon, n = t?.avatar, d = t?.trailing, c = t?.badge;
927
+ const e = this.spec.data, t = this.spec.mapping, i = !!this.spec.options?.compact, r = t?.primary ?? this.inferPrimaryKey(e), a = t?.secondary, s = t?.icon, n = t?.avatar, d = t?.trailing, c = t?.badge;
902
928
  return o`
903
- <div class="list-container${a ? " compact" : ""}" part="list" @keydown=${this._onListKeydown}>
929
+ <div class="list-container${i ? " compact" : ""}" part="list" @keydown=${this._onListKeydown}>
904
930
  ${e.map(
905
931
  (p, g) => o`
906
932
  <div class="list-item" part="list-item"
@@ -913,7 +939,7 @@ let _ = class extends y {
913
939
  ${n && p[n] ? o`<img class="list-avatar" src=${String(p[n])} alt="" part="avatar" />` : s ? o`<div class="list-icon" part="icon">${this.getIconLetter(p[s])}</div>` : l}
914
940
  <div class="list-content">
915
941
  <div class="list-primary" part="primary">${p[r] ?? ""}</div>
916
- ${i ? o`<div class="list-secondary" part="secondary">${p[i] ?? ""}</div>` : l}
942
+ ${a ? o`<div class="list-secondary" part="secondary">${p[a] ?? ""}</div>` : l}
917
943
  </div>
918
944
  ${c && p[c] != null ? o`<span class="list-badge" part="badge">${p[c]}</span>` : l}
919
945
  ${d && p[d] != null ? o`<div class="list-trailing" part="trailing">${p[d]}</div>` : l}
@@ -925,7 +951,7 @@ let _ = class extends y {
925
951
  }
926
952
  _onRowClick(e, t) {
927
953
  if (!this.spec) return;
928
- const a = {
954
+ const i = {
929
955
  type: "select",
930
956
  widget: this.spec.widget,
931
957
  id: this.spec.id,
@@ -933,7 +959,7 @@ let _ = class extends y {
933
959
  };
934
960
  this.dispatchEvent(
935
961
  new CustomEvent("u-widget-internal", {
936
- detail: a,
962
+ detail: i,
937
963
  bubbles: !0,
938
964
  composed: !0
939
965
  })
@@ -944,8 +970,8 @@ let _ = class extends y {
944
970
  }
945
971
  inferPrimaryKey(e) {
946
972
  if (e.length === 0) return "";
947
- const t = Object.keys(e[0]), a = ["name", "title", "label", "id", "key"];
948
- for (const s of a)
973
+ const t = Object.keys(e[0]), i = ["name", "title", "label", "id", "key"];
974
+ for (const s of i)
949
975
  if (t.includes(s)) return s;
950
976
  const r = e[0];
951
977
  return t.find((s) => typeof r[s] == "string") ?? t[0] ?? "";
@@ -958,7 +984,7 @@ _.styles = [b, w`
958
984
  :host {
959
985
  display: block;
960
986
  font-family: system-ui, -apple-system, sans-serif;
961
- container: u-table / inline-size;
987
+ container: uw-table / inline-size;
962
988
  }
963
989
 
964
990
  /* ── table ── */
@@ -1228,7 +1254,7 @@ _.styles = [b, w`
1228
1254
  }
1229
1255
 
1230
1256
  /* ── container-query responsive ── */
1231
- @container u-table (max-width: 30rem) {
1257
+ @container uw-table (max-width: 30rem) {
1232
1258
  table {
1233
1259
  font-size: 0.75rem;
1234
1260
  }
@@ -1285,18 +1311,18 @@ C([
1285
1311
  S()
1286
1312
  ], _.prototype, "_focusedIdx", 2);
1287
1313
  _ = C([
1288
- x("u-table")
1314
+ x("uw-table")
1289
1315
  ], _);
1290
- var We = Object.defineProperty, He = Object.getOwnPropertyDescriptor, H = (e, t, a, r) => {
1291
- for (var i = r > 1 ? void 0 : r ? He(t, a) : t, s = e.length - 1, n; s >= 0; s--)
1292
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
1293
- return r && i && We(t, a, i), i;
1316
+ var We = Object.defineProperty, He = Object.getOwnPropertyDescriptor, H = (e, t, i, r) => {
1317
+ for (var a = r > 1 ? void 0 : r ? He(t, i) : t, s = e.length - 1, n; s >= 0; s--)
1318
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
1319
+ return r && a && We(t, i, a), a;
1294
1320
  };
1295
1321
  let D = class extends y {
1296
1322
  constructor() {
1297
1323
  super(...arguments), this.spec = null, this.theme = null, this._formData = {}, this._errors = {}, this._onFormSubmit = (e) => {
1298
1324
  e.preventDefault();
1299
- const t = (this.spec?.actions ?? []).find((a) => a.action === "submit");
1325
+ const t = (this.spec?.actions ?? []).find((i) => i.action === "submit");
1300
1326
  t ? this._onAction(t) : this._validate() && this._emitEvent({
1301
1327
  type: "submit",
1302
1328
  widget: this.spec.widget,
@@ -1305,7 +1331,7 @@ let D = class extends y {
1305
1331
  });
1306
1332
  }, this._onConfirmKeydown = (e) => {
1307
1333
  if (e.key === "Escape") {
1308
- const t = (this.spec?.actions ?? []).find((a) => a.action === "cancel");
1334
+ const t = (this.spec?.actions ?? []).find((i) => i.action === "cancel");
1309
1335
  t && this._onAction(t);
1310
1336
  }
1311
1337
  };
@@ -1320,7 +1346,7 @@ let D = class extends y {
1320
1346
  const e = this.spec.fields ?? [], t = this.spec.actions ?? [];
1321
1347
  return o`
1322
1348
  <form class="form-container" part="form" @submit=${this._onFormSubmit}>
1323
- ${e.map((a) => this.renderField(a))}
1349
+ ${e.map((i) => this.renderField(i))}
1324
1350
  ${t.length > 0 ? this.renderActions(t) : l}
1325
1351
  </form>
1326
1352
  `;
@@ -1335,31 +1361,31 @@ let D = class extends y {
1335
1361
  `;
1336
1362
  }
1337
1363
  renderField(e) {
1338
- const t = this._formData[e.field], a = e.type ?? "text", r = this._errors[e.field], i = `err-${e.field}`;
1364
+ const t = this._formData[e.field], i = e.type ?? "text", r = this._errors[e.field], a = `err-${e.field}`;
1339
1365
  return o`
1340
1366
  <div class="field" part="field">
1341
1367
  ${e.label ? o`<label class="field-label" for=${`input-${e.field}`} part="label"
1342
1368
  >${e.label}${e.required ? o`<span class="required">*</span>` : l}</label
1343
1369
  >` : l}
1344
- ${this.renderInput(e, a, t, r ? i : void 0)}
1345
- ${r ? o`<div class="field-error" id=${i} role="alert" part="field-error">${r}</div>` : l}
1370
+ ${this.renderInput(e, i, t, r ? a : void 0)}
1371
+ ${r ? o`<div class="field-error" id=${a} role="alert" part="field-error">${r}</div>` : l}
1346
1372
  </div>
1347
1373
  `;
1348
1374
  }
1349
- renderInput(e, t, a, r) {
1350
- const i = !!this._errors[e.field];
1375
+ renderInput(e, t, i, r) {
1376
+ const a = !!this._errors[e.field];
1351
1377
  switch (t) {
1352
1378
  case "textarea":
1353
1379
  return o`<textarea
1354
1380
  id=${`input-${e.field}`}
1355
- class=${i ? "invalid" : ""}
1356
- .value=${String(a ?? "")}
1381
+ class=${a ? "invalid" : ""}
1382
+ .value=${String(i ?? "")}
1357
1383
  placeholder=${e.placeholder ?? ""}
1358
1384
  rows=${e.rows ?? 3}
1359
1385
  ?required=${e.required}
1360
1386
  minlength=${e.minLength ?? ""}
1361
1387
  maxlength=${e.maxLength ?? ""}
1362
- aria-invalid=${i ? "true" : "false"}
1388
+ aria-invalid=${a ? "true" : "false"}
1363
1389
  aria-describedby=${r ?? l}
1364
1390
  ?aria-required=${e.required}
1365
1391
  @input=${(s) => this._onChange(e.field, s.target.value)}
@@ -1368,10 +1394,10 @@ let D = class extends y {
1368
1394
  case "select":
1369
1395
  return o`<select
1370
1396
  id=${`input-${e.field}`}
1371
- class=${i ? "invalid" : ""}
1372
- .value=${String(a ?? "")}
1397
+ class=${a ? "invalid" : ""}
1398
+ .value=${String(i ?? "")}
1373
1399
  ?required=${e.required}
1374
- aria-invalid=${i ? "true" : "false"}
1400
+ aria-invalid=${a ? "true" : "false"}
1375
1401
  aria-describedby=${r ?? l}
1376
1402
  @change=${(s) => this._onChange(e.field, s.target.value)}
1377
1403
  part="input"
@@ -1382,16 +1408,16 @@ let D = class extends y {
1382
1408
  )}
1383
1409
  </select>`;
1384
1410
  case "multiselect":
1385
- return o`<div class="multiselect-group" part="multiselect-group" role="group" aria-label=${e.label ?? e.field} aria-invalid=${i ? "true" : "false"} aria-describedby=${r ?? l}>
1411
+ return o`<div class="multiselect-group" part="multiselect-group" role="group" aria-label=${e.label ?? e.field} aria-invalid=${a ? "true" : "false"} aria-describedby=${r ?? l}>
1386
1412
  ${(e.options ?? []).map(
1387
1413
  (s) => o`
1388
1414
  <label>
1389
1415
  <input
1390
1416
  type="checkbox"
1391
1417
  value=${s}
1392
- ?checked=${Array.isArray(a) && a.includes(s)}
1418
+ ?checked=${Array.isArray(i) && i.includes(s)}
1393
1419
  @change=${(n) => {
1394
- const d = n.target.checked, c = Array.isArray(a) ? [...a] : [];
1420
+ const d = n.target.checked, c = Array.isArray(i) ? [...i] : [];
1395
1421
  this._onChange(
1396
1422
  e.field,
1397
1423
  d ? [...c, s] : c.filter((p) => p !== s)
@@ -1407,14 +1433,14 @@ let D = class extends y {
1407
1433
  return o`<div class="toggle-wrapper">
1408
1434
  <div
1409
1435
  class="toggle-track"
1410
- data-on=${!!a}
1436
+ data-on=${!!i}
1411
1437
  role="switch"
1412
- aria-checked=${!!a}
1438
+ aria-checked=${!!i}
1413
1439
  aria-label=${e.label ?? e.field}
1414
1440
  tabindex="0"
1415
- @click=${() => this._onChange(e.field, !a)}
1441
+ @click=${() => this._onChange(e.field, !i)}
1416
1442
  @keydown=${(s) => {
1417
- (s.key === " " || s.key === "Enter") && (s.preventDefault(), this._onChange(e.field, !a));
1443
+ (s.key === " " || s.key === "Enter") && (s.preventDefault(), this._onChange(e.field, !i));
1418
1444
  }}
1419
1445
  part="toggle"
1420
1446
  >
@@ -1422,7 +1448,7 @@ let D = class extends y {
1422
1448
  </div>
1423
1449
  </div>`;
1424
1450
  case "radio":
1425
- return o`<div class="radio-group" part="radio-group" role="radiogroup" aria-label=${e.label ?? e.field} aria-invalid=${i ? "true" : "false"} aria-describedby=${r ?? l}>
1451
+ return o`<div class="radio-group" part="radio-group" role="radiogroup" aria-label=${e.label ?? e.field} aria-invalid=${a ? "true" : "false"} aria-describedby=${r ?? l}>
1426
1452
  ${(e.options ?? []).map(
1427
1453
  (s) => o`
1428
1454
  <label>
@@ -1430,7 +1456,7 @@ let D = class extends y {
1430
1456
  type="radio"
1431
1457
  name=${e.field}
1432
1458
  value=${s}
1433
- ?checked=${a === s}
1459
+ ?checked=${i === s}
1434
1460
  @change=${() => this._onChange(e.field, s)}
1435
1461
  />
1436
1462
  ${s}
@@ -1439,16 +1465,16 @@ let D = class extends y {
1439
1465
  )}
1440
1466
  </div>`;
1441
1467
  case "checkbox":
1442
- return o`<div class="checkbox-group" part="checkbox-group" role="group" aria-label=${e.label ?? e.field} aria-invalid=${i ? "true" : "false"} aria-describedby=${r ?? l}>
1468
+ return o`<div class="checkbox-group" part="checkbox-group" role="group" aria-label=${e.label ?? e.field} aria-invalid=${a ? "true" : "false"} aria-describedby=${r ?? l}>
1443
1469
  ${(e.options ?? []).map(
1444
1470
  (s) => o`
1445
1471
  <label>
1446
1472
  <input
1447
1473
  type="checkbox"
1448
1474
  value=${s}
1449
- ?checked=${Array.isArray(a) && a.includes(s)}
1475
+ ?checked=${Array.isArray(i) && i.includes(s)}
1450
1476
  @change=${(n) => {
1451
- const d = n.target.checked, c = Array.isArray(a) ? [...a] : [];
1477
+ const d = n.target.checked, c = Array.isArray(i) ? [...i] : [];
1452
1478
  this._onChange(
1453
1479
  e.field,
1454
1480
  d ? [...c, s] : c.filter((p) => p !== s)
@@ -1464,11 +1490,11 @@ let D = class extends y {
1464
1490
  return o`<input
1465
1491
  type=${t === "datetime" ? "datetime-local" : t}
1466
1492
  id=${`input-${e.field}`}
1467
- class=${i ? "invalid" : ""}
1468
- .value=${String(a ?? "")}
1493
+ class=${a ? "invalid" : ""}
1494
+ .value=${String(i ?? "")}
1469
1495
  placeholder=${e.placeholder ?? ""}
1470
1496
  ?required=${e.required}
1471
- aria-invalid=${i ? "true" : "false"}
1497
+ aria-invalid=${a ? "true" : "false"}
1472
1498
  aria-describedby=${r ?? l}
1473
1499
  ?aria-required=${e.required}
1474
1500
  min=${e.min ?? ""}
@@ -1494,8 +1520,8 @@ let D = class extends y {
1494
1520
  type=${t.action === "submit" ? "submit" : "button"}
1495
1521
  data-style=${t.style ?? "default"}
1496
1522
  ?disabled=${t.disabled}
1497
- @click=${(a) => {
1498
- t.action === "submit" && a.preventDefault(), this._onAction(t);
1523
+ @click=${(i) => {
1524
+ t.action === "submit" && i.preventDefault(), this._onAction(t);
1499
1525
  }}
1500
1526
  part="action-btn"
1501
1527
  >
@@ -1508,8 +1534,8 @@ let D = class extends y {
1508
1534
  }
1509
1535
  _onChange(e, t) {
1510
1536
  if (this._formData = { ...this._formData, [e]: t }, this._errors[e]) {
1511
- const a = { ...this._errors };
1512
- delete a[e], this._errors = a;
1537
+ const i = { ...this._errors };
1538
+ delete i[e], this._errors = i;
1513
1539
  }
1514
1540
  this._emitEvent({
1515
1541
  type: "change",
@@ -1523,29 +1549,29 @@ let D = class extends y {
1523
1549
  return me(typeof e == "string" ? e : void 0);
1524
1550
  }
1525
1551
  _validate() {
1526
- const e = this.spec?.fields ?? [], t = {}, a = this._locale;
1552
+ const e = this.spec?.fields ?? [], t = {}, i = this._locale;
1527
1553
  for (const r of e) {
1528
- const i = this._formData[r.field], s = r.label ?? r.field;
1529
- if (r.required && (i == null || i === "" || Array.isArray(i) && i.length === 0)) {
1530
- t[r.field] = r.message ?? A(a.required, { label: s });
1554
+ const a = this._formData[r.field], s = r.label ?? r.field;
1555
+ if (r.required && (a == null || a === "" || Array.isArray(a) && a.length === 0)) {
1556
+ t[r.field] = r.message ?? A(i.required, { label: s });
1531
1557
  continue;
1532
1558
  }
1533
- if (!(i == null || i === "")) {
1534
- if (r.maxLength != null && typeof i == "string" && i.length > r.maxLength && (t[r.field] = r.message ?? A(a.maxLength, { label: s, max: r.maxLength })), r.min != null && typeof i == "number" && i < Number(r.min) && (t[r.field] = r.message ?? A(a.minValue, { label: s, min: r.min })), r.max != null && typeof i == "number" && i > Number(r.max) && (t[r.field] = r.message ?? A(a.maxValue, { label: s, max: r.max })), r.minLength != null && typeof i == "string" && i.length < r.minLength) {
1535
- t[r.field] = r.message ?? A(a.minLength, { label: s, min: r.minLength });
1559
+ if (!(a == null || a === "")) {
1560
+ if (r.maxLength != null && typeof a == "string" && a.length > r.maxLength && (t[r.field] = r.message ?? A(i.maxLength, { label: s, max: r.maxLength })), r.min != null && typeof a == "number" && a < Number(r.min) && (t[r.field] = r.message ?? A(i.minValue, { label: s, min: r.min })), r.max != null && typeof a == "number" && a > Number(r.max) && (t[r.field] = r.message ?? A(i.maxValue, { label: s, max: r.max })), r.minLength != null && typeof a == "string" && a.length < r.minLength) {
1561
+ t[r.field] = r.message ?? A(i.minLength, { label: s, min: r.minLength });
1536
1562
  continue;
1537
1563
  }
1538
- if (r.type === "email" && typeof i == "string" && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(i)) {
1539
- t[r.field] = r.message ?? A(a.invalidEmail, { label: s });
1564
+ if (r.type === "email" && typeof a == "string" && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(a)) {
1565
+ t[r.field] = r.message ?? A(i.invalidEmail, { label: s });
1540
1566
  continue;
1541
1567
  }
1542
- if (r.type === "url" && typeof i == "string" && !/^https?:\/\/.+/.test(i)) {
1543
- t[r.field] = r.message ?? A(a.invalidUrl, { label: s });
1568
+ if (r.type === "url" && typeof a == "string" && !/^https?:\/\/.+/.test(a)) {
1569
+ t[r.field] = r.message ?? A(i.invalidUrl, { label: s });
1544
1570
  continue;
1545
1571
  }
1546
- if (r.pattern && typeof i == "string")
1572
+ if (r.pattern && typeof a == "string")
1547
1573
  try {
1548
- new RegExp(r.pattern).test(i) || (t[r.field] = r.message ?? A(a.invalidPattern, { label: s }));
1574
+ new RegExp(r.pattern).test(a) || (t[r.field] = r.message ?? A(i.invalidPattern, { label: s }));
1549
1575
  } catch {
1550
1576
  }
1551
1577
  }
@@ -1588,7 +1614,7 @@ D.styles = [b, w`
1588
1614
  :host {
1589
1615
  display: block;
1590
1616
  font-family: system-ui, -apple-system, sans-serif;
1591
- container: u-form / inline-size;
1617
+ container: uw-form / inline-size;
1592
1618
  }
1593
1619
 
1594
1620
  .form-container {
@@ -1773,7 +1799,7 @@ D.styles = [b, w`
1773
1799
  line-height: 1.5;
1774
1800
  }
1775
1801
 
1776
- @container u-form (max-width: 20rem) {
1802
+ @container uw-form (max-width: 20rem) {
1777
1803
  .form-container {
1778
1804
  gap: 12px;
1779
1805
  }
@@ -1815,12 +1841,12 @@ H([
1815
1841
  S()
1816
1842
  ], D.prototype, "_errors", 2);
1817
1843
  D = H([
1818
- x("u-form")
1844
+ x("uw-form")
1819
1845
  ], D);
1820
- var Ke = Object.defineProperty, Ve = Object.getOwnPropertyDescriptor, ee = (e, t, a, r) => {
1821
- for (var i = r > 1 ? void 0 : r ? Ve(t, a) : t, s = e.length - 1, n; s >= 0; s--)
1822
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
1823
- return r && i && Ke(t, a, i), i;
1846
+ var Ke = Object.defineProperty, Ve = Object.getOwnPropertyDescriptor, ee = (e, t, i, r) => {
1847
+ for (var a = r > 1 ? void 0 : r ? Ve(t, i) : t, s = e.length - 1, n; s >= 0; s--)
1848
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
1849
+ return r && a && Ke(t, i, a), a;
1824
1850
  };
1825
1851
  let F = class extends y {
1826
1852
  constructor() {
@@ -1828,27 +1854,27 @@ let F = class extends y {
1828
1854
  }
1829
1855
  render() {
1830
1856
  if (!this.spec) return l;
1831
- const e = this.spec.layout ?? "stack", t = this.spec.columns ?? 2, a = this.spec.children ?? [], r = this.spec.title, i = a.map((n) => this._child(n)), s = r ? "region" : void 0;
1857
+ const e = this.spec.layout ?? "stack", t = this.spec.columns ?? 2, i = this.spec.children ?? [], r = this.spec.title, a = i.map((n) => this._child(n)), s = r ? "region" : void 0;
1832
1858
  if (e === "row")
1833
- return o`<div class="compose-container" part="compose" role=${s ?? l} aria-label=${r ?? l}>${r ? o`<div class="compose-title" part="title">${r}</div>` : l}<div class="layout-row" part="layout">${i}</div></div>`;
1859
+ return o`<div class="compose-container" part="compose" role=${s ?? l} aria-label=${r ?? l}>${r ? o`<div class="compose-title" part="title">${r}</div>` : l}<div class="layout-row" part="layout">${a}</div></div>`;
1834
1860
  if (e === "grid") {
1835
1861
  const n = this._gridColumns(t);
1836
- return o`<div class="compose-container" part="compose" role=${s ?? l} aria-label=${r ?? l}>${r ? o`<div class="compose-title" part="title">${r}</div>` : l}<div class="layout-grid" part="layout" style="grid-template-columns: ${n}">${i}</div></div>`;
1862
+ return o`<div class="compose-container" part="compose" role=${s ?? l} aria-label=${r ?? l}>${r ? o`<div class="compose-title" part="title">${r}</div>` : l}<div class="layout-grid" part="layout" style="grid-template-columns: ${n}">${a}</div></div>`;
1837
1863
  }
1838
- return o`<div class="compose-container" part="compose" role=${s ?? l} aria-label=${r ?? l}>${r ? o`<div class="compose-title" part="title">${r}</div>` : l}<div class="layout-stack" part="layout">${i}</div></div>`;
1864
+ return o`<div class="compose-container" part="compose" role=${s ?? l} aria-label=${r ?? l}>${r ? o`<div class="compose-title" part="title">${r}</div>` : l}<div class="layout-stack" part="layout">${a}</div></div>`;
1839
1865
  }
1840
1866
  /** Compute grid-template-columns from options.widths or fallback to equal columns. */
1841
1867
  _gridColumns(e) {
1842
- const a = (this.spec?.options ?? {}).widths;
1843
- return !Array.isArray(a) || a.length === 0 ? `repeat(${e}, 1fr)` : a.map((r) => {
1868
+ const i = (this.spec?.options ?? {}).widths;
1869
+ return !Array.isArray(i) || i.length === 0 ? `repeat(${e}, 1fr)` : i.map((r) => {
1844
1870
  if (r === "auto") return "auto";
1845
1871
  if (r === "stretch") return "1fr";
1846
- const i = Number(r);
1847
- return Number.isFinite(i) && i > 0 ? `${i}fr` : "1fr";
1872
+ const a = Number(r);
1873
+ return Number.isFinite(a) && a > 0 ? `${a}fr` : "1fr";
1848
1874
  }).join(" ");
1849
1875
  }
1850
1876
  _child(e) {
1851
- const t = this.theme, a = e.span ? Math.max(1, Math.floor(Number(e.span) || 1)) : 0, r = a > 1 ? `grid-column: span ${a}` : "", s = !!(this.spec?.options ?? {}).card, n = o`<u-widget .spec=${e} theme=${t ?? l}></u-widget>`;
1877
+ const t = this.theme, i = e.span ? Math.max(1, Math.floor(Number(e.span) || 1)) : 0, r = i > 1 ? `grid-column: span ${i}` : "", s = !!(this.spec?.options ?? {}).card, n = o`<u-widget .spec=${e} theme=${t ?? l}></u-widget>`;
1852
1878
  if (e.collapsed) {
1853
1879
  const c = e.title || "Details";
1854
1880
  return o`
@@ -1865,7 +1891,7 @@ let F = class extends y {
1865
1891
  F.styles = [b, w`
1866
1892
  :host {
1867
1893
  display: block;
1868
- container: u-compose / inline-size;
1894
+ container: uw-compose / inline-size;
1869
1895
  }
1870
1896
 
1871
1897
  .compose-container {
@@ -1953,7 +1979,7 @@ F.styles = [b, w`
1953
1979
  }
1954
1980
 
1955
1981
  /* ── container-query responsive ── */
1956
- @container u-compose (max-width: 30rem) {
1982
+ @container uw-compose (max-width: 30rem) {
1957
1983
  .layout-row {
1958
1984
  flex-direction: column;
1959
1985
  }
@@ -1970,12 +1996,12 @@ ee([
1970
1996
  f({ type: String, reflect: !0 })
1971
1997
  ], F.prototype, "theme", 2);
1972
1998
  F = ee([
1973
- x("u-compose")
1999
+ x("uw-compose")
1974
2000
  ], F);
1975
- var Ge = Object.defineProperty, Xe = Object.getOwnPropertyDescriptor, te = (e, t, a, r) => {
1976
- for (var i = r > 1 ? void 0 : r ? Xe(t, a) : t, s = e.length - 1, n; s >= 0; s--)
1977
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
1978
- return r && i && Ge(t, a, i), i;
2001
+ var Ge = Object.defineProperty, Xe = Object.getOwnPropertyDescriptor, te = (e, t, i, r) => {
2002
+ for (var a = r > 1 ? void 0 : r ? Xe(t, i) : t, s = e.length - 1, n; s >= 0; s--)
2003
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
2004
+ return r && a && Ge(t, i, a), a;
1979
2005
  };
1980
2006
  let M = class extends y {
1981
2007
  constructor() {
@@ -2003,16 +2029,16 @@ let M = class extends y {
2003
2029
  renderImage() {
2004
2030
  const e = this.spec.data;
2005
2031
  if (!e) return l;
2006
- const t = String(e.src ?? ""), a = String(e.alt ?? ""), r = e.caption, i = this.sanitizeUrl(t);
2007
- return i ? o`<div class="image-container" part="image">
2008
- <img src=${i} alt=${a} loading="lazy" />
2032
+ const t = String(e.src ?? ""), i = String(e.alt ?? ""), r = e.caption, a = this.sanitizeUrl(t);
2033
+ return a ? o`<div class="image-container" part="image">
2034
+ <img src=${a} alt=${i} loading="lazy" />
2009
2035
  ${r ? o`<div class="image-caption" part="caption">${r}</div>` : l}
2010
2036
  </div>` : l;
2011
2037
  }
2012
2038
  renderCallout() {
2013
2039
  const e = this.spec.data;
2014
2040
  if (!e) return l;
2015
- const t = String(e.message ?? ""), a = String(e.level ?? "info"), r = e.title, s = ["info", "warning", "error", "success"].includes(a) ? a : "info", n = s === "warning" || s === "error";
2041
+ const t = String(e.message ?? ""), i = String(e.level ?? "info"), r = e.title, s = ["info", "warning", "error", "success"].includes(i) ? i : "info", n = s === "warning" || s === "error";
2016
2042
  return o`<div class="callout callout-${s}" part="callout" role=${n ? "alert" : "note"} aria-live=${n ? "assertive" : "polite"}>
2017
2043
  ${r ? o`<div class="callout-title" part="callout-title">${r}</div>` : l}
2018
2044
  <div part="callout-message">${t}</div>
@@ -2024,17 +2050,17 @@ let M = class extends y {
2024
2050
  */
2025
2051
  parseMarkdown(e) {
2026
2052
  let t = this.escapeHtml(e);
2027
- return t = t.replace(/^#### (.+)$/gm, "<h4>$1</h4>"), t = t.replace(/^### (.+)$/gm, "<h3>$1</h3>"), t = t.replace(/^## (.+)$/gm, "<h2>$1</h2>"), t = t.replace(/^# (.+)$/gm, "<h1>$1</h1>"), t = t.replace(/^---$/gm, "<hr>"), t = t.replace(/```[\s\S]*?```/g, (a) => `<pre><code>${a.slice(3, -3).replace(/^\w*\n/, "")}</code></pre>`), t = t.replace(
2053
+ return t = t.replace(/^#### (.+)$/gm, "<h4>$1</h4>"), t = t.replace(/^### (.+)$/gm, "<h3>$1</h3>"), t = t.replace(/^## (.+)$/gm, "<h2>$1</h2>"), t = t.replace(/^# (.+)$/gm, "<h1>$1</h1>"), t = t.replace(/^---$/gm, "<hr>"), t = t.replace(/```[\s\S]*?```/g, (i) => `<pre><code>${i.slice(3, -3).replace(/^\w*\n/, "")}</code></pre>`), t = t.replace(
2028
2054
  /^(\|.+\|)\n(\|[\s:|-]+\|)\n((?:\|.+\|\n?)+)/gm,
2029
- (a, r, i, s) => {
2030
- const n = (u) => u.split("|").slice(1, -1).map((h) => h.trim()), d = n(r), c = n(i).map((u) => u.startsWith(":") && u.endsWith(":") ? "center" : u.endsWith(":") ? "right" : "left"), p = s.trim().split(`
2055
+ (i, r, a, s) => {
2056
+ const n = (u) => u.split("|").slice(1, -1).map((h) => h.trim()), d = n(r), c = n(a).map((u) => u.startsWith(":") && u.endsWith(":") ? "center" : u.endsWith(":") ? "right" : "left"), p = s.trim().split(`
2031
2057
  `).map(n), g = d.map((u, h) => `<th scope="col" style="text-align:${c[h] ?? "left"}">${u}</th>`).join(""), m = p.map((u) => "<tr>" + u.map((h, v) => `<td style="text-align:${c[v] ?? "left"}">${h}</td>`).join("") + "</tr>").join("");
2032
2058
  return `<table><thead><tr>${g}</tr></thead><tbody>${m}</tbody></table>`;
2033
2059
  }
2034
2060
  ), t = t.replace(/`([^`]+)`/g, "<code>$1</code>"), t = t.replace(/\*\*\*(.+?)\*\*\*/g, "<strong><em>$1</em></strong>"), t = t.replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>"), t = t.replace(/\*(.+?)\*/g, "<em>$1</em>"), t = t.replace(
2035
2061
  /\[([^\]]+)\]\(([^)]+)\)/g,
2036
- (a, r, i) => `<a href="${this.sanitizeUrl(i)}" target="_blank" rel="noopener">${r}</a>`
2037
- ), t = t.replace(/^&gt; (.+)$/gm, "<blockquote>$1</blockquote>"), t = t.replace(/^\d+\. (.+)$/gm, "<li data-ol>$1</li>"), t = t.replace(/(<li data-ol>.*<\/li>\n?)+/g, (a) => `<ol>${a.replace(/ data-ol/g, "")}</ol>`), t = t.replace(/^- (.+)$/gm, "<li>$1</li>"), t = t.replace(/(<li>.*<\/li>\n?)+/g, "<ul>$&</ul>"), t = t.replace(/\n\n+/g, "</p><p>"), !t.startsWith("<h") && !t.startsWith("<ul") && !t.startsWith("<ol") && !t.startsWith("<pre") && !t.startsWith("<blockquote") && !t.startsWith("<hr") && (t = `<p>${t}</p>`), t = t.replace(/<pre>[\s\S]*?<\/pre>/g, (a) => a.replace(/\n/g, "\0NL\0")), t = t.replace(/\n/g, "<br>"), t = t.replace(/\x00NL\x00/g, `
2062
+ (i, r, a) => `<a href="${this.sanitizeUrl(a)}" target="_blank" rel="noopener">${r}</a>`
2063
+ ), t = t.replace(/^&gt; (.+)$/gm, "<blockquote>$1</blockquote>"), t = t.replace(/^\d+\. (.+)$/gm, "<li data-ol>$1</li>"), t = t.replace(/(<li data-ol>.*<\/li>\n?)+/g, (i) => `<ol>${i.replace(/ data-ol/g, "")}</ol>`), t = t.replace(/^- (.+)$/gm, "<li>$1</li>"), t = t.replace(/(<li>.*<\/li>\n?)+/g, "<ul>$&</ul>"), t = t.replace(/\n\n+/g, "</p><p>"), !t.startsWith("<h") && !t.startsWith("<ul") && !t.startsWith("<ol") && !t.startsWith("<pre") && !t.startsWith("<blockquote") && !t.startsWith("<hr") && (t = `<p>${t}</p>`), t = t.replace(/<pre>[\s\S]*?<\/pre>/g, (i) => i.replace(/\n/g, "\0NL\0")), t = t.replace(/\n/g, "<br>"), t = t.replace(/\x00NL\x00/g, `
2038
2064
  `), t;
2039
2065
  }
2040
2066
  sanitizeUrl(e) {
@@ -2049,7 +2075,7 @@ M.styles = [b, w`
2049
2075
  :host {
2050
2076
  display: block;
2051
2077
  font-family: system-ui, -apple-system, sans-serif;
2052
- container: u-content / inline-size;
2078
+ container: uw-content / inline-size;
2053
2079
  }
2054
2080
 
2055
2081
  /* ── markdown ── */
@@ -2203,7 +2229,7 @@ M.styles = [b, w`
2203
2229
  margin-bottom: 4px;
2204
2230
  }
2205
2231
 
2206
- @container u-content (max-width: 20rem) {
2232
+ @container uw-content (max-width: 20rem) {
2207
2233
  .markdown {
2208
2234
  font-size: 0.8125rem;
2209
2235
  }
@@ -2229,12 +2255,12 @@ te([
2229
2255
  f({ type: String, reflect: !0 })
2230
2256
  ], M.prototype, "theme", 2);
2231
2257
  M = te([
2232
- x("u-content")
2258
+ x("uw-content")
2233
2259
  ], M);
2234
- var Je = Object.defineProperty, Ye = Object.getOwnPropertyDescriptor, re = (e, t, a, r) => {
2235
- for (var i = r > 1 ? void 0 : r ? Ye(t, a) : t, s = e.length - 1, n; s >= 0; s--)
2236
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
2237
- return r && i && Je(t, a, i), i;
2260
+ var Je = Object.defineProperty, Ye = Object.getOwnPropertyDescriptor, re = (e, t, i, r) => {
2261
+ for (var a = r > 1 ? void 0 : r ? Ye(t, i) : t, s = e.length - 1, n; s >= 0; s--)
2262
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
2263
+ return r && a && Je(t, i, a), a;
2238
2264
  };
2239
2265
  let T = class extends y {
2240
2266
  constructor() {
@@ -2244,11 +2270,11 @@ let T = class extends y {
2244
2270
  if (!this.spec) return l;
2245
2271
  const e = this._extractPairs();
2246
2272
  if (e.length === 0) return l;
2247
- const t = this.spec.options ?? {}, a = String(t.layout ?? "vertical"), r = Number(t.columns ?? 2), i = a === "grid" ? `grid-template-columns: repeat(${r}, 1fr)` : "";
2273
+ const t = this.spec.options ?? {}, i = String(t.layout ?? "vertical"), r = Number(t.columns ?? 2), a = i === "grid" ? `grid-template-columns: repeat(${r}, 1fr)` : "";
2248
2274
  return o`
2249
2275
  <div
2250
- class=${`kv-${a === "grid" ? "grid" : a === "horizontal" ? "horizontal" : "vertical"}`}
2251
- style=${i}
2276
+ class=${`kv-${i === "grid" ? "grid" : i === "horizontal" ? "horizontal" : "vertical"}`}
2277
+ style=${a}
2252
2278
  part="kv"
2253
2279
  role="list"
2254
2280
  aria-label=${this.spec.title ?? "Key-value pairs"}
@@ -2271,7 +2297,7 @@ T.styles = [b, w`
2271
2297
  :host {
2272
2298
  display: block;
2273
2299
  font-family: system-ui, -apple-system, sans-serif;
2274
- container: u-kv / inline-size;
2300
+ container: uw-kv / inline-size;
2275
2301
  }
2276
2302
 
2277
2303
  .kv-vertical {
@@ -2346,7 +2372,7 @@ T.styles = [b, w`
2346
2372
  text-align: left;
2347
2373
  }
2348
2374
 
2349
- @container u-kv (max-width: 20rem) {
2375
+ @container uw-kv (max-width: 20rem) {
2350
2376
  .kv-horizontal {
2351
2377
  flex-direction: column;
2352
2378
  gap: 8px;
@@ -2368,12 +2394,12 @@ re([
2368
2394
  f({ type: String, reflect: !0 })
2369
2395
  ], T.prototype, "theme", 2);
2370
2396
  T = re([
2371
- x("u-kv")
2397
+ x("uw-kv")
2372
2398
  ], T);
2373
- var Ze = Object.defineProperty, Qe = Object.getOwnPropertyDescriptor, G = (e, t, a, r) => {
2374
- for (var i = r > 1 ? void 0 : r ? Qe(t, a) : t, s = e.length - 1, n; s >= 0; s--)
2375
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
2376
- return r && i && Ze(t, a, i), i;
2399
+ var Ze = Object.defineProperty, Qe = Object.getOwnPropertyDescriptor, G = (e, t, i, r) => {
2400
+ for (var a = r > 1 ? void 0 : r ? Qe(t, i) : t, s = e.length - 1, n; s >= 0; s--)
2401
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
2402
+ return r && a && Ze(t, i, a), a;
2377
2403
  };
2378
2404
  const et = {
2379
2405
  javascript: ["//", ["/*", "*/"]],
@@ -2417,11 +2443,11 @@ const et = {
2417
2443
  psql: "sql",
2418
2444
  mysql: "sql"
2419
2445
  }, ge = /* @__PURE__ */ new Map();
2420
- function at(e) {
2446
+ function it(e) {
2421
2447
  let t = ge.get(e);
2422
2448
  if (!t) {
2423
- const a = tt[e] || "";
2424
- t = a ? new Set(a.split(" ")) : /* @__PURE__ */ new Set(), ge.set(e, t);
2449
+ const i = tt[e] || "";
2450
+ t = i ? new Set(i.split(" ")) : /* @__PURE__ */ new Set(), ge.set(e, t);
2425
2451
  }
2426
2452
  return t;
2427
2453
  }
@@ -2429,31 +2455,31 @@ function z(e) {
2429
2455
  return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
2430
2456
  }
2431
2457
  function j(e, t) {
2432
- const a = z(e);
2433
- return a.includes(`
2434
- `) ? a.split(`
2458
+ const i = z(e);
2459
+ return i.includes(`
2460
+ `) ? i.split(`
2435
2461
  `).map((r) => `<span class="hl-${t}">${r}</span>`).join(`
2436
- `) : `<span class="hl-${t}">${a}</span>`;
2462
+ `) : `<span class="hl-${t}">${i}</span>`;
2437
2463
  }
2438
- function ve(e, t, a) {
2464
+ function ve(e, t, i) {
2439
2465
  let r = t + 1;
2440
2466
  for (; r < e.length; ) {
2441
2467
  if (e[r] === "\\") {
2442
2468
  r += 2;
2443
2469
  continue;
2444
2470
  }
2445
- if (e[r] === a) return r + 1;
2446
- if (a !== "`" && e[r] === `
2471
+ if (e[r] === i) return r + 1;
2472
+ if (i !== "`" && e[r] === `
2447
2473
  `) return r;
2448
2474
  r++;
2449
2475
  }
2450
2476
  return e.length;
2451
2477
  }
2452
- function it(e, t) {
2478
+ function at(e, t) {
2453
2479
  if (!t) return z(e);
2454
- const a = rt[t] || t;
2455
- if (a === "json") return st(e);
2456
- const r = at(a), i = et[a], s = i?.[0], n = i?.[1], d = a === "javascript" || a === "typescript";
2480
+ const i = rt[t] || t;
2481
+ if (i === "json") return st(e);
2482
+ const r = it(i), a = et[i], s = a?.[0], n = a?.[1], d = i === "javascript" || i === "typescript";
2457
2483
  let c = "", p = 0;
2458
2484
  const g = e.length;
2459
2485
  for (; p < g; ) {
@@ -2487,14 +2513,14 @@ function it(e, t) {
2487
2513
  c += r.has(h) ? `<span class="hl-k">${z(h)}</span>` : z(h), p = u;
2488
2514
  continue;
2489
2515
  }
2490
- if (a === "html" && m === "<" && p + 1 < g && /[a-zA-Z/!]/.test(e[p + 1])) {
2516
+ if (i === "html" && m === "<" && p + 1 < g && /[a-zA-Z/!]/.test(e[p + 1])) {
2491
2517
  const u = e.indexOf(">", p);
2492
2518
  if (u !== -1) {
2493
2519
  c += `<span class="hl-k">${z(e.slice(p, u + 1))}</span>`, p = u + 1;
2494
2520
  continue;
2495
2521
  }
2496
2522
  }
2497
- if (a === "css" && /[a-z-]/.test(m)) {
2523
+ if (i === "css" && /[a-z-]/.test(m)) {
2498
2524
  let u = p + 1;
2499
2525
  for (; u < g && /[a-z-]/.test(e[u]); ) u++;
2500
2526
  const h = e.slice(p, u);
@@ -2506,28 +2532,28 @@ function it(e, t) {
2506
2532
  return c;
2507
2533
  }
2508
2534
  function st(e) {
2509
- let t = "", a = 0;
2535
+ let t = "", i = 0;
2510
2536
  const r = e.length;
2511
- for (; a < r; ) {
2512
- const i = e[a];
2513
- if (i === '"') {
2514
- const n = ve(e, a, '"'), d = e.slice(a, n), c = e.slice(n).trimStart();
2515
- t += j(d, c[0] === ":" ? "k" : "s"), a = n;
2537
+ for (; i < r; ) {
2538
+ const a = e[i];
2539
+ if (a === '"') {
2540
+ const n = ve(e, i, '"'), d = e.slice(i, n), c = e.slice(n).trimStart();
2541
+ t += j(d, c[0] === ":" ? "k" : "s"), i = n;
2516
2542
  continue;
2517
2543
  }
2518
- if (/[\d-]/.test(i) && (a === 0 || /[\s,:\[{]/.test(e[a - 1]))) {
2519
- let n = a + 1;
2544
+ if (/[\d-]/.test(a) && (i === 0 || /[\s,:\[{]/.test(e[i - 1]))) {
2545
+ let n = i + 1;
2520
2546
  for (; n < r && /[0-9.eE+\-]/.test(e[n]); ) n++;
2521
- t += j(e.slice(a, n), "n"), a = n;
2547
+ t += j(e.slice(i, n), "n"), i = n;
2522
2548
  continue;
2523
2549
  }
2524
2550
  let s = !1;
2525
2551
  for (const n of ["true", "false", "null"])
2526
- if (e.startsWith(n, a)) {
2527
- t += `<span class="hl-k">${n}</span>`, a += n.length, s = !0;
2552
+ if (e.startsWith(n, i)) {
2553
+ t += `<span class="hl-k">${n}</span>`, i += n.length, s = !0;
2528
2554
  break;
2529
2555
  }
2530
- s || (t += z(i), a++);
2556
+ s || (t += z(a), i++);
2531
2557
  }
2532
2558
  return t;
2533
2559
  }
@@ -2541,17 +2567,17 @@ let O = class extends y {
2541
2567
  if (!e) return l;
2542
2568
  const t = String(e.content ?? "");
2543
2569
  if (!t) return l;
2544
- const a = String(e.language ?? "").toLowerCase(), r = this.spec.options ?? {}, i = r.lineNumbers !== !1, s = !!(r.wrap ?? !1), n = r.maxHeight ? String(r.maxHeight) : void 0, d = new Set(
2570
+ const i = String(e.language ?? "").toLowerCase(), r = this.spec.options ?? {}, a = r.lineNumbers !== !1, s = !!(r.wrap ?? !1), n = r.maxHeight ? String(r.maxHeight) : void 0, d = new Set(
2545
2571
  Array.isArray(r.highlight) ? r.highlight : []
2546
- ), g = it(t, a).split(`
2572
+ ), g = at(t, i).split(`
2547
2573
  `).map((u, h) => {
2548
- const v = h + 1, $ = d.has(v) ? " line-hl" : "", k = i ? `<span class="line-no">${v}</span>` : "";
2574
+ const v = h + 1, $ = d.has(v) ? " line-hl" : "", k = a ? `<span class="line-no">${v}</span>` : "";
2549
2575
  return `<span class="line${$}">${k}${u || " "}</span>`;
2550
2576
  }).join(""), m = n ? `max-height: ${n}` : "";
2551
2577
  return o`
2552
2578
  <div class="code-block" part="code">
2553
2579
  <div class="code-header" part="code-header">
2554
- <span class="code-lang">${a || "code"}</span>
2580
+ <span class="code-lang">${i || "code"}</span>
2555
2581
  <button
2556
2582
  class="code-copy"
2557
2583
  part="code-copy"
@@ -2582,7 +2608,7 @@ O.styles = [b, w`
2582
2608
  :host {
2583
2609
  display: block;
2584
2610
  font-family: system-ui, -apple-system, sans-serif;
2585
- container: u-code / inline-size;
2611
+ container: uw-code / inline-size;
2586
2612
  }
2587
2613
 
2588
2614
  .code-block {
@@ -2675,7 +2701,7 @@ O.styles = [b, w`
2675
2701
  :host([theme="dark"]) .hl-c { color: #64748b; }
2676
2702
  :host([theme="dark"]) .hl-n { color: #fbbf24; }
2677
2703
 
2678
- @container u-code (max-width: 20rem) {
2704
+ @container uw-code (max-width: 20rem) {
2679
2705
  pre { font-size: 0.75rem; padding: 8px; }
2680
2706
  .code-header { padding: 4px 8px; }
2681
2707
  .line-no { width: 2.5ch; margin-right: 1ch; }
@@ -2691,12 +2717,12 @@ G([
2691
2717
  S()
2692
2718
  ], O.prototype, "_copied", 2);
2693
2719
  O = G([
2694
- x("u-code")
2720
+ x("uw-code")
2695
2721
  ], O);
2696
- var nt = Object.defineProperty, ot = Object.getOwnPropertyDescriptor, ae = (e, t, a, r) => {
2697
- for (var i = r > 1 ? void 0 : r ? ot(t, a) : t, s = e.length - 1, n; s >= 0; s--)
2698
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
2699
- return r && i && nt(t, a, i), i;
2722
+ var nt = Object.defineProperty, ot = Object.getOwnPropertyDescriptor, ie = (e, t, i, r) => {
2723
+ for (var a = r > 1 ? void 0 : r ? ot(t, i) : t, s = e.length - 1, n; s >= 0; s--)
2724
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
2725
+ return r && a && nt(t, i, a), a;
2700
2726
  };
2701
2727
  let U = class extends y {
2702
2728
  constructor() {
@@ -2706,15 +2732,15 @@ let U = class extends y {
2706
2732
  if (!this.spec) return l;
2707
2733
  const e = this._extractItems();
2708
2734
  if (e.length === 0) return l;
2709
- const t = this.spec.options ?? {}, a = !!(t.compact ?? !1), r = t.numbered !== !1;
2735
+ const t = this.spec.options ?? {}, i = !!(t.compact ?? !1), r = t.numbered !== !1;
2710
2736
  return o`
2711
- <div class="citations" part="citations" ?data-compact=${a} role="list" aria-label=${this.spec.title ?? "Citations"}>
2712
- ${e.map((i, s) => this._renderItem(i, s, r))}
2737
+ <div class="citations" part="citations" ?data-compact=${i} role="list" aria-label=${this.spec.title ?? "Citations"}>
2738
+ ${e.map((a, s) => this._renderItem(a, s, r))}
2713
2739
  </div>
2714
2740
  `;
2715
2741
  }
2716
- _renderItem(e, t, a) {
2717
- const r = !!e.url, i = e.url ? this._extractDomain(e.url) : void 0;
2742
+ _renderItem(e, t, i) {
2743
+ const r = !!e.url, a = e.url ? this._extractDomain(e.url) : void 0;
2718
2744
  return o`
2719
2745
  <div
2720
2746
  class="cite-item"
@@ -2723,10 +2749,10 @@ let U = class extends y {
2723
2749
  ?data-link=${r}
2724
2750
  @click=${r ? () => this._handleClick(e) : void 0}
2725
2751
  >
2726
- ${a ? o`<span class="cite-num" part="cite-num">${t + 1}</span>` : l}
2752
+ ${i ? o`<span class="cite-num" part="cite-num">${t + 1}</span>` : l}
2727
2753
  <div class="cite-body">
2728
2754
  <div class="cite-title" part="cite-title">${e.title}</div>
2729
- ${i ? o`<div class="cite-url" part="cite-url">${i}</div>` : l}
2755
+ ${a ? o`<div class="cite-url" part="cite-url">${a}</div>` : l}
2730
2756
  ${e.snippet ? o`<div class="cite-snippet" part="cite-snippet">${e.snippet}</div>` : l}
2731
2757
  ${e.source ? o`<div class="cite-source" part="cite-source">${e.source}</div>` : l}
2732
2758
  </div>
@@ -2755,8 +2781,8 @@ let U = class extends y {
2755
2781
  const t = new URL(e).hostname;
2756
2782
  if (t === "localhost" || /^\d+\.\d+\.\d+\.\d+$/.test(t))
2757
2783
  return t;
2758
- const r = t.replace(/^www\./, "").split("."), i = /* @__PURE__ */ new Set(["co", "com", "net", "org", "gov", "edu", "ac"]);
2759
- return r.length >= 3 && i.has(r[r.length - 2]) ? r.slice(-3).join(".") : r.slice(-2).join(".");
2784
+ const r = t.replace(/^www\./, "").split("."), a = /* @__PURE__ */ new Set(["co", "com", "net", "org", "gov", "edu", "ac"]);
2785
+ return r.length >= 3 && a.has(r[r.length - 2]) ? r.slice(-3).join(".") : r.slice(-2).join(".");
2760
2786
  } catch {
2761
2787
  return e;
2762
2788
  }
@@ -2789,7 +2815,7 @@ U.styles = [b, w`
2789
2815
  :host {
2790
2816
  display: block;
2791
2817
  font-family: system-ui, -apple-system, sans-serif;
2792
- container: u-citation / inline-size;
2818
+ container: uw-citation / inline-size;
2793
2819
  }
2794
2820
 
2795
2821
  .citations {
@@ -2877,24 +2903,24 @@ U.styles = [b, w`
2877
2903
  .citations[data-compact] .cite-snippet,
2878
2904
  .citations[data-compact] .cite-source { display: none; }
2879
2905
 
2880
- @container u-citation (max-width: 20rem) {
2906
+ @container uw-citation (max-width: 20rem) {
2881
2907
  .cite-title { font-size: 0.8125rem; }
2882
2908
  .cite-snippet { font-size: 0.75rem; }
2883
2909
  }
2884
2910
  `];
2885
- ae([
2911
+ ie([
2886
2912
  f({ type: Object })
2887
2913
  ], U.prototype, "spec", 2);
2888
- ae([
2914
+ ie([
2889
2915
  f({ type: String, reflect: !0 })
2890
2916
  ], U.prototype, "theme", 2);
2891
- U = ae([
2892
- x("u-citation")
2917
+ U = ie([
2918
+ x("uw-citation")
2893
2919
  ], U);
2894
- var lt = Object.defineProperty, ct = Object.getOwnPropertyDescriptor, ie = (e, t, a, r) => {
2895
- for (var i = r > 1 ? void 0 : r ? ct(t, a) : t, s = e.length - 1, n; s >= 0; s--)
2896
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
2897
- return r && i && lt(t, a, i), i;
2920
+ var lt = Object.defineProperty, ct = Object.getOwnPropertyDescriptor, ae = (e, t, i, r) => {
2921
+ for (var a = r > 1 ? void 0 : r ? ct(t, i) : t, s = e.length - 1, n; s >= 0; s--)
2922
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
2923
+ return r && a && lt(t, i, a), a;
2898
2924
  };
2899
2925
  const dt = /* @__PURE__ */ new Set(["info", "success", "warning", "error", "neutral"]), pt = {
2900
2926
  info: "●",
@@ -2957,7 +2983,7 @@ R.styles = [b, w`
2957
2983
  :host {
2958
2984
  display: block;
2959
2985
  font-family: system-ui, -apple-system, sans-serif;
2960
- container: u-status / inline-size;
2986
+ container: uw-status / inline-size;
2961
2987
  }
2962
2988
 
2963
2989
  .status-list {
@@ -3013,24 +3039,24 @@ R.styles = [b, w`
3013
3039
  color: var(--u-widget-text-secondary, #64748b);
3014
3040
  }
3015
3041
 
3016
- @container u-status (max-width: 20rem) {
3042
+ @container uw-status (max-width: 20rem) {
3017
3043
  .status-list { gap: 8px 16px; }
3018
3044
  .status-item { font-size: 0.8125rem; }
3019
3045
  }
3020
3046
  `];
3021
- ie([
3047
+ ae([
3022
3048
  f({ type: Object })
3023
3049
  ], R.prototype, "spec", 2);
3024
- ie([
3050
+ ae([
3025
3051
  f({ type: String, reflect: !0 })
3026
3052
  ], R.prototype, "theme", 2);
3027
- R = ie([
3028
- x("u-status")
3053
+ R = ae([
3054
+ x("uw-status")
3029
3055
  ], R);
3030
- var ut = Object.defineProperty, gt = Object.getOwnPropertyDescriptor, se = (e, t, a, r) => {
3031
- for (var i = r > 1 ? void 0 : r ? gt(t, a) : t, s = e.length - 1, n; s >= 0; s--)
3032
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
3033
- return r && i && ut(t, a, i), i;
3056
+ var ut = Object.defineProperty, gt = Object.getOwnPropertyDescriptor, se = (e, t, i, r) => {
3057
+ for (var a = r > 1 ? void 0 : r ? gt(t, i) : t, s = e.length - 1, n; s >= 0; s--)
3058
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
3059
+ return r && a && ut(t, i, a), a;
3034
3060
  };
3035
3061
  const ft = /* @__PURE__ */ new Set(["done", "active", "pending", "error"]);
3036
3062
  function fe(e, t) {
@@ -3054,22 +3080,22 @@ let q = class extends y {
3054
3080
  if (!this.spec) return l;
3055
3081
  const e = this._extractItems();
3056
3082
  if (e.length === 0) return l;
3057
- const t = this.spec.options ?? {}, a = String(t.layout ?? "vertical"), r = !!(t.compact ?? !1);
3058
- return a === "horizontal" ? this._renderHorizontal(e, r) : this._renderVertical(e, r);
3083
+ const t = this.spec.options ?? {}, i = String(t.layout ?? "vertical"), r = !!(t.compact ?? !1);
3084
+ return i === "horizontal" ? this._renderHorizontal(e, r) : this._renderVertical(e, r);
3059
3085
  }
3060
3086
  _renderVertical(e, t) {
3061
3087
  return o`
3062
3088
  <div class="steps-vertical" part="steps" ?data-compact=${t}
3063
3089
  role="list" aria-label=${this.spec?.title ?? "Steps"}>
3064
- ${e.map((a) => o`
3065
- <div class="step-v" part="step" role="listitem" data-status=${a.status}>
3090
+ ${e.map((i) => o`
3091
+ <div class="step-v" part="step" role="listitem" data-status=${i.status}>
3066
3092
  <div class="step-track">
3067
- <span class="step-icon" part="step-icon" aria-hidden="true">${fe(a.status, a.icon)}</span>
3093
+ <span class="step-icon" part="step-icon" aria-hidden="true">${fe(i.status, i.icon)}</span>
3068
3094
  <div class="step-line"></div>
3069
3095
  </div>
3070
3096
  <div class="step-body">
3071
- <div class="step-label" part="step-label">${a.label}</div>
3072
- ${a.description ? o`<div class="step-desc" part="step-desc">${a.description}</div>` : l}
3097
+ <div class="step-label" part="step-label">${i.label}</div>
3098
+ ${i.description ? o`<div class="step-desc" part="step-desc">${i.description}</div>` : l}
3073
3099
  </div>
3074
3100
  </div>
3075
3101
  `)}
@@ -3080,16 +3106,16 @@ let q = class extends y {
3080
3106
  return o`
3081
3107
  <div class="steps-horizontal" part="steps" ?data-compact=${t}
3082
3108
  role="list" aria-label=${this.spec?.title ?? "Steps"}>
3083
- ${e.map((a, r) => {
3084
- const i = r > 0 && e[r - 1].status === "done", s = a.status === "done";
3109
+ ${e.map((i, r) => {
3110
+ const a = r > 0 && e[r - 1].status === "done", s = i.status === "done";
3085
3111
  return o`
3086
- <div class="step-h" part="step" role="listitem" data-status=${a.status}>
3112
+ <div class="step-h" part="step" role="listitem" data-status=${i.status}>
3087
3113
  <div class="step-h-top">
3088
- <div class="step-h-line" ?data-done=${i}></div>
3089
- <span class="step-icon" part="step-icon" aria-hidden="true">${fe(a.status, a.icon)}</span>
3114
+ <div class="step-h-line" ?data-done=${a}></div>
3115
+ <span class="step-icon" part="step-icon" aria-hidden="true">${fe(i.status, i.icon)}</span>
3090
3116
  <div class="step-h-line" ?data-done=${s}></div>
3091
3117
  </div>
3092
- <div class="step-label" part="step-label">${a.label}</div>
3118
+ <div class="step-label" part="step-label">${i.label}</div>
3093
3119
  </div>
3094
3120
  `;
3095
3121
  })}
@@ -3116,7 +3142,7 @@ q.styles = [b, w`
3116
3142
  :host {
3117
3143
  display: block;
3118
3144
  font-family: system-ui, -apple-system, sans-serif;
3119
- container: u-steps / inline-size;
3145
+ container: uw-steps / inline-size;
3120
3146
  }
3121
3147
 
3122
3148
  /* ── Vertical Layout ── */
@@ -3300,7 +3326,7 @@ q.styles = [b, w`
3300
3326
  .steps-horizontal[data-compact] .step-icon { width: 20px; height: 20px; font-size: 0.625rem; }
3301
3327
  .steps-horizontal[data-compact] .step-label { font-size: 0.6875rem; margin-top: 4px; }
3302
3328
 
3303
- @container u-steps (max-width: 20rem) {
3329
+ @container uw-steps (max-width: 20rem) {
3304
3330
  .step-label { font-size: 0.8125rem; }
3305
3331
  .step-desc { font-size: 0.75rem; }
3306
3332
 
@@ -3351,12 +3377,12 @@ se([
3351
3377
  f({ type: String, reflect: !0 })
3352
3378
  ], q.prototype, "theme", 2);
3353
3379
  q = se([
3354
- x("u-steps")
3380
+ x("uw-steps")
3355
3381
  ], q);
3356
- var ht = Object.defineProperty, mt = Object.getOwnPropertyDescriptor, X = (e, t, a, r) => {
3357
- for (var i = r > 1 ? void 0 : r ? mt(t, a) : t, s = e.length - 1, n; s >= 0; s--)
3358
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
3359
- return r && i && ht(t, a, i), i;
3382
+ var ht = Object.defineProperty, mt = Object.getOwnPropertyDescriptor, X = (e, t, i, r) => {
3383
+ for (var a = r > 1 ? void 0 : r ? mt(t, i) : t, s = e.length - 1, n; s >= 0; s--)
3384
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
3385
+ return r && a && ht(t, i, a), a;
3360
3386
  };
3361
3387
  const vt = {
3362
3388
  star: ["☆", "★", "★"],
@@ -3372,55 +3398,55 @@ let E = class extends y {
3372
3398
  }
3373
3399
  render() {
3374
3400
  if (!this.spec) return l;
3375
- const e = this.spec.data ?? {}, t = this.spec.options ?? {}, a = typeof e.value == "number" ? e.value : 0, r = typeof t.max == "number" ? t.max : typeof e.max == "number" ? e.max : 5, i = !!(t.interactive ?? !1), s = this._resolveIcon(t.icon), n = typeof t.label == "string" ? t.label : void 0, d = typeof e.count == "number" ? e.count : void 0, c = vt[s], p = this._hoverIdx >= 0 ? this._hoverIdx + 1 : a;
3401
+ const e = this.spec.data ?? {}, t = this.spec.options ?? {}, i = typeof e.value == "number" ? e.value : 0, r = typeof t.max == "number" ? t.max : typeof e.max == "number" ? e.max : 5, a = !!(t.interactive ?? !1), s = this._resolveIcon(t.icon), n = typeof t.label == "string" ? t.label : void 0, d = typeof e.count == "number" ? e.count : void 0, c = vt[s], p = this._hoverIdx >= 0 ? this._hoverIdx + 1 : i;
3376
3402
  return o`
3377
- <div class="rating" part="rating" role=${i ? "radiogroup" : "img"}
3378
- aria-label=${this.spec.title ?? n ?? `Rating: ${a} out of ${r}`}>
3403
+ <div class="rating" part="rating" role=${a ? "radiogroup" : "img"}
3404
+ aria-label=${this.spec.title ?? n ?? `Rating: ${i} out of ${r}`}>
3379
3405
  ${n ? o`<span class="rating-label" part="rating-label">${n}</span>` : l}
3380
3406
  <div class="rating-icons" part="rating-icons"
3381
- @mouseleave=${i ? () => {
3407
+ @mouseleave=${a ? () => {
3382
3408
  this._hoverIdx = -1;
3383
3409
  } : void 0}>
3384
- ${Array.from({ length: r }, (g, m) => this._renderIcon(m, p, c, s, i))}
3410
+ ${Array.from({ length: r }, (g, m) => this._renderIcon(m, p, c, s, a))}
3385
3411
  </div>
3386
- ${!i && a > 0 ? o`<span class="rating-value" part="rating-value">${a}</span>` : l}
3412
+ ${!a && i > 0 ? o`<span class="rating-value" part="rating-value">${i}</span>` : l}
3387
3413
  ${d != null ? o`<span class="rating-count" part="rating-count">(${d})</span>` : l}
3388
3414
  </div>
3389
3415
  `;
3390
3416
  }
3391
- _renderIcon(e, t, a, r, i) {
3392
- const s = e + 1, n = i && this._hoverIdx >= 0 && s <= this._hoverIdx + 1;
3417
+ _renderIcon(e, t, i, r, a) {
3418
+ const s = e + 1, n = a && this._hoverIdx >= 0 && s <= this._hoverIdx + 1;
3393
3419
  let d;
3394
3420
  n || s <= Math.floor(t) ? d = "full" : s === Math.ceil(t) && t % 1 >= 0.25 && t % 1 < 0.75 ? d = r === "thumb" ? t % 1 >= 0.5 ? "full" : "empty" : "half" : d = "empty";
3395
- const c = d === "half" ? a[0] : d === "full" ? a[2] : a[0];
3421
+ const c = d === "half" ? i[0] : d === "full" ? i[2] : i[0];
3396
3422
  return d === "half" ? o`
3397
3423
  <span class="rating-icon rating-icon-half"
3398
3424
  data-state="half" data-icon=${r}
3399
- ?data-interactive=${i}
3425
+ ?data-interactive=${a}
3400
3426
  ?data-preview=${n}
3401
- role=${i ? "radio" : "presentation"}
3402
- aria-label=${i ? `${s}` : l}
3403
- @mouseenter=${i ? () => {
3427
+ role=${a ? "radio" : "presentation"}
3428
+ aria-label=${a ? `${s}` : l}
3429
+ @mouseenter=${a ? () => {
3404
3430
  this._hoverIdx = e;
3405
3431
  } : void 0}
3406
- @click=${i ? () => this._select(s) : void 0}>
3407
- <span aria-hidden="true">${a[0]}</span>
3432
+ @click=${a ? () => this._select(s) : void 0}>
3433
+ <span aria-hidden="true">${i[0]}</span>
3408
3434
  <span class="half-overlay" aria-hidden="true">
3409
- <span style="color: inherit">${a[2]}</span>
3435
+ <span style="color: inherit">${i[2]}</span>
3410
3436
  </span>
3411
3437
  </span>
3412
3438
  ` : o`
3413
3439
  <span class="rating-icon"
3414
3440
  data-state=${d} data-icon=${r}
3415
- ?data-interactive=${i}
3441
+ ?data-interactive=${a}
3416
3442
  ?data-preview=${n}
3417
- role=${i ? "radio" : "presentation"}
3418
- aria-label=${i ? `${s}` : l}
3419
- aria-checked=${i ? String(d === "full" && !n) : l}
3420
- @mouseenter=${i ? () => {
3443
+ role=${a ? "radio" : "presentation"}
3444
+ aria-label=${a ? `${s}` : l}
3445
+ aria-checked=${a ? String(d === "full" && !n) : l}
3446
+ @mouseenter=${a ? () => {
3421
3447
  this._hoverIdx = e;
3422
3448
  } : void 0}
3423
- @click=${i ? () => this._select(s) : void 0}>
3449
+ @click=${a ? () => this._select(s) : void 0}>
3424
3450
  <span aria-hidden="true">${c}</span>
3425
3451
  </span>
3426
3452
  `;
@@ -3448,7 +3474,7 @@ E.styles = [b, w`
3448
3474
  :host {
3449
3475
  display: block;
3450
3476
  font-family: system-ui, -apple-system, sans-serif;
3451
- container: u-rating / inline-size;
3477
+ container: uw-rating / inline-size;
3452
3478
  }
3453
3479
 
3454
3480
  .rating {
@@ -3545,7 +3571,7 @@ E.styles = [b, w`
3545
3571
  color: var(--u-widget-primary, #4f46e5);
3546
3572
  }
3547
3573
 
3548
- @container u-rating (max-width: 20rem) {
3574
+ @container uw-rating (max-width: 20rem) {
3549
3575
  .rating-icon { font-size: 1rem; }
3550
3576
  .rating-value { font-size: 0.8125rem; }
3551
3577
  }
@@ -3560,12 +3586,12 @@ X([
3560
3586
  S()
3561
3587
  ], E.prototype, "_hoverIdx", 2);
3562
3588
  E = X([
3563
- x("u-rating")
3589
+ x("uw-rating")
3564
3590
  ], E);
3565
- var bt = Object.defineProperty, wt = Object.getOwnPropertyDescriptor, ne = (e, t, a, r) => {
3566
- for (var i = r > 1 ? void 0 : r ? wt(t, a) : t, s = e.length - 1, n; s >= 0; s--)
3567
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
3568
- return r && i && bt(t, a, i), i;
3591
+ var bt = Object.defineProperty, wt = Object.getOwnPropertyDescriptor, ne = (e, t, i, r) => {
3592
+ for (var a = r > 1 ? void 0 : r ? wt(t, i) : t, s = e.length - 1, n; s >= 0; s--)
3593
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
3594
+ return r && a && bt(t, i, a), a;
3569
3595
  };
3570
3596
  let B = class extends y {
3571
3597
  constructor() {
@@ -3575,15 +3601,15 @@ let B = class extends y {
3575
3601
  if (!this.spec) return l;
3576
3602
  const e = this.spec.data;
3577
3603
  if (!e) return l;
3578
- const t = String(e.src ?? ""), a = this._sanitizeUrl(t);
3579
- if (!a) return l;
3580
- const r = e.poster ? this._sanitizeUrl(String(e.poster)) : void 0, i = String(e.alt ?? ""), s = e.caption, n = this.spec.options ?? {}, d = n.controls !== !1, c = n.autoplay === !0, p = n.loop === !0, g = n.muted === !0 || c;
3604
+ const t = String(e.src ?? ""), i = this._sanitizeUrl(t);
3605
+ if (!i) return l;
3606
+ const r = e.poster ? this._sanitizeUrl(String(e.poster)) : void 0, a = String(e.alt ?? ""), s = e.caption, n = this.spec.options ?? {}, d = n.controls !== !1, c = n.autoplay === !0, p = n.loop === !0, g = n.muted === !0 || c;
3581
3607
  return o`
3582
3608
  <div class="video-container" part="video">
3583
3609
  <video
3584
- src=${a}
3610
+ src=${i}
3585
3611
  poster=${r ?? l}
3586
- aria-label=${i || l}
3612
+ aria-label=${a || l}
3587
3613
  ?controls=${d}
3588
3614
  ?autoplay=${c}
3589
3615
  ?loop=${p}
@@ -3605,7 +3631,7 @@ B.styles = [b, w`
3605
3631
  :host {
3606
3632
  display: block;
3607
3633
  font-family: system-ui, -apple-system, sans-serif;
3608
- container: u-video / inline-size;
3634
+ container: uw-video / inline-size;
3609
3635
  }
3610
3636
 
3611
3637
  .video-container {
@@ -3624,7 +3650,7 @@ B.styles = [b, w`
3624
3650
  color: var(--u-widget-text-secondary, #64748b);
3625
3651
  }
3626
3652
 
3627
- @container u-video (max-width: 20rem) {
3653
+ @container uw-video (max-width: 20rem) {
3628
3654
  video {
3629
3655
  border-radius: 4px;
3630
3656
  }
@@ -3642,12 +3668,12 @@ ne([
3642
3668
  f({ type: String, reflect: !0 })
3643
3669
  ], B.prototype, "theme", 2);
3644
3670
  B = ne([
3645
- x("u-video")
3671
+ x("uw-video")
3646
3672
  ], B);
3647
- var yt = Object.defineProperty, xt = Object.getOwnPropertyDescriptor, oe = (e, t, a, r) => {
3648
- for (var i = r > 1 ? void 0 : r ? xt(t, a) : t, s = e.length - 1, n; s >= 0; s--)
3649
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
3650
- return r && i && yt(t, a, i), i;
3673
+ var yt = Object.defineProperty, xt = Object.getOwnPropertyDescriptor, oe = (e, t, i, r) => {
3674
+ for (var a = r > 1 ? void 0 : r ? xt(t, i) : t, s = e.length - 1, n; s >= 0; s--)
3675
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
3676
+ return r && a && yt(t, i, a), a;
3651
3677
  };
3652
3678
  let W = class extends y {
3653
3679
  constructor() {
@@ -3663,7 +3689,7 @@ let W = class extends y {
3663
3689
  caption: c.caption ? String(c.caption) : void 0
3664
3690
  })).filter((c) => c.src);
3665
3691
  if (t.length === 0) return l;
3666
- const a = this.spec.options ?? {}, r = Number(a.columns) || 0, i = String(a.aspectRatio ?? "auto"), s = r > 0 ? `repeat(${r}, 1fr)` : "repeat(auto-fill, minmax(150px, 1fr))", n = i !== "auto" ? `aspect-ratio: ${i.replace(":", "/")};` : "", d = this.spec.title;
3692
+ const i = this.spec.options ?? {}, r = Number(i.columns) || 0, a = String(i.aspectRatio ?? "auto"), s = r > 0 ? `repeat(${r}, 1fr)` : "repeat(auto-fill, minmax(150px, 1fr))", n = a !== "auto" ? `aspect-ratio: ${a.replace(":", "/")};` : "", d = this.spec.title;
3667
3693
  return o`
3668
3694
  <div class="gallery-grid" part="gallery" role="list"
3669
3695
  aria-label=${d ?? "Gallery"}
@@ -3694,7 +3720,7 @@ W.styles = [b, w`
3694
3720
  :host {
3695
3721
  display: block;
3696
3722
  font-family: system-ui, -apple-system, sans-serif;
3697
- container: u-gallery / inline-size;
3723
+ container: uw-gallery / inline-size;
3698
3724
  }
3699
3725
 
3700
3726
  .gallery-grid {
@@ -3722,7 +3748,7 @@ W.styles = [b, w`
3722
3748
  background: var(--u-widget-surface, #f1f5f9);
3723
3749
  }
3724
3750
 
3725
- @container u-gallery (max-width: 20rem) {
3751
+ @container uw-gallery (max-width: 20rem) {
3726
3752
  .gallery-grid {
3727
3753
  grid-template-columns: 1fr !important;
3728
3754
  }
@@ -3735,12 +3761,12 @@ oe([
3735
3761
  f({ type: String, reflect: !0 })
3736
3762
  ], W.prototype, "theme", 2);
3737
3763
  W = oe([
3738
- x("u-gallery")
3764
+ x("uw-gallery")
3739
3765
  ], W);
3740
- var $t = Object.defineProperty, _t = Object.getOwnPropertyDescriptor, J = (e, t, a, r) => {
3741
- for (var i = r > 1 ? void 0 : r ? _t(t, a) : t, s = e.length - 1, n; s >= 0; s--)
3742
- (n = e[s]) && (i = (r ? n(t, a, i) : n(i)) || i);
3743
- return r && i && $t(t, a, i), i;
3766
+ var $t = Object.defineProperty, _t = Object.getOwnPropertyDescriptor, J = (e, t, i, r) => {
3767
+ for (var a = r > 1 ? void 0 : r ? _t(t, i) : t, s = e.length - 1, n; s >= 0; s--)
3768
+ (n = e[s]) && (a = (r ? n(t, i, a) : n(a)) || a);
3769
+ return r && a && $t(t, i, a), a;
3744
3770
  };
3745
3771
  let P = class extends y {
3746
3772
  constructor() {
@@ -3770,63 +3796,63 @@ let P = class extends y {
3770
3796
  return this.renderWidget(t);
3771
3797
  }
3772
3798
  renderWidget(e) {
3773
- const t = e.widget, a = e.mapping ?? we(t, e.data);
3774
- let r = a ? { ...e, mapping: a } : e;
3775
- const i = Ie(this.locale);
3776
- i && !r.options?.locale && (r = {
3799
+ const t = e.widget, i = e.mapping ?? we(t, e.data);
3800
+ let r = i ? { ...e, mapping: i } : e;
3801
+ const a = Ie(this.locale);
3802
+ a && !r.options?.locale && (r = {
3777
3803
  ...r,
3778
- options: { ...r.options, locale: i }
3804
+ options: { ...r.options, locale: a }
3779
3805
  });
3780
3806
  const s = this.theme, d = t === "form" || t === "confirm" || t === "actions" ? [] : r.actions ?? [];
3781
3807
  let c;
3782
3808
  switch (t) {
3783
3809
  case "metric":
3784
3810
  case "stat-group":
3785
- c = o`<u-metric .spec=${r} theme=${s ?? l}></u-metric>`;
3811
+ c = o`<uw-metric .spec=${r} theme=${s ?? l}></uw-metric>`;
3786
3812
  break;
3787
3813
  case "gauge":
3788
3814
  case "progress":
3789
- c = o`<u-gauge .spec=${r} theme=${s ?? l}></u-gauge>`;
3815
+ c = o`<uw-gauge .spec=${r} theme=${s ?? l}></uw-gauge>`;
3790
3816
  break;
3791
3817
  case "table":
3792
3818
  case "list":
3793
- c = o`<u-table .spec=${r} theme=${s ?? l}></u-table>`;
3819
+ c = o`<uw-table .spec=${r} theme=${s ?? l}></uw-table>`;
3794
3820
  break;
3795
3821
  case "form":
3796
3822
  case "confirm":
3797
- c = o`<u-form .spec=${r} theme=${s ?? l}></u-form>`;
3823
+ c = o`<uw-form .spec=${r} theme=${s ?? l}></uw-form>`;
3798
3824
  break;
3799
3825
  case "compose":
3800
- c = o`<u-compose .spec=${r} theme=${s ?? l}></u-compose>`;
3826
+ c = o`<uw-compose .spec=${r} theme=${s ?? l}></uw-compose>`;
3801
3827
  break;
3802
3828
  case "markdown":
3803
3829
  case "image":
3804
3830
  case "callout":
3805
- c = o`<u-content .spec=${r} theme=${s ?? l}></u-content>`;
3831
+ c = o`<uw-content .spec=${r} theme=${s ?? l}></uw-content>`;
3806
3832
  break;
3807
3833
  case "kv":
3808
- c = o`<u-kv .spec=${r} theme=${s ?? l}></u-kv>`;
3834
+ c = o`<uw-kv .spec=${r} theme=${s ?? l}></uw-kv>`;
3809
3835
  break;
3810
3836
  case "code":
3811
- c = o`<u-code .spec=${r} theme=${s ?? l}></u-code>`;
3837
+ c = o`<uw-code .spec=${r} theme=${s ?? l}></uw-code>`;
3812
3838
  break;
3813
3839
  case "citation":
3814
- c = o`<u-citation .spec=${r} theme=${s ?? l}></u-citation>`;
3840
+ c = o`<uw-citation .spec=${r} theme=${s ?? l}></uw-citation>`;
3815
3841
  break;
3816
3842
  case "status":
3817
- c = o`<u-status .spec=${r} theme=${s ?? l}></u-status>`;
3843
+ c = o`<uw-status .spec=${r} theme=${s ?? l}></uw-status>`;
3818
3844
  break;
3819
3845
  case "steps":
3820
- c = o`<u-steps .spec=${r} theme=${s ?? l}></u-steps>`;
3846
+ c = o`<uw-steps .spec=${r} theme=${s ?? l}></uw-steps>`;
3821
3847
  break;
3822
3848
  case "rating":
3823
- c = o`<u-rating .spec=${r} theme=${s ?? l}></u-rating>`;
3849
+ c = o`<uw-rating .spec=${r} theme=${s ?? l}></uw-rating>`;
3824
3850
  break;
3825
3851
  case "video":
3826
- c = o`<u-video .spec=${r} theme=${s ?? l}></u-video>`;
3852
+ c = o`<uw-video .spec=${r} theme=${s ?? l}></uw-video>`;
3827
3853
  break;
3828
3854
  case "gallery":
3829
- c = o`<u-gallery .spec=${r} theme=${s ?? l}></u-gallery>`;
3855
+ c = o`<uw-gallery .spec=${r} theme=${s ?? l}></uw-gallery>`;
3830
3856
  break;
3831
3857
  case "actions":
3832
3858
  c = this.renderActionsWidget(r);
@@ -3838,8 +3864,8 @@ let P = class extends y {
3838
3864
  c = this.renderHeader(r);
3839
3865
  break;
3840
3866
  default:
3841
- if (t.startsWith("chart.") && customElements.get("u-chart")) {
3842
- c = o`<u-chart .spec=${r} theme=${s ?? l}></u-chart>`;
3867
+ if (t.startsWith("chart.") && customElements.get("uw-chart")) {
3868
+ c = o`<uw-chart .spec=${r} theme=${s ?? l}></uw-chart>`;
3843
3869
  break;
3844
3870
  }
3845
3871
  return this.renderFallback(r);
@@ -3862,35 +3888,35 @@ let P = class extends y {
3862
3888
  renderActionsWidget(e) {
3863
3889
  const t = e.actions ?? [];
3864
3890
  if (t.length === 0) return l;
3865
- const a = e.options ?? {}, r = String(a.layout ?? "wrap");
3891
+ const i = e.options ?? {}, r = String(i.layout ?? "wrap");
3866
3892
  return o`
3867
3893
  <div class="actions-widget" data-layout=${r} part="actions" role="group" aria-label=${e.title ?? "Actions"}>
3868
- ${t.map((i) => o`
3894
+ ${t.map((a) => o`
3869
3895
  <button
3870
- data-style=${i.style ?? "default"}
3871
- ?disabled=${i.disabled}
3872
- @click=${() => this._dispatchAction(e, i)}
3896
+ data-style=${a.style ?? "default"}
3897
+ ?disabled=${a.disabled}
3898
+ @click=${() => this._dispatchAction(e, a)}
3873
3899
  part="action-btn"
3874
- >${i.label}</button>
3900
+ >${a.label}</button>
3875
3901
  `)}
3876
3902
  </div>
3877
3903
  `;
3878
3904
  }
3879
3905
  /** Render inline divider widget. */
3880
3906
  renderDivider(e) {
3881
- const t = e.options ?? {}, a = t.label, r = String(t.spacing ?? "default");
3907
+ const t = e.options ?? {}, i = t.label, r = String(t.spacing ?? "default");
3882
3908
  return o`
3883
3909
  <div class="divider divider-spacing-${r}" part="divider" role="separator">
3884
- ${a ?? l}
3910
+ ${i ?? l}
3885
3911
  </div>
3886
3912
  `;
3887
3913
  }
3888
3914
  /** Render inline header widget. */
3889
3915
  renderHeader(e) {
3890
- const t = e.data, a = String(t?.text ?? e.title ?? ""), r = String(t?.level ?? "2");
3891
- return a ? o`
3916
+ const t = e.data, i = String(t?.text ?? e.title ?? ""), r = String(t?.level ?? "2");
3917
+ return i ? o`
3892
3918
  <div class="header-widget" data-level=${r} part="header" role="heading" aria-level=${r}>
3893
- ${a}
3919
+ ${i}
3894
3920
  </div>
3895
3921
  ` : l;
3896
3922
  }