@hadoku/themes 0.0.0-stage → 5.12.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSE-lucide +43 -0
  3. package/README.md +433 -2
  4. package/THEME_USAGE_GUIDE.md +308 -0
  5. package/dist/HadokuThemeRoot.d.ts +53 -0
  6. package/dist/HadokuThemeRoot.js +66 -0
  7. package/dist/ThemeIcons.d.ts +31 -0
  8. package/dist/ThemeIcons.js +91 -0
  9. package/dist/effects.d.ts +25 -0
  10. package/dist/effects.js +25 -0
  11. package/dist/icons/Icon.d.ts +36 -0
  12. package/dist/icons/Icon.js +89 -0
  13. package/dist/icons/index.d.ts +61 -0
  14. package/dist/icons/index.js +87 -0
  15. package/dist/icons/registry.generated.d.ts +158 -0
  16. package/dist/icons/registry.generated.js +446 -0
  17. package/dist/index.d.ts +82 -0
  18. package/dist/index.js +169 -0
  19. package/dist/metadata.d.ts +35 -0
  20. package/dist/metadata.js +108 -0
  21. package/dist/platform/index.d.ts +94 -0
  22. package/dist/platform/index.js +149 -0
  23. package/dist/platform/usePlatform.d.ts +29 -0
  24. package/dist/platform/usePlatform.js +65 -0
  25. package/dist/prefsApiBase.d.ts +37 -0
  26. package/dist/prefsApiBase.js +40 -0
  27. package/dist/theme-types.d.ts +34 -0
  28. package/dist/theme-types.js +1 -0
  29. package/dist/themeContext.d.ts +62 -0
  30. package/dist/themeContext.js +70 -0
  31. package/dist/themePrefs.d.ts +29 -0
  32. package/dist/themePrefs.js +48 -0
  33. package/dist/useRefElement.d.ts +19 -0
  34. package/dist/useRefElement.js +52 -0
  35. package/dist/useTheme.d.ts +46 -0
  36. package/dist/useTheme.js +216 -0
  37. package/package.json +83 -4
  38. package/scripts/audit-tokens.mjs +126 -0
  39. package/scripts/check-contrast.mjs +24 -0
  40. package/scripts/check-docs.mjs +53 -0
  41. package/scripts/check-icons.mjs +473 -0
  42. package/scripts/check-usage.mjs +297 -0
  43. package/scripts/codemod-icons.mjs +396 -0
  44. package/scripts/generate-icons.mjs +199 -0
  45. package/scripts/generate-preview.mjs +374 -0
  46. package/scripts/generate-tailwind-colors.mjs +109 -0
  47. package/scripts/lib/color.mjs +184 -0
  48. package/scripts/lib/contract.d.mts +58 -0
  49. package/scripts/lib/contract.mjs +348 -0
  50. package/scripts/lib/derive.mjs +324 -0
  51. package/scripts/lib/icon-registry.mjs +92 -0
  52. package/scripts/lib/parse-themes.mjs +19 -0
  53. package/scripts/lib/tokens.mjs +188 -0
  54. package/scripts/normalize-tokens.mjs +161 -0
  55. package/src/advanced.css +218 -0
  56. package/src/icons/Icon.tsx +151 -0
  57. package/src/icons/emoji-map.json +202 -0
  58. package/src/icons/index.ts +151 -0
  59. package/src/icons/registry.generated.ts +455 -0
  60. package/src/icons/sources.json +150 -0
  61. package/src/icons.css +145 -0
  62. package/src/style.css +1421 -0
  63. package/src/tailwind-colors.css +88 -0
  64. package/src/tailwind-integration.css +49 -0
@@ -0,0 +1,455 @@
1
+ /**
2
+ * GENERATED FILE — do not edit by hand.
3
+ *
4
+ * Source: src/icons/sources.json + lucide-static@1.28.0 (ISC, see LICENSE-lucide).
5
+ * Regenerate with `pnpm run generate:icons`; `pnpm run check:icons` fails on drift.
6
+ *
7
+ * Values are the INNER markup of each glyph. The wrapping <svg> element and its
8
+ * attributes come from getIconSvg()/<Icon> so every icon shares one set.
9
+ */
10
+
11
+ export const ICON_MARKUP = {
12
+ activity: "<path d=\"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2\" />",
13
+ antenna: "<path d=\"M4 10a7.31 7.31 0 0 0 10 10Z\" /><path d=\"m9 15 3-3\" /><path d=\"M17 13a6 6 0 0 0-6-6\" /><path d=\"M21 13A10 10 0 0 0 11 3\" />",
14
+ 'arrow-down': "<path d=\"M12 5v14\" /><path d=\"m19 12-7 7-7-7\" />",
15
+ 'arrow-left': "<path d=\"m12 19-7-7 7-7\" /><path d=\"M19 12H5\" />",
16
+ 'arrow-right': "<path d=\"M5 12h14\" /><path d=\"m12 5 7 7-7 7\" />",
17
+ 'arrow-up': "<path d=\"m5 12 7-7 7 7\" /><path d=\"M12 19V5\" />",
18
+ 'arrow-up-right': "<path d=\"M7 7h10v10\" /><path d=\"M7 17 17 7\" />",
19
+ 'arrows-horizontal': "<path d=\"M8 3 4 7l4 4\" /><path d=\"M4 7h16\" /><path d=\"m16 21 4-4-4-4\" /><path d=\"M20 17H4\" />",
20
+ ban: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M4.929 4.929 19.07 19.071\" />",
21
+ bell: "<path d=\"M10.268 21a2 2 0 0 0 3.464 0\" /><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />",
22
+ bone: "<path d=\"M17 10c.7-.7 1.69 0 2.5 0a2.5 2.5 0 1 0 0-5 .5.5 0 0 1-.5-.5 2.5 2.5 0 1 0-5 0c0 .81.7 1.8 0 2.5l-7 7c-.7.7-1.69 0-2.5 0a2.5 2.5 0 0 0 0 5c.28 0 .5.22.5.5a2.5 2.5 0 1 0 5 0c0-.81-.7-1.8 0-2.5Z\" />",
23
+ book: "<path d=\"M12 5v16\" /><path d=\"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z\" />",
24
+ bookmark: "<path d=\"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z\" />",
25
+ 'branch-up': "<path d=\"m10 9 5-5 5 5\" /><path d=\"M4 20h7a4 4 0 0 0 4-4V4\" />",
26
+ briefcase: "<path d=\"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\" /><rect width=\"20\" height=\"14\" x=\"2\" y=\"6\" rx=\"2\" />",
27
+ broom: "<path d=\"m16 22-1-4\" /><path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" /><path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" /><path d=\"m8 22 1-4\" />",
28
+ calendar: "<path d=\"M8 2v3\" /><path d=\"M16 2v3\" /><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><path d=\"M3 9h18\" />",
29
+ camera: "<path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" /><circle cx=\"12\" cy=\"13\" r=\"3\" />",
30
+ cat: "<path d=\"M12 5c.67 0 1.35.09 2 .26 1.78-2 5.03-2.84 6.42-2.26 1.4.58-.42 7-.42 7 .57 1.07 1 2.24 1 3.44C21 17.9 16.97 21 12 21s-9-3-9-7.56c0-1.25.5-2.4 1-3.44 0 0-1.89-6.42-.5-7 1.39-.58 4.72.23 6.5 2.23A9.04 9.04 0 0 1 12 5Z\" /><path d=\"M8 14v.5\" /><path d=\"M16 14v.5\" /><path d=\"M11.25 16.25h1.5L12 17l-.75-.75Z\" />",
31
+ chart: "<path d=\"M3 3v16a2 2 0 0 0 2 2h16\" /><path d=\"M18 17V9\" /><path d=\"M13 17V5\" /><path d=\"M8 17v-3\" />",
32
+ chat: "<path d=\"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\" />",
33
+ check: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m9 12 2 2 4-4\" />",
34
+ 'chevron-down': "<path d=\"m6 9 6 6 6-6\" />",
35
+ 'chevron-left': "<path d=\"m15 18-6-6 6-6\" />",
36
+ 'chevron-right': "<path d=\"m9 18 6-6-6-6\" />",
37
+ 'chevron-up': "<path d=\"m18 15-6-6-6 6\" />",
38
+ circle: "<circle cx=\"12\" cy=\"12\" r=\"10\" />",
39
+ 'circle-dot': "<circle cx=\"12\" cy=\"12\" r=\"10\" /><circle cx=\"12\" cy=\"12\" r=\"1\" />",
40
+ clapper: "<path d=\"m12.296 3.464 3.02 3.956\" /><path d=\"M20.2 6 3 11l-.9-2.4c-.3-1.1.3-2.2 1.3-2.5l13.5-4c1.1-.3 2.2.3 2.5 1.3z\" /><path d=\"M3 11h18v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" /><path d=\"m6.18 5.276 3.1 3.899\" />",
41
+ clipboard: "<rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\" /><path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />",
42
+ clock: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M12 6v6l4 2\" />",
43
+ close: "<path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />",
44
+ code: "<path d=\"m16 18 6-6-6-6\" /><path d=\"m8 6-6 6 6 6\" />",
45
+ compass: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z\" />",
46
+ copy: "<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" /><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />",
47
+ crop: "<path d=\"M6 2v14a2 2 0 0 0 2 2h14\" /><path d=\"M18 22V8a2 2 0 0 0-2-2H2\" />",
48
+ crown: "<path d=\"M11.562 3.266a.5.5 0 0 1 .876 0L15.39 8.87a1 1 0 0 0 1.516.294L21.183 5.5a.5.5 0 0 1 .798.519l-2.834 10.246a1 1 0 0 1-.956.734H5.81a1 1 0 0 1-.957-.734L2.02 6.02a.5.5 0 0 1 .798-.519l4.276 3.664a1 1 0 0 0 1.516-.294z\" /><path d=\"M5 21h14\" />",
49
+ database: "<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" /><path d=\"M3 5V19A9 3 0 0 0 21 19V5\" /><path d=\"M3 12A9 3 0 0 0 21 12\" />",
50
+ desktop: "<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\" /><line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\" /><line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\" />",
51
+ document: "<path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\" /><path d=\"M14 2v5a1 1 0 0 0 1 1h5\" /><path d=\"M10 9H8\" /><path d=\"M16 13H8\" /><path d=\"M16 17H8\" />",
52
+ download: "<path d=\"M12 15V3\" /><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" /><path d=\"m7 10 5 5 5-5\" />",
53
+ edit: "<path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" /><path d=\"m15 5 4 4\" />",
54
+ error: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m15 9-6 6\" /><path d=\"m9 9 6 6\" />",
55
+ external: "<path d=\"M15 3h6v6\" /><path d=\"M10 14 21 3\" /><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />",
56
+ eye: "<path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" /><circle cx=\"12\" cy=\"12\" r=\"3\" />",
57
+ film: "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" /><path d=\"M7 3v18\" /><path d=\"M3 7.5h4\" /><path d=\"M3 12h18\" /><path d=\"M3 16.5h4\" /><path d=\"M17 3v18\" /><path d=\"M17 7.5h4\" /><path d=\"M17 16.5h4\" />",
58
+ filter: "<path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\" />",
59
+ fire: "<path d=\"M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4\" />",
60
+ flag: "<path d=\"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528\" />",
61
+ flask: "<path d=\"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2\" /><path d=\"M6.453 15h11.094\" /><path d=\"M8.5 2h7\" />",
62
+ folder: "<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\" />",
63
+ gamepad: "<line x1=\"6\" x2=\"10\" y1=\"11\" y2=\"11\" /><line x1=\"8\" x2=\"8\" y1=\"9\" y2=\"13\" /><line x1=\"15\" x2=\"15.01\" y1=\"12\" y2=\"12\" /><line x1=\"18\" x2=\"18.01\" y1=\"10\" y2=\"10\" /><path d=\"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z\" />",
64
+ gear: "<path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\" /><circle cx=\"12\" cy=\"12\" r=\"3\" />",
65
+ globe: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" /><path d=\"M2 12h20\" />",
66
+ grid: "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" /><path d=\"M3 9h18\" /><path d=\"M3 15h18\" /><path d=\"M9 3v18\" /><path d=\"M15 3v18\" />",
67
+ handshake: "<path d=\"m11 17 2 2a1 1 0 1 0 3-3\" /><path d=\"m14 14 2.5 2.5a1 1 0 1 0 3-3l-3.88-3.88a3 3 0 0 0-4.24 0l-.88.88a1 1 0 1 1-3-3l2.81-2.81a5.79 5.79 0 0 1 7.06-.87l.47.28a2 2 0 0 0 1.42.25L21 4\" /><path d=\"m21 3 1 11h-2\" /><path d=\"M3 3 2 14l6.5 6.5a1 1 0 1 0 3-3\" /><path d=\"M3 4h8\" />",
68
+ heart: "<path d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\" />",
69
+ 'helping-hand': "<path d=\"M11 12h2a2 2 0 1 0 0-4h-3c-.6 0-1.1.2-1.4.6L3 14\" /><path d=\"m7 18 1.6-1.4c.3-.4.8-.6 1.4-.6h4c1.1 0 2.1-.4 2.8-1.2l4.6-4.4a2 2 0 0 0-2.75-2.91l-4.2 3.9\" /><path d=\"m2 13 6 6\" />",
70
+ home: "<path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" /><path d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />",
71
+ hospital: "<path d=\"M12 7v4\" /><path d=\"M14 21v-3a2 2 0 0 0-4 0v3\" /><path d=\"M14 9h-4\" /><path d=\"M18 11h2a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2h2\" /><path d=\"M18 21V5a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16\" />",
72
+ hourglass: "<path d=\"M5 22h14\" /><path d=\"M5 2h14\" /><path d=\"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22\" /><path d=\"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2\" />",
73
+ image: "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" /><circle cx=\"9\" cy=\"9\" r=\"2\" /><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />",
74
+ inbox: "<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\" /><path d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\" />",
75
+ info: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M12 16v-4\" /><path d=\"M12 8h.01\" />",
76
+ key: "<path d=\"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4\" /><path d=\"m21 2-9.6 9.6\" /><circle cx=\"7.5\" cy=\"15.5\" r=\"5.5\" />",
77
+ layers: "<path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" /><path d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\" /><path d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\" />",
78
+ link: "<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" /><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />",
79
+ list: "<path d=\"M3 5h.01\" /><path d=\"M3 12h.01\" /><path d=\"M3 19h.01\" /><path d=\"M8 5h13\" /><path d=\"M8 12h13\" /><path d=\"M8 19h13\" />",
80
+ lock: "<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" /><path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />",
81
+ magnifier: "<path d=\"m21 21-4.34-4.34\" /><circle cx=\"11\" cy=\"11\" r=\"8\" />",
82
+ mail: "<path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\" /><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />",
83
+ map: "<path d=\"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z\" /><path d=\"M15 5.764v15\" /><path d=\"M9 3.236v15\" />",
84
+ masks: "<path d=\"M10 11h.01\" /><path d=\"M14 6h.01\" /><path d=\"M18 6h.01\" /><path d=\"M6.5 13.1h.01\" /><path d=\"M22 5c0 9-4 12-6 12s-6-3-6-12c0-2 2-3 6-3s6 1 6 3\" /><path d=\"M17.4 9.9c-.8.8-2 .8-2.8 0\" /><path d=\"M10.1 7.1C9 7.2 7.7 7.7 6 8.6c-3.5 2-4.7 3.9-3.7 5.6 4.5 7.8 9.5 8.4 11.2 7.4.9-.5 1.9-2.1 1.9-4.7\" /><path d=\"M9.1 16.5c.3-1.1 1.4-1.7 2.4-1.4\" />",
85
+ minus: "<path d=\"M5 12h14\" />",
86
+ moon: "<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\" />",
87
+ music: "<path d=\"M9 18V5l12-2v13\" /><circle cx=\"6\" cy=\"18\" r=\"3\" /><circle cx=\"18\" cy=\"16\" r=\"3\" />",
88
+ next: "<path d=\"M21 4v16\" /><path d=\"M6.029 4.285A2 2 0 0 0 3 6v12a2 2 0 0 0 3.029 1.715l9.997-5.998a2 2 0 0 0 .003-3.432z\" />",
89
+ note: "<path d=\"M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4\" /><path d=\"M2 6h4\" /><path d=\"M2 10h4\" /><path d=\"M2 14h4\" /><path d=\"M2 18h4\" /><path d=\"M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z\" />",
90
+ package: "<path d=\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\" /><path d=\"M12 22V12\" /><polyline points=\"3.29 7 12 12 20.71 7\" /><path d=\"m7.5 4.27 9 5.15\" />",
91
+ palette: "<path d=\"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z\" /><circle cx=\"13.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\" /><circle cx=\"17.5\" cy=\"10.5\" r=\".5\" fill=\"currentColor\" /><circle cx=\"6.5\" cy=\"12.5\" r=\".5\" fill=\"currentColor\" /><circle cx=\"8.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />",
92
+ 'panel-left': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" /><path d=\"M9 3v18\" />",
93
+ 'panel-right': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" /><path d=\"M15 3v18\" />",
94
+ party: "<path d=\"M5.8 11.3 2 22l10.7-3.79\" /><path d=\"M4 3h.01\" /><path d=\"M22 8h.01\" /><path d=\"M15 2h.01\" /><path d=\"M22 20h.01\" /><path d=\"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10\" /><path d=\"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11c-.11.7-.72 1.22-1.43 1.22H17\" /><path d=\"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98C9.52 4.9 9 5.52 9 6.23V7\" /><path d=\"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z\" />",
95
+ paste: "<path d=\"M11 14h10\" /><path d=\"M16 4h2a2 2 0 0 1 2 2v1.344\" /><path d=\"m17 18 4-4-4-4\" /><path d=\"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113\" /><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" />",
96
+ pause: "<rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" /><rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />",
97
+ pin: "<path d=\"M12 17v5\" /><path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\" />",
98
+ play: "<path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />",
99
+ plus: "<path d=\"M5 12h14\" /><path d=\"M12 5v14\" />",
100
+ popcorn: "<path d=\"M18 8a2 2 0 0 0 0-4 2 2 0 0 0-4 0 2 2 0 0 0-4 0 2 2 0 0 0-4 0 2 2 0 0 0 0 4\" /><path d=\"M10 22 9 8\" /><path d=\"m14 22 1-14\" /><path d=\"M20 8c.5 0 .9.4.8 1l-2.6 12c-.1.5-.7 1-1.2 1H7c-.6 0-1.1-.4-1.2-1L3.2 9c-.1-.6.3-1 .8-1Z\" />",
101
+ previous: "<path d=\"M17.971 4.285A2 2 0 0 1 21 6v12a2 2 0 0 1-3.029 1.715l-9.997-5.998a2 2 0 0 1-.003-3.432z\" /><path d=\"M3 20V4\" />",
102
+ printer: "<path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\" /><path d=\"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6\" /><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\" rx=\"1\" />",
103
+ redo: "<path d=\"m15 14 5-5-5-5\" /><path d=\"M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13\" />",
104
+ refresh: "<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" /><path d=\"M21 3v5h-5\" /><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" /><path d=\"M8 16H3v5\" />",
105
+ return: "<path d=\"M20 4v7a4 4 0 0 1-4 4H4\" /><path d=\"m9 10-5 5 5 5\" />",
106
+ robot: "<path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />",
107
+ rocket: "<path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" /><path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\" /><path d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\" /><path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\" />",
108
+ save: "<path d=\"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\" /><path d=\"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7\" /><path d=\"M7 3v4a1 1 0 0 0 1 1h7\" />",
109
+ scissors: "<circle cx=\"6\" cy=\"6\" r=\"3\" /><path d=\"M8.12 8.12 12 12\" /><path d=\"M20 4 8.12 15.88\" /><circle cx=\"6\" cy=\"18\" r=\"3\" /><path d=\"M14.8 14.8 20 20\" />",
110
+ send: "<path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\" /><path d=\"m21.854 2.147-10.94 10.939\" />",
111
+ shield: "<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />",
112
+ shuffle: "<path d=\"m18 14 4 4-4 4\" /><path d=\"m18 2 4 4-4 4\" /><path d=\"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22\" /><path d=\"M2 6h1.972a4 4 0 0 1 3.6 2.2\" /><path d=\"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45\" />",
113
+ skull: "<path d=\"m12.5 17-.5-1-.5 1h1z\" /><path d=\"M15 22a1 1 0 0 0 1-1v-1a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20v1a1 1 0 0 0 1 1z\" /><circle cx=\"15\" cy=\"12\" r=\"1\" /><circle cx=\"9\" cy=\"12\" r=\"1\" />",
114
+ sleep: "<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\" />",
115
+ sparkles: "<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\" /><path d=\"M20 2v4\" /><path d=\"M22 4h-4\" /><circle cx=\"4\" cy=\"20\" r=\"2\" />",
116
+ star: "<path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\" />",
117
+ stop: "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />",
118
+ sun: "<circle cx=\"12\" cy=\"12\" r=\"4\" /><path d=\"M12 2v2\" /><path d=\"M12 20v2\" /><path d=\"m4.93 4.93 1.41 1.41\" /><path d=\"m17.66 17.66 1.41 1.41\" /><path d=\"M2 12h2\" /><path d=\"M20 12h2\" /><path d=\"m6.34 17.66-1.41 1.41\" /><path d=\"m19.07 4.93-1.41 1.41\" />",
119
+ tag: "<path d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\" /><circle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />",
120
+ target: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><circle cx=\"12\" cy=\"12\" r=\"6\" /><circle cx=\"12\" cy=\"12\" r=\"2\" />",
121
+ terminal: "<path d=\"M12 19h8\" /><path d=\"m4 17 6-6-6-6\" />",
122
+ 'thumbs-down': "<path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" /><path d=\"M17 14V2\" />",
123
+ 'thumbs-up': "<path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" /><path d=\"M7 10v12\" />",
124
+ tick: "<path d=\"M20 6 9 17l-5-5\" />",
125
+ toolbox: "<path d=\"M12 12h.01\" /><path d=\"M16 6V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2\" /><path d=\"M22 13a18.15 18.15 0 0 1-20 0\" /><rect width=\"20\" height=\"14\" x=\"2\" y=\"6\" rx=\"2\" />",
126
+ trash: "<path d=\"M10 11v6\" /><path d=\"M14 11v6\" /><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" /><path d=\"M3 6h18\" /><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />",
127
+ trophy: "<path d=\"M10 14.66V17a1 1 0 0 1-1 1 2 2 0 0 0-2 2v2\" /><path d=\"M14 14.66V17a1 1 0 0 0 1 1 2 2 0 0 1 2 2v2\" /><path d=\"M17.916 10H19.5A2.5 2.5 0 0 0 22 7.5V5a1 1 0 0 0-1-1h-3\" /><path d=\"M4 22h16\" /><path d=\"M6 9a6 6 0 0 0 12 0V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1z\" /><path d=\"M6.084 10H4.5A2.5 2.5 0 0 1 2 7.5V5a1 1 0 0 1 1-1h3\" />",
128
+ undo: "<path d=\"M9 14 4 9l5-5\" /><path d=\"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11\" />",
129
+ upload: "<path d=\"M12 3v12\" /><path d=\"m17 8-5-5-5 5\" /><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />",
130
+ user: "<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />",
131
+ users: "<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" /><path d=\"M16 3.128a4 4 0 0 1 0 7.744\" /><path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" /><circle cx=\"9\" cy=\"7\" r=\"4\" />",
132
+ videotape: "<rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" /><path d=\"M2 8h20\" /><circle cx=\"8\" cy=\"14\" r=\"2\" /><path d=\"M8 12h8\" /><circle cx=\"16\" cy=\"14\" r=\"2\" />",
133
+ 'volume-high': "<path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" /><path d=\"M16 9a5 5 0 0 1 0 6\" /><path d=\"M19.364 18.364a9 9 0 0 0 0-12.728\" />",
134
+ 'volume-low': "<path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" /><path d=\"M16 9a5 5 0 0 1 0 6\" />",
135
+ 'volume-mute': "<path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" /><line x1=\"22\" x2=\"16\" y1=\"9\" y2=\"15\" /><line x1=\"16\" x2=\"22\" y1=\"9\" y2=\"15\" />",
136
+ wand: "<path d=\"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72\" /><path d=\"m14 7 3 3\" /><path d=\"M5 6v4\" /><path d=\"M19 14v4\" /><path d=\"M10 2v2\" /><path d=\"M7 8H3\" /><path d=\"M21 16h-4\" /><path d=\"M11 3H9\" />",
137
+ warning: "<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" /><path d=\"M12 9v4\" /><path d=\"M12 17h.01\" />",
138
+ wave: "<path d=\"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2\" /><path d=\"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2\" /><path d=\"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8\" /><path d=\"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15\" />",
139
+ wrench: "<path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\" />",
140
+ zap: "<path d=\"M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z\" />"
141
+ } as const
142
+
143
+ /** Every icon name in the enforced set. An icon outside this union does not exist. */
144
+ export type IconName = keyof typeof ICON_MARKUP
145
+
146
+ export const ICON_NAMES = Object.keys(ICON_MARKUP) as IconName[]
147
+
148
+ /** The lucide slug each glyph was vendored from — provenance for regeneration. */
149
+ export const ICON_SOURCE_SLUGS: Record<IconName, string> = {
150
+ activity: 'activity',
151
+ antenna: 'satellite-dish',
152
+ 'arrow-down': 'arrow-down',
153
+ 'arrow-left': 'arrow-left',
154
+ 'arrow-right': 'arrow-right',
155
+ 'arrow-up': 'arrow-up',
156
+ 'arrow-up-right': 'arrow-up-right',
157
+ 'arrows-horizontal': 'arrow-left-right',
158
+ ban: 'ban',
159
+ bell: 'bell',
160
+ bone: 'bone',
161
+ book: 'book-open',
162
+ bookmark: 'bookmark',
163
+ 'branch-up': 'corner-right-up',
164
+ briefcase: 'briefcase',
165
+ broom: 'brush-cleaning',
166
+ calendar: 'calendar',
167
+ camera: 'camera',
168
+ cat: 'cat',
169
+ chart: 'chart-column',
170
+ chat: 'message-circle',
171
+ check: 'circle-check',
172
+ 'chevron-down': 'chevron-down',
173
+ 'chevron-left': 'chevron-left',
174
+ 'chevron-right': 'chevron-right',
175
+ 'chevron-up': 'chevron-up',
176
+ circle: 'circle',
177
+ 'circle-dot': 'circle-dot',
178
+ clapper: 'clapperboard',
179
+ clipboard: 'clipboard',
180
+ clock: 'clock',
181
+ close: 'x',
182
+ code: 'code',
183
+ compass: 'compass',
184
+ copy: 'copy',
185
+ crop: 'crop',
186
+ crown: 'crown',
187
+ database: 'database',
188
+ desktop: 'monitor',
189
+ document: 'file-text',
190
+ download: 'download',
191
+ edit: 'pencil',
192
+ error: 'circle-x',
193
+ external: 'external-link',
194
+ eye: 'eye',
195
+ film: 'film',
196
+ filter: 'funnel',
197
+ fire: 'flame',
198
+ flag: 'flag',
199
+ flask: 'flask-conical',
200
+ folder: 'folder',
201
+ gamepad: 'gamepad-2',
202
+ gear: 'settings',
203
+ globe: 'globe',
204
+ grid: 'grid-3x3',
205
+ handshake: 'handshake',
206
+ heart: 'heart',
207
+ 'helping-hand': 'hand-helping',
208
+ home: 'house',
209
+ hospital: 'hospital',
210
+ hourglass: 'hourglass',
211
+ image: 'image',
212
+ inbox: 'inbox',
213
+ info: 'info',
214
+ key: 'key',
215
+ layers: 'layers',
216
+ link: 'link',
217
+ list: 'list',
218
+ lock: 'lock',
219
+ magnifier: 'search',
220
+ mail: 'mail',
221
+ map: 'map',
222
+ masks: 'drama',
223
+ minus: 'minus',
224
+ moon: 'moon',
225
+ music: 'music',
226
+ next: 'skip-forward',
227
+ note: 'notebook-pen',
228
+ package: 'package',
229
+ palette: 'palette',
230
+ 'panel-left': 'panel-left',
231
+ 'panel-right': 'panel-right',
232
+ party: 'party-popper',
233
+ paste: 'clipboard-paste',
234
+ pause: 'pause',
235
+ pin: 'pin',
236
+ play: 'play',
237
+ plus: 'plus',
238
+ popcorn: 'popcorn',
239
+ previous: 'skip-back',
240
+ printer: 'printer',
241
+ redo: 'redo-2',
242
+ refresh: 'refresh-cw',
243
+ return: 'corner-down-left',
244
+ robot: 'bot',
245
+ rocket: 'rocket',
246
+ save: 'save',
247
+ scissors: 'scissors',
248
+ send: 'send',
249
+ shield: 'shield',
250
+ shuffle: 'shuffle',
251
+ skull: 'skull',
252
+ sleep: 'moon',
253
+ sparkles: 'sparkles',
254
+ star: 'star',
255
+ stop: 'square',
256
+ sun: 'sun',
257
+ tag: 'tag',
258
+ target: 'target',
259
+ terminal: 'terminal',
260
+ 'thumbs-down': 'thumbs-down',
261
+ 'thumbs-up': 'thumbs-up',
262
+ tick: 'check',
263
+ toolbox: 'briefcase-business',
264
+ trash: 'trash-2',
265
+ trophy: 'trophy',
266
+ undo: 'undo-2',
267
+ upload: 'upload',
268
+ user: 'user',
269
+ users: 'users',
270
+ videotape: 'videotape',
271
+ 'volume-high': 'volume-2',
272
+ 'volume-low': 'volume-1',
273
+ 'volume-mute': 'volume-x',
274
+ wand: 'wand-sparkles',
275
+ warning: 'triangle-alert',
276
+ wave: 'hand',
277
+ wrench: 'wrench',
278
+ zap: 'zap'
279
+ }
280
+
281
+ export const LUCIDE_VERSION = '1.28.0'
282
+
283
+ /**
284
+ * Canonical raw-emoji -> icon name. Source: src/icons/emoji-map.json.
285
+ * Keys are stored exactly as written there; look them up through
286
+ * emojiToIconName(), which strips variation selectors and skin tones first.
287
+ */
288
+ export const EMOJI_TO_ICON: Record<string, IconName> = {
289
+ "👋": "wave",
290
+ "📄": "document",
291
+ "📧": "mail",
292
+ "✉": "mail",
293
+ "🎨": "palette",
294
+ "🖨": "printer",
295
+ "✨": "sparkles",
296
+ "🎭": "masks",
297
+ "🔧": "wrench",
298
+ "📡": "antenna",
299
+ "🔍": "magnifier",
300
+ "🔎": "magnifier",
301
+ "💼": "briefcase",
302
+ "⚙": "gear",
303
+ "🖐": "helping-hand",
304
+ "✅": "check",
305
+ "✔": "tick",
306
+ "☑": "tick",
307
+ "🎬": "clapper",
308
+ "🍿": "popcorn",
309
+ "📼": "videotape",
310
+ "⚠": "warning",
311
+ "❌": "error",
312
+ "✖": "close",
313
+ "❎": "error",
314
+ "ℹ": "info",
315
+ "⏳": "hourglass",
316
+ "⌛": "hourglass",
317
+ "⏰": "clock",
318
+ "🕐": "clock",
319
+ "💤": "sleep",
320
+ "⚪": "circle",
321
+ "🔴": "circle-dot",
322
+ "🟢": "circle-dot",
323
+ "🟡": "circle-dot",
324
+ "🔵": "circle-dot",
325
+ "➖": "minus",
326
+ "🚨": "warning",
327
+ "🔥": "fire",
328
+ "💥": "warning",
329
+ "🎉": "party",
330
+ "🏆": "trophy",
331
+ "⭐": "star",
332
+ "🌟": "star",
333
+ "👍": "thumbs-up",
334
+ "👎": "thumbs-down",
335
+ "❤": "heart",
336
+ "🩷": "heart",
337
+ "🖤": "heart",
338
+ "🗑": "trash",
339
+ "✏": "edit",
340
+ "📝": "note",
341
+ "📋": "clipboard",
342
+ "📌": "pin",
343
+ "🔄": "refresh",
344
+ "♻": "refresh",
345
+ "▶": "play",
346
+ "⏸": "pause",
347
+ "⏭": "next",
348
+ "⏮": "previous",
349
+ "⏹": "stop",
350
+ "🔀": "shuffle",
351
+ "🔗": "link",
352
+ "⛓": "link",
353
+ "👁": "eye",
354
+ "🔒": "lock",
355
+ "🔑": "key",
356
+ "🛡": "shield",
357
+ "🧹": "broom",
358
+ "🪄": "wand",
359
+ "🔔": "bell",
360
+ "🚩": "flag",
361
+ "🏷": "tag",
362
+ "🔖": "bookmark",
363
+ "📤": "upload",
364
+ "⬆": "arrow-up",
365
+ "📥": "download",
366
+ "⬇": "arrow-down",
367
+ "➡": "arrow-right",
368
+ "⬅": "arrow-left",
369
+ "↔": "arrows-horizontal",
370
+ "↗": "arrow-up-right",
371
+ "↩": "return",
372
+ "⤴": "branch-up",
373
+ "◀": "chevron-left",
374
+ "🔼": "chevron-up",
375
+ "🔽": "chevron-down",
376
+ "➕": "plus",
377
+ "📎": "copy",
378
+ "💾": "save",
379
+ "📨": "send",
380
+ "📁": "folder",
381
+ "📂": "folder",
382
+ "📦": "package",
383
+ "📅": "calendar",
384
+ "🗓": "calendar",
385
+ "🖼": "image",
386
+ "📷": "camera",
387
+ "🎞": "film",
388
+ "🎵": "music",
389
+ "🎧": "music",
390
+ "🔊": "volume-high",
391
+ "🔈": "volume-low",
392
+ "🔇": "volume-mute",
393
+ "💬": "chat",
394
+ "📖": "book",
395
+ "📚": "book",
396
+ "🤝": "handshake",
397
+ "🤖": "robot",
398
+ "👤": "user",
399
+ "👥": "users",
400
+ "👑": "crown",
401
+ "💀": "skull",
402
+ "🐈": "cat",
403
+ "🦴": "bone",
404
+ "🎮": "gamepad",
405
+ "🧰": "toolbox",
406
+ "🧪": "flask",
407
+ "🏥": "hospital",
408
+ "🌐": "globe",
409
+ "🗺": "map",
410
+ "📊": "chart",
411
+ "📈": "chart",
412
+ "📉": "chart",
413
+ "📐": "crop",
414
+ "🖥": "desktop",
415
+ "💻": "desktop",
416
+ "🗄": "database",
417
+ "🗃": "database",
418
+ "⌨": "terminal",
419
+ "🧱": "layers",
420
+ "🎯": "target",
421
+ "🚀": "rocket",
422
+ "⚡": "zap",
423
+ "🧭": "compass",
424
+ "🏠": "home",
425
+ "🏡": "home",
426
+ "📭": "inbox",
427
+ "📬": "inbox",
428
+ "📮": "inbox",
429
+ "☀": "sun",
430
+ "🌙": "moon",
431
+ "🧑": "user",
432
+ "🙋": "wave",
433
+ "💡": "zap",
434
+ "🔦": "magnifier",
435
+ "📏": "crop",
436
+ "✂": "scissors",
437
+ "🩹": "wrench",
438
+ "🔨": "wrench",
439
+ "🛠": "toolbox",
440
+ "⚔": "toolbox",
441
+ "🏹": "target",
442
+ "🔱": "layers",
443
+ "🚫": "ban",
444
+ "⛔": "ban"
445
+ }
446
+
447
+ /**
448
+ * Emoji whose EMOJI_TO_ICON entry is only right in one context, and the rule for
449
+ * each. Source: the `$ambiguous` block in src/icons/emoji-map.json. check-icons
450
+ * prints these beside its suggestion; codemod-icons refuses to rewrite them.
451
+ */
452
+ export const AMBIGUOUS_EMOJI: Record<string, string> = {
453
+ "◀": "in a mirrored `◀ … ▶` pair use chevron-left WITH chevron-right — never pair it with play",
454
+ "▶": "play ONLY as a transport control beside ⏸; in a mirrored `◀ … ▶` pair use chevron-right"
455
+ }
@@ -0,0 +1,150 @@
1
+ {
2
+ "$comment": [
3
+ "The enforced icon allowlist: hadoku icon name -> lucide-static slug.",
4
+ "This file is the ONLY hand-edited half of the registry. `pnpm run generate:icons`",
5
+ "reads it, pulls the artwork out of lucide-static, and writes registry.generated.ts.",
6
+ "Adding an icon = add a line here + regenerate. A slug that lucide does not have",
7
+ "fails the generator loudly rather than emitting a hole.",
8
+ "",
9
+ "Names describe the PICTOGRAPH, not the app that uses it, so a category reorg in",
10
+ "hadoku_site never renames an icon. Every name below is backed by at least one real",
11
+ "usage found in the 2026-08-12 ecosystem emoji scan (39 repos, 12 months of commits)."
12
+ ],
13
+
14
+ "$comment_catalogue": "hadoku_site/spec/categories.json — the frontpage catalogue.",
15
+ "wave": "hand",
16
+ "document": "file-text",
17
+ "mail": "mail",
18
+ "palette": "palette",
19
+ "printer": "printer",
20
+ "sparkles": "sparkles",
21
+ "masks": "drama",
22
+ "wrench": "wrench",
23
+ "antenna": "satellite-dish",
24
+ "magnifier": "search",
25
+ "briefcase": "briefcase",
26
+ "gear": "settings",
27
+ "helping-hand": "hand-helping",
28
+ "check": "circle-check",
29
+ "clapper": "clapperboard",
30
+ "popcorn": "popcorn",
31
+ "videotape": "videotape",
32
+
33
+ "$comment_apps": "Found rendered in child-app source: task, tenhands, conjure, meet, pygmalion, dataplatform, watchpart2, aggregator, trader, contact-ui.",
34
+ "note": "notebook-pen",
35
+ "hourglass": "hourglass",
36
+ "trash": "trash-2",
37
+ "lock": "lock",
38
+ "clipboard": "clipboard",
39
+ "shuffle": "shuffle",
40
+ "warning": "triangle-alert",
41
+ "refresh": "refresh-cw",
42
+ "play": "play",
43
+ "trophy": "trophy",
44
+ "chat": "message-circle",
45
+ "inbox": "inbox",
46
+ "book": "book-open",
47
+ "handshake": "handshake",
48
+ "robot": "bot",
49
+ "volume-high": "volume-2",
50
+ "volume-low": "volume-1",
51
+ "volume-mute": "volume-x",
52
+ "user": "user",
53
+ "star": "star",
54
+ "package": "package",
55
+ "wand": "wand-sparkles",
56
+ "broom": "brush-cleaning",
57
+ "calendar": "calendar",
58
+ "edit": "pencil",
59
+ "desktop": "monitor",
60
+ "music": "music",
61
+ "thumbs-up": "thumbs-up",
62
+ "thumbs-down": "thumbs-down",
63
+ "folder": "folder",
64
+ "crop": "crop",
65
+ "image": "image",
66
+ "camera": "camera",
67
+ "upload": "upload",
68
+ "download": "download",
69
+ "clock": "clock",
70
+ "eye": "eye",
71
+ "sleep": "moon",
72
+ "info": "info",
73
+ "error": "circle-x",
74
+ "circle": "circle",
75
+ "minus": "minus",
76
+ "link": "link",
77
+ "crown": "crown",
78
+ "fire": "flame",
79
+ "skull": "skull",
80
+
81
+ "$comment_chrome": "UI chrome already in use via lucide-react in hadoku-pygmalion's local icons.tsx, so that file can retire in favour of this registry.",
82
+ "panel-left": "panel-left",
83
+ "panel-right": "panel-right",
84
+ "home": "house",
85
+ "plus": "plus",
86
+ "compass": "compass",
87
+ "stop": "square",
88
+ "scissors": "scissors",
89
+ "close": "x",
90
+ "undo": "undo-2",
91
+ "redo": "redo-2",
92
+ "paste": "clipboard-paste",
93
+ "arrow-right": "arrow-right",
94
+ "arrow-left": "arrow-left",
95
+ "activity": "activity",
96
+ "chevron-down": "chevron-down",
97
+
98
+ "$comment_v2": "Added 2026-08-13 for the ecosystem migration \u2014 every entry is backed by a real emoji found in a consumer repo by check-icons.",
99
+ "arrow-down": "arrow-down",
100
+ "arrow-up": "arrow-up",
101
+ "arrow-up-right": "arrow-up-right",
102
+ "arrows-horizontal": "arrow-left-right",
103
+ "return": "corner-down-left",
104
+ "branch-up": "corner-right-up",
105
+ "chevron-left": "chevron-left",
106
+ "chevron-right": "chevron-right",
107
+ "chevron-up": "chevron-up",
108
+ "pause": "pause",
109
+ "pin": "pin",
110
+ "map": "map",
111
+ "film": "film",
112
+ "cat": "cat",
113
+ "bone": "bone",
114
+ "gamepad": "gamepad-2",
115
+ "toolbox": "briefcase-business",
116
+ "flask": "flask-conical",
117
+ "hospital": "hospital",
118
+ "party": "party-popper",
119
+ "sun": "sun",
120
+ "moon": "moon",
121
+ "tick": "check",
122
+ "circle-dot": "circle-dot",
123
+ "previous": "skip-back",
124
+ "next": "skip-forward",
125
+ "layers": "layers",
126
+ "filter": "funnel",
127
+ "list": "list",
128
+ "grid": "grid-3x3",
129
+ "external": "external-link",
130
+ "copy": "copy",
131
+ "save": "save",
132
+ "send": "send",
133
+ "key": "key",
134
+ "shield": "shield",
135
+ "zap": "zap",
136
+ "database": "database",
137
+ "terminal": "terminal",
138
+ "code": "code",
139
+ "bell": "bell",
140
+ "heart": "heart",
141
+ "flag": "flag",
142
+ "tag": "tag",
143
+ "bookmark": "bookmark",
144
+ "users": "users",
145
+ "globe": "globe",
146
+ "chart": "chart-column",
147
+ "target": "target",
148
+ "rocket": "rocket",
149
+ "ban": "ban"
150
+ }