@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,62 @@
1
1
  # @nice2dev/icons — Changelog
2
2
 
3
+ ## 1.4.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 2f6b749: Icons, showcase feedback round 43 — part A.
8
+
9
+ **Removed (breaking, the user's decision — no aliases):** `NtdModel` (use `NtdLayers`), `NtdGradient`
10
+ (`NtdSquare`), `NtdDnaScience` (`NtdDna`), `NtdCertified` (`NtdStar`), `NtdDiploma` (`NtdCertificate`),
11
+ `NtdExam` (`NtdQuiz`). **Renamed:** `NtdAdmin` → `NtdUserTie`, `NtdGasFee` → `NtdGasPump`,
12
+ `NtdCoffeeFood` → `NtdCoffee` (the drawing with the saucer; the other `NtdCoffee` is gone).
13
+
14
+ Stacking:
15
+
16
+ - **Series** — `stackAlign="next-right" | "next-left" | "next-up" | "next-down"` puts a child beside the
17
+ icon, in its colours, variant and size, one after another; the SVG grows to hold them. An icon can
18
+ declare its glyph width (`createIcon` option `seriesWidth`) so narrow glyphs pack tightly. The
19
+ stacker has the four positions as arrows under the pad. New type `IconStackSeriesAlign`.
20
+ - `stackedIcon(displayName, Base, layers)` — an icon defined as a stack of others; it is an icon itself.
21
+ - Renderers receive `stacked` (something is stacked inside) to leave details out under it.
22
+
23
+ New icons:
24
+
25
+ - Roman numerals `NtdRomanI`, `V`, `X`, `L`, `C`, `D`, `M` + `romanNumeralIcons(n)` / `toRomanNumeral(n)`.
26
+ - Dice pips `NtdDicePips1`–`6` (to stack on `NtdSquare`) + `dicePipsIconFor(n)`; `NtdDice` sized like
27
+ `NtdSquare`.
28
+ - Rack fill levels `NtdShelfRack` (now empty), `NtdShelfRackQuarter`, `Half`, `ThreeQuarters`, `Full` +
29
+ `shelfRackIconFor(level)`; `NtdWarehouse` shows two full racks.
30
+ - `NtdCalendarWeek`, `NtdCalendarDay` (with `NtdCalendar`, which now shows date cells and is primary in
31
+ the solid variants), `NtdTablet` (from the same factory as `NtdSmartphone`), `NtdMarket`,
32
+ `NtdEyeDropper`, `NtdScroll` (unrolls when it appears) and `NtdScrollRolled`.
33
+ - `NtdCloudUpload` / `NtdCloudDownload` are now stacks of `NtdCloud` with an arrow at its spot.
34
+
35
+ - 24aca69: Icons, showcase feedback round 43 — part B: 62 redrawn icons, and a stacking fix.
36
+
37
+ - **Stacking in a hollow spot:** new `createIcon` option `perfectStackFilled` — the variants in which
38
+ the perfect-stack spot lies on a fill. `NtdSearch`, `NtdZoomIn` and `NtdZoomOut` fill their glass
39
+ only in `duotone`; elsewhere an icon stacked in the lens now keeps the lens's colours instead of
40
+ taking the accent, which vanished against the page (NiceIconStacker's preview showed only the base).
41
+ - Documents, office, UI: `NtdFile`, `NtdFileText` and the other paper icons (fold primary with a thin
42
+ accent line), `NtdContract`, `NtdClipboard`, `NtdCertificate`, `NtdQuiz`, `NtdPrint`, `NtdTable`,
43
+ `NtdPieChart`, `NtdLayers`, `NtdTrash`, `NtdUsers`, `NtdUserTie`, `NtdGlobe`, `NtdLock`, `NtdFlag`,
44
+ `NtdMap`, `NtdSun`, `NtdRefresh`, `NtdShuffle`, `NtdMegaphone`.
45
+ - Food, finance, commerce: `NtdWine`, `NtdBeer`, `NtdChefHat`, `NtdHamburger`, `NtdCookingPan`,
46
+ `NtdPlate`, `NtdFood`, `NtdForkKnife` (a four-tine fork), `NtdKnife`, `NtdCoffee`, `NtdPartyPopper`,
47
+ `NtdCart`, `NtdWallet`, `NtdPiggyBank`, `NtdCash`, `NtdCashStack`, `NtdCoupon` (empty middle, a real
48
+ `sharp`), `NtdTicket`, `NtdStore` (a shop front), `NtdAward`, `NtdMedal` (empty middle, perfect stack).
49
+ - Transport, buildings, science, nature, sport: `NtdTruck`, `NtdCar`, `NtdTrain`, `NtdBike`,
50
+ `NtdApartment`, `NtdRefrigerator`, `NtdGasPump`, `NtdMolecule`, `NtdNuke`, `NtdMagnet`, `NtdLeaf`,
51
+ `NtdMountain`, `NtdBeach`, `NtdRecycle`, `NtdRunning`, `NtdStopwatch`, `NtdTemperatureSensor` (a real
52
+ `sharp`), `NtdGamepad`, `NtdBrush`, `NtdCalculatorEdu`.
53
+ - No fixed colours left in the redrawn icons (white overlays, `#F59E0B`, `#EF4444`, `#3B82F6` and the
54
+ white text of `NtdMedal` / `NtdMagnet` are gone).
55
+
56
+ ## 1.4.2
57
+
58
+ No changes in this release.
59
+
3
60
  ## 1.4.1
4
61
 
5
62
  ### Patch Changes
@@ -27,6 +27,12 @@ const PAD = [
27
27
  { align: "bottom", row: 5, col: 3 },
28
28
  { align: "bottom-right", row: 5, col: 5 }
29
29
  ];
30
+ const SERIES = [
31
+ { align: "next-left", Arrow: navigation.NtdArrowLeft },
32
+ { align: "next-up", Arrow: navigation.NtdArrowUp },
33
+ { align: "next-down", Arrow: navigation.NtdArrowDown },
34
+ { align: "next-right", Arrow: navigation.NtdArrowRight }
35
+ ];
30
36
  function alignNames(t) {
31
37
  return {
32
38
  perfect: t("iconStacker.align.perfect", "Auto"),
@@ -52,7 +58,11 @@ function alignNames(t) {
52
58
  "half-bottom-right": t(
53
59
  "iconStacker.align.half-bottom-right",
54
60
  "Halfway to the bottom-right corner"
55
- )
61
+ ),
62
+ "next-right": t("iconStacker.align.next-right", "Next, to the right"),
63
+ "next-left": t("iconStacker.align.next-left", "Next, to the left"),
64
+ "next-up": t("iconStacker.align.next-up", "Next, above"),
65
+ "next-down": t("iconStacker.align.next-down", "Next, below")
56
66
  };
57
67
  }
58
68
  const STAGE_SIZE = 64;
@@ -381,7 +391,31 @@ const NiceIconStacker = React.forwardRef(
381
391
  onClick: () => update(edited.id, { align: a })
382
392
  },
383
393
  a
384
- )) })
394
+ )) }),
395
+ /* @__PURE__ */ jsxRuntime.jsx(
396
+ "span",
397
+ {
398
+ className: "nice-icon-stacker__pad-series",
399
+ title: t(
400
+ "iconStacker.align.seriesHint",
401
+ "Beside the icon, in its colours and size"
402
+ ),
403
+ children: SERIES.map(({ align: a, Arrow }) => /* @__PURE__ */ jsxRuntime.jsx(
404
+ "button",
405
+ {
406
+ type: "button",
407
+ role: "radio",
408
+ "aria-checked": align === a,
409
+ "aria-label": alignName(a),
410
+ title: alignName(a),
411
+ className: "nice-icon-stacker__pad-next",
412
+ onClick: () => update(edited.id, { align: a }),
413
+ children: /* @__PURE__ */ jsxRuntime.jsx(Arrow, { size: 14, primaryColor: "currentColor" })
414
+ },
415
+ a
416
+ ))
417
+ }
418
+ )
385
419
  ]
386
420
  }
387
421
  ),
@@ -182,8 +182,10 @@ function createIcon(options) {
182
182
  x: options.perfectStackX ?? textCenter[0],
183
183
  y: options.perfectStackY ?? textCenter[1],
184
184
  rotation: options.perfectStackRotation ?? stacking.BOX_PERFECT_STACK.rotation,
185
- size: options.perfectStackSize ?? stacking.BOX_PERFECT_STACK.size
185
+ size: options.perfectStackSize ?? stacking.BOX_PERFECT_STACK.size,
186
+ filled: options.perfectStackFilled
186
187
  };
188
+ const seriesWidth = options.seriesWidth ?? 24;
187
189
  const Icon = React.forwardRef(
188
190
  ({
189
191
  size = "md",
@@ -264,7 +266,11 @@ function createIcon(options) {
264
266
  strokeWidth: effectiveStrokeWidth,
265
267
  strokeLinecap,
266
268
  strokeLinejoin,
267
- uid
269
+ uid,
270
+ // content stacked inside (not a series beside it) — renderers may leave details out (1.4.3)
271
+ stacked: React.Children.toArray(children).some(
272
+ (c) => !(stacking.isNtdIconElement(c) && stacking.isSeriesAlign(c.props.stackAlign))
273
+ )
268
274
  };
269
275
  const renderer = variant === "wireframe" ? paths.solid : variant === "duotone" && !paths.duotone ? solidDuotone : paths[variant] ?? (variant === "sharp" ? paths.solid : void 0) ?? (variant === "rounded" ? paths.solid : void 0) ?? (variant === "mini" ? paths.solid : void 0) ?? (variant === "3d" ? paths.solid : void 0) ?? (variant === "vivid" ? paths.solid : void 0) ?? paths.solid;
270
276
  const is3d = variant === "3d";
@@ -334,6 +340,17 @@ function createIcon(options) {
334
340
  paced,
335
341
  stacked
336
342
  ] }) : paced;
343
+ const series = viewBox === "0 0 24 24" ? stacking.layoutStackSeries(children, seriesWidth) : null;
344
+ const seriesLayer = series ? stacking.renderStackSeries(series, {
345
+ variant,
346
+ primaryColor: effectivePrimary,
347
+ secondaryColor: resolvedSecondary,
348
+ accentColor: resolvedAccent,
349
+ strokeWidth
350
+ }) : null;
351
+ const svgViewBox = series ? series.box.join(" ") : viewBox;
352
+ const svgWidth = series ? Math.round(1e3 * (resolvedSize * series.box[2] / 24)) / 1e3 : resolvedSize;
353
+ const svgHeight = series ? Math.round(1e3 * (resolvedSize * series.box[3] / 24)) / 1e3 : resolvedSize;
337
354
  const iconContent = variant === "mini" ? /* @__PURE__ */ jsxRuntime.jsx(
338
355
  "g",
339
356
  {
@@ -346,9 +363,9 @@ function createIcon(options) {
346
363
  {
347
364
  ref,
348
365
  xmlns: "http://www.w3.org/2000/svg",
349
- viewBox,
350
- width: resolvedSize,
351
- height: resolvedSize,
366
+ viewBox: svgViewBox,
367
+ width: svgWidth,
368
+ height: svgHeight,
352
369
  fill: "none",
353
370
  strokeLinecap,
354
371
  strokeLinejoin,
@@ -402,7 +419,8 @@ function createIcon(options) {
402
419
  ) : /* @__PURE__ */ jsxRuntime.jsxs("g", { filter: is3d ? `url(#${filterId})` : void 0, children: [
403
420
  iconContent,
404
421
  smilAnimationElements
405
- ] }) : is3d ? /* @__PURE__ */ jsxRuntime.jsx("g", { filter: `url(#${filterId})`, children: iconContent }) : iconContent
422
+ ] }) : is3d ? /* @__PURE__ */ jsxRuntime.jsx("g", { filter: `url(#${filterId})`, children: iconContent }) : iconContent,
423
+ seriesLayer
406
424
  ]
407
425
  },
408
426
  `${playKey ?? ""}:${replays}`
@@ -412,6 +430,7 @@ function createIcon(options) {
412
430
  Icon.displayName = displayName;
413
431
  Icon[stacking.NTD_ICON_MARK] = true;
414
432
  Icon[stacking.PERFECT_STACK] = perfect;
433
+ Icon[stacking.SERIES_WIDTH] = seriesWidth;
415
434
  return Icon;
416
435
  }
417
436
  exports.createIcon = createIcon;
@@ -23,9 +23,8 @@ 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
+ const CUTLERY_FORK = "M0.4 3H0.9V7H1.37V3H1.87V7H2.33V3H2.83V7H3.3V3H3.8V7.3C3.8 8.6 3.1 9.3 2.7 9.6V20.4A0.6 0.6 0 0 1 1.5 20.4V9.6C1.1 9.3 0.4 8.6 0.4 7.3Z";
27
+ const CUTLERY_KNIFE = "M21 3C23.3 4.2 24 8.2 23.6 12.6H22.7V20.35A0.85 0.85 0 0 1 21 20.35Z";
29
28
  const BELL = "M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9z";
30
29
  const BELL_CLAPPER = "M9 18.5h6a3 3 0 01-6 0z";
31
30
  const BELL_CLAPPER_LINE = "M9 19a3 3 0 006 0";
@@ -63,6 +62,7 @@ const PAPER_FOLD = "M12 2v6a2 2 0 002 2h6z";
63
62
  const PAPER_FOLD_LINE = "M12 2v8h8";
64
63
  const PAPER_SHARP = "M12 2H4v20h16V10z";
65
64
  const PAPER_FOLD_SHARP = "M12 2v8h8z";
65
+ const PAPER_FOLD_EDGE = "M12 2v6a2 2 0 002 2h6";
66
66
  function paperIcon(displayName, text = "") {
67
67
  return createIcon.createIcon({
68
68
  displayName,
@@ -71,9 +71,20 @@ function paperIcon(displayName, text = "") {
71
71
  perfectStackY: 14,
72
72
  perfectStackSize: 0.5,
73
73
  paths: {
74
- solid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
74
+ solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
75
75
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: PAPER, fill: primaryColor }),
76
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: PAPER_FOLD, fill: secondaryColor }),
76
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PAPER_FOLD, fill: primaryColor }),
77
+ /* @__PURE__ */ jsxRuntime.jsx(
78
+ "path",
79
+ {
80
+ d: PAPER_FOLD_EDGE,
81
+ stroke: accentColor,
82
+ strokeOpacity: accentOpacity,
83
+ strokeWidth,
84
+ strokeLinecap: "butt",
85
+ fill: "none"
86
+ }
87
+ ),
77
88
  text && /* @__PURE__ */ jsxRuntime.jsx(
78
89
  "path",
79
90
  {
@@ -87,9 +98,21 @@ function paperIcon(displayName, text = "") {
87
98
  )
88
99
  ] }),
89
100
  // square at every corner, the fold included — the derived `sharp` keeps a path's arcs round
90
- sharp: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
101
+ sharp: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
91
102
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: PAPER_SHARP, fill: primaryColor }),
92
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: PAPER_FOLD_SHARP, fill: secondaryColor }),
103
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PAPER_FOLD_SHARP, fill: primaryColor }),
104
+ /* @__PURE__ */ jsxRuntime.jsx(
105
+ "path",
106
+ {
107
+ d: PAPER_FOLD_LINE,
108
+ stroke: accentColor,
109
+ strokeOpacity: accentOpacity,
110
+ strokeWidth,
111
+ strokeLinecap: "butt",
112
+ strokeLinejoin: "miter",
113
+ fill: "none"
114
+ }
115
+ ),
93
116
  text && /* @__PURE__ */ jsxRuntime.jsx(
94
117
  "path",
95
118
  {
@@ -111,16 +134,15 @@ function paperIcon(displayName, text = "") {
111
134
  }
112
135
  ),
113
136
  // duotone (1.3.8): createIcon's default — the solid page, its writing in secondary like the fold
114
- vivid: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
137
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
115
138
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: PAPER, fill: primaryColor }),
116
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: PAPER, fill: "white", opacity: "0.1" }),
117
139
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: PAPER_FOLD, fill: secondaryColor }),
118
140
  text && /* @__PURE__ */ jsxRuntime.jsx(
119
141
  "path",
120
142
  {
121
143
  d: text,
122
- stroke: "white",
123
- strokeOpacity: "0.9",
144
+ stroke: accentColor,
145
+ strokeOpacity: accentOpacity,
124
146
  strokeWidth: "1.5",
125
147
  strokeLinecap: "round",
126
148
  fill: "none"
@@ -131,7 +153,6 @@ function paperIcon(displayName, text = "") {
131
153
  });
132
154
  }
133
155
  exports.CUTLERY_FORK = CUTLERY_FORK;
134
- exports.CUTLERY_FORK_LINES = CUTLERY_FORK_LINES;
135
156
  exports.CUTLERY_KNIFE = CUTLERY_KNIFE;
136
157
  exports.bellIcon = bellIcon;
137
158
  exports.detailColor = detailColor;
@@ -31,7 +31,12 @@ const ALIGN_CODE = {
31
31
  "half-top-left": "htl",
32
32
  "half-top-right": "htr",
33
33
  "half-bottom-left": "hbl",
34
- "half-bottom-right": "hbr"
34
+ "half-bottom-right": "hbr",
35
+ // a series beside the icon (1.4.3)
36
+ "next-right": "nr",
37
+ "next-left": "nl",
38
+ "next-up": "nu",
39
+ "next-down": "nd"
35
40
  };
36
41
  function reverse(codes) {
37
42
  const map = /* @__PURE__ */ new Map();
@@ -8,6 +8,7 @@ const LENS_HANDLE = "M21 21l-4.35-4.35";
8
8
  function lensIcon(displayName, glyph = "") {
9
9
  return createIcon.createIcon({
10
10
  displayName,
11
+ perfectStackFilled: ["duotone"],
11
12
  paths: {
12
13
  solid: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsx(
13
14
  "path",
@@ -151,7 +152,10 @@ const NtdEditDetail = /* @__PURE__ */ createIcon.createIcon({
151
152
  }
152
153
  });
153
154
  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
+ const TRASH_DOME = "M6 6A9.28 9.28 0 0 1 18 6Z";
156
+ const TRASH_DOME_LINE = "M6 6A9.28 9.28 0 0 1 18 6";
157
+ const TRASH_HANDLE = "M9.5 4.6V3.2a1.2 1.2 0 011.2-1.2h2.6a1.2 1.2 0 011.2 1.2v1.4";
158
+ const TRASH_HANDLE_LINE = "M9.5 4.15V3.2a1.2 1.2 0 011.2-1.2h2.6a1.2 1.2 0 011.2 1.2v.95";
155
159
  const TRASH_BIN = "M5 6l1 14a2 2 0 002 2h8a2 2 0 002-2l1-14H5z";
156
160
  const TRASH_GROOVES = "M10 10.5v7M14 10.5v7";
157
161
  const NtdTrash = /* @__PURE__ */ createIcon.createIcon({
@@ -159,6 +163,7 @@ const NtdTrash = /* @__PURE__ */ createIcon.createIcon({
159
163
  paths: {
160
164
  solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
161
165
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_LID, stroke: primaryColor, strokeWidth, fill: "none" }),
166
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_DOME, fill: primaryColor }),
162
167
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_HANDLE, stroke: primaryColor, strokeWidth, fill: "none" }),
163
168
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_BIN, fill: primaryColor }),
164
169
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -188,7 +193,8 @@ const NtdTrash = /* @__PURE__ */ createIcon.createIcon({
188
193
  ] }),
189
194
  outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
190
195
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_LID, stroke: primaryColor, strokeWidth, fill: "none" }),
191
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_HANDLE, stroke: primaryColor, strokeWidth, fill: "none" }),
196
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_DOME_LINE, stroke: primaryColor, strokeWidth, fill: "none" }),
197
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_HANDLE_LINE, stroke: primaryColor, strokeWidth, fill: "none" }),
192
198
  /* @__PURE__ */ jsxRuntime.jsx(
193
199
  "path",
194
200
  {
@@ -203,6 +209,7 @@ const NtdTrash = /* @__PURE__ */ createIcon.createIcon({
203
209
  vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
204
210
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_BIN, fill: primaryColor }),
205
211
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_LID, stroke: secondaryColor, strokeWidth, fill: "none" }),
212
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_DOME, fill: secondaryColor }),
206
213
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: TRASH_HANDLE, stroke: secondaryColor, strokeWidth, fill: "none" }),
207
214
  /* @__PURE__ */ jsxRuntime.jsx(
208
215
  "path",
@@ -443,13 +450,14 @@ const NtdCopy = /* @__PURE__ */ createIcon.createIcon({
443
450
  }
444
451
  });
445
452
  const CLIPBOARD_TEXT = "M8 11h8M8 14.5h5";
453
+ const CLIPBOARD_SHEET = "M6 22V6.5h12V22";
446
454
  const NtdClipboard = /* @__PURE__ */ createIcon.createIcon({
447
455
  displayName: "NtdClipboard",
448
456
  perfectStackX: 12,
449
457
  perfectStackY: 12.5,
450
458
  perfectStackSize: 0.5,
451
459
  paths: {
452
- solid: ({ primaryColor, accentColor, accentOpacity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
460
+ solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
453
461
  /* @__PURE__ */ jsxRuntime.jsx(
454
462
  "path",
455
463
  {
@@ -457,6 +465,18 @@ const NtdClipboard = /* @__PURE__ */ createIcon.createIcon({
457
465
  fill: primaryColor
458
466
  }
459
467
  ),
468
+ /* @__PURE__ */ jsxRuntime.jsx(
469
+ "path",
470
+ {
471
+ d: CLIPBOARD_SHEET,
472
+ stroke: accentColor,
473
+ strokeWidth: strokeWidth * 0.6,
474
+ strokeLinecap: "butt",
475
+ strokeLinejoin: "miter",
476
+ fill: "none",
477
+ opacity: accentOpacity
478
+ }
479
+ ),
460
480
  /* @__PURE__ */ jsxRuntime.jsx(
461
481
  "rect",
462
482
  {
@@ -498,7 +518,7 @@ const NtdClipboard = /* @__PURE__ */ createIcon.createIcon({
498
518
  ),
499
519
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: CLIPBOARD_TEXT, stroke: primaryColor, strokeWidth })
500
520
  ] }),
501
- vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
521
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
502
522
  /* @__PURE__ */ jsxRuntime.jsx(
503
523
  "path",
504
524
  {
@@ -506,6 +526,18 @@ const NtdClipboard = /* @__PURE__ */ createIcon.createIcon({
506
526
  fill: primaryColor
507
527
  }
508
528
  ),
529
+ /* @__PURE__ */ jsxRuntime.jsx(
530
+ "path",
531
+ {
532
+ d: CLIPBOARD_SHEET,
533
+ stroke: accentColor,
534
+ strokeWidth: strokeWidth * 0.6,
535
+ strokeLinecap: "butt",
536
+ strokeLinejoin: "miter",
537
+ fill: "none",
538
+ opacity: accentOpacity
539
+ }
540
+ ),
509
541
  /* @__PURE__ */ jsxRuntime.jsx(
510
542
  "rect",
511
543
  {
@@ -662,86 +694,41 @@ const NtdSort = /* @__PURE__ */ createIcon.createIcon({
662
694
  ] })
663
695
  }
664
696
  });
697
+ const PRINT_BODY = "M4 9h16a2 2 0 012 2v5a2 2 0 01-2 2H4a2 2 0 01-2-2v-5a2 2 0 012-2z";
698
+ const PRINT_PAPER_IN = { x: 6, y: 3, width: 12, height: 5.25 };
699
+ const PRINT_PAPER_OUT = { x: 6, y: 14, width: 12, height: 8, rx: 1 };
700
+ const PRINT_LINES = "M8.5 17.75h7M8.5 19.75h4.5";
701
+ function printFilled({ primaryColor, accentColor, accentOpacity, strokeWidth }, paper, detail, detailOpacity) {
702
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
703
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...PRINT_PAPER_IN, fill: paper }),
704
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PRINT_BODY, fill: primaryColor }),
705
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "18.5", cy: "11.75", r: "0.9", fill: detail, opacity: detailOpacity }),
706
+ /* @__PURE__ */ jsxRuntime.jsx(
707
+ "rect",
708
+ {
709
+ ...PRINT_PAPER_OUT,
710
+ fill: paper,
711
+ stroke: accentColor,
712
+ strokeWidth: strokeWidth * 0.6,
713
+ strokeOpacity: accentOpacity
714
+ }
715
+ ),
716
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PRINT_LINES, stroke: detail, strokeWidth, opacity: detailOpacity })
717
+ ] });
718
+ }
665
719
  const NtdPrint = /* @__PURE__ */ createIcon.createIcon({
666
720
  displayName: "NtdPrint",
667
721
  paths: {
668
- solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
669
- /* @__PURE__ */ jsxRuntime.jsx(
670
- "path",
671
- {
672
- d: "M4 9h16a2 2 0 012 2v5a2 2 0 01-2 2H4a2 2 0 01-2-2v-5a2 2 0 012-2z",
673
- fill: primaryColor
674
- }
675
- ),
676
- /* @__PURE__ */ jsxRuntime.jsx(
677
- "path",
678
- {
679
- d: "M6 9V3h12v6",
680
- stroke: primaryColor,
681
- strokeWidth,
682
- fill: accentColor,
683
- opacity: accentOpacity * 0.5
684
- }
685
- ),
686
- /* @__PURE__ */ jsxRuntime.jsx(
687
- "rect",
688
- {
689
- x: "6",
690
- y: "15",
691
- width: "12",
692
- height: "7",
693
- rx: "1",
694
- fill: accentColor,
695
- opacity: accentOpacity
696
- }
697
- ),
698
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "9", y1: "18", x2: "15", y2: "18", stroke: primaryColor, strokeWidth: "1", opacity: "0.15" })
722
+ solid: (p) => printFilled(p, p.primaryColor, p.accentColor, p.accentOpacity),
723
+ outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: primaryColor, strokeWidth, fill: "none", children: [
724
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 9V3h12v6" }),
725
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 18H4a2 2 0 01-2-2v-5a2 2 0 012-2h16a2 2 0 012 2v5a2 2 0 01-2 2h-2" }),
726
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...PRINT_PAPER_OUT }),
727
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: PRINT_LINES }),
728
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "18.5", cy: "11.75", r: "0.5", fill: primaryColor, stroke: "none" })
699
729
  ] }),
700
- outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
701
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 9V3h12v6", stroke: primaryColor, strokeWidth, fill: "none" }),
702
- /* @__PURE__ */ jsxRuntime.jsx(
703
- "path",
704
- {
705
- d: "M6 18H4a2 2 0 01-2-2v-5a2 2 0 012-2h16a2 2 0 012 2v5a2 2 0 01-2 2h-2",
706
- stroke: primaryColor,
707
- strokeWidth,
708
- fill: "none"
709
- }
710
- ),
711
- /* @__PURE__ */ jsxRuntime.jsx(
712
- "rect",
713
- {
714
- x: "6",
715
- y: "15",
716
- width: "12",
717
- height: "7",
718
- rx: "1",
719
- stroke: primaryColor,
720
- strokeWidth,
721
- fill: "none"
722
- }
723
- )
724
- ] }),
725
- vivid: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
726
- /* @__PURE__ */ jsxRuntime.jsx(
727
- "path",
728
- {
729
- d: "M4 9h16a2 2 0 012 2v5a2 2 0 01-2 2H4a2 2 0 01-2-2v-5a2 2 0 012-2z",
730
- fill: primaryColor
731
- }
732
- ),
733
- /* @__PURE__ */ jsxRuntime.jsx(
734
- "path",
735
- {
736
- d: "M4 9h16a2 2 0 012 2v5a2 2 0 01-2 2H4a2 2 0 01-2-2v-5a2 2 0 012-2z",
737
- fill: "white",
738
- opacity: "0.08"
739
- }
740
- ),
741
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 9V3h12v6", stroke: secondaryColor, strokeWidth: "2", fill: secondaryColor }),
742
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "6", y: "15", width: "12", height: "7", rx: "1", fill: "#3B82F6" }),
743
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "9", y1: "18", x2: "15", y2: "18", stroke: "white", strokeWidth: "1", opacity: "0.35" })
744
- ] })
730
+ duotone: (p) => printFilled(p, p.secondaryColor, p.primaryColor, 1),
731
+ vivid: (p) => printFilled(p, p.secondaryColor, p.accentColor, p.accentOpacity)
745
732
  }
746
733
  });
747
734
  const NtdZoomIn = /* @__PURE__ */ lensIcon("NtdZoomIn", "M11 8v6M8 11h6");
@@ -1146,54 +1133,31 @@ const NtdLogOut = /* @__PURE__ */ createIcon.createIcon({
1146
1133
  ] })
1147
1134
  }
1148
1135
  });
1136
+ const LOCK_BODY = { x: 3, y: 10, width: 18, height: 12, rx: 2.5 };
1137
+ const LOCK_SHACKLE = "M6 10.5V8a6 6 0 0112 0v2.5";
1138
+ const LOCK_KEYHOLE = "M12 12.8a2.1 2.1 0 011.1 3.89V19a.5.5 0 01-.5.5h-1.2a.5.5 0 01-.5-.5v-2.31A2.1 2.1 0 0112 12.8z";
1139
+ function lockFilled(body, shackle, keyhole, keyholeOpacity, width) {
1140
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1141
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: LOCK_SHACKLE, stroke: shackle, strokeWidth: width, fill: "none" }),
1142
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...LOCK_BODY, fill: body }),
1143
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: LOCK_KEYHOLE, fill: keyhole, opacity: keyholeOpacity })
1144
+ ] });
1145
+ }
1149
1146
  const NtdLock = /* @__PURE__ */ createIcon.createIcon({
1150
1147
  displayName: "NtdLock",
1151
1148
  perfectStackX: 12,
1152
- perfectStackY: 16.5,
1153
- perfectStackSize: 0.35,
1149
+ perfectStackY: 16,
1150
+ perfectStackSize: 0.4,
1154
1151
  paths: {
1155
- solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1156
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2.5", fill: primaryColor }),
1157
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0110 0v4", stroke: primaryColor, strokeWidth }),
1158
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "15.5", r: "1.5", fill: accentColor, opacity: accentOpacity }),
1159
- /* @__PURE__ */ jsxRuntime.jsx(
1160
- "rect",
1161
- {
1162
- x: "11.25",
1163
- y: "16.5",
1164
- width: "1.5",
1165
- height: "2",
1166
- rx: "0.5",
1167
- fill: accentColor,
1168
- opacity: accentOpacity
1169
- }
1170
- )
1171
- ] }),
1152
+ solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => lockFilled(primaryColor, primaryColor, accentColor, accentOpacity, strokeWidth * 2),
1172
1153
  outline: ({ primaryColor, strokeWidth }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1173
- /* @__PURE__ */ jsxRuntime.jsx(
1174
- "rect",
1175
- {
1176
- x: "3",
1177
- y: "11",
1178
- width: "18",
1179
- height: "11",
1180
- rx: "2.5",
1181
- stroke: primaryColor,
1182
- strokeWidth,
1183
- fill: "none"
1184
- }
1185
- ),
1186
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0110 0v4", stroke: primaryColor, strokeWidth }),
1187
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "15.5", r: "1.5", fill: primaryColor }),
1188
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "11.25", y: "16.5", width: "1.5", height: "2", rx: "0.5", fill: primaryColor })
1154
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: primaryColor, strokeWidth, fill: "none", children: [
1155
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { ...LOCK_BODY }),
1156
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: LOCK_SHACKLE })
1157
+ ] }),
1158
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: LOCK_KEYHOLE, fill: primaryColor })
1189
1159
  ] }),
1190
- vivid: ({ primaryColor, secondaryColor }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1191
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2.5", fill: primaryColor }),
1192
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2.5", fill: "white", opacity: "0.08" }),
1193
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "15.5", r: "1.5", fill: secondaryColor }),
1194
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "11.25", y: "16.5", width: "1.5", height: "2", rx: "0.5", fill: "#3B82F6" }),
1195
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0110 0v4", stroke: "white", strokeWidth: "1" })
1196
- ] })
1160
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity, strokeWidth }) => lockFilled(primaryColor, secondaryColor, accentColor, accentOpacity, strokeWidth * 2)
1197
1161
  }
1198
1162
  });
1199
1163
  const NtdUnlock = /* @__PURE__ */ createIcon.createIcon({