@nice2dev/icons 1.3.16 → 1.3.17

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 (47) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +1 -1
  3. package/dist/cjs/animationSpeed.js +69 -0
  4. package/dist/cjs/createIcon.js +45 -21
  5. package/dist/cjs/iconStyles.js +1137 -1081
  6. package/dist/cjs/icons/actions.js +2 -2
  7. package/dist/cjs/icons/brand.js +4 -747
  8. package/dist/cjs/icons/business.js +59 -23
  9. package/dist/cjs/icons/files.js +54 -54
  10. package/dist/cjs/icons/food.js +75 -557
  11. package/dist/cjs/icons/fun.js +51 -33
  12. package/dist/cjs/icons/index.js +0 -7
  13. package/dist/cjs/icons/navigation.js +26 -7
  14. package/dist/cjs/icons/omniverk.js +17 -244
  15. package/dist/cjs/icons/science.js +63 -170
  16. package/dist/cjs/icons/sports.js +45 -137
  17. package/dist/cjs/index.js +0 -7
  18. package/dist/cjs/nicetodev-icons.css +1 -1
  19. package/dist/cjs/smilAnimations.js +11 -2
  20. package/dist/esm/animationSpeed.js +69 -0
  21. package/dist/esm/createIcon.js +45 -21
  22. package/dist/esm/iconStyles.js +1137 -1081
  23. package/dist/esm/icons/actions.js +2 -2
  24. package/dist/esm/icons/brand.js +5 -748
  25. package/dist/esm/icons/business.js +59 -23
  26. package/dist/esm/icons/files.js +54 -54
  27. package/dist/esm/icons/food.js +74 -556
  28. package/dist/esm/icons/fun.js +51 -33
  29. package/dist/esm/icons/index.js +3 -10
  30. package/dist/esm/icons/navigation.js +26 -7
  31. package/dist/esm/icons/omniverk.js +17 -244
  32. package/dist/esm/icons/science.js +63 -170
  33. package/dist/esm/icons/sports.js +45 -137
  34. package/dist/esm/index.js +3 -10
  35. package/dist/esm/nicetodev-icons.css +1 -1
  36. package/dist/esm/smilAnimations.js +11 -2
  37. package/dist/types/animationSpeed.d.ts +19 -0
  38. package/dist/types/createIcon.d.ts +6 -0
  39. package/dist/types/iconStyles.d.ts +6 -1
  40. package/dist/types/icons/brand.d.ts +0 -4
  41. package/dist/types/icons/food.d.ts +0 -3
  42. package/dist/types/icons/index.d.ts +3 -3
  43. package/dist/types/icons/omniverk.d.ts +0 -3
  44. package/dist/types/icons/science.d.ts +1 -1
  45. package/dist/types/smilAnimations.d.ts +4 -2
  46. package/dist/types/types.d.ts +7 -0
  47. package/package.json +2 -2
@@ -1,5 +1,6 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { forwardRef, useId } from "react";
3
+ import { retimeTree, durationScale } from "./animationSpeed.js";
3
4
  const wrapperBase = {
4
5
  position: "relative",
5
6
  display: "inline-flex",
@@ -16,7 +17,8 @@ const NtdIconFloral = /* @__PURE__ */ Object.assign(
16
17
  ({
17
18
  children,
18
19
  animate = true,
19
- duration = 2,
20
+ duration: durationProp,
21
+ animationSpeed,
20
22
  intensity = "normal",
21
23
  vineColor = "#22c55e",
22
24
  petalColor = "#f472b6",
@@ -24,6 +26,7 @@ const NtdIconFloral = /* @__PURE__ */ Object.assign(
24
26
  className,
25
27
  style
26
28
  }, ref) => {
29
+ const duration = durationProp ?? 2;
27
30
  const lc = leafColor ?? vineColor;
28
31
  const dur = `${duration}s`;
29
32
  const halfDur = `${duration * 0.5}s`;
@@ -64,137 +67,140 @@ const NtdIconFloral = /* @__PURE__ */ Object.assign(
64
67
  ] : []
65
68
  ];
66
69
  const dashLen = 250;
67
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
68
- children,
69
- /* @__PURE__ */ jsxs(
70
- "svg",
71
- {
72
- viewBox: "0 0 100 100",
73
- style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%" },
74
- "aria-hidden": true,
75
- children: [
76
- [vine1, vine2, ...showExtra ? [vine3, vine4] : []].map((d, i) => /* @__PURE__ */ jsx(
77
- "path",
78
- {
79
- d,
80
- fill: "none",
81
- stroke: vineColor,
82
- strokeWidth: i < 2 ? 1.5 : 1,
83
- strokeLinecap: "round",
84
- opacity: i < 2 ? 0.85 : 0.55,
85
- ...animate ? { strokeDasharray: dashLen, strokeDashoffset: dashLen } : {},
86
- children: animate && /* @__PURE__ */ jsx(
87
- "animate",
88
- {
89
- attributeName: "stroke-dashoffset",
90
- from: `${dashLen}`,
91
- to: "0",
92
- dur,
93
- fill: "freeze",
94
- begin: i < 2 ? "0s" : `${duration * 0.3}s`
95
- }
96
- )
97
- },
98
- `v${i}`
99
- )),
100
- allLeaves.map((l, i) => /* @__PURE__ */ jsx("g", { transform: `translate(${l.x},${l.y}) rotate(${l.a})`, children: /* @__PURE__ */ jsxs("g", { opacity: animate ? 0 : 0.8, children: [
101
- /* @__PURE__ */ jsx("path", { d: leafD, fill: lc }),
102
- /* @__PURE__ */ jsx(
103
- "line",
104
- {
105
- x1: 0,
106
- y1: -3,
107
- x2: 0,
108
- y2: 2.5,
109
- stroke: lc,
110
- strokeWidth: "0.4",
111
- opacity: 0.4
112
- }
113
- ),
114
- animate && /* @__PURE__ */ jsxs(Fragment, { children: [
115
- /* @__PURE__ */ jsx(
116
- "animate",
117
- {
118
- attributeName: "opacity",
119
- from: "0",
120
- to: "0.8",
121
- dur: halfDur,
122
- begin: bloomAt,
123
- fill: "freeze"
124
- }
125
- ),
126
- /* @__PURE__ */ jsx(
127
- "animateTransform",
128
- {
129
- attributeName: "transform",
130
- type: "scale",
131
- values: "0 0;1 1",
132
- keyTimes: "0;1",
133
- keySplines: "0.34 1 0.64 1",
134
- calcMode: "spline",
135
- dur: halfDur,
136
- begin: bloomAt,
137
- fill: "freeze"
138
- }
139
- )
140
- ] })
141
- ] }) }, `l${i}`)),
142
- flowerPositions.map((f, fi) => /* @__PURE__ */ jsxs("g", { opacity: animate ? 0 : 1, children: [
143
- petalOffsets.map(([ox, oy], pi) => /* @__PURE__ */ jsx(
144
- "circle",
70
+ return retimeTree(
71
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
72
+ children,
73
+ /* @__PURE__ */ jsxs(
74
+ "svg",
75
+ {
76
+ viewBox: "0 0 100 100",
77
+ style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%" },
78
+ "aria-hidden": true,
79
+ children: [
80
+ [vine1, vine2, ...showExtra ? [vine3, vine4] : []].map((d, i) => /* @__PURE__ */ jsx(
81
+ "path",
145
82
  {
146
- cx: f.x + ox * f.r,
147
- cy: f.y + oy * f.r,
148
- r: f.r * 0.5,
149
- fill: petalColor,
150
- opacity: 0.85
83
+ d,
84
+ fill: "none",
85
+ stroke: vineColor,
86
+ strokeWidth: i < 2 ? 1.5 : 1,
87
+ strokeLinecap: "round",
88
+ opacity: i < 2 ? 0.85 : 0.55,
89
+ ...animate ? { strokeDasharray: dashLen, strokeDashoffset: dashLen } : {},
90
+ children: animate && /* @__PURE__ */ jsx(
91
+ "animate",
92
+ {
93
+ attributeName: "stroke-dashoffset",
94
+ from: `${dashLen}`,
95
+ to: "0",
96
+ dur,
97
+ fill: "freeze",
98
+ begin: i < 2 ? "0s" : `${duration * 0.3}s`
99
+ }
100
+ )
151
101
  },
152
- pi
102
+ `v${i}`
153
103
  )),
154
- /* @__PURE__ */ jsx("circle", { cx: f.x, cy: f.y, r: f.r * 0.3, fill: "#fde047" }),
155
- animate && /* @__PURE__ */ jsxs(Fragment, { children: [
104
+ allLeaves.map((l, i) => /* @__PURE__ */ jsx("g", { transform: `translate(${l.x},${l.y}) rotate(${l.a})`, children: /* @__PURE__ */ jsxs("g", { opacity: animate ? 0 : 0.8, children: [
105
+ /* @__PURE__ */ jsx("path", { d: leafD, fill: lc }),
156
106
  /* @__PURE__ */ jsx(
157
- "animate",
107
+ "line",
158
108
  {
159
- attributeName: "opacity",
160
- from: "0",
161
- to: "1",
162
- dur: halfDur,
163
- begin: flowerAt,
164
- fill: "freeze"
109
+ x1: 0,
110
+ y1: -3,
111
+ x2: 0,
112
+ y2: 2.5,
113
+ stroke: lc,
114
+ strokeWidth: "0.4",
115
+ opacity: 0.4
165
116
  }
166
117
  ),
167
- /* @__PURE__ */ jsx(
168
- "animateTransform",
118
+ animate && /* @__PURE__ */ jsxs(Fragment, { children: [
119
+ /* @__PURE__ */ jsx(
120
+ "animate",
121
+ {
122
+ attributeName: "opacity",
123
+ from: "0",
124
+ to: "0.8",
125
+ dur: halfDur,
126
+ begin: bloomAt,
127
+ fill: "freeze"
128
+ }
129
+ ),
130
+ /* @__PURE__ */ jsx(
131
+ "animateTransform",
132
+ {
133
+ attributeName: "transform",
134
+ type: "scale",
135
+ values: "0 0;1 1",
136
+ keyTimes: "0;1",
137
+ keySplines: "0.34 1 0.64 1",
138
+ calcMode: "spline",
139
+ dur: halfDur,
140
+ begin: bloomAt,
141
+ fill: "freeze"
142
+ }
143
+ )
144
+ ] })
145
+ ] }) }, `l${i}`)),
146
+ flowerPositions.map((f, fi) => /* @__PURE__ */ jsxs("g", { opacity: animate ? 0 : 1, children: [
147
+ petalOffsets.map(([ox, oy], pi) => /* @__PURE__ */ jsx(
148
+ "circle",
169
149
  {
170
- attributeName: "transform",
171
- type: "scale",
172
- values: "0.3 0.3;1 1",
173
- keyTimes: "0;1",
174
- keySplines: "0.34 1 0.64 1",
175
- calcMode: "spline",
176
- dur: halfDur,
177
- begin: flowerAt,
178
- fill: "freeze"
179
- }
180
- )
181
- ] })
182
- ] }, `f${fi}`)),
183
- animate && /* @__PURE__ */ jsx(
184
- "animateTransform",
185
- {
186
- attributeName: "transform",
187
- type: "rotate",
188
- values: "0 50 50;1 50 50;-1 50 50;0 50 50",
189
- dur: "4s",
190
- repeatCount: "indefinite",
191
- begin: `${duration}s`
192
- }
193
- )
194
- ]
195
- }
196
- )
197
- ] });
150
+ cx: f.x + ox * f.r,
151
+ cy: f.y + oy * f.r,
152
+ r: f.r * 0.5,
153
+ fill: petalColor,
154
+ opacity: 0.85
155
+ },
156
+ pi
157
+ )),
158
+ /* @__PURE__ */ jsx("circle", { cx: f.x, cy: f.y, r: f.r * 0.3, fill: "#fde047" }),
159
+ animate && /* @__PURE__ */ jsxs(Fragment, { children: [
160
+ /* @__PURE__ */ jsx(
161
+ "animate",
162
+ {
163
+ attributeName: "opacity",
164
+ from: "0",
165
+ to: "1",
166
+ dur: halfDur,
167
+ begin: flowerAt,
168
+ fill: "freeze"
169
+ }
170
+ ),
171
+ /* @__PURE__ */ jsx(
172
+ "animateTransform",
173
+ {
174
+ attributeName: "transform",
175
+ type: "scale",
176
+ values: "0.3 0.3;1 1",
177
+ keyTimes: "0;1",
178
+ keySplines: "0.34 1 0.64 1",
179
+ calcMode: "spline",
180
+ dur: halfDur,
181
+ begin: flowerAt,
182
+ fill: "freeze"
183
+ }
184
+ )
185
+ ] })
186
+ ] }, `f${fi}`)),
187
+ animate && /* @__PURE__ */ jsx(
188
+ "animateTransform",
189
+ {
190
+ attributeName: "transform",
191
+ type: "rotate",
192
+ values: "0 50 50;1 50 50;-1 50 50;0 50 50",
193
+ dur: "4s",
194
+ repeatCount: "indefinite",
195
+ begin: `${duration}s`
196
+ }
197
+ )
198
+ ]
199
+ }
200
+ )
201
+ ] }),
202
+ durationScale(durationProp !== void 0, animationSpeed)
203
+ );
198
204
  }
199
205
  ),
200
206
  { displayName: "NtdIconFloral" }
@@ -204,13 +210,15 @@ const NtdIconFestive = /* @__PURE__ */ Object.assign(
204
210
  ({
205
211
  children,
206
212
  animate = true,
207
- duration = 1.5,
213
+ duration: durationProp,
214
+ animationSpeed,
208
215
  intensity = "normal",
209
216
  colors,
210
217
  sparkleColor = "#fbbf24",
211
218
  className,
212
219
  style
213
220
  }, ref) => {
221
+ const duration = durationProp ?? 1.5;
214
222
  const cols = colors ?? ["#ef4444", "#f59e0b", "#22c55e", "#3b82f6", "#a855f7", "#ec4899"];
215
223
  const dur = `${duration * 0.6}s`;
216
224
  const baseConfetti = [
@@ -260,122 +268,125 @@ const NtdIconFestive = /* @__PURE__ */ Object.assign(
260
268
  { cx: 97, cy: 45, r: 1.1 }
261
269
  ] : []
262
270
  ];
263
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
264
- children,
265
- /* @__PURE__ */ jsxs(
266
- "svg",
267
- {
268
- viewBox: "0 0 100 100",
269
- style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%" },
270
- "aria-hidden": true,
271
- children: [
272
- allConfetti.map((c, i) => {
273
- const delay = `${(i * 0.07).toFixed(2)}s`;
274
- const col = cols[c.ci % cols.length];
275
- return /* @__PURE__ */ jsx("g", { transform: "translate(50,50)", children: /* @__PURE__ */ jsxs("g", { opacity: animate ? 0 : 0.85, children: [
276
- /* @__PURE__ */ jsx(
277
- "rect",
278
- {
279
- x: c.x - 50 - 1.5,
280
- y: c.y - 50 - 3,
281
- width: 3,
282
- height: 6,
283
- rx: 0.5,
284
- fill: col,
285
- transform: `rotate(${c.r} ${c.x - 50} ${c.y - 50})`
286
- }
287
- ),
288
- animate && /* @__PURE__ */ jsxs(Fragment, { children: [
271
+ return retimeTree(
272
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
273
+ children,
274
+ /* @__PURE__ */ jsxs(
275
+ "svg",
276
+ {
277
+ viewBox: "0 0 100 100",
278
+ style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%" },
279
+ "aria-hidden": true,
280
+ children: [
281
+ allConfetti.map((c, i) => {
282
+ const delay = `${(i * 0.07).toFixed(2)}s`;
283
+ const col = cols[c.ci % cols.length];
284
+ return /* @__PURE__ */ jsx("g", { transform: "translate(50,50)", children: /* @__PURE__ */ jsxs("g", { opacity: animate ? 0 : 0.85, children: [
289
285
  /* @__PURE__ */ jsx(
290
- "animate",
286
+ "rect",
291
287
  {
292
- attributeName: "opacity",
293
- from: "0",
294
- to: "0.85",
295
- dur: "0.4s",
296
- begin: delay,
297
- fill: "freeze"
288
+ x: c.x - 50 - 1.5,
289
+ y: c.y - 50 - 3,
290
+ width: 3,
291
+ height: 6,
292
+ rx: 0.5,
293
+ fill: col,
294
+ transform: `rotate(${c.r} ${c.x - 50} ${c.y - 50})`
298
295
  }
299
296
  ),
300
- /* @__PURE__ */ jsx(
301
- "animateTransform",
302
- {
303
- attributeName: "transform",
304
- type: "scale",
305
- values: "0 0;1 1",
306
- keyTimes: "0;1",
307
- keySplines: "0.34 1 0.64 1",
308
- calcMode: "spline",
309
- dur,
310
- begin: delay,
311
- fill: "freeze"
312
- }
313
- )
314
- ] })
315
- ] }) }, `c${i}`);
316
- }),
317
- stars.map((s, i) => /* @__PURE__ */ jsxs("g", { transform: `translate(${s.x},${s.y}) scale(${s.s})`, children: [
318
- /* @__PURE__ */ jsx("path", { d: starD, fill: sparkleColor, opacity: animate ? 0 : 0.9, children: animate && /* @__PURE__ */ jsx(
319
- "animate",
320
- {
321
- attributeName: "opacity",
322
- from: "0",
323
- to: "0.9",
324
- dur: "0.5s",
325
- begin: `${(i * 0.15 + 0.3).toFixed(2)}s`,
326
- fill: "freeze"
327
- }
328
- ) }),
329
- animate && /* @__PURE__ */ jsx(
330
- "animateTransform",
297
+ animate && /* @__PURE__ */ jsxs(Fragment, { children: [
298
+ /* @__PURE__ */ jsx(
299
+ "animate",
300
+ {
301
+ attributeName: "opacity",
302
+ from: "0",
303
+ to: "0.85",
304
+ dur: "0.4s",
305
+ begin: delay,
306
+ fill: "freeze"
307
+ }
308
+ ),
309
+ /* @__PURE__ */ jsx(
310
+ "animateTransform",
311
+ {
312
+ attributeName: "transform",
313
+ type: "scale",
314
+ values: "0 0;1 1",
315
+ keyTimes: "0;1",
316
+ keySplines: "0.34 1 0.64 1",
317
+ calcMode: "spline",
318
+ dur,
319
+ begin: delay,
320
+ fill: "freeze"
321
+ }
322
+ )
323
+ ] })
324
+ ] }) }, `c${i}`);
325
+ }),
326
+ stars.map((s, i) => /* @__PURE__ */ jsxs("g", { transform: `translate(${s.x},${s.y}) scale(${s.s})`, children: [
327
+ /* @__PURE__ */ jsx("path", { d: starD, fill: sparkleColor, opacity: animate ? 0 : 0.9, children: animate && /* @__PURE__ */ jsx(
328
+ "animate",
329
+ {
330
+ attributeName: "opacity",
331
+ from: "0",
332
+ to: "0.9",
333
+ dur: "0.5s",
334
+ begin: `${(i * 0.15 + 0.3).toFixed(2)}s`,
335
+ fill: "freeze"
336
+ }
337
+ ) }),
338
+ animate && /* @__PURE__ */ jsx(
339
+ "animateTransform",
340
+ {
341
+ attributeName: "transform",
342
+ type: "scale",
343
+ values: `${s.s};${s.s * 1.3};${s.s}`,
344
+ dur: "1.5s",
345
+ repeatCount: "indefinite",
346
+ begin: `${duration + 0.5}s`
347
+ }
348
+ )
349
+ ] }, `s${i}`)),
350
+ sparkles.map((sp, i) => /* @__PURE__ */ jsx(
351
+ "circle",
331
352
  {
332
- attributeName: "transform",
333
- type: "scale",
334
- values: `${s.s};${s.s * 1.3};${s.s}`,
335
- dur: "1.5s",
336
- repeatCount: "indefinite",
337
- begin: `${duration + 0.5}s`
338
- }
339
- )
340
- ] }, `s${i}`)),
341
- sparkles.map((sp, i) => /* @__PURE__ */ jsx(
342
- "circle",
343
- {
344
- cx: sp.cx,
345
- cy: sp.cy,
346
- r: sp.r,
347
- fill: sparkleColor,
348
- opacity: animate ? 0 : 0.7,
349
- children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
350
- /* @__PURE__ */ jsx(
351
- "animate",
352
- {
353
- attributeName: "opacity",
354
- from: "0",
355
- to: "0.7",
356
- dur: "0.3s",
357
- begin: `${(duration * 0.4 + i * 0.08).toFixed(2)}s`,
358
- fill: "freeze"
359
- }
360
- ),
361
- /* @__PURE__ */ jsx(
362
- "animate",
363
- {
364
- attributeName: "opacity",
365
- values: "0.3;0.9;0.3",
366
- dur: `${1 + i * 0.3}s`,
367
- repeatCount: "indefinite",
368
- begin: `${duration}s`
369
- }
370
- )
371
- ] })
372
- },
373
- `sp${i}`
374
- ))
375
- ]
376
- }
377
- )
378
- ] });
353
+ cx: sp.cx,
354
+ cy: sp.cy,
355
+ r: sp.r,
356
+ fill: sparkleColor,
357
+ opacity: animate ? 0 : 0.7,
358
+ children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
359
+ /* @__PURE__ */ jsx(
360
+ "animate",
361
+ {
362
+ attributeName: "opacity",
363
+ from: "0",
364
+ to: "0.7",
365
+ dur: "0.3s",
366
+ begin: `${(duration * 0.4 + i * 0.08).toFixed(2)}s`,
367
+ fill: "freeze"
368
+ }
369
+ ),
370
+ /* @__PURE__ */ jsx(
371
+ "animate",
372
+ {
373
+ attributeName: "opacity",
374
+ values: "0.3;0.9;0.3",
375
+ dur: `${1 + i * 0.3}s`,
376
+ repeatCount: "indefinite",
377
+ begin: `${duration}s`
378
+ }
379
+ )
380
+ ] })
381
+ },
382
+ `sp${i}`
383
+ ))
384
+ ]
385
+ }
386
+ )
387
+ ] }),
388
+ durationScale(durationProp !== void 0, animationSpeed)
389
+ );
379
390
  }
380
391
  ),
381
392
  { displayName: "NtdIconFestive" }
@@ -385,7 +396,8 @@ const NtdIconNeon = /* @__PURE__ */ Object.assign(
385
396
  ({
386
397
  children,
387
398
  animate = true,
388
- duration = 4,
399
+ duration: durationProp,
400
+ animationSpeed,
389
401
  intensity = "normal",
390
402
  glowColor = "#0ff",
391
403
  secondaryGlow,
@@ -393,6 +405,7 @@ const NtdIconNeon = /* @__PURE__ */ Object.assign(
393
405
  className,
394
406
  style
395
407
  }, ref) => {
408
+ const duration = durationProp ?? 4;
396
409
  const uid = useId().replace(/[^a-zA-Z0-9]/g, "_");
397
410
  const glow2 = secondaryGlow ?? glowColor;
398
411
  const blur = intensity === "dense" ? 8 : intensity === "subtle" ? 3 : 5;
@@ -405,25 +418,28 @@ const NtdIconNeon = /* @__PURE__ */ Object.assign(
405
418
  ].filter(Boolean).join(" ");
406
419
  const dimFilter = `drop-shadow(0 0 ${blur * 0.2}px ${glowColor})`;
407
420
  const animName = `ntd_neon_${uid}`;
408
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
409
- animate && flicker && /* @__PURE__ */ jsx("style", { children: `
421
+ return retimeTree(
422
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
423
+ animate && flicker && /* @__PURE__ */ jsx("style", { children: `
410
424
  @keyframes ${animName} {
411
425
  0%, 19%, 21%, 23%, 25%, 54%, 56%, 100% { opacity: 1; filter: ${filterValue}; }
412
426
  20%, 24%, 55% { opacity: 0.5; filter: ${dimFilter}; }
413
427
  }
414
428
  ` }),
415
- /* @__PURE__ */ jsx(
416
- "span",
417
- {
418
- style: {
419
- display: "inline-flex",
420
- filter: filterValue,
421
- ...animate && flicker ? { animation: `${animName} ${duration}s infinite` } : {}
422
- },
423
- children
424
- }
425
- )
426
- ] });
429
+ /* @__PURE__ */ jsx(
430
+ "span",
431
+ {
432
+ style: {
433
+ display: "inline-flex",
434
+ filter: filterValue,
435
+ ...animate && flicker ? { animation: `${animName} ${duration}s infinite` } : {}
436
+ },
437
+ children
438
+ }
439
+ )
440
+ ] }),
441
+ durationScale(durationProp !== void 0, animationSpeed)
442
+ );
427
443
  }
428
444
  ),
429
445
  { displayName: "NtdIconNeon" }
@@ -433,13 +449,15 @@ const NtdIconSketch = /* @__PURE__ */ Object.assign(
433
449
  ({
434
450
  children,
435
451
  animate = true,
436
- duration = 1.5,
452
+ duration: durationProp,
453
+ animationSpeed,
437
454
  intensity = "normal",
438
455
  strokeColor = "#374151",
439
456
  roughness = 2,
440
457
  className,
441
458
  style
442
459
  }, ref) => {
460
+ const duration = durationProp ?? 1.5;
443
461
  const uid = useId().replace(/[^a-zA-Z0-9]/g, "_");
444
462
  const filterId = `ntd_sketch_${uid}`;
445
463
  const dur = `${duration}s`;
@@ -455,112 +473,115 @@ const NtdIconSketch = /* @__PURE__ */ Object.assign(
455
473
  { x1: 10, y1: 12, x2: 16, y2: 10 },
456
474
  { x1: 84, y1: 12, x2: 90, y2: 10 }
457
475
  ];
458
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
459
- /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("filter", { id: filterId, children: [
460
- /* @__PURE__ */ jsx(
461
- "feTurbulence",
462
- {
463
- type: "turbulence",
464
- baseFrequency: 0.02 + roughness * 8e-3,
465
- numOctaves: 3,
466
- seed: 2,
467
- result: "noise"
468
- }
469
- ),
470
- /* @__PURE__ */ jsx(
471
- "feDisplacementMap",
476
+ return retimeTree(
477
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
478
+ /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("filter", { id: filterId, children: [
479
+ /* @__PURE__ */ jsx(
480
+ "feTurbulence",
481
+ {
482
+ type: "turbulence",
483
+ baseFrequency: 0.02 + roughness * 8e-3,
484
+ numOctaves: 3,
485
+ seed: 2,
486
+ result: "noise"
487
+ }
488
+ ),
489
+ /* @__PURE__ */ jsx(
490
+ "feDisplacementMap",
491
+ {
492
+ in: "SourceGraphic",
493
+ in2: "noise",
494
+ scale: roughness,
495
+ xChannelSelector: "R",
496
+ yChannelSelector: "G"
497
+ }
498
+ )
499
+ ] }) }) }),
500
+ /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", filter: `url(#${filterId})` }, children }),
501
+ /* @__PURE__ */ jsxs(
502
+ "svg",
472
503
  {
473
- in: "SourceGraphic",
474
- in2: "noise",
475
- scale: roughness,
476
- xChannelSelector: "R",
477
- yChannelSelector: "G"
504
+ viewBox: "0 0 100 100",
505
+ style: { ...overlayBase, inset: "-20%", width: "140%", height: "140%" },
506
+ "aria-hidden": true,
507
+ children: [
508
+ /* @__PURE__ */ jsx(
509
+ "path",
510
+ {
511
+ d: scribbleMain,
512
+ fill: "none",
513
+ stroke: strokeColor,
514
+ strokeWidth: "1",
515
+ strokeLinecap: "round",
516
+ opacity: 0.5,
517
+ ...animate ? { strokeDasharray: dashLen, strokeDashoffset: dashLen } : {},
518
+ children: animate && /* @__PURE__ */ jsx(
519
+ "animate",
520
+ {
521
+ attributeName: "stroke-dashoffset",
522
+ from: `${dashLen}`,
523
+ to: "0",
524
+ dur,
525
+ fill: "freeze"
526
+ }
527
+ )
528
+ }
529
+ ),
530
+ intensity !== "subtle" && scribbleExtra.slice(0, intensity === "dense" ? 2 : 1).map((d, i) => /* @__PURE__ */ jsx(
531
+ "path",
532
+ {
533
+ d,
534
+ fill: "none",
535
+ stroke: strokeColor,
536
+ strokeWidth: "0.8",
537
+ strokeLinecap: "round",
538
+ opacity: 0.35,
539
+ ...animate ? { strokeDasharray: dashLen, strokeDashoffset: dashLen } : {},
540
+ children: animate && /* @__PURE__ */ jsx(
541
+ "animate",
542
+ {
543
+ attributeName: "stroke-dashoffset",
544
+ from: `${dashLen}`,
545
+ to: "0",
546
+ dur,
547
+ fill: "freeze",
548
+ begin: `${0.3 + i * 0.2}s`
549
+ }
550
+ )
551
+ },
552
+ `se${i}`
553
+ )),
554
+ hatchPositions.slice(0, hatchCount).map((p, i) => /* @__PURE__ */ jsx(
555
+ "line",
556
+ {
557
+ x1: p.x1,
558
+ y1: p.y1,
559
+ x2: p.x2,
560
+ y2: p.y2,
561
+ stroke: strokeColor,
562
+ strokeWidth: "0.6",
563
+ strokeLinecap: "round",
564
+ opacity: animate ? 0 : 0.3,
565
+ children: animate && /* @__PURE__ */ jsx(
566
+ "animate",
567
+ {
568
+ attributeName: "opacity",
569
+ from: "0",
570
+ to: "0.3",
571
+ dur: "0.3s",
572
+ begin: `${duration * 0.7 + i * 0.1}s`,
573
+ fill: "freeze"
574
+ }
575
+ )
576
+ },
577
+ `h${i}`
578
+ ))
579
+ ]
478
580
  }
479
581
  )
480
- ] }) }) }),
481
- /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", filter: `url(#${filterId})` }, children }),
482
- /* @__PURE__ */ jsxs(
483
- "svg",
484
- {
485
- viewBox: "0 0 100 100",
486
- style: { ...overlayBase, inset: "-20%", width: "140%", height: "140%" },
487
- "aria-hidden": true,
488
- children: [
489
- /* @__PURE__ */ jsx(
490
- "path",
491
- {
492
- d: scribbleMain,
493
- fill: "none",
494
- stroke: strokeColor,
495
- strokeWidth: "1",
496
- strokeLinecap: "round",
497
- opacity: 0.5,
498
- ...animate ? { strokeDasharray: dashLen, strokeDashoffset: dashLen } : {},
499
- children: animate && /* @__PURE__ */ jsx(
500
- "animate",
501
- {
502
- attributeName: "stroke-dashoffset",
503
- from: `${dashLen}`,
504
- to: "0",
505
- dur,
506
- fill: "freeze"
507
- }
508
- )
509
- }
510
- ),
511
- intensity !== "subtle" && scribbleExtra.slice(0, intensity === "dense" ? 2 : 1).map((d, i) => /* @__PURE__ */ jsx(
512
- "path",
513
- {
514
- d,
515
- fill: "none",
516
- stroke: strokeColor,
517
- strokeWidth: "0.8",
518
- strokeLinecap: "round",
519
- opacity: 0.35,
520
- ...animate ? { strokeDasharray: dashLen, strokeDashoffset: dashLen } : {},
521
- children: animate && /* @__PURE__ */ jsx(
522
- "animate",
523
- {
524
- attributeName: "stroke-dashoffset",
525
- from: `${dashLen}`,
526
- to: "0",
527
- dur,
528
- fill: "freeze",
529
- begin: `${0.3 + i * 0.2}s`
530
- }
531
- )
532
- },
533
- `se${i}`
534
- )),
535
- hatchPositions.slice(0, hatchCount).map((p, i) => /* @__PURE__ */ jsx(
536
- "line",
537
- {
538
- x1: p.x1,
539
- y1: p.y1,
540
- x2: p.x2,
541
- y2: p.y2,
542
- stroke: strokeColor,
543
- strokeWidth: "0.6",
544
- strokeLinecap: "round",
545
- opacity: animate ? 0 : 0.3,
546
- children: animate && /* @__PURE__ */ jsx(
547
- "animate",
548
- {
549
- attributeName: "opacity",
550
- from: "0",
551
- to: "0.3",
552
- dur: "0.3s",
553
- begin: `${duration * 0.7 + i * 0.1}s`,
554
- fill: "freeze"
555
- }
556
- )
557
- },
558
- `h${i}`
559
- ))
560
- ]
561
- }
562
- )
563
- ] });
582
+ ] }),
583
+ durationScale(durationProp !== void 0, animationSpeed)
584
+ );
564
585
  }
565
586
  ),
566
587
  { displayName: "NtdIconSketch" }
@@ -570,13 +591,15 @@ const NtdIconWatercolor = /* @__PURE__ */ Object.assign(
570
591
  ({
571
592
  children,
572
593
  animate = true,
573
- duration = 2,
594
+ duration: durationProp,
595
+ animationSpeed,
574
596
  intensity = "normal",
575
597
  tintColor = "#818cf8",
576
598
  bleedColor = "#f0abfc",
577
599
  className,
578
600
  style
579
601
  }, ref) => {
602
+ const duration = durationProp ?? 2;
580
603
  const uid = useId().replace(/[^a-zA-Z0-9]/g, "_");
581
604
  const filterId = `ntd_wc_${uid}`;
582
605
  const blobFilter = `${filterId}_blob`;
@@ -605,115 +628,118 @@ const NtdIconWatercolor = /* @__PURE__ */ Object.assign(
605
628
  { cx: 92, cy: 55, r: 1 }
606
629
  ] : []
607
630
  ];
608
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
609
- /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsxs("defs", { children: [
610
- /* @__PURE__ */ jsxs("filter", { id: filterId, x: "-20%", y: "-20%", width: "140%", height: "140%", children: [
611
- /* @__PURE__ */ jsx(
612
- "feTurbulence",
613
- {
614
- type: "fractalNoise",
615
- baseFrequency: "0.04",
616
- numOctaves: 4,
617
- seed: 5,
618
- result: "noise"
619
- }
620
- ),
621
- /* @__PURE__ */ jsx(
622
- "feDisplacementMap",
623
- {
624
- in: "SourceGraphic",
625
- in2: "noise",
626
- scale: 3,
627
- xChannelSelector: "R",
628
- yChannelSelector: "G",
629
- result: "displaced"
630
- }
631
- ),
632
- /* @__PURE__ */ jsx("feGaussianBlur", { in: "displaced", stdDeviation: "0.5" })
633
- ] }),
634
- /* @__PURE__ */ jsx("filter", { id: blobFilter, children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "3" }) })
635
- ] }) }),
636
- /* @__PURE__ */ jsxs(
637
- "svg",
638
- {
639
- viewBox: "0 0 100 100",
640
- style: { ...overlayBase, inset: "-25%", width: "150%", height: "150%", zIndex: 0 },
641
- "aria-hidden": true,
642
- children: [
643
- splotches.map((s, i) => /* @__PURE__ */ jsx(
644
- "circle",
631
+ return retimeTree(
632
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
633
+ /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsxs("defs", { children: [
634
+ /* @__PURE__ */ jsxs("filter", { id: filterId, x: "-20%", y: "-20%", width: "140%", height: "140%", children: [
635
+ /* @__PURE__ */ jsx(
636
+ "feTurbulence",
645
637
  {
646
- cx: s.cx,
647
- cy: s.cy,
648
- r: animate ? 0 : s.r,
649
- fill: s.color,
650
- opacity: s.op,
651
- filter: `url(#${blobFilter})`,
652
- children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
653
- /* @__PURE__ */ jsx(
638
+ type: "fractalNoise",
639
+ baseFrequency: "0.04",
640
+ numOctaves: 4,
641
+ seed: 5,
642
+ result: "noise"
643
+ }
644
+ ),
645
+ /* @__PURE__ */ jsx(
646
+ "feDisplacementMap",
647
+ {
648
+ in: "SourceGraphic",
649
+ in2: "noise",
650
+ scale: 3,
651
+ xChannelSelector: "R",
652
+ yChannelSelector: "G",
653
+ result: "displaced"
654
+ }
655
+ ),
656
+ /* @__PURE__ */ jsx("feGaussianBlur", { in: "displaced", stdDeviation: "0.5" })
657
+ ] }),
658
+ /* @__PURE__ */ jsx("filter", { id: blobFilter, children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "3" }) })
659
+ ] }) }),
660
+ /* @__PURE__ */ jsxs(
661
+ "svg",
662
+ {
663
+ viewBox: "0 0 100 100",
664
+ style: { ...overlayBase, inset: "-25%", width: "150%", height: "150%", zIndex: 0 },
665
+ "aria-hidden": true,
666
+ children: [
667
+ splotches.map((s, i) => /* @__PURE__ */ jsx(
668
+ "circle",
669
+ {
670
+ cx: s.cx,
671
+ cy: s.cy,
672
+ r: animate ? 0 : s.r,
673
+ fill: s.color,
674
+ opacity: s.op,
675
+ filter: `url(#${blobFilter})`,
676
+ children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
677
+ /* @__PURE__ */ jsx(
678
+ "animate",
679
+ {
680
+ attributeName: "r",
681
+ from: "0",
682
+ to: `${s.r}`,
683
+ dur: `${duration * 0.7}s`,
684
+ begin: `${(i * 0.15).toFixed(2)}s`,
685
+ fill: "freeze"
686
+ }
687
+ ),
688
+ /* @__PURE__ */ jsx(
689
+ "animate",
690
+ {
691
+ attributeName: "opacity",
692
+ values: `${s.op};${s.op * 1.3};${s.op}`,
693
+ dur: "3s",
694
+ begin: `${duration}s`,
695
+ repeatCount: "indefinite"
696
+ }
697
+ )
698
+ ] })
699
+ },
700
+ `sp${i}`
701
+ )),
702
+ splatters.map((d, i) => /* @__PURE__ */ jsx(
703
+ "circle",
704
+ {
705
+ cx: d.cx,
706
+ cy: d.cy,
707
+ r: d.r,
708
+ fill: i % 2 === 0 ? tintColor : bleedColor,
709
+ opacity: animate ? 0 : 0.3,
710
+ filter: `url(#${blobFilter})`,
711
+ children: animate && /* @__PURE__ */ jsx(
654
712
  "animate",
655
713
  {
656
- attributeName: "r",
714
+ attributeName: "opacity",
657
715
  from: "0",
658
- to: `${s.r}`,
659
- dur: `${duration * 0.7}s`,
660
- begin: `${(i * 0.15).toFixed(2)}s`,
716
+ to: "0.3",
717
+ dur: "0.3s",
718
+ begin: `${(duration * 0.5 + i * 0.1).toFixed(2)}s`,
661
719
  fill: "freeze"
662
720
  }
663
- ),
664
- /* @__PURE__ */ jsx(
665
- "animate",
666
- {
667
- attributeName: "opacity",
668
- values: `${s.op};${s.op * 1.3};${s.op}`,
669
- dur: "3s",
670
- begin: `${duration}s`,
671
- repeatCount: "indefinite"
672
- }
673
721
  )
674
- ] })
675
- },
676
- `sp${i}`
677
- )),
678
- splatters.map((d, i) => /* @__PURE__ */ jsx(
679
- "circle",
680
- {
681
- cx: d.cx,
682
- cy: d.cy,
683
- r: d.r,
684
- fill: i % 2 === 0 ? tintColor : bleedColor,
685
- opacity: animate ? 0 : 0.3,
686
- filter: `url(#${blobFilter})`,
687
- children: animate && /* @__PURE__ */ jsx(
688
- "animate",
689
- {
690
- attributeName: "opacity",
691
- from: "0",
692
- to: "0.3",
693
- dur: "0.3s",
694
- begin: `${(duration * 0.5 + i * 0.1).toFixed(2)}s`,
695
- fill: "freeze"
696
- }
697
- )
698
- },
699
- `dot${i}`
700
- ))
701
- ]
702
- }
703
- ),
704
- /* @__PURE__ */ jsx(
705
- "span",
706
- {
707
- style: {
708
- display: "inline-flex",
709
- filter: `url(#${filterId})`,
710
- position: "relative",
711
- zIndex: 1
712
- },
713
- children
714
- }
715
- )
716
- ] });
722
+ },
723
+ `dot${i}`
724
+ ))
725
+ ]
726
+ }
727
+ ),
728
+ /* @__PURE__ */ jsx(
729
+ "span",
730
+ {
731
+ style: {
732
+ display: "inline-flex",
733
+ filter: `url(#${filterId})`,
734
+ position: "relative",
735
+ zIndex: 1
736
+ },
737
+ children
738
+ }
739
+ )
740
+ ] }),
741
+ durationScale(durationProp !== void 0, animationSpeed)
742
+ );
717
743
  }
718
744
  ),
719
745
  { displayName: "NtdIconWatercolor" }
@@ -723,7 +749,8 @@ const NtdIconCosmic = /* @__PURE__ */ Object.assign(
723
749
  ({
724
750
  children,
725
751
  animate = true,
726
- duration = 2,
752
+ duration: durationProp,
753
+ animationSpeed,
727
754
  intensity = "normal",
728
755
  starColor = "#e2e8f0",
729
756
  nebulaColor = "#7c3aed",
@@ -731,6 +758,7 @@ const NtdIconCosmic = /* @__PURE__ */ Object.assign(
731
758
  className,
732
759
  style
733
760
  }, ref) => {
761
+ const duration = durationProp ?? 2;
734
762
  const uid = useId().replace(/[^a-zA-Z0-9]/g, "_");
735
763
  const nebulaFilter = `ntd_cosm_${uid}`;
736
764
  const baseStars = [
@@ -781,154 +809,157 @@ const NtdIconCosmic = /* @__PURE__ */ Object.assign(
781
809
  ] : []
782
810
  ];
783
811
  const lineLen = 80;
784
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
785
- /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("filter", { id: nebulaFilter, children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "4" }) }) }) }),
786
- /* @__PURE__ */ jsxs(
787
- "svg",
788
- {
789
- viewBox: "0 0 100 100",
790
- style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%", zIndex: 0 },
791
- "aria-hidden": true,
792
- children: [
793
- nebulae.map((n, i) => /* @__PURE__ */ jsx(
794
- "circle",
795
- {
796
- cx: n.cx,
797
- cy: n.cy,
798
- r: n.r,
799
- fill: n.color,
800
- opacity: animate ? 0 : n.op,
801
- filter: `url(#${nebulaFilter})`,
802
- children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
803
- /* @__PURE__ */ jsx(
804
- "animate",
805
- {
806
- attributeName: "opacity",
807
- from: "0",
808
- to: `${n.op}`,
809
- dur: `${duration}s`,
810
- fill: "freeze"
811
- }
812
- ),
813
- /* @__PURE__ */ jsx(
814
- "animate",
815
- {
816
- attributeName: "opacity",
817
- values: `${n.op};${n.op * 1.5};${n.op}`,
818
- dur: "5s",
819
- repeatCount: "indefinite",
820
- begin: `${duration}s`
821
- }
822
- ),
823
- /* @__PURE__ */ jsx(
824
- "animate",
825
- {
826
- attributeName: "r",
827
- values: `${n.r};${n.r * 1.1};${n.r}`,
828
- dur: "6s",
829
- repeatCount: "indefinite",
830
- begin: `${duration}s`
831
- }
832
- )
833
- ] })
834
- },
835
- `nb${i}`
836
- )),
837
- constellations.map((c, i) => /* @__PURE__ */ jsx(
838
- "line",
839
- {
840
- x1: c.from[0],
841
- y1: c.from[1],
842
- x2: c.to[0],
843
- y2: c.to[1],
844
- stroke: starColor,
845
- strokeWidth: "0.3",
846
- opacity: 0.25,
847
- ...animate ? { strokeDasharray: lineLen, strokeDashoffset: lineLen } : {},
848
- children: animate && /* @__PURE__ */ jsx(
849
- "animate",
850
- {
851
- attributeName: "stroke-dashoffset",
852
- from: `${lineLen}`,
853
- to: "0",
854
- dur: `${duration * 0.8}s`,
855
- begin: `${(i * 0.2).toFixed(1)}s`,
856
- fill: "freeze"
857
- }
858
- )
859
- },
860
- `cl${i}`
861
- ))
862
- ]
863
- }
864
- ),
865
- /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children }),
866
- /* @__PURE__ */ jsxs(
867
- "svg",
868
- {
869
- viewBox: "0 0 100 100",
870
- style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%", zIndex: 2 },
871
- "aria-hidden": true,
872
- children: [
873
- allStars.map((s, i) => /* @__PURE__ */ jsx(
874
- "circle",
875
- {
876
- cx: s.cx,
877
- cy: s.cy,
878
- r: s.r,
879
- fill: starColor,
880
- opacity: animate ? 0 : 0.8,
881
- children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
882
- /* @__PURE__ */ jsx(
812
+ return retimeTree(
813
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
814
+ /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("filter", { id: nebulaFilter, children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "4" }) }) }) }),
815
+ /* @__PURE__ */ jsxs(
816
+ "svg",
817
+ {
818
+ viewBox: "0 0 100 100",
819
+ style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%", zIndex: 0 },
820
+ "aria-hidden": true,
821
+ children: [
822
+ nebulae.map((n, i) => /* @__PURE__ */ jsx(
823
+ "circle",
824
+ {
825
+ cx: n.cx,
826
+ cy: n.cy,
827
+ r: n.r,
828
+ fill: n.color,
829
+ opacity: animate ? 0 : n.op,
830
+ filter: `url(#${nebulaFilter})`,
831
+ children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
832
+ /* @__PURE__ */ jsx(
833
+ "animate",
834
+ {
835
+ attributeName: "opacity",
836
+ from: "0",
837
+ to: `${n.op}`,
838
+ dur: `${duration}s`,
839
+ fill: "freeze"
840
+ }
841
+ ),
842
+ /* @__PURE__ */ jsx(
843
+ "animate",
844
+ {
845
+ attributeName: "opacity",
846
+ values: `${n.op};${n.op * 1.5};${n.op}`,
847
+ dur: "5s",
848
+ repeatCount: "indefinite",
849
+ begin: `${duration}s`
850
+ }
851
+ ),
852
+ /* @__PURE__ */ jsx(
853
+ "animate",
854
+ {
855
+ attributeName: "r",
856
+ values: `${n.r};${n.r * 1.1};${n.r}`,
857
+ dur: "6s",
858
+ repeatCount: "indefinite",
859
+ begin: `${duration}s`
860
+ }
861
+ )
862
+ ] })
863
+ },
864
+ `nb${i}`
865
+ )),
866
+ constellations.map((c, i) => /* @__PURE__ */ jsx(
867
+ "line",
868
+ {
869
+ x1: c.from[0],
870
+ y1: c.from[1],
871
+ x2: c.to[0],
872
+ y2: c.to[1],
873
+ stroke: starColor,
874
+ strokeWidth: "0.3",
875
+ opacity: 0.25,
876
+ ...animate ? { strokeDasharray: lineLen, strokeDashoffset: lineLen } : {},
877
+ children: animate && /* @__PURE__ */ jsx(
883
878
  "animate",
884
879
  {
885
- attributeName: "opacity",
886
- from: "0",
887
- to: "0.8",
888
- dur: `${duration * 0.5}s`,
889
- begin: `${(i * 0.1).toFixed(2)}s`,
880
+ attributeName: "stroke-dashoffset",
881
+ from: `${lineLen}`,
882
+ to: "0",
883
+ dur: `${duration * 0.8}s`,
884
+ begin: `${(i * 0.2).toFixed(1)}s`,
890
885
  fill: "freeze"
891
886
  }
892
- ),
893
- /* @__PURE__ */ jsx(
894
- "animate",
895
- {
896
- attributeName: "opacity",
897
- values: "0.4;1;0.4",
898
- dur: `${1.5 + i % 4 * 0.4}s`,
899
- repeatCount: "indefinite",
900
- begin: `${duration}s`
901
- }
902
- ),
903
- /* @__PURE__ */ jsx(
904
- "animate",
905
- {
906
- attributeName: "r",
907
- values: `${s.r};${s.r * 1.4};${s.r}`,
908
- dur: `${2 + i % 3 * 0.5}s`,
909
- repeatCount: "indefinite",
910
- begin: `${duration}s`
911
- }
912
887
  )
913
- ] })
914
- },
915
- `st${i}`
916
- )),
917
- animate && /* @__PURE__ */ jsx(
918
- "animateTransform",
919
- {
920
- attributeName: "transform",
921
- type: "rotate",
922
- from: "0 50 50",
923
- to: "360 50 50",
924
- dur: "120s",
925
- repeatCount: "indefinite"
926
- }
927
- )
928
- ]
929
- }
930
- )
931
- ] });
888
+ },
889
+ `cl${i}`
890
+ ))
891
+ ]
892
+ }
893
+ ),
894
+ /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children }),
895
+ /* @__PURE__ */ jsxs(
896
+ "svg",
897
+ {
898
+ viewBox: "0 0 100 100",
899
+ style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%", zIndex: 2 },
900
+ "aria-hidden": true,
901
+ children: [
902
+ allStars.map((s, i) => /* @__PURE__ */ jsx(
903
+ "circle",
904
+ {
905
+ cx: s.cx,
906
+ cy: s.cy,
907
+ r: s.r,
908
+ fill: starColor,
909
+ opacity: animate ? 0 : 0.8,
910
+ children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
911
+ /* @__PURE__ */ jsx(
912
+ "animate",
913
+ {
914
+ attributeName: "opacity",
915
+ from: "0",
916
+ to: "0.8",
917
+ dur: `${duration * 0.5}s`,
918
+ begin: `${(i * 0.1).toFixed(2)}s`,
919
+ fill: "freeze"
920
+ }
921
+ ),
922
+ /* @__PURE__ */ jsx(
923
+ "animate",
924
+ {
925
+ attributeName: "opacity",
926
+ values: "0.4;1;0.4",
927
+ dur: `${1.5 + i % 4 * 0.4}s`,
928
+ repeatCount: "indefinite",
929
+ begin: `${duration}s`
930
+ }
931
+ ),
932
+ /* @__PURE__ */ jsx(
933
+ "animate",
934
+ {
935
+ attributeName: "r",
936
+ values: `${s.r};${s.r * 1.4};${s.r}`,
937
+ dur: `${2 + i % 3 * 0.5}s`,
938
+ repeatCount: "indefinite",
939
+ begin: `${duration}s`
940
+ }
941
+ )
942
+ ] })
943
+ },
944
+ `st${i}`
945
+ )),
946
+ animate && /* @__PURE__ */ jsx(
947
+ "animateTransform",
948
+ {
949
+ attributeName: "transform",
950
+ type: "rotate",
951
+ from: "0 50 50",
952
+ to: "360 50 50",
953
+ dur: "120s",
954
+ repeatCount: "indefinite"
955
+ }
956
+ )
957
+ ]
958
+ }
959
+ )
960
+ ] }),
961
+ durationScale(durationProp !== void 0, animationSpeed)
962
+ );
932
963
  }
933
964
  ),
934
965
  { displayName: "NtdIconCosmic" }
@@ -938,7 +969,8 @@ const NtdIconSteampunk = /* @__PURE__ */ Object.assign(
938
969
  ({
939
970
  children,
940
971
  animate = true,
941
- duration = 3,
972
+ duration: durationProp,
973
+ animationSpeed,
942
974
  intensity = "normal",
943
975
  brassColor = "#b45309",
944
976
  pipeColor = "#78350f",
@@ -946,6 +978,7 @@ const NtdIconSteampunk = /* @__PURE__ */ Object.assign(
946
978
  className,
947
979
  style
948
980
  }, ref) => {
981
+ const duration = durationProp ?? 3;
949
982
  const makeGear = (cx, cy, r, teeth) => {
950
983
  const inner = r * 0.68;
951
984
  const step = Math.PI * 2 / teeth;
@@ -997,110 +1030,113 @@ const NtdIconSteampunk = /* @__PURE__ */ Object.assign(
997
1030
  { cx: 55, cy: -4, r: 2.2 },
998
1031
  { cx: 47, cy: -10, r: 1.6 }
999
1032
  ];
1000
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1001
- /* @__PURE__ */ jsxs(
1002
- "svg",
1003
- {
1004
- viewBox: "0 0 100 100",
1005
- style: { ...overlayBase, inset: "-20%", width: "140%", height: "140%", zIndex: 0 },
1006
- "aria-hidden": true,
1007
- children: [
1008
- pipes.map((p, i) => /* @__PURE__ */ jsx(
1009
- "path",
1010
- {
1011
- d: p.d,
1012
- stroke: pipeColor,
1013
- strokeWidth: p.w,
1014
- fill: "none",
1015
- strokeLinecap: "round",
1016
- opacity: 0.55
1017
- },
1018
- `pipe${i}`
1019
- )),
1020
- rivets.map((rv, i) => /* @__PURE__ */ jsx(
1021
- "circle",
1022
- {
1023
- cx: rv.cx,
1024
- cy: rv.cy,
1025
- r: 1.5,
1026
- fill: brassColor,
1027
- opacity: 0.7
1028
- },
1029
- `rv${i}`
1030
- ))
1031
- ]
1032
- }
1033
- ),
1034
- /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children }),
1035
- /* @__PURE__ */ jsxs(
1036
- "svg",
1037
- {
1038
- viewBox: "0 0 100 100",
1039
- style: { ...overlayBase, inset: "-20%", width: "140%", height: "140%", zIndex: 2 },
1040
- "aria-hidden": true,
1041
- children: [
1042
- gears.map((g, i) => /* @__PURE__ */ jsxs("g", { children: [
1043
- /* @__PURE__ */ jsx("path", { d: makeGear(g.cx, g.cy, g.r, g.teeth), fill: brassColor, opacity: 0.78, children: animate && /* @__PURE__ */ jsx(
1044
- "animateTransform",
1033
+ return retimeTree(
1034
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1035
+ /* @__PURE__ */ jsxs(
1036
+ "svg",
1037
+ {
1038
+ viewBox: "0 0 100 100",
1039
+ style: { ...overlayBase, inset: "-20%", width: "140%", height: "140%", zIndex: 0 },
1040
+ "aria-hidden": true,
1041
+ children: [
1042
+ pipes.map((p, i) => /* @__PURE__ */ jsx(
1043
+ "path",
1045
1044
  {
1046
- attributeName: "transform",
1047
- type: "rotate",
1048
- from: `0 ${g.cx} ${g.cy}`,
1049
- to: `${g.dir * 360} ${g.cx} ${g.cy}`,
1050
- dur: `${duration * g.dm}s`,
1051
- repeatCount: "indefinite"
1052
- }
1053
- ) }),
1054
- /* @__PURE__ */ jsx("circle", { cx: g.cx, cy: g.cy, r: g.r * 0.3, fill: pipeColor, opacity: 0.85 }),
1055
- /* @__PURE__ */ jsx("circle", { cx: g.cx, cy: g.cy, r: g.r * 0.12, fill: brassColor, opacity: 0.6 })
1056
- ] }, `gear${i}`)),
1057
- animate && steamPuffs.map((sp, i) => /* @__PURE__ */ jsxs(
1058
- "circle",
1059
- {
1060
- cx: sp.cx,
1061
- cy: sp.cy,
1062
- r: sp.r,
1063
- fill: steamColor,
1064
- opacity: 0,
1065
- children: [
1066
- /* @__PURE__ */ jsx(
1067
- "animate",
1068
- {
1069
- attributeName: "opacity",
1070
- values: "0;0.45;0",
1071
- dur: "2.4s",
1072
- begin: `${i * 0.7}s`,
1073
- repeatCount: "indefinite"
1074
- }
1075
- ),
1076
- /* @__PURE__ */ jsx(
1077
- "animate",
1078
- {
1079
- attributeName: "cy",
1080
- values: `${sp.cy};${sp.cy - 12}`,
1081
- dur: "2.4s",
1082
- begin: `${i * 0.7}s`,
1083
- repeatCount: "indefinite"
1084
- }
1085
- ),
1086
- /* @__PURE__ */ jsx(
1087
- "animate",
1088
- {
1089
- attributeName: "r",
1090
- values: `${sp.r};${sp.r * 2.2}`,
1091
- dur: "2.4s",
1092
- begin: `${i * 0.7}s`,
1093
- repeatCount: "indefinite"
1094
- }
1095
- )
1096
- ]
1097
- },
1098
- `stm${i}`
1099
- ))
1100
- ]
1101
- }
1102
- )
1103
- ] });
1045
+ d: p.d,
1046
+ stroke: pipeColor,
1047
+ strokeWidth: p.w,
1048
+ fill: "none",
1049
+ strokeLinecap: "round",
1050
+ opacity: 0.55
1051
+ },
1052
+ `pipe${i}`
1053
+ )),
1054
+ rivets.map((rv, i) => /* @__PURE__ */ jsx(
1055
+ "circle",
1056
+ {
1057
+ cx: rv.cx,
1058
+ cy: rv.cy,
1059
+ r: 1.5,
1060
+ fill: brassColor,
1061
+ opacity: 0.7
1062
+ },
1063
+ `rv${i}`
1064
+ ))
1065
+ ]
1066
+ }
1067
+ ),
1068
+ /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children }),
1069
+ /* @__PURE__ */ jsxs(
1070
+ "svg",
1071
+ {
1072
+ viewBox: "0 0 100 100",
1073
+ style: { ...overlayBase, inset: "-20%", width: "140%", height: "140%", zIndex: 2 },
1074
+ "aria-hidden": true,
1075
+ children: [
1076
+ gears.map((g, i) => /* @__PURE__ */ jsxs("g", { children: [
1077
+ /* @__PURE__ */ jsx("path", { d: makeGear(g.cx, g.cy, g.r, g.teeth), fill: brassColor, opacity: 0.78, children: animate && /* @__PURE__ */ jsx(
1078
+ "animateTransform",
1079
+ {
1080
+ attributeName: "transform",
1081
+ type: "rotate",
1082
+ from: `0 ${g.cx} ${g.cy}`,
1083
+ to: `${g.dir * 360} ${g.cx} ${g.cy}`,
1084
+ dur: `${duration * g.dm}s`,
1085
+ repeatCount: "indefinite"
1086
+ }
1087
+ ) }),
1088
+ /* @__PURE__ */ jsx("circle", { cx: g.cx, cy: g.cy, r: g.r * 0.3, fill: pipeColor, opacity: 0.85 }),
1089
+ /* @__PURE__ */ jsx("circle", { cx: g.cx, cy: g.cy, r: g.r * 0.12, fill: brassColor, opacity: 0.6 })
1090
+ ] }, `gear${i}`)),
1091
+ animate && steamPuffs.map((sp, i) => /* @__PURE__ */ jsxs(
1092
+ "circle",
1093
+ {
1094
+ cx: sp.cx,
1095
+ cy: sp.cy,
1096
+ r: sp.r,
1097
+ fill: steamColor,
1098
+ opacity: 0,
1099
+ children: [
1100
+ /* @__PURE__ */ jsx(
1101
+ "animate",
1102
+ {
1103
+ attributeName: "opacity",
1104
+ values: "0;0.45;0",
1105
+ dur: "2.4s",
1106
+ begin: `${i * 0.7}s`,
1107
+ repeatCount: "indefinite"
1108
+ }
1109
+ ),
1110
+ /* @__PURE__ */ jsx(
1111
+ "animate",
1112
+ {
1113
+ attributeName: "cy",
1114
+ values: `${sp.cy};${sp.cy - 12}`,
1115
+ dur: "2.4s",
1116
+ begin: `${i * 0.7}s`,
1117
+ repeatCount: "indefinite"
1118
+ }
1119
+ ),
1120
+ /* @__PURE__ */ jsx(
1121
+ "animate",
1122
+ {
1123
+ attributeName: "r",
1124
+ values: `${sp.r};${sp.r * 2.2}`,
1125
+ dur: "2.4s",
1126
+ begin: `${i * 0.7}s`,
1127
+ repeatCount: "indefinite"
1128
+ }
1129
+ )
1130
+ ]
1131
+ },
1132
+ `stm${i}`
1133
+ ))
1134
+ ]
1135
+ }
1136
+ )
1137
+ ] }),
1138
+ durationScale(durationProp !== void 0, animationSpeed)
1139
+ );
1104
1140
  }
1105
1141
  ),
1106
1142
  { displayName: "NtdIconSteampunk" }
@@ -1110,13 +1146,15 @@ const NtdIconFrost = /* @__PURE__ */ Object.assign(
1110
1146
  ({
1111
1147
  children,
1112
1148
  animate = true,
1113
- duration = 2,
1149
+ duration: durationProp,
1150
+ animationSpeed,
1114
1151
  intensity = "normal",
1115
1152
  crystalColor = "#bae6fd",
1116
1153
  glowColor = "#38bdf8",
1117
1154
  className,
1118
1155
  style
1119
1156
  }, ref) => {
1157
+ const duration = durationProp ?? 2;
1120
1158
  const uid = useId().replace(/[^a-zA-Z0-9]/g, "_");
1121
1159
  const glowFilterId = `ntd_frost_${uid}`;
1122
1160
  const crystalDefs = [
@@ -1173,124 +1211,127 @@ const NtdIconFrost = /* @__PURE__ */ Object.assign(
1173
1211
  { cx: 14, cy: 96, r: 1 },
1174
1212
  { cx: 86, cy: 96, r: 1.1 }
1175
1213
  ];
1176
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1177
- /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("filter", { id: glowFilterId, children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "6" }) }) }) }),
1178
- /* @__PURE__ */ jsxs(
1179
- "svg",
1180
- {
1181
- viewBox: "0 0 100 100",
1182
- style: { ...overlayBase, inset: "-25%", width: "150%", height: "150%", zIndex: 0 },
1183
- "aria-hidden": true,
1184
- children: [
1185
- /* @__PURE__ */ jsx(
1186
- "circle",
1187
- {
1188
- cx: "50",
1189
- cy: "50",
1190
- r: "30",
1191
- fill: glowColor,
1192
- opacity: 0.07,
1193
- filter: `url(#${glowFilterId})`,
1194
- children: animate && /* @__PURE__ */ jsx(
1195
- "animate",
1196
- {
1197
- attributeName: "opacity",
1198
- values: "0.04;0.11;0.04",
1199
- dur: "4s",
1200
- repeatCount: "indefinite"
1201
- }
1202
- )
1203
- }
1204
- ),
1205
- allArms.map((arm, i) => /* @__PURE__ */ jsx(
1206
- "line",
1207
- {
1208
- x1: arm.x1,
1209
- y1: arm.y1,
1210
- x2: arm.x2,
1211
- y2: arm.y2,
1212
- stroke: crystalColor,
1213
- strokeWidth: "0.9",
1214
- strokeLinecap: "round",
1215
- opacity: animate ? 0 : 0.7,
1216
- children: animate && /* @__PURE__ */ jsx(
1217
- "animate",
1218
- {
1219
- attributeName: "opacity",
1220
- from: "0",
1221
- to: "0.7",
1222
- dur: `${duration * 0.4}s`,
1223
- begin: `${arm.delay.toFixed(2)}s`,
1224
- fill: "freeze"
1225
- }
1226
- )
1227
- },
1228
- `arm${i}`
1229
- )),
1230
- allTicks.map((tick, i) => /* @__PURE__ */ jsx(
1231
- "line",
1232
- {
1233
- x1: tick.x1,
1234
- y1: tick.y1,
1235
- x2: tick.x2,
1236
- y2: tick.y2,
1237
- stroke: crystalColor,
1238
- strokeWidth: "0.6",
1239
- strokeLinecap: "round",
1240
- opacity: animate ? 0 : 0.45,
1241
- children: animate && /* @__PURE__ */ jsx(
1242
- "animate",
1243
- {
1244
- attributeName: "opacity",
1245
- from: "0",
1246
- to: "0.45",
1247
- dur: `${duration * 0.3}s`,
1248
- begin: `${tick.delay.toFixed(2)}s`,
1249
- fill: "freeze"
1250
- }
1251
- )
1252
- },
1253
- `tick${i}`
1254
- )),
1255
- sparkles.slice(0, intensity === "subtle" ? 4 : 8).map((sp, i) => /* @__PURE__ */ jsx(
1256
- "circle",
1257
- {
1258
- cx: sp.cx,
1259
- cy: sp.cy,
1260
- r: sp.r,
1261
- fill: glowColor,
1262
- opacity: animate ? 0 : 0.8,
1263
- children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
1264
- /* @__PURE__ */ jsx(
1214
+ return retimeTree(
1215
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1216
+ /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("filter", { id: glowFilterId, children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "6" }) }) }) }),
1217
+ /* @__PURE__ */ jsxs(
1218
+ "svg",
1219
+ {
1220
+ viewBox: "0 0 100 100",
1221
+ style: { ...overlayBase, inset: "-25%", width: "150%", height: "150%", zIndex: 0 },
1222
+ "aria-hidden": true,
1223
+ children: [
1224
+ /* @__PURE__ */ jsx(
1225
+ "circle",
1226
+ {
1227
+ cx: "50",
1228
+ cy: "50",
1229
+ r: "30",
1230
+ fill: glowColor,
1231
+ opacity: 0.07,
1232
+ filter: `url(#${glowFilterId})`,
1233
+ children: animate && /* @__PURE__ */ jsx(
1234
+ "animate",
1235
+ {
1236
+ attributeName: "opacity",
1237
+ values: "0.04;0.11;0.04",
1238
+ dur: "4s",
1239
+ repeatCount: "indefinite"
1240
+ }
1241
+ )
1242
+ }
1243
+ ),
1244
+ allArms.map((arm, i) => /* @__PURE__ */ jsx(
1245
+ "line",
1246
+ {
1247
+ x1: arm.x1,
1248
+ y1: arm.y1,
1249
+ x2: arm.x2,
1250
+ y2: arm.y2,
1251
+ stroke: crystalColor,
1252
+ strokeWidth: "0.9",
1253
+ strokeLinecap: "round",
1254
+ opacity: animate ? 0 : 0.7,
1255
+ children: animate && /* @__PURE__ */ jsx(
1265
1256
  "animate",
1266
1257
  {
1267
1258
  attributeName: "opacity",
1268
1259
  from: "0",
1269
- to: "0.8",
1270
- dur: "0.35s",
1271
- begin: `${(duration * 0.65 + i * 0.08).toFixed(2)}s`,
1260
+ to: "0.7",
1261
+ dur: `${duration * 0.4}s`,
1262
+ begin: `${arm.delay.toFixed(2)}s`,
1272
1263
  fill: "freeze"
1273
1264
  }
1274
- ),
1275
- /* @__PURE__ */ jsx(
1265
+ )
1266
+ },
1267
+ `arm${i}`
1268
+ )),
1269
+ allTicks.map((tick, i) => /* @__PURE__ */ jsx(
1270
+ "line",
1271
+ {
1272
+ x1: tick.x1,
1273
+ y1: tick.y1,
1274
+ x2: tick.x2,
1275
+ y2: tick.y2,
1276
+ stroke: crystalColor,
1277
+ strokeWidth: "0.6",
1278
+ strokeLinecap: "round",
1279
+ opacity: animate ? 0 : 0.45,
1280
+ children: animate && /* @__PURE__ */ jsx(
1276
1281
  "animate",
1277
1282
  {
1278
1283
  attributeName: "opacity",
1279
- values: "0.3;1;0.3",
1280
- dur: `${1 + i * 0.2}s`,
1281
- repeatCount: "indefinite",
1282
- begin: `${duration}s`
1284
+ from: "0",
1285
+ to: "0.45",
1286
+ dur: `${duration * 0.3}s`,
1287
+ begin: `${tick.delay.toFixed(2)}s`,
1288
+ fill: "freeze"
1283
1289
  }
1284
1290
  )
1285
- ] })
1286
- },
1287
- `fsp${i}`
1288
- ))
1289
- ]
1290
- }
1291
- ),
1292
- /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children })
1293
- ] });
1291
+ },
1292
+ `tick${i}`
1293
+ )),
1294
+ sparkles.slice(0, intensity === "subtle" ? 4 : 8).map((sp, i) => /* @__PURE__ */ jsx(
1295
+ "circle",
1296
+ {
1297
+ cx: sp.cx,
1298
+ cy: sp.cy,
1299
+ r: sp.r,
1300
+ fill: glowColor,
1301
+ opacity: animate ? 0 : 0.8,
1302
+ children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
1303
+ /* @__PURE__ */ jsx(
1304
+ "animate",
1305
+ {
1306
+ attributeName: "opacity",
1307
+ from: "0",
1308
+ to: "0.8",
1309
+ dur: "0.35s",
1310
+ begin: `${(duration * 0.65 + i * 0.08).toFixed(2)}s`,
1311
+ fill: "freeze"
1312
+ }
1313
+ ),
1314
+ /* @__PURE__ */ jsx(
1315
+ "animate",
1316
+ {
1317
+ attributeName: "opacity",
1318
+ values: "0.3;1;0.3",
1319
+ dur: `${1 + i * 0.2}s`,
1320
+ repeatCount: "indefinite",
1321
+ begin: `${duration}s`
1322
+ }
1323
+ )
1324
+ ] })
1325
+ },
1326
+ `fsp${i}`
1327
+ ))
1328
+ ]
1329
+ }
1330
+ ),
1331
+ /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children })
1332
+ ] }),
1333
+ durationScale(durationProp !== void 0, animationSpeed)
1334
+ );
1294
1335
  }
1295
1336
  ),
1296
1337
  { displayName: "NtdIconFrost" }
@@ -1300,7 +1341,8 @@ const NtdIconPixel = /* @__PURE__ */ Object.assign(
1300
1341
  ({
1301
1342
  children,
1302
1343
  animate = true,
1303
- duration = 0.5,
1344
+ duration: durationProp,
1345
+ animationSpeed,
1304
1346
  intensity = "normal",
1305
1347
  pixelColor = "#22d3ee",
1306
1348
  scanlineColor = "#000000",
@@ -1308,6 +1350,7 @@ const NtdIconPixel = /* @__PURE__ */ Object.assign(
1308
1350
  className,
1309
1351
  style
1310
1352
  }, ref) => {
1353
+ const duration = durationProp ?? 0.5;
1311
1354
  const uid = useId().replace(/[^a-zA-Z0-9]/g, "_");
1312
1355
  const scanAnimName = `ntd_pixel_scan_${uid}`;
1313
1356
  const glitchAnimName = `ntd_pixel_glitch_${uid}`;
@@ -1345,8 +1388,9 @@ const NtdIconPixel = /* @__PURE__ */ Object.assign(
1345
1388
  { x: 48, y: 96 }
1346
1389
  ] : [];
1347
1390
  const allPixels = intensity === "subtle" ? basePixels.filter((_, i) => i % 2 === 0) : [...basePixels, ...extraPixels];
1348
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1349
- animate && /* @__PURE__ */ jsx("style", { children: `
1391
+ return retimeTree(
1392
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1393
+ animate && /* @__PURE__ */ jsx("style", { children: `
1350
1394
  @keyframes ${scanAnimName} {
1351
1395
  from { transform: translateY(-100%); }
1352
1396
  to { transform: translateY(200%); }
@@ -1358,74 +1402,76 @@ const NtdIconPixel = /* @__PURE__ */ Object.assign(
1358
1402
  96% { transform: translate(-1px, 2px); clip-path: none; }
1359
1403
  }
1360
1404
  ` }),
1361
- /* @__PURE__ */ jsx(
1362
- "svg",
1363
- {
1364
- viewBox: "0 0 100 100",
1365
- style: { ...overlayBase, inset: "-5%", width: "110%", height: "110%", zIndex: 2 },
1366
- "aria-hidden": true,
1367
- children: allPixels.map((p, i) => /* @__PURE__ */ jsx(
1368
- "rect",
1369
- {
1370
- x: p.x,
1371
- y: p.y,
1372
- width: SZ - 0.5,
1373
- height: SZ - 0.5,
1374
- fill: pixelColor,
1375
- opacity: 0.75,
1376
- children: animate && /* @__PURE__ */ jsx(
1377
- "animate",
1378
- {
1379
- attributeName: "opacity",
1380
- values: "0.3;1;0.3",
1381
- dur: `${0.7 + i % 5 * 0.17}s`,
1382
- repeatCount: "indefinite",
1383
- begin: `${(i * 0.06 % 1).toFixed(2)}s`
1384
- }
1385
- )
1405
+ /* @__PURE__ */ jsx(
1406
+ "svg",
1407
+ {
1408
+ viewBox: "0 0 100 100",
1409
+ style: { ...overlayBase, inset: "-5%", width: "110%", height: "110%", zIndex: 2 },
1410
+ "aria-hidden": true,
1411
+ children: allPixels.map((p, i) => /* @__PURE__ */ jsx(
1412
+ "rect",
1413
+ {
1414
+ x: p.x,
1415
+ y: p.y,
1416
+ width: SZ - 0.5,
1417
+ height: SZ - 0.5,
1418
+ fill: pixelColor,
1419
+ opacity: 0.75,
1420
+ children: animate && /* @__PURE__ */ jsx(
1421
+ "animate",
1422
+ {
1423
+ attributeName: "opacity",
1424
+ values: "0.3;1;0.3",
1425
+ dur: `${0.7 + i % 5 * 0.17}s`,
1426
+ repeatCount: "indefinite",
1427
+ begin: `${(i * 0.06 % 1).toFixed(2)}s`
1428
+ }
1429
+ )
1430
+ },
1431
+ `px${i}`
1432
+ ))
1433
+ }
1434
+ ),
1435
+ /* @__PURE__ */ jsx(
1436
+ "span",
1437
+ {
1438
+ style: {
1439
+ display: "inline-flex",
1440
+ position: "relative",
1441
+ zIndex: 1,
1442
+ ...animate && glitchEffect ? { animation: `${glitchAnimName} 4s infinite` } : {}
1386
1443
  },
1387
- `px${i}`
1388
- ))
1389
- }
1390
- ),
1391
- /* @__PURE__ */ jsx(
1392
- "span",
1393
- {
1394
- style: {
1395
- display: "inline-flex",
1396
- position: "relative",
1397
- zIndex: 1,
1398
- ...animate && glitchEffect ? { animation: `${glitchAnimName} 4s infinite` } : {}
1399
- },
1400
- children
1401
- }
1402
- ),
1403
- animate && /* @__PURE__ */ jsx(
1404
- "span",
1405
- {
1406
- style: {
1407
- position: "absolute",
1408
- inset: 0,
1409
- overflow: "hidden",
1410
- pointerEvents: "none",
1411
- zIndex: 3,
1412
- background: `repeating-linear-gradient(0deg, transparent, transparent 3px, ${scanlineColor}1a 3px, ${scanlineColor}1a 4px)`
1413
- },
1414
- children: /* @__PURE__ */ jsx(
1415
- "span",
1416
- {
1417
- style: {
1418
- display: "block",
1419
- width: "100%",
1420
- height: "30%",
1421
- background: `linear-gradient(transparent, ${pixelColor}20, transparent)`,
1422
- animation: `${scanAnimName} ${duration + 2}s linear infinite`
1444
+ children
1445
+ }
1446
+ ),
1447
+ animate && /* @__PURE__ */ jsx(
1448
+ "span",
1449
+ {
1450
+ style: {
1451
+ position: "absolute",
1452
+ inset: 0,
1453
+ overflow: "hidden",
1454
+ pointerEvents: "none",
1455
+ zIndex: 3,
1456
+ background: `repeating-linear-gradient(0deg, transparent, transparent 3px, ${scanlineColor}1a 3px, ${scanlineColor}1a 4px)`
1457
+ },
1458
+ children: /* @__PURE__ */ jsx(
1459
+ "span",
1460
+ {
1461
+ style: {
1462
+ display: "block",
1463
+ width: "100%",
1464
+ height: "30%",
1465
+ background: `linear-gradient(transparent, ${pixelColor}20, transparent)`,
1466
+ animation: `${scanAnimName} ${duration + 2}s linear infinite`
1467
+ }
1423
1468
  }
1424
- }
1425
- )
1426
- }
1427
- )
1428
- ] });
1469
+ )
1470
+ }
1471
+ )
1472
+ ] }),
1473
+ durationScale(durationProp !== void 0, animationSpeed)
1474
+ );
1429
1475
  }
1430
1476
  ),
1431
1477
  { displayName: "NtdIconPixel" }
@@ -1435,7 +1481,8 @@ const NtdIconOrganic = /* @__PURE__ */ Object.assign(
1435
1481
  ({
1436
1482
  children,
1437
1483
  animate = true,
1438
- duration = 3,
1484
+ duration: durationProp,
1485
+ animationSpeed,
1439
1486
  intensity = "normal",
1440
1487
  cellColor = "#86efac",
1441
1488
  membraneColor = "#4ade80",
@@ -1443,6 +1490,7 @@ const NtdIconOrganic = /* @__PURE__ */ Object.assign(
1443
1490
  className,
1444
1491
  style
1445
1492
  }, ref) => {
1493
+ const duration = durationProp ?? 3;
1446
1494
  const uid = useId().replace(/[^a-zA-Z0-9]/g, "_");
1447
1495
  const blobFilterId = `ntd_org_${uid}`;
1448
1496
  const cells = [
@@ -1472,125 +1520,128 @@ const NtdIconOrganic = /* @__PURE__ */ Object.assign(
1472
1520
  { cx: 60, cy: 95, r: 1.5 }
1473
1521
  ];
1474
1522
  const bubbleCount = intensity === "subtle" ? 2 : intensity === "dense" ? 6 : 4;
1475
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1476
- /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("filter", { id: blobFilterId, children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "4" }) }) }) }),
1477
- /* @__PURE__ */ jsxs(
1478
- "svg",
1479
- {
1480
- viewBox: "0 0 100 100",
1481
- style: { ...overlayBase, inset: "-25%", width: "150%", height: "150%", zIndex: 0 },
1482
- "aria-hidden": true,
1483
- children: [
1484
- cells.map((c, i) => /* @__PURE__ */ jsx(
1485
- "circle",
1486
- {
1487
- cx: c.cx,
1488
- cy: c.cy,
1489
- r: c.r,
1490
- fill: c.color,
1491
- opacity: animate ? 0 : c.op,
1492
- filter: `url(#${blobFilterId})`,
1493
- children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
1494
- /* @__PURE__ */ jsx(
1495
- "animate",
1496
- {
1497
- attributeName: "opacity",
1498
- from: "0",
1499
- to: `${c.op}`,
1500
- dur: `${duration * 0.55}s`,
1501
- begin: `${(i * 0.2).toFixed(2)}s`,
1502
- fill: "freeze"
1503
- }
1504
- ),
1505
- /* @__PURE__ */ jsx(
1506
- "animate",
1507
- {
1508
- attributeName: "r",
1509
- values: `${c.r};${c.r * 1.3};${c.r}`,
1510
- dur: c.pd,
1511
- repeatCount: "indefinite",
1512
- begin: `${duration}s`
1513
- }
1514
- ),
1515
- /* @__PURE__ */ jsx(
1516
- "animate",
1517
- {
1518
- attributeName: "opacity",
1519
- values: `${c.op};${c.op * 1.7};${c.op}`,
1520
- dur: c.pd,
1521
- repeatCount: "indefinite",
1522
- begin: `${duration}s`
1523
- }
1524
- )
1525
- ] })
1526
- },
1527
- `oc${i}`
1528
- )),
1529
- intensity !== "subtle" && [
1530
- { cx: 8, cy: 8, r: 10 },
1531
- { cx: 92, cy: 92, r: 10 }
1532
- ].map((ring, i) => /* @__PURE__ */ jsx(
1533
- "circle",
1534
- {
1535
- cx: ring.cx,
1536
- cy: ring.cy,
1537
- r: ring.r,
1538
- fill: "none",
1539
- stroke: membraneColor,
1540
- strokeWidth: "0.7",
1541
- opacity: animate ? 0 : 0.35,
1542
- children: animate && /* @__PURE__ */ jsx(
1543
- "animate",
1544
- {
1545
- attributeName: "opacity",
1546
- from: "0",
1547
- to: "0.35",
1548
- dur: `${duration * 0.7}s`,
1549
- fill: "freeze"
1550
- }
1551
- )
1552
- },
1553
- `ring${i}`
1554
- )),
1555
- bubbles.slice(0, bubbleCount).map((b, i) => /* @__PURE__ */ jsx(
1556
- "circle",
1557
- {
1558
- cx: b.cx,
1559
- cy: b.cy,
1560
- r: b.r,
1561
- fill: nucleusColor,
1562
- opacity: animate ? 0 : 0.28,
1563
- children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
1564
- /* @__PURE__ */ jsx(
1523
+ return retimeTree(
1524
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1525
+ /* @__PURE__ */ jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, "aria-hidden": true, children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("filter", { id: blobFilterId, children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "4" }) }) }) }),
1526
+ /* @__PURE__ */ jsxs(
1527
+ "svg",
1528
+ {
1529
+ viewBox: "0 0 100 100",
1530
+ style: { ...overlayBase, inset: "-25%", width: "150%", height: "150%", zIndex: 0 },
1531
+ "aria-hidden": true,
1532
+ children: [
1533
+ cells.map((c, i) => /* @__PURE__ */ jsx(
1534
+ "circle",
1535
+ {
1536
+ cx: c.cx,
1537
+ cy: c.cy,
1538
+ r: c.r,
1539
+ fill: c.color,
1540
+ opacity: animate ? 0 : c.op,
1541
+ filter: `url(#${blobFilterId})`,
1542
+ children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
1543
+ /* @__PURE__ */ jsx(
1544
+ "animate",
1545
+ {
1546
+ attributeName: "opacity",
1547
+ from: "0",
1548
+ to: `${c.op}`,
1549
+ dur: `${duration * 0.55}s`,
1550
+ begin: `${(i * 0.2).toFixed(2)}s`,
1551
+ fill: "freeze"
1552
+ }
1553
+ ),
1554
+ /* @__PURE__ */ jsx(
1555
+ "animate",
1556
+ {
1557
+ attributeName: "r",
1558
+ values: `${c.r};${c.r * 1.3};${c.r}`,
1559
+ dur: c.pd,
1560
+ repeatCount: "indefinite",
1561
+ begin: `${duration}s`
1562
+ }
1563
+ ),
1564
+ /* @__PURE__ */ jsx(
1565
+ "animate",
1566
+ {
1567
+ attributeName: "opacity",
1568
+ values: `${c.op};${c.op * 1.7};${c.op}`,
1569
+ dur: c.pd,
1570
+ repeatCount: "indefinite",
1571
+ begin: `${duration}s`
1572
+ }
1573
+ )
1574
+ ] })
1575
+ },
1576
+ `oc${i}`
1577
+ )),
1578
+ intensity !== "subtle" && [
1579
+ { cx: 8, cy: 8, r: 10 },
1580
+ { cx: 92, cy: 92, r: 10 }
1581
+ ].map((ring, i) => /* @__PURE__ */ jsx(
1582
+ "circle",
1583
+ {
1584
+ cx: ring.cx,
1585
+ cy: ring.cy,
1586
+ r: ring.r,
1587
+ fill: "none",
1588
+ stroke: membraneColor,
1589
+ strokeWidth: "0.7",
1590
+ opacity: animate ? 0 : 0.35,
1591
+ children: animate && /* @__PURE__ */ jsx(
1565
1592
  "animate",
1566
1593
  {
1567
1594
  attributeName: "opacity",
1568
1595
  from: "0",
1569
- to: "0.28",
1570
- dur: "0.5s",
1571
- begin: `${(duration * 0.65 + i * 0.18).toFixed(2)}s`,
1596
+ to: "0.35",
1597
+ dur: `${duration * 0.7}s`,
1572
1598
  fill: "freeze"
1573
1599
  }
1574
- ),
1575
- /* @__PURE__ */ jsx(
1576
- "animate",
1577
- {
1578
- attributeName: "cy",
1579
- values: `${b.cy};${b.cy - 5};${b.cy}`,
1580
- dur: `${2.2 + i * 0.45}s`,
1581
- repeatCount: "indefinite",
1582
- begin: `${duration}s`
1583
- }
1584
1600
  )
1585
- ] })
1586
- },
1587
- `ob${i}`
1588
- ))
1589
- ]
1590
- }
1591
- ),
1592
- /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children })
1593
- ] });
1601
+ },
1602
+ `ring${i}`
1603
+ )),
1604
+ bubbles.slice(0, bubbleCount).map((b, i) => /* @__PURE__ */ jsx(
1605
+ "circle",
1606
+ {
1607
+ cx: b.cx,
1608
+ cy: b.cy,
1609
+ r: b.r,
1610
+ fill: nucleusColor,
1611
+ opacity: animate ? 0 : 0.28,
1612
+ children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
1613
+ /* @__PURE__ */ jsx(
1614
+ "animate",
1615
+ {
1616
+ attributeName: "opacity",
1617
+ from: "0",
1618
+ to: "0.28",
1619
+ dur: "0.5s",
1620
+ begin: `${(duration * 0.65 + i * 0.18).toFixed(2)}s`,
1621
+ fill: "freeze"
1622
+ }
1623
+ ),
1624
+ /* @__PURE__ */ jsx(
1625
+ "animate",
1626
+ {
1627
+ attributeName: "cy",
1628
+ values: `${b.cy};${b.cy - 5};${b.cy}`,
1629
+ dur: `${2.2 + i * 0.45}s`,
1630
+ repeatCount: "indefinite",
1631
+ begin: `${duration}s`
1632
+ }
1633
+ )
1634
+ ] })
1635
+ },
1636
+ `ob${i}`
1637
+ ))
1638
+ ]
1639
+ }
1640
+ ),
1641
+ /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children })
1642
+ ] }),
1643
+ durationScale(durationProp !== void 0, animationSpeed)
1644
+ );
1594
1645
  }
1595
1646
  ),
1596
1647
  { displayName: "NtdIconOrganic" }
@@ -1600,7 +1651,8 @@ const NtdIconGeometric = /* @__PURE__ */ Object.assign(
1600
1651
  ({
1601
1652
  children,
1602
1653
  animate = true,
1603
- duration = 8,
1654
+ duration: durationProp,
1655
+ animationSpeed,
1604
1656
  intensity = "normal",
1605
1657
  primaryColor = "#6366f1",
1606
1658
  secondaryColor = "#8b5cf6",
@@ -1608,6 +1660,7 @@ const NtdIconGeometric = /* @__PURE__ */ Object.assign(
1608
1660
  className,
1609
1661
  style
1610
1662
  }, ref) => {
1663
+ const duration = durationProp ?? 8;
1611
1664
  const makeTriangle = (cx, cy, r, rotDeg) => Array.from({ length: 3 }, (_, i) => {
1612
1665
  const a = (i * 120 - 90 + rotDeg) * Math.PI / 180;
1613
1666
  return `${(cx + r * Math.cos(a)).toFixed(2)},${(cy + r * Math.sin(a)).toFixed(2)}`;
@@ -1639,99 +1692,102 @@ const NtdIconGeometric = /* @__PURE__ */ Object.assign(
1639
1692
  ] : []
1640
1693
  ];
1641
1694
  const diamondPath = (cx, cy, s = 3) => `M${cx},${cy - s} L${cx + s},${cy} L${cx},${cy + s} L${cx - s},${cy}Z`;
1642
- return /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1643
- /* @__PURE__ */ jsxs(
1644
- "svg",
1645
- {
1646
- viewBox: "0 0 100 100",
1647
- style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%", zIndex: 0 },
1648
- "aria-hidden": true,
1649
- children: [
1650
- rings.map((ring, i) => /* @__PURE__ */ jsx(
1651
- "circle",
1652
- {
1653
- cx: "50",
1654
- cy: "50",
1655
- r: ring.r,
1656
- fill: "none",
1657
- stroke: ring.color,
1658
- strokeWidth: "0.6",
1659
- strokeDasharray: ring.dash,
1660
- opacity: ring.op,
1661
- children: animate && /* @__PURE__ */ jsx(
1662
- "animateTransform",
1663
- {
1664
- attributeName: "transform",
1665
- type: "rotate",
1666
- from: "0 50 50",
1667
- to: `${ring.dir * 360} 50 50`,
1668
- dur: `${ring.dur}s`,
1669
- repeatCount: "indefinite"
1670
- }
1671
- )
1672
- },
1673
- `rng${i}`
1674
- )),
1675
- triangles.map((t, i) => /* @__PURE__ */ jsx(
1676
- "polygon",
1677
- {
1678
- points: makeTriangle(50, 50, t.r, t.rot),
1679
- fill: "none",
1680
- stroke: t.color,
1681
- strokeWidth: "0.5",
1682
- opacity: t.op,
1683
- children: animate && /* @__PURE__ */ jsx(
1684
- "animateTransform",
1685
- {
1686
- attributeName: "transform",
1687
- type: "rotate",
1688
- from: "0 50 50",
1689
- to: `${t.dir * 360} 50 50`,
1690
- dur: `${t.dur}s`,
1691
- repeatCount: "indefinite"
1692
- }
1693
- )
1694
- },
1695
- `tri${i}`
1696
- )),
1697
- diamonds.map((d, i) => /* @__PURE__ */ jsx(
1698
- "path",
1699
- {
1700
- d: diamondPath(d.cx, d.cy),
1701
- fill: accentColor,
1702
- opacity: animate ? 0 : 0.5,
1703
- children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
1704
- /* @__PURE__ */ jsx(
1705
- "animate",
1695
+ return retimeTree(
1696
+ /* @__PURE__ */ jsxs("span", { ref, className, style: { ...wrapperBase, ...style }, children: [
1697
+ /* @__PURE__ */ jsxs(
1698
+ "svg",
1699
+ {
1700
+ viewBox: "0 0 100 100",
1701
+ style: { ...overlayBase, inset: "-30%", width: "160%", height: "160%", zIndex: 0 },
1702
+ "aria-hidden": true,
1703
+ children: [
1704
+ rings.map((ring, i) => /* @__PURE__ */ jsx(
1705
+ "circle",
1706
+ {
1707
+ cx: "50",
1708
+ cy: "50",
1709
+ r: ring.r,
1710
+ fill: "none",
1711
+ stroke: ring.color,
1712
+ strokeWidth: "0.6",
1713
+ strokeDasharray: ring.dash,
1714
+ opacity: ring.op,
1715
+ children: animate && /* @__PURE__ */ jsx(
1716
+ "animateTransform",
1706
1717
  {
1707
- attributeName: "opacity",
1708
- from: "0",
1709
- to: "0.5",
1710
- dur: `${duration * 0.25}s`,
1711
- begin: `${(i * 0.09).toFixed(2)}s`,
1712
- fill: "freeze"
1718
+ attributeName: "transform",
1719
+ type: "rotate",
1720
+ from: "0 50 50",
1721
+ to: `${ring.dir * 360} 50 50`,
1722
+ dur: `${ring.dur}s`,
1723
+ repeatCount: "indefinite"
1713
1724
  }
1714
- ),
1715
- /* @__PURE__ */ jsx(
1725
+ )
1726
+ },
1727
+ `rng${i}`
1728
+ )),
1729
+ triangles.map((t, i) => /* @__PURE__ */ jsx(
1730
+ "polygon",
1731
+ {
1732
+ points: makeTriangle(50, 50, t.r, t.rot),
1733
+ fill: "none",
1734
+ stroke: t.color,
1735
+ strokeWidth: "0.5",
1736
+ opacity: t.op,
1737
+ children: animate && /* @__PURE__ */ jsx(
1716
1738
  "animateTransform",
1717
1739
  {
1718
1740
  attributeName: "transform",
1719
1741
  type: "rotate",
1720
- from: `0 ${d.cx} ${d.cy}`,
1721
- to: `360 ${d.cx} ${d.cy}`,
1722
- dur: `${3 + i * 0.6}s`,
1742
+ from: "0 50 50",
1743
+ to: `${t.dir * 360} 50 50`,
1744
+ dur: `${t.dur}s`,
1723
1745
  repeatCount: "indefinite"
1724
1746
  }
1725
1747
  )
1726
- ] })
1727
- },
1728
- `dm${i}`
1729
- ))
1730
- ]
1731
- }
1732
- ),
1733
- /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children })
1734
- ] });
1748
+ },
1749
+ `tri${i}`
1750
+ )),
1751
+ diamonds.map((d, i) => /* @__PURE__ */ jsx(
1752
+ "path",
1753
+ {
1754
+ d: diamondPath(d.cx, d.cy),
1755
+ fill: accentColor,
1756
+ opacity: animate ? 0 : 0.5,
1757
+ children: animate && /* @__PURE__ */ jsxs(Fragment, { children: [
1758
+ /* @__PURE__ */ jsx(
1759
+ "animate",
1760
+ {
1761
+ attributeName: "opacity",
1762
+ from: "0",
1763
+ to: "0.5",
1764
+ dur: `${duration * 0.25}s`,
1765
+ begin: `${(i * 0.09).toFixed(2)}s`,
1766
+ fill: "freeze"
1767
+ }
1768
+ ),
1769
+ /* @__PURE__ */ jsx(
1770
+ "animateTransform",
1771
+ {
1772
+ attributeName: "transform",
1773
+ type: "rotate",
1774
+ from: `0 ${d.cx} ${d.cy}`,
1775
+ to: `360 ${d.cx} ${d.cy}`,
1776
+ dur: `${3 + i * 0.6}s`,
1777
+ repeatCount: "indefinite"
1778
+ }
1779
+ )
1780
+ ] })
1781
+ },
1782
+ `dm${i}`
1783
+ ))
1784
+ ]
1785
+ }
1786
+ ),
1787
+ /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", position: "relative", zIndex: 1 }, children })
1788
+ ] }),
1789
+ durationScale(durationProp !== void 0, animationSpeed)
1790
+ );
1735
1791
  }
1736
1792
  ),
1737
1793
  { displayName: "NtdIconGeometric" }