@nice2dev/icons 1.3.15 → 1.3.16

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