gridsmith-ui 0.2.19 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,30 @@
1
+ // ../../showcase/src/lib/icon-packs/utils.ts
2
+ function pascalToKebab(s) {
3
+ return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2").replace(/([a-zA-Z])(\d)/g, "$1-$2").replace(/(\d)([a-zA-Z])/g, "$1-$2").toLowerCase();
4
+ }
5
+ function isRenderableComponent(value) {
6
+ if (typeof value === "function") return true;
7
+ return typeof value === "object" && value !== null && "$$typeof" in value;
8
+ }
9
+ function buildExtendedMap(mod, aliases, opts) {
10
+ const map = {};
11
+ for (const [exportName, value] of Object.entries(mod)) {
12
+ if (!isRenderableComponent(value)) continue;
13
+ if (!exportName[0] || exportName[0] !== exportName[0].toUpperCase()) continue;
14
+ let name = exportName;
15
+ if (opts?.stripPrefix && name.startsWith(opts.stripPrefix)) {
16
+ name = name.slice(opts.stripPrefix.length);
17
+ }
18
+ if (opts?.stripSuffix && name.endsWith(opts.stripSuffix)) {
19
+ name = name.slice(0, -opts.stripSuffix.length);
20
+ }
21
+ if (!name) continue;
22
+ map[pascalToKebab(name)] = value;
23
+ }
24
+ Object.assign(map, aliases);
25
+ return map;
26
+ }
27
+
28
+ export { buildExtendedMap };
29
+ //# sourceMappingURL=chunk-GYVBRUO2.js.map
30
+ //# sourceMappingURL=chunk-GYVBRUO2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/icon-packs/utils.ts"],"names":[],"mappings":";AAEA,SAAS,cAAc,CAAA,EAAmB;AACxC,EAAA,OAAO,EACJ,OAAA,CAAQ,oBAAA,EAAsB,OAAO,CAAA,CACrC,QAAQ,sBAAA,EAAwB,OAAO,CAAA,CACvC,OAAA,CAAQ,mBAAmB,OAAO,CAAA,CAClC,QAAQ,iBAAA,EAAmB,OAAO,EAClC,WAAA,EAAY;AACjB;AAEA,SAAS,sBAAsB,KAAA,EAAyB;AACtD,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,IAAA;AACxC,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,UAAA,IAAc,KAAA;AACtE;AAEO,SAAS,gBAAA,CACd,GAAA,EACA,OAAA,EACA,IAAA,EACS;AACT,EAAA,MAAM,MAAe,EAAC;AAEtB,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACrD,IAAA,IAAI,CAAC,qBAAA,CAAsB,KAAK,CAAA,EAAG;AACnC,IAAA,IAAI,CAAC,UAAA,CAAW,CAAC,CAAA,IAAK,UAAA,CAAW,CAAC,CAAA,KAAM,UAAA,CAAW,CAAC,CAAA,CAAE,WAAA,EAAY,EAAG;AAErE,IAAA,IAAI,IAAA,GAAO,UAAA;AACX,IAAA,IAAI,MAAM,WAAA,IAAe,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA,EAAG;AAC1D,MAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,MAAM,WAAA,IAAe,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,EAAG;AACxD,MAAA,IAAA,GAAO,KAAK,KAAA,CAAM,CAAA,EAAG,CAAC,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,IAC/C;AACA,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,GAAA,CAAI,aAAA,CAAc,IAAI,CAAC,CAAA,GAAI,KAAA;AAAA,EAC7B;AAEA,EAAA,MAAA,CAAO,MAAA,CAAO,KAAK,OAAO,CAAA;AAC1B,EAAA,OAAO,GAAA;AACT","file":"chunk-GYVBRUO2.js","sourcesContent":["import type { IconMap, IconComponent } from './types'\n\nfunction pascalToKebab(s: string): string {\n return s\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/([A-Z])([A-Z][a-z])/g, \"$1-$2\")\n .replace(/([a-zA-Z])(\\d)/g, \"$1-$2\")\n .replace(/(\\d)([a-zA-Z])/g, \"$1-$2\")\n .toLowerCase()\n}\n\nfunction isRenderableComponent(value: unknown): boolean {\n if (typeof value === \"function\") return true\n return typeof value === \"object\" && value !== null && \"$$typeof\" in value\n}\n\nexport function buildExtendedMap(\n mod: Record<string, unknown>,\n aliases: IconMap,\n opts?: { stripPrefix?: string; stripSuffix?: string },\n): IconMap {\n const map: IconMap = {}\n\n for (const [exportName, value] of Object.entries(mod)) {\n if (!isRenderableComponent(value)) continue\n if (!exportName[0] || exportName[0] !== exportName[0].toUpperCase()) continue\n\n let name = exportName\n if (opts?.stripPrefix && name.startsWith(opts.stripPrefix)) {\n name = name.slice(opts.stripPrefix.length)\n }\n if (opts?.stripSuffix && name.endsWith(opts.stripSuffix)) {\n name = name.slice(0, -opts.stripSuffix.length)\n }\n if (!name) continue\n\n map[pascalToKebab(name)] = value as IconComponent\n }\n\n Object.assign(map, aliases)\n return map\n}\n"]}
@@ -0,0 +1,82 @@
1
+ import { createContext, useContext, useState, useEffect } from 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // ../../showcase/src/lib/icons.tsx
5
+ var packCache = /* @__PURE__ */ new Map();
6
+ var fullyLoaded = /* @__PURE__ */ new Set();
7
+ async function loadPack(pack) {
8
+ switch (pack) {
9
+ case "lucide":
10
+ return (await import('./lucide-6TGT4G26.js')).load();
11
+ case "phosphor":
12
+ return (await import('./phosphor-BWDP4PU7.js')).load();
13
+ case "heroicons":
14
+ return (await import('./heroicons-HJTKMLIJ.js')).load();
15
+ case "tabler":
16
+ return (await import('./tabler-6TPNTLFV.js')).load();
17
+ case "feather":
18
+ return (await import('./feather-N37QZ7LA.js')).load();
19
+ }
20
+ }
21
+ var IconCtx = createContext({ pack: "lucide", weight: 1.5 });
22
+ function IconProvider({ pack, weight, children }) {
23
+ return /* @__PURE__ */ jsx(IconCtx.Provider, { value: { pack, weight }, children });
24
+ }
25
+ function useIconMap(pack) {
26
+ const [map, setMap] = useState(packCache.get(pack) ?? null);
27
+ useEffect(() => {
28
+ if (fullyLoaded.has(pack)) {
29
+ const cached = packCache.get(pack);
30
+ if (cached) setMap(cached);
31
+ return;
32
+ }
33
+ let cancelled = false;
34
+ loadPack(pack).then((loaded) => {
35
+ packCache.set(pack, loaded);
36
+ fullyLoaded.add(pack);
37
+ if (!cancelled) setMap(loaded);
38
+ });
39
+ return () => {
40
+ cancelled = true;
41
+ };
42
+ }, [pack]);
43
+ return map;
44
+ }
45
+ function getPhosphorWeight(numericWeight) {
46
+ if (numericWeight <= 0.75) return "thin";
47
+ if (numericWeight <= 1.25) return "light";
48
+ if (numericWeight <= 1.75) return "regular";
49
+ if (numericWeight <= 2.25) return "bold";
50
+ return "fill";
51
+ }
52
+ function Icon({ name, size = 16, className }) {
53
+ const { pack, weight } = useContext(IconCtx);
54
+ const map = useIconMap(pack);
55
+ const needsFallback = pack !== "lucide" && map !== null && !map[name];
56
+ const lucideMap = useIconMap(needsFallback ? "lucide" : pack);
57
+ if (!map) return null;
58
+ let Comp = map[name];
59
+ let renderPack = pack;
60
+ if (!Comp) {
61
+ if (!needsFallback || !lucideMap?.[name]) return null;
62
+ Comp = lucideMap[name];
63
+ renderPack = "lucide";
64
+ }
65
+ if (renderPack === "phosphor") {
66
+ return /* @__PURE__ */ jsx(Comp, { size, weight: getPhosphorWeight(weight), className });
67
+ }
68
+ if (renderPack === "heroicons") {
69
+ return /* @__PURE__ */ jsx(Comp, { className, style: { width: size, height: size, strokeWidth: weight } });
70
+ }
71
+ if (renderPack === "tabler") {
72
+ return /* @__PURE__ */ jsx(Comp, { size, stroke: weight, className });
73
+ }
74
+ if (renderPack === "feather") {
75
+ return /* @__PURE__ */ jsx(Comp, { size, className, strokeWidth: weight });
76
+ }
77
+ return /* @__PURE__ */ jsx(Comp, { size, strokeWidth: weight, className });
78
+ }
79
+
80
+ export { Icon, IconProvider };
81
+ //# sourceMappingURL=chunk-WVB3SRXW.js.map
82
+ //# sourceMappingURL=chunk-WVB3SRXW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/icons.tsx"],"names":[],"mappings":"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","file":"chunk-WVB3SRXW.js","sourcesContent":["import { createContext, useContext, useState, useEffect, type ReactNode, type ComponentType } from \"react\";\n\n/* ── Types ────────────────────────────────────────────────────── */\n\n/**\n * Runtime list of curated icon names. The CuratedIconName type derives from\n * this array, so adding a name here extends autocomplete automatically.\n * Every name must have an alias (or auto-kebab match) in ALL five packs —\n * icon-completeness.test.tsx enforces this.\n */\nexport const CURATED_ICON_NAMES = [\n \"home\", \"folder\", \"chart\", \"settings\",\n \"chevron-right\", \"close\", \"plus\", \"search\",\n \"bell\", \"user\", \"check\", \"warning\", \"info\", \"error\",\n \"clock\", \"calendar\",\n \"bold\", \"italic\", \"underline\", \"strikethrough\",\n \"align-left\", \"align-center\", \"align-right\",\n \"list\", \"list-ordered\", \"list-checks\",\n \"link\", \"image\", \"table\", \"code\", \"quote\", \"minus\",\n \"superscript\", \"subscript\", \"highlight\", \"type\",\n \"chevron-up\", \"chevron-down\", \"trash\",\n \"undo\", \"redo\",\n \"arrow-left\", \"grip-vertical\",\n \"mic\", \"paperclip\", \"send\",\n \"log-out\", \"edit\", \"menu\",\n \"star\", \"bookmark\", \"download\", \"upload\",\n] as const;\n\ntype CuratedIconName = (typeof CURATED_ICON_NAMES)[number];\n\n/**\n * Curated names provide autocomplete and work identically across all 5 packs.\n * Any kebab-case string is also accepted — it resolves directly against the\n * active pack's native exports (e.g. \"clipboard-copy\" → Lucide's ClipboardCopy).\n */\nexport type IconName = CuratedIconName | (string & {});\n\nexport type IconPack = \"lucide\" | \"phosphor\" | \"heroicons\" | \"tabler\" | \"feather\";\n\ntype IconComponent = ComponentType<Record<string, unknown>>;\ntype IconMap = Record<string, IconComponent>;\n\n/* ── Pack loading ─────────────────────────────────────────────── \n Each pack is isolated in its own file under ./icon-packs/.\n Only the active pack's module is dynamically imported at runtime,\n so bundlers (including Turbopack) won't resolve unused pack\n dependencies at build time. */\n\nconst packCache = new Map<IconPack, IconMap>();\nconst fullyLoaded = new Set<IconPack>();\n\nasync function loadPack(pack: IconPack): Promise<IconMap> {\n switch (pack) {\n case \"lucide\": return (await import(\"./icon-packs/lucide\")).load();\n case \"phosphor\": return (await import(\"./icon-packs/phosphor\")).load();\n case \"heroicons\": return (await import(\"./icon-packs/heroicons\")).load();\n case \"tabler\": return (await import(\"./icon-packs/tabler\")).load();\n case \"feather\": return (await import(\"./icon-packs/feather\")).load();\n }\n}\n\n/** Exported for the icon-completeness test — not part of the public API. */\nexport const packLoaders: Record<IconPack, () => Promise<IconMap>> = {\n lucide: () => loadPack(\"lucide\"),\n phosphor: () => loadPack(\"phosphor\"),\n heroicons: () => loadPack(\"heroicons\"),\n tabler: () => loadPack(\"tabler\"),\n feather: () => loadPack(\"feather\"),\n};\n\n/* ── Context ──────────────────────────────────────────────────── */\n\ninterface IconContextValue {\n pack: IconPack;\n weight: number;\n}\n\nconst IconCtx = createContext<IconContextValue>({ pack: \"lucide\", weight: 1.5 });\n\nexport function IconProvider({ pack, weight, children }: { pack: IconPack; weight: number; children: ReactNode }) {\n return <IconCtx.Provider value={{ pack, weight }}>{children}</IconCtx.Provider>;\n}\n\n/* ── Hook ─────────────────────────────────────────────────────── */\n\nfunction useIconMap(pack: IconPack): IconMap | null {\n const [map, setMap] = useState<IconMap | null>(packCache.get(pack) ?? null);\n\n useEffect(() => {\n if (fullyLoaded.has(pack)) {\n const cached = packCache.get(pack);\n if (cached) setMap(cached);\n return;\n }\n\n let cancelled = false;\n loadPack(pack).then((loaded) => {\n packCache.set(pack, loaded);\n fullyLoaded.add(pack);\n if (!cancelled) setMap(loaded);\n });\n return () => { cancelled = true; };\n }, [pack]);\n\n return map;\n}\n\n/* ── Phosphor weight mapping ──────────────────────────────────── */\n\nfunction getPhosphorWeight(numericWeight: number): \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\" {\n if (numericWeight <= 0.75) return \"thin\";\n if (numericWeight <= 1.25) return \"light\";\n if (numericWeight <= 1.75) return \"regular\";\n if (numericWeight <= 2.25) return \"bold\";\n return \"fill\";\n}\n\n/* ── Icon component ───────────────────────────────────────────── */\n\nexport function Icon({ name, size = 16, className }: { name: IconName; size?: number; className?: string }) {\n const { pack, weight } = useContext(IconCtx);\n const map = useIconMap(pack);\n\n // Lucide doubles as the universal fallback: when the active pack has loaded\n // but lacks the requested name, resolve against lucide instead of rendering\n // nothing. The hook call is unconditional (no conditional-hook violation) —\n // it only re-targets lucide once a miss is confirmed, which triggers the\n // lazy load and a re-render when the map arrives.\n const needsFallback = pack !== \"lucide\" && map !== null && !map[name];\n const lucideMap = useIconMap(needsFallback ? \"lucide\" : pack);\n\n if (!map) return null;\n\n let Comp = map[name];\n let renderPack: IconPack = pack;\n if (!Comp) {\n if (!needsFallback || !lucideMap?.[name]) return null;\n Comp = lucideMap[name];\n renderPack = \"lucide\";\n }\n\n if (renderPack === \"phosphor\") {\n return <Comp size={size} weight={getPhosphorWeight(weight)} className={className} />;\n }\n\n if (renderPack === \"heroicons\") {\n return <Comp className={className} style={{ width: size, height: size, strokeWidth: weight }} />;\n }\n\n if (renderPack === \"tabler\") {\n return <Comp size={size} stroke={weight} className={className} />;\n }\n\n if (renderPack === \"feather\") {\n return <Comp size={size} className={className} strokeWidth={weight} />;\n }\n\n return <Comp size={size} strokeWidth={weight} className={className} />;\n}\n"]}
@@ -0,0 +1,72 @@
1
+ import { buildExtendedMap } from './chunk-GYVBRUO2.js';
2
+ import './chunk-5WRI5ZAA.js';
3
+
4
+ // ../../showcase/src/lib/icon-packs/feather.ts
5
+ async function load() {
6
+ let F;
7
+ try {
8
+ F = await import('react-icons/fi');
9
+ } catch {
10
+ throw new Error("gridsmith-ui: react-icons is not installed. Run: npm install react-icons");
11
+ }
12
+ const aliases = {
13
+ "home": F.FiHome,
14
+ "folder": F.FiFolder,
15
+ "chart": F.FiBarChart2,
16
+ "settings": F.FiSettings,
17
+ "chevron-right": F.FiChevronRight,
18
+ "close": F.FiX,
19
+ "plus": F.FiPlus,
20
+ "search": F.FiSearch,
21
+ "bell": F.FiBell,
22
+ "user": F.FiUser,
23
+ "check": F.FiCheck,
24
+ "warning": F.FiAlertTriangle,
25
+ "info": F.FiInfo,
26
+ "error": F.FiAlertCircle,
27
+ "clock": F.FiClock,
28
+ "calendar": F.FiCalendar,
29
+ "bold": F.FiBold,
30
+ "italic": F.FiItalic,
31
+ "underline": F.FiUnderline,
32
+ "strikethrough": F.FiSlash,
33
+ "align-left": F.FiAlignLeft,
34
+ "align-center": F.FiAlignCenter,
35
+ "align-right": F.FiAlignRight,
36
+ "list": F.FiList,
37
+ "list-ordered": F.FiList,
38
+ "list-checks": F.FiCheckSquare,
39
+ "link": F.FiLink,
40
+ "image": F.FiImage,
41
+ "table": F.FiGrid,
42
+ "code": F.FiCode,
43
+ "quote": F.FiMessageSquare,
44
+ "minus": F.FiMinus,
45
+ "superscript": F.FiChevronUp,
46
+ "subscript": F.FiChevronDown,
47
+ "highlight": F.FiEdit2,
48
+ "type": F.FiType,
49
+ "chevron-up": F.FiChevronUp,
50
+ "chevron-down": F.FiChevronDown,
51
+ "trash": F.FiTrash2,
52
+ "undo": F.FiRotateCcw,
53
+ "redo": F.FiRotateCw,
54
+ "arrow-left": F.FiArrowLeft,
55
+ "grip-vertical": F.FiMoreVertical,
56
+ "mic": F.FiMic,
57
+ "paperclip": F.FiPaperclip,
58
+ "send": F.FiSend,
59
+ "log-out": F.FiLogOut,
60
+ "edit": F.FiEdit2,
61
+ "menu": F.FiMenu,
62
+ "star": F.FiStar,
63
+ "bookmark": F.FiBookmark,
64
+ "download": F.FiDownload,
65
+ "upload": F.FiUpload
66
+ };
67
+ return buildExtendedMap(F, aliases, { stripPrefix: "Fi" });
68
+ }
69
+
70
+ export { load };
71
+ //# sourceMappingURL=feather-N37QZ7LA.js.map
72
+ //# sourceMappingURL=feather-N37QZ7LA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/icon-packs/feather.ts"],"names":[],"mappings":";;;;AAGA,eAAsB,IAAA,GAAyB;AAC7C,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI;AAAE,IAAA,CAAA,GAAI,MAAM,OAAO,gBAAgB,CAAA;AAAA,EAAE,CAAA,CAAA,MACnC;AAAE,IAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,EAAE;AACpG,EAAA,MAAM,OAAA,GAAmB;AAAA,IACvB,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,UAAU,CAAA,CAAE,QAAA;AAAA,IAAU,SAAS,CAAA,CAAE,WAAA;AAAA,IAAa,YAAY,CAAA,CAAE,UAAA;AAAA,IAC9E,iBAAiB,CAAA,CAAE,cAAA;AAAA,IAAgB,SAAS,CAAA,CAAE,GAAA;AAAA,IAAK,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,UAAU,CAAA,CAAE,QAAA;AAAA,IACjF,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,SAAS,CAAA,CAAE,OAAA;AAAA,IAAS,WAAW,CAAA,CAAE,eAAA;AAAA,IACrE,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,SAAS,CAAA,CAAE,aAAA;AAAA,IAAe,SAAS,CAAA,CAAE,OAAA;AAAA,IAAS,YAAY,CAAA,CAAE,UAAA;AAAA,IAC9E,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,UAAU,CAAA,CAAE,QAAA;AAAA,IAAU,aAAa,CAAA,CAAE,WAAA;AAAA,IAAa,iBAAiB,CAAA,CAAE,OAAA;AAAA,IACvF,cAAc,CAAA,CAAE,WAAA;AAAA,IAAa,gBAAgB,CAAA,CAAE,aAAA;AAAA,IAAe,eAAe,CAAA,CAAE,YAAA;AAAA,IAC/E,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,gBAAgB,CAAA,CAAE,MAAA;AAAA,IAAQ,eAAe,CAAA,CAAE,aAAA;AAAA,IAC7D,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,SAAS,CAAA,CAAE,OAAA;AAAA,IAAS,SAAS,CAAA,CAAE,MAAA;AAAA,IAAQ,QAAQ,CAAA,CAAE,MAAA;AAAA,IACnE,SAAS,CAAA,CAAE,eAAA;AAAA,IAAiB,SAAS,CAAA,CAAE,OAAA;AAAA,IAAS,eAAe,CAAA,CAAE,WAAA;AAAA,IACjE,aAAa,CAAA,CAAE,aAAA;AAAA,IAAe,aAAa,CAAA,CAAE,OAAA;AAAA,IAAS,QAAQ,CAAA,CAAE,MAAA;AAAA,IAChE,cAAc,CAAA,CAAE,WAAA;AAAA,IAAa,gBAAgB,CAAA,CAAE,aAAA;AAAA,IAAe,SAAS,CAAA,CAAE,QAAA;AAAA,IACzE,QAAQ,CAAA,CAAE,WAAA;AAAA,IAAa,QAAQ,CAAA,CAAE,UAAA;AAAA,IACjC,cAAc,CAAA,CAAE,WAAA;AAAA,IAAa,iBAAiB,CAAA,CAAE,cAAA;AAAA,IAChD,OAAO,CAAA,CAAE,KAAA;AAAA,IAAO,aAAa,CAAA,CAAE,WAAA;AAAA,IAAa,QAAQ,CAAA,CAAE,MAAA;AAAA,IACtD,WAAW,CAAA,CAAE,QAAA;AAAA,IAAU,QAAQ,CAAA,CAAE,OAAA;AAAA,IAAS,QAAQ,CAAA,CAAE,MAAA;AAAA,IACpD,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,YAAY,CAAA,CAAE,UAAA;AAAA,IAChC,YAAY,CAAA,CAAE,UAAA;AAAA,IAAY,UAAU,CAAA,CAAE;AAAA,GACxC;AACA,EAAA,OAAO,iBAAiB,CAAA,EAAyC,OAAA,EAAS,EAAE,WAAA,EAAa,MAAM,CAAA;AACjG","file":"feather-N37QZ7LA.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap } from './utils'\n\nexport async function load(): Promise<IconMap> {\n let F: typeof import(\"react-icons/fi\")\n try { F = await import(\"react-icons/fi\") }\n catch { throw new Error('gridsmith-ui: react-icons is not installed. Run: npm install react-icons') }\n const aliases: IconMap = {\n \"home\": F.FiHome, \"folder\": F.FiFolder, \"chart\": F.FiBarChart2, \"settings\": F.FiSettings,\n \"chevron-right\": F.FiChevronRight, \"close\": F.FiX, \"plus\": F.FiPlus, \"search\": F.FiSearch,\n \"bell\": F.FiBell, \"user\": F.FiUser, \"check\": F.FiCheck, \"warning\": F.FiAlertTriangle,\n \"info\": F.FiInfo, \"error\": F.FiAlertCircle, \"clock\": F.FiClock, \"calendar\": F.FiCalendar,\n \"bold\": F.FiBold, \"italic\": F.FiItalic, \"underline\": F.FiUnderline, \"strikethrough\": F.FiSlash,\n \"align-left\": F.FiAlignLeft, \"align-center\": F.FiAlignCenter, \"align-right\": F.FiAlignRight,\n \"list\": F.FiList, \"list-ordered\": F.FiList, \"list-checks\": F.FiCheckSquare,\n \"link\": F.FiLink, \"image\": F.FiImage, \"table\": F.FiGrid, \"code\": F.FiCode,\n \"quote\": F.FiMessageSquare, \"minus\": F.FiMinus, \"superscript\": F.FiChevronUp,\n \"subscript\": F.FiChevronDown, \"highlight\": F.FiEdit2, \"type\": F.FiType,\n \"chevron-up\": F.FiChevronUp, \"chevron-down\": F.FiChevronDown, \"trash\": F.FiTrash2,\n \"undo\": F.FiRotateCcw, \"redo\": F.FiRotateCw,\n \"arrow-left\": F.FiArrowLeft, \"grip-vertical\": F.FiMoreVertical,\n \"mic\": F.FiMic, \"paperclip\": F.FiPaperclip, \"send\": F.FiSend,\n \"log-out\": F.FiLogOut, \"edit\": F.FiEdit2, \"menu\": F.FiMenu,\n \"star\": F.FiStar, \"bookmark\": F.FiBookmark,\n \"download\": F.FiDownload, \"upload\": F.FiUpload,\n }\n return buildExtendedMap(F as unknown as Record<string, unknown>, aliases, { stripPrefix: \"Fi\" })\n}\n"]}
@@ -0,0 +1,72 @@
1
+ import { buildExtendedMap } from './chunk-GYVBRUO2.js';
2
+ import './chunk-5WRI5ZAA.js';
3
+
4
+ // ../../showcase/src/lib/icon-packs/heroicons.ts
5
+ async function load() {
6
+ let H;
7
+ try {
8
+ H = await import('@heroicons/react/24/outline');
9
+ } catch {
10
+ throw new Error("gridsmith-ui: @heroicons/react is not installed. Run: npm install @heroicons/react");
11
+ }
12
+ const aliases = {
13
+ "home": H.HomeIcon,
14
+ "folder": H.FolderIcon,
15
+ "chart": H.ChartBarIcon,
16
+ "settings": H.Cog6ToothIcon,
17
+ "chevron-right": H.ChevronRightIcon,
18
+ "close": H.XMarkIcon,
19
+ "plus": H.PlusIcon,
20
+ "search": H.MagnifyingGlassIcon,
21
+ "bell": H.BellIcon,
22
+ "user": H.UserIcon,
23
+ "check": H.CheckIcon,
24
+ "warning": H.ExclamationTriangleIcon,
25
+ "info": H.InformationCircleIcon,
26
+ "error": H.ExclamationCircleIcon,
27
+ "clock": H.ClockIcon,
28
+ "calendar": H.CalendarDaysIcon,
29
+ "bold": H.BoldIcon,
30
+ "italic": H.ItalicIcon,
31
+ "underline": H.UnderlineIcon,
32
+ "strikethrough": H.StrikethroughIcon,
33
+ "align-left": H.Bars3BottomLeftIcon,
34
+ "align-center": H.Bars3Icon,
35
+ "align-right": H.Bars3BottomRightIcon,
36
+ "list": H.ListBulletIcon,
37
+ "list-ordered": H.NumberedListIcon,
38
+ "list-checks": H.ClipboardDocumentCheckIcon,
39
+ "link": H.LinkIcon,
40
+ "image": H.PhotoIcon,
41
+ "table": H.TableCellsIcon,
42
+ "code": H.CodeBracketIcon,
43
+ "quote": H.ChatBubbleBottomCenterTextIcon,
44
+ "minus": H.MinusIcon,
45
+ "superscript": H.H1Icon,
46
+ "subscript": H.H2Icon,
47
+ "highlight": H.PaintBrushIcon,
48
+ "type": H.LanguageIcon,
49
+ "chevron-up": H.ChevronUpIcon,
50
+ "chevron-down": H.ChevronDownIcon,
51
+ "trash": H.TrashIcon,
52
+ "undo": H.ArrowUturnLeftIcon,
53
+ "redo": H.ArrowUturnRightIcon,
54
+ "arrow-left": H.ArrowLeftIcon,
55
+ "grip-vertical": H.Bars2Icon,
56
+ "mic": H.MicrophoneIcon,
57
+ "paperclip": H.PaperClipIcon,
58
+ "send": H.PaperAirplaneIcon,
59
+ "log-out": H.ArrowRightStartOnRectangleIcon,
60
+ "edit": H.PencilIcon,
61
+ "menu": H.Bars3Icon,
62
+ "star": H.StarIcon,
63
+ "bookmark": H.BookmarkIcon,
64
+ "download": H.ArrowDownTrayIcon,
65
+ "upload": H.ArrowUpTrayIcon
66
+ };
67
+ return buildExtendedMap(H, aliases, { stripSuffix: "Icon" });
68
+ }
69
+
70
+ export { load };
71
+ //# sourceMappingURL=heroicons-HJTKMLIJ.js.map
72
+ //# sourceMappingURL=heroicons-HJTKMLIJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/icon-packs/heroicons.ts"],"names":[],"mappings":";;;;AAGA,eAAsB,IAAA,GAAyB;AAC7C,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI;AAAE,IAAA,CAAA,GAAI,MAAM,OAAO,6BAA6B,CAAA;AAAA,EAAE,CAAA,CAAA,MAChD;AAAE,IAAA,MAAM,IAAI,MAAM,oFAAoF,CAAA;AAAA,EAAE;AAC9G,EAAA,MAAM,OAAA,GAAmB;AAAA,IACvB,QAAQ,CAAA,CAAE,QAAA;AAAA,IAAU,UAAU,CAAA,CAAE,UAAA;AAAA,IAAY,SAAS,CAAA,CAAE,YAAA;AAAA,IACvD,YAAY,CAAA,CAAE,aAAA;AAAA,IAAe,iBAAiB,CAAA,CAAE,gBAAA;AAAA,IAChD,SAAS,CAAA,CAAE,SAAA;AAAA,IAAW,QAAQ,CAAA,CAAE,QAAA;AAAA,IAAU,UAAU,CAAA,CAAE,mBAAA;AAAA,IACtD,QAAQ,CAAA,CAAE,QAAA;AAAA,IAAU,QAAQ,CAAA,CAAE,QAAA;AAAA,IAAU,SAAS,CAAA,CAAE,SAAA;AAAA,IACnD,WAAW,CAAA,CAAE,uBAAA;AAAA,IAAyB,QAAQ,CAAA,CAAE,qBAAA;AAAA,IAChD,SAAS,CAAA,CAAE,qBAAA;AAAA,IAAuB,SAAS,CAAA,CAAE,SAAA;AAAA,IAAW,YAAY,CAAA,CAAE,gBAAA;AAAA,IACtE,QAAQ,CAAA,CAAE,QAAA;AAAA,IAAU,UAAU,CAAA,CAAE,UAAA;AAAA,IAAY,aAAa,CAAA,CAAE,aAAA;AAAA,IAC3D,iBAAiB,CAAA,CAAE,iBAAA;AAAA,IAAmB,cAAc,CAAA,CAAE,mBAAA;AAAA,IACtD,gBAAgB,CAAA,CAAE,SAAA;AAAA,IAAW,eAAe,CAAA,CAAE,oBAAA;AAAA,IAC9C,QAAQ,CAAA,CAAE,cAAA;AAAA,IAAgB,gBAAgB,CAAA,CAAE,gBAAA;AAAA,IAC5C,eAAe,CAAA,CAAE,0BAAA;AAAA,IAA4B,QAAQ,CAAA,CAAE,QAAA;AAAA,IACvD,SAAS,CAAA,CAAE,SAAA;AAAA,IAAW,SAAS,CAAA,CAAE,cAAA;AAAA,IAAgB,QAAQ,CAAA,CAAE,eAAA;AAAA,IAC3D,SAAS,CAAA,CAAE,8BAAA;AAAA,IAAgC,SAAS,CAAA,CAAE,SAAA;AAAA,IACtD,eAAe,CAAA,CAAE,MAAA;AAAA,IAAQ,aAAa,CAAA,CAAE,MAAA;AAAA,IACxC,aAAa,CAAA,CAAE,cAAA;AAAA,IAAgB,QAAQ,CAAA,CAAE,YAAA;AAAA,IACzC,cAAc,CAAA,CAAE,aAAA;AAAA,IAAe,gBAAgB,CAAA,CAAE,eAAA;AAAA,IAAiB,SAAS,CAAA,CAAE,SAAA;AAAA,IAC7E,QAAQ,CAAA,CAAE,kBAAA;AAAA,IAAoB,QAAQ,CAAA,CAAE,mBAAA;AAAA,IACxC,cAAc,CAAA,CAAE,aAAA;AAAA,IAAe,iBAAiB,CAAA,CAAE,SAAA;AAAA,IAClD,OAAO,CAAA,CAAE,cAAA;AAAA,IAAgB,aAAa,CAAA,CAAE,aAAA;AAAA,IAAe,QAAQ,CAAA,CAAE,iBAAA;AAAA,IACjE,WAAW,CAAA,CAAE,8BAAA;AAAA,IAAgC,QAAQ,CAAA,CAAE,UAAA;AAAA,IAAY,QAAQ,CAAA,CAAE,SAAA;AAAA,IAC7E,QAAQ,CAAA,CAAE,QAAA;AAAA,IAAU,YAAY,CAAA,CAAE,YAAA;AAAA,IAClC,YAAY,CAAA,CAAE,iBAAA;AAAA,IAAmB,UAAU,CAAA,CAAE;AAAA,GAC/C;AACA,EAAA,OAAO,iBAAiB,CAAA,EAAyC,OAAA,EAAS,EAAE,WAAA,EAAa,QAAQ,CAAA;AACnG","file":"heroicons-HJTKMLIJ.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap } from './utils'\n\nexport async function load(): Promise<IconMap> {\n let H: typeof import(\"@heroicons/react/24/outline\")\n try { H = await import(\"@heroicons/react/24/outline\") }\n catch { throw new Error('gridsmith-ui: @heroicons/react is not installed. Run: npm install @heroicons/react') }\n const aliases: IconMap = {\n \"home\": H.HomeIcon, \"folder\": H.FolderIcon, \"chart\": H.ChartBarIcon,\n \"settings\": H.Cog6ToothIcon, \"chevron-right\": H.ChevronRightIcon,\n \"close\": H.XMarkIcon, \"plus\": H.PlusIcon, \"search\": H.MagnifyingGlassIcon,\n \"bell\": H.BellIcon, \"user\": H.UserIcon, \"check\": H.CheckIcon,\n \"warning\": H.ExclamationTriangleIcon, \"info\": H.InformationCircleIcon,\n \"error\": H.ExclamationCircleIcon, \"clock\": H.ClockIcon, \"calendar\": H.CalendarDaysIcon,\n \"bold\": H.BoldIcon, \"italic\": H.ItalicIcon, \"underline\": H.UnderlineIcon,\n \"strikethrough\": H.StrikethroughIcon, \"align-left\": H.Bars3BottomLeftIcon,\n \"align-center\": H.Bars3Icon, \"align-right\": H.Bars3BottomRightIcon,\n \"list\": H.ListBulletIcon, \"list-ordered\": H.NumberedListIcon,\n \"list-checks\": H.ClipboardDocumentCheckIcon, \"link\": H.LinkIcon,\n \"image\": H.PhotoIcon, \"table\": H.TableCellsIcon, \"code\": H.CodeBracketIcon,\n \"quote\": H.ChatBubbleBottomCenterTextIcon, \"minus\": H.MinusIcon,\n \"superscript\": H.H1Icon, \"subscript\": H.H2Icon,\n \"highlight\": H.PaintBrushIcon, \"type\": H.LanguageIcon,\n \"chevron-up\": H.ChevronUpIcon, \"chevron-down\": H.ChevronDownIcon, \"trash\": H.TrashIcon,\n \"undo\": H.ArrowUturnLeftIcon, \"redo\": H.ArrowUturnRightIcon,\n \"arrow-left\": H.ArrowLeftIcon, \"grip-vertical\": H.Bars2Icon,\n \"mic\": H.MicrophoneIcon, \"paperclip\": H.PaperClipIcon, \"send\": H.PaperAirplaneIcon,\n \"log-out\": H.ArrowRightStartOnRectangleIcon, \"edit\": H.PencilIcon, \"menu\": H.Bars3Icon,\n \"star\": H.StarIcon, \"bookmark\": H.BookmarkIcon,\n \"download\": H.ArrowDownTrayIcon, \"upload\": H.ArrowUpTrayIcon,\n }\n return buildExtendedMap(H as unknown as Record<string, unknown>, aliases, { stripSuffix: \"Icon\" })\n}\n"]}
package/dist/icons.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Icon, IconProvider } from './chunk-H2XI6OUB.js';
1
+ export { Icon, IconProvider } from './chunk-WVB3SRXW.js';
2
2
  import './chunk-5WRI5ZAA.js';
3
3
  //# sourceMappingURL=icons.js.map
4
4
  //# sourceMappingURL=icons.js.map
package/dist/index.d.ts CHANGED
@@ -68,12 +68,14 @@ interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
68
68
  }
69
69
  declare function Textarea({ className, autoResize, maxRows, ref, ...props }: TextareaProps): react_jsx_runtime.JSX.Element;
70
70
  declare function Label({ className, children, ...props }: LabelHTMLAttributes<HTMLLabelElement>): react_jsx_runtime.JSX.Element;
71
- declare function Toggle({ checked, onChange, label, disabled, error, "aria-labelledby": ariaLabelledBy, ...rest }: {
71
+ type ToggleLayout = "full" | "compact";
72
+ declare function Toggle({ checked, onChange, label, disabled, error, layout, "aria-labelledby": ariaLabelledBy, ...rest }: {
72
73
  checked: boolean;
73
74
  onChange: (v: boolean) => void;
74
75
  label?: string;
75
76
  disabled?: boolean;
76
77
  error?: boolean;
78
+ layout?: ToggleLayout;
77
79
  "aria-labelledby"?: string;
78
80
  } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange">): react_jsx_runtime.JSX.Element;
79
81
 
@@ -928,13 +930,12 @@ interface PageHeaderProps {
928
930
  onBack?: () => void;
929
931
  actions?: ReactNode;
930
932
  avatar?: ReactNode;
931
- stats?: ReactNode;
932
933
  filters?: ReactNode;
933
934
  bannerImage?: string;
934
935
  as?: HeadingLevel;
935
936
  className?: string;
936
937
  }
937
- declare function PageHeader({ title, description, badge, breadcrumbs, onBack, actions, avatar, stats, filters, bannerImage, as: Heading, className, }: PageHeaderProps): react_jsx_runtime.JSX.Element;
938
+ declare function PageHeader({ title, description, badge, breadcrumbs, onBack, actions, avatar, filters, bannerImage, as: Heading, className, }: PageHeaderProps): react_jsx_runtime.JSX.Element;
938
939
 
939
940
  interface DockItem {
940
941
  id: string;
@@ -1208,9 +1209,10 @@ interface ToastProps {
1208
1209
  pauseOnHover?: boolean;
1209
1210
  action?: ToastAction;
1210
1211
  position?: ToastPosition;
1212
+ mode?: "light" | "dark";
1211
1213
  container?: Element | DocumentFragment;
1212
1214
  }
1213
- declare function Toast({ variant, message, visible, onDismiss, duration, pauseOnHover, action, position, container }: ToastProps): react.ReactPortal | null;
1215
+ declare function Toast({ variant, message, visible, onDismiss, duration, pauseOnHover, action, position, mode, container }: ToastProps): react.ReactPortal | null;
1214
1216
 
1215
1217
  type ProgressVariant = "default" | "success" | "warning" | "error";
1216
1218
  interface ProgressProps {