@nice2dev/icons 1.4.1 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/cjs/NiceIconStacker.js +36 -2
  3. package/dist/cjs/createIcon.js +25 -6
  4. package/dist/cjs/iconParts.js +33 -12
  5. package/dist/cjs/iconValue.js +6 -1
  6. package/dist/cjs/icons/actions.js +86 -122
  7. package/dist/cjs/icons/ai.js +0 -178
  8. package/dist/cjs/icons/business.js +172 -120
  9. package/dist/cjs/icons/ecommerce.js +18 -74
  10. package/dist/cjs/icons/education.js +235 -487
  11. package/dist/cjs/icons/files.js +193 -461
  12. package/dist/cjs/icons/fintech.js +38 -74
  13. package/dist/cjs/icons/food.js +117 -194
  14. package/dist/cjs/icons/fun.js +176 -57
  15. package/dist/cjs/icons/gaming.js +2 -2
  16. package/dist/cjs/icons/health.js +1 -1
  17. package/dist/cjs/icons/index.js +32 -10
  18. package/dist/cjs/icons/legal.js +1 -109
  19. package/dist/cjs/icons/media.js +67 -8
  20. package/dist/cjs/icons/navigation.js +4 -4
  21. package/dist/cjs/icons/omniverk.js +14 -6
  22. package/dist/cjs/icons/realestate.js +99 -98
  23. package/dist/cjs/icons/roman.js +111 -0
  24. package/dist/cjs/icons/science.js +74 -165
  25. package/dist/cjs/icons/shapes.js +58 -39
  26. package/dist/cjs/icons/smarthome.js +18 -16
  27. package/dist/cjs/icons/social.js +22 -20
  28. package/dist/cjs/icons/sports.js +89 -159
  29. package/dist/cjs/icons/sustainability.js +26 -48
  30. package/dist/cjs/icons/travel.js +209 -477
  31. package/dist/cjs/icons/ui.js +140 -240
  32. package/dist/cjs/icons/weather.js +30 -56
  33. package/dist/cjs/index.js +67 -43
  34. package/dist/cjs/stackedIcon.js +19 -0
  35. package/dist/cjs/stacking.js +104 -2
  36. package/dist/esm/NiceIconStacker.js +37 -3
  37. package/dist/esm/createIcon.js +27 -8
  38. package/dist/esm/iconParts.js +33 -12
  39. package/dist/esm/iconValue.js +6 -1
  40. package/dist/esm/icons/actions.js +86 -122
  41. package/dist/esm/icons/ai.js +0 -178
  42. package/dist/esm/icons/business.js +172 -120
  43. package/dist/esm/icons/ecommerce.js +18 -74
  44. package/dist/esm/icons/education.js +236 -488
  45. package/dist/esm/icons/files.js +193 -461
  46. package/dist/esm/icons/fintech.js +38 -74
  47. package/dist/esm/icons/food.js +118 -195
  48. package/dist/esm/icons/fun.js +179 -60
  49. package/dist/esm/icons/gaming.js +2 -2
  50. package/dist/esm/icons/health.js +1 -1
  51. package/dist/esm/icons/index.js +43 -21
  52. package/dist/esm/icons/legal.js +1 -109
  53. package/dist/esm/icons/media.js +67 -8
  54. package/dist/esm/icons/navigation.js +4 -4
  55. package/dist/esm/icons/omniverk.js +15 -7
  56. package/dist/esm/icons/realestate.js +100 -99
  57. package/dist/esm/icons/roman.js +111 -0
  58. package/dist/esm/icons/science.js +74 -165
  59. package/dist/esm/icons/shapes.js +58 -39
  60. package/dist/esm/icons/smarthome.js +18 -16
  61. package/dist/esm/icons/social.js +22 -20
  62. package/dist/esm/icons/sports.js +89 -159
  63. package/dist/esm/icons/sustainability.js +26 -48
  64. package/dist/esm/icons/travel.js +209 -477
  65. package/dist/esm/icons/ui.js +140 -240
  66. package/dist/esm/icons/weather.js +30 -56
  67. package/dist/esm/index.js +45 -21
  68. package/dist/esm/nicetodev-icons.css +1 -1
  69. package/dist/esm/stackedIcon.js +19 -0
  70. package/dist/esm/stacking.js +105 -3
  71. package/dist/types/createIcon.d.ts +14 -1
  72. package/dist/types/iconParts.d.ts +9 -6
  73. package/dist/types/icons/ai.d.ts +0 -4
  74. package/dist/types/icons/business.d.ts +1 -0
  75. package/dist/types/icons/education.d.ts +2 -4
  76. package/dist/types/icons/files.d.ts +3 -1
  77. package/dist/types/icons/fintech.d.ts +1 -1
  78. package/dist/types/icons/fun.d.ts +23 -0
  79. package/dist/types/icons/index.d.ts +14 -12
  80. package/dist/types/icons/legal.d.ts +0 -2
  81. package/dist/types/icons/media.d.ts +1 -0
  82. package/dist/types/icons/realestate.d.ts +17 -1
  83. package/dist/types/icons/roman.d.ts +76 -0
  84. package/dist/types/icons/science.d.ts +0 -2
  85. package/dist/types/icons/ui.d.ts +6 -1
  86. package/dist/types/index.d.ts +2 -1
  87. package/dist/types/stackedIcon.d.ts +11 -0
  88. package/dist/types/stacking.d.ts +48 -1
  89. package/dist/types/types.d.ts +17 -2
  90. package/package.json +2 -2
@@ -0,0 +1,111 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { createIcon } from "../createIcon.js";
3
+ const GLYPHS = {
4
+ I: { main: "M12 4v16", part: "M9 4h6M9 20h6", width: 9 },
5
+ V: { main: "M6 4l6 16", part: "M12 20l6-16", width: 16 },
6
+ X: { main: "M6.5 4l11 16", part: "M17.5 4l-11 16", width: 15 },
7
+ L: { main: "M7.5 4v16", part: "M7.5 20h9", width: 12 },
8
+ // an open C: a circle r 8 round (13.17, 12) cut at ±45° on the right, its glyph centred on x 12
9
+ C: { main: "M18.83 6.34A8 8 0 005.17 12", part: "M5.17 12a8 8 0 0013.66 5.66", width: 16.5 },
10
+ D: { main: "M6.5 4v16", part: "M6.5 4h3a8 8 0 010 16h-3", width: 15 },
11
+ M: { main: "M5 20V4l7 10", part: "M12 14l7-10v16", width: 18 }
12
+ };
13
+ function romanIcon(symbol) {
14
+ const g = GLYPHS[symbol];
15
+ const lines = (width, main, part, cap, join) => /* @__PURE__ */ jsxs(Fragment, { children: [
16
+ /* @__PURE__ */ jsx(
17
+ "path",
18
+ {
19
+ d: g.main,
20
+ stroke: main,
21
+ strokeWidth: width,
22
+ strokeLinecap: cap,
23
+ strokeLinejoin: join,
24
+ fill: "none"
25
+ }
26
+ ),
27
+ /* @__PURE__ */ jsx(
28
+ "path",
29
+ {
30
+ d: g.part,
31
+ stroke: part,
32
+ strokeWidth: width,
33
+ strokeLinecap: cap,
34
+ strokeLinejoin: join,
35
+ fill: "none"
36
+ }
37
+ )
38
+ ] });
39
+ const filled = (p, part, cap = "butt") => lines(2 * p.strokeWidth, p.primaryColor, part, cap, cap === "round" ? "round" : "miter");
40
+ return createIcon({
41
+ displayName: `NtdRoman${symbol}`,
42
+ seriesWidth: g.width,
43
+ paths: {
44
+ solid: (p) => filled(p, p.primaryColor),
45
+ outline: (p) => lines(p.strokeWidth, p.primaryColor, p.primaryColor, "butt", "miter"),
46
+ duotone: (p) => filled(p, p.secondaryColor),
47
+ vivid: (p) => filled(p, p.secondaryColor),
48
+ sharp: (p) => filled(p, p.primaryColor, "square"),
49
+ rounded: (p) => filled(p, p.primaryColor, "round")
50
+ }
51
+ });
52
+ }
53
+ const NtdRomanI = /* @__PURE__ */ romanIcon("I");
54
+ const NtdRomanV = /* @__PURE__ */ romanIcon("V");
55
+ const NtdRomanX = /* @__PURE__ */ romanIcon("X");
56
+ const NtdRomanL = /* @__PURE__ */ romanIcon("L");
57
+ const NtdRomanC = /* @__PURE__ */ romanIcon("C");
58
+ const NtdRomanD = /* @__PURE__ */ romanIcon("D");
59
+ const NtdRomanM = /* @__PURE__ */ romanIcon("M");
60
+ const SYMBOL_ICONS = {
61
+ I: NtdRomanI,
62
+ V: NtdRomanV,
63
+ X: NtdRomanX,
64
+ L: NtdRomanL,
65
+ C: NtdRomanC,
66
+ D: NtdRomanD,
67
+ M: NtdRomanM
68
+ };
69
+ const STEPS = [
70
+ [1e3, "M"],
71
+ [900, "CM"],
72
+ [500, "D"],
73
+ [400, "CD"],
74
+ [100, "C"],
75
+ [90, "XC"],
76
+ [50, "L"],
77
+ [40, "XL"],
78
+ [10, "X"],
79
+ [9, "IX"],
80
+ [5, "V"],
81
+ [4, "IV"],
82
+ [1, "I"]
83
+ ];
84
+ function toRomanNumeral(n) {
85
+ let rest = Math.round(n);
86
+ if (!(rest >= 1 && rest <= 3999)) {
87
+ return "";
88
+ }
89
+ let out = "";
90
+ for (const [value, letters] of STEPS) {
91
+ while (rest >= value) {
92
+ out += letters;
93
+ rest -= value;
94
+ }
95
+ }
96
+ return out;
97
+ }
98
+ function romanNumeralIcons(n) {
99
+ return [...toRomanNumeral(n)].map((letter) => SYMBOL_ICONS[letter]);
100
+ }
101
+ export {
102
+ NtdRomanC,
103
+ NtdRomanD,
104
+ NtdRomanI,
105
+ NtdRomanL,
106
+ NtdRomanM,
107
+ NtdRomanV,
108
+ NtdRomanX,
109
+ romanNumeralIcons,
110
+ toRomanNumeral
111
+ };
@@ -358,105 +358,6 @@ const NtdMicroscope = /* @__PURE__ */ createIcon({
358
358
  ] })
359
359
  }
360
360
  });
361
- const NtdDna = /* @__PURE__ */ createIcon({
362
- displayName: "NtdDna",
363
- paths: {
364
- solid: ({ primaryColor }) => /* @__PURE__ */ jsxs(Fragment, { children: [
365
- /* @__PURE__ */ jsx(
366
- "path",
367
- {
368
- d: "M6 2c0 4 6 6 6 10s-6 6-6 10M18 2c0 4-6 6-6 10s6 6 6 10",
369
- stroke: primaryColor,
370
- strokeWidth: "2.5",
371
- fill: "none",
372
- strokeLinecap: "round"
373
- }
374
- ),
375
- /* @__PURE__ */ jsx(
376
- "path",
377
- {
378
- d: "M6 6h12M6 12h12M6 18h12",
379
- stroke: primaryColor,
380
- strokeWidth: "2",
381
- strokeLinecap: "round"
382
- }
383
- )
384
- ] }),
385
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
386
- /* @__PURE__ */ jsx(
387
- "path",
388
- {
389
- d: "M6 2c0 4 6 6 6 10s-6 6-6 10M18 2c0 4-6 6-6 10s6 6 6 10",
390
- stroke: primaryColor,
391
- strokeWidth,
392
- fill: "none",
393
- strokeLinecap: "round"
394
- }
395
- ),
396
- /* @__PURE__ */ jsx(
397
- "path",
398
- {
399
- d: "M6 6h12M6 12h12M6 18h12",
400
- stroke: primaryColor,
401
- strokeWidth,
402
- strokeLinecap: "round"
403
- }
404
- )
405
- ] }),
406
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
407
- /* @__PURE__ */ jsx(
408
- "path",
409
- {
410
- d: "M6 6h12M6 12h12M6 18h12",
411
- stroke: secondaryColor,
412
- strokeWidth: strokeWidth * 2,
413
- strokeLinecap: "round",
414
- opacity: secondaryOpacity
415
- }
416
- ),
417
- /* @__PURE__ */ jsx(
418
- "path",
419
- {
420
- d: "M6 2c0 4 6 6 6 10s-6 6-6 10M18 2c0 4-6 6-6 10s6 6 6 10",
421
- stroke: primaryColor,
422
- strokeWidth,
423
- fill: "none",
424
- strokeLinecap: "round"
425
- }
426
- ),
427
- /* @__PURE__ */ jsx(
428
- "path",
429
- {
430
- d: "M6 6h12M6 12h12M6 18h12",
431
- stroke: primaryColor,
432
- strokeWidth,
433
- strokeLinecap: "round"
434
- }
435
- )
436
- ] }),
437
- vivid: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxs(Fragment, { children: [
438
- /* @__PURE__ */ jsx(
439
- "path",
440
- {
441
- d: "M6 2c0 4 6 6 6 10s-6 6-6 10M18 2c0 4-6 6-6 10s6 6 6 10",
442
- stroke: primaryColor,
443
- strokeWidth: "2",
444
- fill: "none",
445
- strokeLinecap: "round"
446
- }
447
- ),
448
- /* @__PURE__ */ jsx(
449
- "path",
450
- {
451
- d: "M6 6h12M6 12h12M6 18h12",
452
- stroke: secondaryColor,
453
- strokeWidth: "2",
454
- strokeLinecap: "round"
455
- }
456
- )
457
- ] })
458
- }
459
- });
460
361
  function atomOrbits(stroke, width, opacity) {
461
362
  return /* @__PURE__ */ jsxs("g", { stroke, strokeWidth: width, opacity, fill: "none", children: [
462
363
  /* @__PURE__ */ jsx("ellipse", { cx: "12", cy: "12", rx: "10", ry: "4" }),
@@ -548,33 +449,43 @@ const NtdRadiation = /* @__PURE__ */ createIcon({
548
449
  ] })
549
450
  }
550
451
  });
551
- const NUKE_CAP = "M7.2 12.1A3.4 3.4 0 1 1 7.64 5.33A4.6 4.6 0 0 1 16.36 5.33A3.4 3.4 0 1 1 16.8 12.1Q12 9.1 7.2 12.1Z";
552
- const NUKE_STEM = "M10.7 10V16.6Q10.4 20.4 6.8 21.5H17.2Q13.6 20.4 13.3 16.6V10Z";
553
- const NUKE_STEM_OPEN = "M10.7 10.71V16.6Q10.4 20.4 6.8 21.5H17.2Q13.6 20.4 13.3 16.6V10.71";
554
- const NUKE_CAP_ROUND_CORE = "M7.2 11.35A2.65 2.65 0 1 1 8.19 6.24A3.85 3.85 0 0 1 15.81 6.24A2.65 2.65 0 1 1 16.8 11.35Q12 8.35 7.2 11.35Z";
555
- const NUKE_STEM_ROUND_CORE = "M11.45 10.75V16.6Q11.2 19.6 9.1 20.75H14.9Q12.8 19.6 12.55 16.6V10.75Z";
452
+ const NUKE_SILHOUETTE = "M10.7 13.22A1.8 1.8 0 0 1 7.37 12.9A3.4 3.4 0 1 1 7.64 6.13A4.6 4.6 0 0 1 16.36 6.13A3.4 3.4 0 1 1 16.63 12.9A1.8 1.8 0 0 1 13.3 13.22L13.3 16.6Q13.6 20.4 17.2 21.5H6.8Q10.4 20.4 10.7 16.6Z";
453
+ const NUKE_CAP = "M10.87 12.06A1.8 1.8 0 0 1 7.37 12.9A3.4 3.4 0 1 1 7.64 6.13A4.6 4.6 0 0 1 16.36 6.13A3.4 3.4 0 1 1 16.63 12.9A1.8 1.8 0 0 1 13.13 12.06A4.6 4.6 0 0 1 10.87 12.06Z";
454
+ const NUKE_STEM = "M10.7 11V16.6Q10.4 20.4 6.8 21.5H17.2Q13.6 20.4 13.3 16.6V11Z";
455
+ const NUKE_PUFFS = [
456
+ [7.2, 9.5, 3.4],
457
+ [12, 7.6, 4.6],
458
+ [16.8, 9.5, 3.4],
459
+ [9.1, 12.4, 1.8],
460
+ [14.9, 12.4, 1.8]
461
+ ];
462
+ const NUKE_STEM_ROUND_CORE = "M11.45 11.75V16.6Q11.2 19.6 9.1 20.75H14.9Q12.8 19.6 12.55 16.6V11.75Z";
556
463
  const NtdNuke = /* @__PURE__ */ createIcon({
557
464
  displayName: "NtdNuke",
558
465
  paths: {
559
- // the wireframe re-draws this as lines: there the stem stays open where it enters the cap
560
- solid: ({ primaryColor, variant }) => /* @__PURE__ */ jsxs(Fragment, { children: [
466
+ solid: ({ primaryColor }) => /* @__PURE__ */ jsx("path", { d: NUKE_SILHOUETTE, fill: primaryColor }),
467
+ rounded: ({ primaryColor }) => /* @__PURE__ */ jsxs("g", { fill: primaryColor, children: [
561
468
  /* @__PURE__ */ jsx(
562
469
  "path",
563
470
  {
564
- d: variant === "wireframe" ? NUKE_STEM_OPEN : NUKE_STEM,
565
- fill: variant === "wireframe" ? "none" : primaryColor
471
+ d: NUKE_STEM_ROUND_CORE,
472
+ stroke: primaryColor,
473
+ strokeWidth: "1.5",
474
+ strokeLinejoin: "round"
566
475
  }
567
476
  ),
568
- /* @__PURE__ */ jsx("path", { d: NUKE_CAP, fill: primaryColor })
569
- ] }),
570
- rounded: ({ primaryColor }) => /* @__PURE__ */ jsxs("g", { fill: primaryColor, stroke: primaryColor, strokeWidth: "1.5", strokeLinejoin: "round", children: [
571
- /* @__PURE__ */ jsx("path", { d: NUKE_STEM_ROUND_CORE }),
572
- /* @__PURE__ */ jsx("path", { d: NUKE_CAP_ROUND_CORE })
573
- ] }),
574
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs("g", { stroke: primaryColor, strokeWidth, strokeLinejoin: "miter", fill: "none", children: [
575
- /* @__PURE__ */ jsx("path", { d: NUKE_CAP }),
576
- /* @__PURE__ */ jsx("path", { d: NUKE_STEM_OPEN })
477
+ NUKE_PUFFS.map(([cx, cy, r]) => /* @__PURE__ */ jsx("circle", { cx, cy, r }, `${cx}-${cy}`))
577
478
  ] }),
479
+ outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsx(
480
+ "path",
481
+ {
482
+ d: NUKE_SILHOUETTE,
483
+ stroke: primaryColor,
484
+ strokeWidth,
485
+ strokeLinejoin: "round",
486
+ fill: "none"
487
+ }
488
+ ),
578
489
  duotone: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxs(Fragment, { children: [
579
490
  /* @__PURE__ */ jsx("path", { d: NUKE_STEM, fill: secondaryColor }),
580
491
  /* @__PURE__ */ jsx("path", { d: NUKE_CAP, fill: primaryColor })
@@ -597,22 +508,35 @@ const MOLECULE_RING = 1.1;
597
508
  function molecule(ring, centre, width) {
598
509
  return /* @__PURE__ */ jsxs(Fragment, { children: [
599
510
  /* @__PURE__ */ jsx("path", { d: MOLECULE_BONDS, stroke: ring, strokeWidth: width, fill: "none" }),
600
- MOLECULE_ATOMS.map(([cx, cy, r]) => /* @__PURE__ */ jsxs("g", { children: [
601
- /* @__PURE__ */ jsx("circle", { cx, cy, r, fill: ring }),
602
- /* @__PURE__ */ jsx("circle", { cx, cy, r: r - MOLECULE_RING, fill: centre })
603
- ] }, `${cx}-${cy}`))
511
+ MOLECULE_ATOMS.map(
512
+ ([cx, cy, r], i) => i === 0 ? /* @__PURE__ */ jsxs("g", { children: [
513
+ /* @__PURE__ */ jsx("circle", { cx, cy, r, fill: ring }),
514
+ /* @__PURE__ */ jsx("circle", { cx, cy, r: r - MOLECULE_RING, fill: centre })
515
+ ] }, `${cx}-${cy}`) : /* @__PURE__ */ jsx(
516
+ "circle",
517
+ {
518
+ cx,
519
+ cy,
520
+ r: r - MOLECULE_RING / 2,
521
+ stroke: ring,
522
+ strokeWidth: MOLECULE_RING,
523
+ fill: "none"
524
+ },
525
+ `${cx}-${cy}`
526
+ )
527
+ )
604
528
  ] });
605
529
  }
606
530
  const NtdMolecule = /* @__PURE__ */ createIcon({
607
531
  displayName: "NtdMolecule",
608
532
  paths: {
609
- solid: ({ primaryColor, accentColor, strokeWidth }) => molecule(primaryColor, accentColor, strokeWidth * 2),
533
+ solid: ({ primaryColor, accentColor, strokeWidth }) => molecule(primaryColor, accentColor, strokeWidth * 1.4),
610
534
  outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs("g", { stroke: primaryColor, strokeWidth, fill: "none", children: [
611
535
  /* @__PURE__ */ jsx("path", { d: MOLECULE_BONDS }),
612
536
  MOLECULE_ATOMS.map(([cx, cy, r]) => /* @__PURE__ */ jsx("circle", { cx, cy, r: r - strokeWidth / 2 }, `${cx}-${cy}`))
613
537
  ] }),
614
- duotone: ({ primaryColor, secondaryColor, strokeWidth }) => molecule(primaryColor, secondaryColor, strokeWidth * 2),
615
- vivid: ({ primaryColor, secondaryColor, strokeWidth }) => molecule(primaryColor, secondaryColor, strokeWidth * 2)
538
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => molecule(primaryColor, secondaryColor, strokeWidth * 1.4),
539
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => molecule(primaryColor, secondaryColor, strokeWidth * 1.4)
616
540
  }
617
541
  });
618
542
  const NtdPeriodictable = /* @__PURE__ */ createIcon({
@@ -875,52 +799,39 @@ const NtdPeriodictable = /* @__PURE__ */ createIcon({
875
799
  ] })
876
800
  }
877
801
  });
878
- const NtdMagnet = /* @__PURE__ */ createIcon({
879
- displayName: "NtdMagnet",
880
- paths: {
881
- solid: ({ primaryColor }) => /* @__PURE__ */ jsxs(Fragment, { children: [
882
- /* @__PURE__ */ jsx("path", { d: "M4 10a8 8 0 0116 0v6h-5v-6a3 3 0 00-6 0v6H4v-6z", fill: primaryColor }),
883
- /* @__PURE__ */ jsx("path", { d: "M4 10h5M15 10h5", stroke: "white", strokeWidth: "2" }),
884
- /* @__PURE__ */ jsx("text", { x: "6.5", y: "19", textAnchor: "middle", fill: "white", fontSize: "4", fontWeight: "bold", children: "S" }),
885
- /* @__PURE__ */ jsx("text", { x: "17.5", y: "19", textAnchor: "middle", fill: "white", fontSize: "4", fontWeight: "bold", children: "N" })
886
- ] }),
887
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
802
+ const MAGNET = "M4 10.8a8 8 0 0116 0v10h-5v-10a3 3 0 00-6 0v10H4z";
803
+ const MAGNET_LEFT = "M4 10.8a8 8 0 018-8v5a3 3 0 00-3 3v10H4z";
804
+ const MAGNET_RIGHT = "M12 2.8a8 8 0 018 8v10h-5v-10a3 3 0 00-3-3z";
805
+ function magnetFilled({ primaryColor, strokeWidth, uid }, right, rightOpacity, edge) {
806
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
807
+ /* @__PURE__ */ jsx("path", { d: MAGNET_LEFT, fill: primaryColor }),
808
+ /* @__PURE__ */ jsx("path", { d: MAGNET_RIGHT, fill: right, opacity: rightOpacity }),
809
+ edge && within(
810
+ uid,
811
+ "magnet",
812
+ /* @__PURE__ */ jsx("path", { d: MAGNET_RIGHT }),
888
813
  /* @__PURE__ */ jsx(
889
814
  "path",
890
815
  {
891
- d: "M4 10a8 8 0 0116 0v6h-5v-6a3 3 0 00-6 0v6H4v-6z",
816
+ d: MAGNET_RIGHT,
892
817
  stroke: primaryColor,
893
- strokeWidth,
818
+ strokeWidth: strokeWidth * 2.4,
894
819
  fill: "none"
895
820
  }
896
- ),
897
- /* @__PURE__ */ jsx("path", { d: "M4 10h5M15 10h5", stroke: primaryColor, strokeWidth })
821
+ )
822
+ )
823
+ ] });
824
+ }
825
+ const NtdMagnet = /* @__PURE__ */ createIcon({
826
+ displayName: "NtdMagnet",
827
+ paths: {
828
+ solid: (p) => magnetFilled(p, p.accentColor, p.accentOpacity, true),
829
+ outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs("g", { stroke: primaryColor, strokeWidth, fill: "none", children: [
830
+ /* @__PURE__ */ jsx("path", { d: MAGNET, strokeLinejoin: "round" }),
831
+ /* @__PURE__ */ jsx("path", { d: "M12 2.8v5" })
898
832
  ] }),
899
- duotone: swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
900
- /* @__PURE__ */ jsx(
901
- "path",
902
- {
903
- d: "M4 10a8 8 0 0116 0v6h-5v-6a3 3 0 00-6 0v6H4v-6z",
904
- fill: secondaryColor,
905
- opacity: secondaryOpacity
906
- }
907
- ),
908
- /* @__PURE__ */ jsx(
909
- "path",
910
- {
911
- d: "M4 10a8 8 0 0116 0v6h-5v-6a3 3 0 00-6 0v6H4v-6z",
912
- stroke: primaryColor,
913
- strokeWidth,
914
- fill: "none"
915
- }
916
- ),
917
- /* @__PURE__ */ jsx("path", { d: "M4 10h5M15 10h5", stroke: primaryColor, strokeWidth })
918
- ] })),
919
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => /* @__PURE__ */ jsxs(Fragment, { children: [
920
- /* @__PURE__ */ jsx("path", { d: "M4 10a8 8 0 0116 0v6h-5v-6a3 3 0 00-6 0v6H4v-6z", fill: primaryColor }),
921
- /* @__PURE__ */ jsx("path", { d: "M4 10a8 8 0 0116 0v6h-5v-6a3 3 0 00-6 0v6H4v-6z", fill: "white", opacity: "0.1" }),
922
- /* @__PURE__ */ jsx("path", { d: "M4 10h5M15 10h5", stroke: "white", strokeWidth: "1.8" })
923
- ] })
833
+ duotone: (p) => magnetFilled(p, p.secondaryColor, 1, false),
834
+ vivid: (p) => magnetFilled(p, p.secondaryColor, 1, true)
924
835
  }
925
836
  });
926
837
  const NtdTelescope = /* @__PURE__ */ createIcon({
@@ -1407,7 +1318,6 @@ const scienceIcons = {
1407
1318
  NtdTestTube,
1408
1319
  NtdPetriDish,
1409
1320
  NtdMicroscope,
1410
- NtdDna,
1411
1321
  NtdAtom,
1412
1322
  NtdRadiation,
1413
1323
  NtdNuke,
@@ -1424,7 +1334,6 @@ const scienceIcons = {
1424
1334
  export {
1425
1335
  NtdAtom,
1426
1336
  NtdBeaker,
1427
- NtdDna,
1428
1337
  NtdExperiment,
1429
1338
  NtdFlask,
1430
1339
  NtdHypothesis,
@@ -1006,46 +1006,37 @@ const NtdRepeat = /* @__PURE__ */ createIcon({
1006
1006
  }
1007
1007
  });
1008
1008
  const SHUFFLE_HEADS = ["M18 3l3 3-3 3", "M18 15l3 3-3 3"];
1009
- const SHUFFLE_UNDER = [
1010
- [5, 6],
1011
- [11, 6],
1012
- [11, 18],
1013
- [17, 18]
1014
- ];
1015
- const SHUFFLE_CROSS = [11, 12];
1016
- const shufflePoint = (p) => `${+p[0].toFixed(2)} ${+p[1].toFixed(2)}`;
1017
- function shuffleArrows(over, under, width) {
1009
+ const SHUFFLE_OVER_CURVE = "M5 18C11 18 11 6 17 6";
1010
+ const SHUFFLE_UNDER_CURVE = "M5 6C11 6 11 18 17 18";
1011
+ function shuffleArrows(over, under, width, mask, maskOpacity, strokeWidth) {
1018
1012
  const back = 21 - width * 0.35;
1019
- const [p0, p1, p2, p3] = SHUFFLE_UNDER;
1020
- const lerp = (a, b, t) => a.map((v, i) => v + (b[i] - v) * t);
1021
- const at = (t) => {
1022
- const a = lerp(p0, p1, t);
1023
- const b = lerp(p1, p2, t);
1024
- const d = lerp(a, b, t);
1025
- return [a, d, lerp(d, lerp(b, lerp(p2, p3, t), t), t)];
1026
- };
1027
- const gap = Math.min(width * 0.5, 1);
1028
- const clear = (width * 0.5 + gap + width * 0.5 * 0.6) / 0.8 + width * 0.5;
1029
- let lo = 0;
1030
- let hi = 0.5;
1031
- for (let i = 0; i < 24; i += 1) {
1032
- const mid = (lo + hi) / 2;
1033
- const end2 = at(mid)[2];
1034
- if (Math.hypot(end2[0] - SHUFFLE_CROSS[0], end2[1] - SHUFFLE_CROSS[1]) > clear) {
1035
- lo = mid;
1036
- } else {
1037
- hi = mid;
1038
- }
1039
- }
1040
- const [c1, c2, end] = at(lo);
1041
- const turn = (p) => p.map((v, i) => 2 * SHUFFLE_CROSS[i] - v);
1042
- const underPath = `M3 6H5C${shufflePoint(c1)} ${shufflePoint(c2)} ${shufflePoint(end)}M${shufflePoint(turn(end))}C${shufflePoint(turn(c2))} ${shufflePoint(turn(c1))} 17 18H${back}`;
1043
1013
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1044
- /* @__PURE__ */ jsx("path", { d: `${SHUFFLE_HEADS[1]}${underPath}`, stroke: under, strokeWidth: width, fill: "none" }),
1045
1014
  /* @__PURE__ */ jsx(
1046
1015
  "path",
1047
1016
  {
1048
- d: `${SHUFFLE_HEADS[0]}M3 18H5C11 18 11 6 17 6H${back}`,
1017
+ d: `${SHUFFLE_HEADS[1]}M3 6H5${SHUFFLE_UNDER_CURVE.slice(SHUFFLE_UNDER_CURVE.indexOf("C"))}H${back}`,
1018
+ stroke: under,
1019
+ strokeWidth: width,
1020
+ fill: "none"
1021
+ }
1022
+ ),
1023
+ /* @__PURE__ */ jsx(
1024
+ "path",
1025
+ {
1026
+ d: SHUFFLE_OVER_CURVE,
1027
+ pathLength: 1,
1028
+ strokeDasharray: "0 0.37 0.26 1",
1029
+ stroke: mask,
1030
+ strokeOpacity: maskOpacity,
1031
+ strokeWidth: width + strokeWidth * 1.2,
1032
+ strokeLinecap: "butt",
1033
+ fill: "none"
1034
+ }
1035
+ ),
1036
+ /* @__PURE__ */ jsx(
1037
+ "path",
1038
+ {
1039
+ d: `${SHUFFLE_HEADS[0]}M3 18H5${SHUFFLE_OVER_CURVE.slice(SHUFFLE_OVER_CURVE.indexOf("C"))}H${back}`,
1049
1040
  stroke: over,
1050
1041
  strokeWidth: width,
1051
1042
  fill: "none"
@@ -1056,10 +1047,38 @@ function shuffleArrows(over, under, width) {
1056
1047
  const NtdShuffle = /* @__PURE__ */ createIcon({
1057
1048
  displayName: "NtdShuffle",
1058
1049
  paths: {
1059
- solid: ({ primaryColor, strokeWidth }) => shuffleArrows(primaryColor, primaryColor, strokeWidth * 2),
1060
- outline: ({ primaryColor, strokeWidth }) => shuffleArrows(primaryColor, primaryColor, strokeWidth),
1061
- duotone: ({ primaryColor, secondaryColor, strokeWidth }) => shuffleArrows(primaryColor, secondaryColor, strokeWidth * 2),
1062
- vivid: ({ primaryColor, secondaryColor, strokeWidth }) => shuffleArrows(primaryColor, secondaryColor, strokeWidth * 2)
1050
+ solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => shuffleArrows(
1051
+ primaryColor,
1052
+ primaryColor,
1053
+ strokeWidth * 2,
1054
+ accentColor,
1055
+ accentOpacity,
1056
+ strokeWidth
1057
+ ),
1058
+ outline: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => shuffleArrows(
1059
+ primaryColor,
1060
+ primaryColor,
1061
+ strokeWidth,
1062
+ accentColor,
1063
+ accentOpacity,
1064
+ strokeWidth
1065
+ ),
1066
+ duotone: ({ primaryColor, secondaryColor, accentColor, accentOpacity, strokeWidth }) => shuffleArrows(
1067
+ primaryColor,
1068
+ secondaryColor,
1069
+ strokeWidth * 2,
1070
+ accentColor,
1071
+ accentOpacity,
1072
+ strokeWidth
1073
+ ),
1074
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity, strokeWidth }) => shuffleArrows(
1075
+ primaryColor,
1076
+ secondaryColor,
1077
+ strokeWidth * 2,
1078
+ accentColor,
1079
+ accentOpacity,
1080
+ strokeWidth
1081
+ )
1063
1082
  }
1064
1083
  });
1065
1084
  const NtdPoint = /* @__PURE__ */ createIcon({
@@ -548,37 +548,39 @@ const NtdSmartPlug = /* @__PURE__ */ createIcon({
548
548
  ] })
549
549
  }
550
550
  });
551
- const THERMO_BODY = "M13.75 13.56V4.25a1.75 1.75 0 00-3.5 0v9.31a4.4 4.4 0 103.5 0z";
551
+ const THERMO_BODY = "M14.3 13.85V4.3a2.3 2.3 0 00-4.6 0v9.55a4.4 4.4 0 104.6 0z";
552
+ const THERMO_BODY_SHARP = "M14.3 13.85V2H9.7v11.85a4.4 4.4 0 104.6 0z";
552
553
  const THERMO_BALL = { cx: 12, cy: 17.6, r: 2.6 };
553
- const THERMO_COLUMN = "M12 4.6V17";
554
- const THERMO_MARKS = "M17 4h3M17 8h3M17 12h3";
555
- function thermometer(body, mercury, marks, width) {
554
+ const THERMO_COLUMN = "M12 5.4V17";
555
+ const THERMO_MARKS = "M16.4 5h2.4M16.4 7.4h1.4M16.4 9.8h2.4M16.4 12.2h1.4";
556
+ function thermometer(body, mercury, marks, width, bodyPath = THERMO_BODY) {
556
557
  return /* @__PURE__ */ jsxs(Fragment, { children: [
557
- /* @__PURE__ */ jsx("path", { d: THERMO_BODY, fill: body }),
558
+ /* @__PURE__ */ jsx("path", { d: bodyPath, fill: body }),
558
559
  /* @__PURE__ */ jsx("circle", { ...THERMO_BALL, fill: mercury }),
559
- /* @__PURE__ */ jsx("path", { d: THERMO_COLUMN, stroke: mercury, strokeWidth: 1.2 }),
560
+ /* @__PURE__ */ jsx("path", { d: THERMO_COLUMN, stroke: mercury, strokeWidth: 2 }),
560
561
  /* @__PURE__ */ jsx("path", { d: THERMO_MARKS, stroke: marks, strokeWidth: width })
561
562
  ] });
562
563
  }
563
564
  const NtdTemperatureSensor = /* @__PURE__ */ createIcon({
564
565
  displayName: "NtdTemperatureSensor",
565
566
  paths: {
566
- solid: ({ primaryColor, accentColor, strokeWidth }) => thermometer(primaryColor, accentColor, primaryColor, strokeWidth * 1.5),
567
+ solid: ({ primaryColor, accentColor, strokeWidth }) => thermometer(primaryColor, accentColor, primaryColor, strokeWidth),
568
+ sharp: ({ primaryColor, accentColor, strokeWidth }) => thermometer(primaryColor, accentColor, primaryColor, strokeWidth, THERMO_BODY_SHARP),
567
569
  outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs("g", { stroke: primaryColor, strokeWidth, fill: "none", children: [
568
570
  /* @__PURE__ */ jsx("path", { d: THERMO_BODY }),
569
571
  /* @__PURE__ */ jsx("circle", { ...THERMO_BALL, r: 2 }),
570
- /* @__PURE__ */ jsx("path", { d: "M12 4.6V15.6" }),
572
+ /* @__PURE__ */ jsx("path", { d: "M12 5.4V15.6" }),
571
573
  /* @__PURE__ */ jsx("path", { d: THERMO_MARKS })
572
574
  ] }),
573
- duotone: ({ primaryColor, secondaryColor, strokeWidth }) => thermometer(primaryColor, secondaryColor, secondaryColor, strokeWidth * 1.5),
574
- vivid: ({ primaryColor, secondaryColor, strokeWidth }) => thermometer(primaryColor, secondaryColor, secondaryColor, strokeWidth * 1.5)
575
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => thermometer(primaryColor, secondaryColor, secondaryColor, strokeWidth),
576
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => thermometer(primaryColor, secondaryColor, secondaryColor, strokeWidth)
575
577
  }
576
578
  });
577
- const FRIDGE_BODY = { x: 5, y: 2, width: 14, height: 19, rx: 2 };
578
- const FRIDGE_FREEZER = "M7 2H17A2 2 0 0 1 19 4V8.4H5V4A2 2 0 0 1 7 2Z";
579
- const FRIDGE_GAP = "M4 8.4H20";
580
- const FRIDGE_HANDLES = "M8 4.4V6.6M8 10.6V14.6";
581
- const FRIDGE_FEET = "M7 21v1.2M17 21v1.2";
579
+ const FRIDGE_BODY = { x: 5, y: 2.4, width: 14, height: 19, rx: 2 };
580
+ const FRIDGE_FREEZER = "M7 2.4H17A2 2 0 0 1 19 4.4V9.8H5V4.4A2 2 0 0 1 7 2.4Z";
581
+ const FRIDGE_GAP = "M4 9.8H20";
582
+ const FRIDGE_HANDLES = "M8 4.6V7.6M8 11.8V14.8";
583
+ const FRIDGE_FEET = "M7 21.4v0.7M17 21.4v0.7";
582
584
  function fridgeFilled({ primaryColor, accentColor, strokeWidth, uid }, freezer) {
583
585
  return /* @__PURE__ */ jsxs(Fragment, { children: [
584
586
  /* @__PURE__ */ jsx("path", { d: FRIDGE_FEET, stroke: primaryColor, strokeWidth: strokeWidth * 2 }),
@@ -601,7 +603,7 @@ const NtdRefrigerator = /* @__PURE__ */ createIcon({
601
603
  solid: (props) => fridgeFilled(props, props.primaryColor),
602
604
  outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs("g", { stroke: primaryColor, strokeWidth, fill: "none", children: [
603
605
  /* @__PURE__ */ jsx("rect", { ...FRIDGE_BODY }),
604
- /* @__PURE__ */ jsx("path", { d: "M5 8.4H19" }),
606
+ /* @__PURE__ */ jsx("path", { d: "M5 9.8H19" }),
605
607
  /* @__PURE__ */ jsx("path", { d: FRIDGE_HANDLES }),
606
608
  /* @__PURE__ */ jsx("path", { d: FRIDGE_FEET })
607
609
  ] }),
@@ -293,30 +293,32 @@ const NtdThumbsDown = /* @__PURE__ */ createIcon({
293
293
  }
294
294
  });
295
295
  const NtdBellRing = /* @__PURE__ */ bellIcon("NtdBellRing", true);
296
+ const MEGA_BOX = { x: 2.5, y: 8, width: 5.5, height: 6, rx: 1.5 };
297
+ const MEGA_HORN = "M8 8L18.5 3.5V18.5L8 14Z";
298
+ const MEGA_GRIP = "M9.5 14.65L12.8 16.05L12 21a1 1 0 01-1 .8H9.6a1 1 0 01-1-1.2z";
299
+ const MEGA_RIM = { cx: 18.5, cy: 11, rx: 2, ry: 7.5 };
300
+ const MEGA_OPENING = { cx: 18.9, cy: 11, rx: 1.1, ry: 6 };
301
+ function megaphoneFilled(horn, parts, opening, openingOpacity) {
302
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
303
+ /* @__PURE__ */ jsx("path", { d: MEGA_GRIP, fill: parts }),
304
+ /* @__PURE__ */ jsx("rect", { ...MEGA_BOX, fill: parts }),
305
+ /* @__PURE__ */ jsx("path", { d: MEGA_HORN, fill: horn }),
306
+ /* @__PURE__ */ jsx("ellipse", { ...MEGA_RIM, fill: horn }),
307
+ opening && /* @__PURE__ */ jsx("ellipse", { ...MEGA_OPENING, fill: opening, opacity: openingOpacity })
308
+ ] });
309
+ }
296
310
  const NtdMegaphone = /* @__PURE__ */ createIcon({
297
311
  displayName: "NtdMegaphone",
298
312
  paths: {
299
- solid: ({ primaryColor, secondaryColor, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
300
- /* @__PURE__ */ jsx("path", { d: "M21 4v16l-8-4H5a2 2 0 01-2-2V10a2 2 0 012-2h8l8-4z", fill: primaryColor }),
301
- /* @__PURE__ */ jsx("path", { d: "M5 16l-1 4h4l1-4", stroke: secondaryColor, strokeWidth, fill: "none" })
313
+ solid: ({ primaryColor, accentColor, accentOpacity }) => megaphoneFilled(primaryColor, primaryColor, accentColor, accentOpacity),
314
+ outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs("g", { stroke: primaryColor, strokeWidth, strokeLinejoin: "miter", fill: "none", children: [
315
+ /* @__PURE__ */ jsx("rect", { ...MEGA_BOX }),
316
+ /* @__PURE__ */ jsx("path", { d: "M8 8L18.5 3.5M8 14L18.5 18.5" }),
317
+ /* @__PURE__ */ jsx("ellipse", { ...MEGA_RIM }),
318
+ /* @__PURE__ */ jsx("path", { d: MEGA_GRIP })
302
319
  ] }),
303
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
304
- /* @__PURE__ */ jsx(
305
- "path",
306
- {
307
- d: "M21 4v16l-8-4H5a2 2 0 01-2-2V10a2 2 0 012-2h8l8-4z",
308
- stroke: primaryColor,
309
- strokeWidth,
310
- fill: "none"
311
- }
312
- ),
313
- /* @__PURE__ */ jsx("path", { d: "M5 16l-1 4h4l1-4", stroke: primaryColor, strokeWidth, fill: "none" })
314
- ] }),
315
- vivid: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxs(Fragment, { children: [
316
- /* @__PURE__ */ jsx("path", { d: "M21 4v16l-8-4H5a2 2 0 01-2-2V10a2 2 0 012-2h8l8-4z", fill: primaryColor }),
317
- /* @__PURE__ */ jsx("path", { d: "M21 4v16l-8-4H5a2 2 0 01-2-2V10a2 2 0 012-2h8l8-4z", fill: "white", opacity: "0.1" }),
318
- /* @__PURE__ */ jsx("path", { d: "M5 16l-1 4h4l1-4", stroke: secondaryColor, strokeWidth: "1.8", fill: "none" })
319
- ] })
320
+ duotone: ({ primaryColor, secondaryColor }) => megaphoneFilled(primaryColor, secondaryColor, null, 1),
321
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => megaphoneFilled(primaryColor, secondaryColor, accentColor, accentOpacity)
320
322
  }
321
323
  });
322
324
  const NtdQrCode = /* @__PURE__ */ createIcon({