@nice2dev/icons 1.3.2 → 1.3.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 (47) hide show
  1. package/CHANGELOG.md +122 -0
  2. package/README.md +12 -4
  3. package/dist/cjs/createIcon.js +4 -2
  4. package/dist/cjs/figmaExport.js +1 -0
  5. package/dist/cjs/iconParts.js +34 -1
  6. package/dist/cjs/icons/actions.js +85 -64
  7. package/dist/cjs/icons/business.js +65 -28
  8. package/dist/cjs/icons/education.js +37 -13
  9. package/dist/cjs/icons/files.js +58 -18
  10. package/dist/cjs/icons/index.js +1 -0
  11. package/dist/cjs/icons/media.js +87 -30
  12. package/dist/cjs/icons/navigation.js +26 -7
  13. package/dist/cjs/icons/omniverk.js +2 -1
  14. package/dist/cjs/icons/realestate.js +48 -10
  15. package/dist/cjs/icons/science.js +10 -6
  16. package/dist/cjs/icons/shapes.js +46 -12
  17. package/dist/cjs/icons/social.js +3 -9
  18. package/dist/cjs/icons/travel.js +21 -4
  19. package/dist/cjs/icons/ui.js +80 -39
  20. package/dist/cjs/icons/weather.js +5 -4
  21. package/dist/cjs/index.js +1 -0
  22. package/dist/cjs/nicetodev-icons.css +1 -1
  23. package/dist/esm/createIcon.js +4 -2
  24. package/dist/esm/figmaExport.js +1 -0
  25. package/dist/esm/iconParts.js +34 -3
  26. package/dist/esm/icons/actions.js +87 -66
  27. package/dist/esm/icons/business.js +65 -28
  28. package/dist/esm/icons/education.js +37 -13
  29. package/dist/esm/icons/files.js +58 -18
  30. package/dist/esm/icons/index.js +1 -1
  31. package/dist/esm/icons/media.js +87 -30
  32. package/dist/esm/icons/navigation.js +26 -7
  33. package/dist/esm/icons/omniverk.js +2 -1
  34. package/dist/esm/icons/realestate.js +48 -10
  35. package/dist/esm/icons/science.js +10 -6
  36. package/dist/esm/icons/shapes.js +46 -12
  37. package/dist/esm/icons/social.js +3 -9
  38. package/dist/esm/icons/travel.js +21 -4
  39. package/dist/esm/icons/ui.js +81 -41
  40. package/dist/esm/icons/weather.js +5 -4
  41. package/dist/esm/index.js +1 -1
  42. package/dist/esm/nicetodev-icons.css +1 -1
  43. package/dist/types/iconParts.d.ts +14 -1
  44. package/dist/types/icons/index.d.ts +1 -1
  45. package/dist/types/icons/ui.d.ts +1 -0
  46. package/dist/types/types.d.ts +12 -3
  47. package/package.json +2 -2
@@ -1,6 +1,14 @@
1
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { createIcon } from './createIcon.js';
3
3
 
4
+ /**
5
+ * The colour of a detail drawn in secondary on a filled shape (a floppy's label, a ribbon): the
6
+ * secondary colour, but the accent colour in the cutout's mask — there secondary is cut out with
7
+ * the shape and the detail would vanish, while the accent draws in the cut.
8
+ */
9
+ function detailColor({ variant, secondaryColor, accentColor }) {
10
+ return variant === 'cutout' ? accentColor : secondaryColor;
11
+ }
4
12
  /**
5
13
  * `content` drawn only inside `shape` — for accent lines that read as a cut through a shape (a
6
14
  * pencil's band, a calendar's header line, an envelope's flap): clipped, they meet the shape's
@@ -17,6 +25,29 @@ function within(uid, name, shape, content) {
17
25
  const id = `${uid}${name}`;
18
26
  return (jsxs(Fragment, { children: [jsx("clipPath", { id: id, children: shape }), jsx("g", { clipPath: `url(#${id})`, children: content })] }));
19
27
  }
28
+ const BELL = 'M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9z';
29
+ /** The clapper: a half disc r 3 under the bell (it was a thin arc). */
30
+ const BELL_CLAPPER = 'M9 18.5h6a3 3 0 01-6 0z';
31
+ const BELL_CLAPPER_LINE = 'M9 19a3 3 0 006 0';
32
+ /** NtdBellRing's ring marks, either side of the crown. */
33
+ const BELL_RINGS = 'M2 4l1.5 1.5M22 4l-1.5 1.5';
34
+ /**
35
+ * NtdBell and NtdBellRing, so the two share one bell; `ringing` adds the ring marks. Duotone and
36
+ * vivid are fills only: the bell primary, the clapper secondary. The marks are primary on the solid
37
+ * bell, secondary in duotone and in the accent colour in vivid.
38
+ */
39
+ function bellIcon(displayName, ringing) {
40
+ const parts = ({ primaryColor, strokeWidth }, detail, rings, ringsOpacity = 1) => (jsxs(Fragment, { children: [jsx("path", { d: BELL, fill: primaryColor }), jsx("path", { d: BELL_CLAPPER, fill: detail }), ringing && (jsx("path", { d: BELL_RINGS, stroke: rings, strokeWidth: strokeWidth, opacity: ringsOpacity }))] }));
41
+ return createIcon({
42
+ displayName,
43
+ paths: {
44
+ solid: (props) => parts(props, props.primaryColor, props.primaryColor),
45
+ outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: `${BELL}${BELL_CLAPPER_LINE}${ringing ? BELL_RINGS : ''}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
46
+ duotone: (props) => parts(props, props.secondaryColor, props.secondaryColor),
47
+ vivid: (props) => parts(props, props.secondaryColor, props.accentColor, props.accentOpacity),
48
+ },
49
+ });
50
+ }
20
51
  /** The page of every paper icon: 16 × 20, its top-right corner folded over 8. */
21
52
  const PAPER = 'M12 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V10z';
22
53
  const PAPER_FOLD = 'M12 2v6a2 2 0 002 2h6z';
@@ -26,7 +57,7 @@ const PAPER_FOLD_SHARP = 'M12 2v8h8z';
26
57
  /**
27
58
  * A paper icon — NtdFile, and every document drawn on the same page (NtdFileText, NtdInvoice,
28
59
  * NtdContract, …), so their pages and folds match. The fold is secondary when the page is filled;
29
- * `text` is the document's writing, a path of strokes kept below the fold (y ≥ 11, x 7.5–16.5),
60
+ * `text` is the document's writing, a path of strokes kept below the fold (y ≥ 11, x 7–17),
30
61
  * drawn in the accent colour on a filled page and in primary on a stroked one.
31
62
  */
32
63
  function paperIcon(displayName, text = '') {
@@ -43,4 +74,4 @@ function paperIcon(displayName, text = '') {
43
74
  });
44
75
  }
45
76
 
46
- export { paperIcon, within };
77
+ export { bellIcon, detailColor, paperIcon, within };
@@ -1,16 +1,27 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { createIcon } from '../createIcon.js';
3
- import { within } from '../iconParts.js';
3
+ import { within, detailColor } from '../iconParts.js';
4
4
 
5
- const NtdSearch = /* @__PURE__ */ createIcon({
6
- displayName: 'NtdSearch',
7
- paths: {
8
- solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M21 21l-4.35-4.35M11 19a8 8 0 100-16 8 8 0 000 16z", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
9
- outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M21 21l-4.35-4.35M11 19a8 8 0 100-16 8 8 0 000 16z", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
10
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "11", cy: "11", r: "7", fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: "M21 21l-4.35-4.35M11 19a8 8 0 100-16 8 8 0 000 16z", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
11
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsx(Fragment, { children: jsx("path", { d: "M21 21l-4.35-4.35M11 19a8 8 0 100-16 8 8 0 000 16z", stroke: primaryColor, strokeWidth: "2.2", fill: "none" }) })),
12
- },
13
- });
5
+ /** The magnifier's lens (r 8 about 11,11) and its handle. */
6
+ const LENS = 'M11 19a8 8 0 100-16 8 8 0 000 16z';
7
+ const LENS_HANDLE = 'M21 21l-4.35-4.35';
8
+ /**
9
+ * The magnifier of NtdSearch, NtdZoomIn and NtdZoomOut, so the three share one lens and handle;
10
+ * `glyph` is drawn inside the lens. A line glyph: twice the stroke width in every variant but
11
+ * `outline`. Duotone fills the lens in secondary, vivid draws the handle and the glyph in it.
12
+ */
13
+ function lensIcon(displayName, glyph = '') {
14
+ return createIcon({
15
+ displayName,
16
+ paths: {
17
+ solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: `${LENS_HANDLE}${LENS}${glyph}`, stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })),
18
+ outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: `${LENS_HANDLE}${LENS}${glyph}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
19
+ duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: LENS, fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: `${LENS_HANDLE}${LENS}${glyph}`, stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
20
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: LENS, stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: `${LENS_HANDLE}${glyph}`, stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
21
+ },
22
+ });
23
+ }
24
+ const NtdSearch = /* @__PURE__ */ lensIcon('NtdSearch');
14
25
  const EDIT_PENCIL = 'M17 3a2.828 2.828 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z';
15
26
  const NtdEdit = /* @__PURE__ */ createIcon({
16
27
  displayName: 'NtdEdit',
@@ -53,16 +64,22 @@ const FLOPPY_BODY = 'M5 3h11.6L21 7.4V19a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012
53
64
  /** The shutter with its window cut out (even-odd). */
54
65
  const FLOPPY_SHUTTER = 'M7 3h9.2v4.8a.8.8 0 01-.8.8H7.8a.8.8 0 01-.8-.8zM12.6 4.4v2.8h2V4.4z';
55
66
  const FLOPPY_LABEL = 'M6.8 10.6h10.4a1 1 0 011 1v7a1 1 0 01-1 1H6.8a1 1 0 01-1-1v-7a1 1 0 011-1z';
67
+ /** The label's top band — vivid's third colour. */
68
+ const FLOPPY_LABEL_BAND = 'M5.8 13.2h12.4v-1.6a1 1 0 00-1-1H6.8a1 1 0 00-1 1z';
56
69
  const NtdSave = /* @__PURE__ */ createIcon({
57
70
  displayName: 'NtdSave',
58
71
  paths: {
59
- solid: ({ primaryColor, accentColor, accentOpacity }) => (jsxs(Fragment, { children: [jsx("path", { d: FLOPPY_BODY, fill: primaryColor }), jsxs("g", { fill: accentColor, opacity: accentOpacity, children: [jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd" }), jsx("path", { d: FLOPPY_LABEL })] })] })),
60
- outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: `${FLOPPY_BODY}M7.5 3v4h8V3M12.6 4.8v1${FLOPPY_LABEL}`, stroke: primaryColor, strokeWidth: strokeWidth, strokeLinejoin: "round", fill: "none" })),
72
+ // the shutter and the label in secondary (the accent is usually black or the page colour)
73
+ solid: (props) => (jsxs(Fragment, { children: [jsx("path", { d: FLOPPY_BODY, fill: props.primaryColor }), jsxs("g", { fill: detailColor(props), children: [jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd" }), jsx("path", { d: FLOPPY_LABEL })] })] })),
74
+ // the wireframe's construction — body, shutter with its window, label — at the stroke width
75
+ outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: `${FLOPPY_BODY}${FLOPPY_SHUTTER}${FLOPPY_LABEL}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
61
76
  // fills only: the body secondary, the shutter and the label primary
62
77
  duotone: ({ primaryColor, secondaryColor, secondaryOpacity }) => (jsxs(Fragment, { children: [jsx("path", { d: FLOPPY_BODY, fill: secondaryColor, opacity: secondaryOpacity }), jsxs("g", { fill: primaryColor, children: [jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd" }), jsx("path", { d: FLOPPY_LABEL })] })] })),
63
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: FLOPPY_BODY, fill: primaryColor }), jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd", fill: "#CBD5E1" }), jsx("path", { d: FLOPPY_LABEL, fill: "white" }), jsx("path", { d: "M5.8 13.2h12.4v-1.6a1 1 0 00-1-1H6.8a1 1 0 00-1 1z", fill: secondaryColor })] })),
78
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => (jsxs(Fragment, { children: [jsx("path", { d: FLOPPY_BODY, fill: primaryColor }), jsxs("g", { fill: secondaryColor, children: [jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd" }), jsx("path", { d: FLOPPY_LABEL })] }), jsx("path", { d: FLOPPY_LABEL_BAND, fill: accentColor, opacity: accentOpacity })] })),
64
79
  },
65
80
  });
81
+ /** The tray of NtdDownload and NtdUpload. */
82
+ const TRAY = 'M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4';
66
83
  // The shaft stops 2 short of the arrowhead's point: with the square caps of `sharp`, a shaft that
67
84
  // ran to the point stuck out of it.
68
85
  const NtdDownload = /* @__PURE__ */ createIcon({
@@ -70,8 +87,9 @@ const NtdDownload = /* @__PURE__ */ createIcon({
70
87
  paths: {
71
88
  solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 13V3", stroke: primaryColor, strokeWidth: strokeWidth * 2 })),
72
89
  outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 13V3", stroke: primaryColor, strokeWidth: strokeWidth })),
73
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { x: "3", y: "15", width: "18", height: "6", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 13V3", stroke: primaryColor, strokeWidth: strokeWidth })] })),
74
- vivid: ({ primaryColor, strokeWidth }) => (jsx(Fragment, { children: jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 13V3", stroke: primaryColor, strokeWidth: strokeWidth * 2 }) })),
90
+ // the arrow primary, the tray secondary — a colour split, no filled tray
91
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: TRAY, stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsx("path", { d: "M7 10l5 5 5-5M12 13V3", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
92
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: TRAY, stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsx("path", { d: "M7 10l5 5 5-5M12 13V3", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
75
93
  },
76
94
  });
77
95
  const NtdUpload = /* @__PURE__ */ createIcon({
@@ -79,17 +97,26 @@ const NtdUpload = /* @__PURE__ */ createIcon({
79
97
  paths: {
80
98
  solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 5v10", stroke: primaryColor, strokeWidth: strokeWidth * 2 })),
81
99
  outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 5v10", stroke: primaryColor, strokeWidth: strokeWidth })),
82
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { x: "3", y: "15", width: "18", height: "6", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 5v10", stroke: primaryColor, strokeWidth: strokeWidth })] })),
83
- vivid: ({ primaryColor, strokeWidth }) => (jsx(Fragment, { children: jsx("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 5v10", stroke: primaryColor, strokeWidth: strokeWidth * 2 }) })),
100
+ // as NtdDownload: the arrow primary, the tray secondary
101
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: TRAY, stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsx("path", { d: "M17 8l-5-5-5 5M12 5v10", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
102
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: TRAY, stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsx("path", { d: "M17 8l-5-5-5 5M12 5v10", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
84
103
  },
85
104
  });
105
+ // NtdShare: three nodes joined by two links, the links twice the stroke width in every variant but
106
+ // `outline`. Duotone and vivid, fills only: the nodes primary, the links secondary (vivid had a
107
+ // fixed #3B82F6 node and white links that vanished on a light page).
108
+ const SHARE_NODES = 'M18 2a3 3 0 110 6 3 3 0 110-6zM6 9a3 3 0 110 6 3 3 0 110-6zM18 16a3 3 0 110 6 3 3 0 110-6z';
109
+ const SHARE_LINKS = 'M8.59 13.51L15.42 17.49M15.41 6.51L8.59 10.49';
110
+ function shareFilled(nodes, links, strokeWidth) {
111
+ return (jsxs(Fragment, { children: [jsx("path", { d: SHARE_LINKS, stroke: links, strokeWidth: strokeWidth * 2 }), jsx("path", { d: SHARE_NODES, fill: nodes })] }));
112
+ }
86
113
  const NtdShare = /* @__PURE__ */ createIcon({
87
114
  displayName: 'NtdShare',
88
115
  paths: {
89
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "18", cy: "5", r: "3", fill: primaryColor }), jsx("circle", { cx: "6", cy: "12", r: "3", fill: primaryColor }), jsx("circle", { cx: "18", cy: "19", r: "3", fill: primaryColor }), jsx("line", { x1: "8.59", y1: "13.51", x2: "15.42", y2: "17.49", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "15.41", y1: "6.51", x2: "8.59", y2: "10.49", stroke: primaryColor, strokeWidth: strokeWidth })] })),
116
+ solid: ({ primaryColor, strokeWidth }) => shareFilled(primaryColor, primaryColor, strokeWidth),
90
117
  outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "18", cy: "5", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsx("circle", { cx: "6", cy: "12", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsx("circle", { cx: "18", cy: "19", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsx("line", { x1: "8.59", y1: "13.51", x2: "15.42", y2: "17.49", stroke: primaryColor, strokeWidth: strokeWidth * 0.75 }), jsx("line", { x1: "15.41", y1: "6.51", x2: "8.59", y2: "10.49", stroke: primaryColor, strokeWidth: strokeWidth * 0.75 })] })),
91
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "18", cy: "5", r: "3", fill: secondaryColor, opacity: secondaryOpacity }), jsx("circle", { cx: "6", cy: "12", r: "3", fill: secondaryColor, opacity: secondaryOpacity }), jsx("circle", { cx: "18", cy: "19", r: "3", fill: secondaryColor, opacity: secondaryOpacity }), jsx("circle", { cx: "18", cy: "5", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsx("circle", { cx: "6", cy: "12", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsx("circle", { cx: "18", cy: "19", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsx("line", { x1: "8.59", y1: "13.51", x2: "15.42", y2: "17.49", stroke: primaryColor, strokeWidth: strokeWidth * 0.75 }), jsx("line", { x1: "15.41", y1: "6.51", x2: "8.59", y2: "10.49", stroke: primaryColor, strokeWidth: strokeWidth * 0.75 })] })),
92
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "18", cy: "5", r: "3", fill: primaryColor }), jsx("circle", { cx: "18", cy: "5", r: "3", fill: "white", opacity: "0.08" }), jsx("circle", { cx: "6", cy: "12", r: "3", fill: secondaryColor }), jsx("circle", { cx: "18", cy: "19", r: "3", fill: "#3B82F6" }), jsx("line", { x1: "8.59", y1: "13.51", x2: "15.42", y2: "17.49", stroke: "white", strokeWidth: "1" }), jsx("line", { x1: "15.41", y1: "6.51", x2: "8.59", y2: "10.49", stroke: "white", strokeWidth: "1" })] })),
118
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => shareFilled(primaryColor, secondaryColor, strokeWidth),
119
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => shareFilled(primaryColor, secondaryColor, strokeWidth),
93
120
  },
94
121
  });
95
122
  const NtdCopy = /* @__PURE__ */ createIcon({
@@ -101,24 +128,28 @@ const NtdCopy = /* @__PURE__ */ createIcon({
101
128
  vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("rect", { x: "9", y: "9", width: "12", height: "12", rx: "2.5", fill: primaryColor }), jsx("rect", { x: "9", y: "9", width: "12", height: "12", rx: "2.5", fill: "white", opacity: "0.1" }), jsx("path", { d: "M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1", stroke: secondaryColor, strokeWidth: "1.8" })] })),
102
129
  },
103
130
  });
131
+ /** NtdClipboard's two lines of text, high on the board (they sat below its middle). */
132
+ const CLIPBOARD_TEXT = 'M8 11h8M8 14.5h5';
104
133
  const NtdClipboard = /* @__PURE__ */ createIcon({
105
134
  displayName: 'NtdClipboard',
106
135
  paths: {
107
- solid: ({ primaryColor, accentColor, accentOpacity }) => (jsxs(Fragment, { children: [jsx("path", { d: "M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2", fill: primaryColor }), jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", fill: primaryColor, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity }), jsx("line", { x1: "8", y1: "12", x2: "16", y2: "12", stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity }), jsx("line", { x1: "8", y1: "15.5", x2: "13", y2: "15.5", stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity })] })),
108
- outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "8", y1: "12", x2: "16", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "8", y1: "15.5", x2: "13", y2: "15.5", stroke: primaryColor, strokeWidth: strokeWidth })] })),
109
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { x: "4", y: "4", width: "16", height: "18", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: "M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "8", y1: "12", x2: "16", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "8", y1: "15.5", x2: "13", y2: "15.5", stroke: primaryColor, strokeWidth: strokeWidth })] })),
110
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: "M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2", fill: primaryColor }), jsx("path", { d: "M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2", fill: "white", opacity: "0.08" }), jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", fill: secondaryColor, stroke: secondaryColor, strokeWidth: "1.5" }), jsx("line", { x1: "8", y1: "12", x2: "16", y2: "12", stroke: "white", strokeWidth: "1", opacity: "0.4" }), jsx("line", { x1: "8", y1: "15.5", x2: "13", y2: "15.5", stroke: "white", strokeWidth: "1", opacity: "0.4" })] })),
136
+ solid: ({ primaryColor, accentColor, accentOpacity }) => (jsxs(Fragment, { children: [jsx("path", { d: "M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2", fill: primaryColor }), jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", fill: primaryColor, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity }), jsx("path", { d: CLIPBOARD_TEXT, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity })] })),
137
+ outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: CLIPBOARD_TEXT, stroke: primaryColor, strokeWidth: strokeWidth })] })),
138
+ duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { x: "4", y: "4", width: "16", height: "18", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: "M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: CLIPBOARD_TEXT, stroke: primaryColor, strokeWidth: strokeWidth })] })),
139
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => (jsxs(Fragment, { children: [jsx("path", { d: "M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2", fill: primaryColor }), jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", fill: secondaryColor, stroke: secondaryColor, strokeWidth: "1.5" }), jsx("path", { d: CLIPBOARD_TEXT, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity })] })),
111
140
  },
112
141
  });
113
142
  // The stroke glyphs (plus, minus, check, the arrows) are twice the stroke width when filled, so
114
- // `solid` reads bold next to `outline` and still follows `strokeWidth`.
143
+ // `solid` reads bold next to `outline` and still follows `strokeWidth`. Plus, check and close
144
+ // split their two strokes between the colours in duotone and vivid (no backing disc); vivid adds
145
+ // the crossing of the plus and the close in the accent colour.
115
146
  const NtdPlus = /* @__PURE__ */ createIcon({
116
147
  displayName: 'NtdPlus',
117
148
  paths: {
118
149
  solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M12 5v14M5 12h14", stroke: primaryColor, strokeWidth: strokeWidth * 2 })),
119
150
  outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M12 5v14M5 12h14", stroke: primaryColor, strokeWidth: strokeWidth })),
120
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "12", cy: "12", r: "9", fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: "M12 8v8M8 12h8", stroke: primaryColor, strokeWidth: strokeWidth })] })),
121
- vivid: ({ primaryColor, strokeWidth }) => (jsx(Fragment, { children: jsx("path", { d: "M12 5v14M5 12h14", stroke: primaryColor, strokeWidth: strokeWidth * 2 }) })),
151
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M5 12h14", stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsx("path", { d: "M12 5v14", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
152
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M5 12h14", stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsx("path", { d: "M12 5v14", stroke: primaryColor, strokeWidth: strokeWidth * 2 }), jsx("rect", { x: 12 - strokeWidth, y: 12 - strokeWidth, width: strokeWidth * 2, height: strokeWidth * 2, fill: accentColor, opacity: accentOpacity })] })),
122
153
  },
123
154
  });
124
155
  const NtdMinus = /* @__PURE__ */ createIcon({
@@ -135,8 +166,8 @@ const NtdCheck = /* @__PURE__ */ createIcon({
135
166
  paths: {
136
167
  solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M20 6L9 17l-5-5", stroke: primaryColor, strokeWidth: strokeWidth * 2 })),
137
168
  outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M20 6L9 17l-5-5", stroke: primaryColor, strokeWidth: strokeWidth })),
138
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "12", cy: "12", r: "9", fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: "M17 8l-6.5 6.5L7 11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
139
- vivid: ({ primaryColor, strokeWidth }) => (jsx(Fragment, { children: jsx("path", { d: "M20 6L9 17l-5-5", stroke: primaryColor, strokeWidth: strokeWidth * 2 }) })),
169
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9 17l-5-5", stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsx("path", { d: "M20 6L9 17", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
170
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9 17l-5-5", stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsx("path", { d: "M20 6L9 17", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
140
171
  },
141
172
  });
142
173
  const NtdFilter = /* @__PURE__ */ createIcon({
@@ -166,52 +197,38 @@ const NtdPrint = /* @__PURE__ */ createIcon({
166
197
  vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: "M4 9h16a2 2 0 012 2v5a2 2 0 01-2 2H4a2 2 0 01-2-2v-5a2 2 0 012-2z", fill: primaryColor }), jsx("path", { d: "M4 9h16a2 2 0 012 2v5a2 2 0 01-2 2H4a2 2 0 01-2-2v-5a2 2 0 012-2z", fill: "white", opacity: "0.08" }), jsx("path", { d: "M6 9V3h12v6", stroke: secondaryColor, strokeWidth: "2", fill: secondaryColor }), jsx("rect", { x: "6", y: "15", width: "12", height: "7", rx: "1", fill: "#3B82F6" }), jsx("line", { x1: "9", y1: "18", x2: "15", y2: "18", stroke: "white", strokeWidth: "1", opacity: "0.35" })] })),
167
198
  },
168
199
  });
169
- const NtdZoomIn = /* @__PURE__ */ createIcon({
170
- displayName: 'NtdZoomIn',
171
- paths: {
172
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "11", y1: "8", x2: "11", y2: "14", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
173
- outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "11", y1: "8", x2: "11", y2: "14", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
174
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "11", cy: "11", r: "7", fill: secondaryColor, opacity: secondaryOpacity }), jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "11", y1: "8", x2: "11", y2: "14", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
175
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: "2", fill: "none" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: secondaryColor, strokeWidth: "1.8" }), jsx("line", { x1: "11", y1: "8", x2: "11", y2: "14", stroke: "#3B82F6", strokeWidth: "1.5" }), jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: secondaryColor, strokeWidth: "1.5" })] })),
176
- },
177
- });
178
- const NtdZoomOut = /* @__PURE__ */ createIcon({
179
- displayName: 'NtdZoomOut',
180
- paths: {
181
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
182
- outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
183
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "11", cy: "11", r: "7", fill: secondaryColor, opacity: secondaryOpacity }), jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
184
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: "2", fill: "none" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: secondaryColor, strokeWidth: "1.8" }), jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: "#3B82F6", strokeWidth: "1.5" })] })),
185
- },
186
- });
200
+ const NtdZoomIn = /* @__PURE__ */ lensIcon('NtdZoomIn', 'M11 8v6M8 11h6');
201
+ const NtdZoomOut = /* @__PURE__ */ lensIcon('NtdZoomOut', 'M8 11h6');
187
202
  /* NtdUndo / NtdRedo — the old glyph was two arcs of different radii whose ends
188
203
  never met the arrow, which read as a fish rather than a rotation. Redrawn as
189
204
  one semicircular loop (r 5.5 about 13.5,14 — mirrored to 10.5,14 for redo)
190
205
  plus a chevron whose apex lands exactly on the tail start, so the arrow and
191
206
  the tail close. `solid` fills the head so it is no longer byte-identical to
192
207
  `outline`; the tail then starts at the head's back edge (9.5 / 14.5) instead
193
- of the apex, keeping the stroke cap from poking past the tip. */
208
+ of the apex, keeping the stroke cap from poking past the tip — duotone and
209
+ vivid too. Every variant but `outline` draws the tail at twice the stroke
210
+ width. */
194
211
  const NtdUndo = /* @__PURE__ */ createIcon({
195
212
  displayName: 'NtdUndo',
196
213
  paths: {
197
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
214
+ solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
198
215
  outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
199
216
  // Two-tone by PART, not by a backing blob: arrowhead in primary, tail in
200
217
  // secondary, both at full strength. (The old version put a secondary disc
201
218
  // behind the curve, which read as "a ball in the middle"; a washed-out tail
202
219
  // would likewise miss the point — this is a colour split, not an underlay.)
203
- duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: secondaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
204
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: "2.2", fill: "none" }), jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
220
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
221
+ vivid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
205
222
  },
206
223
  });
207
224
  const NtdRedo = /* @__PURE__ */ createIcon({
208
225
  displayName: 'NtdRedo',
209
226
  paths: {
210
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
227
+ solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
211
228
  outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M19 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
212
229
  // Mirror of NtdUndo: arrowhead primary, tail secondary — no backing disc.
213
- duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M19 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: secondaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
214
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: "2.2", fill: "none" }), jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
230
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
231
+ vivid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
215
232
  },
216
233
  });
217
234
  // Reply: the arrow turns back to the left at a right angle (the "corner-up-left" of a message
@@ -225,14 +242,15 @@ const NtdReply = /* @__PURE__ */ createIcon({
225
242
  vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: "M20 18v-2a4 4 0 0 0-4-4H8", stroke: primaryColor, strokeWidth: "2.2", fill: "none" }), jsx("path", { d: "M9 7L4 12l5 5z", fill: primaryColor })] })),
226
243
  },
227
244
  });
245
+ // A line glyph: twice the stroke width in every variant but `outline`.
228
246
  const NtdLink = /* @__PURE__ */ createIcon({
229
247
  displayName: 'NtdLink',
230
248
  paths: {
231
- solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
249
+ solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })),
232
250
  outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
233
251
  // one ring per colour: the right link primary, the left one secondary
234
- duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71", stroke: secondaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
235
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsx(Fragment, { children: jsx("path", { d: "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71", stroke: primaryColor, strokeWidth: "2.2", fill: "none" }) })),
252
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
253
+ vivid: ({ primaryColor, strokeWidth }) => (jsx(Fragment, { children: jsx("path", { d: "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }) })),
236
254
  },
237
255
  });
238
256
  // NtdSettings: a gear whose eight teeth have flat tops, in every variant but `rounded`, which
@@ -254,22 +272,25 @@ const NtdSettings = /* @__PURE__ */ createIcon({
254
272
  vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: `${GEAR}${GEAR_HOLE}`, fillRule: "evenodd", fill: primaryColor }), jsx("path", { d: `${GEAR_HUB}${GEAR_HOLE}`, fillRule: "evenodd", fill: secondaryColor })] })),
255
273
  },
256
274
  });
275
+ // NtdLogIn / NtdLogOut: a line glyph, twice the stroke width in every variant but `outline`. The
276
+ // shaft stops 2 short of the arrowhead's point, so the square caps of `sharp` stay inside it.
277
+ // Duotone and vivid split it like NtdDownload: the arrow primary, the door frame secondary.
257
278
  const NtdLogIn = /* @__PURE__ */ createIcon({
258
279
  displayName: 'NtdLogIn',
259
280
  paths: {
260
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("polyline", { points: "9,17 14,12 9,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "14", y1: "12", x2: "3", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
261
- outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("polyline", { points: "9,17 14,12 9,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "14", y1: "12", x2: "3", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
262
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { x: "15", y: "3", width: "6", height: "18", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("polyline", { points: "9,17 14,12 9,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "14", y1: "12", x2: "3", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
263
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: primaryColor, strokeWidth: "2" }), jsx("polyline", { points: "9,17 14,12 9,7", stroke: secondaryColor, strokeWidth: "1.8", fill: "none" }), jsx("line", { x1: "14", y1: "12", x2: "3", y2: "12", stroke: "#3B82F6", strokeWidth: "1.5" })] })),
281
+ solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M9 7l5 5-5 5M12 12H3", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })),
282
+ outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M9 7l5 5-5 5M14 12H3", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
283
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M9 7l5 5-5 5M12 12H3", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
284
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M9 7l5 5-5 5M12 12H3", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
264
285
  },
265
286
  });
266
287
  const NtdLogOut = /* @__PURE__ */ createIcon({
267
288
  displayName: 'NtdLogOut',
268
289
  paths: {
269
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("polyline", { points: "15,17 20,12 15,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "20", y1: "12", x2: "9", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
270
- outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("polyline", { points: "15,17 20,12 15,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "20", y1: "12", x2: "9", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
271
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { x: "3", y: "3", width: "6", height: "18", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("polyline", { points: "15,17 20,12 15,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "20", y1: "12", x2: "9", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
272
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: primaryColor, strokeWidth: "2" }), jsx("polyline", { points: "15,17 20,12 15,7", stroke: secondaryColor, strokeWidth: "1.8", fill: "none" }), jsx("line", { x1: "20", y1: "12", x2: "9", y2: "12", stroke: "#3B82F6", strokeWidth: "1.5" })] })),
290
+ solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4M15 7l5 5-5 5M18 12H9", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })),
291
+ outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4M15 7l5 5-5 5M20 12H9", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
292
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M15 7l5 5-5 5M18 12H9", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
293
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: "M15 7l5 5-5 5M18 12H9", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
273
294
  },
274
295
  });
275
296
  const NtdLock = /* @__PURE__ */ createIcon({
@@ -3,49 +3,65 @@ import { createIcon } from '../createIcon.js';
3
3
  import { paperIcon, within } from '../iconParts.js';
4
4
 
5
5
  // The band sits halfway down the case and is a cut through it: kept inside the case it meets the
6
- // sides flush (its round caps stuck out of both). A clasp hangs from its middle.
6
+ // sides flush (its round caps stuck out of both). A clasp hangs from its middle: low and wide, in
7
+ // the accent colour like the band on the filled case (secondary in duotone), with a primary lock
8
+ // square in it where it had a slot showing the band through.
7
9
  const BRIEFCASE_CASE = { x: 2, y: 7, width: 20, height: 14, rx: 2 };
8
10
  const BRIEFCASE_HANDLE = 'M16 7V5a2 2 0 00-2-2h-4a2 2 0 00-2 2v2';
9
- /** The clasp over the band, hanging down from it, with its slot (even-odd). */
10
- const BRIEFCASE_CLASP = 'M11.2 11.2h1.6a.8.8 0 01.8.8v3.4a.8.8 0 01-.8.8h-1.6a.8.8 0 01-.8-.8V12a.8.8 0 01.8-.8z';
11
- const BRIEFCASE_SLOT = 'M11.4 13.6h1.2v1.2h-1.2z';
11
+ /** The clasp over the band, hanging down from it. */
12
+ const BRIEFCASE_CLASP = 'M10.6 11.3h2.8a.8.8 0 01.8.8v2.6a.8.8 0 01-.8.8h-2.8a.8.8 0 01-.8-.8v-2.6a.8.8 0 01.8-.8z';
13
+ const BRIEFCASE_LOCK = { x: 11.2, y: 12.6, width: 1.6, height: 1.6 };
12
14
  const NtdBriefcase = /* @__PURE__ */ createIcon({
13
15
  displayName: 'NtdBriefcase',
14
16
  paths: {
15
- solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth, uid }) => (jsxs(Fragment, { children: [jsx("rect", { ...BRIEFCASE_CASE, fill: primaryColor }), jsx("path", { d: BRIEFCASE_HANDLE, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxs("g", { fill: accentColor, opacity: accentOpacity, children: [within(uid, 'band', jsx("rect", { ...BRIEFCASE_CASE }), jsx("line", { x1: "2", y1: "12.5", x2: "22", y2: "12.5", stroke: accentColor, strokeWidth: "1.5" })), jsx("path", { d: `${BRIEFCASE_CLASP}${BRIEFCASE_SLOT}`, fillRule: "evenodd" })] })] })),
17
+ solid: (props) => (jsxs(Fragment, { children: [jsx("rect", { ...BRIEFCASE_CASE, fill: props.primaryColor }), jsx("path", { d: BRIEFCASE_HANDLE, stroke: props.primaryColor, strokeWidth: props.strokeWidth, fill: "none" }), within(props.uid, 'band', jsx("rect", { ...BRIEFCASE_CASE }), jsx("line", { x1: "2", y1: "12.5", x2: "22", y2: "12.5", stroke: props.accentColor, strokeWidth: "1.5", opacity: props.accentOpacity })), jsx("path", { d: BRIEFCASE_CLASP, fill: props.accentColor, opacity: props.accentOpacity }), jsx("rect", { ...BRIEFCASE_LOCK, fill: props.primaryColor })] })),
16
18
  outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { ...BRIEFCASE_CASE, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: BRIEFCASE_HANDLE, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "2", y1: "12.5", x2: "22", y2: "12.5", stroke: primaryColor, strokeWidth: "1.5" }), jsx("path", { d: BRIEFCASE_CLASP, fill: primaryColor })] })),
17
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { ...BRIEFCASE_CASE, fill: secondaryColor, opacity: secondaryOpacity }), jsx("rect", { ...BRIEFCASE_CASE, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: BRIEFCASE_HANDLE, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("line", { x1: "2", y1: "12.5", x2: "22", y2: "12.5", stroke: primaryColor, strokeWidth: "1.5" }), jsx("path", { d: BRIEFCASE_CLASP, fill: primaryColor })] })),
18
- vivid: ({ primaryColor, secondaryColor, uid }) => (jsxs(Fragment, { children: [jsx("rect", { ...BRIEFCASE_CASE, fill: primaryColor }), jsx("rect", { ...BRIEFCASE_CASE, fill: "white", opacity: "0.1" }), jsx("path", { d: BRIEFCASE_HANDLE, stroke: secondaryColor, strokeWidth: "1.8", fill: "none" }), within(uid, 'band', jsx("rect", { ...BRIEFCASE_CASE }), jsx("line", { x1: "2", y1: "12.5", x2: "22", y2: "12.5", stroke: secondaryColor, strokeWidth: "1.5" })), jsx("path", { d: `${BRIEFCASE_CLASP}${BRIEFCASE_SLOT}`, fillRule: "evenodd", fill: secondaryColor })] })),
19
+ // fills only: the case and the handle primary, the band and the clasp secondary
20
+ duotone: ({ primaryColor, secondaryColor, strokeWidth, uid }) => (jsxs(Fragment, { children: [jsx("rect", { ...BRIEFCASE_CASE, fill: primaryColor }), jsx("path", { d: BRIEFCASE_HANDLE, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), within(uid, 'band', jsx("rect", { ...BRIEFCASE_CASE }), jsx("line", { x1: "2", y1: "12.5", x2: "22", y2: "12.5", stroke: secondaryColor, strokeWidth: "1.5" })), jsx("path", { d: BRIEFCASE_CLASP, fill: secondaryColor }), jsx("rect", { ...BRIEFCASE_LOCK, fill: primaryColor })] })),
21
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity, strokeWidth, uid }) => (jsxs(Fragment, { children: [jsx("rect", { ...BRIEFCASE_CASE, fill: primaryColor }), jsx("path", { d: BRIEFCASE_HANDLE, stroke: secondaryColor, strokeWidth: strokeWidth, fill: "none" }), within(uid, 'band', jsx("rect", { ...BRIEFCASE_CASE }), jsx("line", { x1: "2", y1: "12.5", x2: "22", y2: "12.5", stroke: secondaryColor, strokeWidth: "1.5" })), jsx("path", { d: BRIEFCASE_CLASP, fill: accentColor, opacity: accentOpacity }), jsx("rect", { ...BRIEFCASE_LOCK, fill: primaryColor })] })),
19
22
  },
20
23
  });
24
+ // NtdDollar: a line glyph, twice the stroke width in every variant but `outline`; the stem runs
25
+ // 2.5 → 21.5 there, so its caps stay inside the box at that width.
26
+ const DOLLAR_S = 'M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6';
27
+ const DOLLAR_STEM = 'M12 2.5v19';
21
28
  const NtdDollar = /* @__PURE__ */ createIcon({
22
29
  displayName: 'NtdDollar',
23
30
  paths: {
24
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("line", { x1: "12", y1: "1", x2: "12", y2: "23", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("path", { d: "M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
25
- outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("line", { x1: "12", y1: "1", x2: "12", y2: "23", stroke: primaryColor, strokeWidth: strokeWidth }), jsx("path", { d: "M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
26
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6", stroke: secondaryColor, strokeWidth: strokeWidth, fill: "none", opacity: secondaryOpacity + 0.2 }), jsx("line", { x1: "12", y1: "1", x2: "12", y2: "23", stroke: primaryColor, strokeWidth: strokeWidth })] })),
27
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("line", { x1: "12", y1: "1", x2: "12", y2: "23", stroke: primaryColor, strokeWidth: "2" }), jsx("path", { d: "M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6", stroke: secondaryColor, strokeWidth: "2", fill: "none" })] })),
31
+ solid: ({ primaryColor, strokeWidth }) => (jsx("path", { d: `${DOLLAR_STEM}${DOLLAR_S}`, stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })),
32
+ outline: ({ primaryColor, strokeWidth }) => (jsx("path", { d: `M12 1v22${DOLLAR_S}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
33
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: DOLLAR_S, stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: DOLLAR_STEM, stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
34
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: DOLLAR_S, stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsx("path", { d: DOLLAR_STEM, stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
28
35
  },
29
36
  });
37
+ // NtdWallet: a body, the back pocket rising above it on a slant (it runs under the body, so the
38
+ // two meet without a seam — the old top stroke stopped short of the body), and a clasp pocket cut
39
+ // into the right side with its stud. Filled, the pocket is in the accent colour.
40
+ const WALLET_BODY = { x: 2, y: 6.5, width: 20, height: 14.5, rx: 2.5 };
41
+ const WALLET_BACK = 'M4.5 8L16 3.5a1 1 0 011.3.95V8z';
42
+ const WALLET_POCKET = 'M22 10.5h-4.5a2.5 2.5 0 000 5H22z';
43
+ const WALLET_POCKET_LINE = 'M22 10.5h-4.5a2.5 2.5 0 000 5H22';
30
44
  const NtdWallet = /* @__PURE__ */ createIcon({
31
45
  displayName: 'NtdWallet',
32
46
  paths: {
33
- solid: ({ primaryColor, accentColor, accentOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { x: "2", y: "5", width: "20", height: "16", rx: "2", fill: primaryColor }), jsx("path", { d: "M2 5a2 2 0 012-2h12l4 4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("circle", { cx: "18", cy: "13", r: "1.5", fill: accentColor, opacity: accentOpacity })] })),
34
- outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { x: "2", y: "5", width: "20", height: "16", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: "M2 5a2 2 0 012-2h12l4 4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("circle", { cx: "18", cy: "13", r: "1.5", fill: primaryColor })] })),
35
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("rect", { x: "2", y: "5", width: "20", height: "16", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsx("rect", { x: "2", y: "5", width: "20", height: "16", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("circle", { cx: "18", cy: "13", r: "1.5", fill: primaryColor })] })),
36
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("rect", { x: "2", y: "5", width: "20", height: "16", rx: "2", fill: primaryColor }), jsx("rect", { x: "2", y: "5", width: "20", height: "16", rx: "2", fill: "white", opacity: "0.08" }), jsx("circle", { cx: "18", cy: "13", r: "1.5", fill: secondaryColor }), jsx("path", { d: "M2 5a2 2 0 012-2h12l4 4", stroke: "white", strokeWidth: "1", fill: "none" })] })),
47
+ solid: ({ primaryColor, accentColor, accentOpacity, uid }) => (jsxs(Fragment, { children: [jsx("path", { d: WALLET_BACK, fill: primaryColor }), jsx("rect", { ...WALLET_BODY, fill: primaryColor }), within(uid, 'pocket', jsx("rect", { ...WALLET_BODY }), jsx("path", { d: WALLET_POCKET, fill: accentColor, opacity: accentOpacity })), jsx("circle", { cx: "17.6", cy: "13", r: "1.1", fill: primaryColor })] })),
48
+ outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: "M4.5 6.5L16 3.5a1 1 0 011.3.95V6.5", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinejoin: "miter", fill: "none" }), jsx("rect", { ...WALLET_BODY, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: WALLET_POCKET_LINE, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("circle", { cx: "17.6", cy: "13", r: "1.1", fill: primaryColor })] })),
49
+ // fills only: the body primary, the back pocket and the clasp pocket secondary
50
+ duotone: ({ primaryColor, secondaryColor, uid }) => (jsxs(Fragment, { children: [jsx("path", { d: WALLET_BACK, fill: secondaryColor }), jsx("rect", { ...WALLET_BODY, fill: primaryColor }), within(uid, 'pocket', jsx("rect", { ...WALLET_BODY }), jsx("path", { d: WALLET_POCKET, fill: secondaryColor })), jsx("circle", { cx: "17.6", cy: "13", r: "1.1", fill: primaryColor })] })),
51
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity, uid }) => (jsxs(Fragment, { children: [jsx("path", { d: WALLET_BACK, fill: secondaryColor }), jsx("rect", { ...WALLET_BODY, fill: primaryColor }), within(uid, 'pocket', jsx("rect", { ...WALLET_BODY }), jsx("path", { d: WALLET_POCKET, fill: accentColor, opacity: accentOpacity })), jsx("circle", { cx: "17.6", cy: "13", r: "1.1", fill: secondaryColor })] })),
37
52
  },
38
53
  });
39
- // NtdReceipt: two rows of description and amount, then the total on its own on the right.
54
+ // NtdReceipt: two rows of description and amount, then the total on its own on the right. The
55
+ // amounts end at 18.4, right by the edge; the descriptions run 7 → 13.5.
40
56
  const RECEIPT = 'M4 2v20l3-2 3 2 3-2 3 2 3-2 3 2V2H4z';
41
- const RECEIPT_TEXT = 'M7.5 7.5h5M15.5 7.5h2M7.5 11.5h5M15.5 11.5h2M13.5 15.5h4';
57
+ const RECEIPT_TEXT = 'M7 7.5h6.5M16.4 7.5h2M7 11.5h6.5M16.4 11.5h2M14.4 15.5h4';
42
58
  const NtdReceipt = /* @__PURE__ */ createIcon({
43
59
  displayName: 'NtdReceipt',
44
60
  paths: {
45
61
  solid: ({ primaryColor, accentColor, accentOpacity }) => (jsxs(Fragment, { children: [jsx("path", { d: RECEIPT, fill: primaryColor }), jsx("path", { d: RECEIPT_TEXT, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity, fill: "none" })] })),
46
62
  outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: RECEIPT, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: RECEIPT_TEXT, stroke: primaryColor, strokeWidth: "1.5", fill: "none" })] })),
47
63
  duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("path", { d: RECEIPT, fill: secondaryColor, opacity: secondaryOpacity }), jsx("path", { d: RECEIPT, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("path", { d: RECEIPT_TEXT, stroke: primaryColor, strokeWidth: "1.5", fill: "none" })] })),
48
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("path", { d: RECEIPT, fill: primaryColor }), jsx("path", { d: RECEIPT, fill: "white", opacity: "0.1" }), jsx("path", { d: RECEIPT_TEXT, stroke: "white", strokeOpacity: "0.9", strokeWidth: "1.5", fill: "none" }), jsx("path", { d: "M13.5 15.5h4", stroke: secondaryColor, strokeWidth: "1.8" })] })),
64
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => (jsxs(Fragment, { children: [jsx("path", { d: RECEIPT, fill: primaryColor }), jsx("path", { d: RECEIPT_TEXT, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity, fill: "none" }), jsx("path", { d: "M14.4 15.5h4", stroke: secondaryColor, strokeWidth: "1.8" })] })),
49
65
  },
50
66
  });
51
67
  const NtdBank = /* @__PURE__ */ createIcon({
@@ -57,22 +73,43 @@ const NtdBank = /* @__PURE__ */ createIcon({
57
73
  vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("polygon", { points: "12,2 2,9 22,9", fill: primaryColor }), jsx("polygon", { points: "12,2 2,9 22,9", fill: "white", opacity: "0.08" }), jsx("rect", { x: "2", y: "18", width: "20", height: "2", rx: "0.5", fill: secondaryColor }), jsx("rect", { x: "5", y: "9", width: "2", height: "9", fill: "#3B82F6" }), jsx("rect", { x: "9", y: "9", width: "2", height: "9", fill: "#10B981" }), jsx("rect", { x: "13", y: "9", width: "2", height: "9", fill: "#F59E0B" }), jsx("rect", { x: "17", y: "9", width: "2", height: "9", fill: "#F59E0B" })] })),
58
74
  },
59
75
  });
76
+ // NtdTrendUp / NtdTrendDown: line glyphs, twice the stroke width in every variant but `outline`,
77
+ // drawn 2 in from the box at that width. The line's last leg stops 0.35 × the line width short of
78
+ // the head's corner on each axis — run into the corner, its square cap stuck out in `sharp`.
79
+ function trendUp(back) {
80
+ return { line: `M3 16l5-5 4 4L${21 - back} ${6 + back}`, head: 'M15 6h6v6' };
81
+ }
82
+ function trendDown(back) {
83
+ return { line: `M3 8l5 5 4-4L${21 - back} ${18 - back}`, head: 'M15 18h6v-6' };
84
+ }
85
+ function trendArrow(shape, line, head, strokeWidth) {
86
+ const width = strokeWidth * 2;
87
+ const s = shape(width * 0.35);
88
+ return (jsxs(Fragment, { children: [jsx("path", { d: s.line, stroke: line, strokeWidth: width, fill: "none" }), jsx("path", { d: s.head, stroke: head, strokeWidth: width, fill: "none" })] }));
89
+ }
90
+ function trendOutline(shape) {
91
+ return ({ primaryColor, strokeWidth }) => {
92
+ const s = shape(0);
93
+ return (jsx("path", { d: `${s.line}${s.head}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }));
94
+ };
95
+ }
60
96
  const NtdTrendUp = /* @__PURE__ */ createIcon({
61
97
  displayName: 'NtdTrendUp',
62
98
  paths: {
63
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("polyline", { points: "23,6 13.5,15.5 8.5,10.5 1,18", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("polyline", { points: "17,6 23,6 23,12", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
64
- outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("polyline", { points: "23,6 13.5,15.5 8.5,10.5 1,18", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("polyline", { points: "17,6 23,6 23,12", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
65
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("polyline", { points: "23,6 13.5,15.5 8.5,10.5 1,18", stroke: secondaryColor, strokeWidth: strokeWidth, fill: "none", opacity: secondaryOpacity + 0.3 }), jsx("polyline", { points: "17,6 23,6 23,12", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
66
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("polyline", { points: "23,6 13.5,15.5 8.5,10.5 1,18", stroke: primaryColor, strokeWidth: "2", fill: "none" }), jsx("polyline", { points: "17,6 23,6 23,12", stroke: secondaryColor, strokeWidth: "2", fill: "none" })] })),
99
+ solid: ({ primaryColor, strokeWidth }) => trendArrow(trendUp, primaryColor, primaryColor, strokeWidth),
100
+ outline: trendOutline(trendUp),
101
+ // the line secondary, the head primary
102
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => trendArrow(trendUp, secondaryColor, primaryColor, strokeWidth),
103
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => trendArrow(trendUp, primaryColor, secondaryColor, strokeWidth),
67
104
  },
68
105
  });
69
106
  const NtdTrendDown = /* @__PURE__ */ createIcon({
70
107
  displayName: 'NtdTrendDown',
71
108
  paths: {
72
- solid: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("polyline", { points: "23,18 13.5,8.5 8.5,13.5 1,6", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("polyline", { points: "17,18 23,18 23,12", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
73
- outline: ({ primaryColor, strokeWidth }) => (jsxs(Fragment, { children: [jsx("polyline", { points: "23,18 13.5,8.5 8.5,13.5 1,6", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsx("polyline", { points: "17,18 23,18 23,12", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
74
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxs(Fragment, { children: [jsx("polyline", { points: "23,18 13.5,8.5 8.5,13.5 1,6", stroke: secondaryColor, strokeWidth: strokeWidth, fill: "none", opacity: secondaryOpacity + 0.3 }), jsx("polyline", { points: "17,18 23,18 23,12", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
75
- vivid: ({ primaryColor, secondaryColor }) => (jsxs(Fragment, { children: [jsx("polyline", { points: "23,18 13.5,8.5 8.5,13.5 1,6", stroke: primaryColor, strokeWidth: "2", fill: "none" }), jsx("polyline", { points: "17,18 23,18 23,12", stroke: secondaryColor, strokeWidth: "2", fill: "none" })] })),
109
+ solid: ({ primaryColor, strokeWidth }) => trendArrow(trendDown, primaryColor, primaryColor, strokeWidth),
110
+ outline: trendOutline(trendDown),
111
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => trendArrow(trendDown, secondaryColor, primaryColor, strokeWidth),
112
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => trendArrow(trendDown, primaryColor, secondaryColor, strokeWidth),
76
113
  },
77
114
  });
78
115
  // NtdPercent: the dots are rings in every variant, a hole in each (they were plain discs when
@@ -89,8 +126,8 @@ const NtdPercent = /* @__PURE__ */ createIcon({
89
126
  },
90
127
  });
91
128
  // NtdInvoice: NtdFile's page with a short title, two rows of item and amount, and the total on
92
- // its own at the bottom right, as on a receipt.
93
- const NtdInvoice = /* @__PURE__ */ paperIcon('NtdInvoice', 'M7.5 7h2.5M7.5 12.5h3.3M13.8 12.5h2.7M7.5 15.5h3.3M13.8 15.5h2.7M12.5 19h4');
129
+ // its own at the bottom right, as on a receipt: the items from 7 to 11.5, the amounts out to 17.
130
+ const NtdInvoice = /* @__PURE__ */ paperIcon('NtdInvoice', 'M7 7h3M7 12.5h4.5M14.3 12.5h2.7M7 15.5h4.5M14.3 15.5h2.7M13 19h4');
94
131
  /** @deprecated A second invoice next to {@link NtdInvoice} — use that. */
95
132
  const NtdInvoiceDoc = NtdInvoice;
96
133
  const NtdStore = /* @__PURE__ */ createIcon({