@studiolxd/brand 38.17.0 → 40.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/CHANGELOG.md +141 -0
  2. package/dist/_shared/brandmessagescontext.js +15 -0
  3. package/dist/_shared/calendargrid.js +42 -42
  4. package/dist/_shared/datepicker.js +41 -41
  5. package/dist/_shared/imagecropdialog.js +54 -54
  6. package/dist/_shared/tokens.js +4 -0
  7. package/dist/_types/atoms/StarRating/StarRating.d.ts +87 -30
  8. package/dist/_types/messages/BrandMessages.d.ts +26 -0
  9. package/dist/_types/messages/BrandMessagesContext.d.ts +21 -0
  10. package/dist/_types/messages/BrandMessagesProvider.d.ts +46 -0
  11. package/dist/_types/messages/index.d.ts +5 -0
  12. package/dist/_types/molecules/Card/Card.d.ts +12 -1
  13. package/dist/_types/molecules/ConfirmDialog/ConfirmDialog.d.ts +42 -2
  14. package/dist/_types/molecules/Pagination/Pagination.d.ts +40 -23
  15. package/dist/_types/organisms/DataTable/DataTable.d.ts +3 -2
  16. package/dist/accordion.js +26 -26
  17. package/dist/alert.js +26 -26
  18. package/dist/annotation-thread.js +1 -1
  19. package/dist/app-header.js +8 -8
  20. package/dist/app-launcher.js +34 -34
  21. package/dist/app-shell.js +14 -14
  22. package/dist/assistant-message.js +8 -8
  23. package/dist/async-multi-select-field.js +9 -9
  24. package/dist/async-multi-select.js +40 -40
  25. package/dist/async-select-field.js +9 -9
  26. package/dist/async-select.js +64 -64
  27. package/dist/avatar-upload.js +40 -40
  28. package/dist/avatar.js +5 -5
  29. package/dist/banner.js +9 -9
  30. package/dist/brand.css +11 -2
  31. package/dist/button.js +7 -7
  32. package/dist/calendar-planner.js +16 -16
  33. package/dist/calendar.js +38 -38
  34. package/dist/card.js +28 -29
  35. package/dist/carousel.js +19 -19
  36. package/dist/chart.js +137 -137
  37. package/dist/chat-shell.js +23 -23
  38. package/dist/checkbox-field.js +11 -11
  39. package/dist/checkbox.js +7 -7
  40. package/dist/close-button.js +6 -6
  41. package/dist/code-block.js +15 -15
  42. package/dist/code.js +5 -5
  43. package/dist/collapsible.js +1 -1
  44. package/dist/columns.js +7 -7
  45. package/dist/command-palette.js +14 -14
  46. package/dist/confirm-dialog.css +1 -1
  47. package/dist/confirm-dialog.js +65 -42
  48. package/dist/connector-auth-shell.js +9 -9
  49. package/dist/consent.js +23 -23
  50. package/dist/container.js +6 -6
  51. package/dist/conversation-list.js +19 -19
  52. package/dist/conversation-thread.js +15 -15
  53. package/dist/copy-button.js +9 -9
  54. package/dist/copyable-value.js +17 -17
  55. package/dist/data-table.js +29 -29
  56. package/dist/date-picker-field.js +9 -9
  57. package/dist/date-time-field.js +12 -12
  58. package/dist/description-list.js +12 -12
  59. package/dist/docs-search.js +1 -1
  60. package/dist/dots-button.js +7 -7
  61. package/dist/dropdown-field.js +13 -13
  62. package/dist/email.js +44 -44
  63. package/dist/error-text.js +4 -4
  64. package/dist/field-row.js +20 -20
  65. package/dist/figure.js +8 -8
  66. package/dist/file-upload-field.js +9 -9
  67. package/dist/file-upload.js +29 -29
  68. package/dist/filter-bar.js +10 -10
  69. package/dist/floating-dock.js +17 -17
  70. package/dist/form-field.js +43 -43
  71. package/dist/form.js +14 -14
  72. package/dist/heading.js +5 -5
  73. package/dist/input-field.js +20 -20
  74. package/dist/input-phone-field.js +9 -9
  75. package/dist/input-phone.js +19 -19
  76. package/dist/input.js +5 -5
  77. package/dist/kbd.js +5 -5
  78. package/dist/label.js +5 -5
  79. package/dist/link.js +7 -7
  80. package/dist/list.js +7 -7
  81. package/dist/menu-button.js +7 -7
  82. package/dist/message-bubble.js +5 -5
  83. package/dist/message-composer.js +13 -13
  84. package/dist/messages.js +12 -0
  85. package/dist/multi-select-field.js +9 -9
  86. package/dist/multi-select.js +52 -52
  87. package/dist/notification-button.js +8 -8
  88. package/dist/notification-panel.js +25 -25
  89. package/dist/number-input-field.js +9 -9
  90. package/dist/number-input.js +11 -11
  91. package/dist/otp-field.js +9 -9
  92. package/dist/otp-input.js +48 -48
  93. package/dist/pagination.js +92 -89
  94. package/dist/paragraph.js +5 -5
  95. package/dist/password-field.js +15 -15
  96. package/dist/prose.js +4 -4
  97. package/dist/public-page-shell.js +11 -11
  98. package/dist/radio-field.js +11 -11
  99. package/dist/radio-group.js +5 -5
  100. package/dist/radio.js +5 -5
  101. package/dist/scroll-area.js +11 -11
  102. package/dist/search-form.js +8 -8
  103. package/dist/select-field.js +9 -9
  104. package/dist/select.js +85 -85
  105. package/dist/separator.js +6 -6
  106. package/dist/sidebar.js +16 -16
  107. package/dist/site-header.js +14 -14
  108. package/dist/site-shell.js +6 -6
  109. package/dist/sparkline.js +9 -9
  110. package/dist/star-rating.css +1 -1
  111. package/dist/star-rating.js +55 -41
  112. package/dist/stat-tile.js +12 -12
  113. package/dist/steps.js +32 -32
  114. package/dist/switcher-field.js +13 -13
  115. package/dist/switcher.js +8 -8
  116. package/dist/table-of-contents.js +14 -14
  117. package/dist/tag.js +5 -5
  118. package/dist/text.js +7 -7
  119. package/dist/textarea-field.js +11 -11
  120. package/dist/textarea.js +5 -5
  121. package/dist/time-field.js +9 -9
  122. package/dist/time-select.js +17 -17
  123. package/dist/toaster.js +16 -16
  124. package/dist/toggle-group.js +7 -7
  125. package/dist/toggle.js +5 -5
  126. package/dist/tokens.css +11 -2
  127. package/dist/tooltip.js +16 -16
  128. package/dist/tree-view.js +41 -41
  129. package/dist/uptime-bars.js +34 -34
  130. package/dist/user-message.js +8 -8
  131. package/dist/visually-hidden.js +5 -5
  132. package/package.json +5 -1
  133. package/src/tokens/components/description-list.css +1 -1
  134. package/src/tokens/components/star-rating.css +5 -0
  135. package/src/tokens/molecules/confirm-dialog.css +1 -0
  136. package/src/tokens/scss/components/_description-list.scss +1 -1
  137. package/src/tokens/scss/components/_star-rating.scss +3 -0
  138. package/src/tokens/scss/molecules/_confirm-dialog.scss +1 -0
  139. package/src/tokens/surface-invert.css +2 -0
  140. package/src/tokens/surface-public.css +1 -0
  141. package/src/tokens/tokens.json +4 -0
package/dist/tooltip.js CHANGED
@@ -1,14 +1,14 @@
1
1
  'use client';
2
2
  import './tooltip.css';
3
- import { jsx as e, jsxs as t } from "react/jsx-runtime";
4
- import { forwardRef as n, useId as r, useState as i } from "react";
3
+ import { forwardRef as e, useId as t, useState as n } from "react";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
5
  import { Tooltip as a } from "@base-ui/react/tooltip";
6
6
  //#region src/stories/atoms/Tooltip/Tooltip.tsx
7
- function o({ children: t, delayDuration: n = 0, skipDelayDuration: r }) {
8
- return /* @__PURE__ */ e(a.Provider, {
9
- delay: n,
10
- ...r === void 0 ? {} : { timeout: r },
11
- children: t
7
+ function o({ children: e, delayDuration: t = 0, skipDelayDuration: n }) {
8
+ return /* @__PURE__ */ r(a.Provider, {
9
+ delay: t,
10
+ ...n === void 0 ? {} : { timeout: n },
11
+ children: e
12
12
  });
13
13
  }
14
14
  function s(e, t) {
@@ -19,37 +19,37 @@ function c() {
19
19
  let e = document.documentElement;
20
20
  return s(getComputedStyle(e).getPropertyValue("--tooltip-offset").trim(), e);
21
21
  }
22
- var l = n(function({ label: n, children: o, side: s = "top", align: l = "center", sideOffset: u, open: d, defaultOpen: f, onOpenChange: p, delayDuration: m, describe: h = !0, className: g, ..._ }, v) {
23
- let y = r(), [b, x] = i(f ?? !1), S = d ?? b;
24
- return /* @__PURE__ */ t(a.Root, {
22
+ var l = e(function({ label: e, children: o, side: s = "top", align: l = "center", sideOffset: u, open: d, defaultOpen: f, onOpenChange: p, delayDuration: m, describe: h = !0, className: g, ..._ }, v) {
23
+ let y = t(), [b, x] = n(f ?? !1), S = d ?? b;
24
+ return /* @__PURE__ */ i(a.Root, {
25
25
  open: d,
26
26
  defaultOpen: f,
27
27
  onOpenChange: (e) => {
28
28
  d === void 0 && x(e), p?.(e);
29
29
  },
30
- children: [/* @__PURE__ */ e(a.Trigger, {
30
+ children: [/* @__PURE__ */ r(a.Trigger, {
31
31
  ref: v,
32
32
  render: o,
33
33
  "aria-describedby": S && h ? y : void 0,
34
34
  ...m === void 0 ? {} : { delay: m },
35
35
  ..._
36
- }), /* @__PURE__ */ e(a.Portal, { children: /* @__PURE__ */ e(a.Positioner, {
36
+ }), /* @__PURE__ */ r(a.Portal, { children: /* @__PURE__ */ r(a.Positioner, {
37
37
  className: "tooltip__positioner",
38
38
  side: s,
39
39
  align: l,
40
40
  sideOffset: u ?? c,
41
- children: /* @__PURE__ */ t(a.Popup, {
41
+ children: /* @__PURE__ */ i(a.Popup, {
42
42
  id: y,
43
43
  role: "tooltip",
44
44
  className: ["tooltip", g].filter(Boolean).join(" "),
45
- children: [n, /* @__PURE__ */ e(a.Arrow, {
45
+ children: [e, /* @__PURE__ */ r(a.Arrow, {
46
46
  className: "tooltip__arrow",
47
- children: /* @__PURE__ */ e("svg", {
47
+ children: /* @__PURE__ */ r("svg", {
48
48
  width: "10",
49
49
  height: "5",
50
50
  viewBox: "0 0 30 10",
51
51
  preserveAspectRatio: "none",
52
- children: /* @__PURE__ */ e("polygon", { points: "0,0 30,0 15,10" })
52
+ children: /* @__PURE__ */ r("polygon", { points: "0,0 30,0 15,10" })
53
53
  })
54
54
  })]
55
55
  })
package/dist/tree-view.js CHANGED
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import './tree-view.css';
3
3
  import { Icon as e } from "./icon.js";
4
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
5
- import { useCallback as r, useId as i, useMemo as a, useRef as o, useState as s } from "react";
4
+ import { useCallback as t, useId as n, useMemo as r, useRef as i, useState as a } from "react";
5
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
6
  //#region src/stories/molecules/TreeView/TreeView.tsx
7
7
  var c = 500;
8
8
  function l(e, t, n = 1, r) {
@@ -13,18 +13,18 @@ function l(e, t, n = 1, r) {
13
13
  }, ...e.children && t.has(e.id) ? l(e.children, t, n + 1, e.id) : []]);
14
14
  }
15
15
  function u({ items: u, expanded: d, defaultExpanded: f, onExpandedChange: p, selected: m, defaultSelected: h, onSelectedChange: g, label: _ = "Árbol", truncateFromLevel: v = 4, nodeRef: y, className: b, ...x }) {
16
- let S = i(), C = o(null), [w, T] = s(f ?? []), E = d !== void 0, D = E ? d : w, [O, k] = s(h), A = m !== void 0, j = A ? m : O, M = a(() => new Set(D), [D]), N = a(() => l(u, M), [u, M]), [P, F] = s(void 0), I = P && N.some((e) => e.node.id === P) ? P : j && N.some((e) => e.node.id === j) ? j : N[0]?.node.id, L = o(""), R = o(0), z = r((e) => {
16
+ let S = n(), C = i(null), [w, T] = a(f ?? []), E = d !== void 0, D = E ? d : w, [O, k] = a(h), A = m !== void 0, j = A ? m : O, M = r(() => new Set(D), [D]), N = r(() => l(u, M), [u, M]), [P, F] = a(void 0), I = P && N.some((e) => e.node.id === P) ? P : j && N.some((e) => e.node.id === j) ? j : N[0]?.node.id, L = i(""), R = i(0), z = t((e) => {
17
17
  E || T(e), p?.(e);
18
- }, [E, p]), B = r((e, t) => {
18
+ }, [E, p]), B = t((e, t) => {
19
19
  let n = M.has(e), r = t ?? !n;
20
20
  r !== n && z(r ? [...D, e] : D.filter((t) => t !== e));
21
21
  }, [
22
22
  D,
23
23
  M,
24
24
  z
25
- ]), V = r((e) => {
25
+ ]), V = t((e) => {
26
26
  A || k(e), g?.(e);
27
- }, [A, g]), H = r((e) => {
27
+ }, [A, g]), H = t((e) => {
28
28
  let t = N.filter((t) => t.parentId === e.parentId && t.node.children?.length).map((e) => e.node.id).filter((e) => !M.has(e));
29
29
  t.length !== 0 && z([...D, ...t]);
30
30
  }, [
@@ -32,9 +32,9 @@ function u({ items: u, expanded: d, defaultExpanded: f, onExpandedChange: p, sel
32
32
  N,
33
33
  M,
34
34
  z
35
- ]), U = r((e) => `${S}-${e}`, [S]), W = r((e) => {
35
+ ]), U = t((e) => `${S}-${e}`, [S]), W = t((e) => {
36
36
  e && (F(e), C.current?.querySelector(`[data-tree-item="${CSS.escape(e)}"]`)?.focus());
37
- }, []), G = r((e, t) => {
37
+ }, []), G = t((e, t) => {
38
38
  let n = Date.now(), r = n - R.current > c ? e : L.current + e;
39
39
  L.current = r, R.current = n;
40
40
  let i = r.length === 1 ? t + 1 : Math.max(t, 0), a = r.toLowerCase();
@@ -79,80 +79,80 @@ function u({ items: u, expanded: d, defaultExpanded: f, onExpandedChange: p, sel
79
79
  break;
80
80
  }
81
81
  }
82
- function q(r, i, a) {
83
- return r.map((r) => {
84
- let o = !!r.children?.length, s = o && M.has(r.id), c = j === r.id, l = s && r.iconExpanded || r.icon, u = i >= v, d = u && typeof r.label == "string" ? r.label : void 0, f = r.dropTarget ? "target" : r.dropDisabled ? "disabled" : void 0;
85
- return /* @__PURE__ */ n("li", {
82
+ function q(t, n, r) {
83
+ return t.map((t) => {
84
+ let i = !!t.children?.length, a = i && M.has(t.id), c = j === t.id, l = a && t.iconExpanded || t.icon, u = n >= v, d = u && typeof t.label == "string" ? t.label : void 0, f = t.dropTarget ? "target" : t.dropDisabled ? "disabled" : void 0;
85
+ return /* @__PURE__ */ s("li", {
86
86
  role: "treeitem",
87
- "data-tree-item": r.id,
88
- "aria-labelledby": U(r.id),
89
- "aria-expanded": o ? s : void 0,
87
+ "data-tree-item": t.id,
88
+ "aria-labelledby": U(t.id),
89
+ "aria-expanded": i ? a : void 0,
90
90
  "aria-selected": c,
91
- "aria-level": i,
92
- "aria-disabled": r.disabled || void 0,
91
+ "aria-level": n,
92
+ "aria-disabled": t.disabled || void 0,
93
93
  "data-drop": f,
94
- tabIndex: I === r.id ? 0 : -1,
94
+ tabIndex: I === t.id ? 0 : -1,
95
95
  className: [
96
96
  "tree-view__item",
97
97
  c ? "tree-view__item--selected" : "",
98
- r.disabled ? "tree-view__item--disabled" : "",
99
- r.dropTarget ? "tree-view__item--drop-target" : "",
100
- r.dropDisabled ? "tree-view__item--drop-disabled" : ""
98
+ t.disabled ? "tree-view__item--disabled" : "",
99
+ t.dropTarget ? "tree-view__item--drop-target" : "",
100
+ t.dropDisabled ? "tree-view__item--drop-disabled" : ""
101
101
  ].filter(Boolean).join(" "),
102
102
  onKeyDown: (e) => {
103
103
  e.target === e.currentTarget && K(e, {
104
- node: r,
105
- level: i,
106
- parentId: a
104
+ node: t,
105
+ level: n,
106
+ parentId: r
107
107
  });
108
108
  },
109
109
  onFocus: (e) => {
110
- e.target === e.currentTarget && F(r.id);
110
+ e.target === e.currentTarget && F(t.id);
111
111
  },
112
- onClick: r.disabled ? void 0 : (e) => {
113
- e.stopPropagation(), o && B(r.id), V(r.id), W(r.id);
112
+ onClick: t.disabled ? void 0 : (e) => {
113
+ e.stopPropagation(), i && B(t.id), V(t.id), W(t.id);
114
114
  },
115
- children: [/* @__PURE__ */ n("span", {
115
+ children: [/* @__PURE__ */ s("span", {
116
116
  className: "tree-view__row",
117
- ref: y ? (e) => y(r.id, e) : void 0,
117
+ ref: y ? (e) => y(t.id, e) : void 0,
118
118
  children: [
119
- /* @__PURE__ */ t("span", {
119
+ /* @__PURE__ */ o("span", {
120
120
  className: "tree-view__chevron-slot",
121
121
  "aria-hidden": "true",
122
- children: o && /* @__PURE__ */ t(e, {
122
+ children: i && /* @__PURE__ */ o(e, {
123
123
  name: "chevron",
124
124
  className: "tree-view__chevron",
125
125
  size: "sm"
126
126
  })
127
127
  }),
128
- l && /* @__PURE__ */ t("span", {
128
+ l && /* @__PURE__ */ o("span", {
129
129
  className: "tree-view__icon",
130
130
  "aria-hidden": "true",
131
131
  children: l
132
132
  }),
133
- /* @__PURE__ */ t("span", {
133
+ /* @__PURE__ */ o("span", {
134
134
  className: ["tree-view__label", u ? "tree-view__label--truncated" : ""].filter(Boolean).join(" "),
135
- id: U(r.id),
135
+ id: U(t.id),
136
136
  title: d,
137
- children: r.label
137
+ children: t.label
138
138
  }),
139
- r.actions && /* @__PURE__ */ t("span", {
139
+ t.actions && /* @__PURE__ */ o("span", {
140
140
  className: "tree-view__actions",
141
141
  onClick: (e) => e.stopPropagation(),
142
142
  onKeyDown: (e) => e.stopPropagation(),
143
143
  onKeyUp: (e) => e.stopPropagation(),
144
- children: r.actions
144
+ children: t.actions
145
145
  })
146
146
  ]
147
- }), o && s && /* @__PURE__ */ t("ul", {
147
+ }), i && a && /* @__PURE__ */ o("ul", {
148
148
  role: "group",
149
149
  className: "tree-view__group",
150
- children: q(r.children, i + 1, r.id)
150
+ children: q(t.children, n + 1, t.id)
151
151
  })]
152
- }, r.id);
152
+ }, t.id);
153
153
  });
154
154
  }
155
- return /* @__PURE__ */ t("ul", {
155
+ return /* @__PURE__ */ o("ul", {
156
156
  ref: C,
157
157
  role: "tree",
158
158
  "aria-label": _,
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import './uptime-bars.css';
3
3
  import { Tooltip as e } from "./tooltip.js";
4
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
5
- import { forwardRef as r, useRef as i, useState as a } from "react";
4
+ import { forwardRef as t, useRef as n, useState as r } from "react";
5
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
6
  //#region src/stories/molecules/UptimeBars/uptimeStatus.ts
7
7
  var o = {
8
8
  ok: 99.65,
@@ -13,11 +13,11 @@ function s(e, t) {
13
13
  }
14
14
  //#endregion
15
15
  //#region src/stories/molecules/UptimeBars/UptimeBars.tsx
16
- var c = r(function({ points: r, summary: c, label: l = "Disponibilidad", startLabel: u, endLabel: d, thresholds: f, locale: p = "es-ES", maximumFractionDigits: m = 2, pointLabel: h, noDataLabel: g = "sin datos", tooltips: _ = !0, className: v, ...y }, b) {
16
+ var c = t(function({ points: t, summary: c, label: l = "Disponibilidad", startLabel: u, endLabel: d, thresholds: f, locale: p = "es-ES", maximumFractionDigits: m = 2, pointLabel: h, noDataLabel: g = "sin datos", tooltips: _ = !0, className: v, ...y }, b) {
17
17
  let x = {
18
18
  ...o,
19
19
  ...f
20
- }, S = i([]), [C, w] = a(0), T = new Intl.NumberFormat(p, {
20
+ }, S = n([]), [C, w] = r(0), T = new Intl.NumberFormat(p, {
21
21
  style: "percent",
22
22
  maximumFractionDigits: m
23
23
  }), E = (e) => e === null || !Number.isFinite(e) ? null : T.format(e / 100), D = (e, t) => {
@@ -25,70 +25,70 @@ var c = r(function({ points: r, summary: c, label: l = "Disponibilidad", startLa
25
25
  let n = `${e.label}: ${t ?? g}`;
26
26
  return e.detail ? `${n}. ${e.detail}` : n;
27
27
  }, O = (e) => {
28
- let t = Math.max(0, Math.min(r.length - 1, e));
29
- w(t), S.current[t]?.focus();
30
- }, k = (e, t) => {
31
- let n = {
28
+ let n = Math.max(0, Math.min(t.length - 1, e));
29
+ w(n), S.current[n]?.focus();
30
+ }, k = (e, n) => {
31
+ let r = {
32
32
  ArrowRight: 1,
33
33
  ArrowDown: 1,
34
34
  ArrowLeft: -1,
35
35
  ArrowUp: -1
36
36
  }[e.key];
37
- if (n) {
38
- e.preventDefault(), O(t + n);
37
+ if (r) {
38
+ e.preventDefault(), O(n + r);
39
39
  return;
40
40
  }
41
- e.key === "Home" ? (e.preventDefault(), O(0)) : e.key === "End" && (e.preventDefault(), O(r.length - 1));
42
- }, A = Math.max(0, Math.min(C, r.length - 1));
43
- return /* @__PURE__ */ n("div", {
41
+ e.key === "Home" ? (e.preventDefault(), O(0)) : e.key === "End" && (e.preventDefault(), O(t.length - 1));
42
+ }, A = Math.max(0, Math.min(C, t.length - 1));
43
+ return /* @__PURE__ */ a("div", {
44
44
  ref: b,
45
45
  className: ["uptime-bars", v].filter(Boolean).join(" "),
46
46
  ...y,
47
- children: [/* @__PURE__ */ t("ol", {
47
+ children: [/* @__PURE__ */ i("ol", {
48
48
  className: "uptime-bars__list",
49
49
  "aria-label": l,
50
- children: r.map((r, i) => {
51
- let a = E(r.value), o = /* @__PURE__ */ t("span", {
52
- className: `uptime-bars__bar uptime-bars__bar--${s(r.value, x)}`,
50
+ children: t.map((t, n) => {
51
+ let r = E(t.value), o = /* @__PURE__ */ i("span", {
52
+ className: `uptime-bars__bar uptime-bars__bar--${s(t.value, x)}`,
53
53
  role: "img",
54
- "aria-label": D(r, a),
55
- tabIndex: _ ? i === A ? 0 : -1 : void 0,
56
- onKeyDown: _ ? (e) => k(e, i) : void 0,
57
- onFocus: _ ? () => w(i) : void 0
54
+ "aria-label": D(t, r),
55
+ tabIndex: _ ? n === A ? 0 : -1 : void 0,
56
+ onKeyDown: _ ? (e) => k(e, n) : void 0,
57
+ onFocus: _ ? () => w(n) : void 0
58
58
  });
59
- return /* @__PURE__ */ t("li", {
59
+ return /* @__PURE__ */ i("li", {
60
60
  className: "uptime-bars__item",
61
- children: _ ? /* @__PURE__ */ t(e, {
61
+ children: _ ? /* @__PURE__ */ i(e, {
62
62
  ref: (e) => {
63
- S.current[i] = e;
63
+ S.current[n] = e;
64
64
  },
65
- label: /* @__PURE__ */ n("span", {
65
+ label: /* @__PURE__ */ a("span", {
66
66
  className: "uptime-bars__tooltip",
67
67
  children: [
68
- /* @__PURE__ */ t("span", {
68
+ /* @__PURE__ */ i("span", {
69
69
  className: "uptime-bars__tooltip-label",
70
- children: r.label
70
+ children: t.label
71
71
  }),
72
- /* @__PURE__ */ t("span", { children: a ?? g }),
73
- r.detail ? /* @__PURE__ */ t("span", { children: r.detail }) : null
72
+ /* @__PURE__ */ i("span", { children: r ?? g }),
73
+ t.detail ? /* @__PURE__ */ i("span", { children: t.detail }) : null
74
74
  ]
75
75
  }),
76
76
  children: o
77
77
  }) : o
78
- }, `${r.label}-${i}`);
78
+ }, `${t.label}-${n}`);
79
79
  })
80
- }), /* @__PURE__ */ n("p", {
80
+ }), /* @__PURE__ */ a("p", {
81
81
  className: "uptime-bars__footer",
82
82
  children: [
83
- /* @__PURE__ */ t("span", {
83
+ /* @__PURE__ */ i("span", {
84
84
  className: "uptime-bars__edge",
85
85
  children: u
86
86
  }),
87
- /* @__PURE__ */ t("span", {
87
+ /* @__PURE__ */ i("span", {
88
88
  className: "uptime-bars__summary",
89
89
  children: c
90
90
  }),
91
- /* @__PURE__ */ t("span", {
91
+ /* @__PURE__ */ i("span", {
92
92
  className: "uptime-bars__edge uptime-bars__edge--end",
93
93
  children: d
94
94
  })
@@ -1,25 +1,25 @@
1
1
  import './user-message.css';
2
2
  import { MessageBubble as e } from "./message-bubble.js";
3
3
  import { t } from "./_shared/messagetimestamp.js";
4
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
5
- import { forwardRef as i } from "react";
4
+ import { forwardRef as n } from "react";
5
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
6
  //#region src/stories/molecules/UserMessage/UserMessage.tsx
7
- var a = i(function({ children: i, author: a, timestamp: o, locale: s, timestampFormat: c, className: l, ...u }, d) {
7
+ var a = n(function({ children: n, author: a, timestamp: o, locale: s, timestampFormat: c, className: l, ...u }, d) {
8
8
  let f = t(o, s, c);
9
- return /* @__PURE__ */ r("div", {
9
+ return /* @__PURE__ */ i("div", {
10
10
  ref: d,
11
11
  className: `user-message${l ? ` ${l}` : ""}`,
12
12
  ...u,
13
13
  children: [
14
- a && /* @__PURE__ */ n("span", {
14
+ a && /* @__PURE__ */ r("span", {
15
15
  className: "user-message__author",
16
16
  children: a
17
17
  }),
18
- /* @__PURE__ */ n(e, {
18
+ /* @__PURE__ */ r(e, {
19
19
  role: "user",
20
- children: i
20
+ children: n
21
21
  }),
22
- f && /* @__PURE__ */ n("time", {
22
+ f && /* @__PURE__ */ r("time", {
23
23
  className: "user-message__timestamp",
24
24
  dateTime: f.dateTime,
25
25
  children: f.label
@@ -1,13 +1,13 @@
1
1
  /* empty css */
2
- import { jsx as e } from "react/jsx-runtime";
3
- import { forwardRef as t } from "react";
2
+ import { forwardRef as e } from "react";
3
+ import { jsx as t } from "react/jsx-runtime";
4
4
  //#region src/stories/atoms/VisuallyHidden/VisuallyHidden.tsx
5
- var n = t(function({ children: t, as: n = "span", className: r, ...i }, a) {
6
- return /* @__PURE__ */ e(n, {
5
+ var n = e(function({ children: e, as: n = "span", className: r, ...i }, a) {
6
+ return /* @__PURE__ */ t(n, {
7
7
  ref: a,
8
8
  className: ["visually-hidden", r].filter(Boolean).join(" "),
9
9
  ...i,
10
- children: t
10
+ children: e
11
11
  });
12
12
  });
13
13
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studiolxd/brand",
3
- "version": "38.17.0",
3
+ "version": "40.0.0",
4
4
  "description": "El sistema de diseño de Studio LXD: componentes React, tokens y documentación de la suite SLXD.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -457,6 +457,10 @@
457
457
  "types": "./dist/_types/atoms/OtpInput/OtpInput.d.ts",
458
458
  "import": "./dist/otp-input.js"
459
459
  },
460
+ "./messages": {
461
+ "types": "./dist/_types/messages/index.d.ts",
462
+ "import": "./dist/messages.js"
463
+ },
460
464
  "./pagination": {
461
465
  "types": "./dist/_types/molecules/Pagination/Pagination.d.ts",
462
466
  "import": "./dist/pagination.js"
@@ -8,7 +8,7 @@
8
8
  --description-list-cell-padding-inline: var(--spacing-4); /** Aire horizontal de cada celda */
9
9
  --description-list-border-color: var(--color-primary); /** Color del borde: tinta de la superficie */
10
10
  --description-list-term-font-family: var(--label-font-family); /** Tipografía del término (dt): la de las etiquetas */
11
- --description-list-term-font-size: var(--label-font-size); /** Cuerpo del término: el de las etiquetas, no el de la prosa */
11
+ --description-list-term-font-size: var(--text-paragraph-small-font-size); /** Cuerpo del término: un peldaño por debajo del valor, la misma relación en las dos superficies (14/16 en aplicación, 16/20 en la pública). Es el mismo 14px que daba 0.875rem en aplicación, pero atado al cuerpo de la superficie: dentro de un SiteShell el valor sube a 20px y el término tenía que subir con él */
12
12
  --description-list-term-line-height: var(--label-line-height); /** Interlineado del término */
13
13
  --description-list-term-letter-spacing: var(--label-letter-spacing); /** Tracking del término */
14
14
  --description-list-term-color: var(--color-text-on-light); /** Color del término */
@@ -9,10 +9,13 @@
9
9
  --star-rating-cursor: pointer; /** Cursor sobre una estrella elegible */
10
10
  --star-rating-disabled-cursor: not-allowed; /** Cursor cuando la entrada está deshabilitada */
11
11
  --star-rating-gap: var(--spacing-1); /** Separación entre estrellas */
12
+ --star-rating-count-gap: var(--spacing-2); /** Separación entre las estrellas y el recuento de reseñas: más aire que entre estrella y estrella, para que el recuento se lea como otra cosa */
12
13
  --star-rating-disabled-opacity: var(--opacity-disabled); /** Opacidad cuando la entrada está deshabilitada */
13
14
  --star-rating-transition-duration: var(--motion-duration-fast); /** Duración del cambio de relleno */
14
15
  --star-rating-transition-easing: var(--motion-easing-default); /** Easing del cambio de relleno */
15
16
  --star-rating-track-color: var(--color-icon-secondary-on-light); /** Contorno de la estrella sin ganar */
17
+ --star-rating-count-color: var(--color-text-muted-on-light); /** Tinta del recuento de reseñas: texto secundario, es un metadato junto a la valoración */
18
+ --star-rating-empty-color: var(--color-text-muted-on-light); /** Tinta del «todavía sin reseñas»: texto secundario, igual que el recuento */
16
19
  --star-rating-fill-color: var(--color-primary); /** Relleno y contorno de la estrella ganada */
17
20
  --star-rating-focus-ring-width: var(--border-width-focus); /** Grosor del anillo de foco */
18
21
  --star-rating-focus-ring-offset: var(--border-width-default); /** Separación del anillo de foco */
@@ -24,6 +27,8 @@
24
27
  [data-theme="dark"],
25
28
  html.dark {
26
29
  --star-rating-track-color: var(--color-text-on-dark); /** Contorno de la estrella sin ganar — surface-dark */
30
+ --star-rating-count-color: var(--color-text-muted-on-dark); /** Tinta del recuento — surface-dark */
31
+ --star-rating-empty-color: var(--color-text-muted-on-dark); /** Tinta del «todavía sin reseñas» — surface-dark */
27
32
  --star-rating-fill-color: var(--color-accent-1); /** Relleno de la estrella ganada — surface-dark. `fill-color` (prussian) coincide con el fondo de la superficie y quedaría invisible. */
28
33
  --star-rating-focus-ring-color: var(--color-text-on-dark); /** Anillo de foco — surface-dark */
29
34
  }
@@ -4,4 +4,5 @@
4
4
 
5
5
  :root {
6
6
  --confirm-dialog-actions-space-before: var(--spacing-5); /** Aire entre el cuerpo del diálogo y su fila de acciones: separa la pregunta de la respuesta. El aire ENTRE los dos botones es el de `Inline` en su paso compacto */
7
+ --confirm-dialog-phrase-space-before: var(--spacing-4); /** Aire entre el cuerpo del diálogo y el campo de la frase de confirmación: menos que el del pie, porque el campo todavía es parte de la pregunta */
7
8
  }
@@ -7,7 +7,7 @@ $lxd-description-list-border-color: #111e30; // Color del borde: tinta de la sup
7
7
  $lxd-description-list-cell-padding-block: 0.75rem; // Aire vertical de cada celda
8
8
  $lxd-description-list-cell-padding-inline: 1rem; // Aire horizontal de cada celda
9
9
  $lxd-description-list-term-font-family: "Google Sans Flex", system-ui, sans-serif; // Tipografía del término (dt): la de las etiquetas
10
- $lxd-description-list-term-font-size: 0.875rem; // Cuerpo del término: el de las etiquetas, no el de la prosa
10
+ $lxd-description-list-term-font-size: 0.875rem; // Cuerpo del término: un peldaño por debajo del valor, la misma relación en las dos superficies (14/16 en aplicación, 16/20 en la pública). Es el mismo 14px que daba 0.875rem en aplicación, pero atado al cuerpo de la superficie: dentro de un SiteShell el valor sube a 20px y el término tenía que subir con él
11
11
  $lxd-description-list-term-font-weight: 500; // Peso del término
12
12
  $lxd-description-list-term-line-height: 1.5; // Interlineado del término
13
13
  $lxd-description-list-term-letter-spacing: 0em; // Tracking del término
@@ -5,7 +5,10 @@ $lxd-star-rating-gap: 0.25rem; // Separación entre estrellas
5
5
  $lxd-star-rating-star-size: 1.25em; // Tamaño de la estrella — relativo al texto que la rodea, como el resto de marcas en línea
6
6
  $lxd-star-rating-sm-star-size: 1em; // Tamaño de la estrella — talla sm
7
7
  $lxd-star-rating-lg-star-size: 1.5em; // Tamaño de la estrella — talla lg
8
+ $lxd-star-rating-count-gap: 0.5rem; // Separación entre las estrellas y el recuento de reseñas: más aire que entre estrella y estrella, para que el recuento se lea como otra cosa
8
9
  $lxd-star-rating-track-color: #6b6b6b; // Contorno de la estrella sin ganar
10
+ $lxd-star-rating-count-color: #4a4a4a; // Tinta del recuento de reseñas: texto secundario, es un metadato junto a la valoración
11
+ $lxd-star-rating-empty-color: #4a4a4a; // Tinta del «todavía sin reseñas»: texto secundario, igual que el recuento
9
12
  $lxd-star-rating-fill-color: #111e30; // Relleno y contorno de la estrella ganada
10
13
  $lxd-star-rating-cursor: pointer; // Cursor sobre una estrella elegible
11
14
  $lxd-star-rating-disabled-cursor: not-allowed; // Cursor cuando la entrada está deshabilitada
@@ -2,3 +2,4 @@
2
2
  // Do not edit directly, this file was auto-generated.
3
3
 
4
4
  $lxd-confirm-dialog-actions-space-before: 1.5rem; // Aire entre el cuerpo del diálogo y su fila de acciones: separa la pregunta de la respuesta. El aire ENTRE los dos botones es el de `Inline` en su paso compacto
5
+ $lxd-confirm-dialog-phrase-space-before: 1rem; // Aire entre el cuerpo del diálogo y el campo de la frase de confirmación: menos que el del pie, porque el campo todavía es parte de la pregunta
@@ -336,6 +336,8 @@ html.dark .surface-invert {
336
336
  --sparkline-accent-color: var(--chart-series-1);
337
337
  --sparkline-baseline-color: var(--chart-axis-color);
338
338
  --star-rating-track-color: var(--color-icon-secondary-on-light);
339
+ --star-rating-count-color: var(--color-text-muted-on-light);
340
+ --star-rating-empty-color: var(--color-text-muted-on-light);
339
341
  --star-rating-fill-color: var(--color-primary);
340
342
  --star-rating-focus-ring-color: var(--color-primary);
341
343
  --step-pending-bg: var(--color-background-light);
@@ -31,6 +31,7 @@
31
31
  --breadcrumb-font-size: var(--text-paragraph-small-font-size);
32
32
  --code-block-font-size: var(--text-paragraph-small-font-size);
33
33
  --code-font-size: var(--code-block-font-size);
34
+ --description-list-term-font-size: var(--text-paragraph-small-font-size);
34
35
  --description-list-value-font-size: var(--text-font-size);
35
36
  --description-list-value-line-height: var(--text-line-height);
36
37
  --empty-state-description-font-size: var(--text-font-size);
@@ -1654,7 +1654,10 @@
1654
1654
  "--star-rating-star-size": "1.25em",
1655
1655
  "--star-rating-sm-star-size": "1em",
1656
1656
  "--star-rating-lg-star-size": "1.5em",
1657
+ "--star-rating-count-gap": "0.5rem",
1657
1658
  "--star-rating-track-color": "#6b6b6b",
1659
+ "--star-rating-count-color": "#4a4a4a",
1660
+ "--star-rating-empty-color": "#4a4a4a",
1658
1661
  "--star-rating-fill-color": "#111e30",
1659
1662
  "--star-rating-cursor": "pointer",
1660
1663
  "--star-rating-disabled-cursor": "not-allowed",
@@ -2354,6 +2357,7 @@
2354
2357
  "--command-palette-item-highlighted-color": "#ffffff",
2355
2358
  "--command-palette-item-icon-size": "1.5rem",
2356
2359
  "--confirm-dialog-actions-space-before": "1.5rem",
2360
+ "--confirm-dialog-phrase-space-before": "1rem",
2357
2361
  "--consent-banner-bg": "#ffffff",
2358
2362
  "--consent-banner-color": "#111e30",
2359
2363
  "--consent-banner-border-color": "#111e30",