@nice2dev/icons 1.4.2 → 1.4.4

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
@@ -987,10 +987,11 @@ const NtdPalette = /* @__PURE__ */ createIcon.createIcon({
987
987
  ] })
988
988
  }
989
989
  });
990
- const BRUSH_HANDLE = "M19.35 2.81A1.3 1.3 0 0 1 21.19 4.65L13.91 12.49L11.51 10.09Z";
991
- const BRUSH_FERRULE = "M11.08 9.67L14.33 12.92L11.36 15.89L8.11 12.64Z";
992
- const BRUSH_BRISTLES = "M8.11 12.64L11.36 15.89C9.95 18.43 7.76 20.49 2.81 21.19C3.51 16.24 5.57 14.05 8.11 12.64Z";
993
- const BRUSH_CUTS = "M10.37 8.96L15.04 13.63M7.4 11.93L12.07 16.6";
990
+ const BRUSH_TURN = "rotate(45 12 12)";
991
+ const BRUSH_HANDLE = "M11 0.6A1 1 0 0 1 13 0.6L13.3 10.4H10.7Z";
992
+ const BRUSH_FERRULE = "M10.7 10.4H13.3L14.1 13.2H9.9Z";
993
+ const BRUSH_BRISTLES = "M9.9 13.2H14.1C14.8 15.4 15.2 18.4 12 24.2C8.8 18.4 9.2 15.4 9.9 13.2Z";
994
+ const BRUSH_CUTS = "M8 10.4H16M8 13.2H16";
994
995
  function brushFilled(handle, ferrule, bristles, ferruleOpacity = 1) {
995
996
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
996
997
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: BRUSH_HANDLE, fill: handle }),
@@ -1001,26 +1002,36 @@ function brushFilled(handle, ferrule, bristles, ferruleOpacity = 1) {
1001
1002
  const NtdBrush = /* @__PURE__ */ createIcon.createIcon({
1002
1003
  displayName: "NtdBrush",
1003
1004
  paths: {
1004
- solid: ({ primaryColor, accentColor, accentOpacity, uid }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1005
+ solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth, uid }) => /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: BRUSH_TURN, children: [
1005
1006
  brushFilled(primaryColor, primaryColor, primaryColor),
1006
1007
  iconParts.within(
1007
1008
  uid,
1008
1009
  "brush",
1009
1010
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: `${BRUSH_HANDLE}${BRUSH_FERRULE}${BRUSH_BRISTLES}` }),
1010
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: BRUSH_CUTS, stroke: accentColor, strokeWidth: "1", opacity: accentOpacity })
1011
+ /* @__PURE__ */ jsxRuntime.jsx(
1012
+ "path",
1013
+ {
1014
+ d: BRUSH_CUTS,
1015
+ stroke: accentColor,
1016
+ strokeWidth: strokeWidth * 0.8,
1017
+ opacity: accentOpacity
1018
+ }
1019
+ )
1011
1020
  )
1012
1021
  ] }),
1013
1022
  outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsx(
1014
1023
  "path",
1015
1024
  {
1016
1025
  d: `${BRUSH_HANDLE}${BRUSH_FERRULE}${BRUSH_BRISTLES}`,
1026
+ transform: BRUSH_TURN,
1017
1027
  stroke: primaryColor,
1018
1028
  strokeWidth,
1029
+ strokeLinejoin: "round",
1019
1030
  fill: "none"
1020
1031
  }
1021
1032
  ),
1022
- duotone: ({ primaryColor, secondaryColor }) => brushFilled(primaryColor, primaryColor, secondaryColor),
1023
- vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => brushFilled(primaryColor, accentColor, secondaryColor, accentOpacity)
1033
+ duotone: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxRuntime.jsx("g", { transform: BRUSH_TURN, children: brushFilled(primaryColor, primaryColor, secondaryColor) }),
1034
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => /* @__PURE__ */ jsxRuntime.jsx("g", { transform: BRUSH_TURN, children: brushFilled(primaryColor, accentColor, secondaryColor, accentOpacity) })
1024
1035
  }
1025
1036
  });
1026
1037
  const NtdPenTool = /* @__PURE__ */ createIcon.createIcon({
@@ -1120,10 +1131,58 @@ const NtdSpline = /* @__PURE__ */ createIcon.createIcon({
1120
1131
  ) })
1121
1132
  }
1122
1133
  });
1134
+ const DROPPER_BULB = "M9 7V5a3 3 0 016 0v2z";
1135
+ const DROPPER_COLLAR = { x: 7.5, y: 7, width: 9, height: 2, rx: 0.5 };
1136
+ const DROPPER_TUBE = { x: 10, y: 9, width: 4, height: 8.5 };
1137
+ const DROPPER_TIP = "M10 17.5h4l-1.25 3.5h-1.5z";
1138
+ const DROPPER_LIQUID = { x: 10.9, y: 12.6, width: 2.2, height: 4.9 };
1139
+ const DROPPER_DROP = "M5 19.2c.9 1.1 1.4 1.8 1.4 2.4a1.4 1.4 0 01-2.8 0c0-.6.5-1.3 1.4-2.4z";
1140
+ const DROPPER_TURN = "rotate(45 12 12)";
1141
+ function dropperFilled(body, bulb, liquid, liquidOpacity) {
1142
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1143
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: DROPPER_TURN, children: [
1144
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: DROPPER_BULB, fill: bulb }),
1145
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...DROPPER_COLLAR, fill: body }),
1146
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...DROPPER_TUBE, fill: body }),
1147
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: DROPPER_TIP, fill: body }),
1148
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...DROPPER_LIQUID, fill: liquid, opacity: liquidOpacity })
1149
+ ] }),
1150
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: DROPPER_DROP, fill: body })
1151
+ ] });
1152
+ }
1153
+ const NtdEyeDropper = /* @__PURE__ */ createIcon.createIcon({
1154
+ displayName: "NtdEyeDropper",
1155
+ paths: {
1156
+ solid: ({ primaryColor, accentColor, accentOpacity }) => dropperFilled(primaryColor, primaryColor, accentColor, accentOpacity),
1157
+ outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1158
+ /* @__PURE__ */ jsxRuntime.jsxs(
1159
+ "g",
1160
+ {
1161
+ transform: DROPPER_TURN,
1162
+ stroke: primaryColor,
1163
+ strokeWidth,
1164
+ strokeLinejoin: "miter",
1165
+ fill: "none",
1166
+ children: [
1167
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: DROPPER_BULB }),
1168
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...DROPPER_COLLAR }),
1169
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...DROPPER_TUBE }),
1170
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: DROPPER_TIP }),
1171
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 13v3.5" })
1172
+ ]
1173
+ }
1174
+ ),
1175
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: DROPPER_DROP, stroke: primaryColor, strokeWidth, fill: "none" })
1176
+ ] }),
1177
+ duotone: ({ primaryColor, secondaryColor }) => dropperFilled(primaryColor, secondaryColor, secondaryColor, 1),
1178
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => dropperFilled(primaryColor, secondaryColor, accentColor, accentOpacity)
1179
+ }
1180
+ });
1123
1181
  exports.NtdBluetooth = NtdBluetooth;
1124
1182
  exports.NtdBrush = NtdBrush;
1125
1183
  exports.NtdCamera = NtdCamera;
1126
1184
  exports.NtdChat = NtdChat;
1185
+ exports.NtdEyeDropper = NtdEyeDropper;
1127
1186
  exports.NtdImage = NtdImage;
1128
1187
  exports.NtdInbox = NtdInbox;
1129
1188
  exports.NtdMail = NtdMail;
@@ -388,13 +388,13 @@ const NtdExternalLink = /* @__PURE__ */ createIcon.createIcon({
388
388
  }
389
389
  });
390
390
  const REFRESH_TOP = {
391
- tail: "M6.34 7.89A7 7 0 0 1 17.98 8.37",
392
- start: [6.34, 7.89],
391
+ tail: "M5.51 9.38A7 7 0 0 1 17.98 8.37",
392
+ start: [5.51, 9.38],
393
393
  head: "M14.59 8.46L17.89 12.9L21.77 8.96z"
394
394
  };
395
395
  const REFRESH_BOTTOM = {
396
- tail: "M17.66 16.11A7 7 0 0 1 6.02 15.63",
397
- start: [17.66, 16.11],
396
+ tail: "M18.49 14.62A7 7 0 0 1 6.02 15.63",
397
+ start: [18.49, 14.62],
398
398
  head: "M9.41 15.54L6.11 11.1L2.23 15.04z"
399
399
  };
400
400
  function refreshArrows(top, bottom, strokeWidth, roundTail = true) {
@@ -293,14 +293,22 @@ const NtdShipment = /* @__PURE__ */ createIcon.createIcon({
293
293
  });
294
294
  const FOOD_FORK = iconParts.CUTLERY_FORK;
295
295
  const FOOD_KNIFE = iconParts.CUTLERY_KNIFE;
296
- const FOOD_FORK_LINES = iconParts.CUTLERY_FORK_LINES;
296
+ const FOOD_PLATE = { cx: 12.25, cy: 12, r: 6.75 };
297
297
  function placeSetting(plate, cutlery, ringWidth, filled) {
298
298
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
299
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12.1", cy: "12", r: "6.6", stroke: plate, strokeWidth: ringWidth, fill: "none" }),
300
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12.1", cy: "12", r: "3.6", stroke: plate, strokeWidth: ringWidth, fill: "none" }),
301
- filled ? /* @__PURE__ */ jsxRuntime.jsx("path", { d: `${FOOD_FORK}${FOOD_KNIFE}`, fill: cutlery }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: cutlery, strokeWidth: ringWidth, fill: "none", children: [
302
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: FOOD_FORK_LINES }),
303
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: FOOD_KNIFE, strokeLinejoin: "miter" })
299
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { ...FOOD_PLATE, stroke: plate, strokeWidth: ringWidth, fill: "none" }),
300
+ filled ? /* @__PURE__ */ jsxRuntime.jsx("path", { d: `${FOOD_FORK}${FOOD_KNIFE}`, fill: cutlery }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
301
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: FOOD_FORK, fill: cutlery }),
302
+ /* @__PURE__ */ jsxRuntime.jsx(
303
+ "path",
304
+ {
305
+ d: FOOD_KNIFE,
306
+ stroke: cutlery,
307
+ strokeWidth: ringWidth,
308
+ strokeLinejoin: "miter",
309
+ fill: "none"
310
+ }
311
+ )
304
312
  ] })
305
313
  ] });
306
314
  }
@@ -61,12 +61,14 @@ const NtdHouse = /* @__PURE__ */ createIcon.createIcon({
61
61
  });
62
62
  const APARTMENT = { x: 4.5, y: 4, width: 15, height: 18, rx: 2 };
63
63
  const APARTMENT_WINDOWS = [
64
- { x: 7.25, y: 7 },
65
- { x: 13.75, y: 7 },
66
- { x: 7.25, y: 13 },
67
- { x: 13.75, y: 13 }
64
+ { x: 6.3, y: 7 },
65
+ { x: 10.6, y: 7 },
66
+ { x: 14.9, y: 7 },
67
+ { x: 6.3, y: 12.2 },
68
+ { x: 10.6, y: 12.2 },
69
+ { x: 14.9, y: 12.2 }
68
70
  ];
69
- const APARTMENT_DOOR = { x: 10.25, y: 18, width: 3.5, height: 4 };
71
+ const APARTMENT_DOOR = { x: 10.5, y: 18, width: 3, height: 4 };
70
72
  const APARTMENT_DOOR_SILL = { ...APARTMENT_DOOR, height: 3.25 };
71
73
  const NtdApartment = /* @__PURE__ */ createIcon.createIcon({
72
74
  displayName: "NtdApartment",
@@ -76,25 +78,25 @@ const NtdApartment = /* @__PURE__ */ createIcon.createIcon({
76
78
  solid: ({ primaryColor, accentColor, accentOpacity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
77
79
  /* @__PURE__ */ jsxRuntime.jsx("rect", { ...APARTMENT, fill: primaryColor }),
78
80
  /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: accentColor, opacity: accentOpacity, children: [
79
- APARTMENT_WINDOWS.map((w) => /* @__PURE__ */ jsxRuntime.jsx("rect", { ...w, width: "3", height: "3", rx: "0.5" }, `${w.x}-${w.y}`)),
81
+ APARTMENT_WINDOWS.map((w) => /* @__PURE__ */ jsxRuntime.jsx("rect", { ...w, width: "2.8", height: "3", rx: "0.5" }, `${w.x}-${w.y}`)),
80
82
  /* @__PURE__ */ jsxRuntime.jsx("rect", { ...APARTMENT_DOOR_SILL })
81
83
  ] })
82
84
  ] }),
83
85
  outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: primaryColor, strokeWidth, fill: "none", children: [
84
86
  /* @__PURE__ */ jsxRuntime.jsx("rect", { ...APARTMENT }),
85
- APARTMENT_WINDOWS.map((w) => /* @__PURE__ */ jsxRuntime.jsx("rect", { ...w, width: "3", height: "3", rx: "0.5" }, `${w.x}-${w.y}`)),
87
+ APARTMENT_WINDOWS.map((w) => /* @__PURE__ */ jsxRuntime.jsx("rect", { ...w, width: "2.8", height: "3", rx: "0.5" }, `${w.x}-${w.y}`)),
86
88
  /* @__PURE__ */ jsxRuntime.jsx("rect", { ...APARTMENT_DOOR })
87
89
  ] }),
88
90
  duotone: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
89
91
  /* @__PURE__ */ jsxRuntime.jsx("rect", { ...APARTMENT, fill: primaryColor }),
90
92
  /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: secondaryColor, children: [
91
- APARTMENT_WINDOWS.map((w) => /* @__PURE__ */ jsxRuntime.jsx("rect", { ...w, width: "3", height: "3", rx: "0.5" }, `${w.x}-${w.y}`)),
93
+ APARTMENT_WINDOWS.map((w) => /* @__PURE__ */ jsxRuntime.jsx("rect", { ...w, width: "2.8", height: "3", rx: "0.5" }, `${w.x}-${w.y}`)),
92
94
  /* @__PURE__ */ jsxRuntime.jsx("rect", { ...APARTMENT_DOOR })
93
95
  ] })
94
96
  ] }),
95
97
  vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
96
98
  /* @__PURE__ */ jsxRuntime.jsx("rect", { ...APARTMENT, fill: primaryColor }),
97
- /* @__PURE__ */ jsxRuntime.jsx("g", { fill: secondaryColor, children: APARTMENT_WINDOWS.map((w) => /* @__PURE__ */ jsxRuntime.jsx("rect", { ...w, width: "3", height: "3", rx: "0.5" }, `${w.x}-${w.y}`)) }),
99
+ /* @__PURE__ */ jsxRuntime.jsx("g", { fill: secondaryColor, children: APARTMENT_WINDOWS.map((w) => /* @__PURE__ */ jsxRuntime.jsx("rect", { ...w, width: "2.8", height: "3", rx: "0.5" }, `${w.x}-${w.y}`)) }),
98
100
  /* @__PURE__ */ jsxRuntime.jsx("rect", { ...APARTMENT_DOOR, fill: accentColor, opacity: accentOpacity })
99
101
  ] })
100
102
  }
@@ -421,107 +423,101 @@ const NtdOfficeBuilding = /* @__PURE__ */ createIcon.createIcon({
421
423
  ] })
422
424
  }
423
425
  });
424
- const WAREHOUSE = "M1.5 9.2L12 3.5L22.5 9.2V21H18.5V11H5.5V21H1.5Z";
425
- const WAREHOUSE_BOXES = [
426
- [6.6, 21, 5, 4.6],
427
- [12.4, 21, 5, 4.6],
428
- [9.5, 15.6, 5, 3.5]
426
+ const RACK_SLOTS = [
427
+ [0.9, 6, 4.2],
428
+ [7.8, 5.3, 3.4],
429
+ [0.9, 5.2, 3.6],
430
+ [6.9, 6.2, 4.2]
429
431
  ];
430
- function boxRects(boxes) {
431
- return boxes.map(([x, bottom, w, h]) => `M${x} ${bottom - h}h${w}v${h}h${-w}Z`).join("");
432
+ const round = (n) => Math.round(n * 1e3) / 1e3;
433
+ function rackGeometry(f, width, boxes) {
434
+ const heavy = width * 1.35;
435
+ const middle = (f.top + f.bottom) / 2;
436
+ const half = width / 2;
437
+ const lines = `M${f.left} ${f.top}V${f.floor}M${f.right} ${f.top}V${f.floor}M${f.left} ${middle}H${f.right}M${f.left} ${f.top}H${f.right}M${f.left} ${f.bottom}H${f.right}`;
438
+ const rect = (x, y, w, h) => `M${round(x)} ${round(y)}h${round(w)}v${round(h)}h${round(-w)}Z`;
439
+ const frame = [
440
+ rect(f.left - half, f.top - heavy / 2, width, f.floor - f.top + heavy / 2),
441
+ rect(f.right - half, f.top - heavy / 2, width, f.floor - f.top + heavy / 2),
442
+ rect(f.left - half, f.top - heavy / 2, f.right - f.left + width, heavy),
443
+ rect(f.left, middle - half, f.right - f.left, width),
444
+ rect(f.left, f.bottom - heavy / 2, f.right - f.left, heavy)
445
+ ].join("");
446
+ const levels = [
447
+ { floor: f.bottom - heavy / 2, ceiling: middle + half },
448
+ { floor: middle - half, ceiling: f.top + heavy / 2 }
449
+ ];
450
+ const scale = (f.right - f.left) / 16;
451
+ const rects = RACK_SLOTS.slice(0, boxes).map(([x, w, h], i) => {
452
+ const level = levels[Math.floor(i / 2)];
453
+ const gap = 0.6 * scale;
454
+ const bh = Math.min(h * scale, level.floor - level.ceiling - gap - 0.4 * scale);
455
+ return rect(f.left + half + x * scale, level.floor - gap - bh, w * scale, bh);
456
+ }).join("");
457
+ return { lines, frame, rects };
432
458
  }
433
- function boxTapes(boxes) {
434
- return boxes.map(([x, bottom, w, h]) => `M${x + w / 2} ${bottom - h}v${h * 0.42}`).join("");
435
- }
436
- function storageBoxes(boxes, fill, tape, width, uid, name) {
437
- const rects = boxRects(boxes);
438
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
439
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: rects, fill }),
440
- iconParts.within(
441
- uid,
442
- name,
443
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: rects }),
444
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: boxTapes(boxes), stroke: tape, strokeWidth: width, fill: "none" })
445
- )
446
- ] });
447
- }
448
- function warehouseFilled({ primaryColor, accentColor, strokeWidth, uid }, boxes) {
459
+ function rackDrawing(f, boxes, frame, fill, width, outline) {
460
+ const g = rackGeometry(f, width, boxes);
461
+ if (outline) {
462
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
463
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: g.lines, stroke: frame, strokeWidth: width, strokeLinecap: "butt", fill: "none" }),
464
+ g.rects && /* @__PURE__ */ jsxRuntime.jsx("path", { d: g.rects, stroke: fill, strokeWidth: width, strokeLinejoin: "miter", fill: "none" })
465
+ ] });
466
+ }
449
467
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
450
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: WAREHOUSE, fill: primaryColor }),
451
- storageBoxes(WAREHOUSE_BOXES, boxes, accentColor, strokeWidth, uid, "boxes")
468
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: g.frame, fill: frame }),
469
+ g.rects && /* @__PURE__ */ jsxRuntime.jsx("path", { d: g.rects, fill })
452
470
  ] });
453
471
  }
454
- function warehouseLines(color, width) {
455
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: color, strokeWidth: width, strokeLinejoin: "miter", fill: "none", children: [
456
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: WAREHOUSE }),
457
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: boxRects(WAREHOUSE_BOXES) }),
458
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: boxTapes(WAREHOUSE_BOXES) })
459
- ] });
472
+ const SHELF_RACK = { left: 4, right: 20, top: 3, bottom: 18.5, floor: 21.5 };
473
+ function shelfRackIcon(displayName, boxes) {
474
+ return createIcon.createIcon({
475
+ displayName,
476
+ paths: {
477
+ solid: ({ primaryColor, strokeWidth, variant }) => variant === "wireframe" ? rackDrawing(SHELF_RACK, boxes, primaryColor, primaryColor, 1, true) : rackDrawing(SHELF_RACK, boxes, primaryColor, primaryColor, strokeWidth * 2, false),
478
+ outline: ({ primaryColor, strokeWidth }) => rackDrawing(SHELF_RACK, boxes, primaryColor, primaryColor, strokeWidth, true),
479
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => rackDrawing(SHELF_RACK, boxes, primaryColor, secondaryColor, strokeWidth * 2, false),
480
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => rackDrawing(SHELF_RACK, boxes, primaryColor, secondaryColor, strokeWidth * 2, false)
481
+ }
482
+ });
460
483
  }
461
- const NtdWarehouse = /* @__PURE__ */ createIcon.createIcon({
462
- displayName: "NtdWarehouse",
463
- paths: {
464
- solid: (props) => props.variant === "wireframe" ? warehouseLines(props.primaryColor, 1) : warehouseFilled(props, props.primaryColor),
465
- outline: ({ primaryColor, strokeWidth }) => warehouseLines(primaryColor, strokeWidth),
466
- duotone: (props) => warehouseFilled(props, props.secondaryColor),
467
- vivid: (props) => warehouseFilled(props, props.secondaryColor)
468
- }
469
- });
470
- const RACK_UPRIGHTS = "M4 3V21M20 3V21";
471
- const RACK_SHELVES = [8.5, 14.75, 21];
472
- const RACK_BOXES = [
473
- [
474
- [6.2, 5, 4],
475
- [12.4, 3.6, 3]
476
- ],
477
- [
478
- [6.2, 3.6, 3.4],
479
- [11, 5.2, 4.4]
480
- ],
481
- [
482
- [6.2, 5.4, 4.6],
483
- [12.8, 4.4, 3.4]
484
- ]
484
+ const NtdShelfRack = /* @__PURE__ */ shelfRackIcon("NtdShelfRack", 0);
485
+ const NtdShelfRackQuarter = /* @__PURE__ */ shelfRackIcon("NtdShelfRackQuarter", 1);
486
+ const NtdShelfRackHalf = /* @__PURE__ */ shelfRackIcon("NtdShelfRackHalf", 2);
487
+ const NtdShelfRackThreeQuarters = /* @__PURE__ */ shelfRackIcon(
488
+ "NtdShelfRackThreeQuarters",
489
+ 3
490
+ );
491
+ const NtdShelfRackFull = /* @__PURE__ */ shelfRackIcon("NtdShelfRackFull", 4);
492
+ const SHELF_RACK_STEPS = [
493
+ NtdShelfRack,
494
+ NtdShelfRackQuarter,
495
+ NtdShelfRackHalf,
496
+ NtdShelfRackThreeQuarters,
497
+ NtdShelfRackFull
485
498
  ];
486
- function rackBoxes(width) {
487
- return RACK_SHELVES.flatMap(
488
- (y, i) => RACK_BOXES[i].map(([x, w, h]) => [x, y - width / 2, w, h])
489
- );
499
+ function shelfRackIconFor(level) {
500
+ const clamped = Number.isNaN(level) ? 0 : Math.min(1, Math.max(0, level));
501
+ return SHELF_RACK_STEPS[Math.round(clamped * 4)];
490
502
  }
491
- function rackFrame(color, width) {
492
- return /* @__PURE__ */ jsxRuntime.jsx(
493
- "path",
494
- {
495
- d: `${RACK_UPRIGHTS}${RACK_SHELVES.map((y) => `M4 ${y}H20`).join("")}`,
496
- stroke: color,
497
- strokeWidth: width,
498
- fill: "none"
499
- }
500
- );
501
- }
502
- function rackFilled({ primaryColor, accentColor, strokeWidth, uid }, boxes) {
503
- const width = strokeWidth * 2;
503
+ const WAREHOUSE = "M1.5 9.2L12 3.5L22.5 9.2V21H19.5V11H4.5V21H1.5Z";
504
+ const WAREHOUSE_RACKS = [
505
+ { left: 6.25, right: 11.25, top: 12.75, bottom: 19.25, floor: 21 },
506
+ { left: 12.75, right: 17.75, top: 12.75, bottom: 19.25, floor: 21 }
507
+ ];
508
+ function warehouseDrawing(hall, rackFrame, boxes, width, outline) {
504
509
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
505
- rackFrame(primaryColor, width),
506
- storageBoxes(rackBoxes(width), boxes, accentColor, strokeWidth, uid, "rack")
510
+ outline ? /* @__PURE__ */ jsxRuntime.jsx("path", { d: WAREHOUSE, stroke: hall, strokeWidth: width, strokeLinejoin: "miter", fill: "none" }) : /* @__PURE__ */ jsxRuntime.jsx("path", { d: WAREHOUSE, fill: hall }),
511
+ WAREHOUSE_RACKS.map((f) => /* @__PURE__ */ jsxRuntime.jsx("g", { children: rackDrawing(f, 4, rackFrame, boxes, outline ? width : width * 0.6, outline) }, f.left))
507
512
  ] });
508
513
  }
509
- const NtdShelfRack = /* @__PURE__ */ createIcon.createIcon({
510
- displayName: "NtdShelfRack",
514
+ const NtdWarehouse = /* @__PURE__ */ createIcon.createIcon({
515
+ displayName: "NtdWarehouse",
511
516
  paths: {
512
- solid: (props) => rackFilled(props, props.primaryColor),
513
- outline: ({ primaryColor, strokeWidth }) => {
514
- const boxes = rackBoxes(strokeWidth);
515
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
516
- rackFrame(primaryColor, strokeWidth),
517
- /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: primaryColor, strokeWidth, strokeLinejoin: "miter", fill: "none", children: [
518
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: boxRects(boxes) }),
519
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: boxTapes(boxes) })
520
- ] })
521
- ] });
522
- },
523
- duotone: (props) => rackFilled(props, props.secondaryColor),
524
- vivid: (props) => rackFilled(props, props.secondaryColor)
517
+ solid: ({ primaryColor, strokeWidth, variant }) => variant === "wireframe" ? warehouseDrawing(primaryColor, primaryColor, primaryColor, 1, true) : warehouseDrawing(primaryColor, primaryColor, primaryColor, strokeWidth * 2, false),
518
+ outline: ({ primaryColor, strokeWidth }) => warehouseDrawing(primaryColor, primaryColor, primaryColor, strokeWidth, true),
519
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => warehouseDrawing(primaryColor, primaryColor, secondaryColor, strokeWidth * 2, false),
520
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => warehouseDrawing(primaryColor, primaryColor, secondaryColor, strokeWidth * 2, false)
525
521
  }
526
522
  });
527
523
  const NtdKey = /* @__PURE__ */ createIcon.createIcon({
@@ -1580,8 +1576,13 @@ exports.NtdMortgage = NtdMortgage;
1580
1576
  exports.NtdOfficeBuilding = NtdOfficeBuilding;
1581
1577
  exports.NtdPool = NtdPool;
1582
1578
  exports.NtdShelfRack = NtdShelfRack;
1579
+ exports.NtdShelfRackFull = NtdShelfRackFull;
1580
+ exports.NtdShelfRackHalf = NtdShelfRackHalf;
1581
+ exports.NtdShelfRackQuarter = NtdShelfRackQuarter;
1582
+ exports.NtdShelfRackThreeQuarters = NtdShelfRackThreeQuarters;
1583
1583
  exports.NtdSold = NtdSold;
1584
1584
  exports.NtdSquareMeters = NtdSquareMeters;
1585
1585
  exports.NtdVilla = NtdVilla;
1586
1586
  exports.NtdWarehouse = NtdWarehouse;
1587
1587
  exports.realestateIcons = realestateIcons;
1588
+ exports.shelfRackIconFor = shelfRackIconFor;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const createIcon = require("../createIcon.js");
5
+ const GLYPHS = {
6
+ I: { main: "M12 4v16", part: "M9 4h6M9 20h6", width: 9 },
7
+ V: { main: "M6 4l6 16", part: "M12 20l6-16", width: 16 },
8
+ X: { main: "M6.5 4l11 16", part: "M17.5 4l-11 16", width: 15 },
9
+ L: { main: "M7.5 4v16", part: "M7.5 20h9", width: 12 },
10
+ // an open C: a circle r 8 round (13.17, 12) cut at ±45° on the right, its glyph centred on x 12
11
+ C: { main: "M18.83 6.34A8 8 0 005.17 12", part: "M5.17 12a8 8 0 0013.66 5.66", width: 16.5 },
12
+ D: { main: "M6.5 4v16", part: "M6.5 4h3a8 8 0 010 16h-3", width: 15 },
13
+ M: { main: "M5 20V4l7 10", part: "M12 14l7-10v16", width: 18 }
14
+ };
15
+ function romanIcon(symbol) {
16
+ const g = GLYPHS[symbol];
17
+ const lines = (width, main, part, cap, join) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
18
+ /* @__PURE__ */ jsxRuntime.jsx(
19
+ "path",
20
+ {
21
+ d: g.main,
22
+ stroke: main,
23
+ strokeWidth: width,
24
+ strokeLinecap: cap,
25
+ strokeLinejoin: join,
26
+ fill: "none"
27
+ }
28
+ ),
29
+ /* @__PURE__ */ jsxRuntime.jsx(
30
+ "path",
31
+ {
32
+ d: g.part,
33
+ stroke: part,
34
+ strokeWidth: width,
35
+ strokeLinecap: cap,
36
+ strokeLinejoin: join,
37
+ fill: "none"
38
+ }
39
+ )
40
+ ] });
41
+ const filled = (p, part, cap = "butt") => lines(2 * p.strokeWidth, p.primaryColor, part, cap, cap === "round" ? "round" : "miter");
42
+ return createIcon.createIcon({
43
+ displayName: `NtdRoman${symbol}`,
44
+ seriesWidth: g.width,
45
+ paths: {
46
+ solid: (p) => filled(p, p.primaryColor),
47
+ outline: (p) => lines(p.strokeWidth, p.primaryColor, p.primaryColor, "butt", "miter"),
48
+ duotone: (p) => filled(p, p.secondaryColor),
49
+ vivid: (p) => filled(p, p.secondaryColor),
50
+ sharp: (p) => filled(p, p.primaryColor, "square"),
51
+ rounded: (p) => filled(p, p.primaryColor, "round")
52
+ }
53
+ });
54
+ }
55
+ const NtdRomanI = /* @__PURE__ */ romanIcon("I");
56
+ const NtdRomanV = /* @__PURE__ */ romanIcon("V");
57
+ const NtdRomanX = /* @__PURE__ */ romanIcon("X");
58
+ const NtdRomanL = /* @__PURE__ */ romanIcon("L");
59
+ const NtdRomanC = /* @__PURE__ */ romanIcon("C");
60
+ const NtdRomanD = /* @__PURE__ */ romanIcon("D");
61
+ const NtdRomanM = /* @__PURE__ */ romanIcon("M");
62
+ const SYMBOL_ICONS = {
63
+ I: NtdRomanI,
64
+ V: NtdRomanV,
65
+ X: NtdRomanX,
66
+ L: NtdRomanL,
67
+ C: NtdRomanC,
68
+ D: NtdRomanD,
69
+ M: NtdRomanM
70
+ };
71
+ const STEPS = [
72
+ [1e3, "M"],
73
+ [900, "CM"],
74
+ [500, "D"],
75
+ [400, "CD"],
76
+ [100, "C"],
77
+ [90, "XC"],
78
+ [50, "L"],
79
+ [40, "XL"],
80
+ [10, "X"],
81
+ [9, "IX"],
82
+ [5, "V"],
83
+ [4, "IV"],
84
+ [1, "I"]
85
+ ];
86
+ function toRomanNumeral(n) {
87
+ let rest = Math.round(n);
88
+ if (!(rest >= 1 && rest <= 3999)) {
89
+ return "";
90
+ }
91
+ let out = "";
92
+ for (const [value, letters] of STEPS) {
93
+ while (rest >= value) {
94
+ out += letters;
95
+ rest -= value;
96
+ }
97
+ }
98
+ return out;
99
+ }
100
+ function romanNumeralIcons(n) {
101
+ return [...toRomanNumeral(n)].map((letter) => SYMBOL_ICONS[letter]);
102
+ }
103
+ exports.NtdRomanC = NtdRomanC;
104
+ exports.NtdRomanD = NtdRomanD;
105
+ exports.NtdRomanI = NtdRomanI;
106
+ exports.NtdRomanL = NtdRomanL;
107
+ exports.NtdRomanM = NtdRomanM;
108
+ exports.NtdRomanV = NtdRomanV;
109
+ exports.NtdRomanX = NtdRomanX;
110
+ exports.romanNumeralIcons = romanNumeralIcons;
111
+ exports.toRomanNumeral = toRomanNumeral;