gridsmith-ui 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +969 -0
  2. package/README.md +21 -5
  3. package/dist/charts.d.ts +2 -2
  4. package/dist/charts.js +58 -43
  5. package/dist/charts.js.map +1 -1
  6. package/dist/chat.js +4 -3
  7. package/dist/chat.js.map +1 -1
  8. package/dist/{chunk-W7GCEJEH.js → chunk-2CKSSWYG.js} +10 -6
  9. package/dist/chunk-2CKSSWYG.js.map +1 -0
  10. package/dist/chunk-3BRQRKDO.js +1 -0
  11. package/dist/chunk-3BRQRKDO.js.map +1 -1
  12. package/dist/{chunk-RWKCAKN3.js → chunk-5TUVX4B2.js} +6 -5
  13. package/dist/chunk-5TUVX4B2.js.map +1 -0
  14. package/dist/{chunk-X2HEV7FB.js → chunk-64TXZ4L7.js} +23 -33
  15. package/dist/chunk-64TXZ4L7.js.map +1 -0
  16. package/dist/chunk-7Q46JXSK.js +1 -0
  17. package/dist/chunk-7Q46JXSK.js.map +1 -1
  18. package/dist/chunk-CRQ6KCRD.js +1 -0
  19. package/dist/chunk-CRQ6KCRD.js.map +1 -1
  20. package/dist/{chunk-HZIP4EJI.js → chunk-EKBWWA6P.js} +53 -6
  21. package/dist/chunk-EKBWWA6P.js.map +1 -0
  22. package/dist/chunk-HP7WUZPK.js +1 -0
  23. package/dist/chunk-HP7WUZPK.js.map +1 -1
  24. package/dist/{chunk-QGSCF7PN.js → chunk-IXR4UEF4.js} +5 -4
  25. package/dist/chunk-IXR4UEF4.js.map +1 -0
  26. package/dist/chunk-M2QRNBDQ.js +1 -0
  27. package/dist/chunk-M2QRNBDQ.js.map +1 -1
  28. package/dist/chunk-MD2EFMES.js +1 -0
  29. package/dist/chunk-MD2EFMES.js.map +1 -1
  30. package/dist/chunk-NRHIYS5W.js +1 -0
  31. package/dist/chunk-NRHIYS5W.js.map +1 -1
  32. package/dist/chunk-OTCEJN64.js +1 -0
  33. package/dist/chunk-OTCEJN64.js.map +1 -1
  34. package/dist/chunk-OYNUU346.js +78 -0
  35. package/dist/chunk-OYNUU346.js.map +1 -0
  36. package/dist/{chunk-FHMCAOAH.js → chunk-PO65I3MQ.js} +4 -3
  37. package/dist/chunk-PO65I3MQ.js.map +1 -0
  38. package/dist/chunk-QM4SJKWV.js +1 -0
  39. package/dist/chunk-QM4SJKWV.js.map +1 -1
  40. package/dist/{chunk-3CUKJ4VP.js → chunk-R5NFCEZ3.js} +11 -8
  41. package/dist/chunk-R5NFCEZ3.js.map +1 -0
  42. package/dist/{chunk-2YSEME33.js → chunk-SFY2KMHG.js} +64 -6
  43. package/dist/chunk-SFY2KMHG.js.map +1 -0
  44. package/dist/{chunk-HYMXAIXN.js → chunk-TJEV7YAY.js} +38 -10
  45. package/dist/chunk-TJEV7YAY.js.map +1 -0
  46. package/dist/chunk-WH2FUFAC.js +1 -0
  47. package/dist/chunk-WH2FUFAC.js.map +1 -1
  48. package/dist/chunk-XVB55M3N.js +1 -0
  49. package/dist/chunk-XVB55M3N.js.map +1 -1
  50. package/dist/{chunk-JXANCXK6.js → chunk-ZI3OQDET.js} +19 -4
  51. package/dist/chunk-ZI3OQDET.js.map +1 -0
  52. package/dist/data-grid.d.ts +1 -1
  53. package/dist/data-grid.js +6 -4
  54. package/dist/data-grid.js.map +1 -1
  55. package/dist/editor-mentions.js +3 -2
  56. package/dist/editor-mentions.js.map +1 -1
  57. package/dist/editor.js +4 -3
  58. package/dist/editor.js.map +1 -1
  59. package/dist/{feather-W26ERBQV.js → feather-FNBQ74RR.js} +12 -18
  60. package/dist/feather-FNBQ74RR.js.map +1 -0
  61. package/dist/{heroicons-MY43466C.js → heroicons-DODCSYWD.js} +11 -9
  62. package/dist/heroicons-DODCSYWD.js.map +1 -0
  63. package/dist/icons.d.ts +32 -5
  64. package/dist/icons.js +2 -1
  65. package/dist/icons.js.map +1 -1
  66. package/dist/index.d.ts +469 -67
  67. package/dist/index.js +3017 -1751
  68. package/dist/index.js.map +1 -1
  69. package/dist/kanban.js +5 -5
  70. package/dist/{lucide-CMPVM3PS.js → lucide-ZWE3EPGP.js} +11 -9
  71. package/dist/lucide-ZWE3EPGP.js.map +1 -0
  72. package/dist/{phosphor-RMHZOW2O.js → phosphor-DIHPA4AJ.js} +11 -9
  73. package/dist/phosphor-DIHPA4AJ.js.map +1 -0
  74. package/dist/resizable.js +8 -7
  75. package/dist/resizable.js.map +1 -1
  76. package/dist/roots.css +43 -7
  77. package/dist/{tabler-MJVEYHA5.js → tabler-D3VYTSGI.js} +11 -9
  78. package/dist/tabler-D3VYTSGI.js.map +1 -0
  79. package/dist/tokens.css +17 -8
  80. package/dist/{use-pagination-BnKOnBdz.d.ts → use-pagination-BxcRlNQG.d.ts} +6 -0
  81. package/dist/utils.d.ts +275 -1
  82. package/dist/utils.js +875 -1
  83. package/dist/utils.js.map +1 -1
  84. package/dist/virtualized.d.ts +1 -1
  85. package/dist/virtualized.js +6 -4
  86. package/dist/virtualized.js.map +1 -1
  87. package/dist-static/tokens.css +17 -8
  88. package/package.json +5 -3
  89. package/dist/chunk-2YSEME33.js.map +0 -1
  90. package/dist/chunk-3CUKJ4VP.js.map +0 -1
  91. package/dist/chunk-FHMCAOAH.js.map +0 -1
  92. package/dist/chunk-HYMXAIXN.js.map +0 -1
  93. package/dist/chunk-HZIP4EJI.js.map +0 -1
  94. package/dist/chunk-JXANCXK6.js.map +0 -1
  95. package/dist/chunk-QGSCF7PN.js.map +0 -1
  96. package/dist/chunk-RWKCAKN3.js.map +0 -1
  97. package/dist/chunk-W7GCEJEH.js.map +0 -1
  98. package/dist/chunk-WOVYHFUD.js +0 -50
  99. package/dist/chunk-WOVYHFUD.js.map +0 -1
  100. package/dist/chunk-X2HEV7FB.js.map +0 -1
  101. package/dist/feather-W26ERBQV.js.map +0 -1
  102. package/dist/heroicons-MY43466C.js.map +0 -1
  103. package/dist/lucide-CMPVM3PS.js.map +0 -1
  104. package/dist/phosphor-RMHZOW2O.js.map +0 -1
  105. package/dist/tabler-MJVEYHA5.js.map +0 -1
@@ -1,50 +0,0 @@
1
- import { tabStops } from './chunk-JXANCXK6.js';
2
- import { useEffect } from 'react';
3
-
4
- function useKeyboardScroll(el, label, enabled = true, nameFromHeading = false) {
5
- useEffect(() => {
6
- if (!enabled || !el || typeof ResizeObserver === "undefined") return;
7
- const name = () => {
8
- const heading = nameFromHeading ? el.querySelector("h1, h2, h3, h4, h5, h6")?.textContent?.trim() : "";
9
- return heading || label;
10
- };
11
- const set = (on) => {
12
- if (on === el.hasAttribute("data-scroll-stop")) {
13
- if (on && el.getAttribute("aria-label") !== name()) el.setAttribute("aria-label", name());
14
- return;
15
- }
16
- if (on) {
17
- el.setAttribute("data-scroll-stop", "");
18
- el.tabIndex = 0;
19
- el.setAttribute("role", "region");
20
- el.setAttribute("aria-label", name());
21
- } else {
22
- el.removeAttribute("data-scroll-stop");
23
- el.removeAttribute("tabindex");
24
- el.removeAttribute("role");
25
- el.removeAttribute("aria-label");
26
- }
27
- };
28
- const update = () => {
29
- const scrolls = el.scrollHeight > el.clientHeight + 1 && tabStops(el).length === 0;
30
- set(scrolls || el.hasAttribute("data-scroll-stop") && document.activeElement === el);
31
- };
32
- update();
33
- const ro = new ResizeObserver(update);
34
- ro.observe(el);
35
- const mo = typeof MutationObserver === "undefined" ? null : new MutationObserver(update);
36
- mo?.observe(el, { childList: true, subtree: true, characterData: true });
37
- el.addEventListener("focusout", update);
38
- return () => {
39
- ro.disconnect();
40
- mo?.disconnect();
41
- el.removeEventListener("focusout", update);
42
- set(false);
43
- };
44
- }, [el, label, enabled, nameFromHeading]);
45
- }
46
- var FOCUS_INSET = "outline-none focus-visible:shadow-[inset_0_0_0_2px_var(--ds-border-focus)]";
47
-
48
- export { FOCUS_INSET, useKeyboardScroll };
49
- //# sourceMappingURL=chunk-WOVYHFUD.js.map
50
- //# sourceMappingURL=chunk-WOVYHFUD.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../showcase/src/lib/use-keyboard-scroll.ts"],"names":[],"mappings":";;;AAaO,SAAS,kBAAkB,EAAA,EAAwB,KAAA,EAAe,OAAA,GAAU,IAAA,EAAM,kBAAkB,KAAA,EAAa;AACtH,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,EAAA,IAAM,OAAO,mBAAmB,WAAA,EAAa;AAC9D,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,MAAM,OAAA,GAAU,kBAAkB,EAAA,CAAG,aAAA,CAAc,wBAAwB,CAAA,EAAG,WAAA,EAAa,MAAK,GAAI,EAAA;AACpG,MAAA,OAAO,OAAA,IAAW,KAAA;AAAA,IACpB,CAAA;AACA,IAAA,MAAM,GAAA,GAAM,CAAC,EAAA,KAAgB;AAC3B,MAAA,IAAI,EAAA,KAAO,EAAA,CAAG,YAAA,CAAa,kBAAkB,CAAA,EAAG;AAC9C,QAAA,IAAI,EAAA,IAAM,EAAA,CAAG,YAAA,CAAa,YAAY,CAAA,KAAM,IAAA,EAAK,EAAG,EAAA,CAAG,YAAA,CAAa,YAAA,EAAc,IAAA,EAAM,CAAA;AACxF,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,EAAA,CAAG,YAAA,CAAa,oBAAoB,EAAE,CAAA;AACtC,QAAA,EAAA,CAAG,QAAA,GAAW,CAAA;AACd,QAAA,EAAA,CAAG,YAAA,CAAa,QAAQ,QAAQ,CAAA;AAChC,QAAA,EAAA,CAAG,YAAA,CAAa,YAAA,EAAc,IAAA,EAAM,CAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,EAAA,CAAG,gBAAgB,kBAAkB,CAAA;AACrC,QAAA,EAAA,CAAG,gBAAgB,UAAU,CAAA;AAC7B,QAAA,EAAA,CAAG,gBAAgB,MAAM,CAAA;AACzB,QAAA,EAAA,CAAG,gBAAgB,YAAY,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AACA,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,MAAM,OAAA,GAAU,GAAG,YAAA,GAAe,EAAA,CAAG,eAAe,CAAA,IAAK,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,KAAW,CAAA;AACjF,MAAA,GAAA,CAAI,WAAY,EAAA,CAAG,YAAA,CAAa,kBAAkB,CAAA,IAAK,QAAA,CAAS,kBAAkB,EAAG,CAAA;AAAA,IACvF,CAAA;AACA,IAAA,MAAA,EAAO;AACP,IAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,MAAM,CAAA;AACpC,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AACb,IAAA,MAAM,KAAK,OAAO,gBAAA,KAAqB,cAAc,IAAA,GAAO,IAAI,iBAAiB,MAAM,CAAA;AACvF,IAAA,EAAA,EAAI,OAAA,CAAQ,IAAI,EAAE,SAAA,EAAW,MAAM,OAAA,EAAS,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,CAAA;AAEvE,IAAA,EAAA,CAAG,gBAAA,CAAiB,YAAY,MAAM,CAAA;AACtC,IAAA,OAAO,MAAM;AACX,MAAA,EAAA,CAAG,UAAA,EAAW;AACd,MAAA,EAAA,EAAI,UAAA,EAAW;AACf,MAAA,EAAA,CAAG,mBAAA,CAAoB,YAAY,MAAM,CAAA;AACzC,MAAA,GAAA,CAAI,KAAK,CAAA;AAAA,IACX,CAAA;AAAA,EACF,GAAG,CAAC,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,eAAe,CAAC,CAAA;AAC1C;AAGO,IAAM,WAAA,GAAc","file":"chunk-WOVYHFUD.js","sourcesContent":["import { useEffect } from \"react\";\nimport { tabStops } from \"./focus\";\n\n/**\n * WCAG 2.1.1: a region that scrolls, with nothing inside it to Tab to, is a Tab stop of its own, named, so a keyboard\n * can scroll it (Chrome makes such a scroller focusable by itself; Safari doesn't). Sprint 25.16 A42: what fills the\n * page scrolls inside itself, so a board's column or a split view's pane can be such a region. It stops being one when\n * it no longer scrolls or something inside it takes focus — but while it has focus it stays one, until focus leaves it,\n * so a resize that makes it fit never drops the focus to the page (as Table's scroll region does; the review of\n * 1 October). Give the element a visible focus style (FOCUS_INSET). Pass the element itself (a callback ref's), so a\n * pane drawn later (a detail that opens) is read when it appears. With `nameFromHeading`, the region takes its first\n * heading's words as its name (an item's view: its title), and `label` only when it has none.\n */\nexport function useKeyboardScroll(el: HTMLElement | null, label: string, enabled = true, nameFromHeading = false): void {\n useEffect(() => {\n if (!enabled || !el || typeof ResizeObserver === \"undefined\") return;\n const name = () => {\n const heading = nameFromHeading ? el.querySelector(\"h1, h2, h3, h4, h5, h6\")?.textContent?.trim() : \"\";\n return heading || label;\n };\n const set = (on: boolean) => {\n if (on === el.hasAttribute(\"data-scroll-stop\")) {\n if (on && el.getAttribute(\"aria-label\") !== name()) el.setAttribute(\"aria-label\", name());\n return;\n }\n if (on) {\n el.setAttribute(\"data-scroll-stop\", \"\");\n el.tabIndex = 0;\n el.setAttribute(\"role\", \"region\");\n el.setAttribute(\"aria-label\", name());\n } else {\n el.removeAttribute(\"data-scroll-stop\");\n el.removeAttribute(\"tabindex\");\n el.removeAttribute(\"role\");\n el.removeAttribute(\"aria-label\");\n }\n };\n const update = () => {\n const scrolls = el.scrollHeight > el.clientHeight + 1 && tabStops(el).length === 0;\n set(scrolls || (el.hasAttribute(\"data-scroll-stop\") && document.activeElement === el));\n };\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n const mo = typeof MutationObserver === \"undefined\" ? null : new MutationObserver(update);\n mo?.observe(el, { childList: true, subtree: true, characterData: true });\n // focus leaving a stop that no longer scrolls ends it\n el.addEventListener(\"focusout\", update);\n return () => {\n ro.disconnect();\n mo?.disconnect();\n el.removeEventListener(\"focusout\", update);\n set(false);\n };\n }, [el, label, enabled, nameFromHeading]);\n}\n\n/** The focus style for such a region: the theme's ring, drawn inside its edge so a neighbour can't hide it. */\nexport const FOCUS_INSET = \"outline-none focus-visible:shadow-[inset_0_0_0_2px_var(--ds-border-focus)]\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../showcase/src/components/Skeleton.tsx","../../../showcase/src/lib/format-locale.ts","../../../showcase/src/lib/title-text.ts"],"names":[],"mappings":"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","file":"chunk-X2HEV7FB.js","sourcesContent":["import { cn } from \"../lib/utils\";\n\ninterface SkeletonProps {\n variant?: \"text\" | \"avatar\" | \"card\" | \"table-row\" | \"custom\";\n lines?: number;\n width?: string;\n height?: string;\n className?: string;\n}\n\nfunction Bone({ className, style, \"data-gs\": marker }: { className?: string; style?: React.CSSProperties; \"data-gs\"?: string }) {\n return (\n <div\n data-gs={marker}\n className={cn(\"rounded-[var(--ds-radius-sm)] bg-[var(--ds-bg-emphasis)] animate-pulse\", className)}\n style={style}\n />\n );\n}\n\nexport function Skeleton({ variant = \"text\", lines = 3, width, height, className }: SkeletonProps) {\n if (variant === \"custom\") {\n return <Bone data-gs=\"skeleton\" className={className} style={{ width, height }} />;\n }\n\n if (variant === \"avatar\") {\n return <Bone data-gs=\"skeleton\" className={cn(\"h-10 w-10 rounded-[var(--ds-radius-full)]\", className)} />;\n }\n\n if (variant === \"card\") {\n return (\n <div data-gs=\"skeleton\" className={cn(\"space-y-ds-3\", className)}>\n <Bone className=\"h-32 w-full rounded-[var(--ds-radius-md)]\" />\n <Bone className=\"h-4 w-3/4\" />\n <Bone className=\"h-4 w-1/2\" />\n </div>\n );\n }\n\n if (variant === \"table-row\") {\n return (\n <div data-gs=\"skeleton\" className={cn(\"flex gap-ds-4\", className)}>\n <Bone className=\"h-4 flex-[3]\" />\n <Bone className=\"h-4 flex-[2]\" />\n <Bone className=\"h-4 flex-1\" />\n <Bone className=\"h-4 flex-1\" />\n </div>\n );\n }\n\n // text variant\n const widths = [\"w-3/4\", \"w-1/2\", \"w-5/6\", \"w-2/3\", \"w-4/5\"];\n return (\n <div data-gs=\"skeleton\" className={cn(\"space-y-ds-3\", className)}>\n {Array.from({ length: lines }, (_, i) => (\n <Bone key={i} className={cn(\"h-4\", widths[i % widths.length])} />\n ))}\n </div>\n );\n}\n","/** The last page language and visitor's languages read, and the locale they gave: formatting runs often, they change rarely. */\nlet last: { key: string; locale: string | undefined } | null = null;\n\n/**\n * The locale the library writes dates, times and numbers in: the app's language, the page's `lang`, in the visitor's own\n * formats where they speak it (Sprint 25.17, the owner's decision of 2 October). An English page shows \"5 minutes ago\"\n * and \"250K\" to a visitor whose browser is Japanese, where it showed \"5 分前\" and \"25万\" in a page of English (WCAG 3.1.2:\n * text in the page's language needs no `lang` of its own), and a British visitor to it keeps \"1 Oct 2026\". The visitor's\n * form counts only in the page's script: a page in traditional Chinese stays traditional for a visitor who reads\n * simplified. A page with no `lang` is written in the browser's language, as before; so is anything drawn on a server,\n * where there is no page yet.\n */\nexport function formatLocale(): string | undefined {\n if (typeof document === \"undefined\") return undefined;\n const page = document.documentElement.lang?.trim();\n if (!page) return undefined;\n const spoken = typeof navigator === \"undefined\" ? [] : navigator.languages?.length ? navigator.languages : [navigator.language];\n const key = `${page}|${spoken.join(\",\")}`;\n if (last?.key !== key) last = { key, locale: choose(page, spoken) };\n return last.locale;\n}\n\n/** The language and script a tag is written in: \"en\" and \"en-GB\" are both \"en-Latn\"; \"zh-TW\" is \"zh-Hant\", \"zh-CN\" \"zh-Hans\". */\nfunction writtenIn(tag: string): string | null {\n try {\n const locale = new Intl.Locale(tag).maximize();\n return `${locale.language}-${locale.script ?? \"\"}`;\n } catch {\n return null;\n }\n}\n\nfunction choose(page: string, spoken: readonly string[]): string | undefined {\n const language = writtenIn(page);\n // a tag Intl can't read: the browser's language\n if (language === null) return undefined;\n // the visitor's own form of the page's language (\"en-GB\" for an \"en\" page), wherever it is in their list; else the page's\n const own = spoken.find((tag) => typeof tag === \"string\" && writtenIn(tag) === language);\n try {\n return Intl.getCanonicalLocales(own ?? page)[0];\n } catch {\n return undefined;\n }\n}\n","/**\n * A title's text classes: CardTitle's, which a titled Table's band and a ChartContainer's title share (Sprint 25.9, A1),\n * one definition so they cannot drift. A word or a name longer than its line breaks at the line's edge (round 27,\n * R27-16: run 70's \"primary-logo-navy.svg\" ran out of its card); break-word, not anywhere, so a title's words still\n * set its minimum and the actions beside it wrap under it before a word is broken (HEADER_LAYOUT.floor).\n */\nexport const TITLE_TEXT = \"font-[family-name:var(--ds-font-display)] text-lg font-[var(--ds-weight-heading)] text-[var(--ds-text-primary)] break-words\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../showcase/src/lib/icon-packs/feather.ts"],"names":[],"mappings":"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","file":"feather-W26ERBQV.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap, pickCurated } from './utils'\n\n/**\n * Feather (react-icons) icons.\n *\n * The pack is reached only through the dynamic import in peer() — never a\n * static named import. A static import of an optional peer makes a consumer's\n * production build fail on Vite 8 when the peer is not installed: Vite\n * substitutes an export-less stub and the bundler treats every missing name as\n * fatal (Sprint 22 bench finding 1, 13 Sep 2026; showcase/src/test/\n * vite8-optional-peers-build.test.ts guards it). The curated names are strings\n * for the same reason; icon-completeness.test.tsx proves every one resolves in\n * the installed pack. If the pack is missing, peer() rejects and loadPack in\n * icons.tsx reports which package to install.\n */\nconst CURATED: Record<string, string> = {\n \"home\": \"FiHome\",\n \"folder\": \"FiFolder\",\n \"chart\": \"FiBarChart2\",\n \"settings\": \"FiSettings\",\n \"chevron-right\": \"FiChevronRight\",\n \"close\": \"FiX\",\n \"plus\": \"FiPlus\",\n \"search\": \"FiSearch\",\n \"bell\": \"FiBell\",\n \"user\": \"FiUser\",\n \"check\": \"FiCheck\",\n \"warning\": \"FiAlertTriangle\",\n \"info\": \"FiInfo\",\n \"error\": \"FiAlertCircle\",\n \"clock\": \"FiClock\",\n \"calendar\": \"FiCalendar\",\n \"bold\": \"FiBold\",\n \"italic\": \"FiItalic\",\n \"underline\": \"FiUnderline\",\n \"strikethrough\": \"FiSlash\",\n \"align-left\": \"FiAlignLeft\",\n \"align-center\": \"FiAlignCenter\",\n \"align-right\": \"FiAlignRight\",\n \"list\": \"FiList\",\n \"list-ordered\": \"FiList\",\n \"list-checks\": \"FiCheckSquare\",\n \"link\": \"FiLink\",\n \"image\": \"FiImage\",\n \"table\": \"FiGrid\",\n \"code\": \"FiCode\",\n \"quote\": \"FiMessageSquare\",\n \"minus\": \"FiMinus\",\n \"superscript\": \"FiChevronUp\",\n \"subscript\": \"FiChevronDown\",\n \"highlight\": \"FiEdit2\",\n \"type\": \"FiType\",\n \"chevron-up\": \"FiChevronUp\",\n \"chevron-down\": \"FiChevronDown\",\n \"chevron-left\": \"FiChevronLeft\",\n \"trash\": \"FiTrash2\",\n \"undo\": \"FiRotateCcw\",\n \"redo\": \"FiRotateCw\",\n \"arrow-left\": \"FiArrowLeft\",\n \"grip-vertical\": \"FiMoreVertical\",\n \"mic\": \"FiMic\",\n \"paperclip\": \"FiPaperclip\",\n \"send\": \"FiSend\",\n \"log-out\": \"FiLogOut\",\n \"edit\": \"FiEdit2\",\n \"menu\": \"FiMenu\",\n \"more-horizontal\": \"FiMoreHorizontal\",\n \"star\": \"FiStar\",\n \"bookmark\": \"FiBookmark\",\n \"download\": \"FiDownload\",\n \"upload\": \"FiUpload\",\n \"sparkles\": \"FiStar\",\n \"file\": \"FiFile\",\n \"file-text\": \"FiFileText\",\n \"eye\": \"FiEye\",\n \"eye-off\": \"FiEyeOff\",\n \"copy\": \"FiCopy\",\n \"external-link\": \"FiExternalLink\",\n \"filter\": \"FiFilter\",\n \"lock\": \"FiLock\",\n}\n\nasync function peer(): Promise<Record<string, unknown>> {\n return (await import(\"react-icons/fi\")) as unknown as Record<string, unknown>\n}\n\nexport async function loadCurated(): Promise<IconMap> {\n return pickCurated(await peer(), CURATED)\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const mod = await peer()\n const extended = buildExtendedMap(mod, {}, { stripPrefix: \"Fi\" })\n Object.assign(extended, pickCurated(mod, CURATED))\n return extended\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../showcase/src/lib/icon-packs/heroicons.ts"],"names":["TypeGlyph"],"mappings":"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","file":"heroicons-MY43466C.js","sourcesContent":["import { createElement, forwardRef } from 'react'\nimport type { IconMap } from './types'\nimport { buildExtendedMap, pickCurated } from './utils'\n\n/**\n * Heroicons icons.\n *\n * The pack is reached only through the dynamic import in peer() — never a\n * static named import. A static import of an optional peer makes a consumer's\n * production build fail on Vite 8 when the peer is not installed: Vite\n * substitutes an export-less stub and the bundler treats every missing name as\n * fatal (Sprint 22 bench finding 1, 13 Sep 2026; showcase/src/test/\n * vite8-optional-peers-build.test.ts guards it). The curated names are strings\n * for the same reason; icon-completeness.test.tsx proves every one resolves in\n * the installed pack. If the pack is missing, peer() rejects and loadPack in\n * icons.tsx reports which package to install.\n */\nconst CURATED: Record<string, string> = {\n \"home\": \"HomeIcon\",\n \"folder\": \"FolderIcon\",\n \"chart\": \"ChartBarIcon\",\n \"settings\": \"Cog6ToothIcon\",\n \"chevron-right\": \"ChevronRightIcon\",\n \"close\": \"XMarkIcon\",\n \"plus\": \"PlusIcon\",\n \"search\": \"MagnifyingGlassIcon\",\n \"bell\": \"BellIcon\",\n \"user\": \"UserIcon\",\n \"check\": \"CheckIcon\",\n \"warning\": \"ExclamationTriangleIcon\",\n \"info\": \"InformationCircleIcon\",\n \"error\": \"ExclamationCircleIcon\",\n \"clock\": \"ClockIcon\",\n \"calendar\": \"CalendarDaysIcon\",\n \"bold\": \"BoldIcon\",\n \"italic\": \"ItalicIcon\",\n \"underline\": \"UnderlineIcon\",\n \"strikethrough\": \"StrikethroughIcon\",\n \"align-left\": \"Bars3BottomLeftIcon\",\n \"align-center\": \"Bars3Icon\",\n \"align-right\": \"Bars3BottomRightIcon\",\n \"list\": \"ListBulletIcon\",\n \"list-ordered\": \"NumberedListIcon\",\n \"list-checks\": \"ClipboardDocumentCheckIcon\",\n \"link\": \"LinkIcon\",\n \"image\": \"PhotoIcon\",\n \"table\": \"TableCellsIcon\",\n \"code\": \"CodeBracketIcon\",\n \"quote\": \"ChatBubbleBottomCenterTextIcon\",\n \"minus\": \"MinusIcon\",\n \"superscript\": \"H1Icon\",\n \"subscript\": \"H2Icon\",\n \"highlight\": \"PaintBrushIcon\",\n \"chevron-up\": \"ChevronUpIcon\",\n \"chevron-down\": \"ChevronDownIcon\",\n \"chevron-left\": \"ChevronLeftIcon\",\n \"trash\": \"TrashIcon\",\n \"undo\": \"ArrowUturnLeftIcon\",\n \"redo\": \"ArrowUturnRightIcon\",\n \"arrow-left\": \"ArrowLeftIcon\",\n \"grip-vertical\": \"Bars2Icon\",\n \"mic\": \"MicrophoneIcon\",\n \"paperclip\": \"PaperClipIcon\",\n \"send\": \"PaperAirplaneIcon\",\n \"log-out\": \"ArrowRightStartOnRectangleIcon\",\n \"edit\": \"PencilIcon\",\n \"menu\": \"Bars3Icon\",\n \"more-horizontal\": \"EllipsisHorizontalIcon\",\n \"star\": \"StarIcon\",\n \"bookmark\": \"BookmarkIcon\",\n \"download\": \"ArrowDownTrayIcon\",\n \"upload\": \"ArrowUpTrayIcon\",\n \"sparkles\": \"SparklesIcon\",\n \"file\": \"DocumentIcon\",\n \"file-text\": \"DocumentTextIcon\",\n \"eye\": \"EyeIcon\",\n \"eye-off\": \"EyeSlashIcon\",\n \"copy\": \"DocumentDuplicateIcon\",\n \"external-link\": \"ArrowTopRightOnSquareIcon\",\n \"filter\": \"FunnelIcon\",\n \"lock\": \"LockClosedIcon\",\n}\n\n/**\n * Heroicons draws no letter T, and its LanguageIcon (文A, translate) meant the wrong thing beside a document (round 28,\n * R28-35). So `type` is a T drawn in the pack's own outline style: a 24 px box, a 1.5 stroke that the theme's weight\n * overrides, round ends.\n */\nconst TypeGlyph = forwardRef<SVGSVGElement, Record<string, unknown>>(function TypeGlyph(props, ref) {\n return createElement('svg', { ref, xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 24 24', strokeWidth: 1.5, stroke: 'currentColor', 'aria-hidden': true, 'data-slot': 'icon', ...props },\n createElement('path', { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M4.5 7.5v-3h15v3M12 4.5v15M9 19.5h6' }))\n})\n\nasync function peer(): Promise<Record<string, unknown>> {\n return (await import(\"@heroicons/react/24/outline\")) as unknown as Record<string, unknown>\n}\n\nexport async function loadCurated(): Promise<IconMap> {\n return { ...pickCurated(await peer(), CURATED), type: TypeGlyph }\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const mod = await peer()\n const extended = buildExtendedMap(mod, {}, { stripSuffix: \"Icon\" })\n Object.assign(extended, pickCurated(mod, CURATED), { type: TypeGlyph })\n return extended\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../showcase/src/lib/icon-packs/lucide.ts"],"names":[],"mappings":"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","file":"lucide-CMPVM3PS.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap, pickCurated } from './utils'\n\n/**\n * Lucide icons.\n *\n * The pack is reached only through the dynamic import in peer() — never a\n * static named import. A static import of an optional peer makes a consumer's\n * production build fail on Vite 8 when the peer is not installed: Vite\n * substitutes an export-less stub and the bundler treats every missing name as\n * fatal (Sprint 22 bench finding 1, 13 Sep 2026; showcase/src/test/\n * vite8-optional-peers-build.test.ts guards it). The curated names are strings\n * for the same reason; icon-completeness.test.tsx proves every one resolves in\n * the installed pack. If the pack is missing, peer() rejects and loadPack in\n * icons.tsx reports which package to install.\n */\nconst CURATED: Record<string, string> = {\n \"home\": \"Home\",\n \"folder\": \"FolderKanban\",\n \"chart\": \"BarChart3\",\n \"settings\": \"Settings\",\n \"chevron-right\": \"ChevronRight\",\n \"close\": \"X\",\n \"plus\": \"Plus\",\n \"search\": \"Search\",\n \"bell\": \"Bell\",\n \"user\": \"User\",\n \"check\": \"Check\",\n \"warning\": \"AlertTriangle\",\n \"info\": \"Info\",\n \"error\": \"AlertCircle\",\n \"clock\": \"Clock\",\n \"calendar\": \"CalendarDays\",\n \"bold\": \"Bold\",\n \"italic\": \"Italic\",\n \"underline\": \"Underline\",\n \"strikethrough\": \"Strikethrough\",\n \"align-left\": \"AlignLeft\",\n \"align-center\": \"AlignCenter\",\n \"align-right\": \"AlignRight\",\n \"list\": \"List\",\n \"list-ordered\": \"ListOrdered\",\n \"list-checks\": \"ListChecks\",\n \"link\": \"Link\",\n \"image\": \"Image\",\n \"table\": \"Table\",\n \"code\": \"Code\",\n \"quote\": \"Quote\",\n \"minus\": \"Minus\",\n \"superscript\": \"Superscript\",\n \"subscript\": \"Subscript\",\n \"highlight\": \"Highlighter\",\n \"type\": \"Type\",\n \"chevron-up\": \"ChevronUp\",\n \"chevron-down\": \"ChevronDown\",\n \"chevron-left\": \"ChevronLeft\",\n \"trash\": \"Trash2\",\n \"undo\": \"Undo2\",\n \"redo\": \"Redo2\",\n \"arrow-left\": \"ArrowLeft\",\n \"grip-vertical\": \"GripVertical\",\n \"mic\": \"Mic\",\n \"paperclip\": \"Paperclip\",\n \"send\": \"Send\",\n \"log-out\": \"LogOut\",\n \"edit\": \"Pencil\",\n \"menu\": \"Menu\",\n \"more-horizontal\": \"MoreHorizontal\",\n \"star\": \"Star\",\n \"bookmark\": \"Bookmark\",\n \"download\": \"Download\",\n \"upload\": \"Upload\",\n \"sparkles\": \"Sparkles\",\n \"file\": \"File\",\n \"file-text\": \"FileText\",\n \"eye\": \"Eye\",\n \"eye-off\": \"EyeOff\",\n \"copy\": \"Copy\",\n \"external-link\": \"ExternalLink\",\n \"filter\": \"Funnel\",\n \"lock\": \"Lock\",\n}\n\nasync function peer(): Promise<Record<string, unknown>> {\n return (await import(\"lucide-react\")) as unknown as Record<string, unknown>\n}\n\nexport async function loadCurated(): Promise<IconMap> {\n return pickCurated(await peer(), CURATED)\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const mod = await peer()\n const extended = buildExtendedMap(mod, {})\n Object.assign(extended, pickCurated(mod, CURATED))\n return extended\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../showcase/src/lib/icon-packs/phosphor.ts"],"names":[],"mappings":"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","file":"phosphor-RMHZOW2O.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap, pickCurated } from './utils'\n\n/**\n * Phosphor icons.\n *\n * The pack is reached only through the dynamic import in peer() — never a\n * static named import. A static import of an optional peer makes a consumer's\n * production build fail on Vite 8 when the peer is not installed: Vite\n * substitutes an export-less stub and the bundler treats every missing name as\n * fatal (Sprint 22 bench finding 1, 13 Sep 2026; showcase/src/test/\n * vite8-optional-peers-build.test.ts guards it). The curated names are strings\n * for the same reason; icon-completeness.test.tsx proves every one resolves in\n * the installed pack. If the pack is missing, peer() rejects and loadPack in\n * icons.tsx reports which package to install.\n */\nconst CURATED: Record<string, string> = {\n \"home\": \"House\",\n \"folder\": \"FolderSimple\",\n \"chart\": \"ChartBar\",\n \"settings\": \"Gear\",\n \"chevron-right\": \"CaretRight\",\n \"close\": \"X\",\n \"plus\": \"Plus\",\n \"search\": \"MagnifyingGlass\",\n \"bell\": \"Bell\",\n \"user\": \"User\",\n \"check\": \"Check\",\n \"warning\": \"Warning\",\n \"info\": \"Info\",\n \"error\": \"WarningCircle\",\n \"clock\": \"Clock\",\n \"calendar\": \"CalendarBlank\",\n \"bold\": \"TextB\",\n \"italic\": \"TextItalic\",\n \"underline\": \"TextUnderline\",\n \"strikethrough\": \"TextStrikethrough\",\n \"align-left\": \"TextAlignLeft\",\n \"align-center\": \"TextAlignCenter\",\n \"align-right\": \"TextAlignRight\",\n \"list\": \"ListBullets\",\n \"list-ordered\": \"ListNumbers\",\n \"list-checks\": \"ListChecks\",\n \"link\": \"Link\",\n \"image\": \"Image\",\n \"table\": \"Table\",\n \"code\": \"Code\",\n \"quote\": \"Quotes\",\n \"minus\": \"Minus\",\n \"superscript\": \"TextSuperscript\",\n \"subscript\": \"TextSubscript\",\n \"highlight\": \"Highlighter\",\n \"type\": \"TextT\",\n \"chevron-up\": \"CaretUp\",\n \"chevron-down\": \"CaretDown\",\n \"chevron-left\": \"CaretLeft\",\n \"trash\": \"Trash\",\n \"undo\": \"ArrowCounterClockwise\",\n \"redo\": \"ArrowClockwise\",\n \"arrow-left\": \"ArrowLeft\",\n \"grip-vertical\": \"DotsSixVertical\",\n \"mic\": \"Microphone\",\n \"paperclip\": \"Paperclip\",\n \"send\": \"PaperPlaneTilt\",\n \"log-out\": \"SignOut\",\n \"edit\": \"PencilSimple\",\n \"menu\": \"List\",\n \"more-horizontal\": \"DotsThree\",\n \"star\": \"Star\",\n \"bookmark\": \"BookmarkSimple\",\n \"download\": \"DownloadSimple\",\n \"upload\": \"UploadSimple\",\n \"sparkles\": \"Sparkle\",\n \"file\": \"File\",\n \"file-text\": \"FileText\",\n \"eye\": \"Eye\",\n \"eye-off\": \"EyeSlash\",\n \"copy\": \"Copy\",\n \"external-link\": \"ArrowSquareOut\",\n \"filter\": \"Funnel\",\n \"lock\": \"Lock\",\n}\n\nasync function peer(): Promise<Record<string, unknown>> {\n return (await import(\"@phosphor-icons/react\")) as unknown as Record<string, unknown>\n}\n\nexport async function loadCurated(): Promise<IconMap> {\n return pickCurated(await peer(), CURATED)\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const mod = await peer()\n const extended = buildExtendedMap(mod, {})\n Object.assign(extended, pickCurated(mod, CURATED))\n return extended\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../showcase/src/lib/icon-packs/tabler.ts"],"names":[],"mappings":";;;AAgBA,IAAM,OAAA,GAAkC;AAAA,EACtC,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA,EAAU,YAAA;AAAA,EACV,OAAA,EAAS,cAAA;AAAA,EACT,UAAA,EAAY,cAAA;AAAA,EACZ,eAAA,EAAiB,kBAAA;AAAA,EACjB,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA,EAAU,YAAA;AAAA,EACV,MAAA,EAAQ,UAAA;AAAA,EACR,MAAA,EAAQ,UAAA;AAAA,EACR,OAAA,EAAS,WAAA;AAAA,EACT,SAAA,EAAW,mBAAA;AAAA,EACX,MAAA,EAAQ,gBAAA;AAAA,EACR,OAAA,EAAS,iBAAA;AAAA,EACT,OAAA,EAAS,WAAA;AAAA,EACT,UAAA,EAAY,cAAA;AAAA,EACZ,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA,EAAU,YAAA;AAAA,EACV,WAAA,EAAa,eAAA;AAAA,EACb,eAAA,EAAiB,mBAAA;AAAA,EACjB,YAAA,EAAc,eAAA;AAAA,EACd,cAAA,EAAgB,iBAAA;AAAA,EAChB,aAAA,EAAe,gBAAA;AAAA,EACf,MAAA,EAAQ,UAAA;AAAA,EACR,cAAA,EAAgB,iBAAA;AAAA,EAChB,aAAA,EAAe,eAAA;AAAA,EACf,MAAA,EAAQ,UAAA;AAAA,EACR,OAAA,EAAS,WAAA;AAAA,EACT,OAAA,EAAS,WAAA;AAAA,EACT,MAAA,EAAQ,UAAA;AAAA,EACR,OAAA,EAAS,WAAA;AAAA,EACT,OAAA,EAAS,WAAA;AAAA,EACT,aAAA,EAAe,iBAAA;AAAA,EACf,WAAA,EAAa,eAAA;AAAA,EACb,WAAA,EAAa,eAAA;AAAA,EACb,MAAA,EAAQ,gBAAA;AAAA,EACR,YAAA,EAAc,eAAA;AAAA,EACd,cAAA,EAAgB,iBAAA;AAAA,EAChB,cAAA,EAAgB,iBAAA;AAAA,EAChB,OAAA,EAAS,WAAA;AAAA,EACT,MAAA,EAAQ,iBAAA;AAAA,EACR,MAAA,EAAQ,oBAAA;AAAA,EACR,YAAA,EAAc,eAAA;AAAA,EACd,eAAA,EAAiB,kBAAA;AAAA,EACjB,KAAA,EAAO,gBAAA;AAAA,EACP,WAAA,EAAa,eAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,SAAA,EAAW,YAAA;AAAA,EACX,MAAA,EAAQ,YAAA;AAAA,EACR,MAAA,EAAQ,WAAA;AAAA,EACR,iBAAA,EAAmB,UAAA;AAAA,EACnB,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,cAAA;AAAA,EACZ,UAAA,EAAY,cAAA;AAAA,EACZ,QAAA,EAAU,YAAA;AAAA,EACV,UAAA,EAAY,cAAA;AAAA,EACZ,MAAA,EAAQ,UAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,EAAW,YAAA;AAAA,EACX,MAAA,EAAQ,UAAA;AAAA,EACR,eAAA,EAAiB,kBAAA;AAAA,EACjB,QAAA,EAAU,YAAA;AAAA,EACV,MAAA,EAAQ;AACV,CAAA;AAEA,eAAe,IAAA,GAAyC;AACtD,EAAA,OAAQ,MAAM,OAAO,qBAAqB,CAAA;AAC5C;AAEA,eAAsB,WAAA,GAAgC;AACpD,EAAA,OAAO,WAAA,CAAY,MAAM,IAAA,EAAK,EAAG,OAAO,CAAA;AAC1C;AAEA,eAAsB,YAAA,GAAiC;AACrD,EAAA,MAAM,GAAA,GAAM,MAAM,IAAA,EAAK;AACvB,EAAA,MAAM,QAAA,GAAW,iBAAiB,GAAA,EAAK,IAAI,EAAE,WAAA,EAAa,QAAQ,CAAA;AAClE,EAAA,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,WAAA,CAAY,GAAA,EAAK,OAAO,CAAC,CAAA;AACjD,EAAA,OAAO,QAAA;AACT","file":"tabler-MJVEYHA5.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap, pickCurated } from './utils'\n\n/**\n * Tabler icons.\n *\n * The pack is reached only through the dynamic import in peer() — never a\n * static named import. A static import of an optional peer makes a consumer's\n * production build fail on Vite 8 when the peer is not installed: Vite\n * substitutes an export-less stub and the bundler treats every missing name as\n * fatal (Sprint 22 bench finding 1, 13 Sep 2026; showcase/src/test/\n * vite8-optional-peers-build.test.ts guards it). The curated names are strings\n * for the same reason; icon-completeness.test.tsx proves every one resolves in\n * the installed pack. If the pack is missing, peer() rejects and loadPack in\n * icons.tsx reports which package to install.\n */\nconst CURATED: Record<string, string> = {\n \"home\": \"IconHome\",\n \"folder\": \"IconFolder\",\n \"chart\": \"IconChartBar\",\n \"settings\": \"IconSettings\",\n \"chevron-right\": \"IconChevronRight\",\n \"close\": \"IconX\",\n \"plus\": \"IconPlus\",\n \"search\": \"IconSearch\",\n \"bell\": \"IconBell\",\n \"user\": \"IconUser\",\n \"check\": \"IconCheck\",\n \"warning\": \"IconAlertTriangle\",\n \"info\": \"IconInfoCircle\",\n \"error\": \"IconAlertCircle\",\n \"clock\": \"IconClock\",\n \"calendar\": \"IconCalendar\",\n \"bold\": \"IconBold\",\n \"italic\": \"IconItalic\",\n \"underline\": \"IconUnderline\",\n \"strikethrough\": \"IconStrikethrough\",\n \"align-left\": \"IconAlignLeft\",\n \"align-center\": \"IconAlignCenter\",\n \"align-right\": \"IconAlignRight\",\n \"list\": \"IconList\",\n \"list-ordered\": \"IconListNumbers\",\n \"list-checks\": \"IconListCheck\",\n \"link\": \"IconLink\",\n \"image\": \"IconPhoto\",\n \"table\": \"IconTable\",\n \"code\": \"IconCode\",\n \"quote\": \"IconQuote\",\n \"minus\": \"IconMinus\",\n \"superscript\": \"IconSuperscript\",\n \"subscript\": \"IconSubscript\",\n \"highlight\": \"IconHighlight\",\n \"type\": \"IconTypography\",\n \"chevron-up\": \"IconChevronUp\",\n \"chevron-down\": \"IconChevronDown\",\n \"chevron-left\": \"IconChevronLeft\",\n \"trash\": \"IconTrash\",\n \"undo\": \"IconArrowBackUp\",\n \"redo\": \"IconArrowForwardUp\",\n \"arrow-left\": \"IconArrowLeft\",\n \"grip-vertical\": \"IconGripVertical\",\n \"mic\": \"IconMicrophone\",\n \"paperclip\": \"IconPaperclip\",\n \"send\": \"IconSend\",\n \"log-out\": \"IconLogout\",\n \"edit\": \"IconPencil\",\n \"menu\": \"IconMenu2\",\n \"more-horizontal\": \"IconDots\",\n \"star\": \"IconStar\",\n \"bookmark\": \"IconBookmark\",\n \"download\": \"IconDownload\",\n \"upload\": \"IconUpload\",\n \"sparkles\": \"IconSparkles\",\n \"file\": \"IconFile\",\n \"file-text\": \"IconFileText\",\n \"eye\": \"IconEye\",\n \"eye-off\": \"IconEyeOff\",\n \"copy\": \"IconCopy\",\n \"external-link\": \"IconExternalLink\",\n \"filter\": \"IconFilter\",\n \"lock\": \"IconLock\",\n}\n\nasync function peer(): Promise<Record<string, unknown>> {\n return (await import(\"@tabler/icons-react\")) as unknown as Record<string, unknown>\n}\n\nexport async function loadCurated(): Promise<IconMap> {\n return pickCurated(await peer(), CURATED)\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const mod = await peer()\n const extended = buildExtendedMap(mod, {}, { stripPrefix: \"Icon\" })\n Object.assign(extended, pickCurated(mod, CURATED))\n return extended\n}\n"]}