@nice2dev/icons 1.3.6 → 1.3.8
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.
- package/CHANGELOG.md +88 -0
- package/README.md +37 -17
- package/dist/cjs/NiceIconStacker.js +19 -5
- package/dist/cjs/createIcon.js +19 -6
- package/dist/cjs/iconParts.js +24 -2
- package/dist/cjs/iconStack.js +7 -5
- package/dist/cjs/icons/accessibility.js +9 -8
- package/dist/cjs/icons/actions.js +42 -32
- package/dist/cjs/icons/ai.js +12 -11
- package/dist/cjs/icons/brand.js +2 -2
- package/dist/cjs/icons/business.js +37 -29
- package/dist/cjs/icons/devtech.js +17 -15
- package/dist/cjs/icons/ecommerce.js +19 -14
- package/dist/cjs/icons/education.js +30 -25
- package/dist/cjs/icons/files.js +64 -32
- package/dist/cjs/icons/fintech.js +2 -11
- package/dist/cjs/icons/food.js +12 -8
- package/dist/cjs/icons/fun.js +11 -11
- package/dist/cjs/icons/gaming.js +20 -13
- package/dist/cjs/icons/health.js +38 -25
- package/dist/cjs/icons/index.js +1 -0
- package/dist/cjs/icons/input.js +31 -21
- package/dist/cjs/icons/legal.js +11 -11
- package/dist/cjs/icons/media.js +24 -15
- package/dist/cjs/icons/navigation.js +16 -13
- package/dist/cjs/icons/omniverk.js +2 -7
- package/dist/cjs/icons/realestate.js +14 -14
- package/dist/cjs/icons/saas.js +0 -10
- package/dist/cjs/icons/science.js +12 -12
- package/dist/cjs/icons/shapes.js +20 -17
- package/dist/cjs/icons/smarthome.js +0 -11
- package/dist/cjs/icons/social.js +7 -6
- package/dist/cjs/icons/sports.js +5 -6
- package/dist/cjs/icons/sustainability.js +12 -11
- package/dist/cjs/icons/travel.js +13 -13
- package/dist/cjs/icons/ui.js +60 -35
- package/dist/cjs/icons/weather.js +12 -16
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/resolver.js +1 -0
- package/dist/cjs/rsc.js +1 -1
- package/dist/cjs/stacking.js +49 -11
- package/dist/esm/NiceIconStacker.js +22 -8
- package/dist/esm/createIcon.js +20 -7
- package/dist/esm/iconParts.js +24 -3
- package/dist/esm/iconStack.js +7 -5
- package/dist/esm/icons/accessibility.js +9 -8
- package/dist/esm/icons/actions.js +43 -33
- package/dist/esm/icons/ai.js +12 -11
- package/dist/esm/icons/brand.js +2 -2
- package/dist/esm/icons/business.js +38 -30
- package/dist/esm/icons/devtech.js +17 -15
- package/dist/esm/icons/ecommerce.js +19 -14
- package/dist/esm/icons/education.js +30 -25
- package/dist/esm/icons/files.js +65 -33
- package/dist/esm/icons/fintech.js +2 -11
- package/dist/esm/icons/food.js +12 -8
- package/dist/esm/icons/fun.js +11 -11
- package/dist/esm/icons/gaming.js +21 -14
- package/dist/esm/icons/health.js +38 -25
- package/dist/esm/icons/index.js +1 -1
- package/dist/esm/icons/input.js +31 -21
- package/dist/esm/icons/legal.js +12 -12
- package/dist/esm/icons/media.js +25 -16
- package/dist/esm/icons/navigation.js +16 -13
- package/dist/esm/icons/omniverk.js +2 -7
- package/dist/esm/icons/realestate.js +15 -15
- package/dist/esm/icons/saas.js +0 -10
- package/dist/esm/icons/science.js +12 -12
- package/dist/esm/icons/shapes.js +20 -17
- package/dist/esm/icons/smarthome.js +0 -11
- package/dist/esm/icons/social.js +8 -7
- package/dist/esm/icons/sports.js +6 -7
- package/dist/esm/icons/sustainability.js +12 -11
- package/dist/esm/icons/travel.js +14 -14
- package/dist/esm/icons/ui.js +61 -37
- package/dist/esm/icons/weather.js +13 -17
- package/dist/esm/index.js +1 -1
- package/dist/esm/resolver.js +1 -0
- package/dist/esm/rsc.js +1 -1
- package/dist/esm/stacking.js +46 -12
- package/dist/types/createIcon.d.ts +16 -2
- package/dist/types/iconParts.d.ts +8 -2
- package/dist/types/iconStack.d.ts +18 -3
- package/dist/types/icons/index.d.ts +1 -1
- package/dist/types/icons/ui.d.ts +1 -0
- package/dist/types/stacking.d.ts +30 -5
- package/dist/types/types.d.ts +22 -8
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,93 @@
|
|
|
1
1
|
# @nice2dev/icons — Changelog
|
|
2
2
|
|
|
3
|
+
## 1.3.8
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f389149: Duotone draws the larger area in primary. 373 of the 541 core icons drew their body in pale
|
|
8
|
+
secondary under a primary outline.
|
|
9
|
+
|
|
10
|
+
- Icons with details now draw duotone as the solid, with those details in full secondary
|
|
11
|
+
(`paths.duotone` may be left out; `createIcon` derives it that way).
|
|
12
|
+
- Icons without details, and the fills-only splits whose larger part was secondary (Download,
|
|
13
|
+
Upload, User, Dollar, PieChart, Undo / Redo, Wifi, …), have their colours swapped through the
|
|
14
|
+
new `swapDuotone` helper: body primary, outline and details secondary.
|
|
15
|
+
- NtdSearch / NtdZoomIn / NtdZoomOut fill the lens in primary under a secondary handle and glyph.
|
|
16
|
+
- NtdForge got a duotone of its own.
|
|
17
|
+
|
|
18
|
+
A duotone without a `secondaryColor` now reads as one colour where it used to rely on
|
|
19
|
+
`secondaryOpacity`; pass a secondary colour for two tones.
|
|
20
|
+
|
|
21
|
+
- a947882: Icon feedback round 39:
|
|
22
|
+
|
|
23
|
+
- NtdBriefcase: the handle is 1.5 × the stroke width on the filled cases.
|
|
24
|
+
- NtdCode: twice the stroke width in every variant but outline (vivid had a fixed 2.2), with sharp
|
|
25
|
+
points. Duotone is vivid's split: right bracket primary, left secondary.
|
|
26
|
+
- NtdMoreHorizontal / NtdMoreVertical: in vivid, the outer dots are primary and the middle one
|
|
27
|
+
secondary. The last dot was a fixed `#3B82F6`, and the white sheen is gone.
|
|
28
|
+
- NtdTrash: the lid is flat with its ends bent down, as round as the bin's bottom corners.
|
|
29
|
+
|
|
30
|
+
- cbee657: Core container icons keep a spot for stacked icons and text. Each spot was measured as the largest
|
|
31
|
+
circle inside the icon's silhouette, then checked by eye: NtdBell / NtdBellRing (the body above
|
|
32
|
+
the clapper), NtdBookmark, NtdBubble, NtdChat, NtdCalendar, NtdCamera, NtdClipboard, NtdCloud,
|
|
33
|
+
NtdCoffee, NtdDroplet, NtdEgg, NtdFile and every paper icon (the page below the fold), NtdFolder /
|
|
34
|
+
NtdFolderOpen, NtdMonitor, NtdAward, NtdTrophy, NtdLock, NtdBriefcase, NtdBattery, NtdBackspace,
|
|
35
|
+
NtdDiamond, NtdPentagon, NtdPlay, NtdVideo, NtdFlag, NtdGhost, NtdWishlist and the gaming
|
|
36
|
+
NtdShield / NtdStar / NtdTrophy.
|
|
37
|
+
- 8eca993: Icons keep a spot for what is stacked in them. `createIcon` takes `perfectStackX` /
|
|
38
|
+
`perfectStackY` (the spot's centre in the 24-unit box), `perfectStackRotation` and
|
|
39
|
+
`perfectStackSize`. A child without a `stackAlign` goes there (the new default `'perfect'`), and
|
|
40
|
+
so does text, turned with it and scaled to it. Without them, the spot is the icon's `textCenter`,
|
|
41
|
+
else the box centre. `stackAlign="center"` is still the middle of the box. NtdPin keeps its head,
|
|
42
|
+
NtdTag the stretch past its hole, turned 45° along the tag. NtdPin no longer has the dot; the pin
|
|
43
|
+
with the dot is the new `NtdMapPin` (`'map-pin'` in the resolver). NiceIconStacker offers
|
|
44
|
+
`perfect` first, shows the spot's size and turn as the layer's defaults, and writes `stackAlign`
|
|
45
|
+
only for another position.
|
|
46
|
+
|
|
47
|
+
## 1.3.7
|
|
48
|
+
|
|
49
|
+
### Patch Changes
|
|
50
|
+
|
|
51
|
+
- f527e94: Icon fixes from showcase feedback round 37:
|
|
52
|
+
|
|
53
|
+
- **NtdHamburger:** the wavy sauce is gone, leaving three even layers. Duotone uses fills only.
|
|
54
|
+
- **NtdBook / NtdBookBookmark:** the front cover is 20% lower and carries a line of title.
|
|
55
|
+
- **NtdMountain:** solid is all primary, with the snow line cut in the accent colour.
|
|
56
|
+
- **NtdBriefcase:**
|
|
57
|
+
- the band and clasp sit higher;
|
|
58
|
+
- the outline's band ends flush with the sides and follows `strokeWidth`;
|
|
59
|
+
- vivid's clasp is all accent.
|
|
60
|
+
- **NtdPercent:** the rings are 20% bigger and the slash is twice the stroke width.
|
|
61
|
+
- **NtdBus:** the wheels are lower.
|
|
62
|
+
- **NtdMonitor:** the stand no longer reaches over the screen.
|
|
63
|
+
- **NtdPieChart:** turned 45° clockwise.
|
|
64
|
+
- **NtdPromoTag:** gains a percent sign turned 45° clockwise.
|
|
65
|
+
|
|
66
|
+
- d4d6211: Icon fixes from showcase feedback round 38:
|
|
67
|
+
|
|
68
|
+
- **NtdBook:** the title sits higher and the block of pages is 50% thicker. NtdBookBookmark keeps
|
|
69
|
+
its title below the ribbon.
|
|
70
|
+
- **NtdAdmin:** the tie is twice as wide.
|
|
71
|
+
- **NtdTag:** the hole sits closer to the point.
|
|
72
|
+
- **NtdTrash:** the lid and the handle are smaller. Vivid uses the theme colours instead of a fixed
|
|
73
|
+
blue.
|
|
74
|
+
- **NtdDna:** redrawn as a double helix that stays inside the box, with eight thin base pairs
|
|
75
|
+
running strand to strand.
|
|
76
|
+
|
|
77
|
+
- b321834: Stacked icons can be moved precisely:
|
|
78
|
+
|
|
79
|
+
- **`stackOffsetX` / `stackOffsetY`:** move a stacked icon from where `stackAlign` puts it. The
|
|
80
|
+
value is a percent of the parent icon's width or height, so the move scales with the icon:
|
|
81
|
+
positive X is right, positive Y is down. A turn (`stackRotation`) follows the moved icon's
|
|
82
|
+
centre.
|
|
83
|
+
- **NiceIconStacker:** "Shift right" and "Shift down" sliders (−50…50%) under "More", written to
|
|
84
|
+
the code. The layers keep them as `offsetX` / `offsetY`, which `NiceIconStack` draws.
|
|
85
|
+
- **Translations:** new keys `iconStacker.offsetX` and `iconStacker.offsetY`.
|
|
86
|
+
|
|
87
|
+
- 9f58a4e: The default `strokeWidth` of the icons is now 1 (it was 2, and 1.5 in the server-component
|
|
88
|
+
icons), so the icons draw thinner lines by default. Glyph strokes on filled variants follow it at
|
|
89
|
+
twice the width. Pass `strokeWidth={2}` to keep the old weight.
|
|
90
|
+
|
|
3
91
|
## 1.3.6
|
|
4
92
|
|
|
5
93
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -105,7 +105,7 @@ Every icon component accepts these props (extends `SVGProps<SVGSVGElement>`):
|
|
|
105
105
|
| `primaryOpacity` | `number` | `1` | Opacity of primary elements (0–1) |
|
|
106
106
|
| `secondaryOpacity` | `number` | `0.4` | Opacity of secondary elements (0–1) |
|
|
107
107
|
| `accentOpacity` | `number` | `1` | Opacity of accent elements (0–1) |
|
|
108
|
-
| `strokeWidth` | `number` | `
|
|
108
|
+
| `strokeWidth` | `number` | `1` | Base stroke width for outline/duotone |
|
|
109
109
|
| `strokeLinecap` | `'round' \| 'square' \| 'butt'` | `'round'` | Stroke line cap style |
|
|
110
110
|
| `strokeLinejoin` | `'round' \| 'miter' \| 'bevel'` | `'round'` | Stroke line join style |
|
|
111
111
|
| `animation` | `IconAnimation` | `undefined` | CSS animation name |
|
|
@@ -207,12 +207,13 @@ See [Full Animation Catalog](#full-animation-catalog) for the complete list.
|
|
|
207
207
|
|
|
208
208
|
### Stacking icons
|
|
209
209
|
|
|
210
|
-
Nest icons to stack them in one SVG. A child icon sits where its `stackAlign` says
|
|
211
|
-
|
|
210
|
+
Nest icons to stack them in one SVG. A child icon sits where its `stackAlign` says. Without one, it
|
|
211
|
+
goes to the spot its parent keeps for stacked icons (a pin's head, along a tag), or the centre if
|
|
212
|
+
the parent keeps none. Text goes to that spot too:
|
|
212
213
|
|
|
213
214
|
```tsx
|
|
214
215
|
<NtdSquare variant="solid">
|
|
215
|
-
<NtdStar
|
|
216
|
+
<NtdStar>1</NtdStar>
|
|
216
217
|
</NtdSquare>
|
|
217
218
|
|
|
218
219
|
<NtdFolder>
|
|
@@ -221,6 +222,12 @@ centred on the icon:
|
|
|
221
222
|
|
|
222
223
|
<NtdCircle>42</NtdCircle>
|
|
223
224
|
|
|
225
|
+
<NtdPin>
|
|
226
|
+
<NtdStar />
|
|
227
|
+
</NtdPin>
|
|
228
|
+
|
|
229
|
+
<NtdTag>SALE</NtdTag>
|
|
230
|
+
|
|
224
231
|
<NtdBitcoin>
|
|
225
232
|
<NtdStar>
|
|
226
233
|
<NtdSparkle>1</NtdSparkle>
|
|
@@ -230,10 +237,19 @@ centred on the icon:
|
|
|
230
237
|
|
|
231
238
|
Stacks nest any number of levels deep, with the colours flipping at every level.
|
|
232
239
|
|
|
233
|
-
- **`stackAlign`:** `
|
|
234
|
-
`top
|
|
235
|
-
`half-bottom-right`, …), halfway from the centre to that
|
|
236
|
-
|
|
240
|
+
- **`stackAlign`:** `perfect` (default: the parent's own spot), `center` (the middle of the box),
|
|
241
|
+
`top`, `bottom`, `left`, `right`, `top-left`, `top-right`, `bottom-left`, `bottom-right`, plus
|
|
242
|
+
each of them with `half-` (`half-top`, `half-bottom-right`, …), halfway from the centre to that
|
|
243
|
+
edge or corner.
|
|
244
|
+
- **The parent's own spot:** an icon declares it with `createIcon`'s `perfectStackX` /
|
|
245
|
+
`perfectStackY` (its centre in the 24-unit box), `perfectStackRotation` (degrees clockwise) and
|
|
246
|
+
`perfectStackSize` (a child's share). For example, `NtdPin` keeps its head (12, 10, half the
|
|
247
|
+
pin) and `NtdTag` the stretch past its hole, turned 45° along the tag. Without them, the spot is
|
|
248
|
+
the icon's `textCenter`, else the centre. A child there takes the spot's size and turn, unless
|
|
249
|
+
it sets its own `stackSize` / `stackRotation`; text there turns with it and scales to its size.
|
|
250
|
+
`NtdMapPin` is the pin with the dot in its head (`NtdPin` had it until 1.3.8).
|
|
251
|
+
- **`stackSize`:** the child's share of its parent. Default: the spot's size at `perfect`, `0.6`
|
|
252
|
+
centred, `0.5` elsewhere.
|
|
237
253
|
- **Colours** follow the parent unless the child sets its own:
|
|
238
254
|
- In the centre or at an edge, a filled parent cuts the content out. The child takes the
|
|
239
255
|
parent's accent and its text the parent's primary. On `outline` / `wireframe` everything stays
|
|
@@ -241,6 +257,9 @@ Stacks nest any number of levels deep, with the colours flipping at every level.
|
|
|
241
257
|
- A corner badge keeps the parent's colours and sits on an accent-coloured gap.
|
|
242
258
|
- **`stackRotation`:** turns a stacked icon about its own centre, in degrees clockwise. Its
|
|
243
259
|
contents and text turn with it.
|
|
260
|
+
- **`stackOffsetX` / `stackOffsetY`:** move a stacked icon from where `stackAlign` puts it, in
|
|
261
|
+
percent of the parent's width or height (positive is right or down). Being relative, the nudge
|
|
262
|
+
scales with the icon: `<NtdStar stackAlign="top-right" stackOffsetX={-5} stackOffsetY={5} />`.
|
|
244
263
|
- **Text:** the default size is 9, 7.5, 6 or 5 in the 24-unit box (by length). `textColor` and
|
|
245
264
|
`textSize` override the text's colour and size.
|
|
246
265
|
- **Data:** `NiceIconStack` draws a stack kept as data (NiceIconStacker's layers), its bound text
|
|
@@ -418,14 +437,15 @@ export const NtdMyIcon = createIcon({
|
|
|
418
437
|
|
|
419
438
|
### CreateIconOptions
|
|
420
439
|
|
|
421
|
-
| Field
|
|
422
|
-
|
|
|
423
|
-
| `displayName`
|
|
424
|
-
| `viewBox`
|
|
425
|
-
| `paths.solid`
|
|
426
|
-
| `paths.outline`
|
|
427
|
-
| `paths.duotone`
|
|
428
|
-
| `
|
|
440
|
+
| Field | Type | Default | Description |
|
|
441
|
+
| ------------------------------------------------------------------------------- | ------------------ | --------------------------------- | --------------------------------------------------------- |
|
|
442
|
+
| `displayName` | `string` | **required** | React display name |
|
|
443
|
+
| `viewBox` | `string` | `'0 0 24 24'` | SVG viewBox |
|
|
444
|
+
| `paths.solid` | `IconPathRenderer` | **required** | Solid variant renderer |
|
|
445
|
+
| `paths.outline` | `IconPathRenderer` | **required** | Outline variant renderer |
|
|
446
|
+
| `paths.duotone` | `IconPathRenderer` | solid, details in secondary | Duotone variant renderer: the larger part primary (1.3.8) |
|
|
447
|
+
| `perfectStackX` / `perfectStackY` / `perfectStackRotation` / `perfectStackSize` | `number` | `textCenter` / box centre, 0, 0.6 | The spot stacked icons and text go to (1.3.8) |
|
|
448
|
+
| `paths.flat` | `IconPathRenderer` | **required** | Flat (badge) variant renderer |
|
|
429
449
|
|
|
430
450
|
### IconPathRenderer
|
|
431
451
|
|
|
@@ -464,7 +484,7 @@ Properties passed to every path renderer (pre-resolved from user props):
|
|
|
464
484
|
|
|
465
485
|
### UI & Status (27 icons)
|
|
466
486
|
|
|
467
|
-
`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`
|
|
487
|
+
`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` · `NtdMapPin` · `NtdSun` · `NtdMoon`
|
|
468
488
|
|
|
469
489
|
### Media & Communication (19 icons)
|
|
470
490
|
|
|
@@ -9,6 +9,7 @@ var iconStack = require('./iconStack.js');
|
|
|
9
9
|
var stacking = require('./stacking.js');
|
|
10
10
|
|
|
11
11
|
const ALIGNS = [
|
|
12
|
+
'perfect',
|
|
12
13
|
'center',
|
|
13
14
|
'top',
|
|
14
15
|
'bottom',
|
|
@@ -68,6 +69,8 @@ function removeLayer(layers, id) {
|
|
|
68
69
|
align: undefined,
|
|
69
70
|
size: undefined,
|
|
70
71
|
rotation: undefined,
|
|
72
|
+
offsetX: undefined,
|
|
73
|
+
offsetY: undefined,
|
|
71
74
|
};
|
|
72
75
|
return [
|
|
73
76
|
newBase,
|
|
@@ -159,19 +162,30 @@ const NiceIconStacker = React.forwardRef(function NiceIconStacker({ icons, layer
|
|
|
159
162
|
return (jsxRuntime.jsxs("div", { className: ['nice-icon-stacker', className].filter(Boolean).join(' '), children: [jsxRuntime.jsxs("div", { className: "nice-icon-stacker__toolbar", children: [jsxRuntime.jsxs("button", { type: "button", onClick: add, disabled: !current, children: [jsxRuntime.jsx(actions.NtdPlus, { size: 14 }), " ", addLabel] }), jsxRuntime.jsxs("button", { type: "button", onClick: clear, disabled: layers.length === 0, children: [jsxRuntime.jsx(actions.NtdTrash, { size: 14 }), " ", t('iconStacker.clear', 'Clear the stack')] })] }), !base ? (jsxRuntime.jsx("p", { className: "nice-icon-stacker__empty", children: t('iconStacker.empty', 'The stack is empty. Add an icon to start one.') })) : (jsxRuntime.jsxs("div", { className: "nice-icon-stacker__body", children: [jsxRuntime.jsx("div", { className: "nice-icon-stacker__preview", "aria-label": t('iconStacker.preview', 'Preview'), role: "group", children: PREVIEW_SIZES.map((s) => (jsxRuntime.jsxs("span", { className: "nice-icon-stacker__preview-cell", children: [iconStack.renderIconStack(layers, icons, {
|
|
160
163
|
baseProps: { ...previewProps, size: s, title: base.icon },
|
|
161
164
|
}), jsxRuntime.jsxs("small", { children: [s, "px"] })] }, s))) }), jsxRuntime.jsx("ol", { className: "nice-icon-stacker__layers", "aria-label": t('iconStacker.layers', 'Layers'), children: tree.map(({ layer: l, depth }) => {
|
|
162
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
165
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
163
166
|
const Icon = resolve(l.icon);
|
|
164
167
|
const isBase = l === base;
|
|
165
|
-
const align = (_a = l.align) !== null && _a !== void 0 ? _a : '
|
|
166
|
-
|
|
168
|
+
const align = (_a = l.align) !== null && _a !== void 0 ? _a : 'perfect';
|
|
169
|
+
// the spot the parent keeps for stacked icons (1.3.8): its size and turn are the
|
|
170
|
+
// layer's defaults while it sits there
|
|
171
|
+
const parentId = iconStack.stackParentId(layers, l);
|
|
172
|
+
const parentLayer = parentId ? layers.find((p) => p.id === parentId) : undefined;
|
|
173
|
+
const spot = (parentLayer && stacking.perfectStackOf(resolve(parentLayer.icon))) || stacking.BOX_PERFECT_STACK;
|
|
174
|
+
const atSpot = align === 'perfect';
|
|
175
|
+
const share = (_b = l.size) !== null && _b !== void 0 ? _b : (atSpot ? spot.size : stacking.defaultStackSize(align));
|
|
176
|
+
const turnDefault = atSpot ? spot.rotation : 0;
|
|
177
|
+
const turn = (_c = l.rotation) !== null && _c !== void 0 ? _c : turnDefault;
|
|
167
178
|
const innermost = iconStack.stackChildrenOf(layers, l.id).length === 0;
|
|
168
|
-
const textSize = (
|
|
179
|
+
const textSize = (_d = l.textSize) !== null && _d !== void 0 ? _d : stacking.defaultTextSize(((_e = l.text) !== null && _e !== void 0 ? _e : '').length || 1, (_f = stacking.perfectStackOf(Icon)) === null || _f === void 0 ? void 0 : _f.size);
|
|
169
180
|
const bindingInvalid = !!l.textBinding && !iconStack.isValidTextBinding(l.textBinding);
|
|
170
181
|
const depthStyle = {
|
|
171
182
|
['--nice-icon-stacker-depth']: String(depth),
|
|
172
183
|
};
|
|
173
184
|
const label = (key, fallback) => t(key, fallback).replace('{icon}', l.icon);
|
|
174
|
-
return (jsxRuntime.jsxs("li", { className: "nice-icon-stacker__layer", style: depthStyle, children: [jsxRuntime.jsxs("div", { className: "nice-icon-stacker__layer-row", children: [jsxRuntime.jsx("input", { type: "radio", name: targetGroup, checked: (target === null || target === void 0 ? void 0 : target.id) === l.id, onChange: () => setSelected(l.id), "aria-label": label('iconStacker.target', 'Add the next icon into {icon}'), title: label('iconStacker.target', 'Add the next icon into {icon}') }), jsxRuntime.jsx("span", { className: "nice-icon-stacker__layer-icon", children: Icon ? jsxRuntime.jsx(Icon, { size: 24, variant: l.variant }) : null }), jsxRuntime.jsxs("span", { className: "nice-icon-stacker__layer-name", children: [l.icon, isBase && (jsxRuntime.jsx("span", { className: "nice-icon-stacker__badge", children: t('iconStacker.base', 'Base') }))] }), !isBase && (jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.align', 'Position') }), jsxRuntime.jsx("select", { value: align, onChange: (e) => update(l.id, { align: e.target.value }), children: ALIGNS.map((a) => (jsxRuntime.jsx("option", { value: a, children: a }, a))) })] })), !isBase && (jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.size', 'Size') }), jsxRuntime.jsx("input", { type: "range", min: 0.2, max: 1, step: 0.05, value: share, onChange: (e) => update(l.id, { size: Number(e.target.value) }) }), jsxRuntime.jsxs("output", { children: [Math.round(share * 100), "%"] })] })), jsxRuntime.jsx("button", { type: "button", className: "nice-icon-stacker__remove", onClick: () => remove(l.id), "aria-label": label('iconStacker.remove', 'Remove {icon}'), title: label('iconStacker.remove', 'Remove {icon}'), children: jsxRuntime.jsx(actions.NtdTrash, { size: 14 }) })] }), jsxRuntime.jsxs("details", { className: "nice-icon-stacker__more", children: [jsxRuntime.jsx("summary", { children: t('iconStacker.more', 'More') }), jsxRuntime.jsxs("div", { className: "nice-icon-stacker__more-body", children: [!isBase && (jsxRuntime.jsxs(
|
|
185
|
+
return (jsxRuntime.jsxs("li", { className: "nice-icon-stacker__layer", style: depthStyle, children: [jsxRuntime.jsxs("div", { className: "nice-icon-stacker__layer-row", children: [jsxRuntime.jsx("input", { type: "radio", name: targetGroup, checked: (target === null || target === void 0 ? void 0 : target.id) === l.id, onChange: () => setSelected(l.id), "aria-label": label('iconStacker.target', 'Add the next icon into {icon}'), title: label('iconStacker.target', 'Add the next icon into {icon}') }), jsxRuntime.jsx("span", { className: "nice-icon-stacker__layer-icon", children: Icon ? jsxRuntime.jsx(Icon, { size: 24, variant: l.variant }) : null }), jsxRuntime.jsxs("span", { className: "nice-icon-stacker__layer-name", children: [l.icon, isBase && (jsxRuntime.jsx("span", { className: "nice-icon-stacker__badge", children: t('iconStacker.base', 'Base') }))] }), !isBase && (jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.align', 'Position') }), jsxRuntime.jsx("select", { value: align, onChange: (e) => update(l.id, { align: e.target.value }), children: ALIGNS.map((a) => (jsxRuntime.jsx("option", { value: a, children: a }, a))) })] })), !isBase && (jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.size', 'Size') }), jsxRuntime.jsx("input", { type: "range", min: 0.2, max: 1, step: 0.05, value: share, onChange: (e) => update(l.id, { size: Number(e.target.value) }) }), jsxRuntime.jsxs("output", { children: [Math.round(share * 100), "%"] })] })), jsxRuntime.jsx("button", { type: "button", className: "nice-icon-stacker__remove", onClick: () => remove(l.id), "aria-label": label('iconStacker.remove', 'Remove {icon}'), title: label('iconStacker.remove', 'Remove {icon}'), children: jsxRuntime.jsx(actions.NtdTrash, { size: 14 }) })] }), jsxRuntime.jsxs("details", { className: "nice-icon-stacker__more", children: [jsxRuntime.jsx("summary", { children: t('iconStacker.more', 'More') }), jsxRuntime.jsxs("div", { className: "nice-icon-stacker__more-body", children: [!isBase && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.rotation', 'Turn') }), jsxRuntime.jsx("input", { type: "range", min: -180, max: 180, step: 15, value: turn, onChange: (e) => {
|
|
186
|
+
const v = Number(e.target.value);
|
|
187
|
+
update(l.id, { rotation: v === turnDefault ? undefined : v });
|
|
188
|
+
} }), jsxRuntime.jsxs("output", { children: [turn, "\u00B0"] })] }), jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.offsetX', 'Shift right') }), jsxRuntime.jsx("input", { type: "range", min: -50, max: 50, step: 1, value: (_g = l.offsetX) !== null && _g !== void 0 ? _g : 0, onChange: (e) => update(l.id, { offsetX: Number(e.target.value) || undefined }) }), jsxRuntime.jsxs("output", { children: [(_h = l.offsetX) !== null && _h !== void 0 ? _h : 0, "%"] })] }), jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.offsetY', 'Shift down') }), jsxRuntime.jsx("input", { type: "range", min: -50, max: 50, step: 1, value: (_j = l.offsetY) !== null && _j !== void 0 ? _j : 0, onChange: (e) => update(l.id, { offsetY: Number(e.target.value) || undefined }) }), jsxRuntime.jsxs("output", { children: [(_k = l.offsetY) !== null && _k !== void 0 ? _k : 0, "%"] })] })] })), jsxRuntime.jsx(ColorField, { label: t('iconStacker.primary', 'Primary'), value: l.primaryColor, onChange: (v) => update(l.id, { primaryColor: v }), autoLabel: autoLabel, resetLabel: resetLabel }), jsxRuntime.jsx(ColorField, { label: t('iconStacker.secondary', 'Secondary'), value: l.secondaryColor, onChange: (v) => update(l.id, { secondaryColor: v }), autoLabel: autoLabel, resetLabel: resetLabel }), jsxRuntime.jsx(ColorField, { label: t('iconStacker.accent', 'Accent'), value: l.accentColor, onChange: (v) => update(l.id, { accentColor: v }), autoLabel: autoLabel, resetLabel: resetLabel })] })] }), (innermost || l.text || l.textBinding) && (jsxRuntime.jsxs("div", { className: "nice-icon-stacker__text", children: [jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.text', 'Text') }), jsxRuntime.jsx("input", { type: "text", value: (_l = l.text) !== null && _l !== void 0 ? _l : '', maxLength: 4, onChange: (e) => update(l.id, { text: e.target.value || undefined }) })] }), jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.textSize', 'Text size') }), jsxRuntime.jsx("input", { type: "range", min: 3, max: 14, step: 0.5, value: textSize, onChange: (e) => update(l.id, { textSize: Number(e.target.value) }) }), jsxRuntime.jsx("output", { children: textSize }), l.textSize !== undefined && (jsxRuntime.jsx("button", { type: "button", className: "nice-icon-stacker__reset", onClick: () => update(l.id, { textSize: undefined }), "aria-label": resetLabel, title: resetLabel, children: jsxRuntime.jsx(navigation.NtdClose, { size: 12 }) }))] }), jsxRuntime.jsx(ColorField, { label: t('iconStacker.textColor', 'Text colour'), value: l.textColor, onChange: (v) => update(l.id, { textColor: v }), autoLabel: autoLabel, resetLabel: resetLabel }), jsxRuntime.jsxs("label", { className: "nice-icon-stacker__field", children: [jsxRuntime.jsx("span", { children: t('iconStacker.bind', 'Bind to') }), jsxRuntime.jsx("input", { type: "text", value: (_m = l.textBinding) !== null && _m !== void 0 ? _m : '', "aria-invalid": bindingInvalid || undefined, title: t('iconStacker.bindHint', 'The name of the value the text shows, e.g. count — the text above is a sample'), onChange: (e) => update(l.id, { textBinding: e.target.value.trim() || undefined }) })] })] }))] }, l.id));
|
|
175
189
|
}) }), jsxRuntime.jsxs("div", { className: "nice-icon-stacker__code", children: [jsxRuntime.jsx("pre", { children: code }), jsxRuntime.jsxs("button", { type: "button", onClick: copy, children: [copied ? jsxRuntime.jsx(actions.NtdCheck, { size: 14 }) : jsxRuntime.jsx(actions.NtdCopy, { size: 14 }), ' ', copied
|
|
176
190
|
? t('iconStacker.copied', 'Copied')
|
|
177
191
|
: t('iconStacker.copy', 'Copy the code')] })] })] }))] }));
|
package/dist/cjs/createIcon.js
CHANGED
|
@@ -115,12 +115,20 @@ function renderCutoutShape(shape, fill, maskId) {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
function createIcon(options) {
|
|
118
|
+
var _a, _b, _c, _d;
|
|
118
119
|
const { displayName, viewBox = '0 0 24 24', paths, textCenter = BOX_CENTER } = options;
|
|
119
|
-
const
|
|
120
|
+
const solidDuotone = (props) => paths.solid({ ...props, accentColor: props.secondaryColor, accentOpacity: 1 });
|
|
121
|
+
const perfect = {
|
|
122
|
+
x: (_a = options.perfectStackX) !== null && _a !== void 0 ? _a : textCenter[0],
|
|
123
|
+
y: (_b = options.perfectStackY) !== null && _b !== void 0 ? _b : textCenter[1],
|
|
124
|
+
rotation: (_c = options.perfectStackRotation) !== null && _c !== void 0 ? _c : stacking.BOX_PERFECT_STACK.rotation,
|
|
125
|
+
size: (_d = options.perfectStackSize) !== null && _d !== void 0 ? _d : stacking.BOX_PERFECT_STACK.size,
|
|
126
|
+
};
|
|
127
|
+
const Icon = React.forwardRef(({ size = 'md', variant = 'solid', cutoutShape = 'rounded-square', color, lightColor, darkColor, primaryColor: propPrimaryColor = 'currentColor', secondaryColor, accentColor, primaryOpacity = 1, secondaryOpacity = 0.4, accentOpacity = 1, strokeWidth = 1, strokeLinecap: propLinecap, strokeLinejoin: propLinejoin, animation, animationDuration, smilAnimation, smilDuration = 1, smilRepeatCount = 'indefinite', smilEasing = 'ease-in-out', smilDelay = 0, gradient, gradientType = 'linear', gradientAngle = 135, gradientAnimation,
|
|
120
128
|
// Transform props
|
|
121
129
|
rotate, flipX, flipY, scale, transition, transformOrigin = 'center center',
|
|
122
130
|
// stacking (1.3.5): the parent icon reads a child's own align / size from its props
|
|
123
|
-
children, stackAlign: _stackAlign, stackSize: _stackSize, stackRotation: _stackRotation, textColor, textSize, title, className, style, ...rest }, ref) => {
|
|
131
|
+
children, stackAlign: _stackAlign, stackSize: _stackSize, stackRotation: _stackRotation, stackOffsetX: _stackOffsetX, stackOffsetY: _stackOffsetY, textColor, textSize, title, className, style, ...rest }, ref) => {
|
|
124
132
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
125
133
|
const resolvedSize = typeof size === 'number' ? size : ((_a = types.SIZE_MAP[size]) !== null && _a !== void 0 ? _a : 24);
|
|
126
134
|
const gradId = React.useId();
|
|
@@ -158,10 +166,13 @@ function createIcon(options) {
|
|
|
158
166
|
};
|
|
159
167
|
// Resolve renderer with fallback chain. `wireframe` has no authored layer
|
|
160
168
|
// at all — it is a mechanical re-draw of the full `solid` construction, so
|
|
161
|
-
// it never indexes `paths`.
|
|
169
|
+
// it never indexes `paths`. A duotone left out is the solid with its details
|
|
170
|
+
// in secondary (1.3.8): the body keeps primary, the larger area.
|
|
162
171
|
const renderer = variant === 'wireframe'
|
|
163
172
|
? paths.solid
|
|
164
|
-
:
|
|
173
|
+
: variant === 'duotone' && !paths.duotone
|
|
174
|
+
? solidDuotone
|
|
175
|
+
: ((_g = (_f = (_e = (_d = (_c = (_b = paths[variant]) !== null && _b !== void 0 ? _b : (variant === 'sharp' ? paths.solid : undefined)) !== null && _c !== void 0 ? _c : (variant === 'rounded' ? paths.solid : undefined)) !== null && _d !== void 0 ? _d : (variant === 'mini' ? paths.solid : undefined)) !== null && _e !== void 0 ? _e : (variant === '3d' ? paths.solid : undefined)) !== null && _f !== void 0 ? _f : (variant === 'vivid' ? paths.solid : undefined)) !== null && _g !== void 0 ? _g : paths.solid);
|
|
165
176
|
// 3D variant uses a filter for depth effect
|
|
166
177
|
const is3d = variant === '3d';
|
|
167
178
|
const filterId = React.useId();
|
|
@@ -236,7 +247,7 @@ function createIcon(options) {
|
|
|
236
247
|
accentColor: resolvedAccent,
|
|
237
248
|
tileColor: gradient ? effectivePrimary : resolvedSecondary,
|
|
238
249
|
strokeWidth,
|
|
239
|
-
|
|
250
|
+
perfect,
|
|
240
251
|
textColor,
|
|
241
252
|
textSize,
|
|
242
253
|
});
|
|
@@ -254,8 +265,10 @@ function createIcon(options) {
|
|
|
254
265
|
}) })] }) })), smilAnimation ? (needsSmilScaleWrapper ? (jsxRuntime.jsxs("g", { transform: `translate(${center.x}, ${center.y})`, filter: is3d ? `url(#${filterId})` : undefined, children: [jsxRuntime.jsx("g", { transform: `translate(-${center.x}, -${center.y})`, children: iconContent }), smilAnimationElements] })) : (jsxRuntime.jsxs("g", { filter: is3d ? `url(#${filterId})` : undefined, children: [iconContent, smilAnimationElements] }))) : is3d ? (jsxRuntime.jsx("g", { filter: `url(#${filterId})`, children: iconContent })) : (iconContent)] }));
|
|
255
266
|
});
|
|
256
267
|
Icon.displayName = displayName;
|
|
257
|
-
// lets a parent icon tell this one among its children (stacking, 1.3.5)
|
|
268
|
+
// lets a parent icon tell this one among its children (stacking, 1.3.5), and tells the stacker
|
|
269
|
+
// where a child of this one goes by default (1.3.8)
|
|
258
270
|
Icon[stacking.NTD_ICON_MARK] = true;
|
|
271
|
+
Icon[stacking.PERFECT_STACK] = perfect;
|
|
259
272
|
return Icon;
|
|
260
273
|
}
|
|
261
274
|
|
package/dist/cjs/iconParts.js
CHANGED
|
@@ -11,6 +11,19 @@ var createIcon = require('./createIcon.js');
|
|
|
11
11
|
function detailColor({ variant, secondaryColor, accentColor }) {
|
|
12
12
|
return variant === 'cutout' ? accentColor : secondaryColor;
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* A duotone renderer with its two colours swapped, at full strength (1.3.8) — for a duotone that
|
|
16
|
+
* drew its larger area in secondary (a pale body under a primary outline): the body turns
|
|
17
|
+
* primary, the outline and the details secondary.
|
|
18
|
+
*/
|
|
19
|
+
function swapDuotone(render) {
|
|
20
|
+
return (props) => render({
|
|
21
|
+
...props,
|
|
22
|
+
primaryColor: props.secondaryColor,
|
|
23
|
+
secondaryColor: props.primaryColor,
|
|
24
|
+
secondaryOpacity: 1,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
14
27
|
/**
|
|
15
28
|
* `content` drawn only inside `shape` — for accent lines that read as a cut through a shape (a
|
|
16
29
|
* pencil's band, a calendar's header line, an envelope's flap): clipped, they meet the shape's
|
|
@@ -42,6 +55,10 @@ function bellIcon(displayName, ringing) {
|
|
|
42
55
|
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
56
|
return createIcon.createIcon({
|
|
44
57
|
displayName,
|
|
58
|
+
// stacked icons and text go into the bell's body, above the clapper (1.3.8)
|
|
59
|
+
perfectStackX: 12,
|
|
60
|
+
perfectStackY: 10.5,
|
|
61
|
+
perfectStackSize: 0.4,
|
|
45
62
|
paths: {
|
|
46
63
|
solid: (props) => parts(props, props.primaryColor, props.primaryColor),
|
|
47
64
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: `${BELL}${BELL_CLAPPER_LINE}${ringing ? BELL_RINGS : ''}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
|
|
@@ -60,17 +77,21 @@ const PAPER_FOLD_SHARP = 'M12 2v8h8z';
|
|
|
60
77
|
* A paper icon — NtdFile, and every document drawn on the same page (NtdFileText, NtdInvoice,
|
|
61
78
|
* NtdContract, …), so their pages and folds match. The fold is secondary when the page is filled;
|
|
62
79
|
* `text` is the document's writing, a path of strokes kept below the fold (y ≥ 11, x 7–17),
|
|
63
|
-
* drawn in the accent colour on a filled page and in primary on a stroked one.
|
|
80
|
+
* drawn in the accent colour on a filled page (secondary in duotone) and in primary on a stroked one.
|
|
64
81
|
*/
|
|
65
82
|
function paperIcon(displayName, text = '') {
|
|
66
83
|
return createIcon.createIcon({
|
|
67
84
|
displayName,
|
|
85
|
+
// stacked icons and text go onto the page below the fold (1.3.8), the same on every paper
|
|
86
|
+
perfectStackX: 12,
|
|
87
|
+
perfectStackY: 14,
|
|
88
|
+
perfectStackSize: 0.5,
|
|
68
89
|
paths: {
|
|
69
90
|
solid: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: PAPER, fill: primaryColor }), jsxRuntime.jsx("path", { d: PAPER_FOLD, fill: secondaryColor }), text && (jsxRuntime.jsx("path", { d: text, stroke: accentColor, strokeOpacity: accentOpacity, strokeWidth: "1.5", strokeLinecap: "round", fill: "none" }))] })),
|
|
70
91
|
// square at every corner, the fold included — the derived `sharp` keeps a path's arcs round
|
|
71
92
|
sharp: ({ primaryColor, secondaryColor, accentColor, accentOpacity }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: PAPER_SHARP, fill: primaryColor }), jsxRuntime.jsx("path", { d: PAPER_FOLD_SHARP, fill: secondaryColor }), text && (jsxRuntime.jsx("path", { d: text, stroke: accentColor, strokeOpacity: accentOpacity, strokeWidth: "1.5", fill: "none" }))] })),
|
|
72
93
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx("path", { d: `${PAPER}${PAPER_FOLD_LINE}${text}`, stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })),
|
|
73
|
-
duotone
|
|
94
|
+
// duotone (1.3.8): createIcon's default — the solid page, its writing in secondary like the fold
|
|
74
95
|
vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: PAPER, fill: primaryColor }), jsxRuntime.jsx("path", { d: PAPER, fill: "white", opacity: "0.1" }), jsxRuntime.jsx("path", { d: PAPER_FOLD, fill: secondaryColor }), text && (jsxRuntime.jsx("path", { d: text, stroke: "white", strokeOpacity: "0.9", strokeWidth: "1.5", strokeLinecap: "round", fill: "none" }))] })),
|
|
75
96
|
},
|
|
76
97
|
});
|
|
@@ -79,4 +100,5 @@ function paperIcon(displayName, text = '') {
|
|
|
79
100
|
exports.bellIcon = bellIcon;
|
|
80
101
|
exports.detailColor = detailColor;
|
|
81
102
|
exports.paperIcon = paperIcon;
|
|
103
|
+
exports.swapDuotone = swapDuotone;
|
|
82
104
|
exports.within = within;
|
package/dist/cjs/iconStack.js
CHANGED
|
@@ -25,11 +25,13 @@ function niceIconStackCode(layers) {
|
|
|
25
25
|
}
|
|
26
26
|
const bound = layers.filter((l) => isValidTextBinding(l.textBinding));
|
|
27
27
|
const write = (layer, parent, indent) => {
|
|
28
|
-
var _a;
|
|
29
28
|
const attrs = [
|
|
30
|
-
|
|
29
|
+
// the parent's own spot is the default (1.3.8), so only another position is written
|
|
30
|
+
parent && layer.align && layer.align !== 'perfect' ? `stackAlign="${layer.align}"` : '',
|
|
31
31
|
parent && layer.size !== undefined ? `stackSize={${layer.size}}` : '',
|
|
32
|
-
parent && layer.rotation ? `stackRotation={${layer.rotation}}` : '',
|
|
32
|
+
parent && layer.rotation !== undefined ? `stackRotation={${layer.rotation}}` : '',
|
|
33
|
+
parent && layer.offsetX ? `stackOffsetX={${layer.offsetX}}` : '',
|
|
34
|
+
parent && layer.offsetY ? `stackOffsetY={${layer.offsetY}}` : '',
|
|
33
35
|
layer.variant && layer.variant !== (parent === null || parent === void 0 ? void 0 : parent.variant) ? `variant="${layer.variant}"` : '',
|
|
34
36
|
...COLOR_PROPS.map((p) => (layer[p] ? `${p}="${layer[p]}"` : '')),
|
|
35
37
|
layer.textSize !== undefined ? `textSize={${layer.textSize}}` : '',
|
|
@@ -59,7 +61,7 @@ function niceIconStackCode(layers) {
|
|
|
59
61
|
function renderIconStack(layers, icons, { baseProps, values } = {}) {
|
|
60
62
|
const resolve = (name) => (typeof icons === 'function' ? icons(name) : icons[name]);
|
|
61
63
|
const draw = (layer, parent) => {
|
|
62
|
-
var _a
|
|
64
|
+
var _a;
|
|
63
65
|
const Icon = resolve(layer.icon);
|
|
64
66
|
if (!Icon) {
|
|
65
67
|
return null;
|
|
@@ -85,7 +87,7 @@ function renderIconStack(layers, icons, { baseProps, values } = {}) {
|
|
|
85
87
|
inner,
|
|
86
88
|
text));
|
|
87
89
|
}
|
|
88
|
-
return (React.createElement(Icon, { ...own, key: layer.id, stackAlign:
|
|
90
|
+
return (React.createElement(Icon, { ...own, key: layer.id, stackAlign: layer.align, stackSize: layer.size, stackRotation: layer.rotation, stackOffsetX: layer.offsetX, stackOffsetY: layer.offsetY, variant: layer.variant !== parent.variant ? layer.variant : undefined },
|
|
89
91
|
inner,
|
|
90
92
|
text));
|
|
91
93
|
};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var createIcon = require('../createIcon.js');
|
|
5
|
+
var iconParts = require('../iconParts.js');
|
|
5
6
|
|
|
6
7
|
/* ────────────────────────────────────────────────────────────────────────────
|
|
7
8
|
UNIVERSAL ACCESS
|
|
@@ -49,7 +50,7 @@ const NtdDeaf = /* @__PURE__ */ createIcon.createIcon({
|
|
|
49
50
|
paths: {
|
|
50
51
|
solid: ({ primaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M10 5a5 5 0 015 5c0 2-1 3-2 4s-2 2-2 4v2", stroke: primaryColor, strokeWidth: "2", fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M7 8a3 3 0 013-3", stroke: primaryColor, strokeWidth: "2", fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M4 4l16 16", stroke: primaryColor, strokeWidth: "2", strokeLinecap: "round" })] })),
|
|
51
52
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M10 5a5 5 0 015 5c0 2-1 3-2 4s-2 2-2 4v2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M7 8a3 3 0 013-3", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M4 4l16 16", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" })] })),
|
|
52
|
-
duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "12", cy: "10", r: "6", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("path", { d: "M10 5a5 5 0 015 5c0 2-1 3-2 4s-2 2-2 4v2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M7 8a3 3 0 013-3", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M4 4l16 16", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" })] })),
|
|
53
|
+
duotone: iconParts.swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "12", cy: "10", r: "6", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("path", { d: "M10 5a5 5 0 015 5c0 2-1 3-2 4s-2 2-2 4v2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M7 8a3 3 0 013-3", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M4 4l16 16", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" })] }))),
|
|
53
54
|
vivid: ({ primaryColor, secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M10 5a5 5 0 015 5c0 2-1 3-2 4s-2 2-2 4v2", stroke: primaryColor, strokeWidth: "2", fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M7 8a3 3 0 013-3", stroke: secondaryColor, strokeWidth: "1.8", fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M4 4l16 16", stroke: "#3B82F6", strokeWidth: "1.5", strokeLinecap: "round" })] })),
|
|
54
55
|
},
|
|
55
56
|
});
|
|
@@ -58,7 +59,7 @@ const NtdSignLanguage = /* @__PURE__ */ createIcon.createIcon({
|
|
|
58
59
|
paths: {
|
|
59
60
|
solid: ({ primaryColor }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx("path", { d: "M8 13V7a2 2 0 014 0v2M12 9V6a2 2 0 014 0v3M16 9V7a2 2 0 014 0v6c0 4-3 7-7 7h-1c-3 0-6-2-6-5v-2a2 2 0 014 0v1", fill: primaryColor }) })),
|
|
60
61
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx("path", { d: "M8 13V7a2 2 0 014 0v2M12 9V6a2 2 0 014 0v3M16 9V7a2 2 0 014 0v6c0 4-3 7-7 7h-1c-3 0-6-2-6-5v-2a2 2 0 014 0v1", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none", strokeLinecap: "round", strokeLinejoin: "round" }) })),
|
|
61
|
-
duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M16 9V7a2 2 0 014 0v6c0 4-3 7-7 7h-1c-3 0-6-2-6-5v-2a2 2 0 014 0v1", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("path", { d: "M8 13V7a2 2 0 014 0v2M12 9V6a2 2 0 014 0v3M16 9V7a2 2 0 014 0v6c0 4-3 7-7 7h-1c-3 0-6-2-6-5v-2a2 2 0 014 0v1", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none", strokeLinecap: "round", strokeLinejoin: "round" })] })),
|
|
62
|
+
duotone: iconParts.swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M16 9V7a2 2 0 014 0v6c0 4-3 7-7 7h-1c-3 0-6-2-6-5v-2a2 2 0 014 0v1", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("path", { d: "M8 13V7a2 2 0 014 0v2M12 9V6a2 2 0 014 0v3M16 9V7a2 2 0 014 0v6c0 4-3 7-7 7h-1c-3 0-6-2-6-5v-2a2 2 0 014 0v1", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none", strokeLinecap: "round", strokeLinejoin: "round" })] }))),
|
|
62
63
|
vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M8 13V7a2 2 0 014 0v2M12 9V6a2 2 0 014 0v3M16 9V7a2 2 0 014 0v6c0 4-3 7-7 7h-1c-3 0-6-2-6-5v-2a2 2 0 014 0v1", fill: primaryColor }), jsxRuntime.jsx("path", { d: "M8 13V7a2 2 0 014 0v2M12 9V6a2 2 0 014 0v3M16 9V7a2 2 0 014 0v6c0 4-3 7-7 7h-1c-3 0-6-2-6-5v-2a2 2 0 014 0v1", fill: "white", opacity: "0.1" })] })),
|
|
63
64
|
},
|
|
64
65
|
});
|
|
@@ -76,7 +77,7 @@ const NtdAudioDescription = /* @__PURE__ */ createIcon.createIcon({
|
|
|
76
77
|
paths: {
|
|
77
78
|
solid: ({ primaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: primaryColor }), jsxRuntime.jsx("text", { x: "7", y: "15", fill: "white", fontSize: "8", fontWeight: "bold", fontFamily: "system-ui", children: "AD" })] })),
|
|
78
79
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("text", { x: "7", y: "15", fill: primaryColor, fontSize: "8", fontWeight: "bold", fontFamily: "system-ui", children: "AD" })] })),
|
|
79
|
-
duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("text", { x: "7", y: "15", fill: primaryColor, fontSize: "8", fontWeight: "bold", fontFamily: "system-ui", children: "AD" })] })),
|
|
80
|
+
duotone: iconParts.swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("text", { x: "7", y: "15", fill: primaryColor, fontSize: "8", fontWeight: "bold", fontFamily: "system-ui", children: "AD" })] }))),
|
|
80
81
|
vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: primaryColor }), jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: "white", opacity: "0.1" })] })),
|
|
81
82
|
},
|
|
82
83
|
});
|
|
@@ -85,7 +86,7 @@ const NtdClosedCaptions = /* @__PURE__ */ createIcon.createIcon({
|
|
|
85
86
|
paths: {
|
|
86
87
|
solid: ({ primaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: primaryColor }), jsxRuntime.jsx("text", { x: "6", y: "15", fill: "white", fontSize: "8", fontWeight: "bold", fontFamily: "system-ui", children: "CC" })] })),
|
|
87
88
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("text", { x: "6", y: "15", fill: primaryColor, fontSize: "8", fontWeight: "bold", fontFamily: "system-ui", children: "CC" })] })),
|
|
88
|
-
duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("text", { x: "6", y: "15", fill: primaryColor, fontSize: "8", fontWeight: "bold", fontFamily: "system-ui", children: "CC" })] })),
|
|
89
|
+
duotone: iconParts.swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("text", { x: "6", y: "15", fill: primaryColor, fontSize: "8", fontWeight: "bold", fontFamily: "system-ui", children: "CC" })] }))),
|
|
89
90
|
vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: primaryColor }), jsxRuntime.jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", fill: "white", opacity: "0.1" })] })),
|
|
90
91
|
},
|
|
91
92
|
});
|
|
@@ -97,7 +98,7 @@ const NtdDyslexia = /* @__PURE__ */ createIcon.createIcon({
|
|
|
97
98
|
paths: {
|
|
98
99
|
solid: ({ primaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", fill: primaryColor }), jsxRuntime.jsx("path", { d: "M8 7h8M8 11h6M8 15h4", stroke: "white", strokeWidth: "2", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M16 15l-2 2M14 15l2 2", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round" })] })),
|
|
99
100
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M8 7h8M8 11h6M8 15h4", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M16 15l-2 2M14 15l2 2", stroke: primaryColor, strokeWidth: "1.5", strokeLinecap: "round" })] })),
|
|
100
|
-
duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M8 7h8M8 11h6M8 15h4", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M16 15l-2 2M14 15l2 2", stroke: primaryColor, strokeWidth: "1.5", strokeLinecap: "round" })] })),
|
|
101
|
+
duotone: iconParts.swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M8 7h8M8 11h6M8 15h4", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M16 15l-2 2M14 15l2 2", stroke: primaryColor, strokeWidth: "1.5", strokeLinecap: "round" })] }))),
|
|
101
102
|
vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", fill: primaryColor }), jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", fill: "white", opacity: "0.1" }), jsxRuntime.jsx("path", { d: "M8 7h8M8 11h6M8 15h4", stroke: "white", strokeWidth: "1.8", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M16 15l-2 2M14 15l2 2", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round" })] })),
|
|
102
103
|
},
|
|
103
104
|
});
|
|
@@ -106,7 +107,7 @@ const NtdEasyRead = /* @__PURE__ */ createIcon.createIcon({
|
|
|
106
107
|
paths: {
|
|
107
108
|
solid: ({ primaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "2", fill: primaryColor }), jsxRuntime.jsx("path", { d: "M6 8h5v5H6zM13 8h5M13 11h4M6 16h12M6 19h8", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round" })] })),
|
|
108
109
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("rect", { x: "6", y: "8", width: "5", height: "5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M13 8h5M13 11h4M6 16h12M6 19h8", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" })] })),
|
|
109
|
-
duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("rect", { x: "6", y: "8", width: "5", height: "5", fill: primaryColor }), jsxRuntime.jsx("path", { d: "M13 8h5M13 11h4M6 16h12M6 19h8", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" })] })),
|
|
110
|
+
duotone: iconParts.swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("rect", { x: "6", y: "8", width: "5", height: "5", fill: primaryColor }), jsxRuntime.jsx("path", { d: "M13 8h5M13 11h4M6 16h12M6 19h8", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" })] }))),
|
|
110
111
|
vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "2", fill: primaryColor }), jsxRuntime.jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "2", fill: "white", opacity: "0.1" }), jsxRuntime.jsx("path", { d: "M6 8h5v5H6zM13 8h5M13 11h4M6 16h12M6 19h8", stroke: "white", strokeWidth: "1.8", strokeLinecap: "round" })] })),
|
|
111
112
|
},
|
|
112
113
|
});
|
|
@@ -118,7 +119,7 @@ const NtdScreenReader = /* @__PURE__ */ createIcon.createIcon({
|
|
|
118
119
|
paths: {
|
|
119
120
|
solid: ({ primaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "14", rx: "2", fill: primaryColor }), jsxRuntime.jsx("path", { d: "M8 18h8M10 18v2M14 18v2M8 20h8", stroke: primaryColor, strokeWidth: "2", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M8 7h2M8 10h4M8 13h6", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "16", cy: "7", r: "1.5", fill: "white" }), jsxRuntime.jsx("path", { d: "M14 7c0-1.5 1-2.5 2-2.5s2 1 2 2.5", stroke: "white", strokeWidth: "1", fill: "none" })] })),
|
|
120
121
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "14", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M8 18h8M10 18v2M14 18v2M8 20h8", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M8 7h2M8 10h4M8 13h6", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "16", cy: "7", r: "1.5", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M14 7c0-1.5 1-2.5 2-2.5s2 1 2 2.5", stroke: primaryColor, strokeWidth: "1", fill: "none" })] })),
|
|
121
|
-
duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "14", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "14", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M8 18h8M10 18v2M14 18v2M8 20h8", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M8 7h2M8 10h4M8 13h6", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "16", cy: "7", r: "1.5", fill: primaryColor })] })),
|
|
122
|
+
duotone: iconParts.swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "14", rx: "2", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "14", rx: "2", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M8 18h8M10 18v2M14 18v2M8 20h8", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M8 7h2M8 10h4M8 13h6", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "16", cy: "7", r: "1.5", fill: primaryColor })] }))),
|
|
122
123
|
vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "14", rx: "2", fill: primaryColor }), jsxRuntime.jsx("rect", { x: "4", y: "2", width: "16", height: "14", rx: "2", fill: "white", opacity: "0.08" }), jsxRuntime.jsx("circle", { cx: "16", cy: "7", r: "1.5", fill: "white" }), jsxRuntime.jsx("path", { d: "M8 18h8M10 18v2M14 18v2M8 20h8", stroke: "white", strokeWidth: "1", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M8 7h2M8 10h4M8 13h6", stroke: "white", strokeWidth: "1", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M14 7c0-1.5 1-2.5 2-2.5s2 1 2 2.5", stroke: "white", strokeWidth: "1", fill: "none" })] })),
|
|
123
124
|
},
|
|
124
125
|
});
|
|
@@ -136,7 +137,7 @@ const NtdAssistiveTech = /* @__PURE__ */ createIcon.createIcon({
|
|
|
136
137
|
paths: {
|
|
137
138
|
solid: ({ primaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", fill: primaryColor }), jsxRuntime.jsx("path", { d: "M12 6v2M12 16v2M6 12h2M16 12h2", stroke: "white", strokeWidth: "2", strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3", fill: "white" })] })),
|
|
138
139
|
outline: ({ primaryColor, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M12 6v2M12 16v2M6 12h2M16 12h2", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" })] })),
|
|
139
|
-
duotone: ({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M12 6v2M12 16v2M6 12h2M16 12h2", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3", fill: primaryColor })] })),
|
|
140
|
+
duotone: iconParts.swapDuotone(({ primaryColor, secondaryColor, secondaryOpacity, strokeWidth }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", fill: secondaryColor, opacity: secondaryOpacity }), jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", stroke: primaryColor, strokeWidth: strokeWidth, fill: "none" }), jsxRuntime.jsx("path", { d: "M12 6v2M12 16v2M6 12h2M16 12h2", stroke: primaryColor, strokeWidth: strokeWidth, strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3", fill: primaryColor })] }))),
|
|
140
141
|
vivid: ({ primaryColor, secondaryColor: _secondaryColor }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", fill: primaryColor }), jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", fill: "white", opacity: "0.08" }), jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3", fill: "white" }), jsxRuntime.jsx("path", { d: "M12 6v2M12 16v2M6 12h2M16 12h2", stroke: "white", strokeWidth: "1", strokeLinecap: "round" })] })),
|
|
141
142
|
},
|
|
142
143
|
});
|