@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,127 @@
1
1
  # @nice2dev/icons — Changelog
2
2
 
3
+ ## 1.3.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 15f3a18: Icon browser feedback, round 34:
8
+
9
+ - Twice the stroke width in every variant but `outline`:
10
+ - `NtdMusic`: the stems move left so they still end flush with the note heads.
11
+ - `NtdClock`: the hands.
12
+ - `NtdShare`: the links.
13
+ - `NtdRepeat`: shafts and heads, redrawn tighter so they stay in the box; the shafts stop
14
+ short of the heads' points, so nothing sticks out in `sharp`.
15
+ - `NtdRefresh`: smaller heads, each pointing at the start of the other arrow's tail with a
16
+ clear gap.
17
+ - `NtdWifi`: the inner arc sits further from the dot, the arcs closer together.
18
+ - `NtdList`: dots a quarter smaller.
19
+ - Colours:
20
+ - `NtdHeart`: vivid outlines the split heart in the accent colour instead of an accent seam.
21
+ - `NtdBellRing`: the ring marks are primary when filled, accent in vivid.
22
+ - `NtdBriefcase`: the clasp is in the accent colour with a primary lock square.
23
+ - `NtdSmartphone`: filled, a primary frame round an accent screen with a primary button.
24
+ - Shapes:
25
+ - `NtdBook`: a notch in the right edge beside the pages, leaving a narrow strip of cover.
26
+ - `NtdNotebook`: a wider, shorter cover.
27
+ - `NtdAward`: the ribbon's inside between the two earlier sizes.
28
+ - `NtdApartment`: a thin primary sill under the door when filled.
29
+ - `NtdBus`: a front view with a big windscreen, the driver, headlights and rectangular wheels.
30
+ - `NtdBrush`: redrawn as a paintbrush — handle, ferrule and pointed bristles.
31
+ - Hardcoded colours (`#3B82F6`, white) are gone from `NtdShare` and `NtdRepeat`.
32
+
33
+ - 4fae5a4: `NtdHourglass` and the `turn` animation:
34
+
35
+ - `NtdHourglass`: two plates and a curved glass, the sand running from the top bulb through a
36
+ thread onto a pile in the bottom one. `NiceIcon` resolves it as `hourglass`.
37
+ - `animation="turn"` works on every icon: it turns the icon upside down, holds, turns it back
38
+ and holds again. On `NtdHourglass` the sand pours during the holds, in step with the turns.
39
+ - `animationDuration` now also sets the `--ntd-anim-duration` CSS variable, so parts an icon
40
+ animates inside itself (the hourglass sand) keep the same duration.
41
+
42
+ ## 1.3.3
43
+
44
+ ### Patch Changes
45
+
46
+ - 54a632e: Icon browser feedback, round 32:
47
+
48
+ - Line glyphs are twice the stroke width in every variant but `outline`: `NtdSearch`,
49
+ `NtdZoomIn`, `NtdZoomOut`, `NtdUndo`, `NtdRedo` (the tail; the head is unchanged), `NtdLink`,
50
+ `NtdLogIn`, `NtdLogOut`, and the stands of `NtdMicrophone` and `NtdMicrophoneOff`. The
51
+ microphones sit a little higher so the base stays inside the box. `NtdMicrophoneOff` keeps a gap
52
+ around its slash. `NtdGlobe`'s grid is twice as thick in the filled variants, but stays thin in
53
+ `outline`, `wireframe`, `duotone` and `cutout`.
54
+ - Shared sources: `NtdSearch`, `NtdZoomIn` and `NtdZoomOut` share one magnifier. `NtdBell` and
55
+ `NtdBellRing` share one bell, whose clapper is now a large half disc.
56
+ - Duotone (and vivid where noted) splits colours by part, with no backing disc or outline ring:
57
+ - `NtdPlus`, `NtdCheck`, `NtdClose`: the two strokes in different colours. Vivid adds the
58
+ crossing of the plus and the close in the accent colour.
59
+ - `NtdDownload`, `NtdUpload`, `NtdLogIn`, `NtdLogOut`: the arrow in primary, the tray or door
60
+ frame in secondary.
61
+ - `NtdChat`: the tail in secondary.
62
+ - `NtdFolder`: the tab in secondary.
63
+ - `NtdVideo`: the lens in secondary.
64
+ - `NtdUser`, `NtdAdmin`: the shoulders in secondary.
65
+ - `NtdLab`: vivid without the bubbles.
66
+ - `NtdApartment`: the windows and door in secondary.
67
+ - `NtdBriefcase`: the band and clasp in secondary.
68
+ - `NtdEye`: the eye in secondary.
69
+ - Filled variants:
70
+ - `NtdCalendar`: the header and rings in secondary over a primary sheet, the line between them
71
+ raised a little.
72
+ - `NtdSave`: the shutter and label in secondary.
73
+ - `NtdAward`: the ribbon filled in secondary.
74
+ - `NtdBriefcase`: a lower, wider clasp in secondary, and in the accent colour in vivid.
75
+ - `NtdPackage`: primary walls with accent edges, replacing the fixed 15% tint.
76
+ - `NtdApartment`: windows and door drawn as accent frames.
77
+ - `NtdEye`: a larger secondary pupil inside a thinner accent ring.
78
+ - Shapes:
79
+ - `NtdAdmin`: a longer tie that runs to the bottom edge.
80
+ - `NtdGarage`: three door panels of equal height, and square bottom corners in `sharp`.
81
+ - `NtdBook`: the pages set in from the cover's right edge.
82
+ - `NtdClipboard`: the lines of text sit higher.
83
+ - `NtdReceipt` and `NtdInvoice`: amounts further right, longer descriptions.
84
+ - `NtdSave` in `outline`: a larger shutter and window.
85
+ - `NtdDatabase` in `wireframe`: the outline's construction (it showed the gap bands as double
86
+ arcs).
87
+ - Hardcoded colours (`#3B82F6`, `#8B5CF6`, `#CBD5E1`, white overlays) are gone from the vivid
88
+ variants touched here.
89
+ - The cutout mask now renders `paths.solid` with `variant: 'cutout'` (the RSC renderer already
90
+ did), so a renderer can keep details visible in the cut.
91
+
92
+ - 9628cdc: Icon browser feedback, round 33:
93
+
94
+ - Heavier line glyphs in every variant but `outline`:
95
+ - twice the stroke width: `NtdDollar`, `NtdTrendUp`, `NtdTrendDown`, `NtdMaximize`,
96
+ `NtdMinimize`, `NtdRefresh`, and the pins of `NtdCpu`;
97
+ - 1.5 times: `NtdWifi` (its arcs are now concentric about the dot) and `NtdList` (its dots
98
+ are larger too).
99
+ - Arrow shafts stop short of their head's corner, so nothing sticks out in `sharp`.
100
+ - `NtdRefresh` is redrawn as two arcs with filled heads.
101
+ - Colours:
102
+ - `NtdEye`: a larger pupil, primary in the filled variants and secondary in duotone and
103
+ vivid, ringed in the accent colour.
104
+ - `NtdAtom`: the nucleus is primary when filled and secondary in duotone and vivid; vivid
105
+ adds an accent glow to the orbits.
106
+ - `NtdMountain`: the snow is secondary again.
107
+ - `NtdHeart`: duotone swaps its colours; vivid splits the heart in two with an accent seam.
108
+ - `NtdMenu`: the middle bar is secondary in duotone and vivid.
109
+ - `NtdCpu`: primary body, accent die (it had a fixed tint).
110
+ - `NtdApartment`: windows and door filled in the accent colour.
111
+ - `NtdCalculator`: accent display and key outlines (they were a fixed white).
112
+ - `NtdNotebook`: accent writing, shorter rings, fills-only duotone.
113
+ - Shapes:
114
+ - `NtdDatabase`: three discs of equal height.
115
+ - `NtdBook`: pages set further in from the cover's right edge.
116
+ - `NtdAward`: a smaller secondary inside on the ribbon.
117
+ - `NtdReceipt`: amounts further right.
118
+ - `NtdBus`: a side view with a passenger in the window.
119
+ - `NtdWallet`: redrawn — body, back pocket and clasp pocket.
120
+ - Outline and wireframe:
121
+ - `NtdSave`: the outline draws the wireframe's construction.
122
+ - `NtdGarage`: the wireframe takes the outline's evenly spaced door slats.
123
+ - Hardcoded colours (`#3B82F6`, `#8B5CF6`, `#F59E0B`, white) are gone from the touched icons.
124
+
3
125
  ## 1.3.2
4
126
 
5
127
  No changes in this release.
package/README.md CHANGED
@@ -193,6 +193,14 @@ Apply an animation by name:
193
193
 
194
194
  Each animation maps to a CSS class `.ntd-anim-{name}` defined in `animations.css` (auto-imported).
195
195
 
196
+ `turn` turns any icon upside down, holds, turns it back and holds again. On `NtdHourglass` the
197
+ sand pours while it holds, in step with the turns at any `animationDuration`:
198
+
199
+ ```tsx
200
+ <NtdHourglass animation="turn" />
201
+ <NtdHourglass animation="turn" animationDuration="6s" />
202
+ ```
203
+
196
204
  See [Full Animation Catalog](#full-animation-catalog) for the complete list.
197
205
 
198
206
  ---
@@ -406,9 +414,9 @@ Properties passed to every path renderer (pre-resolved from user props):
406
414
 
407
415
  `NtdSearch` · `NtdEdit` · `NtdTrash` · `NtdSave` · `NtdDownload` · `NtdUpload` · `NtdShare` · `NtdCopy` · `NtdClipboard` · `NtdPlus` · `NtdMinus` · `NtdCheck` · `NtdFilter` · `NtdSort` · `NtdPrint` · `NtdZoomIn` · `NtdZoomOut` · `NtdUndo` · `NtdRedo` · `NtdLink` · `NtdSettings` · `NtdLogIn` · `NtdLogOut` · `NtdLock` · `NtdUnlock`
408
416
 
409
- ### UI & Status (26 icons)
417
+ ### UI & Status (27 icons)
410
418
 
411
- `NtdHome` · `NtdUser` · `NtdUsers` · `NtdHeart` · `NtdStar` · `NtdBell` · `NtdEye` · `NtdEyeOff` · `NtdInfo` · `NtdWarning` · `NtdError` · `NtdSuccess` · `NtdHelp` · `NtdClock` · `NtdCalendar` · `NtdTag` · `NtdBookmark` · `NtdFlag` · `NtdThumbUp` · `NtdThumbDown` · `NtdShield` · `NtdGlobe` · `NtdMap` · `NtdPin` · `NtdSun` · `NtdMoon`
419
+ `NtdHome` · `NtdUser` · `NtdUsers` · `NtdHeart` · `NtdStar` · `NtdBell` · `NtdEye` · `NtdEyeOff` · `NtdInfo` · `NtdWarning` · `NtdError` · `NtdSuccess` · `NtdHelp` · `NtdClock` · `NtdHourglass` · `NtdCalendar` · `NtdTag` · `NtdBookmark` · `NtdFlag` · `NtdThumbUp` · `NtdThumbDown` · `NtdShield` · `NtdGlobe` · `NtdMap` · `NtdPin` · `NtdSun` · `NtdMoon`
412
420
 
413
421
  ### Media & Communication (19 icons)
414
422
 
@@ -466,9 +474,9 @@ Properties passed to every path renderer (pre-resolved from user props):
466
474
 
467
475
  ## Full Animation Catalog
468
476
 
469
- ### Core Transforms (13)
477
+ ### Core Transforms (14)
470
478
 
471
- `spin` · `spin-reverse` · `pulse` · `bounce` · `shake` · `float` · `flip` · `glow` · `wiggle` · `rubber` · `swing` · `tada` · `heartbeat`
479
+ `spin` · `spin-reverse` · `pulse` · `bounce` · `shake` · `float` · `flip` · `glow` · `wiggle` · `rubber` · `swing` · `tada` · `heartbeat` · `turn`
472
480
 
473
481
  ### Entrance Animations (22)
474
482
 
@@ -189,7 +189,10 @@ function createIcon(options) {
189
189
  ? `transform ${transition}`
190
190
  : undefined;
191
191
  const animStyle = {
192
- ...(animationDuration ? { animationDuration } : {}),
192
+ // the variable carries the duration to the parts an icon animates inside itself
193
+ ...(animationDuration
194
+ ? { animationDuration, '--ntd-anim-duration': animationDuration }
195
+ : {}),
193
196
  ...(transformString ? { transform: transformString } : {}),
194
197
  ...(transformString ? { transformOrigin } : {}),
195
198
  ...(transitionValue ? { transition: transitionValue } : {}),
@@ -225,7 +228,6 @@ function createIcon(options) {
225
228
  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
229
  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
230
  ...renderProps,
228
- variant: 'solid',
229
231
  primaryColor: 'black',
230
232
  secondaryColor: 'black',
231
233
  accentColor: 'white',
@@ -106,6 +106,7 @@ function exportIconToSvgString(svgElement, options = {}) {
106
106
  clone.style.animation = '';
107
107
  clone.style.animationName = '';
108
108
  clone.style.animationDuration = '';
109
+ clone.style.removeProperty('--ntd-anim-duration');
109
110
  // Remove SMIL animation elements
110
111
  clone.querySelectorAll('animate, animateTransform, animateMotion').forEach((el) => el.remove());
111
112
  }
@@ -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,29 @@ 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 secondary. The marks are primary on the solid
39
+ * bell, secondary in duotone and in the accent colour in vivid.
40
+ */
41
+ function bellIcon(displayName, ringing) {
42
+ const parts = ({ primaryColor, strokeWidth }, detail, rings, ringsOpacity = 1) => (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: rings, strokeWidth: strokeWidth, opacity: ringsOpacity }))] }));
43
+ return createIcon.createIcon({
44
+ displayName,
45
+ paths: {
46
+ solid: (props) => parts(props, props.primaryColor, props.primaryColor),
47
+ outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: `${BELL}${BELL_CLAPPER_LINE}${ringing ? BELL_RINGS : ''}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
48
+ duotone: (props) => parts(props, props.secondaryColor, props.secondaryColor),
49
+ vivid: (props) => parts(props, props.secondaryColor, props.accentColor, props.accentOpacity),
50
+ },
51
+ });
52
+ }
22
53
  /** The page of every paper icon: 16 × 20, its top-right corner folded over 8. */
23
54
  const PAPER = 'M12 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V10z';
24
55
  const PAPER_FOLD = 'M12 2v6a2 2 0 002 2h6z';
@@ -28,7 +59,7 @@ const PAPER_FOLD_SHARP = 'M12 2v8h8z';
28
59
  /**
29
60
  * A paper icon — NtdFile, and every document drawn on the same page (NtdFileText, NtdInvoice,
30
61
  * 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),
62
+ * `text` is the document's writing, a path of strokes kept below the fold (y ≥ 11, x 7–17),
32
63
  * drawn in the accent colour on a filled page and in primary on a stroked one.
33
64
  */
34
65
  function paperIcon(displayName, text = '') {
@@ -45,5 +76,7 @@ function paperIcon(displayName, text = '') {
45
76
  });
46
77
  }
47
78
 
79
+ exports.bellIcon = bellIcon;
80
+ exports.detailColor = detailColor;
48
81
  exports.paperIcon = paperIcon;
49
82
  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,17 +99,26 @@ 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
  });
107
+ // NtdShare: three nodes joined by two links, the links twice the stroke width in every variant but
108
+ // `outline`. Duotone and vivid, fills only: the nodes primary, the links secondary (vivid had a
109
+ // fixed #3B82F6 node and white links that vanished on a light page).
110
+ 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';
111
+ const SHARE_LINKS = 'M8.59 13.51L15.42 17.49M15.41 6.51L8.59 10.49';
112
+ function shareFilled(nodes, links, strokeWidth) {
113
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: SHARE_LINKS, stroke: links, strokeWidth: strokeWidth * 2 }), jsxRuntime.jsx("path", { d: SHARE_NODES, fill: nodes })] }));
114
+ }
88
115
  const NtdShare = /* @__PURE__ */ createIcon.createIcon({
89
116
  displayName: 'NtdShare',
90
117
  paths: {
91
- solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "18", cy: "5", r: "3", fill: primaryColor }), jsxRuntime.jsx("circle", { cx: "6", cy: "12", r: "3", fill: primaryColor }), jsxRuntime.jsx("circle", { cx: "18", cy: "19", r: "3", fill: primaryColor }), jsxRuntime.jsx("line", { x1: "8.59", y1: "13.51", x2: "15.42", y2: "17.49", stroke: primaryColor, strokeWidth: strokeWidth }), jsxRuntime.jsx("line", { x1: "15.41", y1: "6.51", x2: "8.59", y2: "10.49", stroke: primaryColor, strokeWidth: strokeWidth })] })),
118
+ solid: ({ primaryColor, strokeWidth }) => shareFilled(primaryColor, primaryColor, strokeWidth),
92
119
  outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "18", cy: "5", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsxRuntime.jsx("circle", { cx: "6", cy: "12", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsxRuntime.jsx("circle", { cx: "18", cy: "19", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsxRuntime.jsx("line", { x1: "8.59", y1: "13.51", x2: "15.42", y2: "17.49", stroke: primaryColor, strokeWidth: strokeWidth * 0.75 }), jsxRuntime.jsx("line", { x1: "15.41", y1: "6.51", x2: "8.59", y2: "10.49", stroke: primaryColor, strokeWidth: strokeWidth * 0.75 })] })),
93
- duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "18", cy: "5", r: "3", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("circle", { cx: "6", cy: "12", r: "3", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("circle", { cx: "18", cy: "19", r: "3", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("circle", { cx: "18", cy: "5", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsxRuntime.jsx("circle", { cx: "6", cy: "12", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsxRuntime.jsx("circle", { cx: "18", cy: "19", r: "2.5", stroke: primaryColor, strokeWidth: strokeWidth * 0.75, fill: "none" }), jsxRuntime.jsx("line", { x1: "8.59", y1: "13.51", x2: "15.42", y2: "17.49", stroke: primaryColor, strokeWidth: strokeWidth * 0.75 }), jsxRuntime.jsx("line", { x1: "15.41", y1: "6.51", x2: "8.59", y2: "10.49", stroke: primaryColor, strokeWidth: strokeWidth * 0.75 })] })),
94
- vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "18", cy: "5", r: "3", fill: primaryColor }), jsxRuntime.jsx("circle", { cx: "18", cy: "5", r: "3", fill: "white", opacity: "0.08" }), jsxRuntime.jsx("circle", { cx: "6", cy: "12", r: "3", fill: secondaryColor }), jsxRuntime.jsx("circle", { cx: "18", cy: "19", r: "3", fill: "#3B82F6" }), jsxRuntime.jsx("line", { x1: "8.59", y1: "13.51", x2: "15.42", y2: "17.49", stroke: "white", strokeWidth: "1" }), jsxRuntime.jsx("line", { x1: "15.41", y1: "6.51", x2: "8.59", y2: "10.49", stroke: "white", strokeWidth: "1" })] })),
120
+ duotone: ({ primaryColor, secondaryColor, strokeWidth }) => shareFilled(primaryColor, secondaryColor, strokeWidth),
121
+ vivid: ({ primaryColor, secondaryColor, strokeWidth }) => shareFilled(primaryColor, secondaryColor, strokeWidth),
95
122
  },
96
123
  });
97
124
  const NtdCopy = /* @__PURE__ */ createIcon.createIcon({
@@ -103,24 +130,28 @@ const NtdCopy = /* @__PURE__ */ createIcon.createIcon({
103
130
  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
131
  },
105
132
  });
133
+ /** NtdClipboard's two lines of text, high on the board (they sat below its middle). */
134
+ const CLIPBOARD_TEXT = 'M8 11h8M8 14.5h5';
106
135
  const NtdClipboard = /* @__PURE__ */ createIcon.createIcon({
107
136
  displayName: 'NtdClipboard',
108
137
  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" })] })),
138
+ 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 })] })),
139
+ 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 })] })),
140
+ 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 })] })),
141
+ 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
142
  },
114
143
  });
115
144
  // 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`.
145
+ // `solid` reads bold next to `outline` and still follows `strokeWidth`. Plus, check and close
146
+ // split their two strokes between the colours in duotone and vivid (no backing disc); vivid adds
147
+ // the crossing of the plus and the close in the accent colour.
117
148
  const NtdPlus = /* @__PURE__ */ createIcon.createIcon({
118
149
  displayName: 'NtdPlus',
119
150
  paths: {
120
151
  solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: "M12 5v14M5 12h14", stroke: primaryColor, strokeWidth: strokeWidth * 2 })),
121
152
  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 }) })),
153
+ 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 })] })),
154
+ 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
155
  },
125
156
  });
126
157
  const NtdMinus = /* @__PURE__ */ createIcon.createIcon({
@@ -137,8 +168,8 @@ const NtdCheck = /* @__PURE__ */ createIcon.createIcon({
137
168
  paths: {
138
169
  solid: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: "M20 6L9 17l-5-5", stroke: primaryColor, strokeWidth: strokeWidth * 2 })),
139
170
  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 }) })),
171
+ 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 })] })),
172
+ 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
173
  },
143
174
  });
144
175
  const NtdFilter = /* @__PURE__ */ createIcon.createIcon({
@@ -168,52 +199,38 @@ const NtdPrint = /* @__PURE__ */ createIcon.createIcon({
168
199
  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
200
  },
170
201
  });
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
- });
202
+ const NtdZoomIn = /* @__PURE__ */ lensIcon('NtdZoomIn', 'M11 8v6M8 11h6');
203
+ const NtdZoomOut = /* @__PURE__ */ lensIcon('NtdZoomOut', 'M8 11h6');
189
204
  /* NtdUndo / NtdRedo — the old glyph was two arcs of different radii whose ends
190
205
  never met the arrow, which read as a fish rather than a rotation. Redrawn as
191
206
  one semicircular loop (r 5.5 about 13.5,14 — mirrored to 10.5,14 for redo)
192
207
  plus a chevron whose apex lands exactly on the tail start, so the arrow and
193
208
  the tail close. `solid` fills the head so it is no longer byte-identical to
194
209
  `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. */
210
+ of the apex, keeping the stroke cap from poking past the tip — duotone and
211
+ vivid too. Every variant but `outline` draws the tail at twice the stroke
212
+ width. */
196
213
  const NtdUndo = /* @__PURE__ */ createIcon.createIcon({
197
214
  displayName: 'NtdUndo',
198
215
  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 })] })),
216
+ 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
217
  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
218
  // Two-tone by PART, not by a backing blob: arrowhead in primary, tail in
202
219
  // secondary, both at full strength. (The old version put a secondary disc
203
220
  // behind the curve, which read as "a ball in the middle"; a washed-out tail
204
221
  // 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 })] })),
222
+ 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 })] })),
223
+ 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
224
  },
208
225
  });
209
226
  const NtdRedo = /* @__PURE__ */ createIcon.createIcon({
210
227
  displayName: 'NtdRedo',
211
228
  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 })] })),
229
+ 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
230
  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
231
  // 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 })] })),
232
+ 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 })] })),
233
+ 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
234
  },
218
235
  });
219
236
  // Reply: the arrow turns back to the left at a right angle (the "corner-up-left" of a message
@@ -227,14 +244,15 @@ const NtdReply = /* @__PURE__ */ createIcon.createIcon({
227
244
  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
245
  },
229
246
  });
247
+ // A line glyph: twice the stroke width in every variant but `outline`.
230
248
  const NtdLink = /* @__PURE__ */ createIcon.createIcon({
231
249
  displayName: 'NtdLink',
232
250
  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" })),
251
+ 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
252
  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
253
  // 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" }) })),
254
+ 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" })] })),
255
+ 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
256
  },
239
257
  });
240
258
  // NtdSettings: a gear whose eight teeth have flat tops, in every variant but `rounded`, which
@@ -256,22 +274,25 @@ const NtdSettings = /* @__PURE__ */ createIcon.createIcon({
256
274
  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
275
  },
258
276
  });
277
+ // NtdLogIn / NtdLogOut: a line glyph, twice the stroke width in every variant but `outline`. The
278
+ // shaft stops 2 short of the arrowhead's point, so the square caps of `sharp` stay inside it.
279
+ // Duotone and vivid split it like NtdDownload: the arrow primary, the door frame secondary.
259
280
  const NtdLogIn = /* @__PURE__ */ createIcon.createIcon({
260
281
  displayName: 'NtdLogIn',
261
282
  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" })] })),
283
+ 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" })),
284
+ 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" })),
285
+ 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" })] })),
286
+ 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
287
  },
267
288
  });
268
289
  const NtdLogOut = /* @__PURE__ */ createIcon.createIcon({
269
290
  displayName: 'NtdLogOut',
270
291
  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" })] })),
292
+ 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" })),
293
+ 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" })),
294
+ 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" })] })),
295
+ 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
296
  },
276
297
  });
277
298
  const NtdLock = /* @__PURE__ */ createIcon.createIcon({