gridsmith-ui 0.3.4 → 0.4.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.
- package/dist/chunk-6TMNEBBJ.js +140 -0
- package/dist/chunk-6TMNEBBJ.js.map +1 -0
- package/dist/feather-432JQGUB.js +72 -0
- package/dist/feather-432JQGUB.js.map +1 -0
- package/dist/heroicons-CCKJHFZY.js +72 -0
- package/dist/heroicons-CCKJHFZY.js.map +1 -0
- package/dist/icons.d.ts +9 -1
- package/dist/icons.js +1 -1
- package/dist/index.d.ts +12 -5
- package/dist/index.js +782 -379
- package/dist/index.js.map +1 -1
- package/dist/lucide-Z74WVRAK.js +72 -0
- package/dist/lucide-Z74WVRAK.js.map +1 -0
- package/dist/phosphor-DYUCR5S2.js +72 -0
- package/dist/phosphor-DYUCR5S2.js.map +1 -0
- package/dist/tabler-GRXDPAHR.js +72 -0
- package/dist/tabler-GRXDPAHR.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-WVB3SRXW.js +0 -82
- package/dist/chunk-WVB3SRXW.js.map +0 -1
- package/dist/feather-N37QZ7LA.js +0 -72
- package/dist/feather-N37QZ7LA.js.map +0 -1
- package/dist/heroicons-HJTKMLIJ.js +0 -72
- package/dist/heroicons-HJTKMLIJ.js.map +0 -1
- package/dist/lucide-6TGT4G26.js +0 -67
- package/dist/lucide-6TGT4G26.js.map +0 -1
- package/dist/phosphor-BWDP4PU7.js +0 -72
- package/dist/phosphor-BWDP4PU7.js.map +0 -1
- package/dist/tabler-6TPNTLFV.js +0 -72
- package/dist/tabler-6TPNTLFV.js.map +0 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { createContext, useEffect, useContext, useSyncExternalStore } from 'react';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
// ../../showcase/src/lib/icons.tsx
|
|
5
|
+
var subscribers = /* @__PURE__ */ new Set();
|
|
6
|
+
function notifySubscribers() {
|
|
7
|
+
subscribers.forEach((fn) => fn());
|
|
8
|
+
}
|
|
9
|
+
function subscribe(cb) {
|
|
10
|
+
subscribers.add(cb);
|
|
11
|
+
return () => {
|
|
12
|
+
subscribers.delete(cb);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
var curatedCache = /* @__PURE__ */ new Map();
|
|
16
|
+
var extendedCache = /* @__PURE__ */ new Map();
|
|
17
|
+
function useCuratedMap(pack) {
|
|
18
|
+
return useSyncExternalStore(
|
|
19
|
+
subscribe,
|
|
20
|
+
() => curatedCache.get(pack) ?? null,
|
|
21
|
+
() => null
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
function useExtendedMap(pack) {
|
|
25
|
+
return useSyncExternalStore(
|
|
26
|
+
subscribe,
|
|
27
|
+
() => extendedCache.get(pack) ?? null,
|
|
28
|
+
() => null
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
var loadingPacks = /* @__PURE__ */ new Set();
|
|
32
|
+
async function loadPack(pack) {
|
|
33
|
+
if (curatedCache.has(pack) || loadingPacks.has(pack)) return;
|
|
34
|
+
loadingPacks.add(pack);
|
|
35
|
+
let mod;
|
|
36
|
+
switch (pack) {
|
|
37
|
+
case "lucide":
|
|
38
|
+
mod = await import('./lucide-Z74WVRAK.js');
|
|
39
|
+
break;
|
|
40
|
+
case "phosphor":
|
|
41
|
+
try {
|
|
42
|
+
mod = await import('./phosphor-DYUCR5S2.js');
|
|
43
|
+
} catch {
|
|
44
|
+
throw new Error("gridsmith-ui: @phosphor-icons/react is not installed. Run: npm install @phosphor-icons/react");
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
case "heroicons":
|
|
48
|
+
try {
|
|
49
|
+
mod = await import('./heroicons-CCKJHFZY.js');
|
|
50
|
+
} catch {
|
|
51
|
+
throw new Error("gridsmith-ui: @heroicons/react is not installed. Run: npm install @heroicons/react");
|
|
52
|
+
}
|
|
53
|
+
break;
|
|
54
|
+
case "tabler":
|
|
55
|
+
try {
|
|
56
|
+
mod = await import('./tabler-GRXDPAHR.js');
|
|
57
|
+
} catch {
|
|
58
|
+
throw new Error("gridsmith-ui: @tabler/icons-react is not installed. Run: npm install @tabler/icons-react");
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
case "feather":
|
|
62
|
+
try {
|
|
63
|
+
mod = await import('./feather-432JQGUB.js');
|
|
64
|
+
} catch {
|
|
65
|
+
throw new Error("gridsmith-ui: react-icons is not installed. Run: npm install react-icons");
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
curatedCache.set(pack, mod.loadCurated());
|
|
70
|
+
notifySubscribers();
|
|
71
|
+
mod.loadExtended().then((extended) => {
|
|
72
|
+
extendedCache.set(pack, extended);
|
|
73
|
+
notifySubscribers();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
var IconCtx = createContext({ pack: "lucide", weight: 1.5 });
|
|
77
|
+
function IconProvider({ pack, weight, children }) {
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
loadPack(pack);
|
|
80
|
+
if (pack !== "lucide") loadPack("lucide");
|
|
81
|
+
}, [pack]);
|
|
82
|
+
return /* @__PURE__ */ jsx(IconCtx.Provider, { value: { pack, weight }, children });
|
|
83
|
+
}
|
|
84
|
+
function preloadPack(pack) {
|
|
85
|
+
loadPack(pack);
|
|
86
|
+
}
|
|
87
|
+
function getPhosphorWeight(numericWeight) {
|
|
88
|
+
if (numericWeight <= 0.75) return "thin";
|
|
89
|
+
if (numericWeight <= 1.25) return "light";
|
|
90
|
+
if (numericWeight <= 1.75) return "regular";
|
|
91
|
+
if (numericWeight <= 2.25) return "bold";
|
|
92
|
+
return "fill";
|
|
93
|
+
}
|
|
94
|
+
function Icon({ name, size = 16, className }) {
|
|
95
|
+
const { pack, weight } = useContext(IconCtx);
|
|
96
|
+
const curatedMap = useCuratedMap(pack);
|
|
97
|
+
const extendedMap = useExtendedMap(pack);
|
|
98
|
+
const lucideCurated = useCuratedMap("lucide");
|
|
99
|
+
const lucideExtended = useExtendedMap("lucide");
|
|
100
|
+
if (!curatedCache.has(pack) && !loadingPacks.has(pack)) {
|
|
101
|
+
loadPack(pack);
|
|
102
|
+
}
|
|
103
|
+
let Comp = null;
|
|
104
|
+
let renderPack = pack;
|
|
105
|
+
if (curatedMap) {
|
|
106
|
+
Comp = curatedMap[name];
|
|
107
|
+
}
|
|
108
|
+
if (!Comp && extendedMap) {
|
|
109
|
+
Comp = extendedMap[name];
|
|
110
|
+
}
|
|
111
|
+
if (!Comp && pack !== "lucide") {
|
|
112
|
+
const fallback = lucideCurated?.[name] ?? lucideExtended?.[name];
|
|
113
|
+
if (fallback) {
|
|
114
|
+
Comp = fallback;
|
|
115
|
+
renderPack = "lucide";
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (!Comp) {
|
|
119
|
+
const allMapsLoaded = curatedMap && extendedMap && (pack === "lucide" || lucideCurated && lucideExtended);
|
|
120
|
+
if (allMapsLoaded) return null;
|
|
121
|
+
return /* @__PURE__ */ jsx("span", { style: { display: "inline-block", width: size, height: size }, className });
|
|
122
|
+
}
|
|
123
|
+
if (renderPack === "phosphor") {
|
|
124
|
+
return /* @__PURE__ */ jsx(Comp, { size, weight: getPhosphorWeight(weight), className });
|
|
125
|
+
}
|
|
126
|
+
if (renderPack === "heroicons") {
|
|
127
|
+
return /* @__PURE__ */ jsx(Comp, { className, style: { width: size, height: size, strokeWidth: weight } });
|
|
128
|
+
}
|
|
129
|
+
if (renderPack === "tabler") {
|
|
130
|
+
return /* @__PURE__ */ jsx(Comp, { size, stroke: weight, className });
|
|
131
|
+
}
|
|
132
|
+
if (renderPack === "feather") {
|
|
133
|
+
return /* @__PURE__ */ jsx(Comp, { size, className, strokeWidth: weight });
|
|
134
|
+
}
|
|
135
|
+
return /* @__PURE__ */ jsx(Comp, { size, strokeWidth: weight, className });
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export { Icon, IconProvider, preloadPack };
|
|
139
|
+
//# sourceMappingURL=chunk-6TMNEBBJ.js.map
|
|
140
|
+
//# sourceMappingURL=chunk-6TMNEBBJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/lib/icons.tsx"],"names":[],"mappings":"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","file":"chunk-6TMNEBBJ.js","sourcesContent":["import { createContext, useContext, useEffect, useSyncExternalStore, 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/* ── External store ──────────────────────────────────────────── */\n\ntype Subscriber = () => void;\nconst subscribers = new Set<Subscriber>();\nfunction notifySubscribers() {\n subscribers.forEach((fn) => fn());\n}\nfunction subscribe(cb: Subscriber): () => void {\n subscribers.add(cb);\n return () => { subscribers.delete(cb); };\n}\n\nconst curatedCache = new Map<IconPack, IconMap>();\nconst extendedCache = new Map<IconPack, IconMap>();\n\nfunction useCuratedMap(pack: IconPack): IconMap | null {\n return useSyncExternalStore(\n subscribe,\n () => curatedCache.get(pack) ?? null,\n () => null,\n );\n}\n\nfunction useExtendedMap(pack: IconPack): IconMap | null {\n return useSyncExternalStore(\n subscribe,\n () => extendedCache.get(pack) ?? null,\n () => null,\n );\n}\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 won't resolve unused pack dependencies at build time.\n\n Loading is two-phase:\n 1. Curated map (50 static named imports) — available as soon as\n the pack chunk loads, cached and notified immediately.\n 2. Extended map (full barrel import + kebab-case iteration) —\n loaded in the background, cached and notified when ready. */\n\nconst loadingPacks = new Set<IconPack>();\n\ntype PackModule = {\n loadCurated(): IconMap;\n loadExtended(): Promise<IconMap>;\n};\n\nasync function loadPack(pack: IconPack): Promise<void> {\n if (curatedCache.has(pack) || loadingPacks.has(pack)) return;\n loadingPacks.add(pack);\n\n let mod: PackModule;\n switch (pack) {\n case \"lucide\":\n mod = await import(\"./icon-packs/lucide\");\n break;\n case \"phosphor\":\n try { mod = await import(\"./icon-packs/phosphor\"); }\n catch { throw new Error(\"gridsmith-ui: @phosphor-icons/react is not installed. Run: npm install @phosphor-icons/react\"); }\n break;\n case \"heroicons\":\n try { mod = await import(\"./icon-packs/heroicons\"); }\n catch { throw new Error(\"gridsmith-ui: @heroicons/react is not installed. Run: npm install @heroicons/react\"); }\n break;\n case \"tabler\":\n try { mod = await import(\"./icon-packs/tabler\"); }\n catch { throw new Error(\"gridsmith-ui: @tabler/icons-react is not installed. Run: npm install @tabler/icons-react\"); }\n break;\n case \"feather\":\n try { mod = await import(\"./icon-packs/feather\"); }\n catch { throw new Error(\"gridsmith-ui: react-icons is not installed. Run: npm install react-icons\"); }\n break;\n }\n\n curatedCache.set(pack, mod!.loadCurated());\n notifySubscribers();\n\n mod!.loadExtended().then((extended) => {\n extendedCache.set(pack, extended);\n notifySubscribers();\n });\n}\n\n/** Exported for the icon-completeness test — not part of the public API. */\nexport const packLoaders: Record<IconPack, {\n curated: () => Promise<IconMap>;\n extended: () => Promise<IconMap>;\n}> = {\n lucide: { curated: () => import(\"./icon-packs/lucide\").then((m) => m.loadCurated()), extended: () => import(\"./icon-packs/lucide\").then((m) => m.loadExtended()) },\n phosphor: { curated: () => import(\"./icon-packs/phosphor\").then((m) => m.loadCurated()), extended: () => import(\"./icon-packs/phosphor\").then((m) => m.loadExtended()) },\n heroicons: { curated: () => import(\"./icon-packs/heroicons\").then((m) => m.loadCurated()), extended: () => import(\"./icon-packs/heroicons\").then((m) => m.loadExtended()) },\n tabler: { curated: () => import(\"./icon-packs/tabler\").then((m) => m.loadCurated()), extended: () => import(\"./icon-packs/tabler\").then((m) => m.loadExtended()) },\n feather: { curated: () => import(\"./icon-packs/feather\").then((m) => m.loadCurated()), extended: () => import(\"./icon-packs/feather\").then((m) => m.loadExtended()) },\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 useEffect(() => {\n loadPack(pack);\n if (pack !== \"lucide\") loadPack(\"lucide\");\n }, [pack]);\n\n return <IconCtx.Provider value={{ pack, weight }}>{children}</IconCtx.Provider>;\n}\n\n/**\n * Start loading a pack's icon chunk before React mounts. Call this in your\n * app's entry point (e.g. main.tsx) for the fastest possible cold start:\n *\n * import { preloadPack } from 'gridsmith-ui/icons'\n * preloadPack('lucide')\n */\nexport function preloadPack(pack: IconPack): void {\n loadPack(pack);\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\n const curatedMap = useCuratedMap(pack);\n const extendedMap = useExtendedMap(pack);\n const lucideCurated = useCuratedMap(\"lucide\");\n const lucideExtended = useExtendedMap(\"lucide\");\n\n // Ensure the active pack is loading (covers cases where Icon mounts\n // before IconProvider's useEffect fires, e.g. during SSR hydration)\n if (!curatedCache.has(pack) && !loadingPacks.has(pack)) {\n loadPack(pack);\n }\n\n let Comp: IconComponent | undefined | null = null;\n let renderPack: IconPack = pack;\n\n // Tier 1: curated map (available once pack chunk has loaded)\n if (curatedMap) {\n Comp = curatedMap[name];\n }\n\n // Tier 2: extended map (available after barrel import completes)\n if (!Comp && extendedMap) {\n Comp = extendedMap[name];\n }\n\n // Tier 3: lucide fallback (curated first, then extended)\n if (!Comp && pack !== \"lucide\") {\n const fallback = lucideCurated?.[name] ?? lucideExtended?.[name];\n if (fallback) {\n Comp = fallback;\n renderPack = \"lucide\";\n }\n }\n\n if (!Comp) {\n const allMapsLoaded = curatedMap && extendedMap &&\n (pack === \"lucide\" || (lucideCurated && lucideExtended));\n if (allMapsLoaded) return null;\n return <span style={{ display: \"inline-block\", width: size, height: size }} className={className} />;\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
|
+
import { FiUpload, FiDownload, FiBookmark, FiStar, FiMenu, FiEdit2, FiLogOut, FiSend, FiPaperclip, FiMic, FiMoreVertical, FiArrowLeft, FiRotateCw, FiRotateCcw, FiTrash2, FiChevronDown, FiChevronUp, FiType, FiMinus, FiMessageSquare, FiCode, FiGrid, FiImage, FiLink, FiCheckSquare, FiList, FiAlignRight, FiAlignCenter, FiAlignLeft, FiSlash, FiUnderline, FiItalic, FiBold, FiCalendar, FiClock, FiAlertCircle, FiInfo, FiAlertTriangle, FiCheck, FiUser, FiBell, FiSearch, FiPlus, FiX, FiChevronRight, FiSettings, FiBarChart2, FiFolder, FiHome } from 'react-icons/fi';
|
|
4
|
+
|
|
5
|
+
var curated = {
|
|
6
|
+
"home": FiHome,
|
|
7
|
+
"folder": FiFolder,
|
|
8
|
+
"chart": FiBarChart2,
|
|
9
|
+
"settings": FiSettings,
|
|
10
|
+
"chevron-right": FiChevronRight,
|
|
11
|
+
"close": FiX,
|
|
12
|
+
"plus": FiPlus,
|
|
13
|
+
"search": FiSearch,
|
|
14
|
+
"bell": FiBell,
|
|
15
|
+
"user": FiUser,
|
|
16
|
+
"check": FiCheck,
|
|
17
|
+
"warning": FiAlertTriangle,
|
|
18
|
+
"info": FiInfo,
|
|
19
|
+
"error": FiAlertCircle,
|
|
20
|
+
"clock": FiClock,
|
|
21
|
+
"calendar": FiCalendar,
|
|
22
|
+
"bold": FiBold,
|
|
23
|
+
"italic": FiItalic,
|
|
24
|
+
"underline": FiUnderline,
|
|
25
|
+
"strikethrough": FiSlash,
|
|
26
|
+
"align-left": FiAlignLeft,
|
|
27
|
+
"align-center": FiAlignCenter,
|
|
28
|
+
"align-right": FiAlignRight,
|
|
29
|
+
"list": FiList,
|
|
30
|
+
"list-ordered": FiList,
|
|
31
|
+
"list-checks": FiCheckSquare,
|
|
32
|
+
"link": FiLink,
|
|
33
|
+
"image": FiImage,
|
|
34
|
+
"table": FiGrid,
|
|
35
|
+
"code": FiCode,
|
|
36
|
+
"quote": FiMessageSquare,
|
|
37
|
+
"minus": FiMinus,
|
|
38
|
+
"superscript": FiChevronUp,
|
|
39
|
+
"subscript": FiChevronDown,
|
|
40
|
+
"highlight": FiEdit2,
|
|
41
|
+
"type": FiType,
|
|
42
|
+
"chevron-up": FiChevronUp,
|
|
43
|
+
"chevron-down": FiChevronDown,
|
|
44
|
+
"trash": FiTrash2,
|
|
45
|
+
"undo": FiRotateCcw,
|
|
46
|
+
"redo": FiRotateCw,
|
|
47
|
+
"arrow-left": FiArrowLeft,
|
|
48
|
+
"grip-vertical": FiMoreVertical,
|
|
49
|
+
"mic": FiMic,
|
|
50
|
+
"paperclip": FiPaperclip,
|
|
51
|
+
"send": FiSend,
|
|
52
|
+
"log-out": FiLogOut,
|
|
53
|
+
"edit": FiEdit2,
|
|
54
|
+
"menu": FiMenu,
|
|
55
|
+
"star": FiStar,
|
|
56
|
+
"bookmark": FiBookmark,
|
|
57
|
+
"download": FiDownload,
|
|
58
|
+
"upload": FiUpload
|
|
59
|
+
};
|
|
60
|
+
function loadCurated() {
|
|
61
|
+
return curated;
|
|
62
|
+
}
|
|
63
|
+
async function loadExtended() {
|
|
64
|
+
const F = await import('react-icons/fi');
|
|
65
|
+
const extended = buildExtendedMap(F, {}, { stripPrefix: "Fi" });
|
|
66
|
+
Object.assign(extended, curated);
|
|
67
|
+
return extended;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { loadCurated, loadExtended };
|
|
71
|
+
//# sourceMappingURL=feather-432JQGUB.js.map
|
|
72
|
+
//# sourceMappingURL=feather-432JQGUB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/lib/icon-packs/feather.ts"],"names":[],"mappings":";;;;AAsBA,IAAM,OAAA,GAAmB;AAAA,EACvB,MAAA,EAAQ,MAAA;AAAA,EAAQ,QAAA,EAAU,QAAA;AAAA,EAAU,OAAA,EAAS,WAAA;AAAA,EAAa,UAAA,EAAY,UAAA;AAAA,EACtE,eAAA,EAAiB,cAAA;AAAA,EAAgB,OAAA,EAAS,GAAA;AAAA,EAAK,MAAA,EAAQ,MAAA;AAAA,EAAQ,QAAA,EAAU,QAAA;AAAA,EACzE,MAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA,EAAQ,MAAA;AAAA,EAAQ,OAAA,EAAS,OAAA;AAAA,EAAS,SAAA,EAAW,eAAA;AAAA,EAC7D,MAAA,EAAQ,MAAA;AAAA,EAAQ,OAAA,EAAS,aAAA;AAAA,EAAe,OAAA,EAAS,OAAA;AAAA,EAAS,UAAA,EAAY,UAAA;AAAA,EACtE,MAAA,EAAQ,MAAA;AAAA,EAAQ,QAAA,EAAU,QAAA;AAAA,EAAU,WAAA,EAAa,WAAA;AAAA,EAAa,eAAA,EAAiB,OAAA;AAAA,EAC/E,YAAA,EAAc,WAAA;AAAA,EAAa,cAAA,EAAgB,aAAA;AAAA,EAAe,aAAA,EAAe,YAAA;AAAA,EACzE,MAAA,EAAQ,MAAA;AAAA,EAAQ,cAAA,EAAgB,MAAA;AAAA,EAAQ,aAAA,EAAe,aAAA;AAAA,EACvD,MAAA,EAAQ,MAAA;AAAA,EAAQ,OAAA,EAAS,OAAA;AAAA,EAAS,OAAA,EAAS,MAAA;AAAA,EAAQ,MAAA,EAAQ,MAAA;AAAA,EAC3D,OAAA,EAAS,eAAA;AAAA,EAAiB,OAAA,EAAS,OAAA;AAAA,EAAS,aAAA,EAAe,WAAA;AAAA,EAC3D,WAAA,EAAa,aAAA;AAAA,EAAe,WAAA,EAAa,OAAA;AAAA,EAAS,MAAA,EAAQ,MAAA;AAAA,EAC1D,YAAA,EAAc,WAAA;AAAA,EAAa,cAAA,EAAgB,aAAA;AAAA,EAAe,OAAA,EAAS,QAAA;AAAA,EACnE,MAAA,EAAQ,WAAA;AAAA,EAAa,MAAA,EAAQ,UAAA;AAAA,EAC7B,YAAA,EAAc,WAAA;AAAA,EAAa,eAAA,EAAiB,cAAA;AAAA,EAC5C,KAAA,EAAO,KAAA;AAAA,EAAO,WAAA,EAAa,WAAA;AAAA,EAAa,MAAA,EAAQ,MAAA;AAAA,EAChD,SAAA,EAAW,QAAA;AAAA,EAAU,MAAA,EAAQ,OAAA;AAAA,EAAS,MAAA,EAAQ,MAAA;AAAA,EAC9C,MAAA,EAAQ,MAAA;AAAA,EAAQ,UAAA,EAAY,UAAA;AAAA,EAC5B,UAAA,EAAY,UAAA;AAAA,EAAY,QAAA,EAAU;AACpC,CAAA;AAEO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,OAAA;AACT;AAEA,eAAsB,YAAA,GAAiC;AACrD,EAAA,MAAM,CAAA,GAAI,MAAM,OAAO,gBAAgB,CAAA;AACvC,EAAA,MAAM,QAAA,GAAW,iBAAiB,CAAA,EAAyC,IAAI,EAAE,WAAA,EAAa,MAAM,CAAA;AACpG,EAAA,MAAA,CAAO,MAAA,CAAO,UAAU,OAAO,CAAA;AAC/B,EAAA,OAAO,QAAA;AACT","file":"feather-432JQGUB.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap } from './utils'\nimport {\n FiHome, FiFolder, FiBarChart2, FiSettings,\n FiChevronRight, FiX, FiPlus, FiSearch,\n FiBell, FiUser, FiCheck, FiAlertTriangle,\n FiInfo, FiAlertCircle, FiClock, FiCalendar,\n FiBold, FiItalic, FiUnderline, FiSlash,\n FiAlignLeft, FiAlignCenter, FiAlignRight,\n FiList, FiCheckSquare,\n FiLink, FiImage, FiGrid, FiCode,\n FiMessageSquare, FiMinus, FiChevronUp,\n FiChevronDown, FiEdit2, FiType,\n FiTrash2,\n FiRotateCcw, FiRotateCw,\n FiArrowLeft, FiMoreVertical,\n FiMic, FiPaperclip, FiSend,\n FiLogOut, FiMenu,\n FiStar, FiBookmark,\n FiDownload, FiUpload,\n} from \"react-icons/fi\"\n\nconst curated: IconMap = {\n \"home\": FiHome, \"folder\": FiFolder, \"chart\": FiBarChart2, \"settings\": FiSettings,\n \"chevron-right\": FiChevronRight, \"close\": FiX, \"plus\": FiPlus, \"search\": FiSearch,\n \"bell\": FiBell, \"user\": FiUser, \"check\": FiCheck, \"warning\": FiAlertTriangle,\n \"info\": FiInfo, \"error\": FiAlertCircle, \"clock\": FiClock, \"calendar\": FiCalendar,\n \"bold\": FiBold, \"italic\": FiItalic, \"underline\": FiUnderline, \"strikethrough\": FiSlash,\n \"align-left\": FiAlignLeft, \"align-center\": FiAlignCenter, \"align-right\": FiAlignRight,\n \"list\": FiList, \"list-ordered\": FiList, \"list-checks\": FiCheckSquare,\n \"link\": FiLink, \"image\": FiImage, \"table\": FiGrid, \"code\": FiCode,\n \"quote\": FiMessageSquare, \"minus\": FiMinus, \"superscript\": FiChevronUp,\n \"subscript\": FiChevronDown, \"highlight\": FiEdit2, \"type\": FiType,\n \"chevron-up\": FiChevronUp, \"chevron-down\": FiChevronDown, \"trash\": FiTrash2,\n \"undo\": FiRotateCcw, \"redo\": FiRotateCw,\n \"arrow-left\": FiArrowLeft, \"grip-vertical\": FiMoreVertical,\n \"mic\": FiMic, \"paperclip\": FiPaperclip, \"send\": FiSend,\n \"log-out\": FiLogOut, \"edit\": FiEdit2, \"menu\": FiMenu,\n \"star\": FiStar, \"bookmark\": FiBookmark,\n \"download\": FiDownload, \"upload\": FiUpload,\n}\n\nexport function loadCurated(): IconMap {\n return curated\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const F = await import(\"react-icons/fi\")\n const extended = buildExtendedMap(F as unknown as Record<string, unknown>, {}, { stripPrefix: \"Fi\" })\n Object.assign(extended, curated)\n return extended\n}\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { buildExtendedMap } from './chunk-GYVBRUO2.js';
|
|
2
|
+
import './chunk-5WRI5ZAA.js';
|
|
3
|
+
import { ArrowUpTrayIcon, ArrowDownTrayIcon, BookmarkIcon, StarIcon, Bars3Icon, PencilIcon, ArrowRightStartOnRectangleIcon, PaperAirplaneIcon, PaperClipIcon, MicrophoneIcon, Bars2Icon, ArrowLeftIcon, ArrowUturnRightIcon, ArrowUturnLeftIcon, TrashIcon, ChevronDownIcon, ChevronUpIcon, LanguageIcon, PaintBrushIcon, H2Icon, H1Icon, MinusIcon, ChatBubbleBottomCenterTextIcon, CodeBracketIcon, TableCellsIcon, PhotoIcon, LinkIcon, ClipboardDocumentCheckIcon, NumberedListIcon, ListBulletIcon, Bars3BottomRightIcon, Bars3BottomLeftIcon, StrikethroughIcon, UnderlineIcon, ItalicIcon, BoldIcon, CalendarDaysIcon, ClockIcon, ExclamationCircleIcon, InformationCircleIcon, ExclamationTriangleIcon, CheckIcon, UserIcon, BellIcon, MagnifyingGlassIcon, PlusIcon, XMarkIcon, ChevronRightIcon, Cog6ToothIcon, ChartBarIcon, FolderIcon, HomeIcon } from '@heroicons/react/24/outline';
|
|
4
|
+
|
|
5
|
+
var curated = {
|
|
6
|
+
"home": HomeIcon,
|
|
7
|
+
"folder": FolderIcon,
|
|
8
|
+
"chart": ChartBarIcon,
|
|
9
|
+
"settings": Cog6ToothIcon,
|
|
10
|
+
"chevron-right": ChevronRightIcon,
|
|
11
|
+
"close": XMarkIcon,
|
|
12
|
+
"plus": PlusIcon,
|
|
13
|
+
"search": MagnifyingGlassIcon,
|
|
14
|
+
"bell": BellIcon,
|
|
15
|
+
"user": UserIcon,
|
|
16
|
+
"check": CheckIcon,
|
|
17
|
+
"warning": ExclamationTriangleIcon,
|
|
18
|
+
"info": InformationCircleIcon,
|
|
19
|
+
"error": ExclamationCircleIcon,
|
|
20
|
+
"clock": ClockIcon,
|
|
21
|
+
"calendar": CalendarDaysIcon,
|
|
22
|
+
"bold": BoldIcon,
|
|
23
|
+
"italic": ItalicIcon,
|
|
24
|
+
"underline": UnderlineIcon,
|
|
25
|
+
"strikethrough": StrikethroughIcon,
|
|
26
|
+
"align-left": Bars3BottomLeftIcon,
|
|
27
|
+
"align-center": Bars3Icon,
|
|
28
|
+
"align-right": Bars3BottomRightIcon,
|
|
29
|
+
"list": ListBulletIcon,
|
|
30
|
+
"list-ordered": NumberedListIcon,
|
|
31
|
+
"list-checks": ClipboardDocumentCheckIcon,
|
|
32
|
+
"link": LinkIcon,
|
|
33
|
+
"image": PhotoIcon,
|
|
34
|
+
"table": TableCellsIcon,
|
|
35
|
+
"code": CodeBracketIcon,
|
|
36
|
+
"quote": ChatBubbleBottomCenterTextIcon,
|
|
37
|
+
"minus": MinusIcon,
|
|
38
|
+
"superscript": H1Icon,
|
|
39
|
+
"subscript": H2Icon,
|
|
40
|
+
"highlight": PaintBrushIcon,
|
|
41
|
+
"type": LanguageIcon,
|
|
42
|
+
"chevron-up": ChevronUpIcon,
|
|
43
|
+
"chevron-down": ChevronDownIcon,
|
|
44
|
+
"trash": TrashIcon,
|
|
45
|
+
"undo": ArrowUturnLeftIcon,
|
|
46
|
+
"redo": ArrowUturnRightIcon,
|
|
47
|
+
"arrow-left": ArrowLeftIcon,
|
|
48
|
+
"grip-vertical": Bars2Icon,
|
|
49
|
+
"mic": MicrophoneIcon,
|
|
50
|
+
"paperclip": PaperClipIcon,
|
|
51
|
+
"send": PaperAirplaneIcon,
|
|
52
|
+
"log-out": ArrowRightStartOnRectangleIcon,
|
|
53
|
+
"edit": PencilIcon,
|
|
54
|
+
"menu": Bars3Icon,
|
|
55
|
+
"star": StarIcon,
|
|
56
|
+
"bookmark": BookmarkIcon,
|
|
57
|
+
"download": ArrowDownTrayIcon,
|
|
58
|
+
"upload": ArrowUpTrayIcon
|
|
59
|
+
};
|
|
60
|
+
function loadCurated() {
|
|
61
|
+
return curated;
|
|
62
|
+
}
|
|
63
|
+
async function loadExtended() {
|
|
64
|
+
const H = await import('@heroicons/react/24/outline');
|
|
65
|
+
const extended = buildExtendedMap(H, {}, { stripSuffix: "Icon" });
|
|
66
|
+
Object.assign(extended, curated);
|
|
67
|
+
return extended;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { loadCurated, loadExtended };
|
|
71
|
+
//# sourceMappingURL=heroicons-CCKJHFZY.js.map
|
|
72
|
+
//# sourceMappingURL=heroicons-CCKJHFZY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/lib/icon-packs/heroicons.ts"],"names":[],"mappings":";;;;AA2BA,IAAM,OAAA,GAAmB;AAAA,EACvB,MAAA,EAAQ,QAAA;AAAA,EAAU,QAAA,EAAU,UAAA;AAAA,EAAY,OAAA,EAAS,YAAA;AAAA,EACjD,UAAA,EAAY,aAAA;AAAA,EAAe,eAAA,EAAiB,gBAAA;AAAA,EAC5C,OAAA,EAAS,SAAA;AAAA,EAAW,MAAA,EAAQ,QAAA;AAAA,EAAU,QAAA,EAAU,mBAAA;AAAA,EAChD,MAAA,EAAQ,QAAA;AAAA,EAAU,MAAA,EAAQ,QAAA;AAAA,EAAU,OAAA,EAAS,SAAA;AAAA,EAC7C,SAAA,EAAW,uBAAA;AAAA,EAAyB,MAAA,EAAQ,qBAAA;AAAA,EAC5C,OAAA,EAAS,qBAAA;AAAA,EAAuB,OAAA,EAAS,SAAA;AAAA,EAAW,UAAA,EAAY,gBAAA;AAAA,EAChE,MAAA,EAAQ,QAAA;AAAA,EAAU,QAAA,EAAU,UAAA;AAAA,EAAY,WAAA,EAAa,aAAA;AAAA,EACrD,eAAA,EAAiB,iBAAA;AAAA,EAAmB,YAAA,EAAc,mBAAA;AAAA,EAClD,cAAA,EAAgB,SAAA;AAAA,EAAW,aAAA,EAAe,oBAAA;AAAA,EAC1C,MAAA,EAAQ,cAAA;AAAA,EAAgB,cAAA,EAAgB,gBAAA;AAAA,EACxC,aAAA,EAAe,0BAAA;AAAA,EAA4B,MAAA,EAAQ,QAAA;AAAA,EACnD,OAAA,EAAS,SAAA;AAAA,EAAW,OAAA,EAAS,cAAA;AAAA,EAAgB,MAAA,EAAQ,eAAA;AAAA,EACrD,OAAA,EAAS,8BAAA;AAAA,EAAgC,OAAA,EAAS,SAAA;AAAA,EAClD,aAAA,EAAe,MAAA;AAAA,EAAQ,WAAA,EAAa,MAAA;AAAA,EACpC,WAAA,EAAa,cAAA;AAAA,EAAgB,MAAA,EAAQ,YAAA;AAAA,EACrC,YAAA,EAAc,aAAA;AAAA,EAAe,cAAA,EAAgB,eAAA;AAAA,EAAiB,OAAA,EAAS,SAAA;AAAA,EACvE,MAAA,EAAQ,kBAAA;AAAA,EAAoB,MAAA,EAAQ,mBAAA;AAAA,EACpC,YAAA,EAAc,aAAA;AAAA,EAAe,eAAA,EAAiB,SAAA;AAAA,EAC9C,KAAA,EAAO,cAAA;AAAA,EAAgB,WAAA,EAAa,aAAA;AAAA,EAAe,MAAA,EAAQ,iBAAA;AAAA,EAC3D,SAAA,EAAW,8BAAA;AAAA,EAAgC,MAAA,EAAQ,UAAA;AAAA,EAAY,MAAA,EAAQ,SAAA;AAAA,EACvE,MAAA,EAAQ,QAAA;AAAA,EAAU,UAAA,EAAY,YAAA;AAAA,EAC9B,UAAA,EAAY,iBAAA;AAAA,EAAmB,QAAA,EAAU;AAC3C,CAAA;AAEO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,OAAA;AACT;AAEA,eAAsB,YAAA,GAAiC;AACrD,EAAA,MAAM,CAAA,GAAI,MAAM,OAAO,6BAA6B,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,iBAAiB,CAAA,EAAyC,IAAI,EAAE,WAAA,EAAa,QAAQ,CAAA;AACtG,EAAA,MAAA,CAAO,MAAA,CAAO,UAAU,OAAO,CAAA;AAC/B,EAAA,OAAO,QAAA;AACT","file":"heroicons-CCKJHFZY.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap } from './utils'\nimport {\n HomeIcon, FolderIcon, ChartBarIcon,\n Cog6ToothIcon, ChevronRightIcon,\n XMarkIcon, PlusIcon, MagnifyingGlassIcon,\n BellIcon, UserIcon, CheckIcon,\n ExclamationTriangleIcon, InformationCircleIcon,\n ExclamationCircleIcon, ClockIcon, CalendarDaysIcon,\n BoldIcon, ItalicIcon, UnderlineIcon,\n StrikethroughIcon, Bars3BottomLeftIcon,\n Bars3Icon, Bars3BottomRightIcon,\n ListBulletIcon, NumberedListIcon,\n ClipboardDocumentCheckIcon, LinkIcon,\n PhotoIcon, TableCellsIcon, CodeBracketIcon,\n ChatBubbleBottomCenterTextIcon, MinusIcon,\n H1Icon, H2Icon,\n PaintBrushIcon, LanguageIcon,\n ChevronUpIcon, ChevronDownIcon, TrashIcon,\n ArrowUturnLeftIcon, ArrowUturnRightIcon,\n ArrowLeftIcon, Bars2Icon,\n MicrophoneIcon, PaperClipIcon, PaperAirplaneIcon,\n ArrowRightStartOnRectangleIcon, PencilIcon,\n StarIcon, BookmarkIcon,\n ArrowDownTrayIcon, ArrowUpTrayIcon,\n} from \"@heroicons/react/24/outline\"\n\nconst curated: IconMap = {\n \"home\": HomeIcon, \"folder\": FolderIcon, \"chart\": ChartBarIcon,\n \"settings\": Cog6ToothIcon, \"chevron-right\": ChevronRightIcon,\n \"close\": XMarkIcon, \"plus\": PlusIcon, \"search\": MagnifyingGlassIcon,\n \"bell\": BellIcon, \"user\": UserIcon, \"check\": CheckIcon,\n \"warning\": ExclamationTriangleIcon, \"info\": InformationCircleIcon,\n \"error\": ExclamationCircleIcon, \"clock\": ClockIcon, \"calendar\": CalendarDaysIcon,\n \"bold\": BoldIcon, \"italic\": ItalicIcon, \"underline\": UnderlineIcon,\n \"strikethrough\": StrikethroughIcon, \"align-left\": Bars3BottomLeftIcon,\n \"align-center\": Bars3Icon, \"align-right\": Bars3BottomRightIcon,\n \"list\": ListBulletIcon, \"list-ordered\": NumberedListIcon,\n \"list-checks\": ClipboardDocumentCheckIcon, \"link\": LinkIcon,\n \"image\": PhotoIcon, \"table\": TableCellsIcon, \"code\": CodeBracketIcon,\n \"quote\": ChatBubbleBottomCenterTextIcon, \"minus\": MinusIcon,\n \"superscript\": H1Icon, \"subscript\": H2Icon,\n \"highlight\": PaintBrushIcon, \"type\": LanguageIcon,\n \"chevron-up\": ChevronUpIcon, \"chevron-down\": ChevronDownIcon, \"trash\": TrashIcon,\n \"undo\": ArrowUturnLeftIcon, \"redo\": ArrowUturnRightIcon,\n \"arrow-left\": ArrowLeftIcon, \"grip-vertical\": Bars2Icon,\n \"mic\": MicrophoneIcon, \"paperclip\": PaperClipIcon, \"send\": PaperAirplaneIcon,\n \"log-out\": ArrowRightStartOnRectangleIcon, \"edit\": PencilIcon, \"menu\": Bars3Icon,\n \"star\": StarIcon, \"bookmark\": BookmarkIcon,\n \"download\": ArrowDownTrayIcon, \"upload\": ArrowUpTrayIcon,\n}\n\nexport function loadCurated(): IconMap {\n return curated\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const H = await import(\"@heroicons/react/24/outline\")\n const extended = buildExtendedMap(H as unknown as Record<string, unknown>, {}, { stripSuffix: \"Icon\" })\n Object.assign(extended, curated)\n return extended\n}\n"]}
|
package/dist/icons.d.ts
CHANGED
|
@@ -21,10 +21,18 @@ declare function IconProvider({ pack, weight, children }: {
|
|
|
21
21
|
weight: number;
|
|
22
22
|
children: ReactNode;
|
|
23
23
|
}): react_jsx_runtime.JSX.Element;
|
|
24
|
+
/**
|
|
25
|
+
* Start loading a pack's icon chunk before React mounts. Call this in your
|
|
26
|
+
* app's entry point (e.g. main.tsx) for the fastest possible cold start:
|
|
27
|
+
*
|
|
28
|
+
* import { preloadPack } from 'gridsmith-ui/icons'
|
|
29
|
+
* preloadPack('lucide')
|
|
30
|
+
*/
|
|
31
|
+
declare function preloadPack(pack: IconPack): void;
|
|
24
32
|
declare function Icon({ name, size, className }: {
|
|
25
33
|
name: IconName;
|
|
26
34
|
size?: number;
|
|
27
35
|
className?: string;
|
|
28
36
|
}): react_jsx_runtime.JSX.Element | null;
|
|
29
37
|
|
|
30
|
-
export { Icon, type IconName, type IconPack, IconProvider };
|
|
38
|
+
export { Icon, type IconName, type IconPack, IconProvider, preloadPack };
|
package/dist/icons.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ declare function DropdownMenu({ trigger, items, align, className, container }: D
|
|
|
43
43
|
|
|
44
44
|
interface BulkAction {
|
|
45
45
|
label: string;
|
|
46
|
+
icon?: IconName;
|
|
46
47
|
onClick: () => void;
|
|
47
48
|
variant?: "default" | "destructive";
|
|
48
49
|
}
|
|
@@ -332,15 +333,17 @@ interface TransferListProps {
|
|
|
332
333
|
}
|
|
333
334
|
declare function TransferList({ available, selected, onChange, availableTitle, selectedTitle, searchable, className, ref, }: TransferListProps): react_jsx_runtime.JSX.Element;
|
|
334
335
|
|
|
336
|
+
type ToolbarGroup = "blockType" | "fontFamily" | "textSize" | "formatting" | "colors" | "alignment" | "lists" | "blocks" | "insert" | "extras" | "history";
|
|
335
337
|
interface RichTextEditorProps {
|
|
336
338
|
content?: string;
|
|
337
339
|
placeholder?: string;
|
|
338
340
|
onChange?: (html: string) => void;
|
|
339
341
|
editable?: boolean;
|
|
342
|
+
toolbar?: ToolbarGroup[] | "full" | "minimal";
|
|
340
343
|
className?: string;
|
|
341
344
|
ref?: Ref<HTMLDivElement>;
|
|
342
345
|
}
|
|
343
|
-
declare function RichTextEditor({ content, placeholder, onChange, editable, className, ref, }: RichTextEditorProps): react_jsx_runtime.JSX.Element | null;
|
|
346
|
+
declare function RichTextEditor({ content, placeholder, onChange, editable, toolbar, className, ref, }: RichTextEditorProps): react_jsx_runtime.JSX.Element | null;
|
|
344
347
|
|
|
345
348
|
interface MentionSuggestion {
|
|
346
349
|
id: string;
|
|
@@ -494,6 +497,7 @@ interface EventCategory {
|
|
|
494
497
|
label: string;
|
|
495
498
|
}
|
|
496
499
|
type CalendarView = "month" | "week" | "year";
|
|
500
|
+
type CalendarSize = "default" | "compact";
|
|
497
501
|
interface CalendarProps {
|
|
498
502
|
events?: CalendarEvent[];
|
|
499
503
|
view?: CalendarView;
|
|
@@ -510,10 +514,11 @@ interface CalendarProps {
|
|
|
510
514
|
onDayClick?: (date: Date) => void;
|
|
511
515
|
categories?: Record<string, EventCategory>;
|
|
512
516
|
weekStartsOn?: 0 | 1;
|
|
517
|
+
size?: CalendarSize;
|
|
513
518
|
className?: string;
|
|
514
519
|
}
|
|
515
520
|
|
|
516
|
-
declare function Calendar({ events, view: controlledView, defaultView, onViewChange, date: controlledDate, defaultDate, onDateChange, onDateRangeChange, onEventClick, onDayClick, categories, weekStartsOn, className, }: CalendarProps): react_jsx_runtime.JSX.Element;
|
|
521
|
+
declare function Calendar({ events, view: controlledView, defaultView, onViewChange, date: controlledDate, defaultDate, onDateChange, onDateRangeChange, onEventClick, onDayClick, categories, weekStartsOn, size, className, }: CalendarProps): react_jsx_runtime.JSX.Element;
|
|
517
522
|
|
|
518
523
|
type BadgeVariant = "default" | "neutral" | "subtle" | "success" | "success-soft" | "warning" | "warning-soft" | "error" | "error-soft" | "outline";
|
|
519
524
|
type BadgeSize = "xs" | "sm" | "md";
|
|
@@ -570,7 +575,7 @@ interface TimelineItem {
|
|
|
570
575
|
}
|
|
571
576
|
interface TimelineProps {
|
|
572
577
|
items: TimelineItem[];
|
|
573
|
-
orientation?: "vertical" | "horizontal";
|
|
578
|
+
orientation?: "vertical" | "horizontal" | "responsive";
|
|
574
579
|
className?: string;
|
|
575
580
|
ref?: Ref<HTMLDivElement>;
|
|
576
581
|
}
|
|
@@ -733,6 +738,7 @@ interface StackedListItem {
|
|
|
733
738
|
interface StackedListProps {
|
|
734
739
|
items: StackedListItem[];
|
|
735
740
|
divided?: boolean;
|
|
741
|
+
flush?: boolean;
|
|
736
742
|
className?: string;
|
|
737
743
|
}
|
|
738
744
|
declare const StackedList: react.ForwardRefExoticComponent<StackedListProps & react.RefAttributes<HTMLUListElement>>;
|
|
@@ -1043,7 +1049,7 @@ interface DrawerProps {
|
|
|
1043
1049
|
onClose: () => void;
|
|
1044
1050
|
position?: "left" | "right" | "bottom";
|
|
1045
1051
|
width?: string;
|
|
1046
|
-
title?:
|
|
1052
|
+
title?: ReactNode;
|
|
1047
1053
|
children: ReactNode;
|
|
1048
1054
|
footer?: ReactNode;
|
|
1049
1055
|
container?: Element | DocumentFragment;
|
|
@@ -1262,9 +1268,10 @@ type PanelGroupProps = ComponentProps<typeof Group>;
|
|
|
1262
1268
|
type Direction = "horizontal" | "vertical";
|
|
1263
1269
|
interface ResizablePanelGroupProps extends Omit<PanelGroupProps, "className" | "orientation"> {
|
|
1264
1270
|
direction?: Direction;
|
|
1271
|
+
stackOnMobile?: boolean;
|
|
1265
1272
|
className?: string;
|
|
1266
1273
|
}
|
|
1267
|
-
declare function ResizablePanelGroup({ className, direction, ...props }: ResizablePanelGroupProps): react_jsx_runtime.JSX.Element;
|
|
1274
|
+
declare function ResizablePanelGroup({ className, direction, stackOnMobile, ...props }: ResizablePanelGroupProps): react_jsx_runtime.JSX.Element;
|
|
1268
1275
|
type PanelProps = ComponentProps<typeof Panel>;
|
|
1269
1276
|
interface ResizablePanelProps extends Omit<PanelProps, "className"> {
|
|
1270
1277
|
className?: string;
|