@btndprojects/loam-icons 0.0.0-stage → 0.1.1

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.
@@ -0,0 +1,963 @@
1
+ /** The icon registry data: name → ordered SVG primitives, drawn from lucide. */
2
+ declare const iconData: {
3
+ check: {
4
+ t: "path";
5
+ d: string;
6
+ }[];
7
+ x: {
8
+ t: "path";
9
+ d: string;
10
+ }[];
11
+ 'chevron-down': {
12
+ t: "path";
13
+ d: string;
14
+ }[];
15
+ 'chevron-up': {
16
+ t: "path";
17
+ d: string;
18
+ }[];
19
+ 'chevron-left': {
20
+ t: "path";
21
+ d: string;
22
+ }[];
23
+ 'chevron-right': {
24
+ t: "path";
25
+ d: string;
26
+ }[];
27
+ plus: {
28
+ t: "path";
29
+ d: string;
30
+ }[];
31
+ minus: {
32
+ t: "path";
33
+ d: string;
34
+ }[];
35
+ 'arrow-right': {
36
+ t: "path";
37
+ d: string;
38
+ }[];
39
+ 'arrow-left': {
40
+ t: "path";
41
+ d: string;
42
+ }[];
43
+ search: ({
44
+ t: "path";
45
+ d: string;
46
+ cx?: undefined;
47
+ cy?: undefined;
48
+ r?: undefined;
49
+ } | {
50
+ t: "circle";
51
+ cx: number;
52
+ cy: number;
53
+ r: number;
54
+ d?: undefined;
55
+ })[];
56
+ info: ({
57
+ t: "circle";
58
+ cx: number;
59
+ cy: number;
60
+ r: number;
61
+ d?: undefined;
62
+ } | {
63
+ t: "path";
64
+ d: string;
65
+ cx?: undefined;
66
+ cy?: undefined;
67
+ r?: undefined;
68
+ })[];
69
+ 'alert-triangle': {
70
+ t: "path";
71
+ d: string;
72
+ }[];
73
+ 'alert-circle': ({
74
+ t: "circle";
75
+ cx: number;
76
+ cy: number;
77
+ r: number;
78
+ x1?: undefined;
79
+ y1?: undefined;
80
+ x2?: undefined;
81
+ y2?: undefined;
82
+ } | {
83
+ t: "line";
84
+ x1: number;
85
+ y1: number;
86
+ x2: number;
87
+ y2: number;
88
+ cx?: undefined;
89
+ cy?: undefined;
90
+ r?: undefined;
91
+ })[];
92
+ 'check-circle': ({
93
+ t: "circle";
94
+ cx: number;
95
+ cy: number;
96
+ r: number;
97
+ d?: undefined;
98
+ } | {
99
+ t: "path";
100
+ d: string;
101
+ cx?: undefined;
102
+ cy?: undefined;
103
+ r?: undefined;
104
+ })[];
105
+ star: {
106
+ t: "path";
107
+ d: string;
108
+ }[];
109
+ heart: {
110
+ t: "path";
111
+ d: string;
112
+ }[];
113
+ menu: {
114
+ t: "path";
115
+ d: string;
116
+ }[];
117
+ 'more-horizontal': {
118
+ t: "circle";
119
+ cx: number;
120
+ cy: number;
121
+ r: number;
122
+ }[];
123
+ 'more-vertical': {
124
+ t: "circle";
125
+ cx: number;
126
+ cy: number;
127
+ r: number;
128
+ }[];
129
+ settings: ({
130
+ t: "path";
131
+ d: string;
132
+ cx?: undefined;
133
+ cy?: undefined;
134
+ r?: undefined;
135
+ } | {
136
+ t: "circle";
137
+ cx: number;
138
+ cy: number;
139
+ r: number;
140
+ d?: undefined;
141
+ })[];
142
+ user: ({
143
+ t: "path";
144
+ d: string;
145
+ cx?: undefined;
146
+ cy?: undefined;
147
+ r?: undefined;
148
+ } | {
149
+ t: "circle";
150
+ cx: number;
151
+ cy: number;
152
+ r: number;
153
+ d?: undefined;
154
+ })[];
155
+ bell: {
156
+ t: "path";
157
+ d: string;
158
+ }[];
159
+ calendar: ({
160
+ t: "path";
161
+ d: string;
162
+ x?: undefined;
163
+ y?: undefined;
164
+ width?: undefined;
165
+ height?: undefined;
166
+ rx?: undefined;
167
+ } | {
168
+ t: "rect";
169
+ x: number;
170
+ y: number;
171
+ width: number;
172
+ height: number;
173
+ rx: number;
174
+ d?: undefined;
175
+ })[];
176
+ clock: ({
177
+ t: "circle";
178
+ cx: number;
179
+ cy: number;
180
+ r: number;
181
+ d?: undefined;
182
+ } | {
183
+ t: "path";
184
+ d: string;
185
+ cx?: undefined;
186
+ cy?: undefined;
187
+ r?: undefined;
188
+ })[];
189
+ trash: {
190
+ t: "path";
191
+ d: string;
192
+ }[];
193
+ edit: {
194
+ t: "path";
195
+ d: string;
196
+ }[];
197
+ copy: ({
198
+ t: "rect";
199
+ x: number;
200
+ y: number;
201
+ width: number;
202
+ height: number;
203
+ rx: number;
204
+ ry: number;
205
+ d?: undefined;
206
+ } | {
207
+ t: "path";
208
+ d: string;
209
+ x?: undefined;
210
+ y?: undefined;
211
+ width?: undefined;
212
+ height?: undefined;
213
+ rx?: undefined;
214
+ ry?: undefined;
215
+ })[];
216
+ 'external-link': {
217
+ t: "path";
218
+ d: string;
219
+ }[];
220
+ eye: ({
221
+ t: "path";
222
+ d: string;
223
+ cx?: undefined;
224
+ cy?: undefined;
225
+ r?: undefined;
226
+ } | {
227
+ t: "circle";
228
+ cx: number;
229
+ cy: number;
230
+ r: number;
231
+ d?: undefined;
232
+ })[];
233
+ loader: {
234
+ t: "path";
235
+ d: string;
236
+ }[];
237
+ home: {
238
+ t: "path";
239
+ d: string;
240
+ }[];
241
+ folder: {
242
+ t: "path";
243
+ d: string;
244
+ }[];
245
+ grid: ({
246
+ t: "path";
247
+ d: string;
248
+ x?: undefined;
249
+ y?: undefined;
250
+ width?: undefined;
251
+ height?: undefined;
252
+ rx?: undefined;
253
+ } | {
254
+ t: "rect";
255
+ x: number;
256
+ y: number;
257
+ width: number;
258
+ height: number;
259
+ rx: number;
260
+ d?: undefined;
261
+ })[];
262
+ users: ({
263
+ t: "path";
264
+ d: string;
265
+ cx?: undefined;
266
+ cy?: undefined;
267
+ r?: undefined;
268
+ } | {
269
+ t: "circle";
270
+ cx: number;
271
+ cy: number;
272
+ r: number;
273
+ d?: undefined;
274
+ })[];
275
+ tag: ({
276
+ t: "path";
277
+ d: string;
278
+ cx?: undefined;
279
+ cy?: undefined;
280
+ r?: undefined;
281
+ fill?: undefined;
282
+ } | {
283
+ t: "circle";
284
+ cx: number;
285
+ cy: number;
286
+ r: number;
287
+ fill: true;
288
+ d?: undefined;
289
+ })[];
290
+ 'chart-bar': {
291
+ t: "path";
292
+ d: string;
293
+ }[];
294
+ download: {
295
+ t: "path";
296
+ d: string;
297
+ }[];
298
+ upload: {
299
+ t: "path";
300
+ d: string;
301
+ }[];
302
+ filter: {
303
+ t: "path";
304
+ d: string;
305
+ }[];
306
+ refresh: {
307
+ t: "path";
308
+ d: string;
309
+ }[];
310
+ lock: ({
311
+ t: "rect";
312
+ x: number;
313
+ y: number;
314
+ width: number;
315
+ height: number;
316
+ rx: number;
317
+ ry: number;
318
+ d?: undefined;
319
+ } | {
320
+ t: "path";
321
+ d: string;
322
+ x?: undefined;
323
+ y?: undefined;
324
+ width?: undefined;
325
+ height?: undefined;
326
+ rx?: undefined;
327
+ ry?: undefined;
328
+ })[];
329
+ mail: ({
330
+ t: "path";
331
+ d: string;
332
+ x?: undefined;
333
+ y?: undefined;
334
+ width?: undefined;
335
+ height?: undefined;
336
+ rx?: undefined;
337
+ } | {
338
+ t: "rect";
339
+ x: number;
340
+ y: number;
341
+ width: number;
342
+ height: number;
343
+ rx: number;
344
+ d?: undefined;
345
+ })[];
346
+ link: {
347
+ t: "path";
348
+ d: string;
349
+ }[];
350
+ sun: ({
351
+ t: "circle";
352
+ cx: number;
353
+ cy: number;
354
+ r: number;
355
+ d?: undefined;
356
+ } | {
357
+ t: "path";
358
+ d: string;
359
+ cx?: undefined;
360
+ cy?: undefined;
361
+ r?: undefined;
362
+ })[];
363
+ moon: {
364
+ t: "path";
365
+ d: string;
366
+ }[];
367
+ 'log-out': {
368
+ t: "path";
369
+ d: string;
370
+ }[];
371
+ circle: {
372
+ t: "circle";
373
+ cx: number;
374
+ cy: number;
375
+ r: number;
376
+ }[];
377
+ filedoc: {
378
+ t: "path";
379
+ d: string;
380
+ }[];
381
+ play: {
382
+ t: "path";
383
+ d: string;
384
+ }[];
385
+ pause: {
386
+ t: "rect";
387
+ x: number;
388
+ y: number;
389
+ width: number;
390
+ height: number;
391
+ rx: number;
392
+ }[];
393
+ 'skip-back': {
394
+ t: "path";
395
+ d: string;
396
+ }[];
397
+ 'skip-forward': {
398
+ t: "path";
399
+ d: string;
400
+ }[];
401
+ volume: {
402
+ t: "path";
403
+ d: string;
404
+ }[];
405
+ 'volume-off': ({
406
+ t: "path";
407
+ d: string;
408
+ x1?: undefined;
409
+ y1?: undefined;
410
+ x2?: undefined;
411
+ y2?: undefined;
412
+ } | {
413
+ t: "line";
414
+ x1: number;
415
+ y1: number;
416
+ x2: number;
417
+ y2: number;
418
+ d?: undefined;
419
+ })[];
420
+ captions: ({
421
+ t: "rect";
422
+ x: number;
423
+ y: number;
424
+ width: number;
425
+ height: number;
426
+ rx: number;
427
+ ry: number;
428
+ d?: undefined;
429
+ } | {
430
+ t: "path";
431
+ d: string;
432
+ x?: undefined;
433
+ y?: undefined;
434
+ width?: undefined;
435
+ height?: undefined;
436
+ rx?: undefined;
437
+ ry?: undefined;
438
+ })[];
439
+ maximize: {
440
+ t: "path";
441
+ d: string;
442
+ }[];
443
+ image: ({
444
+ t: "rect";
445
+ x: number;
446
+ y: number;
447
+ width: number;
448
+ height: number;
449
+ rx: number;
450
+ ry: number;
451
+ cx?: undefined;
452
+ cy?: undefined;
453
+ r?: undefined;
454
+ d?: undefined;
455
+ } | {
456
+ t: "circle";
457
+ cx: number;
458
+ cy: number;
459
+ r: number;
460
+ x?: undefined;
461
+ y?: undefined;
462
+ width?: undefined;
463
+ height?: undefined;
464
+ rx?: undefined;
465
+ ry?: undefined;
466
+ d?: undefined;
467
+ } | {
468
+ t: "path";
469
+ d: string;
470
+ x?: undefined;
471
+ y?: undefined;
472
+ width?: undefined;
473
+ height?: undefined;
474
+ rx?: undefined;
475
+ ry?: undefined;
476
+ cx?: undefined;
477
+ cy?: undefined;
478
+ r?: undefined;
479
+ })[];
480
+ wifi: {
481
+ t: "path";
482
+ d: string;
483
+ }[];
484
+ 'wifi-off': {
485
+ t: "path";
486
+ d: string;
487
+ }[];
488
+ 'cloud-off': {
489
+ t: "path";
490
+ d: string;
491
+ }[];
492
+ wrench: {
493
+ t: "path";
494
+ d: string;
495
+ }[];
496
+ pipette: {
497
+ t: "path";
498
+ d: string;
499
+ }[];
500
+ 'map-pin': ({
501
+ t: "path";
502
+ d: string;
503
+ cx?: undefined;
504
+ cy?: undefined;
505
+ r?: undefined;
506
+ } | {
507
+ t: "circle";
508
+ cx: number;
509
+ cy: number;
510
+ r: number;
511
+ d?: undefined;
512
+ })[];
513
+ navigation: {
514
+ t: "polygon";
515
+ points: string;
516
+ }[];
517
+ 'bell-off': {
518
+ t: "path";
519
+ d: string;
520
+ }[];
521
+ pin: {
522
+ t: "path";
523
+ d: string;
524
+ }[];
525
+ 'arrow-up': {
526
+ t: "path";
527
+ d: string;
528
+ }[];
529
+ 'arrow-down': {
530
+ t: "path";
531
+ d: string;
532
+ }[];
533
+ at: ({
534
+ t: "circle";
535
+ cx: number;
536
+ cy: number;
537
+ r: number;
538
+ d?: undefined;
539
+ } | {
540
+ t: "path";
541
+ d: string;
542
+ cx?: undefined;
543
+ cy?: undefined;
544
+ r?: undefined;
545
+ })[];
546
+ code: {
547
+ t: "path";
548
+ d: string;
549
+ }[];
550
+ globe: ({
551
+ t: "circle";
552
+ cx: number;
553
+ cy: number;
554
+ r: number;
555
+ d?: undefined;
556
+ } | {
557
+ t: "path";
558
+ d: string;
559
+ cx?: undefined;
560
+ cy?: undefined;
561
+ r?: undefined;
562
+ })[];
563
+ layers: {
564
+ t: "path";
565
+ d: string;
566
+ }[];
567
+ shield: {
568
+ t: "path";
569
+ d: string;
570
+ }[];
571
+ 'list-ul': {
572
+ t: "path";
573
+ d: string;
574
+ }[];
575
+ 'list-ol': {
576
+ t: "path";
577
+ d: string;
578
+ }[];
579
+ archive: ({
580
+ t: "rect";
581
+ x: number;
582
+ y: number;
583
+ width: number;
584
+ height: number;
585
+ rx: number;
586
+ d?: undefined;
587
+ } | {
588
+ t: "path";
589
+ d: string;
590
+ x?: undefined;
591
+ y?: undefined;
592
+ width?: undefined;
593
+ height?: undefined;
594
+ rx?: undefined;
595
+ })[];
596
+ quote: {
597
+ t: "path";
598
+ d: string;
599
+ }[];
600
+ columns: ({
601
+ t: "rect";
602
+ x: number;
603
+ y: number;
604
+ width: number;
605
+ height: number;
606
+ rx: number;
607
+ d?: undefined;
608
+ } | {
609
+ t: "path";
610
+ d: string;
611
+ x?: undefined;
612
+ y?: undefined;
613
+ width?: undefined;
614
+ height?: undefined;
615
+ rx?: undefined;
616
+ })[];
617
+ card: ({
618
+ t: "rect";
619
+ x: number;
620
+ y: number;
621
+ width: number;
622
+ height: number;
623
+ rx: number;
624
+ x1?: undefined;
625
+ y1?: undefined;
626
+ x2?: undefined;
627
+ y2?: undefined;
628
+ } | {
629
+ t: "line";
630
+ x1: number;
631
+ y1: number;
632
+ x2: number;
633
+ y2: number;
634
+ x?: undefined;
635
+ y?: undefined;
636
+ width?: undefined;
637
+ height?: undefined;
638
+ rx?: undefined;
639
+ })[];
640
+ grip: {
641
+ t: "circle";
642
+ cx: number;
643
+ cy: number;
644
+ r: number;
645
+ }[];
646
+ 'mouse-pointer-2': {
647
+ t: "path";
648
+ d: string;
649
+ }[];
650
+ wallet: {
651
+ t: "path";
652
+ d: string;
653
+ }[];
654
+ coins: ({
655
+ t: "path";
656
+ d: string;
657
+ cx?: undefined;
658
+ cy?: undefined;
659
+ r?: undefined;
660
+ } | {
661
+ t: "circle";
662
+ cx: number;
663
+ cy: number;
664
+ r: number;
665
+ d?: undefined;
666
+ })[];
667
+ bank: {
668
+ t: "path";
669
+ d: string;
670
+ }[];
671
+ invoice: {
672
+ t: "path";
673
+ d: string;
674
+ }[];
675
+ receipt: {
676
+ t: "path";
677
+ d: string;
678
+ }[];
679
+ phone: ({
680
+ t: "rect";
681
+ x: number;
682
+ y: number;
683
+ width: number;
684
+ height: number;
685
+ rx: number;
686
+ ry: number;
687
+ d?: undefined;
688
+ } | {
689
+ t: "path";
690
+ d: string;
691
+ x?: undefined;
692
+ y?: undefined;
693
+ width?: undefined;
694
+ height?: undefined;
695
+ rx?: undefined;
696
+ ry?: undefined;
697
+ })[];
698
+ monitor: ({
699
+ t: "rect";
700
+ x: number;
701
+ y: number;
702
+ width: number;
703
+ height: number;
704
+ rx: number;
705
+ x1?: undefined;
706
+ y1?: undefined;
707
+ x2?: undefined;
708
+ y2?: undefined;
709
+ } | {
710
+ t: "line";
711
+ x1: number;
712
+ y1: number;
713
+ x2: number;
714
+ y2: number;
715
+ x?: undefined;
716
+ y?: undefined;
717
+ width?: undefined;
718
+ height?: undefined;
719
+ rx?: undefined;
720
+ })[];
721
+ camera: ({
722
+ t: "path";
723
+ d: string;
724
+ cx?: undefined;
725
+ cy?: undefined;
726
+ r?: undefined;
727
+ } | {
728
+ t: "circle";
729
+ cx: number;
730
+ cy: number;
731
+ r: number;
732
+ d?: undefined;
733
+ })[];
734
+ barcode: {
735
+ t: "path";
736
+ d: string;
737
+ }[];
738
+ scan: {
739
+ t: "path";
740
+ d: string;
741
+ }[];
742
+ flash: {
743
+ t: "path";
744
+ d: string;
745
+ }[];
746
+ 'flash-off': {
747
+ t: "path";
748
+ d: string;
749
+ }[];
750
+ flip: ({
751
+ t: "path";
752
+ d: string;
753
+ cx?: undefined;
754
+ cy?: undefined;
755
+ r?: undefined;
756
+ } | {
757
+ t: "circle";
758
+ cx: number;
759
+ cy: number;
760
+ r: number;
761
+ d?: undefined;
762
+ })[];
763
+ sliders: {
764
+ t: "path";
765
+ d: string;
766
+ }[];
767
+ leaf: {
768
+ t: "path";
769
+ d: string;
770
+ }[];
771
+ file: {
772
+ t: "path";
773
+ d: string;
774
+ }[];
775
+ bolt: {
776
+ t: "path";
777
+ d: string;
778
+ }[];
779
+ split: {
780
+ t: "path";
781
+ d: string;
782
+ }[];
783
+ branch: ({
784
+ t: "path";
785
+ d: string;
786
+ cx?: undefined;
787
+ cy?: undefined;
788
+ r?: undefined;
789
+ } | {
790
+ t: "circle";
791
+ cx: number;
792
+ cy: number;
793
+ r: number;
794
+ d?: undefined;
795
+ })[];
796
+ undo: {
797
+ t: "path";
798
+ d: string;
799
+ }[];
800
+ redo: {
801
+ t: "path";
802
+ d: string;
803
+ }[];
804
+ 'zoom-in': ({
805
+ t: "circle";
806
+ cx: number;
807
+ cy: number;
808
+ r: number;
809
+ x1?: undefined;
810
+ y1?: undefined;
811
+ x2?: undefined;
812
+ y2?: undefined;
813
+ } | {
814
+ t: "line";
815
+ x1: number;
816
+ y1: number;
817
+ x2: number;
818
+ y2: number;
819
+ cx?: undefined;
820
+ cy?: undefined;
821
+ r?: undefined;
822
+ })[];
823
+ 'zoom-out': ({
824
+ t: "circle";
825
+ cx: number;
826
+ cy: number;
827
+ r: number;
828
+ x1?: undefined;
829
+ y1?: undefined;
830
+ x2?: undefined;
831
+ y2?: undefined;
832
+ } | {
833
+ t: "line";
834
+ x1: number;
835
+ y1: number;
836
+ x2: number;
837
+ y2: number;
838
+ cx?: undefined;
839
+ cy?: undefined;
840
+ r?: undefined;
841
+ })[];
842
+ sparkle: ({
843
+ t: "path";
844
+ d: string;
845
+ cx?: undefined;
846
+ cy?: undefined;
847
+ r?: undefined;
848
+ } | {
849
+ t: "circle";
850
+ cx: number;
851
+ cy: number;
852
+ r: number;
853
+ d?: undefined;
854
+ })[];
855
+ print: ({
856
+ t: "path";
857
+ d: string;
858
+ x?: undefined;
859
+ y?: undefined;
860
+ width?: undefined;
861
+ height?: undefined;
862
+ rx?: undefined;
863
+ } | {
864
+ t: "rect";
865
+ x: number;
866
+ y: number;
867
+ width: number;
868
+ height: number;
869
+ rx: number;
870
+ d?: undefined;
871
+ })[];
872
+ };
873
+
874
+ /**
875
+ * `@btndprojects/loam-icons` — the shared Loam icon set as framework-agnostic primitive data.
876
+ *
877
+ * Each icon is a list of SVG primitive descriptors on a `0 0 24 24` viewBox,
878
+ * drawn as 1.5px round strokes in `currentColor`. Web (`<svg>`) and native
879
+ * (`react-native-svg`) renderers each map these primitives to their elements,
880
+ * so both platforms draw from one source.
881
+ *
882
+ * The geometry is lucide's, transcribed statically into {@link iconData} (the
883
+ * generated `./icon-data.ts`) so the runtime carries no lucide dependency and
884
+ * stays tree-shakeable. Add or re-point an icon in `scripts/generate-icons.mjs`
885
+ * and run `pnpm --filter @btndprojects/loam-icons gen`, never by editing the data by hand.
886
+ * @module
887
+ */
888
+
889
+ /**
890
+ * A single SVG primitive within an icon — one of the element kinds lucide
891
+ * emits. Both renderers (web `<svg>` and native `react-native-svg`) map every
892
+ * variant here to a concrete element.
893
+ */
894
+ type IconPrimitive = {
895
+ t: 'path';
896
+ d: string;
897
+ } | {
898
+ t: 'circle';
899
+ cx: number;
900
+ cy: number;
901
+ r: number;
902
+ fill?: boolean;
903
+ } | {
904
+ t: 'line';
905
+ x1: number;
906
+ y1: number;
907
+ x2: number;
908
+ y2: number;
909
+ } | {
910
+ t: 'rect';
911
+ x: number;
912
+ y: number;
913
+ width: number;
914
+ height: number;
915
+ rx?: number;
916
+ ry?: number;
917
+ } | {
918
+ t: 'polyline';
919
+ points: string;
920
+ } | {
921
+ t: 'polygon';
922
+ points: string;
923
+ } | {
924
+ t: 'ellipse';
925
+ cx: number;
926
+ cy: number;
927
+ rx: number;
928
+ ry: number;
929
+ };
930
+ /** A valid icon name. */
931
+ type IconName = keyof typeof iconData;
932
+ /** The icon registry: name → ordered primitives. */
933
+ declare const icons: Record<IconName, IconPrimitive[]>;
934
+ /** All icon names, ordered as declared. */
935
+ declare const iconNames: IconName[];
936
+ /** The viewBox every Loam icon is drawn on. */
937
+ declare const ICON_VIEWBOX = "0 0 24 24";
938
+ /**
939
+ * Narrow an arbitrary string to a name the set actually carries.
940
+ *
941
+ * Every registry-driven surface has the same problem: a node type, a workflow
942
+ * step or a capture profile names its glyph as a plain `string` — deliberately,
943
+ * because those registries are host-extensible and must not depend on
944
+ * `@btndprojects/loam-icons` — so the *renderer* is the one that has to cope with a name the
945
+ * set does not carry. A fallback glyph is better than a thrown render.
946
+ *
947
+ * This lived as an identical two-line guard called `flowIconName` in
948
+ * `@btndprojects/loam-ui-web` and `@btndprojects/loam-ui-native`. The domain-specific fallback is worth
949
+ * keeping per caller (a workflow node falls back to `circle`), but the
950
+ * membership test is not something two packages should each own — the set is
951
+ * this package's, and only this package knows when it changes.
952
+ *
953
+ * @param name - A candidate glyph name, from a registry or a host.
954
+ * @param fallback - The glyph to use when `name` is not in the set.
955
+ * @returns `name` when the set carries it, otherwise `fallback`.
956
+ * @example
957
+ * ```ts
958
+ * <Icon name={iconNameOr(type.icon, 'circle')} />
959
+ * ```
960
+ */
961
+ declare function iconNameOr(name: string, fallback: IconName): IconName;
962
+
963
+ export { ICON_VIEWBOX, type IconName, type IconPrimitive, iconNameOr, iconNames, icons };