@telefonica/mistica 16.64.0-beta.1 → 16.65.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 (221) hide show
  1. package/css/mistica.css +1 -1
  2. package/dist/accordion.css-mistica.js +16 -16
  3. package/dist/align.css-mistica.js +2 -2
  4. package/dist/autocomplete.css-mistica.js +6 -6
  5. package/dist/avatar.css-mistica.js +3 -3
  6. package/dist/badge.css-mistica.js +7 -7
  7. package/dist/box.css-mistica.js +15 -15
  8. package/dist/boxed.css-mistica.js +31 -31
  9. package/dist/button-group.css-mistica.js +10 -10
  10. package/dist/button-layout.css-mistica.js +21 -21
  11. package/dist/button.css-mistica.js +51 -51
  12. package/dist/callout.css-mistica.js +16 -16
  13. package/dist/card-internal.css-mistica.js +38 -38
  14. package/dist/carousel.css-mistica.js +18 -18
  15. package/dist/checkbox.css-mistica.js +21 -21
  16. package/dist/chip.css-mistica.js +30 -30
  17. package/dist/circle.css-mistica.js +2 -2
  18. package/dist/community/advanced-data-card.css-mistica.js +26 -26
  19. package/dist/community/ai-card.css-mistica.js +14 -14
  20. package/dist/community/blocks.css-mistica.js +3 -3
  21. package/dist/community/cyber/example-component.css-mistica.js +11 -0
  22. package/dist/community/cyber/example-component.css.d.ts +1 -0
  23. package/dist/community/cyber/example-component.d.ts +6 -0
  24. package/dist/community/cyber/example-component.js +25 -0
  25. package/dist/community/cyber/index.d.ts +1 -0
  26. package/dist/community/example-component.css-mistica.js +2 -2
  27. package/dist/community/index.d.ts +2 -0
  28. package/dist/community/index.js +11 -0
  29. package/dist/community/skins/cyber-skin.d.ts +44 -0
  30. package/dist/community/skins/cyber-skin.js +633 -0
  31. package/dist/counter.css-mistica.js +12 -12
  32. package/dist/cover-hero.css-mistica.js +16 -16
  33. package/dist/credit-card-number-field.css-mistica.js +6 -6
  34. package/dist/date-field.css-mistica.js +1 -1
  35. package/dist/date-time-picker.css-mistica.js +2 -2
  36. package/dist/dialog.css-mistica.js +15 -15
  37. package/dist/divider.css-mistica.js +5 -5
  38. package/dist/double-field.css-mistica.js +4 -4
  39. package/dist/drawer.css-mistica.js +15 -15
  40. package/dist/empty-state-card.css-mistica.js +4 -4
  41. package/dist/empty-state.css-mistica.js +14 -14
  42. package/dist/fade-in.css-mistica.js +1 -1
  43. package/dist/feedback.css-mistica.js +14 -14
  44. package/dist/file-upload.css-mistica.js +14 -14
  45. package/dist/fixed-footer-layout.css-mistica.js +12 -12
  46. package/dist/form.css-mistica.js +2 -2
  47. package/dist/grid-layout.css-mistica.js +9 -9
  48. package/dist/grid.css-mistica.js +147 -147
  49. package/dist/header.css-mistica.js +5 -5
  50. package/dist/hero.css-mistica.js +11 -11
  51. package/dist/horizontal-scroll.css-mistica.js +3 -3
  52. package/dist/icon-button.css-mistica.js +66 -66
  53. package/dist/icons/icon-chevron.css-mistica.js +6 -6
  54. package/dist/icons/icon-error.css-mistica.js +3 -3
  55. package/dist/image.css-mistica.js +9 -9
  56. package/dist/index.d.ts +1 -1
  57. package/dist/inline.css-mistica.js +18 -18
  58. package/dist/list.css-mistica.js +15 -15
  59. package/dist/loading-bar.css-mistica.js +5 -5
  60. package/dist/loading-screen.css-mistica.js +15 -15
  61. package/dist/logo.css-mistica.js +9 -9
  62. package/dist/media-queries.css-mistica.js +13 -13
  63. package/dist/menu.css-mistica.js +25 -25
  64. package/dist/mosaic.css-mistica.js +3 -3
  65. package/dist/navigation-bar.css-mistica.js +45 -45
  66. package/dist/navigation-breadcrumbs.css-mistica.js +5 -5
  67. package/dist/package-version.js +2 -2
  68. package/dist/pin-field.css-mistica.js +10 -10
  69. package/dist/popover.css-mistica.js +2 -2
  70. package/dist/progress-bar.css-mistica.js +12 -12
  71. package/dist/radio-button.css-mistica.js +33 -33
  72. package/dist/rating.css-mistica.js +12 -12
  73. package/dist/responsive-layout.css-mistica.js +20 -20
  74. package/dist/screen-reader-only.css-mistica.js +2 -2
  75. package/dist/select.css-mistica.js +29 -29
  76. package/dist/sheet-action-row.css-mistica.js +2 -2
  77. package/dist/sheet-common.css-mistica.js +16 -16
  78. package/dist/sheet-info.css-mistica.js +4 -4
  79. package/dist/skeletons.css-mistica.js +12 -12
  80. package/dist/skins/skin-contract.css-mistica.js +686 -686
  81. package/dist/skip-link.css-mistica.js +3 -3
  82. package/dist/slider.css-mistica.js +28 -28
  83. package/dist/snackbar.css-mistica.js +16 -16
  84. package/dist/spinner.css-mistica.js +5 -5
  85. package/dist/square.css-mistica.js +2 -2
  86. package/dist/stack.css-mistica.js +9 -9
  87. package/dist/stacking-group.css-mistica.js +2 -2
  88. package/dist/stepper.css-mistica.js +16 -16
  89. package/dist/switch-component.css-mistica.js +53 -53
  90. package/dist/table.css-mistica.js +24 -24
  91. package/dist/tabs.css-mistica.js +30 -30
  92. package/dist/tag.css-mistica.js +5 -5
  93. package/dist/text-field-base.css-mistica.js +30 -30
  94. package/dist/text-field-components.css-mistica.js +19 -19
  95. package/dist/text-link.css-mistica.js +10 -10
  96. package/dist/text.css-mistica.js +13 -13
  97. package/dist/theme-context.css-mistica.js +2 -2
  98. package/dist/timeline.css-mistica.js +18 -18
  99. package/dist/timer.css-mistica.js +13 -13
  100. package/dist/tooltip.css-mistica.js +12 -12
  101. package/dist/touchable.css-mistica.js +5 -5
  102. package/dist/utils/aspect-ratio-support.css-mistica.js +7 -7
  103. package/dist/video.css-mistica.js +2 -2
  104. package/dist/video.d.ts +16 -0
  105. package/dist/video.js +93 -75
  106. package/dist/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +3 -3
  107. package/dist-es/accordion.css-mistica.js +7 -7
  108. package/dist-es/align.css-mistica.js +2 -2
  109. package/dist-es/autocomplete.css-mistica.js +2 -2
  110. package/dist-es/avatar.css-mistica.js +2 -2
  111. package/dist-es/badge.css-mistica.js +2 -2
  112. package/dist-es/box.css-mistica.js +15 -15
  113. package/dist-es/boxed.css-mistica.js +25 -25
  114. package/dist-es/button-group.css-mistica.js +2 -2
  115. package/dist-es/button-layout.css-mistica.js +16 -16
  116. package/dist-es/button.css-mistica.js +38 -38
  117. package/dist-es/callout.css-mistica.js +12 -12
  118. package/dist-es/card-internal.css-mistica.js +20 -20
  119. package/dist-es/carousel.css-mistica.js +10 -10
  120. package/dist-es/checkbox.css-mistica.js +14 -14
  121. package/dist-es/chip.css-mistica.js +17 -17
  122. package/dist-es/circle.css-mistica.js +2 -2
  123. package/dist-es/community/advanced-data-card.css-mistica.js +7 -7
  124. package/dist-es/community/ai-card.css-mistica.js +4 -4
  125. package/dist-es/community/blocks.css-mistica.js +2 -2
  126. package/dist-es/community/cyber/example-component.css-mistica.js +2 -0
  127. package/dist-es/community/cyber/example-component.js +11 -0
  128. package/dist-es/community/example-component.css-mistica.js +2 -2
  129. package/dist-es/community/index.js +6 -4
  130. package/dist-es/community/skins/cyber-skin.js +613 -0
  131. package/dist-es/counter.css-mistica.js +2 -2
  132. package/dist-es/cover-hero.css-mistica.js +4 -4
  133. package/dist-es/credit-card-number-field.css-mistica.js +4 -4
  134. package/dist-es/date-field.css-mistica.js +1 -1
  135. package/dist-es/date-time-picker.css-mistica.js +2 -2
  136. package/dist-es/dialog.css-mistica.js +5 -5
  137. package/dist-es/divider.css-mistica.js +5 -5
  138. package/dist-es/double-field.css-mistica.js +4 -4
  139. package/dist-es/drawer.css-mistica.js +2 -2
  140. package/dist-es/empty-state-card.css-mistica.js +2 -2
  141. package/dist-es/empty-state.css-mistica.js +7 -7
  142. package/dist-es/fade-in.css-mistica.js +1 -1
  143. package/dist-es/feedback.css-mistica.js +2 -2
  144. package/dist-es/file-upload.css-mistica.js +8 -8
  145. package/dist-es/fixed-footer-layout.css-mistica.js +4 -4
  146. package/dist-es/form.css-mistica.js +2 -2
  147. package/dist-es/grid-layout.css-mistica.js +4 -4
  148. package/dist-es/grid.css-mistica.js +127 -127
  149. package/dist-es/header.css-mistica.js +2 -2
  150. package/dist-es/hero.css-mistica.js +4 -4
  151. package/dist-es/horizontal-scroll.css-mistica.js +2 -2
  152. package/dist-es/icon-button.css-mistica.js +56 -56
  153. package/dist-es/icons/icon-chevron.css-mistica.js +4 -4
  154. package/dist-es/icons/icon-error.css-mistica.js +2 -2
  155. package/dist-es/image.css-mistica.js +4 -4
  156. package/dist-es/inline.css-mistica.js +10 -10
  157. package/dist-es/list.css-mistica.js +2 -2
  158. package/dist-es/loading-bar.css-mistica.js +2 -2
  159. package/dist-es/loading-screen.css-mistica.js +5 -5
  160. package/dist-es/logo.css-mistica.js +7 -7
  161. package/dist-es/media-queries.css-mistica.js +3 -3
  162. package/dist-es/menu.css-mistica.js +15 -15
  163. package/dist-es/mosaic.css-mistica.js +2 -2
  164. package/dist-es/navigation-bar.css-mistica.js +20 -20
  165. package/dist-es/navigation-breadcrumbs.css-mistica.js +2 -2
  166. package/dist-es/package-version.js +2 -2
  167. package/dist-es/pin-field.css-mistica.js +2 -2
  168. package/dist-es/popover.css-mistica.js +2 -2
  169. package/dist-es/progress-bar.css-mistica.js +8 -8
  170. package/dist-es/radio-button.css-mistica.js +25 -25
  171. package/dist-es/rating.css-mistica.js +4 -4
  172. package/dist-es/responsive-layout.css-mistica.js +7 -7
  173. package/dist-es/screen-reader-only.css-mistica.js +2 -2
  174. package/dist-es/select.css-mistica.js +20 -20
  175. package/dist-es/sheet-action-row.css-mistica.js +2 -2
  176. package/dist-es/sheet-common.css-mistica.js +2 -2
  177. package/dist-es/sheet-info.css-mistica.js +2 -2
  178. package/dist-es/skeletons.css-mistica.js +8 -8
  179. package/dist-es/skins/skin-contract.css-mistica.js +686 -686
  180. package/dist-es/skip-link.css-mistica.js +2 -2
  181. package/dist-es/slider.css-mistica.js +20 -20
  182. package/dist-es/snackbar.css-mistica.js +5 -5
  183. package/dist-es/spinner.css-mistica.js +2 -2
  184. package/dist-es/square.css-mistica.js +2 -2
  185. package/dist-es/stack.css-mistica.js +7 -7
  186. package/dist-es/stacking-group.css-mistica.js +2 -2
  187. package/dist-es/stepper.css-mistica.js +4 -4
  188. package/dist-es/style.css +1 -1
  189. package/dist-es/switch-component.css-mistica.js +41 -41
  190. package/dist-es/table.css-mistica.js +11 -11
  191. package/dist-es/tabs.css-mistica.js +21 -21
  192. package/dist-es/tag.css-mistica.js +2 -2
  193. package/dist-es/text-field-base.css-mistica.js +17 -17
  194. package/dist-es/text-field-components.css-mistica.js +4 -4
  195. package/dist-es/text-link.css-mistica.js +9 -9
  196. package/dist-es/text.css-mistica.js +8 -8
  197. package/dist-es/theme-context.css-mistica.js +2 -2
  198. package/dist-es/timeline.css-mistica.js +11 -11
  199. package/dist-es/timer.css-mistica.js +7 -7
  200. package/dist-es/tooltip.css-mistica.js +3 -3
  201. package/dist-es/touchable.css-mistica.js +2 -2
  202. package/dist-es/utils/aspect-ratio-support.css-mistica.js +4 -4
  203. package/dist-es/video.css-mistica.js +2 -2
  204. package/dist-es/video.js +106 -88
  205. package/dist-es/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +2 -2
  206. package/doc/components.md +1 -1
  207. package/doc/figma-mcp.md +0 -35
  208. package/doc/layout.md +45 -1
  209. package/doc/patterns.md +23 -0
  210. package/package.json +1 -1
  211. package/src/community/__stories__/cyber/example-component-story.tsx +15 -0
  212. package/src/community/cyber/example-component.css.ts +7 -0
  213. package/src/community/cyber/example-component.tsx +17 -0
  214. package/src/community/cyber/index.tsx +1 -0
  215. package/src/community/index.tsx +3 -0
  216. package/src/community/skins/cyber-skin.tsx +628 -0
  217. package/src/index.tsx +1 -1
  218. package/src/navigation-bar.css.ts +1 -1
  219. package/src/package-version.tsx +1 -1
  220. package/src/video.tsx +36 -0
  221. package/doc/agents/figma-verifier.md +0 -49
package/dist-es/video.js CHANGED
@@ -26,16 +26,16 @@ function _object_without_properties_loose(source, excluded) {
26
26
  }
27
27
  return target;
28
28
  }
29
- import { jsx as a, jsxs as j } from "react/jsx-runtime";
29
+ import { jsxs as P, jsx as l } from "react/jsx-runtime";
30
30
  import * as s from "react";
31
- import { ImageContent as B, ImageError as G } from "./image.js";
32
- import { AspectRatioContainer as V } from "./utils/aspect-ratio-support.js";
33
- import { isRunningAcceptanceTest as J } from "./utils/platform.js";
34
- import { video as O } from "./video.css-mistica.js";
35
- import { defaultBorderRadius as E } from "./image.css-mistica.js";
36
- import { getPrefixedDataAttributes as Q } from "./utils/dom.js";
37
- import X from "classnames";
38
- const Y = {
31
+ import { ImageContent as q, ImageError as J } from "./image.js";
32
+ import { AspectRatioContainer as M } from "./utils/aspect-ratio-support.js";
33
+ import { isRunningAcceptanceTest as Q } from "./utils/platform.js";
34
+ import { video as X } from "./video.css-mistica.js";
35
+ import { defaultBorderRadius as S } from "./image.css-mistica.js";
36
+ import { getPrefixedDataAttributes as Y } from "./utils/dom.js";
37
+ import D from "classnames";
38
+ const K = {
39
39
  loading: {
40
40
  play: "playing",
41
41
  pause: "paused",
@@ -68,14 +68,15 @@ const Y = {
68
68
  play: "playing",
69
69
  reset: "loading"
70
70
  }
71
- }, q = (r, l)=>Y[r][l] || r, D = {
71
+ }, _ = (i, u)=>K[i][u] || i, $ = {
72
72
  "1:1": 1,
73
73
  "16:9": 16 / 9,
74
74
  "4:3": 4 / 3
75
- }, K = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAtJREFUGFdjYAACAAAFAAGq1chRAAAAAElFTkSuQmCC", te = /*#__PURE__*/ s.forwardRef((_param, c)=>{
76
- var { src: r, poster: l, autoPlay: p = "when-loaded", muted: C = !0, loop: I = !0, preload: P = "none", loadingTimeout: y = 1e4, onLoad: F, onError: w, onPause: S, onPlay: N, aspectRatio: u = 0, dataAttributes: k } = _param, o = _object_without_properties(_param, [
75
+ }, z = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAtJREFUGFdjYAACAAAFAAGq1chRAAAAAElFTkSuQmCC", ne = /*#__PURE__*/ s.forwardRef((_param, h)=>{
76
+ var { src: i, poster: u, tracks: v, autoPlay: g = "when-loaded", muted: F = !0, loop: N = !0, preload: x = "none", loadingTimeout: R = 1e4, onLoad: L, onError: b, onPause: U, onPlay: j, aspectRatio: c = 0, dataAttributes: B } = _param, o = _object_without_properties(_param, [
77
77
  "src",
78
78
  "poster",
79
+ "tracks",
79
80
  "autoPlay",
80
81
  "muted",
81
82
  "loop",
@@ -88,146 +89,163 @@ const Y = {
88
89
  "aspectRatio",
89
90
  "dataAttributes"
90
91
  ]);
91
- const [d, n] = s.useReducer(q, "loading"), t = s.useRef(null), v = s.useRef(null), h = s.useRef(null), A = o.width && o.height ? void 0 : typeof u == "number" ? u : D[u], m = s.useCallback(()=>{
92
- d === "loading" && (n("fail"), w === null || w === void 0 ? void 0 : w());
92
+ const [d, n] = s.useReducer(_, "loading"), r = s.useRef(null), E = s.useRef(null), f = s.useRef(null), A = o.width && o.height ? void 0 : typeof c == "number" ? c : $[c], y = s.useCallback(()=>{
93
+ d === "loading" && (n("fail"), b === null || b === void 0 ? void 0 : b());
93
94
  }, [
94
- w,
95
+ b,
95
96
  d
96
97
  ]);
97
98
  s.useEffect(()=>{
98
- if (v.current !== r) {
99
- var _t_current;
99
+ if (E.current !== i) {
100
+ var _r_current;
100
101
  let e;
101
- return v.current = r, n("reset"), r ? (e = setTimeout(m, y), (_t_current = t.current) === null || _t_current === void 0 ? void 0 : _t_current.load()) : n("fail"), ()=>{
102
+ return E.current = i, n("reset"), i ? (e = setTimeout(y, R), (_r_current = r.current) === null || _r_current === void 0 ? void 0 : _r_current.load()) : n("fail"), ()=>{
102
103
  clearTimeout(e);
103
104
  };
104
105
  }
105
106
  }, [
106
- r,
107
- y,
108
- m
107
+ i,
108
+ R,
109
+ y
109
110
  ]);
110
- const R = ()=>{
111
- if (F === null || F === void 0 ? void 0 : F(), d === "stopped") return;
112
- const e = t.current, i = p && !J();
113
- n("finishLoad"), e && i && e.paused && e.play();
114
- }, x = (Array.isArray(r) ? r : [
115
- r
111
+ const T = ()=>{
112
+ if (L === null || L === void 0 ? void 0 : L(), d === "stopped") return;
113
+ const e = r.current, t = g && !Q();
114
+ n("finishLoad"), e && t && e.paused && e.play();
115
+ }, G = (Array.isArray(i) ? i : [
116
+ i
116
117
  ]).map((e)=>typeof e == "string" ? {
117
118
  src: e
118
- } : e), f = [
119
+ } : e), m = [
119
120
  "error",
120
121
  "loading",
121
122
  "loaded",
122
123
  "stopped"
123
- ].includes(d), L = /* @__PURE__ */ a("video", {
124
- ref: t,
124
+ ].includes(d), O = /* @__PURE__ */ P("video", {
125
+ ref: r,
125
126
  playsInline: !0,
126
127
  disablePictureInPicture: !0,
127
128
  disableRemotePlayback: !0,
128
- muted: C,
129
- loop: I,
130
- className: X(O, E),
131
- preload: P,
132
- onError: m,
129
+ muted: F,
130
+ loop: N,
131
+ crossOrigin: (v === null || v === void 0 ? void 0 : v.length) ? "anonymous" : void 0,
132
+ className: D(X, S),
133
+ preload: x,
134
+ onError: y,
133
135
  onPause: ()=>{
134
- S === null || S === void 0 ? void 0 : S(), n("pause");
136
+ U === null || U === void 0 ? void 0 : U(), n("pause");
135
137
  },
136
138
  onTimeUpdate: ()=>{
137
- var _t_current;
138
- d !== "playing" && ((_t_current = t.current) === null || _t_current === void 0 ? void 0 : _t_current.currentTime) !== 0 && (N === null || N === void 0 ? void 0 : N(), n("play"));
139
+ var _r_current;
140
+ d !== "playing" && ((_r_current = r.current) === null || _r_current === void 0 ? void 0 : _r_current.currentTime) !== 0 && (j === null || j === void 0 ? void 0 : j(), n("play"));
139
141
  },
140
142
  onCanPlay: ()=>{
141
- p === "streaming" && R();
143
+ g === "streaming" && T();
142
144
  },
143
145
  onCanPlayThrough: ()=>{
144
- p !== "streaming" && R();
146
+ g !== "streaming" && T();
145
147
  },
146
- poster: K,
148
+ poster: z,
147
149
  style: {
148
- visibility: f ? "hidden" : "visible",
149
- position: f || A !== 0 ? "absolute" : "static",
150
+ visibility: m ? "hidden" : "visible",
151
+ position: m || A !== 0 ? "absolute" : "static",
150
152
  width: "100%",
151
153
  height: "100%"
152
154
  },
153
- children: x.map((param, g)=>{
154
- let { src: e, type: i } = param;
155
- return /* @__PURE__ */ a("source", {
156
- src: e,
157
- type: i
158
- }, g);
159
- })
160
- }), b = !!(A !== 0 || o.width && o.height), T = d === "error", U = s.useMemo(()=>l ? /* @__PURE__ */ a(B, {
161
- aspectRatio: u,
155
+ children: [
156
+ G.map((param, a)=>{
157
+ let { src: e, type: t } = param;
158
+ return /* @__PURE__ */ l("source", {
159
+ src: e,
160
+ type: t
161
+ }, a);
162
+ }),
163
+ v === null || v === void 0 ? void 0 : v.map((param, p)=>{
164
+ let { src: e, kind: t, srcLang: a, label: w, default: I } = param;
165
+ return /* @__PURE__ */ l("track", {
166
+ src: e,
167
+ kind: t,
168
+ srcLang: a,
169
+ label: w,
170
+ default: I
171
+ }, p);
172
+ })
173
+ ]
174
+ }), k = !!(A !== 0 || o.width && o.height), C = d === "error", V = s.useMemo(()=>u ? /* @__PURE__ */ l(q, {
175
+ aspectRatio: c,
162
176
  width: o.width,
163
177
  height: o.height,
164
- src: l
165
- }) : b ? /* @__PURE__ */ a("div", {
178
+ src: u
179
+ }) : k ? /* @__PURE__ */ l("div", {
166
180
  style: {
167
181
  position: "absolute",
168
182
  width: "100%",
169
183
  height: "100%"
170
184
  },
171
- children: /* @__PURE__ */ a(G, {
172
- className: E,
173
- withIcon: T
185
+ children: /* @__PURE__ */ l(J, {
186
+ className: S,
187
+ withIcon: C
174
188
  })
175
189
  }) : void 0, [
176
- u,
190
+ c,
177
191
  o.height,
178
192
  o.width,
179
- T,
180
- l,
181
- b
193
+ C,
194
+ u,
195
+ k
182
196
  ]);
183
- return /* @__PURE__ */ j(V, {
197
+ return /* @__PURE__ */ P(M, {
184
198
  style: {
185
199
  position: "relative"
186
200
  },
187
201
  aspectRatio: A,
188
202
  width: o.width,
189
203
  height: o.height,
190
- dataAttributes: Q(k, "Video"),
204
+ dataAttributes: Y(B, "Video"),
191
205
  children: [
192
- /* @__PURE__ */ a("div", {
206
+ /* @__PURE__ */ l("div", {
193
207
  style: {
194
208
  position: "absolute",
195
209
  width: "100%",
196
210
  height: "100%"
197
211
  },
198
212
  ref: (e)=>{
199
- const i = e || null;
200
- i && (i.play = ()=>{
201
- var _t_current;
202
- return ((_t_current = t.current) === null || _t_current === void 0 ? void 0 : _t_current.play()) || Promise.resolve();
203
- }, i.pause = ()=>{
204
- var _t_current;
205
- return (_t_current = t.current) === null || _t_current === void 0 ? void 0 : _t_current.pause();
206
- }, i.load = ()=>{
207
- var _h_current;
208
- ((_h_current = h.current) === null || _h_current === void 0 ? void 0 : _h_current.style) && (h.current.style.width = "100%", h.current.style.height = "100%"), setTimeout(()=>{
209
- var _t_current;
210
- n("reset"), (_t_current = t.current) === null || _t_current === void 0 ? void 0 : _t_current.load();
213
+ const t = e || null;
214
+ t && (t.play = ()=>{
215
+ var _r_current;
216
+ return ((_r_current = r.current) === null || _r_current === void 0 ? void 0 : _r_current.play()) || Promise.resolve();
217
+ }, t.pause = ()=>{
218
+ var _r_current;
219
+ return (_r_current = r.current) === null || _r_current === void 0 ? void 0 : _r_current.pause();
220
+ }, t.load = ()=>{
221
+ var _f_current;
222
+ ((_f_current = f.current) === null || _f_current === void 0 ? void 0 : _f_current.style) && (f.current.style.width = "100%", f.current.style.height = "100%"), setTimeout(()=>{
223
+ var _r_current;
224
+ n("reset"), (_r_current = r.current) === null || _r_current === void 0 ? void 0 : _r_current.load();
211
225
  }, 100);
212
- }, i.setCurrentTime = (g)=>{
213
- t.current && (t.current.currentTime = g);
214
- }, i.stop = ()=>{
215
- t.current && (t.current.pause(), t.current.currentTime = 0, n("stop"));
216
- }), typeof c == "function" ? c(i) : c && (c.current = i);
226
+ }, t.setCurrentTime = (a)=>{
227
+ r.current && (r.current.currentTime = a);
228
+ }, t.stop = ()=>{
229
+ r.current && (r.current.pause(), r.current.currentTime = 0, n("stop"));
230
+ }, t.setTrackMode = (a, w)=>{
231
+ var _r_current_querySelectorAll, _r_current;
232
+ const p = (_r_current = r.current) === null || _r_current === void 0 ? void 0 : (_r_current_querySelectorAll = _r_current.querySelectorAll("track")) === null || _r_current_querySelectorAll === void 0 ? void 0 : _r_current_querySelectorAll[a];
233
+ (p === null || p === void 0 ? void 0 : p.track) && (p.track.mode = w);
234
+ }), typeof h == "function" ? h(t) : h && (h.current = t);
217
235
  }
218
236
  }),
219
- L,
220
- /* @__PURE__ */ a("div", {
221
- ref: h,
237
+ O,
238
+ /* @__PURE__ */ l("div", {
239
+ ref: f,
222
240
  style: {
223
241
  position: A !== 0 ? "absolute" : "static",
224
- width: f ? "100%" : 0,
225
- height: f ? "100%" : 0,
242
+ width: m ? "100%" : 0,
243
+ height: m ? "100%" : 0,
226
244
  overflow: "hidden"
227
245
  },
228
- children: U
246
+ children: V
229
247
  })
230
248
  ]
231
249
  });
232
250
  });
233
- export { D as RATIO, te as default };
251
+ export { $ as RATIO, ne as default };
@@ -1,2 +1,2 @@
1
- /* empty css */ var _ = "v16_64_0-beta_1_1ezqdj90", a = "v16_64_0-beta_1_1ezqdj91";
2
- export { _ as container, a as waveFadeOut };
1
+ /* empty css */ var a = "v16_65_1ezqdj90", r = "v16_65_1ezqdj91";
2
+ export { a as container, r as waveFadeOut };
package/doc/components.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Components Reference
2
2
 
3
- All components are imported from `@telefonica/mistica`.
3
+ All components are imported from `@telefonica/mistica`. Before using any component, you should **always** read the definition .d.ts files located in `node_modules` so you have all the props and JSDoc context.
4
4
 
5
5
  ```tsx
6
6
  import {ButtonPrimary, Stack, Text2, ...} from '@telefonica/mistica';
package/doc/figma-mcp.md CHANGED
@@ -4,23 +4,6 @@ Mandatory reading whenever you are implementing UI from Figma through the Figma
4
4
  a `figma.com/...` URL. This file only covers the translation layer — the rest of the Mistica docs
5
5
  (`patterns.md`, `components.md`, `layout.md`, `design-tokens.md`) still apply.
6
6
 
7
- ## Step 0: ask the user whether to run the verifier
8
-
9
- Before fetching any Figma node or writing any code, ask the user this question exactly once (use a
10
- structured-question tool if your harness has one):
11
-
12
- - **Question**:
13
- `Run the verifier loop after implementing? It compares the rendered app against Figma both visually (Playwright screenshot) and structurally (DOM + rule audit), then iterates fixes.`
14
- - **Options**:
15
- - **Yes, run the verifier** — recommended when fidelity matters. Catches drift the implementer can't see. It
16
- will take more time and cost more tokens.
17
- - **No, skip the verifier** — faster path. The agent still self-checks and reviews its work, but no
18
- independent comparison runs.
19
-
20
- Remember the answer for the rest of this task. **One answer covers the whole implementation — do not re-ask
21
- per section.** If the user opted in, run the (verifier loop)[#verifier-loop-run-before-declaring-done]. If
22
- they opted out, do not spawn the verifier; the self-checks are the only gate.
23
-
24
7
  ## Prime directive: read the DOM verbatim
25
8
 
26
9
  The Figma MCP response gives you two things:
@@ -151,21 +134,3 @@ Before closing out a section always:
151
134
 
152
135
  If you can't check an item off against the DOM, re-read the DOM (with `disableCodeConnect: true` if the node
153
136
  is CodeConnect-mapped) before committing the value.
154
-
155
- ## Verifier loop (run before declaring done)
156
-
157
- Skip if the user opted out in [Step 0](#step-0-ask-the-user-whether-to-run-the-verifier).
158
-
159
- Spawn a **new** subagent (via your harness's subagent mechanism — e.g. Claude's `Agent` tool with
160
- `subagent_type: general-purpose`, Codex's equivalent) pointed at
161
- [agents/figma-verifier.md](./agents/figma-verifier.md). Never reuse a subagent across iterations. Pass in the
162
- prompt:
163
-
164
- - Figma `fileKey` and entry `nodeId`
165
- - Implementation file paths you wrote or edited
166
- - Local assets directory
167
- - Dev-server command and URL (check `package.json`)
168
-
169
- If the verifier reports clean, done. Otherwise fix the cited issues — each fix justified by Figma DOM or
170
- screenshot — and re-run with a fresh subagent. Stop after clean, 3 iterations, or out-of-scope issues (missing
171
- tokens/assets, designer clarification — surface these instead of fudging).
package/doc/layout.md CHANGED
@@ -11,6 +11,7 @@
11
11
  - [around](#around)
12
12
  - [evenly](#evenly)
13
13
  - [nesting](#nesting)
14
+ - [Grow](#grow)
14
15
  - [Align](#align)
15
16
  - [Grid / GridItem](#grid--griditem)
16
17
  - [NegativeBox](#negativebox)
@@ -49,7 +50,7 @@ spacing. All padding props accept a numeric value or a responsive object `{mobil
49
50
 
50
51
  ```tsx
51
52
  <Box paddingX={16} paddingY={32}>
52
- <Child />
53
+ <Text2>Example</Text2>
53
54
  </Box>
54
55
  ```
55
56
 
@@ -57,6 +58,14 @@ spacing. All padding props accept a numeric value or a responsive object `{mobil
57
58
 
58
59
  :warning: Do not use `Box` to add external spacings or distribute items, instead use `Stack` or `Inline`.
59
60
 
61
+ You can also use Box as a fixed width container:
62
+
63
+ ```tsx
64
+ <Box width={80}>
65
+ <Text2>Example</Text2>
66
+ </Box>
67
+ ```
68
+
60
69
  ## Stack
61
70
 
62
71
  Vertically distributes its children using the given `space` separation.
@@ -159,6 +168,41 @@ with a value on the right via `space="between"`:
159
168
  The outer `Inline` distributes the two groups to opposite ends; the inner `Inline` keeps the icon tightly
160
169
  grouped with its label at a fixed gap.
161
170
 
171
+ ### Grow
172
+
173
+ Use the `expand` prop to make one or more children of an `Inline` grow to fill the remaining horizontal space.
174
+ It takes the index (or an array of indexes) of the children that should grow. Indexes follow
175
+ `React.Children.toArray` order, so empty nodes (`null`, `false`) are skipped but rendered elements always
176
+ count. You don't wrap the growing child in anything — `Inline` already wraps every child in its own element:
177
+
178
+ ```tsx
179
+ <Inline space={56} alignItems="center" expand={1}>
180
+ <Text7>4,6</Text7>
181
+ <InfoRating
182
+ value={4}
183
+ icon={{
184
+ ActiveIcon: IconStarFilled,
185
+ InactiveIcon: IconStarLight,
186
+ color: skinVars.colors.textPrimary,
187
+ }}
188
+ />
189
+ <Text3 regular>150 valoraciones</Text3>
190
+ </Inline>
191
+ ```
192
+
193
+ ```tsx
194
+ <Inline space={16} alignItems="center" expand={[1, 2]}>
195
+ <IconTruckRegular size={24} color={skinVars.colors.neutralHigh} />
196
+ <TextField name="firstName" label="First name" fullWidth />
197
+ <TextField name="lastName" label="Last name" fullWidth />
198
+ </Inline>
199
+ ```
200
+
201
+ **Common mistakes.** `Inline` wraps each child in its own element, so growing a child by wrapping it in a
202
+ `<div style={{flex: 1}}>` (or `flex-grow`) does nothing useful. Neither does `<Box style={{...}}>` — `Box` has
203
+ no `style` prop, so a flex or width passed that way is silently dropped and the row collapses or overflows its
204
+ container. Reach for `expand` (and `<Box width={N}>` for any fixed sibling) instead.
205
+
162
206
  ## Align
163
207
 
164
208
  Positions its children within a container using CSS grid alignment. Useful for centering content or placing it
package/doc/patterns.md CHANGED
@@ -97,6 +97,29 @@ Follow the 24/32/16 rule:
97
97
  </Stack>
98
98
  ```
99
99
 
100
+ ### DO: Fill remaining horizontal space with `Inline` `expand`
101
+
102
+ To make a row child grow into the leftover width next to a fixed-width sibling, use `Inline`'s `expand` prop
103
+ with the index/indexes of the children that should grow. Indexes follow `React.Children.toArray` order.
104
+
105
+ ```tsx
106
+ // ProgressBar fills remaining space
107
+ <Inline space={24} expand={1} alignItems="center">
108
+ <Icon2GFilled />
109
+ <ProgressBar progressPercent={30} />
110
+ </Inline>
111
+ ```
112
+
113
+ ### DON'T: grow children with raw flex or `style` on `Box`
114
+
115
+ ```tsx
116
+ // ❌ raw flexbox div — breaks; Inline already wraps each child in a div
117
+ <div style={{display: 'flex'}}>
118
+ <div style={{flex: 1}}>...</div>
119
+ <div style={{flex: '0 0 394px'}}>...</div>
120
+ </div>
121
+ ```
122
+
100
123
  ## Color dos and don'ts
101
124
 
102
125
  ### DO: Use design tokens
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telefonica/mistica",
3
- "version": "16.64.0-beta.1",
3
+ "version": "16.65.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import ExampleComponent from '../../cyber/example-component';
3
+
4
+ export default {
5
+ title: 'Community/Cyber/ExampleComponent',
6
+ parameters: {
7
+ fullScreen: true,
8
+ },
9
+ };
10
+
11
+ export const Default: StoryComponent = () => {
12
+ return <ExampleComponent>Cyber example story</ExampleComponent>;
13
+ };
14
+
15
+ Default.storyName = 'ExampleComponent';
@@ -0,0 +1,7 @@
1
+ import {style} from '@vanilla-extract/css';
2
+ import {vars} from '../../skins/skin-contract.css';
3
+
4
+ export const example = style({
5
+ backgroundColor: vars.colors.brand,
6
+ color: vars.colors.textPrimaryInverse,
7
+ });
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+ import * as styles from './example-component.css';
3
+ import Box from '../../box';
4
+
5
+ type Props = {
6
+ children: React.ReactNode;
7
+ };
8
+
9
+ const ExampleComponent = (props: Props): JSX.Element => {
10
+ return (
11
+ <div className={styles.example}>
12
+ <Box padding={16}>{props.children}</Box>
13
+ </div>
14
+ );
15
+ };
16
+
17
+ export default ExampleComponent;
@@ -0,0 +1 @@
1
+ export {default as ExampleComponent} from './example-component';
@@ -9,3 +9,6 @@ export {
9
9
  ValueBlock,
10
10
  ProgressBlock,
11
11
  } from './blocks';
12
+
13
+ export {ExampleComponent as CyberExampleComponent} from './cyber';
14
+ export {getCyberSkin, CYBER_SKIN} from './skins/cyber-skin';