iconora 1.0.0
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/LICENSE +30 -0
- package/README.md +1475 -0
- package/dist/index.cjs +66437 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +4293 -0
- package/dist/index.d.ts +4293 -0
- package/dist/index.js +64294 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -0
package/README.md
ADDED
|
@@ -0,0 +1,1475 @@
|
|
|
1
|
+
# Iconora
|
|
2
|
+
|
|
3
|
+
A lightweight, customizable React icon package built with TypeScript and SVG, with built-in CLI tooling for importing, deriving, generating, validating, inspecting, and managing icons.
|
|
4
|
+
|
|
5
|
+
Iconora provides clean, reusable icons designed for modern React applications with a simple and consistent API. It also provides a source-to-package workflow that can derive icons from external icon repositories such as Lucide and convert them into the Iconora architecture.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- โ๏ธ Built for React
|
|
10
|
+
|
|
11
|
+
- ๐ท Written in TypeScript
|
|
12
|
+
|
|
13
|
+
- ๐จ Customizable icon color
|
|
14
|
+
|
|
15
|
+
- ๐ Customizable icon size
|
|
16
|
+
|
|
17
|
+
- โ๏ธ Customizable stroke width
|
|
18
|
+
|
|
19
|
+
- ๐งฉ Supports standard SVG props
|
|
20
|
+
|
|
21
|
+
- ๐ณ Tree-shakeable
|
|
22
|
+
|
|
23
|
+
- ๐ฆ Available as an npm package
|
|
24
|
+
|
|
25
|
+
- ๐ชถ Lightweight and dependency-friendly
|
|
26
|
+
|
|
27
|
+
- ๐ Automated SVG โ TSX icon generation
|
|
28
|
+
|
|
29
|
+
- ๐งช Automated icon validation and testing
|
|
30
|
+
|
|
31
|
+
- ๐๏ธ Automatic icon metadata generation
|
|
32
|
+
|
|
33
|
+
- ๐ ๏ธ Built-in CLI tools for icon management and source import
|
|
34
|
+
|
|
35
|
+
๐ฅ Lucide repository icon import and derivation
|
|
36
|
+
|
|
37
|
+
๐ Source SVG โ Iconora architecture conversion
|
|
38
|
+
|
|
39
|
+
- ๐ Metadata inspection for individual or multiple icons
|
|
40
|
+
|
|
41
|
+
- โ
Production project verification
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Installation
|
|
46
|
+
|
|
47
|
+
Install Iconora using npm:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
|
|
51
|
+
npm install iconora
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Or using other package managers:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
|
|
59
|
+
yarn add iconora
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
|
|
65
|
+
pnpm add iconora
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Usage
|
|
72
|
+
|
|
73
|
+
Import an icon from Iconora:
|
|
74
|
+
|
|
75
|
+
```tsx
|
|
76
|
+
|
|
77
|
+
import { Search } from "iconora";
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Then use it inside your React component:
|
|
82
|
+
|
|
83
|
+
```tsx
|
|
84
|
+
|
|
85
|
+
<Search />
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Customization
|
|
92
|
+
|
|
93
|
+
Iconora icons can be customized using props.
|
|
94
|
+
|
|
95
|
+
### Size
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
|
|
99
|
+
<Search size={24} />
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
|
|
105
|
+
<Search size={48} />
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Color
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
|
|
113
|
+
<Search color="red" />
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
|
|
119
|
+
<Search color="#0f95" />
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
You can also use CSS-based coloring:
|
|
124
|
+
|
|
125
|
+
```tsx
|
|
126
|
+
|
|
127
|
+
<Search className="text-red-500" />
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Stroke Width
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
|
|
135
|
+
<Search strokeWidth={3} />
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Combining Props
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
|
|
143
|
+
<Search
|
|
144
|
+
|
|
145
|
+
ย size={48}
|
|
146
|
+
|
|
147
|
+
ย color="#0f95"
|
|
148
|
+
|
|
149
|
+
ย strokeWidth={3}
|
|
150
|
+
|
|
151
|
+
/>
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## SVG Props
|
|
158
|
+
|
|
159
|
+
Iconora icons support standard React SVG properties.
|
|
160
|
+
|
|
161
|
+
For example:
|
|
162
|
+
|
|
163
|
+
```tsx
|
|
164
|
+
|
|
165
|
+
<Search
|
|
166
|
+
|
|
167
|
+
ย size={32}
|
|
168
|
+
|
|
169
|
+
ย className="my-icon"
|
|
170
|
+
|
|
171
|
+
ย aria-label="Search"
|
|
172
|
+
|
|
173
|
+
/>
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
You can also use standard SVG-related props such as:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
|
|
181
|
+
id
|
|
182
|
+
|
|
183
|
+
style
|
|
184
|
+
|
|
185
|
+
role
|
|
186
|
+
|
|
187
|
+
aria-label
|
|
188
|
+
|
|
189
|
+
onClick
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Because Iconora icons are React SVG components, standard React SVG attributes and event handlers can be used where supported by React.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## TypeScript
|
|
198
|
+
|
|
199
|
+
Iconora includes TypeScript type declarations, so you get type safety and editor autocomplete when using the package.
|
|
200
|
+
|
|
201
|
+
```tsx
|
|
202
|
+
|
|
203
|
+
import {
|
|
204
|
+
|
|
205
|
+
ย Search,
|
|
206
|
+
|
|
207
|
+
ย type IconProps,
|
|
208
|
+
|
|
209
|
+
} from "iconora";
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
# Importing Icons from Lucide
|
|
216
|
+
|
|
217
|
+
Iconora can import and derive the SVG icon collection from the official Lucide GitHub repository using a built-in CLI.
|
|
218
|
+
|
|
219
|
+
The import command is:
|
|
220
|
+
|
|
221
|
+
npm run import:lucide
|
|
222
|
+
|
|
223
|
+
This command is designed for source acquisition and derivation. It extracts the Lucide SVG icon sources and places them into Iconora's icons/ source directory.
|
|
224
|
+
|
|
225
|
+
It does not directly create the final React components. The imported SVG files become Iconora source files and then pass through the normal Iconora generation pipeline.
|
|
226
|
+
|
|
227
|
+
## Lucide Import Workflow
|
|
228
|
+
|
|
229
|
+
The complete flow is:
|
|
230
|
+
|
|
231
|
+
Lucide GitHub Repository
|
|
232
|
+
โ
|
|
233
|
+
โผ
|
|
234
|
+
npm run import:lucide
|
|
235
|
+
โ
|
|
236
|
+
โผ
|
|
237
|
+
icons/*.svg
|
|
238
|
+
โ
|
|
239
|
+
โผ
|
|
240
|
+
npm run validate
|
|
241
|
+
โ
|
|
242
|
+
โผ
|
|
243
|
+
npm run generate
|
|
244
|
+
โ
|
|
245
|
+
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
|
|
246
|
+
โผ โผ โผ
|
|
247
|
+
TSX icons index.ts metadata
|
|
248
|
+
โ โ โ
|
|
249
|
+
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
|
|
250
|
+
โผ
|
|
251
|
+
npm run check
|
|
252
|
+
โ
|
|
253
|
+
โโโโโโโโโผโโโโโโโโ
|
|
254
|
+
โผ โผ โผ
|
|
255
|
+
typecheck tests build
|
|
256
|
+
โ โ โ
|
|
257
|
+
โโโโโโโโโผโโโโโโโโ
|
|
258
|
+
โผ
|
|
259
|
+
๐ฆ Iconora
|
|
260
|
+
|
|
261
|
+
## What npm run import:lucide Does
|
|
262
|
+
|
|
263
|
+
The command is responsible for:
|
|
264
|
+
|
|
265
|
+
Obtaining the Lucide SVG icon sources from the Lucide GitHub repository.
|
|
266
|
+
|
|
267
|
+
Extracting the SVG icon files.
|
|
268
|
+
|
|
269
|
+
Deriving the source collection into Iconora's icons/ directory.
|
|
270
|
+
|
|
271
|
+
Preparing the icons for Iconora's validation and generation pipeline.
|
|
272
|
+
|
|
273
|
+
Keeping external icon acquisition separate from React component generation.
|
|
274
|
+
|
|
275
|
+
The important architectural distinction is:
|
|
276
|
+
|
|
277
|
+
import:lucide
|
|
278
|
+
โ
|
|
279
|
+
External source โ Iconora SVG source
|
|
280
|
+
|
|
281
|
+
generate
|
|
282
|
+
โ
|
|
283
|
+
Iconora SVG source โ Iconora React architecture
|
|
284
|
+
|
|
285
|
+
## Example
|
|
286
|
+
|
|
287
|
+
Run:
|
|
288
|
+
|
|
289
|
+
npm run import:lucide
|
|
290
|
+
|
|
291
|
+
The imported source collection is placed under:
|
|
292
|
+
|
|
293
|
+
icons/
|
|
294
|
+
โโโ activity.svg
|
|
295
|
+
โโโ airplay.svg
|
|
296
|
+
โโโ alarm-clock.svg
|
|
297
|
+
โโโ search.svg
|
|
298
|
+
โโโ x.svg
|
|
299
|
+
โโโ ...
|
|
300
|
+
|
|
301
|
+
After importing, validate the collection:
|
|
302
|
+
|
|
303
|
+
npm run validate
|
|
304
|
+
|
|
305
|
+
Then generate the Iconora components:
|
|
306
|
+
|
|
307
|
+
npm run generate
|
|
308
|
+
|
|
309
|
+
Finally verify the complete project:
|
|
310
|
+
|
|
311
|
+
npm run check
|
|
312
|
+
|
|
313
|
+
## Important
|
|
314
|
+
|
|
315
|
+
npm run import:lucide is an import/derivation command, not the final Iconora generation command.
|
|
316
|
+
|
|
317
|
+
The commands have separate responsibilities:
|
|
318
|
+
|
|
319
|
+
Command
|
|
320
|
+
|
|
321
|
+
Responsibility
|
|
322
|
+
|
|
323
|
+
npm run import:lucide
|
|
324
|
+
|
|
325
|
+
Derive/import Lucide SVG sources into Iconora
|
|
326
|
+
|
|
327
|
+
npm run validate
|
|
328
|
+
|
|
329
|
+
Validate Iconora SVG sources
|
|
330
|
+
|
|
331
|
+
npm run generate
|
|
332
|
+
|
|
333
|
+
Convert SVG sources into Iconora React/TypeScript architecture
|
|
334
|
+
|
|
335
|
+
npm run check
|
|
336
|
+
|
|
337
|
+
Verify TypeScript, tests, and production build
|
|
338
|
+
|
|
339
|
+
This separation allows Iconora to remain a standalone icon package instead of being tightly coupled to Lucide's runtime package.
|
|
340
|
+
|
|
341
|
+
## Recommended Lucide Import Workflow
|
|
342
|
+
|
|
343
|
+
When refreshing the Lucide-derived icon collection:
|
|
344
|
+
|
|
345
|
+
npm run import:lucide
|
|
346
|
+
npm run validate
|
|
347
|
+
npm run generate
|
|
348
|
+
npm run check
|
|
349
|
+
|
|
350
|
+
After the import, icons/ remains the source layer used by the rest of the Iconora pipeline.
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
# Adding New Icons
|
|
355
|
+
|
|
356
|
+
Iconora uses SVG files as the **source of truth**.
|
|
357
|
+
|
|
358
|
+
You do not manually create the corresponding `.tsx` icon component, update `index.ts`, or update the metadata file.
|
|
359
|
+
|
|
360
|
+
Instead, add the SVG to:
|
|
361
|
+
|
|
362
|
+
```text
|
|
363
|
+
|
|
364
|
+
icons/
|
|
365
|
+
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
and let Iconora generate everything automatically.
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## 1. Add the SVG
|
|
373
|
+
|
|
374
|
+
Place your SVG file inside:
|
|
375
|
+
|
|
376
|
+
```text
|
|
377
|
+
|
|
378
|
+
icons/
|
|
379
|
+
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
For example:
|
|
383
|
+
|
|
384
|
+
```text
|
|
385
|
+
|
|
386
|
+
icons/
|
|
387
|
+
|
|
388
|
+
โโโ search.svg
|
|
389
|
+
|
|
390
|
+
โโโ x.svg
|
|
391
|
+
|
|
392
|
+
โโโ home.svg
|
|
393
|
+
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
The filename determines the generated component name.
|
|
397
|
+
|
|
398
|
+
For example:
|
|
399
|
+
|
|
400
|
+
```text
|
|
401
|
+
|
|
402
|
+
search.svg โ Search
|
|
403
|
+
|
|
404
|
+
x.svg ย ย ย โ X
|
|
405
|
+
|
|
406
|
+
home.svg ย โ Home
|
|
407
|
+
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
For names containing hyphens:
|
|
411
|
+
|
|
412
|
+
```text
|
|
413
|
+
|
|
414
|
+
arrow-left.svg โ ArrowLeft
|
|
415
|
+
|
|
416
|
+
chevron-down.svg โ ChevronDown
|
|
417
|
+
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## 2. Validate the SVG
|
|
423
|
+
|
|
424
|
+
After adding the SVG, run:
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
|
|
428
|
+
npm run validate
|
|
429
|
+
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
This checks the source SVG collection before generating the React components.
|
|
433
|
+
|
|
434
|
+
Example:
|
|
435
|
+
|
|
436
|
+
```text
|
|
437
|
+
|
|
438
|
+
Iconora SVG validation
|
|
439
|
+
|
|
440
|
+
โ Iconora SVG validation passed
|
|
441
|
+
|
|
442
|
+
3 SVG icons checked
|
|
443
|
+
|
|
444
|
+
0 failed
|
|
445
|
+
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
If validation fails, fix the SVG before continuing.
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## 3. Generate the Icon
|
|
453
|
+
|
|
454
|
+
Once validation passes, run:
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
|
|
458
|
+
npm run generate
|
|
459
|
+
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
Iconora automatically generates the React/TypeScript component.
|
|
463
|
+
|
|
464
|
+
For example:
|
|
465
|
+
|
|
466
|
+
```text
|
|
467
|
+
|
|
468
|
+
icons/home.svg
|
|
469
|
+
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
becomes:
|
|
473
|
+
|
|
474
|
+
```text
|
|
475
|
+
|
|
476
|
+
src/icons/Home.tsx
|
|
477
|
+
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
The generator also updates:
|
|
481
|
+
|
|
482
|
+
```text
|
|
483
|
+
|
|
484
|
+
src/index.ts
|
|
485
|
+
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
and:
|
|
489
|
+
|
|
490
|
+
```text
|
|
491
|
+
|
|
492
|
+
src/metadata/icons.json
|
|
493
|
+
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
The generated structure looks like:
|
|
497
|
+
|
|
498
|
+
```text
|
|
499
|
+
|
|
500
|
+
src/
|
|
501
|
+
|
|
502
|
+
โโโ icons/
|
|
503
|
+
|
|
504
|
+
โ ย โโโ Search.tsx
|
|
505
|
+
|
|
506
|
+
โ ย โโโ X.tsx
|
|
507
|
+
|
|
508
|
+
โ ย โโโ Home.tsx
|
|
509
|
+
|
|
510
|
+
โ
|
|
511
|
+
|
|
512
|
+
โโโ metadata/
|
|
513
|
+
|
|
514
|
+
โ ย โโโ icons.json
|
|
515
|
+
|
|
516
|
+
โ
|
|
517
|
+
|
|
518
|
+
โโโ index.ts
|
|
519
|
+
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
### Important
|
|
523
|
+
|
|
524
|
+
Do not manually edit generated files:
|
|
525
|
+
|
|
526
|
+
```text
|
|
527
|
+
|
|
528
|
+
src/icons/
|
|
529
|
+
|
|
530
|
+
src/index.ts
|
|
531
|
+
|
|
532
|
+
src/metadata/icons.json
|
|
533
|
+
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
If you need to change an icon, modify the original SVG inside:
|
|
537
|
+
|
|
538
|
+
```text
|
|
539
|
+
|
|
540
|
+
icons/
|
|
541
|
+
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
and run:
|
|
545
|
+
|
|
546
|
+
```bash
|
|
547
|
+
|
|
548
|
+
npm run generate
|
|
549
|
+
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
again.
|
|
553
|
+
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## 4. Verify the Project
|
|
557
|
+
|
|
558
|
+
After generating the icon, run:
|
|
559
|
+
|
|
560
|
+
```bash
|
|
561
|
+
|
|
562
|
+
npm run check
|
|
563
|
+
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
This is the recommended verification command.
|
|
567
|
+
|
|
568
|
+
It automatically runs:
|
|
569
|
+
|
|
570
|
+
```text
|
|
571
|
+
|
|
572
|
+
npm run validate
|
|
573
|
+
|
|
574
|
+
ย ย ย โ
|
|
575
|
+
|
|
576
|
+
npm run typecheck
|
|
577
|
+
|
|
578
|
+
ย ย ย โ
|
|
579
|
+
|
|
580
|
+
npm run test:run
|
|
581
|
+
|
|
582
|
+
ย ย ย โ
|
|
583
|
+
|
|
584
|
+
npm run build
|
|
585
|
+
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
A successful check means the generated icon passes:
|
|
589
|
+
|
|
590
|
+
- SVG validation
|
|
591
|
+
|
|
592
|
+
- TypeScript type checking
|
|
593
|
+
|
|
594
|
+
- Icon tests
|
|
595
|
+
|
|
596
|
+
- Production build
|
|
597
|
+
|
|
598
|
+
---
|
|
599
|
+
|
|
600
|
+
## Complete New Icon Workflow
|
|
601
|
+
|
|
602
|
+
Whenever you add a new icon, the recommended workflow is:
|
|
603
|
+
|
|
604
|
+
```bash
|
|
605
|
+
|
|
606
|
+
npm run validate
|
|
607
|
+
|
|
608
|
+
npm run generate
|
|
609
|
+
|
|
610
|
+
npm run check
|
|
611
|
+
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
The complete process is:
|
|
615
|
+
|
|
616
|
+
```text
|
|
617
|
+
|
|
618
|
+
icons/home.svg
|
|
619
|
+
|
|
620
|
+
ย ย ย โ
|
|
621
|
+
|
|
622
|
+
ย ย ย โผ
|
|
623
|
+
|
|
624
|
+
npm run validate
|
|
625
|
+
|
|
626
|
+
ย ย ย โ
|
|
627
|
+
|
|
628
|
+
ย ย ย โผ
|
|
629
|
+
|
|
630
|
+
npm run generate
|
|
631
|
+
|
|
632
|
+
ย ย ย โ
|
|
633
|
+
|
|
634
|
+
ย ย ย โโโโโโโโโโโโโโโโโ
|
|
635
|
+
|
|
636
|
+
ย ย ย โผ ย ย ย ย ย ย ย โผ
|
|
637
|
+
|
|
638
|
+
Home.tsx ย ย ย ย ย metadata
|
|
639
|
+
|
|
640
|
+
ย ย ย โ
|
|
641
|
+
|
|
642
|
+
ย ย ย โโโโโโโโโฌโโโโโโโโ
|
|
643
|
+
|
|
644
|
+
ย ย ย ย ย ย ย โผ
|
|
645
|
+
|
|
646
|
+
ย ย ย ย ย ย index.ts
|
|
647
|
+
|
|
648
|
+
ย ย ย ย ย ย ย โ
|
|
649
|
+
|
|
650
|
+
ย ย ย ย ย ย ย โผ
|
|
651
|
+
|
|
652
|
+
ย ย ย ย npm run check
|
|
653
|
+
|
|
654
|
+
ย ย ย ย ย ย ย โ
|
|
655
|
+
|
|
656
|
+
ย ย ย ย โโโโโโโโผโโโโโโโ
|
|
657
|
+
|
|
658
|
+
ย ย ย ย โผ ย ย ย โผ ย ย ย โผ
|
|
659
|
+
|
|
660
|
+
ย ย Typecheck Tests ย Build
|
|
661
|
+
|
|
662
|
+
ย ย ย ย โ ย ย ย โ ย ย ย โ
|
|
663
|
+
|
|
664
|
+
ย ย ย ย โโโโโโโโผโโโโโโโ
|
|
665
|
+
|
|
666
|
+
ย ย ย ย ย ย ย โผ
|
|
667
|
+
|
|
668
|
+
ย ย ย ย ย ๐ฆ Iconora
|
|
669
|
+
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
---
|
|
673
|
+
|
|
674
|
+
# Inspecting Icon Metadata
|
|
675
|
+
|
|
676
|
+
Iconora provides a metadata inspection command.
|
|
677
|
+
|
|
678
|
+
## Single Icon
|
|
679
|
+
|
|
680
|
+
```bash
|
|
681
|
+
|
|
682
|
+
npm run getMetadata -- Search
|
|
683
|
+
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
Icon names are case-insensitive:
|
|
687
|
+
|
|
688
|
+
```bash
|
|
689
|
+
|
|
690
|
+
npm run getMetadata -- Search
|
|
691
|
+
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
```bash
|
|
695
|
+
|
|
696
|
+
npm run getMetadata -- search
|
|
697
|
+
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
```bash
|
|
701
|
+
|
|
702
|
+
npm run getMetadata -- SEARCH
|
|
703
|
+
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
These all refer to the same icon.
|
|
707
|
+
|
|
708
|
+
---
|
|
709
|
+
|
|
710
|
+
## Multiple Icons
|
|
711
|
+
|
|
712
|
+
You can inspect multiple icons at once:
|
|
713
|
+
|
|
714
|
+
```bash
|
|
715
|
+
|
|
716
|
+
npm run getMetadata -- Search X Home
|
|
717
|
+
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
You can also use:
|
|
721
|
+
|
|
722
|
+
```bash
|
|
723
|
+
|
|
724
|
+
npm run getMetadata -- --Search --X --Home
|
|
725
|
+
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
---
|
|
729
|
+
|
|
730
|
+
## All Icons
|
|
731
|
+
|
|
732
|
+
To display metadata for every icon:
|
|
733
|
+
|
|
734
|
+
```bash
|
|
735
|
+
|
|
736
|
+
npm run getMetadata -- --all
|
|
737
|
+
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
> **Note:** This can produce a large amount of terminal output for large icon collections.
|
|
741
|
+
|
|
742
|
+
---
|
|
743
|
+
|
|
744
|
+
## Missing Icons
|
|
745
|
+
|
|
746
|
+
Missing icons are reported without stopping successful lookups.
|
|
747
|
+
|
|
748
|
+
For example:
|
|
749
|
+
|
|
750
|
+
```bash
|
|
751
|
+
|
|
752
|
+
npm run getMetadata -- Search X DoesNotExist
|
|
753
|
+
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
The command will display the metadata for `Search` and `X` while reporting:
|
|
757
|
+
|
|
758
|
+
```text
|
|
759
|
+
|
|
760
|
+
โ DoesNotExist
|
|
761
|
+
|
|
762
|
+
ย Metadata not found
|
|
763
|
+
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
---
|
|
767
|
+
|
|
768
|
+
## Metadata Source
|
|
769
|
+
|
|
770
|
+
Metadata is read from:
|
|
771
|
+
|
|
772
|
+
```text
|
|
773
|
+
|
|
774
|
+
src/metadata/icons.json
|
|
775
|
+
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
`getMetadata` is completely **read-only**.
|
|
779
|
+
|
|
780
|
+
It does not modify:
|
|
781
|
+
|
|
782
|
+
```text
|
|
783
|
+
|
|
784
|
+
icons/
|
|
785
|
+
|
|
786
|
+
src/icons/
|
|
787
|
+
|
|
788
|
+
src/index.ts
|
|
789
|
+
|
|
790
|
+
src/metadata/icons.json
|
|
791
|
+
|
|
792
|
+
```
|
|
793
|
+
|
|
794
|
+
If the metadata file is missing or outdated, run:
|
|
795
|
+
|
|
796
|
+
```bash
|
|
797
|
+
|
|
798
|
+
npm run generate
|
|
799
|
+
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
before using `getMetadata`.
|
|
803
|
+
|
|
804
|
+
---
|
|
805
|
+
|
|
806
|
+
# Removing Icons
|
|
807
|
+
|
|
808
|
+
Iconora provides a CLI command for removing icons.
|
|
809
|
+
|
|
810
|
+
## Full Icon Deletion
|
|
811
|
+
|
|
812
|
+
To completely remove an icon:
|
|
813
|
+
|
|
814
|
+
```bash
|
|
815
|
+
|
|
816
|
+
npm run delete -- Search
|
|
817
|
+
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
This removes:
|
|
821
|
+
|
|
822
|
+
```text
|
|
823
|
+
|
|
824
|
+
icons/search.svg
|
|
825
|
+
|
|
826
|
+
src/icons/Search.tsx
|
|
827
|
+
|
|
828
|
+
Search from src/index.ts
|
|
829
|
+
|
|
830
|
+
Search from src/metadata/icons.json
|
|
831
|
+
|
|
832
|
+
```
|
|
833
|
+
|
|
834
|
+
Icon names are case-insensitive:
|
|
835
|
+
|
|
836
|
+
```bash
|
|
837
|
+
|
|
838
|
+
npm run delete -- Search
|
|
839
|
+
|
|
840
|
+
npm run delete -- search
|
|
841
|
+
|
|
842
|
+
npm run delete -- SEARCH
|
|
843
|
+
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
Iconora asks for confirmation before performing the deletion.
|
|
847
|
+
|
|
848
|
+
---
|
|
849
|
+
|
|
850
|
+
## Selective Deletion
|
|
851
|
+
|
|
852
|
+
You can also delete individual parts of an icon.
|
|
853
|
+
|
|
854
|
+
### Delete only the SVG
|
|
855
|
+
|
|
856
|
+
```bash
|
|
857
|
+
|
|
858
|
+
npm run delete -- --Search svg
|
|
859
|
+
|
|
860
|
+
```
|
|
861
|
+
|
|
862
|
+
### Delete only the generated TSX
|
|
863
|
+
|
|
864
|
+
```bash
|
|
865
|
+
|
|
866
|
+
npm run delete -- --Search tsx
|
|
867
|
+
|
|
868
|
+
```
|
|
869
|
+
|
|
870
|
+
### Delete only metadata
|
|
871
|
+
|
|
872
|
+
```bash
|
|
873
|
+
|
|
874
|
+
npm run delete -- --Search metadata
|
|
875
|
+
|
|
876
|
+
```
|
|
877
|
+
|
|
878
|
+
### Delete multiple parts
|
|
879
|
+
|
|
880
|
+
```bash
|
|
881
|
+
|
|
882
|
+
npm run delete -- --Search svg tsx
|
|
883
|
+
|
|
884
|
+
```
|
|
885
|
+
|
|
886
|
+
Deletion targets are case-insensitive:
|
|
887
|
+
|
|
888
|
+
```bash
|
|
889
|
+
|
|
890
|
+
npm run delete -- --SEARCH SVG TSX
|
|
891
|
+
|
|
892
|
+
```
|
|
893
|
+
|
|
894
|
+
### Important
|
|
895
|
+
|
|
896
|
+
Selective deletion can intentionally leave generated files out of sync.
|
|
897
|
+
|
|
898
|
+
For normal icon removal, use:
|
|
899
|
+
|
|
900
|
+
```bash
|
|
901
|
+
|
|
902
|
+
npm run delete -- Search
|
|
903
|
+
|
|
904
|
+
```
|
|
905
|
+
|
|
906
|
+
If you intentionally perform a partial deletion and need to regenerate the project state from the remaining SVG sources, run:
|
|
907
|
+
|
|
908
|
+
```bash
|
|
909
|
+
|
|
910
|
+
npm run generate
|
|
911
|
+
|
|
912
|
+
```
|
|
913
|
+
|
|
914
|
+
---
|
|
915
|
+
|
|
916
|
+
# Iconora CLI Architecture
|
|
917
|
+
|
|
918
|
+
Iconora's built-in CLIs are organized as a pipeline rather than as unrelated utilities.
|
|
919
|
+
|
|
920
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
921
|
+
โ External Icon Source โ
|
|
922
|
+
โ Lucide GitHub Repository โ
|
|
923
|
+
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
|
|
924
|
+
โ
|
|
925
|
+
โผ
|
|
926
|
+
npm run import:lucide
|
|
927
|
+
โ
|
|
928
|
+
โผ
|
|
929
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
930
|
+
โ Iconora Source Layer โ
|
|
931
|
+
โ icons/*.svg โ
|
|
932
|
+
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
|
|
933
|
+
โ
|
|
934
|
+
โผ
|
|
935
|
+
npm run validate
|
|
936
|
+
โ
|
|
937
|
+
โผ
|
|
938
|
+
npm run generate
|
|
939
|
+
โ
|
|
940
|
+
โโโโโโโโโโผโโโโโโโโโ
|
|
941
|
+
โผ โผ โผ
|
|
942
|
+
TSX index metadata
|
|
943
|
+
โ โ โ
|
|
944
|
+
โโโโโโโโโโผโโโโโโโโโ
|
|
945
|
+
โผ
|
|
946
|
+
npm run check
|
|
947
|
+
โ
|
|
948
|
+
โโโโโโโโโโผโโโโโโโโโ
|
|
949
|
+
โผ โผ โผ
|
|
950
|
+
typecheck tests build
|
|
951
|
+
โ
|
|
952
|
+
โผ
|
|
953
|
+
๐ฆ Iconora
|
|
954
|
+
|
|
955
|
+
This architecture gives Iconora a clear separation of concerns:
|
|
956
|
+
|
|
957
|
+
Import/derivation acquires external icon sources.
|
|
958
|
+
|
|
959
|
+
Source SVGs are the Iconora collection's source layer.
|
|
960
|
+
|
|
961
|
+
Validation checks source correctness.
|
|
962
|
+
|
|
963
|
+
Generation converts SVGs into the Iconora React/TypeScript architecture.
|
|
964
|
+
|
|
965
|
+
Metadata tooling provides icon information.
|
|
966
|
+
|
|
967
|
+
Deletion tooling manages the source and generated collection.
|
|
968
|
+
|
|
969
|
+
Verification ensures the package is production-ready.
|
|
970
|
+
|
|
971
|
+
The package is therefore not simply a wrapper around Lucide. Lucide can be one source used to derive the Iconora collection, while Iconora maintains its own source, generation, metadata, and package architecture.
|
|
972
|
+
|
|
973
|
+
---
|
|
974
|
+
|
|
975
|
+
# Development
|
|
976
|
+
|
|
977
|
+
Clone the repository:
|
|
978
|
+
|
|
979
|
+
```bash
|
|
980
|
+
|
|
981
|
+
git clone <repository-url>
|
|
982
|
+
|
|
983
|
+
```
|
|
984
|
+
|
|
985
|
+
Enter the project:
|
|
986
|
+
|
|
987
|
+
```bash
|
|
988
|
+
|
|
989
|
+
cd iconora
|
|
990
|
+
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
Install dependencies:
|
|
994
|
+
|
|
995
|
+
```bash
|
|
996
|
+
|
|
997
|
+
npm install
|
|
998
|
+
|
|
999
|
+
```
|
|
1000
|
+
|
|
1001
|
+
---
|
|
1002
|
+
|
|
1003
|
+
## Development Commands
|
|
1004
|
+
|
|
1005
|
+
### Validate SVG icons
|
|
1006
|
+
|
|
1007
|
+
```bash
|
|
1008
|
+
|
|
1009
|
+
npm run validate
|
|
1010
|
+
|
|
1011
|
+
```
|
|
1012
|
+
|
|
1013
|
+
### Generate icon components
|
|
1014
|
+
|
|
1015
|
+
```bash
|
|
1016
|
+
|
|
1017
|
+
npm run generate
|
|
1018
|
+
|
|
1019
|
+
```
|
|
1020
|
+
|
|
1021
|
+
### Delete an icon
|
|
1022
|
+
|
|
1023
|
+
```bash
|
|
1024
|
+
|
|
1025
|
+
npm run delete -- IconName
|
|
1026
|
+
|
|
1027
|
+
```
|
|
1028
|
+
|
|
1029
|
+
### Get icon metadata
|
|
1030
|
+
|
|
1031
|
+
```bash
|
|
1032
|
+
|
|
1033
|
+
npm run getMetadata -- IconName
|
|
1034
|
+
|
|
1035
|
+
```
|
|
1036
|
+
|
|
1037
|
+
### Check the complete project
|
|
1038
|
+
|
|
1039
|
+
```bash
|
|
1040
|
+
|
|
1041
|
+
npm run check
|
|
1042
|
+
|
|
1043
|
+
```
|
|
1044
|
+
|
|
1045
|
+
### Typecheck
|
|
1046
|
+
|
|
1047
|
+
```bash
|
|
1048
|
+
|
|
1049
|
+
npm run typecheck
|
|
1050
|
+
|
|
1051
|
+
```
|
|
1052
|
+
|
|
1053
|
+
### Run tests once
|
|
1054
|
+
|
|
1055
|
+
```bash
|
|
1056
|
+
|
|
1057
|
+
npm run test:run
|
|
1058
|
+
|
|
1059
|
+
```
|
|
1060
|
+
|
|
1061
|
+
### Run tests in development mode
|
|
1062
|
+
|
|
1063
|
+
```bash
|
|
1064
|
+
|
|
1065
|
+
npm run test
|
|
1066
|
+
|
|
1067
|
+
```
|
|
1068
|
+
|
|
1069
|
+
### Run tests in watch mode
|
|
1070
|
+
|
|
1071
|
+
```bash
|
|
1072
|
+
|
|
1073
|
+
npm run test:watch
|
|
1074
|
+
|
|
1075
|
+
```
|
|
1076
|
+
|
|
1077
|
+
### Build the package
|
|
1078
|
+
|
|
1079
|
+
```bash
|
|
1080
|
+
|
|
1081
|
+
npm run build
|
|
1082
|
+
|
|
1083
|
+
```
|
|
1084
|
+
|
|
1085
|
+
For a detailed explanation of every command, see:
|
|
1086
|
+
|
|
1087
|
+
```text
|
|
1088
|
+
|
|
1089
|
+
docs/commands.md
|
|
1090
|
+
|
|
1091
|
+
```
|
|
1092
|
+
|
|
1093
|
+
---
|
|
1094
|
+
|
|
1095
|
+
# Project Structure
|
|
1096
|
+
|
|
1097
|
+
```text
|
|
1098
|
+
|
|
1099
|
+
iconora/
|
|
1100
|
+
|
|
1101
|
+
โ
|
|
1102
|
+
|
|
1103
|
+
โโโ icons/
|
|
1104
|
+
|
|
1105
|
+
โ ย โโโ search.svg
|
|
1106
|
+
|
|
1107
|
+
โ ย โโโ x.svg
|
|
1108
|
+
|
|
1109
|
+
โ
|
|
1110
|
+
|
|
1111
|
+
โโโ src/
|
|
1112
|
+
|
|
1113
|
+
โ ย โโโ components/
|
|
1114
|
+
|
|
1115
|
+
โ ย โ ย โโโ IconBase.tsx
|
|
1116
|
+
|
|
1117
|
+
โ ย โ
|
|
1118
|
+
|
|
1119
|
+
โ ย โโโ icons/
|
|
1120
|
+
|
|
1121
|
+
โ ย โ ย โโโ Search.tsx
|
|
1122
|
+
|
|
1123
|
+
โ ย โ ย โโโ X.tsx
|
|
1124
|
+
|
|
1125
|
+
โ ย โ
|
|
1126
|
+
|
|
1127
|
+
โ ย โโโ metadata/
|
|
1128
|
+
|
|
1129
|
+
โ ย โ ย โโโ icons.json
|
|
1130
|
+
|
|
1131
|
+
โ ย โ ย โโโ types.ts
|
|
1132
|
+
|
|
1133
|
+
โ ย โ
|
|
1134
|
+
|
|
1135
|
+
โ ย โโโ types.ts
|
|
1136
|
+
|
|
1137
|
+
โ ย โโโ index.ts
|
|
1138
|
+
|
|
1139
|
+
โ
|
|
1140
|
+
|
|
1141
|
+
โโโ scripts/
|
|
1142
|
+
|
|
1143
|
+
โ ย โโโ check.ts
|
|
1144
|
+
|
|
1145
|
+
โ ย โโโ delete-icons.ts
|
|
1146
|
+
|
|
1147
|
+
โ ย โโโ generate-icons.ts
|
|
1148
|
+
|
|
1149
|
+
โ ย โโโ get-metadata.ts
|
|
1150
|
+
|
|
1151
|
+
โ ย โโโ validate-icons.ts
|
|
1152
|
+
|
|
1153
|
+
โ
|
|
1154
|
+
|
|
1155
|
+
โโโ tests/
|
|
1156
|
+
|
|
1157
|
+
โ ย โโโ icons.test.tsx
|
|
1158
|
+
|
|
1159
|
+
โ ย โโโ setup.ts
|
|
1160
|
+
|
|
1161
|
+
โ
|
|
1162
|
+
|
|
1163
|
+
โโโ docs/
|
|
1164
|
+
|
|
1165
|
+
โ ย โโโ commands.md
|
|
1166
|
+
|
|
1167
|
+
โ
|
|
1168
|
+
|
|
1169
|
+
โโโ .gitignore
|
|
1170
|
+
|
|
1171
|
+
โโโ LICENSE
|
|
1172
|
+
|
|
1173
|
+
โโโ README.md
|
|
1174
|
+
|
|
1175
|
+
โโโ package.json
|
|
1176
|
+
|
|
1177
|
+
โโโ package-lock.json
|
|
1178
|
+
|
|
1179
|
+
โโโ tsconfig.json
|
|
1180
|
+
|
|
1181
|
+
โโโ tsup.config.ts
|
|
1182
|
+
|
|
1183
|
+
```
|
|
1184
|
+
|
|
1185
|
+
---
|
|
1186
|
+
|
|
1187
|
+
# Source of Truth
|
|
1188
|
+
|
|
1189
|
+
The most important rule in Iconora is:
|
|
1190
|
+
|
|
1191
|
+
```text
|
|
1192
|
+
|
|
1193
|
+
icons/
|
|
1194
|
+
|
|
1195
|
+
```
|
|
1196
|
+
|
|
1197
|
+
is the **source of truth**.
|
|
1198
|
+
|
|
1199
|
+
The SVG files inside `icons/` are the original icon sources.
|
|
1200
|
+
|
|
1201
|
+
Generated files include:
|
|
1202
|
+
|
|
1203
|
+
```text
|
|
1204
|
+
|
|
1205
|
+
src/icons/
|
|
1206
|
+
|
|
1207
|
+
src/index.ts
|
|
1208
|
+
|
|
1209
|
+
src/metadata/icons.json
|
|
1210
|
+
|
|
1211
|
+
```
|
|
1212
|
+
|
|
1213
|
+
These files should normally **not be edited manually**.
|
|
1214
|
+
|
|
1215
|
+
The intended architecture is:
|
|
1216
|
+
|
|
1217
|
+
```text
|
|
1218
|
+
|
|
1219
|
+
ย ย ย ย ย ย ย SVG SOURCE
|
|
1220
|
+
|
|
1221
|
+
ย ย ย ย ย ย ย ย ย โ
|
|
1222
|
+
|
|
1223
|
+
ย ย ย ย ย ย ย ย ย โผ
|
|
1224
|
+
|
|
1225
|
+
ย ย ย ย ย ย ย icons/*.svg
|
|
1226
|
+
|
|
1227
|
+
ย ย ย ย ย ย ย ย ย โ
|
|
1228
|
+
|
|
1229
|
+
ย ย ย ย ย ย ย ย ย โผ
|
|
1230
|
+
|
|
1231
|
+
ย ย ย ย ย npm run validate
|
|
1232
|
+
|
|
1233
|
+
ย ย ย ย ย ย ย ย ย โ
|
|
1234
|
+
|
|
1235
|
+
ย ย ย ย ย ย ย ย ย โผ
|
|
1236
|
+
|
|
1237
|
+
ย ย ย ย ย ย npm run generate
|
|
1238
|
+
|
|
1239
|
+
ย ย ย ย ย ย ย ย ย โ
|
|
1240
|
+
|
|
1241
|
+
ย ย ย ย ย โโโโโโโโโผโโโโโโโโโ
|
|
1242
|
+
|
|
1243
|
+
ย ย ย ย ย โผ ย ย ย โผ ย ย ย ย โผ
|
|
1244
|
+
|
|
1245
|
+
ย ย ย ย TSX ย ย index ย metadata
|
|
1246
|
+
|
|
1247
|
+
ย ย ย ย ย โ ย ย ย โ ย ย ย ย โ
|
|
1248
|
+
|
|
1249
|
+
ย ย ย ย ย โโโโโโโโโผโโโโโโโโโ
|
|
1250
|
+
|
|
1251
|
+
ย ย ย ย ย ย ย ย ย โผ
|
|
1252
|
+
|
|
1253
|
+
ย ย ย ย ย ย ย npm run check
|
|
1254
|
+
|
|
1255
|
+
ย ย ย ย ย ย ย ย ย โ
|
|
1256
|
+
|
|
1257
|
+
ย ย ย ย ย โโโโโโโโโผโโโโโโโโโ
|
|
1258
|
+
|
|
1259
|
+
ย ย ย ย ย โผ ย ย ย โผ ย ย ย ย โผ
|
|
1260
|
+
|
|
1261
|
+
ย ย ย typecheck ย tests ย ย build
|
|
1262
|
+
|
|
1263
|
+
ย ย ย ย ย โ ย ย ย โ ย ย ย ย โ
|
|
1264
|
+
|
|
1265
|
+
ย ย ย ย ย โโโโโโโโโผโโโโโโโโโ
|
|
1266
|
+
|
|
1267
|
+
ย ย ย ย ย ย ย ย ย โผ
|
|
1268
|
+
|
|
1269
|
+
ย ย ย ย ย ย ย ๐ฆ Iconora
|
|
1270
|
+
|
|
1271
|
+
```
|
|
1272
|
+
|
|
1273
|
+
---
|
|
1274
|
+
|
|
1275
|
+
# Production Verification
|
|
1276
|
+
|
|
1277
|
+
Before publishing a version of Iconora, run:
|
|
1278
|
+
|
|
1279
|
+
```bash
|
|
1280
|
+
|
|
1281
|
+
npm run validate
|
|
1282
|
+
|
|
1283
|
+
npm run generate
|
|
1284
|
+
|
|
1285
|
+
npm run check
|
|
1286
|
+
|
|
1287
|
+
```
|
|
1288
|
+
|
|
1289
|
+
The `check` command automatically runs:
|
|
1290
|
+
|
|
1291
|
+
```bash
|
|
1292
|
+
|
|
1293
|
+
npm run typecheck
|
|
1294
|
+
|
|
1295
|
+
npm run test:run
|
|
1296
|
+
|
|
1297
|
+
npm run build
|
|
1298
|
+
|
|
1299
|
+
```
|
|
1300
|
+
|
|
1301
|
+
Therefore, the complete production workflow is:
|
|
1302
|
+
|
|
1303
|
+
```text
|
|
1304
|
+
|
|
1305
|
+
npm run validate
|
|
1306
|
+
|
|
1307
|
+
ย ย ย ย โ
|
|
1308
|
+
|
|
1309
|
+
npm run generate
|
|
1310
|
+
|
|
1311
|
+
ย ย ย ย โ
|
|
1312
|
+
|
|
1313
|
+
npm run check
|
|
1314
|
+
|
|
1315
|
+
ย ย ย ย โ
|
|
1316
|
+
|
|
1317
|
+
โโโโโโโโโโโโโโโโโโโโโ
|
|
1318
|
+
|
|
1319
|
+
โ TypeScript ย ย ย ย โ
|
|
1320
|
+
|
|
1321
|
+
โ Tests ย ย ย ย ย ย โ
|
|
1322
|
+
|
|
1323
|
+
โ Production Build ย โ
|
|
1324
|
+
|
|
1325
|
+
โโโโโโโโโโโโโโโโโโโโโ
|
|
1326
|
+
|
|
1327
|
+
ย ย ย ย โ
|
|
1328
|
+
|
|
1329
|
+
ย ย โ Ready to publish
|
|
1330
|
+
|
|
1331
|
+
```
|
|
1332
|
+
|
|
1333
|
+
All commands should complete successfully.
|
|
1334
|
+
|
|
1335
|
+
If any command fails, **do not publish the package** until the issue has been resolved.
|
|
1336
|
+
|
|
1337
|
+
---
|
|
1338
|
+
|
|
1339
|
+
# Roadmap
|
|
1340
|
+
|
|
1341
|
+
- [x] Initial npm package setup
|
|
1342
|
+
|
|
1343
|
+
- [x] TypeScript support
|
|
1344
|
+
|
|
1345
|
+
- [x] React support
|
|
1346
|
+
|
|
1347
|
+
- [x] SVG icon architecture
|
|
1348
|
+
|
|
1349
|
+
- [x] Initial icons
|
|
1350
|
+
|
|
1351
|
+
- [x] Local package testing
|
|
1352
|
+
|
|
1353
|
+
- [x] Automated SVG validation
|
|
1354
|
+
|
|
1355
|
+
- [x] Automated SVG โ TSX generation
|
|
1356
|
+
|
|
1357
|
+
- [x] Automatic icon exports
|
|
1358
|
+
|
|
1359
|
+
- [x] Automatic icon metadata generation
|
|
1360
|
+
|
|
1361
|
+
- [x] Aggregated icon tests
|
|
1362
|
+
|
|
1363
|
+
- [x] Type checking
|
|
1364
|
+
|
|
1365
|
+
- [x] ESM build
|
|
1366
|
+
|
|
1367
|
+
- [x] CommonJS build
|
|
1368
|
+
|
|
1369
|
+
- [x] Type declaration generation
|
|
1370
|
+
|
|
1371
|
+
- [x] Icon deletion CLI
|
|
1372
|
+
|
|
1373
|
+
- [x] Metadata inspection CLI
|
|
1374
|
+
|
|
1375
|
+
- [x] Project verification CLI
|
|
1376
|
+
|
|
1377
|
+
- [x] Command documentation
|
|
1378
|
+
|
|
1379
|
+
- [ ] Expand icon collection
|
|
1380
|
+
|
|
1381
|
+
- [ ] Add continuous integration
|
|
1382
|
+
|
|
1383
|
+
- [ ] Improve package tooling
|
|
1384
|
+
|
|
1385
|
+
- [ ] Publish stable release to npm
|
|
1386
|
+
|
|
1387
|
+
- [ ] Expand documentation
|
|
1388
|
+
|
|
1389
|
+
- [ ] Build Iconora documentation website
|
|
1390
|
+
|
|
1391
|
+
---
|
|
1392
|
+
|
|
1393
|
+
# License
|
|
1394
|
+
|
|
1395
|
+
Iconora is released under the MIT License.
|
|
1396
|
+
|
|
1397
|
+
You are free to use, modify, and redistribute Iconora in personal, commercial, educational, and other projects, subject to the terms of the MIT License.
|
|
1398
|
+
|
|
1399
|
+
The license grants permission to use and modify the software; it does not transfer ownership or intellectual property rights in the original Iconora project or its original assets.
|
|
1400
|
+
|
|
1401
|
+
See the [LICENSE](LICENSE) file for the complete license text.
|
|
1402
|
+
|
|
1403
|
+
---
|
|
1404
|
+
|
|
1405
|
+
# Contributing
|
|
1406
|
+
|
|
1407
|
+
Contributions, suggestions, bug reports, and new icon ideas are welcome.
|
|
1408
|
+
|
|
1409
|
+
If you want to contribute a new icon:
|
|
1410
|
+
|
|
1411
|
+
1. Add the SVG to `icons/`.
|
|
1412
|
+
|
|
1413
|
+
2. Run `npm run validate`.
|
|
1414
|
+
|
|
1415
|
+
3. Run `npm run generate`.
|
|
1416
|
+
|
|
1417
|
+
4. Run `npm run check`.
|
|
1418
|
+
|
|
1419
|
+
5. Submit your changes.
|
|
1420
|
+
|
|
1421
|
+
The `check` command automatically runs:
|
|
1422
|
+
|
|
1423
|
+
```text
|
|
1424
|
+
|
|
1425
|
+
TypeScript typecheck
|
|
1426
|
+
|
|
1427
|
+
Tests
|
|
1428
|
+
|
|
1429
|
+
Production build
|
|
1430
|
+
|
|
1431
|
+
```
|
|
1432
|
+
|
|
1433
|
+
Please do not manually edit generated icon files unless you are specifically working on the generation system itself.
|
|
1434
|
+
|
|
1435
|
+
---
|
|
1436
|
+
|
|
1437
|
+
# Documentation
|
|
1438
|
+
|
|
1439
|
+
Detailed command documentation is available at:
|
|
1440
|
+
|
|
1441
|
+
```text
|
|
1442
|
+
|
|
1443
|
+
docs/commands.md
|
|
1444
|
+
|
|
1445
|
+
```
|
|
1446
|
+
|
|
1447
|
+
The command documentation covers:
|
|
1448
|
+
|
|
1449
|
+
- SVG validation
|
|
1450
|
+
|
|
1451
|
+
- Icon generation
|
|
1452
|
+
|
|
1453
|
+
- Icon deletion
|
|
1454
|
+
|
|
1455
|
+
- Metadata generation
|
|
1456
|
+
|
|
1457
|
+
- Metadata inspection
|
|
1458
|
+
|
|
1459
|
+
- Project verification
|
|
1460
|
+
|
|
1461
|
+
- Type checking
|
|
1462
|
+
|
|
1463
|
+
- Testing
|
|
1464
|
+
|
|
1465
|
+
- Test watch mode
|
|
1466
|
+
|
|
1467
|
+
- Production builds
|
|
1468
|
+
|
|
1469
|
+
- Recommended development workflows
|
|
1470
|
+
|
|
1471
|
+
---
|
|
1472
|
+
|
|
1473
|
+
Made with โค๏ธ for React developers.
|
|
1474
|
+
|
|
1475
|
+
**Iconora โ Simple icons. Your way.**
|