@nice2dev/icons 1.3.1 → 1.3.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 (38) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/dist/cjs/createIcon.js +0 -1
  3. package/dist/cjs/iconParts.js +33 -1
  4. package/dist/cjs/icons/actions.js +74 -61
  5. package/dist/cjs/icons/business.js +63 -27
  6. package/dist/cjs/icons/education.js +31 -11
  7. package/dist/cjs/icons/files.js +55 -17
  8. package/dist/cjs/icons/media.js +51 -20
  9. package/dist/cjs/icons/navigation.js +24 -7
  10. package/dist/cjs/icons/omniverk.js +2 -1
  11. package/dist/cjs/icons/realestate.js +45 -10
  12. package/dist/cjs/icons/science.js +10 -6
  13. package/dist/cjs/icons/shapes.js +30 -8
  14. package/dist/cjs/icons/social.js +3 -9
  15. package/dist/cjs/icons/travel.js +20 -4
  16. package/dist/cjs/icons/ui.js +41 -35
  17. package/dist/cjs/icons/weather.js +5 -4
  18. package/dist/cjs/nicetodev-icons.css +1 -1
  19. package/dist/esm/createIcon.js +0 -1
  20. package/dist/esm/iconParts.js +33 -3
  21. package/dist/esm/icons/actions.js +76 -63
  22. package/dist/esm/icons/business.js +64 -28
  23. package/dist/esm/icons/education.js +31 -11
  24. package/dist/esm/icons/files.js +55 -17
  25. package/dist/esm/icons/media.js +51 -20
  26. package/dist/esm/icons/navigation.js +24 -7
  27. package/dist/esm/icons/omniverk.js +2 -1
  28. package/dist/esm/icons/realestate.js +45 -10
  29. package/dist/esm/icons/science.js +10 -6
  30. package/dist/esm/icons/shapes.js +30 -8
  31. package/dist/esm/icons/social.js +3 -9
  32. package/dist/esm/icons/travel.js +20 -4
  33. package/dist/esm/icons/ui.js +42 -36
  34. package/dist/esm/icons/weather.js +5 -4
  35. package/dist/esm/nicetodev-icons.css +1 -1
  36. package/dist/types/iconParts.d.ts +13 -1
  37. package/dist/types/types.d.ts +4 -0
  38. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,92 @@
1
1
  # @nice2dev/icons — Changelog
2
2
 
3
+ ## 1.3.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 54a632e: Icon browser feedback, round 32:
8
+
9
+ - Line glyphs are twice the stroke width in every variant but `outline`: `NtdSearch`,
10
+ `NtdZoomIn`, `NtdZoomOut`, `NtdUndo`, `NtdRedo` (the tail; the head is unchanged), `NtdLink`,
11
+ `NtdLogIn`, `NtdLogOut`, and the stands of `NtdMicrophone` and `NtdMicrophoneOff`. The
12
+ microphones sit a little higher so the base stays inside the box. `NtdMicrophoneOff` keeps a gap
13
+ around its slash. `NtdGlobe`'s grid is twice as thick in the filled variants, but stays thin in
14
+ `outline`, `wireframe`, `duotone` and `cutout`.
15
+ - Shared sources: `NtdSearch`, `NtdZoomIn` and `NtdZoomOut` share one magnifier. `NtdBell` and
16
+ `NtdBellRing` share one bell, whose clapper is now a large half disc.
17
+ - Duotone (and vivid where noted) splits colours by part, with no backing disc or outline ring:
18
+ - `NtdPlus`, `NtdCheck`, `NtdClose`: the two strokes in different colours. Vivid adds the
19
+ crossing of the plus and the close in the accent colour.
20
+ - `NtdDownload`, `NtdUpload`, `NtdLogIn`, `NtdLogOut`: the arrow in primary, the tray or door
21
+ frame in secondary.
22
+ - `NtdChat`: the tail in secondary.
23
+ - `NtdFolder`: the tab in secondary.
24
+ - `NtdVideo`: the lens in secondary.
25
+ - `NtdUser`, `NtdAdmin`: the shoulders in secondary.
26
+ - `NtdLab`: vivid without the bubbles.
27
+ - `NtdApartment`: the windows and door in secondary.
28
+ - `NtdBriefcase`: the band and clasp in secondary.
29
+ - `NtdEye`: the eye in secondary.
30
+ - Filled variants:
31
+ - `NtdCalendar`: the header and rings in secondary over a primary sheet, the line between them
32
+ raised a little.
33
+ - `NtdSave`: the shutter and label in secondary.
34
+ - `NtdAward`: the ribbon filled in secondary.
35
+ - `NtdBriefcase`: a lower, wider clasp in secondary, and in the accent colour in vivid.
36
+ - `NtdPackage`: primary walls with accent edges, replacing the fixed 15% tint.
37
+ - `NtdApartment`: windows and door drawn as accent frames.
38
+ - `NtdEye`: a larger secondary pupil inside a thinner accent ring.
39
+ - Shapes:
40
+ - `NtdAdmin`: a longer tie that runs to the bottom edge.
41
+ - `NtdGarage`: three door panels of equal height, and square bottom corners in `sharp`.
42
+ - `NtdBook`: the pages set in from the cover's right edge.
43
+ - `NtdClipboard`: the lines of text sit higher.
44
+ - `NtdReceipt` and `NtdInvoice`: amounts further right, longer descriptions.
45
+ - `NtdSave` in `outline`: a larger shutter and window.
46
+ - `NtdDatabase` in `wireframe`: the outline's construction (it showed the gap bands as double
47
+ arcs).
48
+ - Hardcoded colours (`#3B82F6`, `#8B5CF6`, `#CBD5E1`, white overlays) are gone from the vivid
49
+ variants touched here.
50
+ - The cutout mask now renders `paths.solid` with `variant: 'cutout'` (the RSC renderer already
51
+ did), so a renderer can keep details visible in the cut.
52
+
53
+ - 9628cdc: Icon browser feedback, round 33:
54
+
55
+ - Heavier line glyphs in every variant but `outline`:
56
+ - twice the stroke width: `NtdDollar`, `NtdTrendUp`, `NtdTrendDown`, `NtdMaximize`,
57
+ `NtdMinimize`, `NtdRefresh`, and the pins of `NtdCpu`;
58
+ - 1.5 times: `NtdWifi` (its arcs are now concentric about the dot) and `NtdList` (its dots
59
+ are larger too).
60
+ - Arrow shafts stop short of their head's corner, so nothing sticks out in `sharp`.
61
+ - `NtdRefresh` is redrawn as two arcs with filled heads.
62
+ - Colours:
63
+ - `NtdEye`: a larger pupil, primary in the filled variants and secondary in duotone and
64
+ vivid, ringed in the accent colour.
65
+ - `NtdAtom`: the nucleus is primary when filled and secondary in duotone and vivid; vivid
66
+ adds an accent glow to the orbits.
67
+ - `NtdMountain`: the snow is secondary again.
68
+ - `NtdHeart`: duotone swaps its colours; vivid splits the heart in two with an accent seam.
69
+ - `NtdMenu`: the middle bar is secondary in duotone and vivid.
70
+ - `NtdCpu`: primary body, accent die (it had a fixed tint).
71
+ - `NtdApartment`: windows and door filled in the accent colour.
72
+ - `NtdCalculator`: accent display and key outlines (they were a fixed white).
73
+ - `NtdNotebook`: accent writing, shorter rings, fills-only duotone.
74
+ - Shapes:
75
+ - `NtdDatabase`: three discs of equal height.
76
+ - `NtdBook`: pages set further in from the cover's right edge.
77
+ - `NtdAward`: a smaller secondary inside on the ribbon.
78
+ - `NtdReceipt`: amounts further right.
79
+ - `NtdBus`: a side view with a passenger in the window.
80
+ - `NtdWallet`: redrawn — body, back pocket and clasp pocket.
81
+ - Outline and wireframe:
82
+ - `NtdSave`: the outline draws the wireframe's construction.
83
+ - `NtdGarage`: the wireframe takes the outline's evenly spaced door slats.
84
+ - Hardcoded colours (`#3B82F6`, `#8B5CF6`, `#F59E0B`, white) are gone from the touched icons.
85
+
86
+ ## 1.3.2
87
+
88
+ No changes in this release.
89
+
3
90
  ## 1.3.1
4
91
 
5
92
  No changes in this release.
@@ -225,7 +225,6 @@ function createIcon(options) {
225
225
  const iconContent = variant === 'mini' ? (jsxRuntime.jsx("g", { transform: `translate(${center.x} ${center.y}) scale(${sharpen.MINI_SCALE}) translate(${-center.x} ${-center.y})`, children: rendered })) : (rendered);
226
226
  return (jsxRuntime.jsxs("svg", { ref: ref, xmlns: "http://www.w3.org/2000/svg", viewBox: viewBox, width: resolvedSize, height: resolvedSize, fill: "none", strokeLinecap: strokeLinecap, strokeLinejoin: strokeLinejoin, className: classes, style: animStyle, role: title ? 'img' : 'presentation', "aria-hidden": title ? undefined : true, "aria-label": title, ...rest, children: [title && jsxRuntime.jsx("title", { children: title }), gradient && (jsxRuntime.jsx("defs", { children: renderGradientDef(gradId, gradient, gradientType, gradientAngle, gradientAnimation) })), is3d && jsxRuntime.jsx("defs", { children: render3dFilterDef(filterId) }), isCutout && (jsxRuntime.jsx("defs", { children: jsxRuntime.jsxs("mask", { id: maskId, children: [jsxRuntime.jsx("rect", { x: "0", y: "0", width: "24", height: "24", fill: "white" }), jsxRuntime.jsx("g", { transform: "translate(12,12) scale(0.8) translate(-12,-12)", children: paths.solid({
227
227
  ...renderProps,
228
- variant: 'solid',
229
228
  primaryColor: 'black',
230
229
  secondaryColor: 'black',
231
230
  accentColor: 'white',
@@ -3,6 +3,14 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var createIcon = require('./createIcon.js');
5
5
 
6
+ /**
7
+ * The colour of a detail drawn in secondary on a filled shape (a floppy's label, a ribbon): the
8
+ * secondary colour, but the accent colour in the cutout's mask — there secondary is cut out with
9
+ * the shape and the detail would vanish, while the accent draws in the cut.
10
+ */
11
+ function detailColor({ variant, secondaryColor, accentColor }) {
12
+ return variant === 'cutout' ? accentColor : secondaryColor;
13
+ }
6
14
  /**
7
15
  * `content` drawn only inside `shape` — for accent lines that read as a cut through a shape (a
8
16
  * pencil's band, a calendar's header line, an envelope's flap): clipped, they meet the shape's
@@ -19,6 +27,28 @@ function within(uid, name, shape, content) {
19
27
  const id = `${uid}${name}`;
20
28
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("clipPath", { id: id, children: shape }), jsxRuntime.jsx("g", { clipPath: `url(#${id})`, children: content })] }));
21
29
  }
30
+ const BELL = 'M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9z';
31
+ /** The clapper: a half disc r 3 under the bell (it was a thin arc). */
32
+ const BELL_CLAPPER = 'M9 18.5h6a3 3 0 01-6 0z';
33
+ const BELL_CLAPPER_LINE = 'M9 19a3 3 0 006 0';
34
+ /** NtdBellRing's ring marks, either side of the crown. */
35
+ const BELL_RINGS = 'M2 4l1.5 1.5M22 4l-1.5 1.5';
36
+ /**
37
+ * NtdBell and NtdBellRing, so the two share one bell; `ringing` adds the ring marks. Duotone and
38
+ * vivid are fills only: the bell primary, the clapper (and the marks) secondary.
39
+ */
40
+ function bellIcon(displayName, ringing) {
41
+ const parts = ({ primaryColor, secondaryColor, strokeWidth }, detail) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: BELL, fill: primaryColor }), jsxRuntime.jsx("path", { d: BELL_CLAPPER, fill: detail }), ringing && jsxRuntime.jsx("path", { d: BELL_RINGS, stroke: secondaryColor, strokeWidth: strokeWidth })] }));
42
+ return createIcon.createIcon({
43
+ displayName,
44
+ paths: {
45
+ solid: (props) => parts(props, props.primaryColor),
46
+ outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: `${BELL}${BELL_CLAPPER_LINE}${ringing ? BELL_RINGS : ''}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
47
+ duotone: (props) => parts(props, props.secondaryColor),
48
+ vivid: (props) => parts(props, props.secondaryColor),
49
+ },
50
+ });
51
+ }
22
52
  /** The page of every paper icon: 16 × 20, its top-right corner folded over 8. */
23
53
  const PAPER = 'M12 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V10z';
24
54
  const PAPER_FOLD = 'M12 2v6a2 2 0 002 2h6z';
@@ -28,7 +58,7 @@ const PAPER_FOLD_SHARP = 'M12 2v8h8z';
28
58
  /**
29
59
  * A paper icon — NtdFile, and every document drawn on the same page (NtdFileText, NtdInvoice,
30
60
  * NtdContract, …), so their pages and folds match. The fold is secondary when the page is filled;
31
- * `text` is the document's writing, a path of strokes kept below the fold (y ≥ 11, x 7.5–16.5),
61
+ * `text` is the document's writing, a path of strokes kept below the fold (y ≥ 11, x 7–17),
32
62
  * drawn in the accent colour on a filled page and in primary on a stroked one.
33
63
  */
34
64
  function paperIcon(displayName, text = '') {
@@ -45,5 +75,7 @@ function paperIcon(displayName, text = '') {
45
75
  });
46
76
  }
47
77
 
78
+ exports.bellIcon = bellIcon;
79
+ exports.detailColor = detailColor;
48
80
  exports.paperIcon = paperIcon;
49
81
  exports.within = within;
@@ -4,15 +4,26 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var createIcon = require('../createIcon.js');
5
5
  var iconParts = require('../iconParts.js');
6
6
 
7
- const NtdSearch = /* @__PURE__ */ createIcon.createIcon({
8
- displayName: 'NtdSearch',
9
- paths: {
10
- solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.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
- outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.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" })),
12
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "7", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.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" })] })),
13
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.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" }) })),
14
- },
15
- });
7
+ /** The magnifier's lens (r 8 about 11,11) and its handle. */
8
+ const LENS = 'M11 19a8 8 0 100-16 8 8 0 000 16z';
9
+ const LENS_HANDLE = 'M21 21l-4.35-4.35';
10
+ /**
11
+ * The magnifier of NtdSearch, NtdZoomIn and NtdZoomOut, so the three share one lens and handle;
12
+ * `glyph` is drawn inside the lens. A line glyph: twice the stroke width in every variant but
13
+ * `outline`. Duotone fills the lens in secondary, vivid draws the handle and the glyph in it.
14
+ */
15
+ function lensIcon(displayName, glyph = '') {
16
+ return createIcon.createIcon({
17
+ displayName,
18
+ paths: {
19
+ solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: `${LENS_HANDLE}${LENS}${glyph}`, stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })),
20
+ outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: `${LENS_HANDLE}${LENS}${glyph}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
21
+ duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: LENS, fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("path", { d: `${LENS_HANDLE}${LENS}${glyph}`, stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
22
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: LENS, stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: `${LENS_HANDLE}${glyph}`, stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
23
+ },
24
+ });
25
+ }
26
+ const NtdSearch = /* @__PURE__ */ lensIcon('NtdSearch');
16
27
  const EDIT_PENCIL = 'M17 3a2.828 2.828 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z';
17
28
  const NtdEdit = /* @__PURE__ */ createIcon.createIcon({
18
29
  displayName: 'NtdEdit',
@@ -55,16 +66,22 @@ const FLOPPY_BODY = 'M5 3h11.6L21 7.4V19a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012
55
66
  /** The shutter with its window cut out (even-odd). */
56
67
  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';
57
68
  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';
69
+ /** The label's top band — vivid's third colour. */
70
+ const FLOPPY_LABEL_BAND = 'M5.8 13.2h12.4v-1.6a1 1 0 00-1-1H6.8a1 1 0 00-1 1z';
58
71
  const NtdSave = /* @__PURE__ */ createIcon.createIcon({
59
72
  displayName: 'NtdSave',
60
73
  paths: {
61
- solid: ({ primaryColor, accentColor, accentOpacity }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: FLOPPY_BODY, fill: primaryColor }), jsxRuntime.jsxs("g", { fill: accentColor, opacity: accentOpacity, children: [jsxRuntime.jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd" }), jsxRuntime.jsx("path", { d: FLOPPY_LABEL })] })] })),
62
- outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: `${FLOPPY_BODY}M7.5 3v4h8V3M12.6 4.8v1${FLOPPY_LABEL}`, stroke: primaryColor, strokeWidth: strokeWidth, strokeLinejoin: "round", fill: "none" })),
74
+ // the shutter and the label in secondary (the accent is usually black or the page colour)
75
+ solid: (props) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: FLOPPY_BODY, fill: props.primaryColor }), jsxRuntime.jsxs("g", { fill: iconParts.detailColor(props), children: [jsxRuntime.jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd" }), jsxRuntime.jsx("path", { d: FLOPPY_LABEL })] })] })),
76
+ // the wireframe's construction — body, shutter with its window, label — at the stroke width
77
+ outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: `${FLOPPY_BODY}${FLOPPY_SHUTTER}${FLOPPY_LABEL}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
63
78
  // fills only: the body secondary, the shutter and the label primary
64
79
  duotone: ({ primaryColor, secondaryColor, secondaryOpacity }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: FLOPPY_BODY, fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsxs("g", { fill: primaryColor, children: [jsxRuntime.jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd" }), jsxRuntime.jsx("path", { d: FLOPPY_LABEL })] })] })),
65
- vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: FLOPPY_BODY, fill: primaryColor }), jsxRuntime.jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd", fill: "#CBD5E1" }), jsxRuntime.jsx("path", { d: FLOPPY_LABEL, fill: "white" }), jsxRuntime.jsx("path", { d: "M5.8 13.2h12.4v-1.6a1 1 0 00-1-1H6.8a1 1 0 00-1 1z", fill: secondaryColor })] })),
80
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: FLOPPY_BODY, fill: primaryColor }), jsxRuntime.jsxs("g", { fill: secondaryColor, children: [jsxRuntime.jsx("path", { d: FLOPPY_SHUTTER, fillRule: "evenodd" }), jsxRuntime.jsx("path", { d: FLOPPY_LABEL })] }), jsxRuntime.jsx("path", { d: FLOPPY_LABEL_BAND, fill: accentColor, opacity: accentOpacity })] })),
66
81
  },
67
82
  });
83
+ /** The tray of NtdDownload and NtdUpload. */
84
+ const TRAY = 'M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4';
68
85
  // The shaft stops 2 short of the arrowhead's point: with the square caps of `sharp`, a shaft that
69
86
  // ran to the point stuck out of it.
70
87
  const NtdDownload = /* @__PURE__ */ createIcon.createIcon({
@@ -72,8 +89,9 @@ const NtdDownload = /* @__PURE__ */ createIcon.createIcon({
72
89
  paths: {
73
90
  solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.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 })),
74
91
  outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.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 })),
75
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "3", y: "15", width: "18", height: "6", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.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 })] })),
76
- vivid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.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 }) })),
92
+ // the arrow primary, the tray secondary — a colour split, no filled tray
93
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: TRAY, stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("path", { d: "M7 10l5 5 5-5M12 13V3", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
94
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: TRAY, stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("path", { d: "M7 10l5 5 5-5M12 13V3", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
77
95
  },
78
96
  });
79
97
  const NtdUpload = /* @__PURE__ */ createIcon.createIcon({
@@ -81,8 +99,9 @@ const NtdUpload = /* @__PURE__ */ createIcon.createIcon({
81
99
  paths: {
82
100
  solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.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 })),
83
101
  outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.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 })),
84
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "3", y: "15", width: "18", height: "6", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.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 })] })),
85
- vivid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.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 }) })),
102
+ // as NtdDownload: the arrow primary, the tray secondary
103
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: TRAY, stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("path", { d: "M17 8l-5-5-5 5M12 5v10", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
104
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: TRAY, stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("path", { d: "M17 8l-5-5-5 5M12 5v10", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
86
105
  },
87
106
  });
88
107
  const NtdShare = /* @__PURE__ */ createIcon.createIcon({
@@ -103,24 +122,28 @@ const NtdCopy = /* @__PURE__ */ createIcon.createIcon({
103
122
  vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "9", y: "9", width: "12", height: "12", rx: "2.5", fill: primaryColor }), jsxRuntime.jsx("rect", { x: "9", y: "9", width: "12", height: "12", rx: "2.5", fill: "white", opacity: "0.1" }), jsxRuntime.jsx("path", { d: "M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1", stroke: secondaryColor, strokeWidth: "1.8" })] })),
104
123
  },
105
124
  });
125
+ /** NtdClipboard's two lines of text, high on the board (they sat below its middle). */
126
+ const CLIPBOARD_TEXT = 'M8 11h8M8 14.5h5';
106
127
  const NtdClipboard = /* @__PURE__ */ createIcon.createIcon({
107
128
  displayName: 'NtdClipboard',
108
129
  paths: {
109
- solid: ({ primaryColor, accentColor, accentOpacity }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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 }), jsxRuntime.jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", fill: primaryColor, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity }), jsxRuntime.jsx("line", { x1: "8", y1: "12", x2: "16", y2: "12", stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity }), jsxRuntime.jsx("line", { x1: "8", y1: "15.5", x2: "13", y2: "15.5", stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity })] })),
110
- outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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" }), jsxRuntime.jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "8", y1: "12", x2: "16", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "8", y1: "15.5", x2: "13", y2: "15.5", stroke: primaryColor, strokeWidth: strokeWidth })] })),
111
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "4", width: "16", height: "18", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.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" }), jsxRuntime.jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "8", y1: "12", x2: "16", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "8", y1: "15.5", x2: "13", y2: "15.5", stroke: primaryColor, strokeWidth: strokeWidth })] })),
112
- vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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 }), jsxRuntime.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" }), jsxRuntime.jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", fill: secondaryColor, stroke: secondaryColor, strokeWidth: "1.5" }), jsxRuntime.jsx("line", { x1: "8", y1: "12", x2: "16", y2: "12", stroke: "white", strokeWidth: "1", opacity: "0.4" }), jsxRuntime.jsx("line", { x1: "8", y1: "15.5", x2: "13", y2: "15.5", stroke: "white", strokeWidth: "1", opacity: "0.4" })] })),
130
+ solid: ({ primaryColor, accentColor, accentOpacity }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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 }), jsxRuntime.jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", fill: primaryColor, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity }), jsxRuntime.jsx("path", { d: CLIPBOARD_TEXT, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity })] })),
131
+ outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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" }), jsxRuntime.jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: CLIPBOARD_TEXT, stroke: primaryColor, strokeWidth: strokeWidth })] })),
132
+ duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "4", width: "16", height: "18", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.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" }), jsxRuntime.jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: CLIPBOARD_TEXT, stroke: primaryColor, strokeWidth: strokeWidth })] })),
133
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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 }), jsxRuntime.jsx("rect", { x: "8", y: "2", width: "8", height: "3.5", rx: "1.5", fill: secondaryColor, stroke: secondaryColor, strokeWidth: "1.5" }), jsxRuntime.jsx("path", { d: CLIPBOARD_TEXT, stroke: accentColor, strokeWidth: "1.5", opacity: accentOpacity })] })),
113
134
  },
114
135
  });
115
136
  // The stroke glyphs (plus, minus, check, the arrows) are twice the stroke width when filled, so
116
- // `solid` reads bold next to `outline` and still follows `strokeWidth`.
137
+ // `solid` reads bold next to `outline` and still follows `strokeWidth`. Plus, check and close
138
+ // split their two strokes between the colours in duotone and vivid (no backing disc); vivid adds
139
+ // the crossing of the plus and the close in the accent colour.
117
140
  const NtdPlus = /* @__PURE__ */ createIcon.createIcon({
118
141
  displayName: 'NtdPlus',
119
142
  paths: {
120
143
  solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: "M12 5v14M5 12h14", stroke: primaryColor, strokeWidth: strokeWidth * 2 })),
121
144
  outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: "M12 5v14M5 12h14", stroke: primaryColor, strokeWidth: strokeWidth })),
122
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "9", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("path", { d: "M12 8v8M8 12h8", stroke: primaryColor, strokeWidth: strokeWidth })] })),
123
- vivid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx("path", { d: "M12 5v14M5 12h14", stroke: primaryColor, strokeWidth: strokeWidth * 2 }) })),
145
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M5 12h14", stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("path", { d: "M12 5v14", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
146
+ vivid: ({ primaryColor, secondaryColor, accentColor, accentOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M5 12h14", stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("path", { d: "M12 5v14", stroke: primaryColor, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("rect", { x: 12 - strokeWidth, y: 12 - strokeWidth, width: strokeWidth * 2, height: strokeWidth * 2, fill: accentColor, opacity: accentOpacity })] })),
124
147
  },
125
148
  });
126
149
  const NtdMinus = /* @__PURE__ */ createIcon.createIcon({
@@ -137,8 +160,8 @@ const NtdCheck = /* @__PURE__ */ createIcon.createIcon({
137
160
  paths: {
138
161
  solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: "M20 6L9 17l-5-5", stroke: primaryColor, strokeWidth: strokeWidth * 2 })),
139
162
  outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: "M20 6L9 17l-5-5", stroke: primaryColor, strokeWidth: strokeWidth })),
140
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "9", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("path", { d: "M17 8l-6.5 6.5L7 11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
141
- vivid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx("path", { d: "M20 6L9 17l-5-5", stroke: primaryColor, strokeWidth: strokeWidth * 2 }) })),
163
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9 17l-5-5", stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("path", { d: "M20 6L9 17", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
164
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9 17l-5-5", stroke: secondaryColor, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("path", { d: "M20 6L9 17", stroke: primaryColor, strokeWidth: strokeWidth * 2 })] })),
142
165
  },
143
166
  });
144
167
  const NtdFilter = /* @__PURE__ */ createIcon.createIcon({
@@ -168,52 +191,38 @@ const NtdPrint = /* @__PURE__ */ createIcon.createIcon({
168
191
  vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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 }), jsxRuntime.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" }), jsxRuntime.jsx("path", { d: "M6 9V3h12v6", stroke: secondaryColor, strokeWidth: "2", fill: secondaryColor }), jsxRuntime.jsx("rect", { x: "6", y: "15", width: "12", height: "7", rx: "1", fill: "#3B82F6" }), jsxRuntime.jsx("line", { x1: "9", y1: "18", x2: "15", y2: "18", stroke: "white", strokeWidth: "1", opacity: "0.35" })] })),
169
192
  },
170
193
  });
171
- const NtdZoomIn = /* @__PURE__ */ createIcon.createIcon({
172
- displayName: 'NtdZoomIn',
173
- paths: {
174
- solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "11", y1: "8", x2: "11", y2: "14", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
175
- outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "11", y1: "8", x2: "11", y2: "14", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
176
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "7", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "11", y1: "8", x2: "11", y2: "14", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
177
- vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: "2", fill: "none" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: secondaryColor, strokeWidth: "1.8" }), jsxRuntime.jsx("line", { x1: "11", y1: "8", x2: "11", y2: "14", stroke: "#3B82F6", strokeWidth: "1.5" }), jsxRuntime.jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: secondaryColor, strokeWidth: "1.5" })] })),
178
- },
179
- });
180
- const NtdZoomOut = /* @__PURE__ */ createIcon.createIcon({
181
- displayName: 'NtdZoomOut',
182
- paths: {
183
- solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
184
- outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
185
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "7", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: primaryColor, strokeWidth: strokeWidth })] })),
186
- vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8", stroke: primaryColor, strokeWidth: "2", fill: "none" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65", stroke: secondaryColor, strokeWidth: "1.8" }), jsxRuntime.jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11", stroke: "#3B82F6", strokeWidth: "1.5" })] })),
187
- },
188
- });
194
+ const NtdZoomIn = /* @__PURE__ */ lensIcon('NtdZoomIn', 'M11 8v6M8 11h6');
195
+ const NtdZoomOut = /* @__PURE__ */ lensIcon('NtdZoomOut', 'M8 11h6');
189
196
  /* NtdUndo / NtdRedo — the old glyph was two arcs of different radii whose ends
190
197
  never met the arrow, which read as a fish rather than a rotation. Redrawn as
191
198
  one semicircular loop (r 5.5 about 13.5,14 — mirrored to 10.5,14 for redo)
192
199
  plus a chevron whose apex lands exactly on the tail start, so the arrow and
193
200
  the tail close. `solid` fills the head so it is no longer byte-identical to
194
201
  `outline`; the tail then starts at the head's back edge (9.5 / 14.5) instead
195
- of the apex, keeping the stroke cap from poking past the tip. */
202
+ of the apex, keeping the stroke cap from poking past the tip — duotone and
203
+ vivid too. Every variant but `outline` draws the tail at twice the stroke
204
+ width. */
196
205
  const NtdUndo = /* @__PURE__ */ createIcon.createIcon({
197
206
  displayName: 'NtdUndo',
198
207
  paths: {
199
- solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
208
+ solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
200
209
  outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
201
210
  // Two-tone by PART, not by a backing blob: arrowhead in primary, tail in
202
211
  // secondary, both at full strength. (The old version put a secondary disc
203
212
  // behind the curve, which read as "a ball in the middle"; a washed-out tail
204
213
  // would likewise miss the point — this is a colour split, not an underlay.)
205
- duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: secondaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
206
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: "2.2", fill: "none" }), jsxRuntime.jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
214
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
215
+ vivid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9.5 8.5H13.5a5.5 5.5 0 1 1 0 11H9", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M9.5 4L5 8.5l4.5 4.5z", fill: primaryColor })] })),
207
216
  },
208
217
  });
209
218
  const NtdRedo = /* @__PURE__ */ createIcon.createIcon({
210
219
  displayName: 'NtdRedo',
211
220
  paths: {
212
- solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
221
+ solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
213
222
  outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M19 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
214
223
  // Mirror of NtdUndo: arrowhead primary, tail secondary — no backing disc.
215
- duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M19 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: secondaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
216
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: "2.2", fill: "none" }), jsxRuntime.jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
224
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
225
+ vivid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M14.5 8.5H10.5a5.5 5.5 0 1 0 0 11H15", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M14.5 4L19 8.5l-4.5 4.5z", fill: primaryColor })] })),
217
226
  },
218
227
  });
219
228
  // Reply: the arrow turns back to the left at a right angle (the "corner-up-left" of a message
@@ -227,14 +236,15 @@ const NtdReply = /* @__PURE__ */ createIcon.createIcon({
227
236
  vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M20 18v-2a4 4 0 0 0-4-4H8", stroke: primaryColor, strokeWidth: "2.2", fill: "none" }), jsxRuntime.jsx("path", { d: "M9 7L4 12l5 5z", fill: primaryColor })] })),
228
237
  },
229
238
  });
239
+ // A line glyph: twice the stroke width in every variant but `outline`.
230
240
  const NtdLink = /* @__PURE__ */ createIcon.createIcon({
231
241
  displayName: 'NtdLink',
232
242
  paths: {
233
- solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.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" })),
243
+ solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.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" })),
234
244
  outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.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" })),
235
245
  // one ring per colour: the right link primary, the left one secondary
236
- duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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" }), jsxRuntime.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" })] })),
237
- vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.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" }) })),
246
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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" }), jsxRuntime.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" })] })),
247
+ vivid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.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" }) })),
238
248
  },
239
249
  });
240
250
  // NtdSettings: a gear whose eight teeth have flat tops, in every variant but `rounded`, which
@@ -256,22 +266,25 @@ const NtdSettings = /* @__PURE__ */ createIcon.createIcon({
256
266
  vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: `${GEAR}${GEAR_HOLE}`, fillRule: "evenodd", fill: primaryColor }), jsxRuntime.jsx("path", { d: `${GEAR_HUB}${GEAR_HOLE}`, fillRule: "evenodd", fill: secondaryColor })] })),
257
267
  },
258
268
  });
269
+ // NtdLogIn / NtdLogOut: a line glyph, twice the stroke width in every variant but `outline`. The
270
+ // shaft stops 2 short of the arrowhead's point, so the square caps of `sharp` stay inside it.
271
+ // Duotone and vivid split it like NtdDownload: the arrow primary, the door frame secondary.
259
272
  const NtdLogIn = /* @__PURE__ */ createIcon.createIcon({
260
273
  displayName: 'NtdLogIn',
261
274
  paths: {
262
- solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("polyline", { points: "9,17 14,12 9,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "14", y1: "12", x2: "3", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
263
- outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("polyline", { points: "9,17 14,12 9,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "14", y1: "12", x2: "3", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
264
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "15", y: "3", width: "6", height: "18", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("polyline", { points: "9,17 14,12 9,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "14", y1: "12", x2: "3", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
265
- vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: primaryColor, strokeWidth: "2" }), jsxRuntime.jsx("polyline", { points: "9,17 14,12 9,7", stroke: secondaryColor, strokeWidth: "1.8", fill: "none" }), jsxRuntime.jsx("line", { x1: "14", y1: "12", x2: "3", y2: "12", stroke: "#3B82F6", strokeWidth: "1.5" })] })),
275
+ solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.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" })),
276
+ outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.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" })),
277
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M9 7l5 5-5 5M12 12H3", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
278
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M9 7l5 5-5 5M12 12H3", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
266
279
  },
267
280
  });
268
281
  const NtdLogOut = /* @__PURE__ */ createIcon.createIcon({
269
282
  displayName: 'NtdLogOut',
270
283
  paths: {
271
- solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("polyline", { points: "15,17 20,12 15,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "20", y1: "12", x2: "9", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
272
- outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("polyline", { points: "15,17 20,12 15,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "20", y1: "12", x2: "9", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
273
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "3", y: "3", width: "6", height: "18", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("polyline", { points: "15,17 20,12 15,7", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("line", { x1: "20", y1: "12", x2: "9", y2: "12", stroke: primaryColor, strokeWidth: strokeWidth })] })),
274
- vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: primaryColor, strokeWidth: "2" }), jsxRuntime.jsx("polyline", { points: "15,17 20,12 15,7", stroke: secondaryColor, strokeWidth: "1.8", fill: "none" }), jsxRuntime.jsx("line", { x1: "20", y1: "12", x2: "9", y2: "12", stroke: "#3B82F6", strokeWidth: "1.5" })] })),
284
+ solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.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" })),
285
+ outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.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" })),
286
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M15 7l5 5-5 5M18 12H9", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
287
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4", stroke: secondaryColor, strokeWidth: strokeWidth * 2, fill: "none" }), jsxRuntime.jsx("path", { d: "M15 7l5 5-5 5M18 12H9", stroke: primaryColor, strokeWidth: strokeWidth * 2, fill: "none" })] })),
275
288
  },
276
289
  });
277
290
  const NtdLock = /* @__PURE__ */ createIcon.createIcon({