@zentauri-ui/zentauri-components 1.8.1 → 1.8.3

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 (195) hide show
  1. package/README.md +123 -25
  2. package/cli/cli.integration.test.ts +77 -2
  3. package/cli/index.mjs +53 -0
  4. package/cli/registry.json +136 -0
  5. package/cli/rewrite-imports.mjs +4 -1
  6. package/dist/charts/area.js +9 -10
  7. package/dist/charts/area.js.map +1 -1
  8. package/dist/charts/area.mjs +2 -3
  9. package/dist/charts/area.mjs.map +1 -1
  10. package/dist/charts/bar.js +10 -95
  11. package/dist/charts/bar.js.map +1 -1
  12. package/dist/charts/bar.mjs +2 -95
  13. package/dist/charts/bar.mjs.map +1 -1
  14. package/dist/charts/bubble.js +8 -9
  15. package/dist/charts/bubble.js.map +1 -1
  16. package/dist/charts/bubble.mjs +2 -3
  17. package/dist/charts/bubble.mjs.map +1 -1
  18. package/dist/charts/funnel/Funnel.d.ts +6 -0
  19. package/dist/charts/funnel/Funnel.d.ts.map +1 -0
  20. package/dist/charts/funnel/index.d.ts +4 -0
  21. package/dist/charts/funnel/index.d.ts.map +1 -0
  22. package/dist/charts/funnel.js +102 -0
  23. package/dist/charts/funnel.js.map +1 -0
  24. package/dist/charts/funnel.mjs +89 -0
  25. package/dist/charts/funnel.mjs.map +1 -0
  26. package/dist/charts/line.js +8 -9
  27. package/dist/charts/line.js.map +1 -1
  28. package/dist/charts/line.mjs +2 -3
  29. package/dist/charts/line.mjs.map +1 -1
  30. package/dist/charts/pie/Pie.d.ts +1 -1
  31. package/dist/charts/pie/Pie.d.ts.map +1 -1
  32. package/dist/charts/pie.js +19 -6
  33. package/dist/charts/pie.js.map +1 -1
  34. package/dist/charts/pie.mjs +17 -4
  35. package/dist/charts/pie.mjs.map +1 -1
  36. package/dist/charts/radar/Radar.d.ts +6 -0
  37. package/dist/charts/radar/Radar.d.ts.map +1 -0
  38. package/dist/charts/radar/index.d.ts +4 -0
  39. package/dist/charts/radar/index.d.ts.map +1 -0
  40. package/dist/charts/radar.js +94 -0
  41. package/dist/charts/radar.js.map +1 -0
  42. package/dist/charts/radar.mjs +81 -0
  43. package/dist/charts/radar.mjs.map +1 -0
  44. package/dist/charts/scatter/Scatter.d.ts +6 -0
  45. package/dist/charts/scatter/Scatter.d.ts.map +1 -0
  46. package/dist/charts/scatter/index.d.ts +4 -0
  47. package/dist/charts/scatter/index.d.ts.map +1 -0
  48. package/dist/charts/scatter.js +116 -0
  49. package/dist/charts/scatter.js.map +1 -0
  50. package/dist/charts/scatter.mjs +103 -0
  51. package/dist/charts/scatter.mjs.map +1 -0
  52. package/dist/charts/shared/chart-frame.d.ts +2 -1
  53. package/dist/charts/shared/chart-frame.d.ts.map +1 -1
  54. package/dist/charts/shared/types.d.ts +22 -2
  55. package/dist/charts/shared/types.d.ts.map +1 -1
  56. package/dist/charts/stacked-bar/StackedBar.d.ts +6 -0
  57. package/dist/charts/stacked-bar/StackedBar.d.ts.map +1 -0
  58. package/dist/charts/stacked-bar/index.d.ts +4 -0
  59. package/dist/charts/stacked-bar/index.d.ts.map +1 -0
  60. package/dist/charts/stacked-bar.js +29 -0
  61. package/dist/charts/stacked-bar.js.map +1 -0
  62. package/dist/charts/stacked-bar.mjs +15 -0
  63. package/dist/charts/stacked-bar.mjs.map +1 -0
  64. package/dist/{chunk-ABOZ5QIX.js → chunk-466QDL44.js} +5 -12
  65. package/dist/chunk-466QDL44.js.map +1 -0
  66. package/dist/chunk-4ZP444GA.mjs +19 -0
  67. package/dist/chunk-4ZP444GA.mjs.map +1 -0
  68. package/dist/{chunk-HDO5ZM2S.mjs → chunk-CIEZFHCO.mjs} +3 -10
  69. package/dist/chunk-CIEZFHCO.mjs.map +1 -0
  70. package/dist/chunk-F3V4POW3.mjs +8 -0
  71. package/dist/chunk-F3V4POW3.mjs.map +1 -0
  72. package/dist/{chunk-G2WARVAM.mjs → chunk-HZIRD3SR.mjs} +35 -15
  73. package/dist/chunk-HZIRD3SR.mjs.map +1 -0
  74. package/dist/{chunk-G66SXATZ.js → chunk-IL4LH2XX.js} +50 -4
  75. package/dist/chunk-IL4LH2XX.js.map +1 -0
  76. package/dist/{chunk-QQ6F4LZK.js → chunk-JFS5PJSH.js} +5 -5
  77. package/dist/{chunk-QQ6F4LZK.js.map → chunk-JFS5PJSH.js.map} +1 -1
  78. package/dist/chunk-LREMK2XR.js +97 -0
  79. package/dist/chunk-LREMK2XR.js.map +1 -0
  80. package/dist/chunk-MUP7DVQR.js +26 -0
  81. package/dist/chunk-MUP7DVQR.js.map +1 -0
  82. package/dist/chunk-O2KM3ETC.mjs +95 -0
  83. package/dist/chunk-O2KM3ETC.mjs.map +1 -0
  84. package/dist/{chunk-ZIFMIS7D.mjs → chunk-OL3BJSRC.mjs} +51 -5
  85. package/dist/chunk-OL3BJSRC.mjs.map +1 -0
  86. package/dist/{chunk-QNUDODDX.js → chunk-PWPMKXEG.js} +36 -14
  87. package/dist/chunk-PWPMKXEG.js.map +1 -0
  88. package/dist/{chunk-ASJQP53L.mjs → chunk-VARQ7W4G.mjs} +3 -3
  89. package/dist/{chunk-ASJQP53L.mjs.map → chunk-VARQ7W4G.mjs.map} +1 -1
  90. package/dist/chunk-XRM7GOIE.js +10 -0
  91. package/dist/chunk-XRM7GOIE.js.map +1 -0
  92. package/dist/design-system/tokens.js +32 -0
  93. package/dist/design-system/tokens.js.map +1 -0
  94. package/dist/design-system/tokens.mjs +3 -0
  95. package/dist/design-system/tokens.mjs.map +1 -0
  96. package/dist/hooks/index.d.ts +2 -0
  97. package/dist/hooks/index.d.ts.map +1 -1
  98. package/dist/hooks/useIsomorphicLayoutEffect.js +6 -4
  99. package/dist/hooks/useIsomorphicLayoutEffect.js.map +1 -1
  100. package/dist/hooks/useIsomorphicLayoutEffect.mjs +1 -6
  101. package/dist/hooks/useIsomorphicLayoutEffect.mjs.map +1 -1
  102. package/dist/hooks/useTableFilter/index.d.ts +3 -0
  103. package/dist/hooks/useTableFilter/index.d.ts.map +1 -0
  104. package/dist/hooks/useTableFilter/types.d.ts +20 -0
  105. package/dist/hooks/useTableFilter/types.d.ts.map +1 -0
  106. package/dist/hooks/useTableFilter/useTableFilter.d.ts +3 -0
  107. package/dist/hooks/useTableFilter/useTableFilter.d.ts.map +1 -0
  108. package/dist/hooks/useTableFilter.js +124 -0
  109. package/dist/hooks/useTableFilter.js.map +1 -0
  110. package/dist/hooks/useTableFilter.mjs +122 -0
  111. package/dist/hooks/useTableFilter.mjs.map +1 -0
  112. package/dist/hooks/useTableSort/index.d.ts +3 -0
  113. package/dist/hooks/useTableSort/index.d.ts.map +1 -0
  114. package/dist/hooks/useTableSort/types.d.ts +15 -0
  115. package/dist/hooks/useTableSort/types.d.ts.map +1 -0
  116. package/dist/hooks/useTableSort/useTableSort.d.ts +3 -0
  117. package/dist/hooks/useTableSort/useTableSort.d.ts.map +1 -0
  118. package/dist/hooks/useTableSort.js +99 -0
  119. package/dist/hooks/useTableSort.js.map +1 -0
  120. package/dist/hooks/useTableSort.mjs +97 -0
  121. package/dist/hooks/useTableSort.mjs.map +1 -0
  122. package/dist/ui/buttons/animated.js +4 -3
  123. package/dist/ui/buttons/animated.js.map +1 -1
  124. package/dist/ui/buttons/animated.mjs +2 -1
  125. package/dist/ui/buttons/animated.mjs.map +1 -1
  126. package/dist/ui/buttons.js +5 -4
  127. package/dist/ui/buttons.mjs +3 -2
  128. package/dist/ui/dynamic-stepper.js +5 -4
  129. package/dist/ui/dynamic-stepper.js.map +1 -1
  130. package/dist/ui/dynamic-stepper.mjs +3 -2
  131. package/dist/ui/dynamic-stepper.mjs.map +1 -1
  132. package/dist/ui/marquee/marquee.d.ts.map +1 -1
  133. package/dist/ui/marquee.js +82 -21
  134. package/dist/ui/marquee.js.map +1 -1
  135. package/dist/ui/marquee.mjs +83 -22
  136. package/dist/ui/marquee.mjs.map +1 -1
  137. package/dist/ui/pagination.js +5 -4
  138. package/dist/ui/pagination.js.map +1 -1
  139. package/dist/ui/pagination.mjs +2 -1
  140. package/dist/ui/pagination.mjs.map +1 -1
  141. package/dist/ui/table/animated.js +8 -8
  142. package/dist/ui/table/animated.mjs +2 -2
  143. package/dist/ui/table/index.d.ts +1 -1
  144. package/dist/ui/table/index.d.ts.map +1 -1
  145. package/dist/ui/table/table-base.d.ts +2 -2
  146. package/dist/ui/table/table-base.d.ts.map +1 -1
  147. package/dist/ui/table/types.d.ts +9 -1
  148. package/dist/ui/table/types.d.ts.map +1 -1
  149. package/dist/ui/table.js +14 -14
  150. package/dist/ui/table.mjs +1 -1
  151. package/package.json +8 -2
  152. package/src/charts/charts.test.tsx +80 -0
  153. package/src/charts/funnel/Funnel.tsx +105 -0
  154. package/src/charts/funnel/index.ts +14 -0
  155. package/src/charts/pie/Pie.tsx +28 -1
  156. package/src/charts/radar/Radar.tsx +84 -0
  157. package/src/charts/radar/index.ts +16 -0
  158. package/src/charts/scatter/Scatter.tsx +104 -0
  159. package/src/charts/scatter/index.ts +16 -0
  160. package/src/charts/shared/chart-frame.tsx +4 -2
  161. package/src/charts/shared/types.ts +42 -2
  162. package/src/charts/stacked-bar/StackedBar.tsx +12 -0
  163. package/src/charts/stacked-bar/index.ts +16 -0
  164. package/src/hooks/index.ts +12 -0
  165. package/src/hooks/useTableFilter/index.ts +7 -0
  166. package/src/hooks/useTableFilter/types.ts +28 -0
  167. package/src/hooks/useTableFilter/useTableFilter.test.ts +141 -0
  168. package/src/hooks/useTableFilter/useTableFilter.ts +153 -0
  169. package/src/hooks/useTableSort/index.ts +5 -0
  170. package/src/hooks/useTableSort/types.ts +23 -0
  171. package/src/hooks/useTableSort/useTableSort.test.ts +150 -0
  172. package/src/hooks/useTableSort/useTableSort.ts +121 -0
  173. package/src/ui/context-menu/context-menu.test.tsx +30 -0
  174. package/src/ui/divider/divider.test.tsx +55 -0
  175. package/src/ui/empty-state/empty-state.test.tsx +88 -0
  176. package/src/ui/marquee/marquee.test.tsx +45 -4
  177. package/src/ui/marquee/marquee.tsx +100 -18
  178. package/src/ui/modal/modal.test.tsx +24 -0
  179. package/src/ui/peer-isolation.test.ts +81 -0
  180. package/src/ui/select/select.test.tsx +98 -2
  181. package/src/ui/skeleton/skeleton.test.tsx +85 -0
  182. package/src/ui/table/index.ts +3 -0
  183. package/src/ui/table/table-base.tsx +69 -4
  184. package/src/ui/table/table.test.tsx +207 -0
  185. package/src/ui/table/types.ts +13 -1
  186. package/dist/chunk-ABOZ5QIX.js.map +0 -1
  187. package/dist/chunk-G2WARVAM.mjs.map +0 -1
  188. package/dist/chunk-G66SXATZ.js.map +0 -1
  189. package/dist/chunk-HDO5ZM2S.mjs.map +0 -1
  190. package/dist/chunk-OULU7OC4.mjs +0 -21
  191. package/dist/chunk-OULU7OC4.mjs.map +0 -1
  192. package/dist/chunk-QNUDODDX.js.map +0 -1
  193. package/dist/chunk-Z6S36PDD.js +0 -24
  194. package/dist/chunk-Z6S36PDD.js.map +0 -1
  195. package/dist/chunk-ZIFMIS7D.mjs.map +0 -1
@@ -1,7 +1,9 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var chunkXRM7GOIE_js = require('../chunk-XRM7GOIE.js');
4
5
  var chunkZS5756ZC_js = require('../chunk-ZS5756ZC.js');
6
+ var react = require('react');
5
7
  var classVarianceAuthority = require('class-variance-authority');
6
8
  var jsxRuntime = require('react/jsx-runtime');
7
9
 
@@ -68,6 +70,13 @@ function toCssLength(value) {
68
70
  }
69
71
  return typeof value === "number" ? `${value}px` : value;
70
72
  }
73
+ function assignRef(ref, value) {
74
+ if (typeof ref === "function") {
75
+ ref(value);
76
+ } else if (ref) {
77
+ ref.current = value;
78
+ }
79
+ }
71
80
  function Marquee(props) {
72
81
  const {
73
82
  appearance,
@@ -90,14 +99,62 @@ function Marquee(props) {
90
99
  const resolvedDirection = direction ?? (resolvedOrientation === "vertical" ? "up" : "left");
91
100
  const isReverse = resolvedDirection === "right" || resolvedDirection === "down";
92
101
  const animationName = resolvedOrientation === "vertical" ? "zui-marquee-y" : "zui-marquee-x";
102
+ const rootRef = react.useRef(null);
103
+ const measureRef = react.useRef(null);
104
+ const [copyCount, setCopyCount] = react.useState(1);
105
+ const childArray = react.useMemo(() => react.Children.toArray(children), [children]);
106
+ const setRootRef = react.useCallback(
107
+ (node) => {
108
+ rootRef.current = node;
109
+ assignRef(ref, node);
110
+ },
111
+ [ref]
112
+ );
93
113
  const marqueeStyle = {
94
114
  ...gap !== void 0 ? { "--zui-marquee-gap": toCssLength(gap) } : null,
95
115
  ...style
96
116
  };
117
+ const groupClassName = chunkZS5756ZC_js.cn(
118
+ "flex shrink-0 items-center justify-around gap-(--zui-marquee-gap)",
119
+ resolvedOrientation === "vertical" ? "flex-col" : "flex-row",
120
+ itemClassName
121
+ );
122
+ const fillerChildren = Array.from(
123
+ { length: Math.max(0, copyCount - 1) },
124
+ (_, index) => /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": "true", inert: true, className: "contents", children: childArray }, index)
125
+ );
126
+ chunkXRM7GOIE_js.useIsomorphicLayoutEffect(() => {
127
+ const updateCopyCount = () => {
128
+ const root = rootRef.current;
129
+ const measure = measureRef.current;
130
+ if (!root || !measure) {
131
+ return;
132
+ }
133
+ const rootSize = resolvedOrientation === "vertical" ? root.offsetHeight : root.offsetWidth;
134
+ const contentSize = resolvedOrientation === "vertical" ? measure.scrollHeight : measure.scrollWidth;
135
+ if (!rootSize || !contentSize) {
136
+ setCopyCount(1);
137
+ return;
138
+ }
139
+ setCopyCount(Math.max(1, Math.ceil(rootSize / contentSize)));
140
+ };
141
+ updateCopyCount();
142
+ if (typeof ResizeObserver === "undefined") {
143
+ return;
144
+ }
145
+ const observer = new ResizeObserver(updateCopyCount);
146
+ if (rootRef.current) {
147
+ observer.observe(rootRef.current);
148
+ }
149
+ if (measureRef.current) {
150
+ observer.observe(measureRef.current);
151
+ }
152
+ return () => observer.disconnect();
153
+ }, [childArray, gap, resolvedOrientation]);
97
154
  return /* @__PURE__ */ jsxRuntime.jsxs(
98
155
  "div",
99
156
  {
100
- ref,
157
+ ref: setRootRef,
101
158
  "data-direction": resolvedDirection,
102
159
  "data-orientation": resolvedOrientation,
103
160
  "data-slot": "marquee",
@@ -114,12 +171,25 @@ function Marquee(props) {
114
171
  ...rest,
115
172
  children: [
116
173
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: marqueeKeyframes }),
174
+ /* @__PURE__ */ jsxRuntime.jsx(
175
+ "div",
176
+ {
177
+ "aria-hidden": "true",
178
+ "data-slot": "marquee-measure",
179
+ ref: measureRef,
180
+ className: chunkZS5756ZC_js.cn(
181
+ "pointer-events-none invisible absolute -z-10",
182
+ groupClassName
183
+ ),
184
+ children: childArray
185
+ }
186
+ ),
117
187
  /* @__PURE__ */ jsxRuntime.jsxs(
118
188
  "div",
119
189
  {
120
190
  "data-slot": "marquee-track",
121
191
  className: chunkZS5756ZC_js.cn(
122
- "flex shrink-0 gap-[var(--zui-marquee-gap)] will-change-transform [animation-iteration-count:infinite] [animation-timing-function:linear] motion-reduce:[animation-play-state:paused]",
192
+ "flex shrink-0 gap-(--zui-marquee-gap) will-change-transform [animation-iteration-count:infinite] [animation-timing-function:linear] motion-reduce:[animation-play-state:paused]",
123
193
  resolvedOrientation === "vertical" ? "flex-col" : "w-max flex-row",
124
194
  pauseOnHover && "group-hover/marquee:[animation-play-state:paused]",
125
195
  isReverse && "[animation-direction:reverse]",
@@ -130,30 +200,21 @@ function Marquee(props) {
130
200
  animationName
131
201
  },
132
202
  children: [
133
- /* @__PURE__ */ jsxRuntime.jsx(
134
- "div",
135
- {
136
- "data-slot": "marquee-item-group",
137
- className: chunkZS5756ZC_js.cn(
138
- "flex shrink-0 items-center justify-around gap-[var(--zui-marquee-gap)]",
139
- resolvedOrientation === "vertical" ? "flex-col" : "flex-row",
140
- itemClassName
141
- ),
142
- children
143
- }
144
- ),
145
- /* @__PURE__ */ jsxRuntime.jsx(
203
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "marquee-item-group", className: groupClassName, children: [
204
+ childArray,
205
+ fillerChildren
206
+ ] }),
207
+ /* @__PURE__ */ jsxRuntime.jsxs(
146
208
  "div",
147
209
  {
148
210
  "aria-hidden": "true",
149
211
  inert: true,
150
212
  "data-slot": "marquee-item-group",
151
- className: chunkZS5756ZC_js.cn(
152
- "flex shrink-0 items-center justify-around gap-[var(--zui-marquee-gap)]",
153
- resolvedOrientation === "vertical" ? "flex-col" : "flex-row",
154
- itemClassName
155
- ),
156
- children
213
+ className: groupClassName,
214
+ children: [
215
+ childArray,
216
+ fillerChildren
217
+ ]
157
218
  }
158
219
  )
159
220
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/design-system/marquee.ts","../../src/ui/marquee/variants.ts","../../src/ui/marquee/marquee.tsx"],"names":["cva","jsxs","cn","jsx"],"mappings":";;;;;;;AAAO,IAAM,cAAA,GACX,6MAAA;AAEK,IAAM,qBAAA,GAAwB;AAAA,EACnC,OAAA,EACE,8GAAA;AAAA,EACF,OAAA,EACE,+TAAA;AAAA,EACF,KAAA,EACE,iIAAA;AAAA,EACF,IAAA,EAAM,gZAAA;AAAA,EACN,SAAA,EACE,qTAAA;AAAA,EACF,GAAA,EAAK,8WAAA;AAAA,EACL,IAAA,EAAM,uWAAA;AAAA,EACN,MAAA,EACE,qXAAA;AAAA,EACF,IAAA,EAAM,+WAAA;AAAA,EACN,MAAA,EACE,8WAAA;AAAA,EACF,MAAA,EACE,mXAAA;AAAA,EACF,IAAA,EAAM,kXAAA;AAAA,EACN,MAAA,EACE,sXAAA;AAAA,EACF,OAAA,EACE,oXAAA;AAAA,EACF,eAAA,EACE,0MAAA;AAAA,EACF,gBAAA,EACE,4MAAA;AAAA,EACF,cAAA,EACE,sMAAA;AAAA,EACF,iBAAA,EACE,8NAAA;AAAA,EACF,iBAAA,EACE,4MAAA;AAAA,EACF,eAAA,EACE,yMAAA;AAAA,EACF,iBAAA,EACE,8MAAA;AAAA,EACF,eAAA,EACE,0MAAA;AAAA,EACF,iBAAA,EACE;AACJ,CAAA;AAEO,IAAM,sBAAA,GAAyB;AAAA,EACpC,UAAA,EAAY,iBAAA;AAAA,EACZ,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,eAAA,GAAkB;AAAA,EAC7B,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,cAAA,GAAiB;AAAA,EAC5B,KAAA,EAAO,EAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;;;ACnDO,IAAM,eAAA,GAAkBA,2BAAI,cAAA,EAAgB;AAAA,EACjD,QAAA,EAAU;AAAA,IACR,UAAA,EAAY,qBAAA;AAAA,IACZ,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,sBAAA;AAAA,IACb,IAAA,EAAM;AAAA,GACR;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,UAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAM,IAAA;AAAA,IACN,WAAA,EAAa,YAAA;AAAA,IACb,IAAA,EAAM;AAAA;AAEV,CAAC;ACdD,IAAM,gBAAA,GAAmB,CAAA,gQAAA,CAAA;AAEzB,SAAS,YAAY,KAAA,EAAoC;AACvD,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,GAAO,KAAA;AACpD;AAEO,SAAS,QAAQ,KAAA,EAAqB;AAC3C,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA,GAAe,KAAA;AAAA,IACf,GAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,GAAQ,EAAA;AAAA,IACR,KAAA;AAAA,IACA,cAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,sBACJ,WAAA,KACC,SAAA,KAAc,IAAA,IAAQ,SAAA,KAAc,SAAS,UAAA,GAAa,YAAA,CAAA;AAC7D,EAAA,MAAM,iBAAA,GACJ,SAAA,KAAc,mBAAA,KAAwB,UAAA,GAAa,IAAA,GAAO,MAAA,CAAA;AAC5D,EAAA,MAAM,SAAA,GACJ,iBAAA,KAAsB,OAAA,IAAW,iBAAA,KAAsB,MAAA;AACzD,EAAA,MAAM,aAAA,GACJ,mBAAA,KAAwB,UAAA,GAAa,eAAA,GAAkB,eAAA;AACzD,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAI,QAAQ,MAAA,GAAY,EAAE,qBAAqB,WAAA,CAAY,GAAG,GAAE,GAAI,IAAA;AAAA,IACpE,GAAG;AAAA,GACL;AAEA,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,gBAAA,EAAgB,iBAAA;AAAA,MAChB,kBAAA,EAAkB,mBAAA;AAAA,MAClB,WAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAWC,mBAAA;AAAA,QACT,eAAA,CAAgB;AAAA,UACd,UAAA;AAAA,UACA,IAAA;AAAA,UACA,WAAA,EAAa,mBAAA;AAAA,UACb;AAAA,SACD,CAAA;AAAA,QACD;AAAA,OACF;AAAA,MACA,KAAA,EAAO,YAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,WAAO,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,wBACzBF,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,eAAA;AAAA,YACV,SAAA,EAAWC,mBAAA;AAAA,cACT,sLAAA;AAAA,cACA,mBAAA,KAAwB,aAAa,UAAA,GAAa,gBAAA;AAAA,cAClD,YAAA,IAAgB,mDAAA;AAAA,cAChB,SAAA,IAAa,+BAAA;AAAA,cACb;AAAA,aACF;AAAA,YACA,KAAA,EACE;AAAA,cACE,iBAAA,EAAmB,GAAG,KAAK,CAAA,CAAA,CAAA;AAAA,cAC3B;AAAA,aACF;AAAA,YAGF,QAAA,EAAA;AAAA,8BAAAC,cAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,WAAA,EAAU,oBAAA;AAAA,kBACV,SAAA,EAAWD,mBAAA;AAAA,oBACT,wEAAA;AAAA,oBACA,mBAAA,KAAwB,aAAa,UAAA,GAAa,UAAA;AAAA,oBAClD;AAAA,mBACF;AAAA,kBAEC;AAAA;AAAA,eACH;AAAA,8BACAC,cAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAY,MAAA;AAAA,kBACZ,KAAA,EAAK,IAAA;AAAA,kBACL,WAAA,EAAU,oBAAA;AAAA,kBACV,SAAA,EAAWD,mBAAA;AAAA,oBACT,wEAAA;AAAA,oBACA,mBAAA,KAAwB,aAAa,UAAA,GAAa,UAAA;AAAA,oBAClD;AAAA,mBACF;AAAA,kBAEC;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AAEA,OAAA,CAAQ,WAAA,GAAc,SAAA","file":"marquee.js","sourcesContent":["export const zuiMarqueeBase =\n \"group/marquee relative isolate flex min-w-0 overflow-hidden rounded-xl border border-transparent bg-[var(--zui-marquee-bg,transparent)] text-[color:var(--zui-marquee-fg,inherit)] [--zui-marquee-gap:1rem]\";\n\nexport const zuiMarqueeAppearances = {\n default:\n \"[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]\",\n outline:\n \"border-[color:var(--zui-marquee-outline-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:#ffffff] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-outline-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-bg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]\",\n ghost:\n \"[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(27.9%_0.041_260.031)] dark:[--zui-marquee-fg:oklch(96.8%_0.007_247.896)]\",\n card: \"border-[color:var(--zui-marquee-card-border,oklch(92.9%_0.013_255.508))] bg-[var(--zui-marquee-card-bg,#ffffff)] shadow-sm shadow-slate-950/5 [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-card-border-dark,oklch(37.2%_0.044_257.287))] dark:bg-[var(--zui-marquee-card-bg-dark,oklch(20.8%_0.042_265.755_/_0.9))] dark:shadow-black/20 dark:[--zui-marquee-fg:#ffffff]\",\n separated:\n \"border-y border-x-0 rounded-none border-[color:var(--zui-marquee-separated-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-separated-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-fg:#ffffff]\",\n sky: \"border-[color:var(--zui-marquee-sky-border,oklch(62.3%_0.214_259.815_/_0.28))] [--zui-marquee-bg:oklch(97.7%_0.013_236.62)] [--zui-marquee-fg:oklch(39.1%_0.09_240.876)] dark:border-[color:var(--zui-marquee-sky-border-dark,oklch(70.7%_0.165_254.624_/_0.3))] dark:[--zui-marquee-bg:oklch(39.1%_0.09_240.876_/_0.28)] dark:[--zui-marquee-fg:oklch(95.1%_0.026_236.824)]\",\n rose: \"border-[color:var(--zui-marquee-rose-border,oklch(58.6%_0.253_17.585_/_0.24))] [--zui-marquee-bg:oklch(96.9%_0.015_12.422)] [--zui-marquee-fg:oklch(41%_0.159_10.272)] dark:border-[color:var(--zui-marquee-rose-border-dark,oklch(71.2%_0.194_13.428_/_0.3))] dark:[--zui-marquee-bg:oklch(41%_0.159_10.272_/_0.28)] dark:[--zui-marquee-fg:oklch(94.1%_0.03_12.58)]\",\n purple:\n \"border-[color:var(--zui-marquee-purple-border,oklch(62.7%_0.265_303.9_/_0.24))] [--zui-marquee-bg:oklch(97.7%_0.014_308.299)] [--zui-marquee-fg:oklch(38.1%_0.176_304.987)] dark:border-[color:var(--zui-marquee-purple-border-dark,oklch(71.4%_0.203_305.504_/_0.3))] dark:[--zui-marquee-bg:oklch(38.1%_0.176_304.987_/_0.28)] dark:[--zui-marquee-fg:oklch(94.6%_0.033_307.174)]\",\n pink: \"border-[color:var(--zui-marquee-pink-border,oklch(65.6%_0.241_354.308_/_0.24))] [--zui-marquee-bg:oklch(97.1%_0.014_343.198)] [--zui-marquee-fg:oklch(40.8%_0.153_2.432)] dark:border-[color:var(--zui-marquee-pink-border-dark,oklch(71.8%_0.202_349.761_/_0.3))] dark:[--zui-marquee-bg:oklch(40.8%_0.153_2.432_/_0.28)] dark:[--zui-marquee-fg:oklch(94.8%_0.028_342.258)]\",\n orange:\n \"border-[color:var(--zui-marquee-orange-border,oklch(70.5%_0.213_47.604_/_0.26))] [--zui-marquee-bg:oklch(98%_0.016_73.684)] [--zui-marquee-fg:oklch(40.8%_0.123_38.172)] dark:border-[color:var(--zui-marquee-orange-border-dark,oklch(75%_0.183_55.934_/_0.32))] dark:[--zui-marquee-bg:oklch(40.8%_0.123_38.172_/_0.28)] dark:[--zui-marquee-fg:oklch(95.4%_0.038_75.164)]\",\n yellow:\n \"border-[color:var(--zui-marquee-yellow-border,oklch(79.5%_0.184_86.047_/_0.3))] [--zui-marquee-bg:oklch(98.7%_0.026_102.212)] [--zui-marquee-fg:oklch(42.1%_0.095_57.708)] dark:border-[color:var(--zui-marquee-yellow-border-dark,oklch(85.2%_0.199_91.936_/_0.32))] dark:[--zui-marquee-bg:oklch(42.1%_0.095_57.708_/_0.28)] dark:[--zui-marquee-fg:oklch(97.3%_0.071_103.193)]\",\n teal: \"border-[color:var(--zui-marquee-teal-border,oklch(70.4%_0.14_182.503_/_0.28))] [--zui-marquee-bg:oklch(98.4%_0.014_180.72)] [--zui-marquee-fg:oklch(38.6%_0.063_188.416)] dark:border-[color:var(--zui-marquee-teal-border-dark,oklch(77.7%_0.152_181.912_/_0.32))] dark:[--zui-marquee-bg:oklch(38.6%_0.063_188.416_/_0.28)] dark:[--zui-marquee-fg:oklch(95.3%_0.051_180.801)]\",\n indigo:\n \"border-[color:var(--zui-marquee-indigo-border,oklch(58.5%_0.233_277.117_/_0.24))] [--zui-marquee-bg:oklch(96.2%_0.018_272.314)] [--zui-marquee-fg:oklch(35.9%_0.144_278.697)] dark:border-[color:var(--zui-marquee-indigo-border-dark,oklch(67.3%_0.182_276.935_/_0.32))] dark:[--zui-marquee-bg:oklch(35.9%_0.144_278.697_/_0.28)] dark:[--zui-marquee-fg:oklch(93%_0.034_272.788)]\",\n emerald:\n \"border-[color:var(--zui-marquee-emerald-border,oklch(69.6%_0.17_162.48_/_0.28))] [--zui-marquee-bg:oklch(97.9%_0.021_166.113)] [--zui-marquee-fg:oklch(37.8%_0.077_168.94)] dark:border-[color:var(--zui-marquee-emerald-border-dark,oklch(76.5%_0.177_163.223_/_0.32))] dark:[--zui-marquee-bg:oklch(37.8%_0.077_168.94_/_0.28)] dark:[--zui-marquee-fg:oklch(95%_0.052_163.051)]\",\n \"gradient-blue\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-blue-from,oklch(62.3%_0.214_259.815))] to-[var(--zui-marquee-gradient-blue-to,oklch(54.6%_0.245_262.881))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-green\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-green-from,oklch(72.3%_0.219_149.579))] to-[var(--zui-marquee-gradient-green-to,oklch(62.7%_0.194_149.214))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-red\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-red-from,oklch(63.7%_0.237_25.331))] to-[var(--zui-marquee-gradient-red-to,oklch(57.7%_0.245_27.325))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-yellow\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-yellow-from,oklch(85.2%_0.199_91.936))] to-[var(--zui-marquee-gradient-yellow-to,oklch(79.5%_0.184_86.047))] [--zui-marquee-fg:oklch(27.9%_0.077_45.635)]\",\n \"gradient-purple\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-purple-from,oklch(71.4%_0.203_305.504))] to-[var(--zui-marquee-gradient-purple-to,oklch(62.7%_0.265_303.9))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-teal\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-teal-from,oklch(77.7%_0.152_181.912))] to-[var(--zui-marquee-gradient-teal-to,oklch(70.4%_0.14_182.503))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-indigo\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-indigo-from,oklch(67.3%_0.182_276.935))] to-[var(--zui-marquee-gradient-indigo-to,oklch(58.5%_0.233_277.117))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-pink\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-pink-from,oklch(71.8%_0.202_349.761))] to-[var(--zui-marquee-gradient-pink-to,oklch(65.6%_0.241_354.308))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-orange\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-orange-from,oklch(75%_0.183_55.934))] to-[var(--zui-marquee-gradient-orange-to,oklch(70.5%_0.213_47.604))] [--zui-marquee-fg:#ffffff]\",\n} as const;\n\nexport const zuiMarqueeOrientations = {\n horizontal: \"w-full flex-row\",\n vertical: \"h-64 flex-col\",\n} as const;\n\nexport const zuiMarqueeSizes = {\n sm: \"p-2 text-xs\",\n md: \"p-3 text-sm\",\n lg: \"p-4 text-base\",\n} as const;\n\nexport const zuiMarqueeFade = {\n false: \"\",\n true: \"[mask-image:linear-gradient(to_right,transparent,black_12%,black_88%,transparent)] data-[orientation=vertical]:[mask-image:linear-gradient(to_bottom,transparent,black_12%,black_88%,transparent)]\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiMarqueeAppearances,\n zuiMarqueeBase,\n zuiMarqueeFade,\n zuiMarqueeOrientations,\n zuiMarqueeSizes,\n} from \"../../design-system/marquee\";\n\nexport const marqueeVariants = cva(zuiMarqueeBase, {\n variants: {\n appearance: zuiMarqueeAppearances,\n fade: zuiMarqueeFade,\n orientation: zuiMarqueeOrientations,\n size: zuiMarqueeSizes,\n },\n defaultVariants: {\n appearance: \"default\",\n fade: true,\n orientation: \"horizontal\",\n size: \"md\",\n },\n});\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport type { MarqueeProps } from \"./types\";\nimport { marqueeVariants } from \"./variants\";\n\nconst marqueeKeyframes = `@keyframes zui-marquee-x{from{transform:translate3d(0,0,0)}to{transform:translate3d(calc(-50% - var(--zui-marquee-gap)/2),0,0)}}@keyframes zui-marquee-y{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,calc(-50% - var(--zui-marquee-gap)/2),0)}}`;\n\nfunction toCssLength(value: number | string | undefined) {\n if (value === undefined) {\n return undefined;\n }\n return typeof value === \"number\" ? `${value}px` : value;\n}\n\nexport function Marquee(props: MarqueeProps) {\n const {\n appearance,\n children,\n className,\n direction,\n fade,\n gap,\n itemClassName,\n orientation,\n pauseOnHover = false,\n ref,\n size,\n speed = 30,\n style,\n trackClassName,\n ...rest\n } = props;\n\n const resolvedOrientation =\n orientation ??\n (direction === \"up\" || direction === \"down\" ? \"vertical\" : \"horizontal\");\n const resolvedDirection =\n direction ?? (resolvedOrientation === \"vertical\" ? \"up\" : \"left\");\n const isReverse =\n resolvedDirection === \"right\" || resolvedDirection === \"down\";\n const animationName =\n resolvedOrientation === \"vertical\" ? \"zui-marquee-y\" : \"zui-marquee-x\";\n const marqueeStyle = {\n ...(gap !== undefined ? { \"--zui-marquee-gap\": toCssLength(gap) } : null),\n ...style,\n } as CSSProperties;\n\n return (\n <div\n ref={ref}\n data-direction={resolvedDirection}\n data-orientation={resolvedOrientation}\n data-slot=\"marquee\"\n className={cn(\n marqueeVariants({\n appearance,\n fade,\n orientation: resolvedOrientation,\n size,\n }),\n className,\n )}\n style={marqueeStyle}\n {...rest}\n >\n <style>{marqueeKeyframes}</style>\n <div\n data-slot=\"marquee-track\"\n className={cn(\n \"flex shrink-0 gap-[var(--zui-marquee-gap)] will-change-transform [animation-iteration-count:infinite] [animation-timing-function:linear] motion-reduce:[animation-play-state:paused]\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"w-max flex-row\",\n pauseOnHover && \"group-hover/marquee:[animation-play-state:paused]\",\n isReverse && \"[animation-direction:reverse]\",\n trackClassName,\n )}\n style={\n {\n animationDuration: `${speed}s`,\n animationName,\n } as CSSProperties\n }\n >\n <div\n data-slot=\"marquee-item-group\"\n className={cn(\n \"flex shrink-0 items-center justify-around gap-[var(--zui-marquee-gap)]\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n itemClassName,\n )}\n >\n {children}\n </div>\n <div\n aria-hidden=\"true\"\n inert\n data-slot=\"marquee-item-group\"\n className={cn(\n \"flex shrink-0 items-center justify-around gap-[var(--zui-marquee-gap)]\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n itemClassName,\n )}\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nMarquee.displayName = \"Marquee\";\n"]}
1
+ {"version":3,"sources":["../../src/design-system/marquee.ts","../../src/ui/marquee/variants.ts","../../src/ui/marquee/marquee.tsx"],"names":["cva","useRef","useState","useMemo","Children","useCallback","cn","jsx","useIsomorphicLayoutEffect","jsxs"],"mappings":"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","file":"marquee.js","sourcesContent":["export const zuiMarqueeBase =\n \"group/marquee relative isolate flex min-w-0 overflow-hidden rounded-xl border border-transparent bg-[var(--zui-marquee-bg,transparent)] text-[color:var(--zui-marquee-fg,inherit)] [--zui-marquee-gap:1rem]\";\n\nexport const zuiMarqueeAppearances = {\n default:\n \"[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]\",\n outline:\n \"border-[color:var(--zui-marquee-outline-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:#ffffff] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-outline-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-bg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]\",\n ghost:\n \"[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(27.9%_0.041_260.031)] dark:[--zui-marquee-fg:oklch(96.8%_0.007_247.896)]\",\n card: \"border-[color:var(--zui-marquee-card-border,oklch(92.9%_0.013_255.508))] bg-[var(--zui-marquee-card-bg,#ffffff)] shadow-sm shadow-slate-950/5 [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-card-border-dark,oklch(37.2%_0.044_257.287))] dark:bg-[var(--zui-marquee-card-bg-dark,oklch(20.8%_0.042_265.755_/_0.9))] dark:shadow-black/20 dark:[--zui-marquee-fg:#ffffff]\",\n separated:\n \"border-y border-x-0 rounded-none border-[color:var(--zui-marquee-separated-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-separated-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-fg:#ffffff]\",\n sky: \"border-[color:var(--zui-marquee-sky-border,oklch(62.3%_0.214_259.815_/_0.28))] [--zui-marquee-bg:oklch(97.7%_0.013_236.62)] [--zui-marquee-fg:oklch(39.1%_0.09_240.876)] dark:border-[color:var(--zui-marquee-sky-border-dark,oklch(70.7%_0.165_254.624_/_0.3))] dark:[--zui-marquee-bg:oklch(39.1%_0.09_240.876_/_0.28)] dark:[--zui-marquee-fg:oklch(95.1%_0.026_236.824)]\",\n rose: \"border-[color:var(--zui-marquee-rose-border,oklch(58.6%_0.253_17.585_/_0.24))] [--zui-marquee-bg:oklch(96.9%_0.015_12.422)] [--zui-marquee-fg:oklch(41%_0.159_10.272)] dark:border-[color:var(--zui-marquee-rose-border-dark,oklch(71.2%_0.194_13.428_/_0.3))] dark:[--zui-marquee-bg:oklch(41%_0.159_10.272_/_0.28)] dark:[--zui-marquee-fg:oklch(94.1%_0.03_12.58)]\",\n purple:\n \"border-[color:var(--zui-marquee-purple-border,oklch(62.7%_0.265_303.9_/_0.24))] [--zui-marquee-bg:oklch(97.7%_0.014_308.299)] [--zui-marquee-fg:oklch(38.1%_0.176_304.987)] dark:border-[color:var(--zui-marquee-purple-border-dark,oklch(71.4%_0.203_305.504_/_0.3))] dark:[--zui-marquee-bg:oklch(38.1%_0.176_304.987_/_0.28)] dark:[--zui-marquee-fg:oklch(94.6%_0.033_307.174)]\",\n pink: \"border-[color:var(--zui-marquee-pink-border,oklch(65.6%_0.241_354.308_/_0.24))] [--zui-marquee-bg:oklch(97.1%_0.014_343.198)] [--zui-marquee-fg:oklch(40.8%_0.153_2.432)] dark:border-[color:var(--zui-marquee-pink-border-dark,oklch(71.8%_0.202_349.761_/_0.3))] dark:[--zui-marquee-bg:oklch(40.8%_0.153_2.432_/_0.28)] dark:[--zui-marquee-fg:oklch(94.8%_0.028_342.258)]\",\n orange:\n \"border-[color:var(--zui-marquee-orange-border,oklch(70.5%_0.213_47.604_/_0.26))] [--zui-marquee-bg:oklch(98%_0.016_73.684)] [--zui-marquee-fg:oklch(40.8%_0.123_38.172)] dark:border-[color:var(--zui-marquee-orange-border-dark,oklch(75%_0.183_55.934_/_0.32))] dark:[--zui-marquee-bg:oklch(40.8%_0.123_38.172_/_0.28)] dark:[--zui-marquee-fg:oklch(95.4%_0.038_75.164)]\",\n yellow:\n \"border-[color:var(--zui-marquee-yellow-border,oklch(79.5%_0.184_86.047_/_0.3))] [--zui-marquee-bg:oklch(98.7%_0.026_102.212)] [--zui-marquee-fg:oklch(42.1%_0.095_57.708)] dark:border-[color:var(--zui-marquee-yellow-border-dark,oklch(85.2%_0.199_91.936_/_0.32))] dark:[--zui-marquee-bg:oklch(42.1%_0.095_57.708_/_0.28)] dark:[--zui-marquee-fg:oklch(97.3%_0.071_103.193)]\",\n teal: \"border-[color:var(--zui-marquee-teal-border,oklch(70.4%_0.14_182.503_/_0.28))] [--zui-marquee-bg:oklch(98.4%_0.014_180.72)] [--zui-marquee-fg:oklch(38.6%_0.063_188.416)] dark:border-[color:var(--zui-marquee-teal-border-dark,oklch(77.7%_0.152_181.912_/_0.32))] dark:[--zui-marquee-bg:oklch(38.6%_0.063_188.416_/_0.28)] dark:[--zui-marquee-fg:oklch(95.3%_0.051_180.801)]\",\n indigo:\n \"border-[color:var(--zui-marquee-indigo-border,oklch(58.5%_0.233_277.117_/_0.24))] [--zui-marquee-bg:oklch(96.2%_0.018_272.314)] [--zui-marquee-fg:oklch(35.9%_0.144_278.697)] dark:border-[color:var(--zui-marquee-indigo-border-dark,oklch(67.3%_0.182_276.935_/_0.32))] dark:[--zui-marquee-bg:oklch(35.9%_0.144_278.697_/_0.28)] dark:[--zui-marquee-fg:oklch(93%_0.034_272.788)]\",\n emerald:\n \"border-[color:var(--zui-marquee-emerald-border,oklch(69.6%_0.17_162.48_/_0.28))] [--zui-marquee-bg:oklch(97.9%_0.021_166.113)] [--zui-marquee-fg:oklch(37.8%_0.077_168.94)] dark:border-[color:var(--zui-marquee-emerald-border-dark,oklch(76.5%_0.177_163.223_/_0.32))] dark:[--zui-marquee-bg:oklch(37.8%_0.077_168.94_/_0.28)] dark:[--zui-marquee-fg:oklch(95%_0.052_163.051)]\",\n \"gradient-blue\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-blue-from,oklch(62.3%_0.214_259.815))] to-[var(--zui-marquee-gradient-blue-to,oklch(54.6%_0.245_262.881))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-green\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-green-from,oklch(72.3%_0.219_149.579))] to-[var(--zui-marquee-gradient-green-to,oklch(62.7%_0.194_149.214))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-red\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-red-from,oklch(63.7%_0.237_25.331))] to-[var(--zui-marquee-gradient-red-to,oklch(57.7%_0.245_27.325))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-yellow\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-yellow-from,oklch(85.2%_0.199_91.936))] to-[var(--zui-marquee-gradient-yellow-to,oklch(79.5%_0.184_86.047))] [--zui-marquee-fg:oklch(27.9%_0.077_45.635)]\",\n \"gradient-purple\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-purple-from,oklch(71.4%_0.203_305.504))] to-[var(--zui-marquee-gradient-purple-to,oklch(62.7%_0.265_303.9))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-teal\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-teal-from,oklch(77.7%_0.152_181.912))] to-[var(--zui-marquee-gradient-teal-to,oklch(70.4%_0.14_182.503))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-indigo\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-indigo-from,oklch(67.3%_0.182_276.935))] to-[var(--zui-marquee-gradient-indigo-to,oklch(58.5%_0.233_277.117))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-pink\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-pink-from,oklch(71.8%_0.202_349.761))] to-[var(--zui-marquee-gradient-pink-to,oklch(65.6%_0.241_354.308))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-orange\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-orange-from,oklch(75%_0.183_55.934))] to-[var(--zui-marquee-gradient-orange-to,oklch(70.5%_0.213_47.604))] [--zui-marquee-fg:#ffffff]\",\n} as const;\n\nexport const zuiMarqueeOrientations = {\n horizontal: \"w-full flex-row\",\n vertical: \"h-64 flex-col\",\n} as const;\n\nexport const zuiMarqueeSizes = {\n sm: \"p-2 text-xs\",\n md: \"p-3 text-sm\",\n lg: \"p-4 text-base\",\n} as const;\n\nexport const zuiMarqueeFade = {\n false: \"\",\n true: \"[mask-image:linear-gradient(to_right,transparent,black_12%,black_88%,transparent)] data-[orientation=vertical]:[mask-image:linear-gradient(to_bottom,transparent,black_12%,black_88%,transparent)]\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiMarqueeAppearances,\n zuiMarqueeBase,\n zuiMarqueeFade,\n zuiMarqueeOrientations,\n zuiMarqueeSizes,\n} from \"../../design-system/marquee\";\n\nexport const marqueeVariants = cva(zuiMarqueeBase, {\n variants: {\n appearance: zuiMarqueeAppearances,\n fade: zuiMarqueeFade,\n orientation: zuiMarqueeOrientations,\n size: zuiMarqueeSizes,\n },\n defaultVariants: {\n appearance: \"default\",\n fade: true,\n orientation: \"horizontal\",\n size: \"md\",\n },\n});\n","\"use client\";\n\nimport { Children, useCallback, useMemo, useRef, useState } from \"react\";\nimport type { CSSProperties, Ref } from \"react\";\n\nimport { useIsomorphicLayoutEffect } from \"../../hooks/useIsomorphicLayoutEffect\";\nimport { cn } from \"../../lib/utils\";\n\nimport type { MarqueeProps } from \"./types\";\nimport { marqueeVariants } from \"./variants\";\n\nconst marqueeKeyframes = `@keyframes zui-marquee-x{from{transform:translate3d(0,0,0)}to{transform:translate3d(calc(-50% - var(--zui-marquee-gap)/2),0,0)}}@keyframes zui-marquee-y{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,calc(-50% - var(--zui-marquee-gap)/2),0)}}`;\n\nfunction toCssLength(value: number | string | undefined) {\n if (value === undefined) {\n return undefined;\n }\n return typeof value === \"number\" ? `${value}px` : value;\n}\n\nfunction assignRef<TElement>(\n ref: Ref<TElement> | undefined,\n value: TElement | null,\n) {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n (ref as { current: TElement | null }).current = value;\n }\n}\n\nexport function Marquee(props: MarqueeProps) {\n const {\n appearance,\n children,\n className,\n direction,\n fade,\n gap,\n itemClassName,\n orientation,\n pauseOnHover = false,\n ref,\n size,\n speed = 30,\n style,\n trackClassName,\n ...rest\n } = props;\n\n const resolvedOrientation =\n orientation ??\n (direction === \"up\" || direction === \"down\" ? \"vertical\" : \"horizontal\");\n const resolvedDirection =\n direction ?? (resolvedOrientation === \"vertical\" ? \"up\" : \"left\");\n const isReverse =\n resolvedDirection === \"right\" || resolvedDirection === \"down\";\n const animationName =\n resolvedOrientation === \"vertical\" ? \"zui-marquee-y\" : \"zui-marquee-x\";\n const rootRef = useRef<HTMLDivElement | null>(null);\n const measureRef = useRef<HTMLDivElement | null>(null);\n const [copyCount, setCopyCount] = useState(1);\n const childArray = useMemo(() => Children.toArray(children), [children]);\n const setRootRef = useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node;\n assignRef(ref, node);\n },\n [ref],\n );\n const marqueeStyle = {\n ...(gap !== undefined ? { \"--zui-marquee-gap\": toCssLength(gap) } : null),\n ...style,\n } as CSSProperties;\n const groupClassName = cn(\n \"flex shrink-0 items-center justify-around gap-(--zui-marquee-gap)\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n itemClassName,\n );\n const fillerChildren = Array.from(\n { length: Math.max(0, copyCount - 1) },\n (_, index) => (\n <div key={index} aria-hidden=\"true\" inert className=\"contents\">\n {childArray}\n </div>\n ),\n );\n\n useIsomorphicLayoutEffect(() => {\n const updateCopyCount = () => {\n const root = rootRef.current;\n const measure = measureRef.current;\n\n if (!root || !measure) {\n return;\n }\n\n const rootSize =\n resolvedOrientation === \"vertical\"\n ? root.offsetHeight\n : root.offsetWidth;\n const contentSize =\n resolvedOrientation === \"vertical\"\n ? measure.scrollHeight\n : measure.scrollWidth;\n\n if (!rootSize || !contentSize) {\n setCopyCount(1);\n return;\n }\n\n setCopyCount(Math.max(1, Math.ceil(rootSize / contentSize)));\n };\n\n updateCopyCount();\n\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver(updateCopyCount);\n if (rootRef.current) {\n observer.observe(rootRef.current);\n }\n if (measureRef.current) {\n observer.observe(measureRef.current);\n }\n\n return () => observer.disconnect();\n }, [childArray, gap, resolvedOrientation]);\n\n return (\n <div\n ref={setRootRef}\n data-direction={resolvedDirection}\n data-orientation={resolvedOrientation}\n data-slot=\"marquee\"\n className={cn(\n marqueeVariants({\n appearance,\n fade,\n orientation: resolvedOrientation,\n size,\n }),\n className,\n )}\n style={marqueeStyle}\n {...rest}\n >\n <style>{marqueeKeyframes}</style>\n <div\n aria-hidden=\"true\"\n data-slot=\"marquee-measure\"\n ref={measureRef}\n className={cn(\n \"pointer-events-none invisible absolute -z-10\",\n groupClassName,\n )}\n >\n {childArray}\n </div>\n <div\n data-slot=\"marquee-track\"\n className={cn(\n \"flex shrink-0 gap-(--zui-marquee-gap) will-change-transform [animation-iteration-count:infinite] [animation-timing-function:linear] motion-reduce:[animation-play-state:paused]\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"w-max flex-row\",\n pauseOnHover && \"group-hover/marquee:[animation-play-state:paused]\",\n isReverse && \"[animation-direction:reverse]\",\n trackClassName,\n )}\n style={\n {\n animationDuration: `${speed}s`,\n animationName,\n } as CSSProperties\n }\n >\n <div data-slot=\"marquee-item-group\" className={groupClassName}>\n {childArray}\n {fillerChildren}\n </div>\n <div\n aria-hidden=\"true\"\n inert\n data-slot=\"marquee-item-group\"\n className={groupClassName}\n >\n {childArray}\n {fillerChildren}\n </div>\n </div>\n </div>\n );\n}\n\nMarquee.displayName = \"Marquee\";\n"]}
@@ -1,7 +1,9 @@
1
1
  "use client";
2
+ import { useIsomorphicLayoutEffect } from '../chunk-F3V4POW3.mjs';
2
3
  import { cn } from '../chunk-4D54YOL6.mjs';
4
+ import { useRef, useState, useMemo, Children, useCallback } from 'react';
3
5
  import { cva } from 'class-variance-authority';
4
- import { jsxs, jsx } from 'react/jsx-runtime';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
7
 
6
8
  // src/design-system/marquee.ts
7
9
  var zuiMarqueeBase = "group/marquee relative isolate flex min-w-0 overflow-hidden rounded-xl border border-transparent bg-[var(--zui-marquee-bg,transparent)] text-[color:var(--zui-marquee-fg,inherit)] [--zui-marquee-gap:1rem]";
@@ -66,6 +68,13 @@ function toCssLength(value) {
66
68
  }
67
69
  return typeof value === "number" ? `${value}px` : value;
68
70
  }
71
+ function assignRef(ref, value) {
72
+ if (typeof ref === "function") {
73
+ ref(value);
74
+ } else if (ref) {
75
+ ref.current = value;
76
+ }
77
+ }
69
78
  function Marquee(props) {
70
79
  const {
71
80
  appearance,
@@ -88,14 +97,62 @@ function Marquee(props) {
88
97
  const resolvedDirection = direction ?? (resolvedOrientation === "vertical" ? "up" : "left");
89
98
  const isReverse = resolvedDirection === "right" || resolvedDirection === "down";
90
99
  const animationName = resolvedOrientation === "vertical" ? "zui-marquee-y" : "zui-marquee-x";
100
+ const rootRef = useRef(null);
101
+ const measureRef = useRef(null);
102
+ const [copyCount, setCopyCount] = useState(1);
103
+ const childArray = useMemo(() => Children.toArray(children), [children]);
104
+ const setRootRef = useCallback(
105
+ (node) => {
106
+ rootRef.current = node;
107
+ assignRef(ref, node);
108
+ },
109
+ [ref]
110
+ );
91
111
  const marqueeStyle = {
92
112
  ...gap !== void 0 ? { "--zui-marquee-gap": toCssLength(gap) } : null,
93
113
  ...style
94
114
  };
115
+ const groupClassName = cn(
116
+ "flex shrink-0 items-center justify-around gap-(--zui-marquee-gap)",
117
+ resolvedOrientation === "vertical" ? "flex-col" : "flex-row",
118
+ itemClassName
119
+ );
120
+ const fillerChildren = Array.from(
121
+ { length: Math.max(0, copyCount - 1) },
122
+ (_, index) => /* @__PURE__ */ jsx("div", { "aria-hidden": "true", inert: true, className: "contents", children: childArray }, index)
123
+ );
124
+ useIsomorphicLayoutEffect(() => {
125
+ const updateCopyCount = () => {
126
+ const root = rootRef.current;
127
+ const measure = measureRef.current;
128
+ if (!root || !measure) {
129
+ return;
130
+ }
131
+ const rootSize = resolvedOrientation === "vertical" ? root.offsetHeight : root.offsetWidth;
132
+ const contentSize = resolvedOrientation === "vertical" ? measure.scrollHeight : measure.scrollWidth;
133
+ if (!rootSize || !contentSize) {
134
+ setCopyCount(1);
135
+ return;
136
+ }
137
+ setCopyCount(Math.max(1, Math.ceil(rootSize / contentSize)));
138
+ };
139
+ updateCopyCount();
140
+ if (typeof ResizeObserver === "undefined") {
141
+ return;
142
+ }
143
+ const observer = new ResizeObserver(updateCopyCount);
144
+ if (rootRef.current) {
145
+ observer.observe(rootRef.current);
146
+ }
147
+ if (measureRef.current) {
148
+ observer.observe(measureRef.current);
149
+ }
150
+ return () => observer.disconnect();
151
+ }, [childArray, gap, resolvedOrientation]);
95
152
  return /* @__PURE__ */ jsxs(
96
153
  "div",
97
154
  {
98
- ref,
155
+ ref: setRootRef,
99
156
  "data-direction": resolvedDirection,
100
157
  "data-orientation": resolvedOrientation,
101
158
  "data-slot": "marquee",
@@ -112,12 +169,25 @@ function Marquee(props) {
112
169
  ...rest,
113
170
  children: [
114
171
  /* @__PURE__ */ jsx("style", { children: marqueeKeyframes }),
172
+ /* @__PURE__ */ jsx(
173
+ "div",
174
+ {
175
+ "aria-hidden": "true",
176
+ "data-slot": "marquee-measure",
177
+ ref: measureRef,
178
+ className: cn(
179
+ "pointer-events-none invisible absolute -z-10",
180
+ groupClassName
181
+ ),
182
+ children: childArray
183
+ }
184
+ ),
115
185
  /* @__PURE__ */ jsxs(
116
186
  "div",
117
187
  {
118
188
  "data-slot": "marquee-track",
119
189
  className: cn(
120
- "flex shrink-0 gap-[var(--zui-marquee-gap)] will-change-transform [animation-iteration-count:infinite] [animation-timing-function:linear] motion-reduce:[animation-play-state:paused]",
190
+ "flex shrink-0 gap-(--zui-marquee-gap) will-change-transform [animation-iteration-count:infinite] [animation-timing-function:linear] motion-reduce:[animation-play-state:paused]",
121
191
  resolvedOrientation === "vertical" ? "flex-col" : "w-max flex-row",
122
192
  pauseOnHover && "group-hover/marquee:[animation-play-state:paused]",
123
193
  isReverse && "[animation-direction:reverse]",
@@ -128,30 +198,21 @@ function Marquee(props) {
128
198
  animationName
129
199
  },
130
200
  children: [
131
- /* @__PURE__ */ jsx(
132
- "div",
133
- {
134
- "data-slot": "marquee-item-group",
135
- className: cn(
136
- "flex shrink-0 items-center justify-around gap-[var(--zui-marquee-gap)]",
137
- resolvedOrientation === "vertical" ? "flex-col" : "flex-row",
138
- itemClassName
139
- ),
140
- children
141
- }
142
- ),
143
- /* @__PURE__ */ jsx(
201
+ /* @__PURE__ */ jsxs("div", { "data-slot": "marquee-item-group", className: groupClassName, children: [
202
+ childArray,
203
+ fillerChildren
204
+ ] }),
205
+ /* @__PURE__ */ jsxs(
144
206
  "div",
145
207
  {
146
208
  "aria-hidden": "true",
147
209
  inert: true,
148
210
  "data-slot": "marquee-item-group",
149
- className: cn(
150
- "flex shrink-0 items-center justify-around gap-[var(--zui-marquee-gap)]",
151
- resolvedOrientation === "vertical" ? "flex-col" : "flex-row",
152
- itemClassName
153
- ),
154
- children
211
+ className: groupClassName,
212
+ children: [
213
+ childArray,
214
+ fillerChildren
215
+ ]
155
216
  }
156
217
  )
157
218
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/design-system/marquee.ts","../../src/ui/marquee/variants.ts","../../src/ui/marquee/marquee.tsx"],"names":[],"mappings":"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","file":"marquee.mjs","sourcesContent":["export const zuiMarqueeBase =\n \"group/marquee relative isolate flex min-w-0 overflow-hidden rounded-xl border border-transparent bg-[var(--zui-marquee-bg,transparent)] text-[color:var(--zui-marquee-fg,inherit)] [--zui-marquee-gap:1rem]\";\n\nexport const zuiMarqueeAppearances = {\n default:\n \"[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]\",\n outline:\n \"border-[color:var(--zui-marquee-outline-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:#ffffff] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-outline-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-bg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]\",\n ghost:\n \"[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(27.9%_0.041_260.031)] dark:[--zui-marquee-fg:oklch(96.8%_0.007_247.896)]\",\n card: \"border-[color:var(--zui-marquee-card-border,oklch(92.9%_0.013_255.508))] bg-[var(--zui-marquee-card-bg,#ffffff)] shadow-sm shadow-slate-950/5 [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-card-border-dark,oklch(37.2%_0.044_257.287))] dark:bg-[var(--zui-marquee-card-bg-dark,oklch(20.8%_0.042_265.755_/_0.9))] dark:shadow-black/20 dark:[--zui-marquee-fg:#ffffff]\",\n separated:\n \"border-y border-x-0 rounded-none border-[color:var(--zui-marquee-separated-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-separated-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-fg:#ffffff]\",\n sky: \"border-[color:var(--zui-marquee-sky-border,oklch(62.3%_0.214_259.815_/_0.28))] [--zui-marquee-bg:oklch(97.7%_0.013_236.62)] [--zui-marquee-fg:oklch(39.1%_0.09_240.876)] dark:border-[color:var(--zui-marquee-sky-border-dark,oklch(70.7%_0.165_254.624_/_0.3))] dark:[--zui-marquee-bg:oklch(39.1%_0.09_240.876_/_0.28)] dark:[--zui-marquee-fg:oklch(95.1%_0.026_236.824)]\",\n rose: \"border-[color:var(--zui-marquee-rose-border,oklch(58.6%_0.253_17.585_/_0.24))] [--zui-marquee-bg:oklch(96.9%_0.015_12.422)] [--zui-marquee-fg:oklch(41%_0.159_10.272)] dark:border-[color:var(--zui-marquee-rose-border-dark,oklch(71.2%_0.194_13.428_/_0.3))] dark:[--zui-marquee-bg:oklch(41%_0.159_10.272_/_0.28)] dark:[--zui-marquee-fg:oklch(94.1%_0.03_12.58)]\",\n purple:\n \"border-[color:var(--zui-marquee-purple-border,oklch(62.7%_0.265_303.9_/_0.24))] [--zui-marquee-bg:oklch(97.7%_0.014_308.299)] [--zui-marquee-fg:oklch(38.1%_0.176_304.987)] dark:border-[color:var(--zui-marquee-purple-border-dark,oklch(71.4%_0.203_305.504_/_0.3))] dark:[--zui-marquee-bg:oklch(38.1%_0.176_304.987_/_0.28)] dark:[--zui-marquee-fg:oklch(94.6%_0.033_307.174)]\",\n pink: \"border-[color:var(--zui-marquee-pink-border,oklch(65.6%_0.241_354.308_/_0.24))] [--zui-marquee-bg:oklch(97.1%_0.014_343.198)] [--zui-marquee-fg:oklch(40.8%_0.153_2.432)] dark:border-[color:var(--zui-marquee-pink-border-dark,oklch(71.8%_0.202_349.761_/_0.3))] dark:[--zui-marquee-bg:oklch(40.8%_0.153_2.432_/_0.28)] dark:[--zui-marquee-fg:oklch(94.8%_0.028_342.258)]\",\n orange:\n \"border-[color:var(--zui-marquee-orange-border,oklch(70.5%_0.213_47.604_/_0.26))] [--zui-marquee-bg:oklch(98%_0.016_73.684)] [--zui-marquee-fg:oklch(40.8%_0.123_38.172)] dark:border-[color:var(--zui-marquee-orange-border-dark,oklch(75%_0.183_55.934_/_0.32))] dark:[--zui-marquee-bg:oklch(40.8%_0.123_38.172_/_0.28)] dark:[--zui-marquee-fg:oklch(95.4%_0.038_75.164)]\",\n yellow:\n \"border-[color:var(--zui-marquee-yellow-border,oklch(79.5%_0.184_86.047_/_0.3))] [--zui-marquee-bg:oklch(98.7%_0.026_102.212)] [--zui-marquee-fg:oklch(42.1%_0.095_57.708)] dark:border-[color:var(--zui-marquee-yellow-border-dark,oklch(85.2%_0.199_91.936_/_0.32))] dark:[--zui-marquee-bg:oklch(42.1%_0.095_57.708_/_0.28)] dark:[--zui-marquee-fg:oklch(97.3%_0.071_103.193)]\",\n teal: \"border-[color:var(--zui-marquee-teal-border,oklch(70.4%_0.14_182.503_/_0.28))] [--zui-marquee-bg:oklch(98.4%_0.014_180.72)] [--zui-marquee-fg:oklch(38.6%_0.063_188.416)] dark:border-[color:var(--zui-marquee-teal-border-dark,oklch(77.7%_0.152_181.912_/_0.32))] dark:[--zui-marquee-bg:oklch(38.6%_0.063_188.416_/_0.28)] dark:[--zui-marquee-fg:oklch(95.3%_0.051_180.801)]\",\n indigo:\n \"border-[color:var(--zui-marquee-indigo-border,oklch(58.5%_0.233_277.117_/_0.24))] [--zui-marquee-bg:oklch(96.2%_0.018_272.314)] [--zui-marquee-fg:oklch(35.9%_0.144_278.697)] dark:border-[color:var(--zui-marquee-indigo-border-dark,oklch(67.3%_0.182_276.935_/_0.32))] dark:[--zui-marquee-bg:oklch(35.9%_0.144_278.697_/_0.28)] dark:[--zui-marquee-fg:oklch(93%_0.034_272.788)]\",\n emerald:\n \"border-[color:var(--zui-marquee-emerald-border,oklch(69.6%_0.17_162.48_/_0.28))] [--zui-marquee-bg:oklch(97.9%_0.021_166.113)] [--zui-marquee-fg:oklch(37.8%_0.077_168.94)] dark:border-[color:var(--zui-marquee-emerald-border-dark,oklch(76.5%_0.177_163.223_/_0.32))] dark:[--zui-marquee-bg:oklch(37.8%_0.077_168.94_/_0.28)] dark:[--zui-marquee-fg:oklch(95%_0.052_163.051)]\",\n \"gradient-blue\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-blue-from,oklch(62.3%_0.214_259.815))] to-[var(--zui-marquee-gradient-blue-to,oklch(54.6%_0.245_262.881))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-green\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-green-from,oklch(72.3%_0.219_149.579))] to-[var(--zui-marquee-gradient-green-to,oklch(62.7%_0.194_149.214))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-red\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-red-from,oklch(63.7%_0.237_25.331))] to-[var(--zui-marquee-gradient-red-to,oklch(57.7%_0.245_27.325))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-yellow\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-yellow-from,oklch(85.2%_0.199_91.936))] to-[var(--zui-marquee-gradient-yellow-to,oklch(79.5%_0.184_86.047))] [--zui-marquee-fg:oklch(27.9%_0.077_45.635)]\",\n \"gradient-purple\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-purple-from,oklch(71.4%_0.203_305.504))] to-[var(--zui-marquee-gradient-purple-to,oklch(62.7%_0.265_303.9))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-teal\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-teal-from,oklch(77.7%_0.152_181.912))] to-[var(--zui-marquee-gradient-teal-to,oklch(70.4%_0.14_182.503))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-indigo\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-indigo-from,oklch(67.3%_0.182_276.935))] to-[var(--zui-marquee-gradient-indigo-to,oklch(58.5%_0.233_277.117))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-pink\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-pink-from,oklch(71.8%_0.202_349.761))] to-[var(--zui-marquee-gradient-pink-to,oklch(65.6%_0.241_354.308))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-orange\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-orange-from,oklch(75%_0.183_55.934))] to-[var(--zui-marquee-gradient-orange-to,oklch(70.5%_0.213_47.604))] [--zui-marquee-fg:#ffffff]\",\n} as const;\n\nexport const zuiMarqueeOrientations = {\n horizontal: \"w-full flex-row\",\n vertical: \"h-64 flex-col\",\n} as const;\n\nexport const zuiMarqueeSizes = {\n sm: \"p-2 text-xs\",\n md: \"p-3 text-sm\",\n lg: \"p-4 text-base\",\n} as const;\n\nexport const zuiMarqueeFade = {\n false: \"\",\n true: \"[mask-image:linear-gradient(to_right,transparent,black_12%,black_88%,transparent)] data-[orientation=vertical]:[mask-image:linear-gradient(to_bottom,transparent,black_12%,black_88%,transparent)]\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiMarqueeAppearances,\n zuiMarqueeBase,\n zuiMarqueeFade,\n zuiMarqueeOrientations,\n zuiMarqueeSizes,\n} from \"../../design-system/marquee\";\n\nexport const marqueeVariants = cva(zuiMarqueeBase, {\n variants: {\n appearance: zuiMarqueeAppearances,\n fade: zuiMarqueeFade,\n orientation: zuiMarqueeOrientations,\n size: zuiMarqueeSizes,\n },\n defaultVariants: {\n appearance: \"default\",\n fade: true,\n orientation: \"horizontal\",\n size: \"md\",\n },\n});\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport type { MarqueeProps } from \"./types\";\nimport { marqueeVariants } from \"./variants\";\n\nconst marqueeKeyframes = `@keyframes zui-marquee-x{from{transform:translate3d(0,0,0)}to{transform:translate3d(calc(-50% - var(--zui-marquee-gap)/2),0,0)}}@keyframes zui-marquee-y{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,calc(-50% - var(--zui-marquee-gap)/2),0)}}`;\n\nfunction toCssLength(value: number | string | undefined) {\n if (value === undefined) {\n return undefined;\n }\n return typeof value === \"number\" ? `${value}px` : value;\n}\n\nexport function Marquee(props: MarqueeProps) {\n const {\n appearance,\n children,\n className,\n direction,\n fade,\n gap,\n itemClassName,\n orientation,\n pauseOnHover = false,\n ref,\n size,\n speed = 30,\n style,\n trackClassName,\n ...rest\n } = props;\n\n const resolvedOrientation =\n orientation ??\n (direction === \"up\" || direction === \"down\" ? \"vertical\" : \"horizontal\");\n const resolvedDirection =\n direction ?? (resolvedOrientation === \"vertical\" ? \"up\" : \"left\");\n const isReverse =\n resolvedDirection === \"right\" || resolvedDirection === \"down\";\n const animationName =\n resolvedOrientation === \"vertical\" ? \"zui-marquee-y\" : \"zui-marquee-x\";\n const marqueeStyle = {\n ...(gap !== undefined ? { \"--zui-marquee-gap\": toCssLength(gap) } : null),\n ...style,\n } as CSSProperties;\n\n return (\n <div\n ref={ref}\n data-direction={resolvedDirection}\n data-orientation={resolvedOrientation}\n data-slot=\"marquee\"\n className={cn(\n marqueeVariants({\n appearance,\n fade,\n orientation: resolvedOrientation,\n size,\n }),\n className,\n )}\n style={marqueeStyle}\n {...rest}\n >\n <style>{marqueeKeyframes}</style>\n <div\n data-slot=\"marquee-track\"\n className={cn(\n \"flex shrink-0 gap-[var(--zui-marquee-gap)] will-change-transform [animation-iteration-count:infinite] [animation-timing-function:linear] motion-reduce:[animation-play-state:paused]\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"w-max flex-row\",\n pauseOnHover && \"group-hover/marquee:[animation-play-state:paused]\",\n isReverse && \"[animation-direction:reverse]\",\n trackClassName,\n )}\n style={\n {\n animationDuration: `${speed}s`,\n animationName,\n } as CSSProperties\n }\n >\n <div\n data-slot=\"marquee-item-group\"\n className={cn(\n \"flex shrink-0 items-center justify-around gap-[var(--zui-marquee-gap)]\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n itemClassName,\n )}\n >\n {children}\n </div>\n <div\n aria-hidden=\"true\"\n inert\n data-slot=\"marquee-item-group\"\n className={cn(\n \"flex shrink-0 items-center justify-around gap-[var(--zui-marquee-gap)]\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n itemClassName,\n )}\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nMarquee.displayName = \"Marquee\";\n"]}
1
+ {"version":3,"sources":["../../src/design-system/marquee.ts","../../src/ui/marquee/variants.ts","../../src/ui/marquee/marquee.tsx"],"names":[],"mappings":"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","file":"marquee.mjs","sourcesContent":["export const zuiMarqueeBase =\n \"group/marquee relative isolate flex min-w-0 overflow-hidden rounded-xl border border-transparent bg-[var(--zui-marquee-bg,transparent)] text-[color:var(--zui-marquee-fg,inherit)] [--zui-marquee-gap:1rem]\";\n\nexport const zuiMarqueeAppearances = {\n default:\n \"[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]\",\n outline:\n \"border-[color:var(--zui-marquee-outline-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:#ffffff] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-outline-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-bg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]\",\n ghost:\n \"[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(27.9%_0.041_260.031)] dark:[--zui-marquee-fg:oklch(96.8%_0.007_247.896)]\",\n card: \"border-[color:var(--zui-marquee-card-border,oklch(92.9%_0.013_255.508))] bg-[var(--zui-marquee-card-bg,#ffffff)] shadow-sm shadow-slate-950/5 [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-card-border-dark,oklch(37.2%_0.044_257.287))] dark:bg-[var(--zui-marquee-card-bg-dark,oklch(20.8%_0.042_265.755_/_0.9))] dark:shadow-black/20 dark:[--zui-marquee-fg:#ffffff]\",\n separated:\n \"border-y border-x-0 rounded-none border-[color:var(--zui-marquee-separated-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-separated-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-fg:#ffffff]\",\n sky: \"border-[color:var(--zui-marquee-sky-border,oklch(62.3%_0.214_259.815_/_0.28))] [--zui-marquee-bg:oklch(97.7%_0.013_236.62)] [--zui-marquee-fg:oklch(39.1%_0.09_240.876)] dark:border-[color:var(--zui-marquee-sky-border-dark,oklch(70.7%_0.165_254.624_/_0.3))] dark:[--zui-marquee-bg:oklch(39.1%_0.09_240.876_/_0.28)] dark:[--zui-marquee-fg:oklch(95.1%_0.026_236.824)]\",\n rose: \"border-[color:var(--zui-marquee-rose-border,oklch(58.6%_0.253_17.585_/_0.24))] [--zui-marquee-bg:oklch(96.9%_0.015_12.422)] [--zui-marquee-fg:oklch(41%_0.159_10.272)] dark:border-[color:var(--zui-marquee-rose-border-dark,oklch(71.2%_0.194_13.428_/_0.3))] dark:[--zui-marquee-bg:oklch(41%_0.159_10.272_/_0.28)] dark:[--zui-marquee-fg:oklch(94.1%_0.03_12.58)]\",\n purple:\n \"border-[color:var(--zui-marquee-purple-border,oklch(62.7%_0.265_303.9_/_0.24))] [--zui-marquee-bg:oklch(97.7%_0.014_308.299)] [--zui-marquee-fg:oklch(38.1%_0.176_304.987)] dark:border-[color:var(--zui-marquee-purple-border-dark,oklch(71.4%_0.203_305.504_/_0.3))] dark:[--zui-marquee-bg:oklch(38.1%_0.176_304.987_/_0.28)] dark:[--zui-marquee-fg:oklch(94.6%_0.033_307.174)]\",\n pink: \"border-[color:var(--zui-marquee-pink-border,oklch(65.6%_0.241_354.308_/_0.24))] [--zui-marquee-bg:oklch(97.1%_0.014_343.198)] [--zui-marquee-fg:oklch(40.8%_0.153_2.432)] dark:border-[color:var(--zui-marquee-pink-border-dark,oklch(71.8%_0.202_349.761_/_0.3))] dark:[--zui-marquee-bg:oklch(40.8%_0.153_2.432_/_0.28)] dark:[--zui-marquee-fg:oklch(94.8%_0.028_342.258)]\",\n orange:\n \"border-[color:var(--zui-marquee-orange-border,oklch(70.5%_0.213_47.604_/_0.26))] [--zui-marquee-bg:oklch(98%_0.016_73.684)] [--zui-marquee-fg:oklch(40.8%_0.123_38.172)] dark:border-[color:var(--zui-marquee-orange-border-dark,oklch(75%_0.183_55.934_/_0.32))] dark:[--zui-marquee-bg:oklch(40.8%_0.123_38.172_/_0.28)] dark:[--zui-marquee-fg:oklch(95.4%_0.038_75.164)]\",\n yellow:\n \"border-[color:var(--zui-marquee-yellow-border,oklch(79.5%_0.184_86.047_/_0.3))] [--zui-marquee-bg:oklch(98.7%_0.026_102.212)] [--zui-marquee-fg:oklch(42.1%_0.095_57.708)] dark:border-[color:var(--zui-marquee-yellow-border-dark,oklch(85.2%_0.199_91.936_/_0.32))] dark:[--zui-marquee-bg:oklch(42.1%_0.095_57.708_/_0.28)] dark:[--zui-marquee-fg:oklch(97.3%_0.071_103.193)]\",\n teal: \"border-[color:var(--zui-marquee-teal-border,oklch(70.4%_0.14_182.503_/_0.28))] [--zui-marquee-bg:oklch(98.4%_0.014_180.72)] [--zui-marquee-fg:oklch(38.6%_0.063_188.416)] dark:border-[color:var(--zui-marquee-teal-border-dark,oklch(77.7%_0.152_181.912_/_0.32))] dark:[--zui-marquee-bg:oklch(38.6%_0.063_188.416_/_0.28)] dark:[--zui-marquee-fg:oklch(95.3%_0.051_180.801)]\",\n indigo:\n \"border-[color:var(--zui-marquee-indigo-border,oklch(58.5%_0.233_277.117_/_0.24))] [--zui-marquee-bg:oklch(96.2%_0.018_272.314)] [--zui-marquee-fg:oklch(35.9%_0.144_278.697)] dark:border-[color:var(--zui-marquee-indigo-border-dark,oklch(67.3%_0.182_276.935_/_0.32))] dark:[--zui-marquee-bg:oklch(35.9%_0.144_278.697_/_0.28)] dark:[--zui-marquee-fg:oklch(93%_0.034_272.788)]\",\n emerald:\n \"border-[color:var(--zui-marquee-emerald-border,oklch(69.6%_0.17_162.48_/_0.28))] [--zui-marquee-bg:oklch(97.9%_0.021_166.113)] [--zui-marquee-fg:oklch(37.8%_0.077_168.94)] dark:border-[color:var(--zui-marquee-emerald-border-dark,oklch(76.5%_0.177_163.223_/_0.32))] dark:[--zui-marquee-bg:oklch(37.8%_0.077_168.94_/_0.28)] dark:[--zui-marquee-fg:oklch(95%_0.052_163.051)]\",\n \"gradient-blue\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-blue-from,oklch(62.3%_0.214_259.815))] to-[var(--zui-marquee-gradient-blue-to,oklch(54.6%_0.245_262.881))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-green\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-green-from,oklch(72.3%_0.219_149.579))] to-[var(--zui-marquee-gradient-green-to,oklch(62.7%_0.194_149.214))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-red\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-red-from,oklch(63.7%_0.237_25.331))] to-[var(--zui-marquee-gradient-red-to,oklch(57.7%_0.245_27.325))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-yellow\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-yellow-from,oklch(85.2%_0.199_91.936))] to-[var(--zui-marquee-gradient-yellow-to,oklch(79.5%_0.184_86.047))] [--zui-marquee-fg:oklch(27.9%_0.077_45.635)]\",\n \"gradient-purple\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-purple-from,oklch(71.4%_0.203_305.504))] to-[var(--zui-marquee-gradient-purple-to,oklch(62.7%_0.265_303.9))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-teal\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-teal-from,oklch(77.7%_0.152_181.912))] to-[var(--zui-marquee-gradient-teal-to,oklch(70.4%_0.14_182.503))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-indigo\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-indigo-from,oklch(67.3%_0.182_276.935))] to-[var(--zui-marquee-gradient-indigo-to,oklch(58.5%_0.233_277.117))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-pink\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-pink-from,oklch(71.8%_0.202_349.761))] to-[var(--zui-marquee-gradient-pink-to,oklch(65.6%_0.241_354.308))] [--zui-marquee-fg:#ffffff]\",\n \"gradient-orange\":\n \"border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-orange-from,oklch(75%_0.183_55.934))] to-[var(--zui-marquee-gradient-orange-to,oklch(70.5%_0.213_47.604))] [--zui-marquee-fg:#ffffff]\",\n} as const;\n\nexport const zuiMarqueeOrientations = {\n horizontal: \"w-full flex-row\",\n vertical: \"h-64 flex-col\",\n} as const;\n\nexport const zuiMarqueeSizes = {\n sm: \"p-2 text-xs\",\n md: \"p-3 text-sm\",\n lg: \"p-4 text-base\",\n} as const;\n\nexport const zuiMarqueeFade = {\n false: \"\",\n true: \"[mask-image:linear-gradient(to_right,transparent,black_12%,black_88%,transparent)] data-[orientation=vertical]:[mask-image:linear-gradient(to_bottom,transparent,black_12%,black_88%,transparent)]\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiMarqueeAppearances,\n zuiMarqueeBase,\n zuiMarqueeFade,\n zuiMarqueeOrientations,\n zuiMarqueeSizes,\n} from \"../../design-system/marquee\";\n\nexport const marqueeVariants = cva(zuiMarqueeBase, {\n variants: {\n appearance: zuiMarqueeAppearances,\n fade: zuiMarqueeFade,\n orientation: zuiMarqueeOrientations,\n size: zuiMarqueeSizes,\n },\n defaultVariants: {\n appearance: \"default\",\n fade: true,\n orientation: \"horizontal\",\n size: \"md\",\n },\n});\n","\"use client\";\n\nimport { Children, useCallback, useMemo, useRef, useState } from \"react\";\nimport type { CSSProperties, Ref } from \"react\";\n\nimport { useIsomorphicLayoutEffect } from \"../../hooks/useIsomorphicLayoutEffect\";\nimport { cn } from \"../../lib/utils\";\n\nimport type { MarqueeProps } from \"./types\";\nimport { marqueeVariants } from \"./variants\";\n\nconst marqueeKeyframes = `@keyframes zui-marquee-x{from{transform:translate3d(0,0,0)}to{transform:translate3d(calc(-50% - var(--zui-marquee-gap)/2),0,0)}}@keyframes zui-marquee-y{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,calc(-50% - var(--zui-marquee-gap)/2),0)}}`;\n\nfunction toCssLength(value: number | string | undefined) {\n if (value === undefined) {\n return undefined;\n }\n return typeof value === \"number\" ? `${value}px` : value;\n}\n\nfunction assignRef<TElement>(\n ref: Ref<TElement> | undefined,\n value: TElement | null,\n) {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n (ref as { current: TElement | null }).current = value;\n }\n}\n\nexport function Marquee(props: MarqueeProps) {\n const {\n appearance,\n children,\n className,\n direction,\n fade,\n gap,\n itemClassName,\n orientation,\n pauseOnHover = false,\n ref,\n size,\n speed = 30,\n style,\n trackClassName,\n ...rest\n } = props;\n\n const resolvedOrientation =\n orientation ??\n (direction === \"up\" || direction === \"down\" ? \"vertical\" : \"horizontal\");\n const resolvedDirection =\n direction ?? (resolvedOrientation === \"vertical\" ? \"up\" : \"left\");\n const isReverse =\n resolvedDirection === \"right\" || resolvedDirection === \"down\";\n const animationName =\n resolvedOrientation === \"vertical\" ? \"zui-marquee-y\" : \"zui-marquee-x\";\n const rootRef = useRef<HTMLDivElement | null>(null);\n const measureRef = useRef<HTMLDivElement | null>(null);\n const [copyCount, setCopyCount] = useState(1);\n const childArray = useMemo(() => Children.toArray(children), [children]);\n const setRootRef = useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node;\n assignRef(ref, node);\n },\n [ref],\n );\n const marqueeStyle = {\n ...(gap !== undefined ? { \"--zui-marquee-gap\": toCssLength(gap) } : null),\n ...style,\n } as CSSProperties;\n const groupClassName = cn(\n \"flex shrink-0 items-center justify-around gap-(--zui-marquee-gap)\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n itemClassName,\n );\n const fillerChildren = Array.from(\n { length: Math.max(0, copyCount - 1) },\n (_, index) => (\n <div key={index} aria-hidden=\"true\" inert className=\"contents\">\n {childArray}\n </div>\n ),\n );\n\n useIsomorphicLayoutEffect(() => {\n const updateCopyCount = () => {\n const root = rootRef.current;\n const measure = measureRef.current;\n\n if (!root || !measure) {\n return;\n }\n\n const rootSize =\n resolvedOrientation === \"vertical\"\n ? root.offsetHeight\n : root.offsetWidth;\n const contentSize =\n resolvedOrientation === \"vertical\"\n ? measure.scrollHeight\n : measure.scrollWidth;\n\n if (!rootSize || !contentSize) {\n setCopyCount(1);\n return;\n }\n\n setCopyCount(Math.max(1, Math.ceil(rootSize / contentSize)));\n };\n\n updateCopyCount();\n\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver(updateCopyCount);\n if (rootRef.current) {\n observer.observe(rootRef.current);\n }\n if (measureRef.current) {\n observer.observe(measureRef.current);\n }\n\n return () => observer.disconnect();\n }, [childArray, gap, resolvedOrientation]);\n\n return (\n <div\n ref={setRootRef}\n data-direction={resolvedDirection}\n data-orientation={resolvedOrientation}\n data-slot=\"marquee\"\n className={cn(\n marqueeVariants({\n appearance,\n fade,\n orientation: resolvedOrientation,\n size,\n }),\n className,\n )}\n style={marqueeStyle}\n {...rest}\n >\n <style>{marqueeKeyframes}</style>\n <div\n aria-hidden=\"true\"\n data-slot=\"marquee-measure\"\n ref={measureRef}\n className={cn(\n \"pointer-events-none invisible absolute -z-10\",\n groupClassName,\n )}\n >\n {childArray}\n </div>\n <div\n data-slot=\"marquee-track\"\n className={cn(\n \"flex shrink-0 gap-(--zui-marquee-gap) will-change-transform [animation-iteration-count:infinite] [animation-timing-function:linear] motion-reduce:[animation-play-state:paused]\",\n resolvedOrientation === \"vertical\" ? \"flex-col\" : \"w-max flex-row\",\n pauseOnHover && \"group-hover/marquee:[animation-play-state:paused]\",\n isReverse && \"[animation-direction:reverse]\",\n trackClassName,\n )}\n style={\n {\n animationDuration: `${speed}s`,\n animationName,\n } as CSSProperties\n }\n >\n <div data-slot=\"marquee-item-group\" className={groupClassName}>\n {childArray}\n {fillerChildren}\n </div>\n <div\n aria-hidden=\"true\"\n inert\n data-slot=\"marquee-item-group\"\n className={groupClassName}\n >\n {childArray}\n {fillerChildren}\n </div>\n </div>\n </div>\n );\n}\n\nMarquee.displayName = \"Marquee\";\n"]}
@@ -2,7 +2,8 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk2VUMVDR3_js = require('../chunk-2VUMVDR3.js');
5
- var chunkABOZ5QIX_js = require('../chunk-ABOZ5QIX.js');
5
+ var chunk466QDL44_js = require('../chunk-466QDL44.js');
6
+ require('../chunk-MUP7DVQR.js');
6
7
  var chunkZS5756ZC_js = require('../chunk-ZS5756ZC.js');
7
8
  var react = require('react');
8
9
  var classVarianceAuthority = require('class-variance-authority');
@@ -150,10 +151,10 @@ var Pagination = ({
150
151
  return null;
151
152
  }
152
153
  const inactiveTriggerClass = chunkZS5756ZC_js.cn(
153
- chunkABOZ5QIX_js.buttonVariants({ appearance: "ghost", size }),
154
+ chunk466QDL44_js.buttonVariants({ appearance: "ghost", size }),
154
155
  "bg-white/[0.04] text-slate-900 dark:text-slate-200 hover:bg-white/10"
155
156
  );
156
- const currentTriggerClass = chunkABOZ5QIX_js.buttonVariants({ appearance, size });
157
+ const currentTriggerClass = chunk466QDL44_js.buttonVariants({ appearance, size });
157
158
  const triggerFocusRing = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950";
158
159
  const renderPageControl = (pageNumber) => {
159
160
  const isCurrent = pageNumber === currentPage;
@@ -196,7 +197,7 @@ var Pagination = ({
196
197
  const prevHref = getPageHref?.(chunkZS5756ZC_js.clampPage(currentPage - 1, pageCount));
197
198
  const nextHref = getPageHref?.(chunkZS5756ZC_js.clampPage(currentPage + 1, pageCount));
198
199
  const navTriggerClass = chunkZS5756ZC_js.cn(
199
- chunkABOZ5QIX_js.buttonVariants({ appearance: "outline", size }),
200
+ chunk466QDL44_js.buttonVariants({ appearance: "outline", size }),
200
201
  "shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950"
201
202
  );
202
203
  return /* @__PURE__ */ jsxRuntime.jsx(