@nice2dev/icons 1.4.0 → 1.4.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 (44) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +6 -4
  3. package/dist/cjs/iconParts.js +6 -0
  4. package/dist/cjs/icons/actions.js +3 -3
  5. package/dist/cjs/icons/business.js +210 -64
  6. package/dist/cjs/icons/devtech.js +59 -63
  7. package/dist/cjs/icons/ecommerce.js +0 -62
  8. package/dist/cjs/icons/files.js +38 -88
  9. package/dist/cjs/icons/fintech.js +4 -3
  10. package/dist/cjs/icons/food.js +118 -65
  11. package/dist/cjs/icons/health.js +55 -70
  12. package/dist/cjs/icons/index.js +12 -1
  13. package/dist/cjs/icons/omniverk.js +3 -3
  14. package/dist/cjs/icons/realestate.js +100 -96
  15. package/dist/cjs/icons/science.js +74 -36
  16. package/dist/cjs/icons/smarthome.js +56 -65
  17. package/dist/cjs/icons/ui.js +44 -29
  18. package/dist/cjs/index.js +12 -1
  19. package/dist/esm/iconParts.js +6 -0
  20. package/dist/esm/icons/actions.js +3 -3
  21. package/dist/esm/icons/business.js +210 -64
  22. package/dist/esm/icons/devtech.js +60 -64
  23. package/dist/esm/icons/ecommerce.js +1 -63
  24. package/dist/esm/icons/files.js +38 -88
  25. package/dist/esm/icons/fintech.js +4 -3
  26. package/dist/esm/icons/food.js +119 -66
  27. package/dist/esm/icons/health.js +56 -71
  28. package/dist/esm/icons/index.js +18 -7
  29. package/dist/esm/icons/omniverk.js +4 -4
  30. package/dist/esm/icons/realestate.js +100 -96
  31. package/dist/esm/icons/science.js +75 -37
  32. package/dist/esm/icons/smarthome.js +56 -65
  33. package/dist/esm/icons/ui.js +45 -30
  34. package/dist/esm/index.js +18 -7
  35. package/dist/types/iconParts.d.ts +9 -0
  36. package/dist/types/icons/business.d.ts +2 -0
  37. package/dist/types/icons/devtech.d.ts +22 -0
  38. package/dist/types/icons/ecommerce.d.ts +0 -1
  39. package/dist/types/icons/food.d.ts +4 -0
  40. package/dist/types/icons/index.d.ts +7 -7
  41. package/dist/types/icons/realestate.d.ts +2 -0
  42. package/dist/types/icons/smarthome.d.ts +1 -0
  43. package/dist/types/icons/ui.d.ts +2 -0
  44. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,49 @@
1
1
  # @nice2dev/icons — Changelog
2
2
 
3
+ ## 1.4.2
4
+
5
+ No changes in this release.
6
+
7
+ ## 1.4.1
8
+
9
+ ### Patch Changes
10
+
11
+ - 0513eac: Icons, showcase feedback round 42.
12
+
13
+ New icons:
14
+
15
+ - `NtdKnife`: a kitchen knife.
16
+ - `NtdCookingPan`: a frying pan, side view.
17
+ - `NtdCash`: a flat banknote.
18
+ - `NtdCashStack`: three notes.
19
+ - `NtdRefrigerator`.
20
+ - `NtdShelfRack`: a storage rack with boxes.
21
+ - The battery set: `NtdBatteryQuarter`, `NtdBatteryHalf`, `NtdBatteryThreeQuarters` and `NtdBatteryFull`, from the same factory as `NtdBattery`.
22
+ - `batteryIconFor(level)` returns the step for a 0–1 charge level, rounded to the nearest quarter.
23
+
24
+ Redrawn icons:
25
+
26
+ - `NtdPlanet`: the ring is one band, with no arcs across it at the sides.
27
+ - `NtdWallet`: a low, wide back pocket.
28
+ - `NtdMap`: a folded map with a dashed route and an X.
29
+ - `NtdLayers`: the top layer is a slab as thick as the others.
30
+ - `NtdCopy`: the back sheet is a little bigger.
31
+ - `NtdTrash`: a flat lid and a narrower, taller handle.
32
+ - `NtdDna`: denser, thinner base pairs.
33
+ - `NtdBitcoin`: 2× the stroke width.
34
+ - `NtdTruck`: a lower box and thinner wheel rings.
35
+ - `NtdNuke`: a mushroom cap with a curved underside.
36
+ - `NtdTarget`: even gaps between the rings at any stroke width.
37
+ - `NtdCoffeeFood`: a smaller handle and saucer, and three thinner wisps.
38
+ - `NtdPiggyBank`: drawn anew.
39
+ - `NtdHeartPulse`: the line meets the heart's edge in every variant.
40
+ - `NtdBattery`: empty, with the terminal on the body.
41
+ - `NtdTemperatureSensor`: a bigger bulb and a thin, tall column.
42
+ - `NtdWarehouse`: a hall with boxes in the doorway.
43
+ - `NtdForkKnife`: NtdFood's fork and knife, without the plate.
44
+
45
+ `NtdWishlist` is now a deprecated alias of `NtdHeart`.
46
+
3
47
  ## 1.4.0
4
48
 
5
49
  No changes in this release.
package/README.md CHANGED
@@ -526,17 +526,19 @@ Properties passed to every path renderer (pre-resolved from user props):
526
526
 
527
527
  `NtdArrowUpCircle` · `NtdArrowDownCircle` · `NtdArrowLeftCircle` · `NtdArrowRightCircle` · `NtdSquare` · `NtdCircle` · `NtdTriangle` · `NtdHexagon` · `NtdOctagon` · `NtdDiamond` · `NtdPentagon` · `NtdCross` · `NtdStar4` · `NtdCornerUpLeft` · `NtdCornerUpRight` · `NtdCornerDownLeft` · `NtdCornerDownRight` · `NtdMaximize` · `NtdMinimize` · `NtdMove` · `NtdRepeat` · `NtdShuffle`
528
528
 
529
- ### Business & Finance (16 icons)
529
+ ### Business & Finance (18 icons)
530
530
 
531
- `NtdBriefcase` · `NtdDollar` · `NtdWallet` · `NtdReceipt` · `NtdBank` · `NtdTrendUp` · `NtdTrendDown` · `NtdPercent` · `NtdInvoice` · `NtdStore` · `NtdBarcode` · `NtdCalculator` · `NtdPresentation` · `NtdClipboardCheck` · `NtdPiggyBank` · `NtdCoins`
531
+ `NtdBriefcase` · `NtdDollar` · `NtdWallet` · `NtdReceipt` · `NtdBank` · `NtdTrendUp` · `NtdTrendDown` · `NtdPercent` · `NtdInvoice` · `NtdStore` · `NtdBarcode` · `NtdCalculator` · `NtdPresentation` · `NtdClipboardCheck` · `NtdPiggyBank` · `NtdCoins` · `NtdCash` · `NtdCashStack`
532
532
 
533
533
  ### Social & Communication (8 icons)
534
534
 
535
535
  `NtdAtSign` · `NtdPhoneOff` · `NtdBubble` · `NtdThumbsUp` · `NtdThumbsDown` · `NtdBellRing` · `NtdMegaphone` · `NtdQrCode`
536
536
 
537
- ### Dev & Tech (9 icons)
537
+ ### Dev & Tech (13 icons)
538
538
 
539
- `NtdBrackets` · `NtdServer` · `NtdGitBranch` · `NtdGitCommit` · `NtdGitMerge` · `NtdBattery` · `NtdSlash` · `NtdHash` · `NtdBugDev`
539
+ `NtdBrackets` · `NtdServer` · `NtdGitBranch` · `NtdGitCommit` · `NtdGitMerge` · `NtdBattery` · `NtdBatteryQuarter` · `NtdBatteryHalf` · `NtdBatteryThreeQuarters` · `NtdBatteryFull` · `NtdSlash` · `NtdHash` · `NtdBugDev`
540
+
541
+ The battery levels for live data: `batteryIconFor(level)` (0–1) returns the nearest quarter's icon.
540
542
 
541
543
  ### Food & Health (13 icons)
542
544
 
@@ -23,6 +23,9 @@ function within(uid, name, shape, content) {
23
23
  /* @__PURE__ */ jsxRuntime.jsx("g", { clipPath: `url(#${id})`, children: content })
24
24
  ] });
25
25
  }
26
+ const CUTLERY_FORK = "M1 3H1.6V7H2.2V3H2.8V7H3.4V3H4V7.2C4 8.4 3.4 9.1 3 9.3V20.5A0.5 0.5 0 0 1 2 20.5V9.3C1.6 9.1 1 8.4 1 7.2Z";
27
+ const CUTLERY_KNIFE = "M20.2 3C22.4 4.2 23 8.2 22.6 12.6H21.9V20.4A0.75 0.75 0 0 1 20.4 20.4V12.6H20.2Z";
28
+ const CUTLERY_FORK_LINES = "M1.3 3V6.8C1.3 8.2 2.5 8.9 2.5 9.4M3.7 3V6.8C3.7 8.2 2.5 8.9 2.5 9.4M2.5 3V20.6";
26
29
  const BELL = "M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9z";
27
30
  const BELL_CLAPPER = "M9 18.5h6a3 3 0 01-6 0z";
28
31
  const BELL_CLAPPER_LINE = "M9 19a3 3 0 006 0";
@@ -127,6 +130,9 @@ function paperIcon(displayName, text = "") {
127
130
  }
128
131
  });
129
132
  }
133
+ exports.CUTLERY_FORK = CUTLERY_FORK;
134
+ exports.CUTLERY_FORK_LINES = CUTLERY_FORK_LINES;
135
+ exports.CUTLERY_KNIFE = CUTLERY_KNIFE;
130
136
  exports.bellIcon = bellIcon;
131
137
  exports.detailColor = detailColor;
132
138
  exports.paperIcon = paperIcon;
@@ -150,8 +150,8 @@ const NtdEditDetail = /* @__PURE__ */ createIcon.createIcon({
150
150
  ] })
151
151
  }
152
152
  });
153
- const TRASH_LID = "M4 6H5Q12 4 19 6H20";
154
- const TRASH_HANDLE = "M9 5.2V4.5a1.5 1.5 0 011.5-1.5h3a1.5 1.5 0 011.5 1.5V5.2";
153
+ const TRASH_LID = "M4 6H20";
154
+ const TRASH_HANDLE = "M9.5 6V3.5a1.5 1.5 0 011.5-1.5h2a1.5 1.5 0 011.5 1.5V6";
155
155
  const TRASH_BIN = "M5 6l1 14a2 2 0 002 2h8a2 2 0 002-2l1-14H5z";
156
156
  const TRASH_GROOVES = "M10 10.5v7M14 10.5v7";
157
157
  const NtdTrash = /* @__PURE__ */ createIcon.createIcon({
@@ -395,7 +395,7 @@ const NtdShare = /* @__PURE__ */ createIcon.createIcon({
395
395
  }
396
396
  });
397
397
  const COPY_FRONT = { x: 8.5, y: 3, width: 12.5, height: 12.5, rx: 2.5 };
398
- const COPY_BACK = { x: 3, y: 10, width: 11, height: 11, rx: 2.5 };
398
+ const COPY_BACK = { x: 3, y: 9.25, width: 11.75, height: 11.75, rx: 2.5 };
399
399
  function copyBack(gap, square = false) {
400
400
  const { x, y, width, height, rx } = COPY_BACK;
401
401
  const top = COPY_FRONT.x - gap;
@@ -101,14 +101,23 @@ const NtdDollar = /* @__PURE__ */ createIcon.createIcon({
101
101
  }
102
102
  });
103
103
  const WALLET_BODY = { x: 2, y: 6.5, width: 20, height: 14.5, rx: 2.5 };
104
- const WALLET_BACK = "M4.5 8L16 3.5a1 1 0 011.3.95V8z";
104
+ const WALLET_BACK = "M4.5 8V5.6L19 4.2a1 1 0 011.1 1V8z";
105
+ const WALLET_BACK_LINE = "M4.5 6.5V5.6L19 4.2a1 1 0 011.1 1V6.5";
105
106
  const WALLET_POCKET = "M22 10.5h-4.5a2.5 2.5 0 000 5H22z";
106
107
  const WALLET_POCKET_LINE = "M22 10.5h-4.5a2.5 2.5 0 000 5H22";
107
108
  const NtdWallet = /* @__PURE__ */ createIcon.createIcon({
108
109
  displayName: "NtdWallet",
109
110
  paths: {
111
+ // the back pocket is primary like the body: an accent gap (the body's edge, clipped to the pocket)
112
+ // parts the two
110
113
  solid: ({ primaryColor, accentColor, accentOpacity, uid }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
111
114
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: WALLET_BACK, fill: primaryColor }),
115
+ iconParts.within(
116
+ uid,
117
+ "back",
118
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: WALLET_BACK }),
119
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...WALLET_BODY, stroke: accentColor, strokeWidth: 1.4, fill: "none" })
120
+ ),
112
121
  /* @__PURE__ */ jsxRuntime.jsx("rect", { ...WALLET_BODY, fill: primaryColor }),
113
122
  iconParts.within(
114
123
  uid,
@@ -122,7 +131,7 @@ const NtdWallet = /* @__PURE__ */ createIcon.createIcon({
122
131
  /* @__PURE__ */ jsxRuntime.jsx(
123
132
  "path",
124
133
  {
125
- d: "M4.5 6.5L16 3.5a1 1 0 011.3.95V6.5",
134
+ d: WALLET_BACK_LINE,
126
135
  stroke: primaryColor,
127
136
  strokeWidth,
128
137
  strokeLinejoin: "miter",
@@ -737,71 +746,78 @@ const NtdClipboardCheck = /* @__PURE__ */ createIcon.createIcon({
737
746
  ] })
738
747
  }
739
748
  });
740
- const NtdPiggyBank = /* @__PURE__ */ createIcon.createIcon({
741
- displayName: "NtdPiggyBank",
742
- paths: {
743
- solid: ({ primaryColor, secondaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
744
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "12", cy: "13", rx: "8", ry: "6", fill: primaryColor }),
745
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "11", r: "1", fill: secondaryColor }),
746
- /* @__PURE__ */ jsxRuntime.jsx(
747
- "path",
748
- {
749
- d: "M20 13c1 0 2 .5 2 2s-1 2-2 2",
750
- stroke: primaryColor,
751
- strokeWidth,
752
- fill: "none"
753
- }
754
- ),
755
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 19l-1 3", stroke: primaryColor, strokeWidth }),
756
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 19l1 3", stroke: primaryColor, strokeWidth }),
757
- /* @__PURE__ */ jsxRuntime.jsx(
758
- "path",
759
- {
760
- d: "M14 7c-1-1-2.5-1.5-4-1.5S7 6 6 7",
761
- stroke: primaryColor,
762
- strokeWidth,
763
- fill: "none"
764
- }
765
- ),
766
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "10", y1: "5", x2: "10", y2: "3", stroke: primaryColor, strokeWidth })
767
- ] }),
768
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
769
- /* @__PURE__ */ jsxRuntime.jsx(
770
- "ellipse",
771
- {
772
- cx: "12",
773
- cy: "13",
774
- rx: "8",
775
- ry: "6",
776
- stroke: primaryColor,
777
- strokeWidth,
778
- fill: "none"
779
- }
749
+ const PIG_BODY = { cx: 11.5, cy: 13, rx: 7.5, ry: 6 };
750
+ const PIG_EAR = "M13.6 8.3C13.9 6.4 15 5.2 16.6 5.1C17.3 6.3 17.6 8.1 17.3 10.1Z";
751
+ const PIG_SNOUT = { x: 17.6, y: 10.6, width: 4.2, height: 5, rx: 2 };
752
+ const PIG_LEGS = "M6.2 16h2.6v4.2a.8.8 0 01-.8.8h-1a.8.8 0 01-.8-.8zM14.4 16h2.6v4.2a.8.8 0 01-.8.8h-1a.8.8 0 01-.8-.8z";
753
+ const PIG_TAIL = "M4.3 12c-1.5-.8-3-.1-3 1.3s1.3 1.7 2 1.1";
754
+ const PIG_SLOT = "M9.3 8.9h3.4";
755
+ const PIG_COIN = { cx: 11, cy: 4.1, r: 2.2 };
756
+ const PIG_OUTSIDE = "M-1-1H25V25H-1ZM4 13a7.5 6 0 1 0 15 0a7.5 6 0 1 0-15 0Z";
757
+ const PIG_OUTSIDE_SNOUT = "M-1-1H25V25H-1ZM19.6 10.6h.2a2 2 0 012 2v1a2 2 0 01-2 2h-.2a2 2 0 01-2-2v-1a2 2 0 012-2Z";
758
+ function piggyFace(eye, width) {
759
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
760
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "16.2", cy: "11", r: "0.85", fill: eye }),
761
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "19", cy: "13.1", r: "0.55", fill: eye }),
762
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "20.4", cy: "13.1", r: "0.55", fill: eye }),
763
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PIG_SLOT, stroke: eye, strokeWidth: width })
764
+ ] });
765
+ }
766
+ function piggyFilled({ primaryColor, accentColor, strokeWidth }, parts) {
767
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
768
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PIG_LEGS, fill: parts }),
769
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PIG_EAR, fill: parts }),
770
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PIG_TAIL, stroke: primaryColor, strokeWidth: strokeWidth * 1.5, fill: "none" }),
771
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { ...PIG_BODY, fill: primaryColor }),
772
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...PIG_SNOUT, fill: parts }),
773
+ piggyFace(accentColor, strokeWidth * 1.2),
774
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { ...PIG_COIN, fill: parts }),
775
+ /* @__PURE__ */ jsxRuntime.jsx(
776
+ "circle",
777
+ {
778
+ cx: PIG_COIN.cx,
779
+ cy: PIG_COIN.cy,
780
+ r: PIG_COIN.r - 0.8,
781
+ stroke: accentColor,
782
+ strokeWidth: strokeWidth * 0.6,
783
+ fill: "none"
784
+ }
785
+ )
786
+ ] });
787
+ }
788
+ function piggyLines(color, width, uid) {
789
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
790
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: color, strokeWidth: width, fill: "none", children: [
791
+ iconParts.within(
792
+ uid,
793
+ "parts",
794
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PIG_OUTSIDE, clipRule: "evenodd" }),
795
+ /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
796
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PIG_LEGS }),
797
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PIG_EAR })
798
+ ] })
780
799
  ),
781
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "11", r: "1", fill: primaryColor }),
782
- /* @__PURE__ */ jsxRuntime.jsx(
783
- "path",
784
- {
785
- d: "M20 13c1 0 2 .5 2 2s-1 2-2 2",
786
- stroke: primaryColor,
787
- strokeWidth,
788
- fill: "none"
789
- }
800
+ iconParts.within(
801
+ uid,
802
+ "body",
803
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PIG_OUTSIDE_SNOUT, clipRule: "evenodd" }),
804
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { ...PIG_BODY })
790
805
  ),
791
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 19l-1 3", stroke: primaryColor, strokeWidth }),
792
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 19l1 3", stroke: primaryColor, strokeWidth }),
793
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "10", y1: "7", x2: "10", y2: "4", stroke: primaryColor, strokeWidth })
806
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...PIG_SNOUT }),
807
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PIG_TAIL }),
808
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { ...PIG_COIN })
794
809
  ] }),
795
- vivid: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
796
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "12", cy: "13", rx: "8", ry: "6", fill: primaryColor }),
797
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "12", cy: "13", rx: "8", ry: "6", fill: "white", opacity: "0.08" }),
798
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "11", r: "1", fill: secondaryColor }),
799
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 13c1 0 2 .5 2 2s-1 2-2 2", stroke: "white", strokeWidth: "1", fill: "none" }),
800
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 19l-1 3", stroke: "white", strokeWidth: "1" }),
801
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 19l1 3", stroke: "white", strokeWidth: "1" }),
802
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 7c-1-1-2.5-1.5-4-1.5S7 6 6 7", stroke: "white", strokeWidth: "1", fill: "none" }),
803
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "10", y1: "5", x2: "10", y2: "3", stroke: "white", strokeWidth: "1" })
804
- ] })
810
+ piggyFace(color, width)
811
+ ] });
812
+ }
813
+ const NtdPiggyBank = /* @__PURE__ */ createIcon.createIcon({
814
+ displayName: "NtdPiggyBank",
815
+ paths: {
816
+ // the wireframe re-draws this as lines: there the parts must not cross the body
817
+ solid: (props) => props.variant === "wireframe" ? piggyLines(props.primaryColor, 1, props.uid) : piggyFilled(props, props.primaryColor),
818
+ outline: ({ primaryColor, strokeWidth, uid }) => piggyLines(primaryColor, strokeWidth, uid),
819
+ duotone: (props) => piggyFilled(props, props.secondaryColor),
820
+ vivid: (props) => piggyFilled(props, props.secondaryColor)
805
821
  }
806
822
  });
807
823
  const COIN_FRONT = { cx: 9.2, cy: 15, r: 6.5 };
@@ -868,6 +884,134 @@ const NtdCoins = /* @__PURE__ */ createIcon.createIcon({
868
884
  vivid: ({ primaryColor, secondaryColor, accentColor, strokeWidth }) => coins(secondaryColor, primaryColor, accentColor, strokeWidth)
869
885
  }
870
886
  });
887
+ const NOTE_RX = 1.2;
888
+ const NOTE_GAP = 0.8;
889
+ function noteRect([x, y, w, h], grow = 0) {
890
+ return `M${x - grow} ${y - grow}h${w + 2 * grow}v${h + 2 * grow}h${-w - 2 * grow}Z`;
891
+ }
892
+ function noteDetails([x, y, w, h], color, width, discFilled) {
893
+ const r = h * 0.24;
894
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
895
+ /* @__PURE__ */ jsxRuntime.jsx(
896
+ "rect",
897
+ {
898
+ x: x + 1.3,
899
+ y: y + 1.3,
900
+ width: w - 2.6,
901
+ height: h - 2.6,
902
+ rx: "0.5",
903
+ stroke: color,
904
+ strokeWidth: width * 0.5,
905
+ fill: "none"
906
+ }
907
+ ),
908
+ discFilled ? /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x + w / 2, cy: y + h / 2, r, fill: color }) : /* @__PURE__ */ jsxRuntime.jsx(
909
+ "circle",
910
+ {
911
+ cx: x + w / 2,
912
+ cy: y + h / 2,
913
+ r,
914
+ stroke: color,
915
+ strokeWidth: width,
916
+ fill: "none"
917
+ }
918
+ )
919
+ ] });
920
+ }
921
+ function notesFilled(notes, fills, rim, details, width) {
922
+ const front = notes[notes.length - 1];
923
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
924
+ notes.map((n, i) => {
925
+ const [x, y, w, h] = n;
926
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
927
+ rim && i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
928
+ "rect",
929
+ {
930
+ x,
931
+ y,
932
+ width: w,
933
+ height: h,
934
+ rx: NOTE_RX,
935
+ stroke: rim,
936
+ strokeWidth: NOTE_GAP * 2,
937
+ fill: "none"
938
+ }
939
+ ),
940
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: w, height: h, rx: NOTE_RX, fill: fills[i] })
941
+ ] }, i);
942
+ }),
943
+ noteDetails(front, details, width, true)
944
+ ] });
945
+ }
946
+ function notesLines(notes, color, width, uid) {
947
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
948
+ /* @__PURE__ */ jsxRuntime.jsx("g", { stroke: color, strokeWidth: width, fill: "none", children: notes.map((n, i) => {
949
+ const [x, y, w, h] = n;
950
+ const line = /* @__PURE__ */ jsxRuntime.jsx(
951
+ "rect",
952
+ {
953
+ x: x + width / 2,
954
+ y: y + width / 2,
955
+ width: w - width,
956
+ height: h - width,
957
+ rx: NOTE_RX
958
+ }
959
+ );
960
+ const next = notes[i + 1];
961
+ return next ? /* @__PURE__ */ jsxRuntime.jsx("g", { children: iconParts.within(
962
+ uid,
963
+ `note${i}`,
964
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M-1-1H25V25H-1Z${noteRect(next, NOTE_GAP)}`, clipRule: "evenodd" }),
965
+ line
966
+ ) }, i) : /* @__PURE__ */ jsxRuntime.jsx("g", { children: line }, i);
967
+ }) }),
968
+ noteDetails(notes[notes.length - 1], color, width, false)
969
+ ] });
970
+ }
971
+ const CASH_NOTE = [3, 6.75, 18, 10.5];
972
+ const CASH_TURN = "rotate(-20 12 12)";
973
+ const NtdCash = /* @__PURE__ */ createIcon.createIcon({
974
+ displayName: "NtdCash",
975
+ paths: {
976
+ solid: ({ primaryColor, accentColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsx("g", { transform: CASH_TURN, children: notesFilled([CASH_NOTE], [primaryColor], void 0, accentColor, strokeWidth) }),
977
+ outline: ({ primaryColor, strokeWidth, uid }) => /* @__PURE__ */ jsxRuntime.jsx("g", { transform: CASH_TURN, children: notesLines([CASH_NOTE], primaryColor, strokeWidth, uid) }),
978
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsx("g", { transform: CASH_TURN, children: notesFilled([CASH_NOTE], [primaryColor], void 0, secondaryColor, strokeWidth) }),
979
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsx("g", { transform: CASH_TURN, children: notesFilled([CASH_NOTE], [primaryColor], void 0, secondaryColor, strokeWidth) })
980
+ }
981
+ });
982
+ const CASH_STACK = [
983
+ [6, 4.25, 16, 9],
984
+ [4, 7.5, 16, 9],
985
+ [2, 10.75, 16, 9]
986
+ ];
987
+ const NtdCashStack = /* @__PURE__ */ createIcon.createIcon({
988
+ displayName: "NtdCashStack",
989
+ paths: {
990
+ // the wireframe re-draws this as lines: there the notes behind hide behind those in front
991
+ solid: ({ primaryColor, accentColor, strokeWidth, uid, variant }) => variant === "wireframe" ? notesLines(CASH_STACK, primaryColor, 1, uid) : notesFilled(
992
+ CASH_STACK,
993
+ [primaryColor, primaryColor, primaryColor],
994
+ accentColor,
995
+ accentColor,
996
+ strokeWidth
997
+ ),
998
+ outline: ({ primaryColor, strokeWidth, uid }) => notesLines(CASH_STACK, primaryColor, strokeWidth, uid),
999
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => notesFilled(
1000
+ CASH_STACK,
1001
+ [primaryColor, secondaryColor, primaryColor],
1002
+ void 0,
1003
+ secondaryColor,
1004
+ strokeWidth
1005
+ ),
1006
+ vivid: ({ primaryColor, secondaryColor, accentColor, strokeWidth }) => notesFilled(
1007
+ CASH_STACK,
1008
+ [primaryColor, secondaryColor, primaryColor],
1009
+ accentColor,
1010
+ secondaryColor,
1011
+ strokeWidth
1012
+ )
1013
+ }
1014
+ });
871
1015
  const NtdKanban = /* @__PURE__ */ createIcon.createIcon({
872
1016
  displayName: "NtdKanban",
873
1017
  paths: {
@@ -991,6 +1135,8 @@ exports.NtdBank = NtdBank;
991
1135
  exports.NtdBarcode = NtdBarcode;
992
1136
  exports.NtdBriefcase = NtdBriefcase;
993
1137
  exports.NtdCalculator = NtdCalculator;
1138
+ exports.NtdCash = NtdCash;
1139
+ exports.NtdCashStack = NtdCashStack;
994
1140
  exports.NtdClipboardCheck = NtdClipboardCheck;
995
1141
  exports.NtdCoins = NtdCoins;
996
1142
  exports.NtdDollar = NtdDollar;
@@ -259,69 +259,60 @@ const NtdGitMerge = /* @__PURE__ */ createIcon.createIcon({
259
259
  ] })
260
260
  }
261
261
  });
262
- const NtdBattery = /* @__PURE__ */ createIcon.createIcon({
263
- displayName: "NtdBattery",
264
- perfectStackX: 10,
265
- perfectStackY: 12,
266
- perfectStackSize: 0.4,
267
- paths: {
268
- solid: ({ primaryColor, secondaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
269
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "1", y: "6", width: "18", height: "12", rx: "2", fill: primaryColor }),
270
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "23", y1: "10", x2: "23", y2: "14", stroke: primaryColor, strokeWidth }),
271
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "4", y: "9", width: "8", height: "6", rx: "1", fill: secondaryColor, opacity: 0.4 })
272
- ] }),
273
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
274
- /* @__PURE__ */ jsxRuntime.jsx(
275
- "rect",
276
- {
277
- x: "1",
278
- y: "6",
279
- width: "18",
280
- height: "12",
281
- rx: "2",
282
- stroke: primaryColor,
283
- strokeWidth,
284
- fill: "none"
285
- }
286
- ),
287
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "23", y1: "10", x2: "23", y2: "14", stroke: primaryColor, strokeWidth })
288
- ] }),
289
- duotone: iconParts.swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
290
- /* @__PURE__ */ jsxRuntime.jsx(
291
- "rect",
292
- {
293
- x: "1",
294
- y: "6",
295
- width: "18",
296
- height: "12",
297
- rx: "2",
298
- fill: secondaryColor,
299
- opacity: secondaryOpacity
300
- }
301
- ),
302
- /* @__PURE__ */ jsxRuntime.jsx(
303
- "rect",
304
- {
305
- x: "1",
306
- y: "6",
307
- width: "18",
308
- height: "12",
309
- rx: "2",
310
- stroke: primaryColor,
311
- strokeWidth,
312
- fill: "none"
313
- }
314
- ),
315
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "23", y1: "10", x2: "23", y2: "14", stroke: primaryColor, strokeWidth })
316
- ] })),
317
- vivid: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
318
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "1", y: "6", width: "18", height: "12", rx: "2", fill: primaryColor }),
319
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "1", y: "6", width: "18", height: "12", rx: "2", fill: "white", opacity: "0.08" }),
320
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "4", y: "9", width: "8", height: "6", rx: "1", fill: secondaryColor }),
321
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "23", y1: "10", x2: "23", y2: "14", stroke: "white", strokeWidth: "1" })
322
- ] })
323
- }
324
- });
262
+ const BATTERY_BODY = { x: 1.5, y: 6.5, width: 18.5, height: 11, rx: 2 };
263
+ const BATTERY_TERMINAL = "M19.5 9.5h2a1 1 0 011 1v3a1 1 0 01-1 1h-2z";
264
+ const BATTERY_TERMINAL_LINE = "M20 9.5h1.5a1 1 0 011 1v3a1 1 0 01-1 1H20";
265
+ const BATTERY_BLOCKS = [3.5, 7.35, 11.2, 15.05];
266
+ function batteryBlocks(count, fill) {
267
+ return BATTERY_BLOCKS.slice(0, count).map((x) => /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: "8.5", width: "2.95", height: "7", fill }, x));
268
+ }
269
+ function batteryIcon(displayName, count) {
270
+ const filled = (body, blocks) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
271
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...BATTERY_BODY, fill: body }),
272
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: BATTERY_TERMINAL, fill: body }),
273
+ batteryBlocks(count, blocks)
274
+ ] });
275
+ return createIcon.createIcon({
276
+ displayName,
277
+ perfectStackX: 10.75,
278
+ perfectStackY: 12,
279
+ perfectStackSize: 0.4,
280
+ paths: {
281
+ solid: ({ primaryColor, accentColor }) => filled(primaryColor, accentColor),
282
+ outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
283
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...BATTERY_BODY, stroke: primaryColor, strokeWidth, fill: "none" }),
284
+ /* @__PURE__ */ jsxRuntime.jsx(
285
+ "path",
286
+ {
287
+ d: BATTERY_TERMINAL_LINE,
288
+ stroke: primaryColor,
289
+ strokeWidth,
290
+ fill: "none"
291
+ }
292
+ ),
293
+ batteryBlocks(count, primaryColor)
294
+ ] }),
295
+ duotone: ({ primaryColor, secondaryColor }) => filled(primaryColor, secondaryColor),
296
+ vivid: ({ primaryColor, secondaryColor }) => filled(primaryColor, secondaryColor)
297
+ }
298
+ });
299
+ }
300
+ const NtdBattery = /* @__PURE__ */ batteryIcon("NtdBattery", 0);
301
+ const NtdBatteryQuarter = /* @__PURE__ */ batteryIcon("NtdBatteryQuarter", 1);
302
+ const NtdBatteryHalf = /* @__PURE__ */ batteryIcon("NtdBatteryHalf", 2);
303
+ const NtdBatteryThreeQuarters = /* @__PURE__ */ batteryIcon("NtdBatteryThreeQuarters", 3);
304
+ const NtdBatteryFull = /* @__PURE__ */ batteryIcon("NtdBatteryFull", 4);
305
+ const BATTERY_STEPS = [
306
+ NtdBattery,
307
+ NtdBatteryQuarter,
308
+ NtdBatteryHalf,
309
+ NtdBatteryThreeQuarters,
310
+ NtdBatteryFull
311
+ ];
312
+ function batteryIconFor(level) {
313
+ const clamped = Number.isNaN(level) ? 0 : Math.min(1, Math.max(0, level));
314
+ return BATTERY_STEPS[Math.round(clamped * 4)];
315
+ }
325
316
  const NtdSlash = /* @__PURE__ */ createIcon.createIcon({
326
317
  displayName: "NtdSlash",
327
318
  paths: {
@@ -1719,6 +1710,10 @@ const NtdSolidJsLogo = /* @__PURE__ */ createIcon.createIcon({
1719
1710
  exports.NtdAIBrain = NtdAIBrain;
1720
1711
  exports.NtdAstroLogo = NtdAstroLogo;
1721
1712
  exports.NtdBattery = NtdBattery;
1713
+ exports.NtdBatteryFull = NtdBatteryFull;
1714
+ exports.NtdBatteryHalf = NtdBatteryHalf;
1715
+ exports.NtdBatteryQuarter = NtdBatteryQuarter;
1716
+ exports.NtdBatteryThreeQuarters = NtdBatteryThreeQuarters;
1722
1717
  exports.NtdBlueprint = NtdBlueprint;
1723
1718
  exports.NtdBrackets = NtdBrackets;
1724
1719
  exports.NtdBugDev = NtdBugDev;
@@ -1747,3 +1742,4 @@ exports.NtdSolidJsLogo = NtdSolidJsLogo;
1747
1742
  exports.NtdSvelteLogo = NtdSvelteLogo;
1748
1743
  exports.NtdTauriLogo = NtdTauriLogo;
1749
1744
  exports.NtdViteLogo = NtdViteLogo;
1745
+ exports.batteryIconFor = batteryIconFor;