@rehover/icons 0.1.0-beta.1 → 0.1.0-beta.2

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 (3) hide show
  1. package/dist/cli/index.js +343 -105
  2. package/dist/index.js +340 -102
  3. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -156,6 +156,200 @@ var metadata3 = {
156
156
  animationDescription: "The bell rocks back and forth around its top mount, settling to center."
157
157
  };
158
158
 
159
+ // icons/brain/paths.ts
160
+ var brainPaths = {
161
+ leftHalf: {
162
+ type: "path",
163
+ d: "M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"
164
+ },
165
+ rightHalf: {
166
+ type: "path",
167
+ d: "M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"
168
+ },
169
+ veinCenter: { type: "path", d: "M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4" },
170
+ veinTopRight: { type: "path", d: "M17.599 6.5A3 3 0 0 0 13.6 3.4" },
171
+ veinTopLeft: { type: "path", d: "M6.4 6.5A3 3 0 0 1 10.4 3.4" },
172
+ veinMiddleRight: { type: "path", d: "M18.5 10.5A2.5 2.5 0 0 0 15 9" },
173
+ veinMiddleLeft: { type: "path", d: "M5.5 10.5A2.5 2.5 0 0 1 9 9" },
174
+ veinBottomRight: { type: "path", d: "M16.5 15.5A2.5 2.5 0 0 0 13 16" },
175
+ veinBottomLeft: { type: "path", d: "M7.5 15.5A2.5 2.5 0 0 1 11 16" }
176
+ };
177
+
178
+ // icons/brain/animation.spec.ts
179
+ var brainSpec = {
180
+ elements: {
181
+ leftHalf: { id: "brain-left-half", description: "Left hemisphere outline" },
182
+ rightHalf: {
183
+ id: "brain-right-half",
184
+ description: "Right hemisphere outline"
185
+ },
186
+ veinCenter: {
187
+ id: "brain-vein-center",
188
+ description: "Central neural pathway"
189
+ },
190
+ veinTopLeft: {
191
+ id: "brain-vein-top-left",
192
+ description: "Top left neural pathway"
193
+ },
194
+ veinTopRight: {
195
+ id: "brain-vein-top-right",
196
+ description: "Top right neural pathway"
197
+ },
198
+ veinMiddleLeft: {
199
+ id: "brain-vein-middle-left",
200
+ description: "Middle left neural pathway"
201
+ },
202
+ veinMiddleRight: {
203
+ id: "brain-vein-middle-right",
204
+ description: "Middle right neural pathway"
205
+ },
206
+ veinBottomLeft: {
207
+ id: "brain-vein-bottom-left",
208
+ description: "Bottom left neural pathway"
209
+ },
210
+ veinBottomRight: {
211
+ id: "brain-vein-bottom-right",
212
+ description: "Bottom right neural pathway"
213
+ }
214
+ },
215
+ sequences: {
216
+ trigger: [
217
+ {
218
+ element: "veinCenter",
219
+ property: "pathLength",
220
+ values: [1, 0, 1],
221
+ duration: 1.5,
222
+ ease: "easeInOut"
223
+ },
224
+ {
225
+ element: "veinCenter",
226
+ property: "opacity",
227
+ values: [1, 0.2, 1],
228
+ duration: 1.5,
229
+ ease: "easeInOut"
230
+ },
231
+ {
232
+ element: "veinTopRight",
233
+ property: "pathLength",
234
+ values: [1, 0, 1],
235
+ duration: 1.5,
236
+ delay: 0.3,
237
+ ease: "easeInOut"
238
+ },
239
+ {
240
+ element: "veinTopRight",
241
+ property: "opacity",
242
+ values: [1, 0.2, 1],
243
+ duration: 1.5,
244
+ delay: 0.3,
245
+ ease: "easeInOut"
246
+ },
247
+ {
248
+ element: "veinTopLeft",
249
+ property: "pathLength",
250
+ values: [1, 0, 1],
251
+ duration: 1.5,
252
+ delay: 0.3,
253
+ ease: "easeInOut"
254
+ },
255
+ {
256
+ element: "veinTopLeft",
257
+ property: "opacity",
258
+ values: [1, 0.2, 1],
259
+ duration: 1.5,
260
+ delay: 0.3,
261
+ ease: "easeInOut"
262
+ },
263
+ {
264
+ element: "veinMiddleRight",
265
+ property: "pathLength",
266
+ values: [1, 0, 1],
267
+ duration: 1.5,
268
+ delay: 0.6,
269
+ ease: "easeInOut"
270
+ },
271
+ {
272
+ element: "veinMiddleRight",
273
+ property: "opacity",
274
+ values: [1, 0.2, 1],
275
+ duration: 1.5,
276
+ delay: 0.6,
277
+ ease: "easeInOut"
278
+ },
279
+ {
280
+ element: "veinMiddleLeft",
281
+ property: "pathLength",
282
+ values: [1, 0, 1],
283
+ duration: 1.5,
284
+ delay: 0.6,
285
+ ease: "easeInOut"
286
+ },
287
+ {
288
+ element: "veinMiddleLeft",
289
+ property: "opacity",
290
+ values: [1, 0.2, 1],
291
+ duration: 1.5,
292
+ delay: 0.6,
293
+ ease: "easeInOut"
294
+ },
295
+ {
296
+ element: "veinBottomRight",
297
+ property: "pathLength",
298
+ values: [1, 0, 1],
299
+ duration: 1.5,
300
+ delay: 0.9,
301
+ ease: "easeInOut"
302
+ },
303
+ {
304
+ element: "veinBottomRight",
305
+ property: "opacity",
306
+ values: [1, 0.2, 1],
307
+ duration: 1.5,
308
+ delay: 0.9,
309
+ ease: "easeInOut"
310
+ },
311
+ {
312
+ element: "veinBottomLeft",
313
+ property: "pathLength",
314
+ values: [1, 0, 1],
315
+ duration: 1.5,
316
+ delay: 0.9,
317
+ ease: "easeInOut"
318
+ },
319
+ {
320
+ element: "veinBottomLeft",
321
+ property: "opacity",
322
+ values: [1, 0.2, 1],
323
+ duration: 1.5,
324
+ delay: 0.9,
325
+ ease: "easeInOut"
326
+ }
327
+ ]
328
+ },
329
+ defaultTrigger: "inView",
330
+ defaultLoop: true
331
+ };
332
+ var animation_spec_default4 = brainSpec;
333
+
334
+ // icons/brain/metadata.ts
335
+ var metadata4 = {
336
+ name: "Brain",
337
+ slug: "brain",
338
+ category: "Technology",
339
+ tags: [
340
+ "brain",
341
+ "ai",
342
+ "artificial intelligence",
343
+ "mind",
344
+ "neural",
345
+ "thinking",
346
+ "machine learning"
347
+ ],
348
+ featured: false,
349
+ description: "A brain symbolizing artificial intelligence and neural networks.",
350
+ animationDescription: "The internal neural pathways sequentially pulse and redraw, representing active thinking and data processing."
351
+ };
352
+
159
353
  // icons/card-flip/paths.ts
160
354
  var cardFlipPaths = {
161
355
  // Rounded card outline spanning x:4–20, y:6–18.
@@ -199,10 +393,10 @@ var cardFlipSpec = {
199
393
  defaultTrigger: "hoverHold",
200
394
  perspective: 500
201
395
  };
202
- var animation_spec_default4 = cardFlipSpec;
396
+ var animation_spec_default5 = cardFlipSpec;
203
397
 
204
398
  // icons/card-flip/metadata.ts
205
- var metadata4 = {
399
+ var metadata5 = {
206
400
  name: "CardFlip",
207
401
  slug: "card-flip",
208
402
  category: "Objects",
@@ -246,10 +440,10 @@ var checkSpec = {
246
440
  },
247
441
  defaultTrigger: "hover"
248
442
  };
249
- var animation_spec_default5 = checkSpec;
443
+ var animation_spec_default6 = checkSpec;
250
444
 
251
445
  // icons/check/metadata.ts
252
- var metadata5 = {
446
+ var metadata6 = {
253
447
  name: "Check",
254
448
  slug: "check",
255
449
  category: "Status",
@@ -294,10 +488,10 @@ var clockSpec = {
294
488
  },
295
489
  defaultTrigger: "hoverHold"
296
490
  };
297
- var animation_spec_default6 = clockSpec;
491
+ var animation_spec_default7 = clockSpec;
298
492
 
299
493
  // icons/clock/metadata.ts
300
- var metadata6 = {
494
+ var metadata7 = {
301
495
  name: "Clock",
302
496
  slug: "clock",
303
497
  category: "Time",
@@ -309,75 +503,48 @@ var metadata6 = {
309
503
 
310
504
  // icons/creating-file/paths.ts
311
505
  var creatingFilePaths = {
312
- file: {
313
- type: "path",
314
- d: "M8 3h6l5 5v13H8a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Z"
315
- },
316
- fold: {
317
- type: "path",
318
- d: "M10 11l1-.8 1.2 1.4 1-.9 1.2 1"
319
- },
320
- lineTop: {
321
- type: "path",
322
- d: "M10 11l1-.7 1.1 1.2 1-.8 1.2.9H16"
323
- },
324
- lineMiddle: {
325
- type: "path",
326
- d: "M10 14l.9-.5 1.2 1.5 1-.9 1.1.6H15"
327
- },
328
- lineBottom: {
329
- type: "path",
330
- d: "M10 17l1-.6 1 1 1.1-.7 1.1.8H16"
331
- }
506
+ outline: { type: "path", d: "M6 4L14 4L18 8L18 20L6 20L6 4" },
507
+ fold: { type: "path", d: "M14 4L14 8L18 8" },
508
+ line1: { type: "path", d: "M9 10L15 10" },
509
+ line2: { type: "path", d: "M9 13L15 13" },
510
+ line3: { type: "path", d: "M9 16L12 16" }
332
511
  };
333
512
 
334
513
  // icons/creating-file/animation.spec.ts
335
514
  var creatingFileSpec = {
336
515
  elements: {
337
- file: {
338
- id: "creating-file-file",
339
- description: "Document outline"
340
- },
341
- fold: {
342
- id: "creating-file-fold",
343
- description: "Folded page corner"
516
+ outline: {
517
+ id: "creating-file-outline",
518
+ description: "File outline with folded corner"
344
519
  },
345
- lineTop: {
346
- id: "creating-file-lineTop",
347
- description: "Top content line"
348
- },
349
- lineMiddle: {
350
- id: "creating-file-lineMiddle",
351
- description: "Middle content line"
352
- },
353
- lineBottom: {
354
- id: "creating-file-lineBottom",
355
- description: "Bottom content line"
356
- }
520
+ fold: { id: "creating-file-fold", description: "Folded corner detail" },
521
+ line1: { id: "creating-file-line1", description: "First text line" },
522
+ line2: { id: "creating-file-line2", description: "Second text line" },
523
+ line3: { id: "creating-file-line3", description: "Third text line" }
357
524
  },
358
525
  sequences: {
359
526
  trigger: [
360
527
  {
361
- element: "lineTop",
528
+ element: "line1",
362
529
  property: "opacity",
363
- values: [0.3, 1, 0.3],
364
- duration: 0.35,
530
+ values: [1, 0.3, 1],
531
+ duration: 0.6,
365
532
  ease: "easeInOut"
366
533
  },
367
534
  {
368
- element: "lineMiddle",
535
+ element: "line2",
369
536
  property: "opacity",
370
- values: [0.3, 1, 0.3],
371
- duration: 0.35,
372
- delay: 0.12,
537
+ values: [1, 0.3, 1],
538
+ duration: 0.6,
539
+ delay: 0.2,
373
540
  ease: "easeInOut"
374
541
  },
375
542
  {
376
- element: "lineBottom",
543
+ element: "line3",
377
544
  property: "opacity",
378
- values: [0.3, 1, 0.3],
379
- duration: 0.35,
380
- delay: 0.24,
545
+ values: [1, 0.3, 1],
546
+ duration: 0.6,
547
+ delay: 0.4,
381
548
  ease: "easeInOut"
382
549
  }
383
550
  ]
@@ -385,10 +552,10 @@ var creatingFileSpec = {
385
552
  defaultTrigger: "inView",
386
553
  defaultLoop: true
387
554
  };
388
- var animation_spec_default7 = creatingFileSpec;
555
+ var animation_spec_default8 = creatingFileSpec;
389
556
 
390
557
  // icons/creating-file/metadata.ts
391
- var metadata7 = {
558
+ var metadata8 = {
392
559
  name: "CreatingFile",
393
560
  slug: "creating-file",
394
561
  category: "AI",
@@ -449,10 +616,10 @@ var doorSpec = {
449
616
  defaultTrigger: "hoverHold",
450
617
  perspective: 500
451
618
  };
452
- var animation_spec_default8 = doorSpec;
619
+ var animation_spec_default9 = doorSpec;
453
620
 
454
621
  // icons/door/metadata.ts
455
- var metadata8 = {
622
+ var metadata9 = {
456
623
  name: "Door",
457
624
  slug: "door",
458
625
  category: "Objects",
@@ -503,10 +670,10 @@ var downloadSpec = {
503
670
  },
504
671
  defaultTrigger: "hoverHold"
505
672
  };
506
- var animation_spec_default9 = downloadSpec;
673
+ var animation_spec_default10 = downloadSpec;
507
674
 
508
675
  // icons/download/metadata.ts
509
- var metadata9 = {
676
+ var metadata10 = {
510
677
  name: "Download",
511
678
  slug: "download",
512
679
  category: "Actions",
@@ -584,10 +751,10 @@ var externalLinkSpec = {
584
751
  },
585
752
  defaultTrigger: "hoverHold"
586
753
  };
587
- var animation_spec_default10 = externalLinkSpec;
754
+ var animation_spec_default11 = externalLinkSpec;
588
755
 
589
756
  // icons/external-link/metadata.ts
590
- var metadata10 = {
757
+ var metadata11 = {
591
758
  name: "ExternalLink",
592
759
  slug: "external-link",
593
760
  category: "Uncategorized",
@@ -631,10 +798,10 @@ var eyeSpec = {
631
798
  },
632
799
  defaultTrigger: "hoverHold"
633
800
  };
634
- var animation_spec_default11 = eyeSpec;
801
+ var animation_spec_default12 = eyeSpec;
635
802
 
636
803
  // icons/eye/metadata.ts
637
- var metadata11 = {
804
+ var metadata12 = {
638
805
  name: "Eye",
639
806
  slug: "eye",
640
807
  category: "Visibility",
@@ -671,10 +838,10 @@ var heartSpec = {
671
838
  },
672
839
  defaultTrigger: "hover"
673
840
  };
674
- var animation_spec_default12 = heartSpec;
841
+ var animation_spec_default13 = heartSpec;
675
842
 
676
843
  // icons/heart/metadata.ts
677
- var metadata12 = {
844
+ var metadata13 = {
678
845
  name: "Heart",
679
846
  slug: "heart",
680
847
  category: "Social",
@@ -722,10 +889,10 @@ var helpSpec = {
722
889
  },
723
890
  defaultTrigger: "hover"
724
891
  };
725
- var animation_spec_default13 = helpSpec;
892
+ var animation_spec_default14 = helpSpec;
726
893
 
727
894
  // icons/help/metadata.ts
728
- var metadata13 = {
895
+ var metadata14 = {
729
896
  name: "Help",
730
897
  slug: "help",
731
898
  category: "Interface",
@@ -799,10 +966,10 @@ var layersSpec = {
799
966
  },
800
967
  defaultTrigger: "hover"
801
968
  };
802
- var animation_spec_default14 = layersSpec;
969
+ var animation_spec_default15 = layersSpec;
803
970
 
804
971
  // icons/layers/metadata.ts
805
- var metadata14 = {
972
+ var metadata15 = {
806
973
  name: "Layers",
807
974
  slug: "layers",
808
975
  category: "Interface",
@@ -839,10 +1006,10 @@ var refreshSpec = {
839
1006
  },
840
1007
  defaultTrigger: "hover"
841
1008
  };
842
- var animation_spec_default15 = refreshSpec;
1009
+ var animation_spec_default16 = refreshSpec;
843
1010
 
844
1011
  // icons/refresh/metadata.ts
845
- var metadata15 = {
1012
+ var metadata16 = {
846
1013
  name: "Refresh",
847
1014
  slug: "refresh",
848
1015
  category: "Interface",
@@ -898,10 +1065,10 @@ var searchSpec = {
898
1065
  },
899
1066
  defaultTrigger: "hover"
900
1067
  };
901
- var animation_spec_default16 = searchSpec;
1068
+ var animation_spec_default17 = searchSpec;
902
1069
 
903
1070
  // icons/search/metadata.ts
904
- var metadata16 = {
1071
+ var metadata17 = {
905
1072
  name: "Search",
906
1073
  slug: "search",
907
1074
  category: "Interface",
@@ -965,10 +1132,10 @@ var signalSpec = {
965
1132
  },
966
1133
  defaultTrigger: "hover"
967
1134
  };
968
- var animation_spec_default17 = signalSpec;
1135
+ var animation_spec_default18 = signalSpec;
969
1136
 
970
1137
  // icons/signal/metadata.ts
971
- var metadata17 = {
1138
+ var metadata18 = {
972
1139
  name: "Signal",
973
1140
  slug: "signal",
974
1141
  category: "Communication",
@@ -978,6 +1145,75 @@ var metadata17 = {
978
1145
  animationDescription: "The bars compress and spring back in a staggered cascade, like a pulse sweeping across the signal."
979
1146
  };
980
1147
 
1148
+ // icons/syncing/paths.ts
1149
+ var syncingPaths = {
1150
+ arrowOuter: {
1151
+ type: "path",
1152
+ d: "M 21 12 A 9 9 0 1 1 12 3 C 14.52 3 16.93 4 18.74 5.74 L 21 8 M 21 3 v 5 h -5"
1153
+ },
1154
+ arrowInner: {
1155
+ type: "path",
1156
+ d: "M 7 12 A 5 5 0 1 0 12 17 C 10.6 17 9.26 16.44 8.26 15.47 L 7 14 M 12 14 h -5 v 5"
1157
+ }
1158
+ };
1159
+
1160
+ // icons/syncing/animation.spec.ts
1161
+ var syncingSpec = {
1162
+ elements: {
1163
+ arrowOuter: {
1164
+ id: "syncing-arrow-outer",
1165
+ description: "Outer clockwise arrow"
1166
+ },
1167
+ arrowInner: {
1168
+ id: "syncing-arrow-inner",
1169
+ description: "Inner counter-clockwise arrow"
1170
+ }
1171
+ },
1172
+ sequences: {
1173
+ trigger: [
1174
+ {
1175
+ element: "arrowOuter",
1176
+ property: "rotate",
1177
+ values: [0, 360, 360],
1178
+ duration: 2.2,
1179
+ ease: "easeInOut",
1180
+ origin: { x: 12, y: 12 }
1181
+ },
1182
+ {
1183
+ element: "arrowInner",
1184
+ property: "rotate",
1185
+ values: [0, -360, -360],
1186
+ duration: 2.2,
1187
+ ease: "easeInOut",
1188
+ origin: { x: 12, y: 12 }
1189
+ }
1190
+ ]
1191
+ },
1192
+ defaultTrigger: "inView",
1193
+ defaultLoop: true
1194
+ };
1195
+ var animation_spec_default19 = syncingSpec;
1196
+
1197
+ // icons/syncing/metadata.ts
1198
+ var metadata19 = {
1199
+ name: "Syncing",
1200
+ slug: "syncing",
1201
+ category: "System",
1202
+ tags: [
1203
+ "sync",
1204
+ "syncing",
1205
+ "refresh",
1206
+ "update",
1207
+ "loading",
1208
+ "process",
1209
+ "arrows",
1210
+ "cycle"
1211
+ ],
1212
+ featured: false,
1213
+ description: "Two concentric arrows indicating synchronization or background processing.",
1214
+ animationDescription: "The two circular arrows rotate around a shared center in opposite directions, then align briefly before continuing."
1215
+ };
1216
+
981
1217
  // icons/user/paths.ts
982
1218
  var userPaths = {
983
1219
  shape: {
@@ -1015,10 +1251,10 @@ var userSpec = {
1015
1251
  },
1016
1252
  defaultTrigger: "hover"
1017
1253
  };
1018
- var animation_spec_default18 = userSpec;
1254
+ var animation_spec_default20 = userSpec;
1019
1255
 
1020
1256
  // icons/user/metadata.ts
1021
- var metadata18 = {
1257
+ var metadata20 = {
1022
1258
  name: "User",
1023
1259
  slug: "user",
1024
1260
  category: "Uncategorized",
@@ -1069,10 +1305,10 @@ var wifiSpec = {
1069
1305
  },
1070
1306
  defaultTrigger: "hover"
1071
1307
  };
1072
- var animation_spec_default19 = wifiSpec;
1308
+ var animation_spec_default21 = wifiSpec;
1073
1309
 
1074
1310
  // icons/wifi/metadata.ts
1075
- var metadata19 = {
1311
+ var metadata21 = {
1076
1312
  name: "Wifi",
1077
1313
  slug: "wifi",
1078
1314
  category: "Connectivity",
@@ -1087,22 +1323,24 @@ var ICON_SOURCES = {
1087
1323
  "badge-check": { paths: badgeCheckPaths, spec: animation_spec_default, metadata },
1088
1324
  "ball": { paths: ballPaths, spec: animation_spec_default2, metadata: metadata2 },
1089
1325
  "bell": { paths: bellPaths, spec: animation_spec_default3, metadata: metadata3 },
1090
- "card-flip": { paths: cardFlipPaths, spec: animation_spec_default4, metadata: metadata4 },
1091
- "check": { paths: checkPaths, spec: animation_spec_default5, metadata: metadata5 },
1092
- "clock": { paths: clockPaths, spec: animation_spec_default6, metadata: metadata6 },
1093
- "creating-file": { paths: creatingFilePaths, spec: animation_spec_default7, metadata: metadata7 },
1094
- "door": { paths: doorPaths, spec: animation_spec_default8, metadata: metadata8 },
1095
- "download": { paths: downloadPaths, spec: animation_spec_default9, metadata: metadata9 },
1096
- "external-link": { paths: externalLinkPaths, spec: animation_spec_default10, metadata: metadata10 },
1097
- "eye": { paths: eyePaths, spec: animation_spec_default11, metadata: metadata11 },
1098
- "heart": { paths: heartPaths, spec: animation_spec_default12, metadata: metadata12 },
1099
- "help": { paths: helpPaths, spec: animation_spec_default13, metadata: metadata13 },
1100
- "layers": { paths: layersPaths, spec: animation_spec_default14, metadata: metadata14 },
1101
- "refresh": { paths: refreshPaths, spec: animation_spec_default15, metadata: metadata15 },
1102
- "search": { paths: searchPaths, spec: animation_spec_default16, metadata: metadata16 },
1103
- "signal": { paths: signalPaths, spec: animation_spec_default17, metadata: metadata17 },
1104
- "user": { paths: userPaths, spec: animation_spec_default18, metadata: metadata18 },
1105
- "wifi": { paths: wifiPaths, spec: animation_spec_default19, metadata: metadata19 }
1326
+ "brain": { paths: brainPaths, spec: animation_spec_default4, metadata: metadata4 },
1327
+ "card-flip": { paths: cardFlipPaths, spec: animation_spec_default5, metadata: metadata5 },
1328
+ "check": { paths: checkPaths, spec: animation_spec_default6, metadata: metadata6 },
1329
+ "clock": { paths: clockPaths, spec: animation_spec_default7, metadata: metadata7 },
1330
+ "creating-file": { paths: creatingFilePaths, spec: animation_spec_default8, metadata: metadata8 },
1331
+ "door": { paths: doorPaths, spec: animation_spec_default9, metadata: metadata9 },
1332
+ "download": { paths: downloadPaths, spec: animation_spec_default10, metadata: metadata10 },
1333
+ "external-link": { paths: externalLinkPaths, spec: animation_spec_default11, metadata: metadata11 },
1334
+ "eye": { paths: eyePaths, spec: animation_spec_default12, metadata: metadata12 },
1335
+ "heart": { paths: heartPaths, spec: animation_spec_default13, metadata: metadata13 },
1336
+ "help": { paths: helpPaths, spec: animation_spec_default14, metadata: metadata14 },
1337
+ "layers": { paths: layersPaths, spec: animation_spec_default15, metadata: metadata15 },
1338
+ "refresh": { paths: refreshPaths, spec: animation_spec_default16, metadata: metadata16 },
1339
+ "search": { paths: searchPaths, spec: animation_spec_default17, metadata: metadata17 },
1340
+ "signal": { paths: signalPaths, spec: animation_spec_default18, metadata: metadata18 },
1341
+ "syncing": { paths: syncingPaths, spec: animation_spec_default19, metadata: metadata19 },
1342
+ "user": { paths: userPaths, spec: animation_spec_default20, metadata: metadata20 },
1343
+ "wifi": { paths: wifiPaths, spec: animation_spec_default21, metadata: metadata21 }
1106
1344
  };
1107
1345
 
1108
1346
  // lib/icon-sources.ts
@@ -1467,7 +1705,7 @@ function compileSpec(spec, paths) {
1467
1705
  }
1468
1706
 
1469
1707
  // lib/generators/runtime-template.generated.ts
1470
- var FLUX_RUNTIME_TS = '/**\r\n * Rehover animation runtime \u2014 framework-agnostic, dependency-free, and safe to\r\n * copy into your project. Every generated icon (Vue/Svelte/Angular/Astro) ships\r\n * its SVG markup with `data-flux` targets plus a compiled `plan`, then calls\r\n * `animateIcon(root, plan, props)` from here. All trigger behavior lives in this\r\n * one file, so it is identical across frameworks.\r\n *\r\n * This file has no imports on purpose: it is emitted verbatim next to your icons\r\n * (as `flux-runtime.ts`) so nothing has to be installed. Tweak it freely.\r\n */\r\n\r\n/** What event starts an icon\'s animation. */\r\nexport type AnimationTrigger =\r\n | "hover"\r\n | "hoverHold"\r\n | "click"\r\n | "inView"\r\n | "autoplay"\r\n | "none";\r\n\r\n/** One element\'s compiled animation, keyed by its `data-flux` target. */\r\nexport interface StepAnimation {\r\n /** Matches the `data-flux` attribute on the element this animates. */\r\n key: string;\r\n /** Full keyframes (round-trip or destination) for hover/click/inView/autoplay. */\r\n active: Keyframe[];\r\n /** Rest \u2192 peak keyframes for `hoverHold` (the return is the reverse of this). */\r\n hold: Keyframe[];\r\n /** Base duration in seconds (before the `speed` prop divides it). */\r\n duration: number;\r\n /** Base delay in seconds (before `speed`; the `delay` prop is added at runtime). */\r\n delay: number;\r\n /** CSS timing-function string. */\r\n easing: string;\r\n /** Loops regardless of the `loop` prop (continuous/`repeat` steps). */\r\n alwaysLoop: boolean;\r\n}\r\n\r\n/** What the runtime needs from a compiled plan. */\r\nexport interface RuntimePlan {\r\n /** Per-element animations. */\r\n animations: StepAnimation[];\r\n /** Whether the icon autostarts (continuous specs). */\r\n continuous: boolean;\r\n}\r\n\r\n/** The runtime-tunable props that map to the icon\'s public API. */\r\nexport interface IconRuntimeProps {\r\n trigger: AnimationTrigger;\r\n speed: number;\r\n loop: boolean;\r\n delay: number;\r\n}\r\n\r\n/** Handle returned by {@link animateIcon} for prop updates and teardown. */\r\nexport interface IconController {\r\n /** Re-wire for new props (e.g. the playground changing `trigger`). */\r\n update(props: IconRuntimeProps): void;\r\n /** Remove all listeners/observers and cancel running animations. */\r\n destroy(): void;\r\n}\r\n\r\ntype Variant = "active" | "hold";\r\n\r\ninterface Bound {\r\n anim: StepAnimation;\r\n el: Element;\r\n}\r\n\r\n/** Attach the animation runtime to an already-rendered icon root. */\r\nexport function animateIcon(\r\n root: SVGSVGElement,\r\n plan: RuntimePlan,\r\n initialProps: IconRuntimeProps,\r\n): IconController {\r\n let props = initialProps;\r\n\r\n // Resolve each animation\'s DOM target once.\r\n const bound: Bound[] = [];\r\n for (const anim of plan.animations) {\r\n const el = root.querySelector(`[data-flux="${anim.key}"]`);\r\n if (el) bound.push({ anim, el });\r\n }\r\n\r\n // The currently-playing Animation per target (for restart/reverse).\r\n const current = new Map<string, Animation>();\r\n const cleanups: Array<() => void> = [];\r\n let observer: IntersectionObserver | null = null;\r\n\r\n function makeAnimation(b: Bound, variant: Variant): Animation {\r\n const { anim } = b;\r\n const keyframes = variant === "hold" ? anim.hold : anim.active;\r\n const loops = variant === "active" && (anim.alwaysLoop || props.loop);\r\n return b.el.animate(keyframes, {\r\n duration: (anim.duration / props.speed) * 1000,\r\n delay: ((anim.delay + props.delay) / props.speed) * 1000,\r\n easing: anim.easing,\r\n fill: "forwards",\r\n iterations: loops ? Infinity : 1,\r\n });\r\n }\r\n\r\n /** (Re)start a variant on every target, cancelling any in-flight run. */\r\n function play(variant: Variant): void {\r\n for (const b of bound) {\r\n current.get(b.anim.key)?.cancel();\r\n current.set(b.anim.key, makeAnimation(b, variant));\r\n }\r\n }\r\n\r\n /** Reverse the held pose back to rest (smooth, from the current position). */\r\n function reverseToRest(): void {\r\n for (const b of bound) {\r\n const running = current.get(b.anim.key);\r\n if (running) running.reverse();\r\n }\r\n }\r\n\r\n function on(type: string, handler: EventListener): void {\r\n root.addEventListener(type, handler);\r\n cleanups.push(() => root.removeEventListener(type, handler));\r\n }\r\n\r\n /** Tear down listeners/observers and stop animations (keeps final pose). */\r\n function teardown(): void {\r\n for (const c of cleanups) c();\r\n cleanups.length = 0;\r\n observer?.disconnect();\r\n observer = null;\r\n }\r\n\r\n function setup(): void {\r\n teardown();\r\n\r\n // Accessibility reflects interactivity and stays in sync with `trigger`.\r\n if (props.trigger === "click") {\r\n root.setAttribute("role", "button");\r\n root.setAttribute("tabindex", "0");\r\n } else {\r\n root.setAttribute("role", "img");\r\n root.removeAttribute("tabindex");\r\n }\r\n\r\n // Continuous specs and autoplay start immediately.\r\n if (plan.continuous || props.trigger === "autoplay") play("active");\r\n\r\n switch (props.trigger) {\r\n case "hover":\r\n on("mouseenter", () => play("active"));\r\n on("focus", () => play("active"));\r\n break;\r\n case "hoverHold":\r\n on("mouseenter", () => play("hold"));\r\n on("mouseleave", () => reverseToRest());\r\n on("focus", () => play("hold"));\r\n on("blur", () => reverseToRest());\r\n break;\r\n case "click":\r\n on("click", () => play("active"));\r\n on("keydown", (e) => {\r\n const key = (e as KeyboardEvent).key;\r\n if (key === "Enter" || key === " ") {\r\n e.preventDefault();\r\n play("active");\r\n }\r\n });\r\n break;\r\n case "inView":\r\n observer = new IntersectionObserver(\r\n (entries) => {\r\n if (entries.some((entry) => entry.isIntersecting)) {\r\n play("active");\r\n observer?.disconnect();\r\n observer = null;\r\n }\r\n },\r\n { threshold: 0.5 },\r\n );\r\n observer.observe(root);\r\n break;\r\n }\r\n }\r\n\r\n setup();\r\n\r\n return {\r\n update(next: IconRuntimeProps) {\r\n props = next;\r\n // Reset every target to rest before re-wiring for the new props.\r\n for (const a of current.values()) a.cancel();\r\n current.clear();\r\n setup();\r\n },\r\n destroy() {\r\n teardown();\r\n for (const a of current.values()) a.cancel();\r\n current.clear();\r\n },\r\n };\r\n}\r\n';
1708
+ var REHOVER_RUNTIME_TS = '/**\r\n * Rehover animation runtime \u2014 framework-agnostic, dependency-free, and safe to\r\n * copy into your project. Every generated icon (Vue/Svelte/Angular/Astro) ships\r\n * its SVG markup with `data-rehover` targets plus a compiled `plan`, then calls\r\n * `animateIcon(root, plan, props)` from here. All trigger behavior lives in this\r\n * one file, so it is identical across frameworks.\r\n *\r\n * This file has no imports on purpose: it is emitted verbatim next to your icons\r\n * (as `rehover-runtime.ts`) so nothing has to be installed. Tweak it freely.\r\n */\r\n\r\n/** What event starts an icon\'s animation. */\r\nexport type AnimationTrigger =\r\n | "hover"\r\n | "hoverHold"\r\n | "click"\r\n | "inView"\r\n | "autoplay"\r\n | "none";\r\n\r\n/** One element\'s compiled animation, keyed by its `data-rehover` target. */\r\nexport interface StepAnimation {\r\n /** Matches the `data-rehover` attribute on the element this animates. */\r\n key: string;\r\n /** Full keyframes (round-trip or destination) for hover/click/inView/autoplay. */\r\n active: Keyframe[];\r\n /** Rest \u2192 peak keyframes for `hoverHold` (the return is the reverse of this). */\r\n hold: Keyframe[];\r\n /** Base duration in seconds (before the `speed` prop divides it). */\r\n duration: number;\r\n /** Base delay in seconds (before `speed`; the `delay` prop is added at runtime). */\r\n delay: number;\r\n /** CSS timing-function string. */\r\n easing: string;\r\n /** Loops regardless of the `loop` prop (continuous/`repeat` steps). */\r\n alwaysLoop: boolean;\r\n}\r\n\r\n/** What the runtime needs from a compiled plan. */\r\nexport interface RuntimePlan {\r\n /** Per-element animations. */\r\n animations: StepAnimation[];\r\n /** Whether the icon autostarts (continuous specs). */\r\n continuous: boolean;\r\n}\r\n\r\n/** The runtime-tunable props that map to the icon\'s public API. */\r\nexport interface IconRuntimeProps {\r\n trigger: AnimationTrigger;\r\n speed: number;\r\n loop: boolean;\r\n delay: number;\r\n}\r\n\r\n/** Handle returned by {@link animateIcon} for prop updates and teardown. */\r\nexport interface IconController {\r\n /** Re-wire for new props (e.g. the playground changing `trigger`). */\r\n update(props: IconRuntimeProps): void;\r\n /** Remove all listeners/observers and cancel running animations. */\r\n destroy(): void;\r\n}\r\n\r\ntype Variant = "active" | "hold";\r\n\r\ninterface Bound {\r\n anim: StepAnimation;\r\n el: Element;\r\n}\r\n\r\n/** Attach the animation runtime to an already-rendered icon root. */\r\nexport function animateIcon(\r\n root: SVGSVGElement,\r\n plan: RuntimePlan,\r\n initialProps: IconRuntimeProps,\r\n): IconController {\r\n let props = initialProps;\r\n\r\n // Resolve each animation\'s DOM target once.\r\n const bound: Bound[] = [];\r\n for (const anim of plan.animations) {\r\n const el = root.querySelector(`[data-rehover="${anim.key}"]`);\r\n if (el) bound.push({ anim, el });\r\n }\r\n\r\n // The currently-playing Animation per target (for restart/reverse).\r\n const current = new Map<string, Animation>();\r\n const cleanups: Array<() => void> = [];\r\n let observer: IntersectionObserver | null = null;\r\n\r\n function makeAnimation(b: Bound, variant: Variant): Animation {\r\n const { anim } = b;\r\n const keyframes = variant === "hold" ? anim.hold : anim.active;\r\n const loops = variant === "active" && (anim.alwaysLoop || props.loop);\r\n return b.el.animate(keyframes, {\r\n duration: (anim.duration / props.speed) * 1000,\r\n delay: ((anim.delay + props.delay) / props.speed) * 1000,\r\n easing: anim.easing,\r\n fill: "forwards",\r\n iterations: loops ? Infinity : 1,\r\n });\r\n }\r\n\r\n /** (Re)start a variant on every target, cancelling any in-flight run. */\r\n function play(variant: Variant): void {\r\n for (const b of bound) {\r\n current.get(b.anim.key)?.cancel();\r\n current.set(b.anim.key, makeAnimation(b, variant));\r\n }\r\n }\r\n\r\n /** Reverse the held pose back to rest (smooth, from the current position). */\r\n function reverseToRest(): void {\r\n for (const b of bound) {\r\n const running = current.get(b.anim.key);\r\n if (running) running.reverse();\r\n }\r\n }\r\n\r\n function on(type: string, handler: EventListener): void {\r\n root.addEventListener(type, handler);\r\n cleanups.push(() => root.removeEventListener(type, handler));\r\n }\r\n\r\n /** Tear down listeners/observers and stop animations (keeps final pose). */\r\n function teardown(): void {\r\n for (const c of cleanups) c();\r\n cleanups.length = 0;\r\n observer?.disconnect();\r\n observer = null;\r\n }\r\n\r\n function setup(): void {\r\n teardown();\r\n\r\n // Accessibility reflects interactivity and stays in sync with `trigger`.\r\n if (props.trigger === "click") {\r\n root.setAttribute("role", "button");\r\n root.setAttribute("tabindex", "0");\r\n } else {\r\n root.setAttribute("role", "img");\r\n root.removeAttribute("tabindex");\r\n }\r\n\r\n // Continuous specs and autoplay start immediately.\r\n if (plan.continuous || props.trigger === "autoplay") play("active");\r\n\r\n switch (props.trigger) {\r\n case "hover":\r\n on("mouseenter", () => play("active"));\r\n on("focus", () => play("active"));\r\n break;\r\n case "hoverHold":\r\n on("mouseenter", () => play("hold"));\r\n on("mouseleave", () => reverseToRest());\r\n on("focus", () => play("hold"));\r\n on("blur", () => reverseToRest());\r\n break;\r\n case "click":\r\n on("click", () => play("active"));\r\n on("keydown", (e) => {\r\n const key = (e as KeyboardEvent).key;\r\n if (key === "Enter" || key === " ") {\r\n e.preventDefault();\r\n play("active");\r\n }\r\n });\r\n break;\r\n case "inView":\r\n observer = new IntersectionObserver(\r\n (entries) => {\r\n if (entries.some((entry) => entry.isIntersecting)) {\r\n play("active");\r\n observer?.disconnect();\r\n observer = null;\r\n }\r\n },\r\n { threshold: 0.5 },\r\n );\r\n observer.observe(root);\r\n break;\r\n }\r\n }\r\n\r\n setup();\r\n\r\n return {\r\n update(next: IconRuntimeProps) {\r\n props = next;\r\n // Reset every target to rest before re-wiring for the new props.\r\n for (const a of current.values()) a.cancel();\r\n current.clear();\r\n setup();\r\n },\r\n destroy() {\r\n teardown();\r\n for (const a of current.values()) a.cancel();\r\n current.clear();\r\n },\r\n };\r\n}\r\n';
1471
1709
 
1472
1710
  // lib/generators/vue.ts
1473
1711
  var RUNTIME_FILENAME = "rehover-runtime";
@@ -1476,7 +1714,7 @@ function styleAttr(style) {
1476
1714
  return s ? ` style="${s}"` : "";
1477
1715
  }
1478
1716
  function shapeMarkup(node) {
1479
- const draw = node.drawKey ? ` data-flux="${node.drawKey}" pathLength="1" style="stroke-dasharray: 1"` : "";
1717
+ const draw = node.drawKey ? ` data-rehover="${node.drawKey}" pathLength="1" style="stroke-dasharray: 1"` : "";
1480
1718
  const d = node.data;
1481
1719
  switch (d.type) {
1482
1720
  case "path":
@@ -1492,7 +1730,7 @@ function shapeMarkup(node) {
1492
1730
  function nodeMarkup(node, indent) {
1493
1731
  if (node.kind === "shape") return shapeMarkup(node);
1494
1732
  const child = nodeMarkup(node.child, `${indent} `);
1495
- return `<g data-flux="${node.key}"${styleAttr(node.style)}>
1733
+ return `<g data-rehover="${node.key}"${styleAttr(node.style)}>
1496
1734
  ${indent} ${child}
1497
1735
  ${indent}</g>`;
1498
1736
  }
@@ -1597,7 +1835,7 @@ onUnmounted(() => controller?.destroy())
1597
1835
  importStatement: `import ${name} from '@/components/icons/${name}.vue';`,
1598
1836
  usageSnippet: `<${name} />`,
1599
1837
  dependencies: "none \u2014 self-contained (no npm install)",
1600
- runtime: { filename: `${RUNTIME_FILENAME}.ts`, code: FLUX_RUNTIME_TS }
1838
+ runtime: { filename: `${RUNTIME_FILENAME}.ts`, code: REHOVER_RUNTIME_TS }
1601
1839
  };
1602
1840
  }
1603
1841
  };
@@ -1612,7 +1850,7 @@ function getIconGenerator(framework) {
1612
1850
  }
1613
1851
 
1614
1852
  // cli/index.ts
1615
- var VERSION = true ? "0.1.0-beta.1" : "0.0.0";
1853
+ var VERSION = true ? "0.1.0-beta.2" : "0.0.0";
1616
1854
  var supportsColor = process.stdout.isTTY && process.env.NO_COLOR === void 0;
1617
1855
  var paint = (code, s) => supportsColor ? `\x1B[${code}m${s}\x1B[0m` : s;
1618
1856
  var green = (s) => paint("32", s);
@@ -1637,7 +1875,7 @@ function resolveFramework(input) {
1637
1875
  };
1638
1876
  return aliases[key];
1639
1877
  }
1640
- var FLUX_ICONS_DIR = "rehover";
1878
+ var REHOVER_ICONS_DIR = "rehover";
1641
1879
  function detectComponentsDir() {
1642
1880
  const candidates = [
1643
1881
  (0, import_node_path.join)("src", "components"),
@@ -1651,7 +1889,7 @@ function detectComponentsDir() {
1651
1889
  return (0, import_node_fs.existsSync)((0, import_node_path.join)(process.cwd(), "src")) ? (0, import_node_path.join)("src", "components") : "components";
1652
1890
  }
1653
1891
  function resolveOutputDir(outDir) {
1654
- return outDir ?? (0, import_node_path.join)(detectComponentsDir(), FLUX_ICONS_DIR);
1892
+ return outDir ?? (0, import_node_path.join)(detectComponentsDir(), REHOVER_ICONS_DIR);
1655
1893
  }
1656
1894
  function outputPath(slug, ext, dir) {
1657
1895
  const fileBase = toPascalCase(slug);