@nice2dev/icons 1.3.18 → 1.4.1

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
@@ -99,14 +99,23 @@ const NtdDollar = /* @__PURE__ */ createIcon({
99
99
  }
100
100
  });
101
101
  const WALLET_BODY = { x: 2, y: 6.5, width: 20, height: 14.5, rx: 2.5 };
102
- const WALLET_BACK = "M4.5 8L16 3.5a1 1 0 011.3.95V8z";
102
+ const WALLET_BACK = "M4.5 8V5.6L19 4.2a1 1 0 011.1 1V8z";
103
+ const WALLET_BACK_LINE = "M4.5 6.5V5.6L19 4.2a1 1 0 011.1 1V6.5";
103
104
  const WALLET_POCKET = "M22 10.5h-4.5a2.5 2.5 0 000 5H22z";
104
105
  const WALLET_POCKET_LINE = "M22 10.5h-4.5a2.5 2.5 0 000 5H22";
105
106
  const NtdWallet = /* @__PURE__ */ createIcon({
106
107
  displayName: "NtdWallet",
107
108
  paths: {
109
+ // the back pocket is primary like the body: an accent gap (the body's edge, clipped to the pocket)
110
+ // parts the two
108
111
  solid: ({ primaryColor, accentColor, accentOpacity, uid }) => /* @__PURE__ */ jsxs(Fragment, { children: [
109
112
  /* @__PURE__ */ jsx("path", { d: WALLET_BACK, fill: primaryColor }),
113
+ within(
114
+ uid,
115
+ "back",
116
+ /* @__PURE__ */ jsx("path", { d: WALLET_BACK }),
117
+ /* @__PURE__ */ jsx("rect", { ...WALLET_BODY, stroke: accentColor, strokeWidth: 1.4, fill: "none" })
118
+ ),
110
119
  /* @__PURE__ */ jsx("rect", { ...WALLET_BODY, fill: primaryColor }),
111
120
  within(
112
121
  uid,
@@ -120,7 +129,7 @@ const NtdWallet = /* @__PURE__ */ createIcon({
120
129
  /* @__PURE__ */ jsx(
121
130
  "path",
122
131
  {
123
- d: "M4.5 6.5L16 3.5a1 1 0 011.3.95V6.5",
132
+ d: WALLET_BACK_LINE,
124
133
  stroke: primaryColor,
125
134
  strokeWidth,
126
135
  strokeLinejoin: "miter",
@@ -735,71 +744,78 @@ const NtdClipboardCheck = /* @__PURE__ */ createIcon({
735
744
  ] })
736
745
  }
737
746
  });
738
- const NtdPiggyBank = /* @__PURE__ */ createIcon({
739
- displayName: "NtdPiggyBank",
740
- paths: {
741
- solid: ({ primaryColor, secondaryColor, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
742
- /* @__PURE__ */ jsx("ellipse", { cx: "12", cy: "13", rx: "8", ry: "6", fill: primaryColor }),
743
- /* @__PURE__ */ jsx("circle", { cx: "9", cy: "11", r: "1", fill: secondaryColor }),
744
- /* @__PURE__ */ jsx(
745
- "path",
746
- {
747
- d: "M20 13c1 0 2 .5 2 2s-1 2-2 2",
748
- stroke: primaryColor,
749
- strokeWidth,
750
- fill: "none"
751
- }
752
- ),
753
- /* @__PURE__ */ jsx("path", { d: "M7 19l-1 3", stroke: primaryColor, strokeWidth }),
754
- /* @__PURE__ */ jsx("path", { d: "M17 19l1 3", stroke: primaryColor, strokeWidth }),
755
- /* @__PURE__ */ jsx(
756
- "path",
757
- {
758
- d: "M14 7c-1-1-2.5-1.5-4-1.5S7 6 6 7",
759
- stroke: primaryColor,
760
- strokeWidth,
761
- fill: "none"
762
- }
763
- ),
764
- /* @__PURE__ */ jsx("line", { x1: "10", y1: "5", x2: "10", y2: "3", stroke: primaryColor, strokeWidth })
765
- ] }),
766
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
767
- /* @__PURE__ */ jsx(
768
- "ellipse",
769
- {
770
- cx: "12",
771
- cy: "13",
772
- rx: "8",
773
- ry: "6",
774
- stroke: primaryColor,
775
- strokeWidth,
776
- fill: "none"
777
- }
747
+ const PIG_BODY = { cx: 11.5, cy: 13, rx: 7.5, ry: 6 };
748
+ 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";
749
+ const PIG_SNOUT = { x: 17.6, y: 10.6, width: 4.2, height: 5, rx: 2 };
750
+ 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";
751
+ const PIG_TAIL = "M4.3 12c-1.5-.8-3-.1-3 1.3s1.3 1.7 2 1.1";
752
+ const PIG_SLOT = "M9.3 8.9h3.4";
753
+ const PIG_COIN = { cx: 11, cy: 4.1, r: 2.2 };
754
+ const PIG_OUTSIDE = "M-1-1H25V25H-1ZM4 13a7.5 6 0 1 0 15 0a7.5 6 0 1 0-15 0Z";
755
+ 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";
756
+ function piggyFace(eye, width) {
757
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
758
+ /* @__PURE__ */ jsx("circle", { cx: "16.2", cy: "11", r: "0.85", fill: eye }),
759
+ /* @__PURE__ */ jsx("circle", { cx: "19", cy: "13.1", r: "0.55", fill: eye }),
760
+ /* @__PURE__ */ jsx("circle", { cx: "20.4", cy: "13.1", r: "0.55", fill: eye }),
761
+ /* @__PURE__ */ jsx("path", { d: PIG_SLOT, stroke: eye, strokeWidth: width })
762
+ ] });
763
+ }
764
+ function piggyFilled({ primaryColor, accentColor, strokeWidth }, parts) {
765
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
766
+ /* @__PURE__ */ jsx("path", { d: PIG_LEGS, fill: parts }),
767
+ /* @__PURE__ */ jsx("path", { d: PIG_EAR, fill: parts }),
768
+ /* @__PURE__ */ jsx("path", { d: PIG_TAIL, stroke: primaryColor, strokeWidth: strokeWidth * 1.5, fill: "none" }),
769
+ /* @__PURE__ */ jsx("ellipse", { ...PIG_BODY, fill: primaryColor }),
770
+ /* @__PURE__ */ jsx("rect", { ...PIG_SNOUT, fill: parts }),
771
+ piggyFace(accentColor, strokeWidth * 1.2),
772
+ /* @__PURE__ */ jsx("circle", { ...PIG_COIN, fill: parts }),
773
+ /* @__PURE__ */ jsx(
774
+ "circle",
775
+ {
776
+ cx: PIG_COIN.cx,
777
+ cy: PIG_COIN.cy,
778
+ r: PIG_COIN.r - 0.8,
779
+ stroke: accentColor,
780
+ strokeWidth: strokeWidth * 0.6,
781
+ fill: "none"
782
+ }
783
+ )
784
+ ] });
785
+ }
786
+ function piggyLines(color, width, uid) {
787
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
788
+ /* @__PURE__ */ jsxs("g", { stroke: color, strokeWidth: width, fill: "none", children: [
789
+ within(
790
+ uid,
791
+ "parts",
792
+ /* @__PURE__ */ jsx("path", { d: PIG_OUTSIDE, clipRule: "evenodd" }),
793
+ /* @__PURE__ */ jsxs(Fragment, { children: [
794
+ /* @__PURE__ */ jsx("path", { d: PIG_LEGS }),
795
+ /* @__PURE__ */ jsx("path", { d: PIG_EAR })
796
+ ] })
778
797
  ),
779
- /* @__PURE__ */ jsx("circle", { cx: "9", cy: "11", r: "1", fill: primaryColor }),
780
- /* @__PURE__ */ jsx(
781
- "path",
782
- {
783
- d: "M20 13c1 0 2 .5 2 2s-1 2-2 2",
784
- stroke: primaryColor,
785
- strokeWidth,
786
- fill: "none"
787
- }
798
+ within(
799
+ uid,
800
+ "body",
801
+ /* @__PURE__ */ jsx("path", { d: PIG_OUTSIDE_SNOUT, clipRule: "evenodd" }),
802
+ /* @__PURE__ */ jsx("ellipse", { ...PIG_BODY })
788
803
  ),
789
- /* @__PURE__ */ jsx("path", { d: "M7 19l-1 3", stroke: primaryColor, strokeWidth }),
790
- /* @__PURE__ */ jsx("path", { d: "M17 19l1 3", stroke: primaryColor, strokeWidth }),
791
- /* @__PURE__ */ jsx("line", { x1: "10", y1: "7", x2: "10", y2: "4", stroke: primaryColor, strokeWidth })
804
+ /* @__PURE__ */ jsx("rect", { ...PIG_SNOUT }),
805
+ /* @__PURE__ */ jsx("path", { d: PIG_TAIL }),
806
+ /* @__PURE__ */ jsx("circle", { ...PIG_COIN })
792
807
  ] }),
793
- vivid: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxs(Fragment, { children: [
794
- /* @__PURE__ */ jsx("ellipse", { cx: "12", cy: "13", rx: "8", ry: "6", fill: primaryColor }),
795
- /* @__PURE__ */ jsx("ellipse", { cx: "12", cy: "13", rx: "8", ry: "6", fill: "white", opacity: "0.08" }),
796
- /* @__PURE__ */ jsx("circle", { cx: "9", cy: "11", r: "1", fill: secondaryColor }),
797
- /* @__PURE__ */ jsx("path", { d: "M20 13c1 0 2 .5 2 2s-1 2-2 2", stroke: "white", strokeWidth: "1", fill: "none" }),
798
- /* @__PURE__ */ jsx("path", { d: "M7 19l-1 3", stroke: "white", strokeWidth: "1" }),
799
- /* @__PURE__ */ jsx("path", { d: "M17 19l1 3", stroke: "white", strokeWidth: "1" }),
800
- /* @__PURE__ */ jsx("path", { d: "M14 7c-1-1-2.5-1.5-4-1.5S7 6 6 7", stroke: "white", strokeWidth: "1", fill: "none" }),
801
- /* @__PURE__ */ jsx("line", { x1: "10", y1: "5", x2: "10", y2: "3", stroke: "white", strokeWidth: "1" })
802
- ] })
808
+ piggyFace(color, width)
809
+ ] });
810
+ }
811
+ const NtdPiggyBank = /* @__PURE__ */ createIcon({
812
+ displayName: "NtdPiggyBank",
813
+ paths: {
814
+ // the wireframe re-draws this as lines: there the parts must not cross the body
815
+ solid: (props) => props.variant === "wireframe" ? piggyLines(props.primaryColor, 1, props.uid) : piggyFilled(props, props.primaryColor),
816
+ outline: ({ primaryColor, strokeWidth, uid }) => piggyLines(primaryColor, strokeWidth, uid),
817
+ duotone: (props) => piggyFilled(props, props.secondaryColor),
818
+ vivid: (props) => piggyFilled(props, props.secondaryColor)
803
819
  }
804
820
  });
805
821
  const COIN_FRONT = { cx: 9.2, cy: 15, r: 6.5 };
@@ -866,6 +882,134 @@ const NtdCoins = /* @__PURE__ */ createIcon({
866
882
  vivid: ({ primaryColor, secondaryColor, accentColor, strokeWidth }) => coins(secondaryColor, primaryColor, accentColor, strokeWidth)
867
883
  }
868
884
  });
885
+ const NOTE_RX = 1.2;
886
+ const NOTE_GAP = 0.8;
887
+ function noteRect([x, y, w, h], grow = 0) {
888
+ return `M${x - grow} ${y - grow}h${w + 2 * grow}v${h + 2 * grow}h${-w - 2 * grow}Z`;
889
+ }
890
+ function noteDetails([x, y, w, h], color, width, discFilled) {
891
+ const r = h * 0.24;
892
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
893
+ /* @__PURE__ */ jsx(
894
+ "rect",
895
+ {
896
+ x: x + 1.3,
897
+ y: y + 1.3,
898
+ width: w - 2.6,
899
+ height: h - 2.6,
900
+ rx: "0.5",
901
+ stroke: color,
902
+ strokeWidth: width * 0.5,
903
+ fill: "none"
904
+ }
905
+ ),
906
+ discFilled ? /* @__PURE__ */ jsx("circle", { cx: x + w / 2, cy: y + h / 2, r, fill: color }) : /* @__PURE__ */ jsx(
907
+ "circle",
908
+ {
909
+ cx: x + w / 2,
910
+ cy: y + h / 2,
911
+ r,
912
+ stroke: color,
913
+ strokeWidth: width,
914
+ fill: "none"
915
+ }
916
+ )
917
+ ] });
918
+ }
919
+ function notesFilled(notes, fills, rim, details, width) {
920
+ const front = notes[notes.length - 1];
921
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
922
+ notes.map((n, i) => {
923
+ const [x, y, w, h] = n;
924
+ return /* @__PURE__ */ jsxs("g", { children: [
925
+ rim && i > 0 && /* @__PURE__ */ jsx(
926
+ "rect",
927
+ {
928
+ x,
929
+ y,
930
+ width: w,
931
+ height: h,
932
+ rx: NOTE_RX,
933
+ stroke: rim,
934
+ strokeWidth: NOTE_GAP * 2,
935
+ fill: "none"
936
+ }
937
+ ),
938
+ /* @__PURE__ */ jsx("rect", { x, y, width: w, height: h, rx: NOTE_RX, fill: fills[i] })
939
+ ] }, i);
940
+ }),
941
+ noteDetails(front, details, width, true)
942
+ ] });
943
+ }
944
+ function notesLines(notes, color, width, uid) {
945
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
946
+ /* @__PURE__ */ jsx("g", { stroke: color, strokeWidth: width, fill: "none", children: notes.map((n, i) => {
947
+ const [x, y, w, h] = n;
948
+ const line = /* @__PURE__ */ jsx(
949
+ "rect",
950
+ {
951
+ x: x + width / 2,
952
+ y: y + width / 2,
953
+ width: w - width,
954
+ height: h - width,
955
+ rx: NOTE_RX
956
+ }
957
+ );
958
+ const next = notes[i + 1];
959
+ return next ? /* @__PURE__ */ jsx("g", { children: within(
960
+ uid,
961
+ `note${i}`,
962
+ /* @__PURE__ */ jsx("path", { d: `M-1-1H25V25H-1Z${noteRect(next, NOTE_GAP)}`, clipRule: "evenodd" }),
963
+ line
964
+ ) }, i) : /* @__PURE__ */ jsx("g", { children: line }, i);
965
+ }) }),
966
+ noteDetails(notes[notes.length - 1], color, width, false)
967
+ ] });
968
+ }
969
+ const CASH_NOTE = [3, 6.75, 18, 10.5];
970
+ const CASH_TURN = "rotate(-20 12 12)";
971
+ const NtdCash = /* @__PURE__ */ createIcon({
972
+ displayName: "NtdCash",
973
+ paths: {
974
+ solid: ({ primaryColor, accentColor, strokeWidth }) => /* @__PURE__ */ jsx("g", { transform: CASH_TURN, children: notesFilled([CASH_NOTE], [primaryColor], void 0, accentColor, strokeWidth) }),
975
+ outline: ({ primaryColor, strokeWidth, uid }) => /* @__PURE__ */ jsx("g", { transform: CASH_TURN, children: notesLines([CASH_NOTE], primaryColor, strokeWidth, uid) }),
976
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => /* @__PURE__ */ jsx("g", { transform: CASH_TURN, children: notesFilled([CASH_NOTE], [primaryColor], void 0, secondaryColor, strokeWidth) }),
977
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => /* @__PURE__ */ jsx("g", { transform: CASH_TURN, children: notesFilled([CASH_NOTE], [primaryColor], void 0, secondaryColor, strokeWidth) })
978
+ }
979
+ });
980
+ const CASH_STACK = [
981
+ [6, 4.25, 16, 9],
982
+ [4, 7.5, 16, 9],
983
+ [2, 10.75, 16, 9]
984
+ ];
985
+ const NtdCashStack = /* @__PURE__ */ createIcon({
986
+ displayName: "NtdCashStack",
987
+ paths: {
988
+ // the wireframe re-draws this as lines: there the notes behind hide behind those in front
989
+ solid: ({ primaryColor, accentColor, strokeWidth, uid, variant }) => variant === "wireframe" ? notesLines(CASH_STACK, primaryColor, 1, uid) : notesFilled(
990
+ CASH_STACK,
991
+ [primaryColor, primaryColor, primaryColor],
992
+ accentColor,
993
+ accentColor,
994
+ strokeWidth
995
+ ),
996
+ outline: ({ primaryColor, strokeWidth, uid }) => notesLines(CASH_STACK, primaryColor, strokeWidth, uid),
997
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => notesFilled(
998
+ CASH_STACK,
999
+ [primaryColor, secondaryColor, primaryColor],
1000
+ void 0,
1001
+ secondaryColor,
1002
+ strokeWidth
1003
+ ),
1004
+ vivid: ({ primaryColor, secondaryColor, accentColor, strokeWidth }) => notesFilled(
1005
+ CASH_STACK,
1006
+ [primaryColor, secondaryColor, primaryColor],
1007
+ accentColor,
1008
+ secondaryColor,
1009
+ strokeWidth
1010
+ )
1011
+ }
1012
+ });
869
1013
  const NtdKanban = /* @__PURE__ */ createIcon({
870
1014
  displayName: "NtdKanban",
871
1015
  paths: {
@@ -990,6 +1134,8 @@ export {
990
1134
  NtdBarcode,
991
1135
  NtdBriefcase,
992
1136
  NtdCalculator,
1137
+ NtdCash,
1138
+ NtdCashStack,
993
1139
  NtdClipboardCheck,
994
1140
  NtdCoins,
995
1141
  NtdDollar,
@@ -257,69 +257,60 @@ const NtdGitMerge = /* @__PURE__ */ createIcon({
257
257
  ] })
258
258
  }
259
259
  });
260
- const NtdBattery = /* @__PURE__ */ createIcon({
261
- displayName: "NtdBattery",
262
- perfectStackX: 10,
263
- perfectStackY: 12,
264
- perfectStackSize: 0.4,
265
- paths: {
266
- solid: ({ primaryColor, secondaryColor, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
267
- /* @__PURE__ */ jsx("rect", { x: "1", y: "6", width: "18", height: "12", rx: "2", fill: primaryColor }),
268
- /* @__PURE__ */ jsx("line", { x1: "23", y1: "10", x2: "23", y2: "14", stroke: primaryColor, strokeWidth }),
269
- /* @__PURE__ */ jsx("rect", { x: "4", y: "9", width: "8", height: "6", rx: "1", fill: secondaryColor, opacity: 0.4 })
270
- ] }),
271
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
272
- /* @__PURE__ */ jsx(
273
- "rect",
274
- {
275
- x: "1",
276
- y: "6",
277
- width: "18",
278
- height: "12",
279
- rx: "2",
280
- stroke: primaryColor,
281
- strokeWidth,
282
- fill: "none"
283
- }
284
- ),
285
- /* @__PURE__ */ jsx("line", { x1: "23", y1: "10", x2: "23", y2: "14", stroke: primaryColor, strokeWidth })
286
- ] }),
287
- duotone: swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
288
- /* @__PURE__ */ jsx(
289
- "rect",
290
- {
291
- x: "1",
292
- y: "6",
293
- width: "18",
294
- height: "12",
295
- rx: "2",
296
- fill: secondaryColor,
297
- opacity: secondaryOpacity
298
- }
299
- ),
300
- /* @__PURE__ */ jsx(
301
- "rect",
302
- {
303
- x: "1",
304
- y: "6",
305
- width: "18",
306
- height: "12",
307
- rx: "2",
308
- stroke: primaryColor,
309
- strokeWidth,
310
- fill: "none"
311
- }
312
- ),
313
- /* @__PURE__ */ jsx("line", { x1: "23", y1: "10", x2: "23", y2: "14", stroke: primaryColor, strokeWidth })
314
- ] })),
315
- vivid: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxs(Fragment, { children: [
316
- /* @__PURE__ */ jsx("rect", { x: "1", y: "6", width: "18", height: "12", rx: "2", fill: primaryColor }),
317
- /* @__PURE__ */ jsx("rect", { x: "1", y: "6", width: "18", height: "12", rx: "2", fill: "white", opacity: "0.08" }),
318
- /* @__PURE__ */ jsx("rect", { x: "4", y: "9", width: "8", height: "6", rx: "1", fill: secondaryColor }),
319
- /* @__PURE__ */ jsx("line", { x1: "23", y1: "10", x2: "23", y2: "14", stroke: "white", strokeWidth: "1" })
320
- ] })
321
- }
322
- });
260
+ const BATTERY_BODY = { x: 1.5, y: 6.5, width: 18.5, height: 11, rx: 2 };
261
+ const BATTERY_TERMINAL = "M19.5 9.5h2a1 1 0 011 1v3a1 1 0 01-1 1h-2z";
262
+ const BATTERY_TERMINAL_LINE = "M20 9.5h1.5a1 1 0 011 1v3a1 1 0 01-1 1H20";
263
+ const BATTERY_BLOCKS = [3.5, 7.35, 11.2, 15.05];
264
+ function batteryBlocks(count, fill) {
265
+ return BATTERY_BLOCKS.slice(0, count).map((x) => /* @__PURE__ */ jsx("rect", { x, y: "8.5", width: "2.95", height: "7", fill }, x));
266
+ }
267
+ function batteryIcon(displayName, count) {
268
+ const filled = (body, blocks) => /* @__PURE__ */ jsxs(Fragment, { children: [
269
+ /* @__PURE__ */ jsx("rect", { ...BATTERY_BODY, fill: body }),
270
+ /* @__PURE__ */ jsx("path", { d: BATTERY_TERMINAL, fill: body }),
271
+ batteryBlocks(count, blocks)
272
+ ] });
273
+ return createIcon({
274
+ displayName,
275
+ perfectStackX: 10.75,
276
+ perfectStackY: 12,
277
+ perfectStackSize: 0.4,
278
+ paths: {
279
+ solid: ({ primaryColor, accentColor }) => filled(primaryColor, accentColor),
280
+ outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
281
+ /* @__PURE__ */ jsx("rect", { ...BATTERY_BODY, stroke: primaryColor, strokeWidth, fill: "none" }),
282
+ /* @__PURE__ */ jsx(
283
+ "path",
284
+ {
285
+ d: BATTERY_TERMINAL_LINE,
286
+ stroke: primaryColor,
287
+ strokeWidth,
288
+ fill: "none"
289
+ }
290
+ ),
291
+ batteryBlocks(count, primaryColor)
292
+ ] }),
293
+ duotone: ({ primaryColor, secondaryColor }) => filled(primaryColor, secondaryColor),
294
+ vivid: ({ primaryColor, secondaryColor }) => filled(primaryColor, secondaryColor)
295
+ }
296
+ });
297
+ }
298
+ const NtdBattery = /* @__PURE__ */ batteryIcon("NtdBattery", 0);
299
+ const NtdBatteryQuarter = /* @__PURE__ */ batteryIcon("NtdBatteryQuarter", 1);
300
+ const NtdBatteryHalf = /* @__PURE__ */ batteryIcon("NtdBatteryHalf", 2);
301
+ const NtdBatteryThreeQuarters = /* @__PURE__ */ batteryIcon("NtdBatteryThreeQuarters", 3);
302
+ const NtdBatteryFull = /* @__PURE__ */ batteryIcon("NtdBatteryFull", 4);
303
+ const BATTERY_STEPS = [
304
+ NtdBattery,
305
+ NtdBatteryQuarter,
306
+ NtdBatteryHalf,
307
+ NtdBatteryThreeQuarters,
308
+ NtdBatteryFull
309
+ ];
310
+ function batteryIconFor(level) {
311
+ const clamped = Number.isNaN(level) ? 0 : Math.min(1, Math.max(0, level));
312
+ return BATTERY_STEPS[Math.round(clamped * 4)];
313
+ }
323
314
  const NtdSlash = /* @__PURE__ */ createIcon({
324
315
  displayName: "NtdSlash",
325
316
  paths: {
@@ -1718,6 +1709,10 @@ export {
1718
1709
  NtdAIBrain,
1719
1710
  NtdAstroLogo,
1720
1711
  NtdBattery,
1712
+ NtdBatteryFull,
1713
+ NtdBatteryHalf,
1714
+ NtdBatteryQuarter,
1715
+ NtdBatteryThreeQuarters,
1721
1716
  NtdBlueprint,
1722
1717
  NtdBrackets,
1723
1718
  NtdBugDev,
@@ -1745,5 +1740,6 @@ export {
1745
1740
  NtdSolidJsLogo,
1746
1741
  NtdSvelteLogo,
1747
1742
  NtdTauriLogo,
1748
- NtdViteLogo
1743
+ NtdViteLogo,
1744
+ batteryIconFor
1749
1745
  };
@@ -1,6 +1,5 @@
1
1
  import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
2
  import { createIcon } from "../createIcon.js";
3
- import { swapDuotone } from "../iconParts.js";
4
3
  const NtdCartAdd = /* @__PURE__ */ createIcon({
5
4
  displayName: "NtdCartAdd",
6
5
  paths: {
@@ -246,66 +245,6 @@ const NtdCheckout = /* @__PURE__ */ createIcon({
246
245
  ] })
247
246
  }
248
247
  });
249
- const NtdWishlist = /* @__PURE__ */ createIcon({
250
- displayName: "NtdWishlist",
251
- perfectStackX: 12,
252
- perfectStackY: 11.5,
253
- perfectStackSize: 0.45,
254
- paths: {
255
- solid: ({ primaryColor }) => /* @__PURE__ */ jsx(
256
- "path",
257
- {
258
- d: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z",
259
- fill: primaryColor
260
- }
261
- ),
262
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsx(
263
- "path",
264
- {
265
- d: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z",
266
- stroke: primaryColor,
267
- strokeWidth,
268
- fill: "none"
269
- }
270
- ),
271
- duotone: swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => /* @__PURE__ */ jsxs(Fragment, { children: [
272
- /* @__PURE__ */ jsx(
273
- "path",
274
- {
275
- d: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z",
276
- fill: secondaryColor,
277
- opacity: secondaryOpacity
278
- }
279
- ),
280
- /* @__PURE__ */ jsx(
281
- "path",
282
- {
283
- d: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z",
284
- stroke: primaryColor,
285
- strokeWidth,
286
- fill: "none"
287
- }
288
- )
289
- ] })),
290
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => /* @__PURE__ */ jsxs(Fragment, { children: [
291
- /* @__PURE__ */ jsx(
292
- "path",
293
- {
294
- d: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z",
295
- fill: primaryColor
296
- }
297
- ),
298
- /* @__PURE__ */ jsx(
299
- "path",
300
- {
301
- d: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z",
302
- fill: "white",
303
- opacity: "0.1"
304
- }
305
- )
306
- ] })
307
- }
308
- });
309
248
  const NtdCompare = /* @__PURE__ */ createIcon({
310
249
  displayName: "NtdCompare",
311
250
  paths: {
@@ -841,6 +780,5 @@ export {
841
780
  NtdRefund,
842
781
  NtdReturn,
843
782
  NtdShipping,
844
- NtdStorefront,
845
- NtdWishlist
783
+ NtdStorefront
846
784
  };