@agent-native/toolkit 0.20.8 → 0.21.0-nightly-20260925012751

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 (233) hide show
  1. package/agent-native.eject.json +30 -0
  2. package/dist/composer/TiptapComposer.d.ts.map +1 -1
  3. package/dist/composer/TiptapComposer.js +101 -59
  4. package/dist/composer/TiptapComposer.js.map +1 -1
  5. package/dist/composer/TiptapComposer.spec.js +102 -10
  6. package/dist/composer/TiptapComposer.spec.js.map +1 -1
  7. package/dist/icons/ResourceIcon.d.ts +14 -0
  8. package/dist/icons/ResourceIcon.d.ts.map +1 -0
  9. package/dist/icons/ResourceIcon.js +43 -0
  10. package/dist/icons/ResourceIcon.js.map +1 -0
  11. package/dist/icons/ResourceIcon.spec.d.ts +2 -0
  12. package/dist/icons/ResourceIcon.spec.d.ts.map +1 -0
  13. package/dist/icons/ResourceIcon.spec.js +23 -0
  14. package/dist/icons/ResourceIcon.spec.js.map +1 -0
  15. package/dist/icons/ResourceIconPicker.d.ts +52 -0
  16. package/dist/icons/ResourceIconPicker.d.ts.map +1 -0
  17. package/dist/icons/ResourceIconPicker.js +344 -0
  18. package/dist/icons/ResourceIconPicker.js.map +1 -0
  19. package/dist/icons/catalog.d.ts +17 -0
  20. package/dist/icons/catalog.d.ts.map +1 -0
  21. package/dist/icons/catalog.js +114 -0
  22. package/dist/icons/catalog.js.map +1 -0
  23. package/dist/icons/catalog.spec.d.ts +2 -0
  24. package/dist/icons/catalog.spec.d.ts.map +1 -0
  25. package/dist/icons/catalog.spec.js +29 -0
  26. package/dist/icons/catalog.spec.js.map +1 -0
  27. package/dist/icons/emoji-catalog.d.ts +12 -0
  28. package/dist/icons/emoji-catalog.d.ts.map +1 -0
  29. package/dist/icons/emoji-catalog.js +59 -0
  30. package/dist/icons/emoji-catalog.js.map +1 -0
  31. package/dist/icons/emoji-catalog.spec.d.ts +2 -0
  32. package/dist/icons/emoji-catalog.spec.d.ts.map +1 -0
  33. package/dist/icons/emoji-catalog.spec.js +29 -0
  34. package/dist/icons/emoji-catalog.spec.js.map +1 -0
  35. package/dist/icons/icon-colors.d.ts +3 -0
  36. package/dist/icons/icon-colors.d.ts.map +1 -0
  37. package/dist/icons/icon-colors.js +12 -0
  38. package/dist/icons/icon-colors.js.map +1 -0
  39. package/dist/icons/icon-persistence.spec.d.ts +2 -0
  40. package/dist/icons/icon-persistence.spec.d.ts.map +1 -0
  41. package/dist/icons/icon-persistence.spec.js +38 -0
  42. package/dist/icons/icon-persistence.spec.js.map +1 -0
  43. package/dist/icons/index.d.ts +5 -0
  44. package/dist/icons/index.d.ts.map +1 -0
  45. package/dist/icons/index.js +5 -0
  46. package/dist/icons/index.js.map +1 -0
  47. package/dist/icons/recents.d.ts +6 -0
  48. package/dist/icons/recents.d.ts.map +1 -0
  49. package/dist/icons/recents.js +23 -0
  50. package/dist/icons/recents.js.map +1 -0
  51. package/dist/icons/recents.spec.d.ts +2 -0
  52. package/dist/icons/recents.spec.d.ts.map +1 -0
  53. package/dist/icons/recents.spec.js +29 -0
  54. package/dist/icons/recents.spec.js.map +1 -0
  55. package/dist/icons/server.d.ts +7 -0
  56. package/dist/icons/server.d.ts.map +1 -0
  57. package/dist/icons/server.js +25 -0
  58. package/dist/icons/server.js.map +1 -0
  59. package/dist/icons/tabler-catalog-data.d.ts +31 -0
  60. package/dist/icons/tabler-catalog-data.d.ts.map +1 -0
  61. package/dist/icons/tabler-catalog-data.js +30121 -0
  62. package/dist/icons/tabler-catalog-data.js.map +1 -0
  63. package/dist/icons/tabler-chunk-loaders.d.ts +30 -0
  64. package/dist/icons/tabler-chunk-loaders.d.ts.map +1 -0
  65. package/dist/icons/tabler-chunk-loaders.js +30 -0
  66. package/dist/icons/tabler-chunk-loaders.js.map +1 -0
  67. package/dist/icons/tabler-chunks/a.d.ts +450 -0
  68. package/dist/icons/tabler-chunks/a.d.ts.map +1 -0
  69. package/dist/icons/tabler-chunks/a.js +451 -0
  70. package/dist/icons/tabler-chunks/a.js.map +1 -0
  71. package/dist/icons/tabler-chunks/b.d.ts +849 -0
  72. package/dist/icons/tabler-chunks/b.d.ts.map +1 -0
  73. package/dist/icons/tabler-chunks/b.js +850 -0
  74. package/dist/icons/tabler-chunks/b.js.map +1 -0
  75. package/dist/icons/tabler-chunks/c.d.ts +922 -0
  76. package/dist/icons/tabler-chunks/c.d.ts.map +1 -0
  77. package/dist/icons/tabler-chunks/c.js +923 -0
  78. package/dist/icons/tabler-chunks/c.js.map +1 -0
  79. package/dist/icons/tabler-chunks/d.d.ts +380 -0
  80. package/dist/icons/tabler-chunks/d.d.ts.map +1 -0
  81. package/dist/icons/tabler-chunks/d.js +381 -0
  82. package/dist/icons/tabler-chunks/d.js.map +1 -0
  83. package/dist/icons/tabler-chunks/e.d.ts +112 -0
  84. package/dist/icons/tabler-chunks/e.d.ts.map +1 -0
  85. package/dist/icons/tabler-chunks/e.js +113 -0
  86. package/dist/icons/tabler-chunks/e.js.map +1 -0
  87. package/dist/icons/tabler-chunks/f.d.ts +341 -0
  88. package/dist/icons/tabler-chunks/f.d.ts.map +1 -0
  89. package/dist/icons/tabler-chunks/f.js +342 -0
  90. package/dist/icons/tabler-chunks/f.js.map +1 -0
  91. package/dist/icons/tabler-chunks/g.d.ts +101 -0
  92. package/dist/icons/tabler-chunks/g.d.ts.map +1 -0
  93. package/dist/icons/tabler-chunks/g.js +102 -0
  94. package/dist/icons/tabler-chunks/g.js.map +1 -0
  95. package/dist/icons/tabler-chunks/h.d.ts +276 -0
  96. package/dist/icons/tabler-chunks/h.d.ts.map +1 -0
  97. package/dist/icons/tabler-chunks/h.js +277 -0
  98. package/dist/icons/tabler-chunks/h.js.map +1 -0
  99. package/dist/icons/tabler-chunks/i.d.ts +79 -0
  100. package/dist/icons/tabler-chunks/i.d.ts.map +1 -0
  101. package/dist/icons/tabler-chunks/i.js +80 -0
  102. package/dist/icons/tabler-chunks/i.js.map +1 -0
  103. package/dist/icons/tabler-chunks/j.d.ts +17 -0
  104. package/dist/icons/tabler-chunks/j.d.ts.map +1 -0
  105. package/dist/icons/tabler-chunks/j.js +18 -0
  106. package/dist/icons/tabler-chunks/j.js.map +1 -0
  107. package/dist/icons/tabler-chunks/k.d.ts +25 -0
  108. package/dist/icons/tabler-chunks/k.d.ts.map +1 -0
  109. package/dist/icons/tabler-chunks/k.js +26 -0
  110. package/dist/icons/tabler-chunks/k.js.map +1 -0
  111. package/dist/icons/tabler-chunks/l.d.ts +298 -0
  112. package/dist/icons/tabler-chunks/l.d.ts.map +1 -0
  113. package/dist/icons/tabler-chunks/l.js +299 -0
  114. package/dist/icons/tabler-chunks/l.js.map +1 -0
  115. package/dist/icons/tabler-chunks/m.d.ts +413 -0
  116. package/dist/icons/tabler-chunks/m.d.ts.map +1 -0
  117. package/dist/icons/tabler-chunks/m.js +414 -0
  118. package/dist/icons/tabler-chunks/m.js.map +1 -0
  119. package/dist/icons/tabler-chunks/n.d.ts +174 -0
  120. package/dist/icons/tabler-chunks/n.d.ts.map +1 -0
  121. package/dist/icons/tabler-chunks/n.js +175 -0
  122. package/dist/icons/tabler-chunks/n.js.map +1 -0
  123. package/dist/icons/tabler-chunks/o.d.ts +31 -0
  124. package/dist/icons/tabler-chunks/o.d.ts.map +1 -0
  125. package/dist/icons/tabler-chunks/o.js +32 -0
  126. package/dist/icons/tabler-chunks/o.js.map +1 -0
  127. package/dist/icons/tabler-chunks/p.d.ts +374 -0
  128. package/dist/icons/tabler-chunks/p.d.ts.map +1 -0
  129. package/dist/icons/tabler-chunks/p.js +375 -0
  130. package/dist/icons/tabler-chunks/p.js.map +1 -0
  131. package/dist/icons/tabler-chunks/q.d.ts +14 -0
  132. package/dist/icons/tabler-chunks/q.d.ts.map +1 -0
  133. package/dist/icons/tabler-chunks/q.js +15 -0
  134. package/dist/icons/tabler-chunks/q.js.map +1 -0
  135. package/dist/icons/tabler-chunks/r.d.ts +183 -0
  136. package/dist/icons/tabler-chunks/r.d.ts.map +1 -0
  137. package/dist/icons/tabler-chunks/r.js +184 -0
  138. package/dist/icons/tabler-chunks/r.js.map +1 -0
  139. package/dist/icons/tabler-chunks/s.d.ts +656 -0
  140. package/dist/icons/tabler-chunks/s.d.ts.map +1 -0
  141. package/dist/icons/tabler-chunks/s.js +657 -0
  142. package/dist/icons/tabler-chunks/s.js.map +1 -0
  143. package/dist/icons/tabler-chunks/t.d.ts +242 -0
  144. package/dist/icons/tabler-chunks/t.d.ts.map +1 -0
  145. package/dist/icons/tabler-chunks/t.js +243 -0
  146. package/dist/icons/tabler-chunks/t.js.map +1 -0
  147. package/dist/icons/tabler-chunks/u.d.ts +62 -0
  148. package/dist/icons/tabler-chunks/u.d.ts.map +1 -0
  149. package/dist/icons/tabler-chunks/u.js +63 -0
  150. package/dist/icons/tabler-chunks/u.js.map +1 -0
  151. package/dist/icons/tabler-chunks/v.d.ts +60 -0
  152. package/dist/icons/tabler-chunks/v.d.ts.map +1 -0
  153. package/dist/icons/tabler-chunks/v.js +61 -0
  154. package/dist/icons/tabler-chunks/v.js.map +1 -0
  155. package/dist/icons/tabler-chunks/w.d.ts +115 -0
  156. package/dist/icons/tabler-chunks/w.d.ts.map +1 -0
  157. package/dist/icons/tabler-chunks/w.js +116 -0
  158. package/dist/icons/tabler-chunks/w.js.map +1 -0
  159. package/dist/icons/tabler-chunks/x.d.ts +18 -0
  160. package/dist/icons/tabler-chunks/x.d.ts.map +1 -0
  161. package/dist/icons/tabler-chunks/x.js +19 -0
  162. package/dist/icons/tabler-chunks/x.js.map +1 -0
  163. package/dist/icons/tabler-chunks/y.d.ts +7 -0
  164. package/dist/icons/tabler-chunks/y.d.ts.map +1 -0
  165. package/dist/icons/tabler-chunks/y.js +4 -0
  166. package/dist/icons/tabler-chunks/y.js.map +1 -0
  167. package/dist/icons/tabler-chunks/z.d.ts +51 -0
  168. package/dist/icons/tabler-chunks/z.d.ts.map +1 -0
  169. package/dist/icons/tabler-chunks/z.js +52 -0
  170. package/dist/icons/tabler-chunks/z.js.map +1 -0
  171. package/dist/icons/tabler-groups.d.ts +30 -0
  172. package/dist/icons/tabler-groups.d.ts.map +1 -0
  173. package/dist/icons/tabler-groups.js +65 -0
  174. package/dist/icons/tabler-groups.js.map +1 -0
  175. package/dist/icons/types.d.ts +25 -0
  176. package/dist/icons/types.d.ts.map +1 -0
  177. package/dist/icons/types.js +2 -0
  178. package/dist/icons/types.js.map +1 -0
  179. package/dist/index.d.ts +1 -0
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.js +1 -0
  182. package/dist/index.js.map +1 -1
  183. package/dist/styles.css +2 -0
  184. package/dist/theme/resource-icons.css +24 -0
  185. package/package.json +11 -2
  186. package/src/composer/TiptapComposer.spec.ts +142 -15
  187. package/src/composer/TiptapComposer.tsx +109 -58
  188. package/src/icons/ResourceIcon.spec.tsx +38 -0
  189. package/src/icons/ResourceIcon.tsx +91 -0
  190. package/src/icons/ResourceIconPicker.tsx +812 -0
  191. package/src/icons/catalog.spec.ts +50 -0
  192. package/src/icons/catalog.ts +153 -0
  193. package/src/icons/emoji-catalog.spec.ts +46 -0
  194. package/src/icons/emoji-catalog.ts +86 -0
  195. package/src/icons/icon-colors.ts +13 -0
  196. package/src/icons/icon-persistence.spec.ts +45 -0
  197. package/src/icons/index.ts +4 -0
  198. package/src/icons/recents.spec.ts +37 -0
  199. package/src/icons/recents.ts +37 -0
  200. package/src/icons/server.tsx +53 -0
  201. package/src/icons/tabler-catalog-data.ts +30122 -0
  202. package/src/icons/tabler-chunk-loaders.ts +29 -0
  203. package/src/icons/tabler-chunks/a.ts +897 -0
  204. package/src/icons/tabler-chunks/b.ts +1695 -0
  205. package/src/icons/tabler-chunks/c.ts +1841 -0
  206. package/src/icons/tabler-chunks/d.ts +757 -0
  207. package/src/icons/tabler-chunks/e.ts +221 -0
  208. package/src/icons/tabler-chunks/f.ts +679 -0
  209. package/src/icons/tabler-chunks/g.ts +199 -0
  210. package/src/icons/tabler-chunks/h.ts +549 -0
  211. package/src/icons/tabler-chunks/i.ts +155 -0
  212. package/src/icons/tabler-chunks/j.ts +31 -0
  213. package/src/icons/tabler-chunks/k.ts +47 -0
  214. package/src/icons/tabler-chunks/l.ts +593 -0
  215. package/src/icons/tabler-chunks/m.ts +823 -0
  216. package/src/icons/tabler-chunks/n.ts +345 -0
  217. package/src/icons/tabler-chunks/o.ts +59 -0
  218. package/src/icons/tabler-chunks/p.ts +745 -0
  219. package/src/icons/tabler-chunks/q.ts +25 -0
  220. package/src/icons/tabler-chunks/r.ts +363 -0
  221. package/src/icons/tabler-chunks/s.ts +1309 -0
  222. package/src/icons/tabler-chunks/t.ts +481 -0
  223. package/src/icons/tabler-chunks/u.ts +121 -0
  224. package/src/icons/tabler-chunks/v.ts +117 -0
  225. package/src/icons/tabler-chunks/w.ts +227 -0
  226. package/src/icons/tabler-chunks/x.ts +33 -0
  227. package/src/icons/tabler-chunks/y.ts +3 -0
  228. package/src/icons/tabler-chunks/z.ts +99 -0
  229. package/src/icons/tabler-groups.ts +70 -0
  230. package/src/icons/types.ts +35 -0
  231. package/src/index.ts +1 -0
  232. package/src/styles.css +2 -0
  233. package/src/theme/resource-icons.css +24 -0
@@ -0,0 +1,344 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { IconCheck, IconChevronRight, IconPhotoPlus, IconSearch, } from "@tabler/icons-react";
3
+ import * as React from "react";
4
+ import { Button } from "../ui/button.js";
5
+ import { Input } from "../ui/input.js";
6
+ import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger, } from "../ui/popover.js";
7
+ import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from "../ui/select.js";
8
+ import { Tabs, TabsList, TabsTrigger } from "../ui/tabs.js";
9
+ import { cn } from "../utils.js";
10
+ import { loadTablerCatalog } from "./catalog.js";
11
+ import { loadEmojiCatalog, EMOJI_CATEGORIES } from "./emoji-catalog.js";
12
+ import { resourceIconColorClasses } from "./icon-colors.js";
13
+ import { useResourceIconRecents } from "./recents.js";
14
+ import { ResourceIcon } from "./ResourceIcon.js";
15
+ import { TABLER_ICON_GROUPS } from "./tabler-groups.js";
16
+ const colors = [
17
+ undefined,
18
+ "gray",
19
+ "brown",
20
+ "orange",
21
+ "yellow",
22
+ "green",
23
+ "blue",
24
+ "purple",
25
+ "pink",
26
+ "red",
27
+ ];
28
+ const columns = 7;
29
+ const rowHeight = 36;
30
+ const MAX_ICON_UPLOAD_BYTES = 5 * 1024 * 1024;
31
+ export function persistedIconValue(value) {
32
+ if (value.kind !== "image")
33
+ return value;
34
+ return {
35
+ version: 1,
36
+ kind: "image",
37
+ assetId: value.assetId,
38
+ authority: value.authority,
39
+ ...(value.alt === undefined ? {} : { alt: value.alt }),
40
+ };
41
+ }
42
+ function choiceLabel(value) {
43
+ return value.kind === "emoji"
44
+ ? value.emoji
45
+ : value.kind === "library"
46
+ ? value.name.replaceAll("-", " ")
47
+ : (value.alt ?? value.assetId);
48
+ }
49
+ function IconGrid({ items, sections, labels, recents, query, selectedKey, resolveImageUrl, onSelect, }) {
50
+ const viewport = React.useRef(null);
51
+ const [scrollTop, setScrollTop] = React.useState(0);
52
+ const [collapsed, setCollapsed] = React.useState(() => new Set(sections.flatMap((section) => [
53
+ ...(section.initiallyCollapsed ? [section.id] : []),
54
+ ...(section.children ?? [])
55
+ .filter((child) => child.initiallyCollapsed)
56
+ .map((child) => child.id),
57
+ ])));
58
+ const normalized = query.trim().toLowerCase();
59
+ const rows = React.useMemo(() => {
60
+ const result = [];
61
+ const addRows = (entries) => {
62
+ if (!entries.length)
63
+ return;
64
+ for (let i = 0; i < entries.length; i += columns)
65
+ result.push({ items: entries.slice(i, i + columns) });
66
+ };
67
+ const addSection = (section, depth = 0) => {
68
+ const entries = items.filter((item) => section.categories.includes(item.category));
69
+ if (!entries.length)
70
+ return;
71
+ result.push({
72
+ id: section.id,
73
+ label: section.label,
74
+ collapsed: collapsed.has(section.id),
75
+ depth,
76
+ });
77
+ if (collapsed.has(section.id))
78
+ return;
79
+ if (section.children) {
80
+ for (const child of section.children)
81
+ addSection(child, depth + 1);
82
+ }
83
+ else
84
+ addRows(entries);
85
+ };
86
+ if (normalized)
87
+ addRows(items.filter((item) => (item.value.kind === "emoji" &&
88
+ item.value.emoji === query.trim()) ||
89
+ normalized
90
+ .split(/\s+/u)
91
+ .every((part) => item.search.includes(part))));
92
+ else {
93
+ if (recents.length) {
94
+ result.push({
95
+ id: "recent",
96
+ label: labels.recents,
97
+ collapsed: collapsed.has("recent"),
98
+ depth: 0,
99
+ });
100
+ if (!collapsed.has("recent"))
101
+ addRows(recents.slice(0, columns).map((value) => ({
102
+ value,
103
+ label: choiceLabel(value),
104
+ category: "recent",
105
+ search: "",
106
+ })));
107
+ }
108
+ for (const section of sections)
109
+ addSection(section);
110
+ }
111
+ return result;
112
+ }, [items, sections, labels, recents, query, normalized, collapsed]);
113
+ React.useEffect(() => {
114
+ viewport.current?.scrollTo({ top: 0 });
115
+ setScrollTop(0);
116
+ }, [normalized]);
117
+ const maxScrollTop = Math.max(0, rows.length * rowHeight - 256);
118
+ const first = Math.max(0, Math.floor(Math.min(scrollTop, maxScrollTop) / rowHeight) - 2);
119
+ const last = Math.min(rows.length, first + 13);
120
+ return (_jsx("div", { ref: viewport, className: "h-64 overflow-y-auto overscroll-contain px-2", onScroll: (event) => setScrollTop(event.currentTarget.scrollTop), children: rows.length === 0 ? (_jsx("p", { className: "py-10 text-center text-sm text-muted-foreground", role: "status", children: labels.noResults })) : (_jsx("div", { className: "relative", style: { height: rows.length * rowHeight }, children: rows.slice(first, last).map((row, index) => (_jsx("div", { className: "absolute inset-x-0", style: { top: (first + index) * rowHeight, height: rowHeight }, children: "label" in row ? (_jsxs("button", { type: "button", "aria-expanded": !row.collapsed, onClick: () => setCollapsed((current) => {
121
+ const next = new Set(current);
122
+ if (next.has(row.id))
123
+ next.delete(row.id);
124
+ else
125
+ next.add(row.id);
126
+ return next;
127
+ }), className: cn("flex h-full w-full items-end gap-1 rounded px-1 pb-1 text-start text-xs font-medium text-muted-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring", row.depth > 0 && "ps-4"), children: [_jsx(IconChevronRight, { "aria-hidden": true, className: cn("size-3.5 shrink-0 transition-transform", !row.collapsed && "rotate-90") }), row.label] })) : (_jsx("div", { className: "grid h-full grid-cols-7 gap-1", children: row.items.map((item) => (_jsx("button", { type: "button", title: item.label, "aria-label": item.label, "aria-pressed": selectedKey === JSON.stringify(item.value), onClick: () => onSelect(item.value), className: cn("flex h-9 min-w-0 items-center justify-center rounded-md hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring", selectedKey === JSON.stringify(item.value) &&
128
+ "bg-accent ring-1 ring-inset ring-ring"), children: _jsx(ResourceIcon, { value: item.value, size: 20, resolveImageUrl: resolveImageUrl }) }, JSON.stringify(item.value)))) })) }, first + index))) })) }));
129
+ }
130
+ export function ResourceIconPicker({ value, onValueChange, labels, recentValues, onRecentsChange, uploadedImages = [], onUpload, onUploadError, resolveImageUrl, disabled, className, contentClassName, portalled, container, open: controlledOpen, onOpenChange, anchored, anchorElement, children, }) {
131
+ const [localRecents, setLocalRecents] = React.useState([]);
132
+ const [internalOpen, setInternalOpen] = React.useState(false);
133
+ const open = controlledOpen ?? internalOpen;
134
+ const changeOpen = (next) => {
135
+ if (controlledOpen === undefined)
136
+ setInternalOpen(next);
137
+ onOpenChange?.(next);
138
+ };
139
+ const [tab, setTab] = React.useState("icons");
140
+ const [query, setQuery] = React.useState("");
141
+ const [category, setCategory] = React.useState("all");
142
+ const [catalog, setCatalog] = React.useState([]);
143
+ const [emoji, setEmoji] = React.useState([]);
144
+ const [loading, setLoading] = React.useState(false);
145
+ const [loadFailed, setLoadFailed] = React.useState(false);
146
+ const [retry, setRetry] = React.useState(0);
147
+ const [uploading, setUploading] = React.useState(false);
148
+ const [saveFailed, setSaveFailed] = React.useState(false);
149
+ const [uploadError, setUploadError] = React.useState();
150
+ const [color, setColor] = React.useState(value?.kind === "library" ? value.color : undefined);
151
+ const fileInput = React.useRef(null);
152
+ const saveQueue = React.useRef(Promise.resolve());
153
+ const effectiveRecents = recentValues ?? localRecents;
154
+ React.useEffect(() => {
155
+ if (!open)
156
+ return;
157
+ setColor(value?.kind === "library" ? value.color : undefined);
158
+ try {
159
+ const parsed = JSON.parse(window.localStorage.getItem("agent-native.resource-icon-recents") ??
160
+ "[]");
161
+ if (Array.isArray(parsed))
162
+ setLocalRecents(parsed
163
+ .filter((entry) => entry &&
164
+ entry.version === 1 &&
165
+ ["emoji", "library", "image"].includes(entry.kind))
166
+ .slice(0, 24)
167
+ .map(persistedIconValue));
168
+ // coercion-ok: recents are optional browser convenience; selection does not depend on storage.
169
+ }
170
+ catch { }
171
+ }, [open]);
172
+ const remember = useResourceIconRecents(effectiveRecents, (next) => {
173
+ if (recentValues === undefined) {
174
+ setLocalRecents(next);
175
+ try {
176
+ window.localStorage.setItem("agent-native.resource-icon-recents", JSON.stringify(next));
177
+ }
178
+ catch {
179
+ // coercion-ok: recents are optional browser convenience; selection does not depend on storage.
180
+ }
181
+ }
182
+ onRecentsChange?.(next);
183
+ });
184
+ React.useEffect(() => {
185
+ if (!open || tab === "upload")
186
+ return;
187
+ let active = true;
188
+ setLoading(true);
189
+ setLoadFailed(false);
190
+ const request = tab === "icons"
191
+ ? loadTablerCatalog().then((entries) => entries.map((entry) => ({
192
+ category: entry.category,
193
+ search: entry.search,
194
+ label: entry.name.replaceAll("-", " "),
195
+ value: {
196
+ version: 1,
197
+ kind: "library",
198
+ library: "tabler",
199
+ name: entry.name.endsWith("-filled")
200
+ ? entry.name.slice(0, -7)
201
+ : entry.name,
202
+ ...(entry.name.endsWith("-filled")
203
+ ? { variant: "filled" }
204
+ : {}),
205
+ },
206
+ })))
207
+ : loadEmojiCatalog().then((entries) => entries.map((entry) => ({
208
+ category: entry.category,
209
+ search: entry.search,
210
+ label: entry.label,
211
+ value: { version: 1, kind: "emoji", emoji: entry.emoji },
212
+ })));
213
+ void request
214
+ .then((entries) => {
215
+ if (active)
216
+ tab === "icons" ? setCatalog(entries) : setEmoji(entries);
217
+ })
218
+ .catch((error) => {
219
+ console.error("Icon catalog could not load", error);
220
+ if (active)
221
+ setLoadFailed(true);
222
+ })
223
+ .finally(() => {
224
+ if (active)
225
+ setLoading(false);
226
+ });
227
+ return () => {
228
+ active = false;
229
+ };
230
+ }, [open, tab, retry]);
231
+ const select = async (next, close = true) => {
232
+ setSaveFailed(false);
233
+ setUploadError(undefined);
234
+ const persisted = next ? persistedIconValue(next) : null;
235
+ try {
236
+ const save = saveQueue.current.then(() => onValueChange(persisted));
237
+ saveQueue.current = save.catch(() => { });
238
+ await save;
239
+ if (persisted)
240
+ remember(persisted);
241
+ if (close)
242
+ changeOpen(false);
243
+ }
244
+ catch (error) {
245
+ console.error("Icon could not be saved", error);
246
+ setSaveFailed(true);
247
+ }
248
+ };
249
+ const upload = async (file) => {
250
+ if (!onUpload)
251
+ return;
252
+ if (file.size > MAX_ICON_UPLOAD_BYTES) {
253
+ setSaveFailed(false);
254
+ setUploadError(labels.uploadTooLarge ?? labels.saveError);
255
+ if (fileInput.current)
256
+ fileInput.current.value = "";
257
+ return;
258
+ }
259
+ setUploading(true);
260
+ setSaveFailed(false);
261
+ setUploadError(undefined);
262
+ try {
263
+ await select(await onUpload(file));
264
+ }
265
+ catch (error) {
266
+ setSaveFailed(true);
267
+ onUploadError?.(error);
268
+ }
269
+ finally {
270
+ setUploading(false);
271
+ if (fileInput.current)
272
+ fileInput.current.value = "";
273
+ }
274
+ };
275
+ const coloredCatalog = React.useMemo(() => catalog.map((item) => ({
276
+ ...item,
277
+ value: item.value.kind === "library" ? { ...item.value, color } : item.value,
278
+ })), [catalog, color]);
279
+ const sections = tab === "icons"
280
+ ? TABLER_ICON_GROUPS.map((group) => ({
281
+ id: group.id,
282
+ label: labels.groupNames?.[group.id] ?? group.label,
283
+ categories: group.categories,
284
+ initiallyCollapsed: category === "all",
285
+ ...(group.id === "more"
286
+ ? {
287
+ children: group.categories.map((sourceCategory) => ({
288
+ id: sourceCategory,
289
+ label: labels.categoryNames?.[sourceCategory] ?? sourceCategory,
290
+ categories: [sourceCategory],
291
+ initiallyCollapsed: true,
292
+ })),
293
+ }
294
+ : {}),
295
+ }))
296
+ : EMOJI_CATEGORIES.map((sourceCategory) => ({
297
+ id: sourceCategory,
298
+ label: labels.categoryNames?.[sourceCategory] ?? sourceCategory,
299
+ categories: [sourceCategory],
300
+ }));
301
+ const uploadChoices = [
302
+ ...uploadedImages,
303
+ ...effectiveRecents.filter((entry) => entry.kind === "image"),
304
+ ].filter((entry, index, all) => all.findIndex((other) => other.assetId === entry.assetId &&
305
+ other.authority === entry.authority) === index);
306
+ return (_jsxs(Popover, { open: open, onOpenChange: (next) => {
307
+ changeOpen(next);
308
+ if (next) {
309
+ setQuery("");
310
+ setSaveFailed(false);
311
+ setUploadError(undefined);
312
+ }
313
+ }, children: [anchored ? (anchorElement ? (_jsx(PopoverAnchor, { virtualRef: { current: anchorElement } })) : null) : (_jsx(PopoverTrigger, { asChild: true, disabled: disabled, children: children ?? (_jsx(Button, { type: "button", variant: "ghost", size: "icon", "aria-label": labels.trigger, children: _jsx(ResourceIcon, { value: value, fallback: _jsx(IconPhotoPlus, {}), resolveImageUrl: resolveImageUrl }) })) })), _jsxs(PopoverContent, { align: "start", collisionPadding: 8, portalled: portalled, container: container, className: cn("max-h-[var(--radix-popover-content-available-height)] w-80 max-w-[calc(100vw-1rem)] overflow-y-auto p-0", className, contentClassName), children: [_jsxs(Tabs, { value: tab, onValueChange: (next) => {
314
+ setTab(next);
315
+ setQuery("");
316
+ setCategory("all");
317
+ setSaveFailed(false);
318
+ setUploadError(undefined);
319
+ }, children: [_jsx("div", { className: "p-2", children: _jsxs(TabsList, { className: "grid w-full grid-cols-3", children: [_jsx(TabsTrigger, { value: "icons", children: labels.iconsTab }), _jsx(TabsTrigger, { value: "emoji", children: labels.emojiTab }), _jsx(TabsTrigger, { value: "upload", children: labels.uploadTab })] }) }), tab !== "upload" && (_jsxs("div", { className: "relative mx-3 mb-2", children: [_jsx(IconSearch, { "aria-hidden": true, className: "pointer-events-none absolute start-2 top-2 size-4 text-muted-foreground" }), _jsx(Input, { value: query, onChange: (event) => setQuery(event.target.value), "aria-label": labels.search, placeholder: labels.search, className: "h-8 ps-8 focus-visible:ring-1" })] })), tab === "icons" && (_jsx("div", { className: "flex items-center justify-between px-3 pb-2", "aria-label": labels.colors, children: colors.map((nextColor) => (_jsx("button", { type: "button", title: nextColor
320
+ ? (labels.colorNames?.[nextColor] ?? nextColor)
321
+ : labels.defaultColor, "aria-label": nextColor
322
+ ? (labels.colorNames?.[nextColor] ?? nextColor)
323
+ : labels.defaultColor, "aria-pressed": color === nextColor, onClick: () => {
324
+ setColor(nextColor);
325
+ if (value?.kind === "library")
326
+ void select({ ...value, color: nextColor }, false);
327
+ }, className: cn("flex size-7 shrink-0 items-center justify-center rounded-md border border-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring", color === nextColor && "border-border bg-accent"), children: _jsx("span", { className: cn("flex size-4 items-center justify-center rounded-full bg-current", nextColor
328
+ ? resourceIconColorClasses[nextColor]
329
+ : "text-foreground"), children: color === nextColor && (_jsx(IconCheck, { className: "size-3 text-background", stroke: 3 })) }) }, nextColor ?? "default"))) })), tab !== "upload" && !query && (_jsx("div", { className: "px-3 pb-2", children: _jsxs(Select, { value: category, onValueChange: setCategory, children: [_jsx(SelectTrigger, { className: "h-7 border-0 px-1 text-xs text-muted-foreground shadow-none", "aria-label": labels.allCategories, children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { className: "z-[320]", container: container, children: _jsxs(SelectGroup, { children: [_jsx(SelectItem, { value: "all", children: labels.allCategories }), sections.map((section) => (_jsx(SelectItem, { value: section.id, children: section.label }, section.id)))] }) })] }) })), tab === "upload" ? (_jsxs("div", { className: "grid gap-3 p-3 pt-1", children: [onUpload && (_jsxs("button", { type: "button", disabled: uploading, className: "flex min-h-28 flex-col items-center justify-center gap-2 rounded-md border border-dashed px-4 py-5 text-sm hover:bg-accent/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50", onClick: () => fileInput.current?.click(), onDragOver: (event) => event.preventDefault(), onDrop: (event) => {
330
+ event.preventDefault();
331
+ const file = event.dataTransfer.files[0];
332
+ if (file && !uploading)
333
+ void upload(file);
334
+ }, children: [_jsx(IconPhotoPlus, { className: "size-6 text-muted-foreground" }), _jsx("span", { children: uploading ? labels.uploading : labels.upload }), labels.uploadHint && (_jsx("span", { className: "text-xs text-muted-foreground", children: labels.uploadHint }))] })), _jsx("input", { ref: fileInput, type: "file", accept: "image/png,image/jpeg,image/webp,image/svg+xml", className: "hidden", disabled: uploading, onChange: (event) => {
335
+ const file = event.target.files?.[0];
336
+ if (file)
337
+ void upload(file);
338
+ } }), uploadChoices.length > 0 && (_jsx("div", { className: "grid grid-cols-7 gap-1", children: uploadChoices.map((entry) => (_jsx("button", { type: "button", title: entry.alt, "aria-label": entry.alt ?? labels.upload, className: "flex size-9 items-center justify-center rounded-md hover:bg-accent", onClick: () => void select(entry), children: _jsx(ResourceIcon, { value: entry, size: 24, resolveImageUrl: resolveImageUrl }) }, `${entry.authority}:${entry.assetId}`))) }))] })) : loadFailed ? (_jsxs("div", { role: "alert", className: "grid h-64 content-center justify-items-center gap-3 px-4 text-sm", children: [_jsx("p", { children: labels.loadError }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => setRetry((current) => current + 1), children: labels.retry })] })) : loading ? (_jsx("div", { "aria-busy": "true", className: "grid h-64 grid-cols-7 content-start gap-2 p-3", children: Array.from({ length: 28 }, (_, index) => (_jsx("div", { className: "size-7 animate-pulse rounded-md bg-muted" }, index))) })) : (_jsx(IconGrid, { items: tab === "icons" ? coloredCatalog : emoji, sections: category === "all" || query
339
+ ? sections
340
+ : sections.filter((section) => section.id === category), labels: labels, recents: category === "all"
341
+ ? effectiveRecents.filter((entry) => entry.kind === (tab === "icons" ? "library" : "emoji"))
342
+ : [], query: query, selectedKey: value ? JSON.stringify(value) : "", resolveImageUrl: resolveImageUrl, onSelect: (next) => void select(next) }, `${tab}:${category}`))] }), (saveFailed || uploadError) && (_jsx("p", { role: "alert", className: "px-3 py-2 text-sm text-destructive", children: uploadError ?? labels.saveError })), value && (_jsx("div", { className: "border-t p-1", children: _jsx(Button, { type: "button", variant: "ghost", className: "h-8 w-full text-xs text-muted-foreground", onClick: () => void select(null), children: labels.remove }) }))] })] }));
343
+ }
344
+ //# sourceMappingURL=ResourceIconPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceIconPicker.js","sourceRoot":"","sources":["../../src/icons/ResourceIconPicker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ComponentType, SVGProps } from "react";
2
+ export type TablerIconComponent = ComponentType<Omit<SVGProps<SVGSVGElement>, "stroke"> & {
3
+ size?: number | string;
4
+ stroke?: number;
5
+ }>;
6
+ export declare const TABLER_ICON_CATEGORIES: readonly ["system", "communication", "document", "media", "design", "development", "devices", "computers", "database", "charts", "arrows", "shapes", "symbols", "text", "letters", "numbers", "math", "logic", "version-control", "extensions", "e-commerce", "currencies", "buildings", "map", "vehicles", "nature", "animals", "weather", "food", "health", "sport", "games", "photography", "mood", "gestures", "gender", "badges", "electrical", "laundry", "zodiac", "brand"];
7
+ export type TablerIconCategory = (typeof TABLER_ICON_CATEGORIES)[number];
8
+ export interface TablerCatalogEntry {
9
+ name: string;
10
+ category: TablerIconCategory;
11
+ search: string;
12
+ }
13
+ export declare function tablerExportName(name: string): string;
14
+ export declare function loadTablerIcon(name: string): Promise<TablerIconComponent | null>;
15
+ export declare function searchTablerIcons(query: string, limit?: number): Promise<string[]>;
16
+ export declare function loadTablerCatalog(): Promise<TablerCatalogEntry[]>;
17
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/icons/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAErD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAC7C,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,GAAG;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CACF,CAAC;AAKF,eAAO,MAAM,sBAAsB,YACjC,QAAQ,EACR,eAAe,EACf,UAAU,EACV,OAAO,EACP,QAAQ,EACR,aAAa,EACb,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,EACT,SAAS,EACT,MAAM,EACN,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,MAAM,EACN,QAAQ,EACR,OAAO,EACP,OAAO,EACP,aAAa,EACb,MAAM,EACN,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,OAAO,CACC,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAkBrC;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnB;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA4CjE"}
@@ -0,0 +1,114 @@
1
+ export const TABLER_ICON_CATEGORIES = [
2
+ "system",
3
+ "communication",
4
+ "document",
5
+ "media",
6
+ "design",
7
+ "development",
8
+ "devices",
9
+ "computers",
10
+ "database",
11
+ "charts",
12
+ "arrows",
13
+ "shapes",
14
+ "symbols",
15
+ "text",
16
+ "letters",
17
+ "numbers",
18
+ "math",
19
+ "logic",
20
+ "version-control",
21
+ "extensions",
22
+ "e-commerce",
23
+ "currencies",
24
+ "buildings",
25
+ "map",
26
+ "vehicles",
27
+ "nature",
28
+ "animals",
29
+ "weather",
30
+ "food",
31
+ "health",
32
+ "sport",
33
+ "games",
34
+ "photography",
35
+ "mood",
36
+ "gestures",
37
+ "gender",
38
+ "badges",
39
+ "electrical",
40
+ "laundry",
41
+ "zodiac",
42
+ "brand",
43
+ ];
44
+ let metadataPromise;
45
+ export function tablerExportName(name) {
46
+ return `Icon${name
47
+ .split("-")
48
+ .filter(Boolean)
49
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
50
+ .join("")}`;
51
+ }
52
+ export async function loadTablerIcon(name) {
53
+ if (import.meta.env.SSR &&
54
+ import.meta.env.MODE !== "test") {
55
+ throw new Error("Tabler icons are available only in the browser");
56
+ }
57
+ const initial = name.charAt(0).toLowerCase();
58
+ const { default: loaders } = await import("./tabler-chunk-loaders.js");
59
+ const loadChunk = loaders[initial];
60
+ if (!loadChunk)
61
+ return null;
62
+ const { default: catalog } = await loadChunk();
63
+ const candidate = catalog[tablerExportName(name)];
64
+ return typeof candidate === "object" || typeof candidate === "function"
65
+ ? candidate
66
+ : null;
67
+ }
68
+ export async function searchTablerIcons(query, limit) {
69
+ const catalog = await loadTablerCatalog();
70
+ const normalized = query.trim().toLowerCase();
71
+ return catalog
72
+ .filter((entry) => entry.search.includes(normalized))
73
+ .map((entry) => entry.name)
74
+ .slice(0, limit);
75
+ }
76
+ export function loadTablerCatalog() {
77
+ if (import.meta.env.SSR &&
78
+ import.meta.env.MODE !== "test") {
79
+ throw new Error("Tabler catalog is available only in the browser");
80
+ }
81
+ metadataPromise ??= import("./tabler-catalog-data.js")
82
+ .then(({ default: metadata }) => {
83
+ return metadata
84
+ .flatMap(([baseName, category, tags, styles]) => {
85
+ if (!TABLER_ICON_CATEGORIES.includes(category)) {
86
+ throw new Error(`Unknown Tabler icon category: ${category}`);
87
+ }
88
+ return styles.split(" ").map((style) => {
89
+ const name = `${baseName}${style === "filled" ? "-filled" : ""}`;
90
+ return {
91
+ name,
92
+ category: category,
93
+ search: [
94
+ name,
95
+ name.replaceAll("-", " "),
96
+ category.replaceAll("-", " "),
97
+ tags,
98
+ ]
99
+ .join(" ")
100
+ .toLowerCase(),
101
+ };
102
+ });
103
+ })
104
+ .sort((left, right) => TABLER_ICON_CATEGORIES.indexOf(left.category) -
105
+ TABLER_ICON_CATEGORIES.indexOf(right.category) ||
106
+ left.name.localeCompare(right.name));
107
+ })
108
+ .catch((error) => {
109
+ metadataPromise = undefined;
110
+ throw error;
111
+ });
112
+ return metadataPromise;
113
+ }
114
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/icons/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=catalog.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.spec.d.ts","sourceRoot":"","sources":["../../src/icons/catalog.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { icons } from "@tabler/icons-react";
2
+ import { describe, expect, it } from "vitest";
3
+ import { loadTablerCatalog, loadTablerIcon, searchTablerIcons, TABLER_ICON_CATEGORIES, tablerExportName, } from "./catalog.js";
4
+ import { TABLER_ICON_GROUPS } from "./tabler-groups.js";
5
+ describe("Tabler catalog", () => {
6
+ it("includes every canonical outline and filled icon once, with a renderable component", async () => {
7
+ const catalog = await loadTablerCatalog();
8
+ expect(catalog.map((entry) => tablerExportName(entry.name)).sort()).toEqual(Object.keys(icons).sort());
9
+ expect(new Set(catalog.map((entry) => entry.name)).size).toBe(catalog.length);
10
+ expect(catalog.length).toBeGreaterThan(6_000);
11
+ const components = await Promise.all(catalog.map((entry) => loadTablerIcon(entry.name)));
12
+ expect(components.every((component) => component !== null)).toBe(true);
13
+ expect(new Set(catalog.map((entry) => entry.category))).toEqual(new Set(TABLER_ICON_CATEGORIES));
14
+ });
15
+ it("does not truncate browsing or broad searches, and searches tags", async () => {
16
+ expect(await searchTablerIcons("")).toHaveLength((await loadTablerCatalog()).length);
17
+ expect((await searchTablerIcons("arrow")).length).toBeGreaterThan(120);
18
+ expect(await searchTablerIcons("arrow", 12)).toHaveLength(12);
19
+ expect(await searchTablerIcons("programming")).toContain("a-b");
20
+ expect(await loadTablerIcon("not-a-real-icon")).toBeNull();
21
+ });
22
+ it("places every source category in exactly one reader-facing group", () => {
23
+ const assigned = TABLER_ICON_GROUPS.flatMap((group) => group.categories);
24
+ expect(assigned).toHaveLength(TABLER_ICON_CATEGORIES.length);
25
+ expect(new Set(assigned)).toEqual(new Set(TABLER_ICON_CATEGORIES));
26
+ expect(new Set(TABLER_ICON_GROUPS.map((group) => group.id)).size).toBe(TABLER_ICON_GROUPS.length);
27
+ });
28
+ });
29
+ //# sourceMappingURL=catalog.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.spec.js","sourceRoot":"","sources":["../../src/icons/catalog.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const EMOJI_CATEGORIES: readonly ["smileys-emotion", "people-body", "animals-nature", "food-drink", "travel-places", "activities", "objects", "symbols", "flags"];
2
+ export type EmojiCategory = (typeof EMOJI_CATEGORIES)[number];
3
+ export interface EmojiCatalogEntry {
4
+ emoji: string;
5
+ label: string;
6
+ search: string;
7
+ category: EmojiCategory;
8
+ order: number;
9
+ skinTone?: number | number[];
10
+ }
11
+ export declare function loadEmojiCatalog(): Promise<EmojiCatalogEntry[]>;
12
+ //# sourceMappingURL=emoji-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji-catalog.d.ts","sourceRoot":"","sources":["../../src/icons/emoji-catalog.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,YAC3B,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,SAAS,EACT,SAAS,EACT,OAAO,CACC,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC9B;AAgBD,wBAAgB,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAgD/D"}