@jameskabz/nextcraft-ui 0.6.8 → 0.6.10
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/components/craft-icon.cjs +6 -3
- package/dist/components/craft-icon.cjs.map +1 -1
- package/dist/components/craft-icon.js +6 -3
- package/dist/components/craft-icon.js.map +1 -1
- package/dist/components/layout/sidebar.cjs +2 -1
- package/dist/components/layout/sidebar.cjs.map +1 -1
- package/dist/components/layout/sidebar.d.cts +1 -1
- package/dist/components/layout/sidebar.d.ts +1 -1
- package/dist/components/layout/sidebar.js +2 -1
- package/dist/components/layout/sidebar.js.map +1 -1
- package/package.json +4 -2
|
@@ -58,14 +58,17 @@ function CraftIcon({
|
|
|
58
58
|
let mounted = true;
|
|
59
59
|
(async () => {
|
|
60
60
|
try {
|
|
61
|
-
const mod = await
|
|
62
|
-
"return import('lucide-react/dynamic')"
|
|
63
|
-
)();
|
|
61
|
+
const mod = await import("lucide-react/dynamic");
|
|
64
62
|
if (mounted) {
|
|
65
63
|
setLucideIcon(() => mod.DynamicIcon);
|
|
66
64
|
}
|
|
67
65
|
} catch {
|
|
68
66
|
if (mounted) setLucideIcon(null);
|
|
67
|
+
if (process.env.NODE_ENV !== "production") {
|
|
68
|
+
console.warn(
|
|
69
|
+
"[CraftIcon] Failed to load lucide-react/dynamic. Ensure lucide-react is installed."
|
|
70
|
+
);
|
|
71
|
+
}
|
|
69
72
|
}
|
|
70
73
|
})();
|
|
71
74
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/craft-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type CraftIconRegistry = Record<string, React.ReactNode>;\n\nconst CraftIconContext = React.createContext<CraftIconRegistry | null>(null);\n\nexport type CraftIconProviderProps = {\n icons: CraftIconRegistry;\n children: React.ReactNode;\n};\n\nexport function CraftIconProvider({ icons, children }: CraftIconProviderProps) {\n return <CraftIconContext.Provider value={icons}>{children}</CraftIconContext.Provider>;\n}\n\nexport type CraftIconProps = {\n name: string;\n className?: string;\n \"aria-label\"?: string;\n icons?: CraftIconRegistry;\n useLucide?: boolean;\n};\n\ntype DynamicIconComponent = React.ComponentType<{\n name: string;\n className?: string;\n \"aria-hidden\"?: boolean;\n \"aria-label\"?: string;\n}>;\n\nexport function CraftIcon({\n name,\n className,\n \"aria-label\": ariaLabel,\n icons,\n useLucide = true,\n}: CraftIconProps) {\n const contextRegistry = React.useContext(CraftIconContext);\n const registry = icons ?? contextRegistry;\n const icon = registry?.[name];\n const [LucideIcon, setLucideIcon] = React.useState<DynamicIconComponent | null>(\n null\n );\n\n React.useEffect(() => {\n if (!useLucide || icon || LucideIcon) return;\n let mounted = true;\n (async () => {\n try {\n const mod = await (
|
|
1
|
+
{"version":3,"sources":["../../src/components/craft-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type CraftIconRegistry = Record<string, React.ReactNode>;\n\nconst CraftIconContext = React.createContext<CraftIconRegistry | null>(null);\n\nexport type CraftIconProviderProps = {\n icons: CraftIconRegistry;\n children: React.ReactNode;\n};\n\nexport function CraftIconProvider({ icons, children }: CraftIconProviderProps) {\n return <CraftIconContext.Provider value={icons}>{children}</CraftIconContext.Provider>;\n}\n\nexport type CraftIconProps = {\n name: string;\n className?: string;\n \"aria-label\"?: string;\n icons?: CraftIconRegistry;\n useLucide?: boolean;\n};\n\ntype DynamicIconComponent = React.ComponentType<{\n name: string;\n className?: string;\n \"aria-hidden\"?: boolean;\n \"aria-label\"?: string;\n}>;\n\nexport function CraftIcon({\n name,\n className,\n \"aria-label\": ariaLabel,\n icons,\n useLucide = true,\n}: CraftIconProps) {\n const contextRegistry = React.useContext(CraftIconContext);\n const registry = icons ?? contextRegistry;\n const icon = registry?.[name];\n const [LucideIcon, setLucideIcon] = React.useState<DynamicIconComponent | null>(\n null\n );\n\n React.useEffect(() => {\n if (!useLucide || icon || LucideIcon) return;\n let mounted = true;\n (async () => {\n try {\n const mod = await import(\"lucide-react/dynamic\");\n if (mounted) {\n setLucideIcon(() => mod.DynamicIcon as DynamicIconComponent);\n }\n } catch {\n if (mounted) setLucideIcon(null);\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"[CraftIcon] Failed to load lucide-react/dynamic. Ensure lucide-react is installed.\"\n );\n }\n }\n })();\n return () => {\n mounted = false;\n };\n }, [LucideIcon, icon, useLucide]);\n\n if (!icon) {\n if (!useLucide) return null;\n if (!LucideIcon) return null;\n return (\n <LucideIcon\n name={name}\n className={className}\n aria-hidden={ariaLabel ? undefined : true}\n aria-label={ariaLabel}\n />\n );\n }\n\n type IconElementProps = {\n className?: string;\n \"aria-hidden\"?: boolean;\n \"aria-label\"?: string;\n };\n\n if (React.isValidElement<IconElementProps>(icon)) {\n return React.cloneElement(icon, {\n className: cn(icon.props.className, className),\n \"aria-hidden\": ariaLabel ? undefined : true,\n \"aria-label\": ariaLabel,\n });\n }\n\n return (\n <span className={className} aria-label={ariaLabel}>\n {icon}\n </span>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBS;AAdT,YAAuB;AAEvB,gBAAmB;AAInB,MAAM,mBAAmB,MAAM,cAAwC,IAAI;AAOpE,SAAS,kBAAkB,EAAE,OAAO,SAAS,GAA2B;AAC7E,SAAO,4CAAC,iBAAiB,UAAjB,EAA0B,OAAO,OAAQ,UAAS;AAC5D;AAiBO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,YAAY;AACd,GAAmB;AACjB,QAAM,kBAAkB,MAAM,WAAW,gBAAgB;AACzD,QAAM,WAAW,wBAAS;AAC1B,QAAM,OAAO,qCAAW;AACxB,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM;AAAA,IACxC;AAAA,EACF;AAEA,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,aAAa,QAAQ,WAAY;AACtC,QAAI,UAAU;AACd,KAAC,YAAY;AACX,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,sBAAsB;AAC/C,YAAI,SAAS;AACX,wBAAc,MAAM,IAAI,WAAmC;AAAA,QAC7D;AAAA,MACF,QAAQ;AACN,YAAI,QAAS,eAAc,IAAI;AAC/B,YAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,kBAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,gBAAU;AAAA,IACZ;AAAA,EACF,GAAG,CAAC,YAAY,MAAM,SAAS,CAAC;AAEhC,MAAI,CAAC,MAAM;AACT,QAAI,CAAC,UAAW,QAAO;AACvB,QAAI,CAAC,WAAY,QAAO;AACxB,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,eAAa,YAAY,SAAY;AAAA,QACrC,cAAY;AAAA;AAAA,IACd;AAAA,EAEJ;AAQA,MAAI,MAAM,eAAiC,IAAI,GAAG;AAChD,WAAO,MAAM,aAAa,MAAM;AAAA,MAC9B,eAAW,cAAG,KAAK,MAAM,WAAW,SAAS;AAAA,MAC7C,eAAe,YAAY,SAAY;AAAA,MACvC,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,SACE,4CAAC,UAAK,WAAsB,cAAY,WACrC,gBACH;AAEJ;","names":[]}
|
|
@@ -24,14 +24,17 @@ function CraftIcon({
|
|
|
24
24
|
let mounted = true;
|
|
25
25
|
(async () => {
|
|
26
26
|
try {
|
|
27
|
-
const mod = await
|
|
28
|
-
"return import('lucide-react/dynamic')"
|
|
29
|
-
)();
|
|
27
|
+
const mod = await import("lucide-react/dynamic");
|
|
30
28
|
if (mounted) {
|
|
31
29
|
setLucideIcon(() => mod.DynamicIcon);
|
|
32
30
|
}
|
|
33
31
|
} catch {
|
|
34
32
|
if (mounted) setLucideIcon(null);
|
|
33
|
+
if (process.env.NODE_ENV !== "production") {
|
|
34
|
+
console.warn(
|
|
35
|
+
"[CraftIcon] Failed to load lucide-react/dynamic. Ensure lucide-react is installed."
|
|
36
|
+
);
|
|
37
|
+
}
|
|
35
38
|
}
|
|
36
39
|
})();
|
|
37
40
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/craft-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type CraftIconRegistry = Record<string, React.ReactNode>;\n\nconst CraftIconContext = React.createContext<CraftIconRegistry | null>(null);\n\nexport type CraftIconProviderProps = {\n icons: CraftIconRegistry;\n children: React.ReactNode;\n};\n\nexport function CraftIconProvider({ icons, children }: CraftIconProviderProps) {\n return <CraftIconContext.Provider value={icons}>{children}</CraftIconContext.Provider>;\n}\n\nexport type CraftIconProps = {\n name: string;\n className?: string;\n \"aria-label\"?: string;\n icons?: CraftIconRegistry;\n useLucide?: boolean;\n};\n\ntype DynamicIconComponent = React.ComponentType<{\n name: string;\n className?: string;\n \"aria-hidden\"?: boolean;\n \"aria-label\"?: string;\n}>;\n\nexport function CraftIcon({\n name,\n className,\n \"aria-label\": ariaLabel,\n icons,\n useLucide = true,\n}: CraftIconProps) {\n const contextRegistry = React.useContext(CraftIconContext);\n const registry = icons ?? contextRegistry;\n const icon = registry?.[name];\n const [LucideIcon, setLucideIcon] = React.useState<DynamicIconComponent | null>(\n null\n );\n\n React.useEffect(() => {\n if (!useLucide || icon || LucideIcon) return;\n let mounted = true;\n (async () => {\n try {\n const mod = await (
|
|
1
|
+
{"version":3,"sources":["../../src/components/craft-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type CraftIconRegistry = Record<string, React.ReactNode>;\n\nconst CraftIconContext = React.createContext<CraftIconRegistry | null>(null);\n\nexport type CraftIconProviderProps = {\n icons: CraftIconRegistry;\n children: React.ReactNode;\n};\n\nexport function CraftIconProvider({ icons, children }: CraftIconProviderProps) {\n return <CraftIconContext.Provider value={icons}>{children}</CraftIconContext.Provider>;\n}\n\nexport type CraftIconProps = {\n name: string;\n className?: string;\n \"aria-label\"?: string;\n icons?: CraftIconRegistry;\n useLucide?: boolean;\n};\n\ntype DynamicIconComponent = React.ComponentType<{\n name: string;\n className?: string;\n \"aria-hidden\"?: boolean;\n \"aria-label\"?: string;\n}>;\n\nexport function CraftIcon({\n name,\n className,\n \"aria-label\": ariaLabel,\n icons,\n useLucide = true,\n}: CraftIconProps) {\n const contextRegistry = React.useContext(CraftIconContext);\n const registry = icons ?? contextRegistry;\n const icon = registry?.[name];\n const [LucideIcon, setLucideIcon] = React.useState<DynamicIconComponent | null>(\n null\n );\n\n React.useEffect(() => {\n if (!useLucide || icon || LucideIcon) return;\n let mounted = true;\n (async () => {\n try {\n const mod = await import(\"lucide-react/dynamic\");\n if (mounted) {\n setLucideIcon(() => mod.DynamicIcon as DynamicIconComponent);\n }\n } catch {\n if (mounted) setLucideIcon(null);\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"[CraftIcon] Failed to load lucide-react/dynamic. Ensure lucide-react is installed.\"\n );\n }\n }\n })();\n return () => {\n mounted = false;\n };\n }, [LucideIcon, icon, useLucide]);\n\n if (!icon) {\n if (!useLucide) return null;\n if (!LucideIcon) return null;\n return (\n <LucideIcon\n name={name}\n className={className}\n aria-hidden={ariaLabel ? undefined : true}\n aria-label={ariaLabel}\n />\n );\n }\n\n type IconElementProps = {\n className?: string;\n \"aria-hidden\"?: boolean;\n \"aria-label\"?: string;\n };\n\n if (React.isValidElement<IconElementProps>(icon)) {\n return React.cloneElement(icon, {\n className: cn(icon.props.className, className),\n \"aria-hidden\": ariaLabel ? undefined : true,\n \"aria-label\": ariaLabel,\n });\n }\n\n return (\n <span className={className} aria-label={ariaLabel}>\n {icon}\n </span>\n );\n}\n"],"mappings":";AAgBS;AAdT,YAAY,WAAW;AAEvB,SAAS,UAAU;AAInB,MAAM,mBAAmB,MAAM,cAAwC,IAAI;AAOpE,SAAS,kBAAkB,EAAE,OAAO,SAAS,GAA2B;AAC7E,SAAO,oBAAC,iBAAiB,UAAjB,EAA0B,OAAO,OAAQ,UAAS;AAC5D;AAiBO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,YAAY;AACd,GAAmB;AACjB,QAAM,kBAAkB,MAAM,WAAW,gBAAgB;AACzD,QAAM,WAAW,wBAAS;AAC1B,QAAM,OAAO,qCAAW;AACxB,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM;AAAA,IACxC;AAAA,EACF;AAEA,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,aAAa,QAAQ,WAAY;AACtC,QAAI,UAAU;AACd,KAAC,YAAY;AACX,UAAI;AACF,cAAM,MAAM,MAAM,OAAO,sBAAsB;AAC/C,YAAI,SAAS;AACX,wBAAc,MAAM,IAAI,WAAmC;AAAA,QAC7D;AAAA,MACF,QAAQ;AACN,YAAI,QAAS,eAAc,IAAI;AAC/B,YAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,kBAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,gBAAU;AAAA,IACZ;AAAA,EACF,GAAG,CAAC,YAAY,MAAM,SAAS,CAAC;AAEhC,MAAI,CAAC,MAAM;AACT,QAAI,CAAC,UAAW,QAAO;AACvB,QAAI,CAAC,WAAY,QAAO;AACxB,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,eAAa,YAAY,SAAY;AAAA,QACrC,cAAY;AAAA;AAAA,IACd;AAAA,EAEJ;AAQA,MAAI,MAAM,eAAiC,IAAI,GAAG;AAChD,WAAO,MAAM,aAAa,MAAM;AAAA,MAC9B,WAAW,GAAG,KAAK,MAAM,WAAW,SAAS;AAAA,MAC7C,eAAe,YAAY,SAAY;AAAA,MACvC,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,SACE,oBAAC,UAAK,WAAsB,cAAY,WACrC,gBACH;AAEJ;","names":[]}
|
|
@@ -22,6 +22,7 @@ __export(sidebar_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(sidebar_exports);
|
|
24
24
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
|
+
var import_craft_icon = require("../../components/craft-icon");
|
|
25
26
|
var import_cn = require("../../utils/cn");
|
|
26
27
|
function Sidebar({ className, title, items, footer, ...props }) {
|
|
27
28
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -45,7 +46,7 @@ function Sidebar({ className, title, items, footer, ...props }) {
|
|
|
45
46
|
item.active ? "bg-[rgb(var(--nc-accent-1)/0.25)] text-[rgb(var(--nc-fg))]" : "text-[rgb(var(--nc-fg-muted))] hover:bg-[rgb(var(--nc-surface)/0.12)] hover:text-[rgb(var(--nc-fg))]"
|
|
46
47
|
),
|
|
47
48
|
children: [
|
|
48
|
-
item.icon,
|
|
49
|
+
typeof item.icon === "string" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_craft_icon.CraftIcon, { name: item.icon, className: "h-4 w-4" }) : item.icon,
|
|
49
50
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: item.label })
|
|
50
51
|
]
|
|
51
52
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/layout/sidebar.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type SidebarItem = {\n label: React.ReactNode;\n href?: string;\n icon?: React.ReactNode;\n active?: boolean;\n};\n\nexport type SidebarProps = React.HTMLAttributes<HTMLElement> & {\n title?: React.ReactNode;\n items: SidebarItem[];\n footer?: React.ReactNode;\n};\n\nexport function Sidebar({ className, title, items, footer, ...props }: SidebarProps) {\n return (\n <aside\n className={cn(\n \"flex h-full w-full flex-col gap-6 rounded-3xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-6 text-[rgb(var(--nc-fg))] backdrop-blur-xl\",\n className\n )}\n {...props}\n >\n {title && <div className=\"text-lg font-semibold\">{title}</div>}\n <nav className=\"flex flex-col gap-2\">\n {items.map((item, index) => (\n <a\n key={`${item.label}-${index}`}\n href={item.href ?? \"#\"}\n className={cn(\n \"flex items-center gap-3 rounded-2xl px-3 py-2 text-sm transition\",\n item.active\n ? \"bg-[rgb(var(--nc-accent-1)/0.25)] text-[rgb(var(--nc-fg))]\"\n : \"text-[rgb(var(--nc-fg-muted))] hover:bg-[rgb(var(--nc-surface)/0.12)] hover:text-[rgb(var(--nc-fg))]\"\n )}\n >\n {item.icon}\n <span>{item.label}</span>\n </a>\n ))}\n </nav>\n {footer && <div className=\"mt-auto pt-4\">{footer}</div>}\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
1
|
+
{"version":3,"sources":["../../../src/components/layout/sidebar.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { CraftIcon } from \"@/components/craft-icon\";\nimport { cn } from \"@/utils/cn\";\n\nexport type SidebarItem = {\n label: React.ReactNode;\n href?: string;\n icon?: React.ReactNode | string;\n active?: boolean;\n};\n\nexport type SidebarProps = React.HTMLAttributes<HTMLElement> & {\n title?: React.ReactNode;\n items: SidebarItem[];\n footer?: React.ReactNode;\n};\n\nexport function Sidebar({ className, title, items, footer, ...props }: SidebarProps) {\n return (\n <aside\n className={cn(\n \"flex h-full w-full flex-col gap-6 rounded-3xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-6 text-[rgb(var(--nc-fg))] backdrop-blur-xl\",\n className\n )}\n {...props}\n >\n {title && <div className=\"text-lg font-semibold\">{title}</div>}\n <nav className=\"flex flex-col gap-2\">\n {items.map((item, index) => (\n <a\n key={`${item.label}-${index}`}\n href={item.href ?? \"#\"}\n className={cn(\n \"flex items-center gap-3 rounded-2xl px-3 py-2 text-sm transition\",\n item.active\n ? \"bg-[rgb(var(--nc-accent-1)/0.25)] text-[rgb(var(--nc-fg))]\"\n : \"text-[rgb(var(--nc-fg-muted))] hover:bg-[rgb(var(--nc-surface)/0.12)] hover:text-[rgb(var(--nc-fg))]\"\n )}\n >\n {typeof item.icon === \"string\" ? (\n <CraftIcon name={item.icon} className=\"h-4 w-4\" />\n ) : (\n item.icon\n )}\n <span>{item.label}</span>\n </a>\n ))}\n </nav>\n {footer && <div className=\"mt-auto pt-4\">{footer}</div>}\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BgB;AAzBhB,wBAA0B;AAC1B,gBAAmB;AAeZ,SAAS,QAAQ,EAAE,WAAW,OAAO,OAAO,QAAQ,GAAG,MAAM,GAAiB;AACnF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,iBAAS,4CAAC,SAAI,WAAU,yBAAyB,iBAAM;AAAA,QACxD,4CAAC,SAAI,WAAU,uBACZ,gBAAM,IAAI,CAAC,MAAM,UAAO;AA7BjC;AA8BU;AAAA,YAAC;AAAA;AAAA,cAEC,OAAM,UAAK,SAAL,YAAa;AAAA,cACnB,eAAW;AAAA,gBACT;AAAA,gBACA,KAAK,SACD,+DACA;AAAA,cACN;AAAA,cAEC;AAAA,uBAAO,KAAK,SAAS,WACpB,4CAAC,+BAAU,MAAM,KAAK,MAAM,WAAU,WAAU,IAEhD,KAAK;AAAA,gBAEP,4CAAC,UAAM,eAAK,OAAM;AAAA;AAAA;AAAA,YAdb,GAAG,KAAK,KAAK,IAAI,KAAK;AAAA,UAe7B;AAAA,SACD,GACH;AAAA,QACC,UAAU,4CAAC,SAAI,WAAU,gBAAgB,kBAAO;AAAA;AAAA;AAAA,EACnD;AAEJ;","names":[]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CraftIcon } from "../../components/craft-icon";
|
|
2
3
|
import { cn } from "../../utils/cn";
|
|
3
4
|
function Sidebar({ className, title, items, footer, ...props }) {
|
|
4
5
|
return /* @__PURE__ */ jsxs(
|
|
@@ -22,7 +23,7 @@ function Sidebar({ className, title, items, footer, ...props }) {
|
|
|
22
23
|
item.active ? "bg-[rgb(var(--nc-accent-1)/0.25)] text-[rgb(var(--nc-fg))]" : "text-[rgb(var(--nc-fg-muted))] hover:bg-[rgb(var(--nc-surface)/0.12)] hover:text-[rgb(var(--nc-fg))]"
|
|
23
24
|
),
|
|
24
25
|
children: [
|
|
25
|
-
item.icon,
|
|
26
|
+
typeof item.icon === "string" ? /* @__PURE__ */ jsx(CraftIcon, { name: item.icon, className: "h-4 w-4" }) : item.icon,
|
|
26
27
|
/* @__PURE__ */ jsx("span", { children: item.label })
|
|
27
28
|
]
|
|
28
29
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/layout/sidebar.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type SidebarItem = {\n label: React.ReactNode;\n href?: string;\n icon?: React.ReactNode;\n active?: boolean;\n};\n\nexport type SidebarProps = React.HTMLAttributes<HTMLElement> & {\n title?: React.ReactNode;\n items: SidebarItem[];\n footer?: React.ReactNode;\n};\n\nexport function Sidebar({ className, title, items, footer, ...props }: SidebarProps) {\n return (\n <aside\n className={cn(\n \"flex h-full w-full flex-col gap-6 rounded-3xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-6 text-[rgb(var(--nc-fg))] backdrop-blur-xl\",\n className\n )}\n {...props}\n >\n {title && <div className=\"text-lg font-semibold\">{title}</div>}\n <nav className=\"flex flex-col gap-2\">\n {items.map((item, index) => (\n <a\n key={`${item.label}-${index}`}\n href={item.href ?? \"#\"}\n className={cn(\n \"flex items-center gap-3 rounded-2xl px-3 py-2 text-sm transition\",\n item.active\n ? \"bg-[rgb(var(--nc-accent-1)/0.25)] text-[rgb(var(--nc-fg))]\"\n : \"text-[rgb(var(--nc-fg-muted))] hover:bg-[rgb(var(--nc-surface)/0.12)] hover:text-[rgb(var(--nc-fg))]\"\n )}\n >\n {item.icon}\n <span>{item.label}</span>\n </a>\n ))}\n </nav>\n {footer && <div className=\"mt-auto pt-4\">{footer}</div>}\n </aside>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/components/layout/sidebar.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { CraftIcon } from \"@/components/craft-icon\";\nimport { cn } from \"@/utils/cn\";\n\nexport type SidebarItem = {\n label: React.ReactNode;\n href?: string;\n icon?: React.ReactNode | string;\n active?: boolean;\n};\n\nexport type SidebarProps = React.HTMLAttributes<HTMLElement> & {\n title?: React.ReactNode;\n items: SidebarItem[];\n footer?: React.ReactNode;\n};\n\nexport function Sidebar({ className, title, items, footer, ...props }: SidebarProps) {\n return (\n <aside\n className={cn(\n \"flex h-full w-full flex-col gap-6 rounded-3xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-6 text-[rgb(var(--nc-fg))] backdrop-blur-xl\",\n className\n )}\n {...props}\n >\n {title && <div className=\"text-lg font-semibold\">{title}</div>}\n <nav className=\"flex flex-col gap-2\">\n {items.map((item, index) => (\n <a\n key={`${item.label}-${index}`}\n href={item.href ?? \"#\"}\n className={cn(\n \"flex items-center gap-3 rounded-2xl px-3 py-2 text-sm transition\",\n item.active\n ? \"bg-[rgb(var(--nc-accent-1)/0.25)] text-[rgb(var(--nc-fg))]\"\n : \"text-[rgb(var(--nc-fg-muted))] hover:bg-[rgb(var(--nc-surface)/0.12)] hover:text-[rgb(var(--nc-fg))]\"\n )}\n >\n {typeof item.icon === \"string\" ? (\n <CraftIcon name={item.icon} className=\"h-4 w-4\" />\n ) : (\n item.icon\n )}\n <span>{item.label}</span>\n </a>\n ))}\n </nav>\n {footer && <div className=\"mt-auto pt-4\">{footer}</div>}\n </aside>\n );\n}\n"],"mappings":"AA2BgB,cAGN,YAHM;AAzBhB,SAAS,iBAAiB;AAC1B,SAAS,UAAU;AAeZ,SAAS,QAAQ,EAAE,WAAW,OAAO,OAAO,QAAQ,GAAG,MAAM,GAAiB;AACnF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,iBAAS,oBAAC,SAAI,WAAU,yBAAyB,iBAAM;AAAA,QACxD,oBAAC,SAAI,WAAU,uBACZ,gBAAM,IAAI,CAAC,MAAM,UAAO;AA7BjC;AA8BU;AAAA,YAAC;AAAA;AAAA,cAEC,OAAM,UAAK,SAAL,YAAa;AAAA,cACnB,WAAW;AAAA,gBACT;AAAA,gBACA,KAAK,SACD,+DACA;AAAA,cACN;AAAA,cAEC;AAAA,uBAAO,KAAK,SAAS,WACpB,oBAAC,aAAU,MAAM,KAAK,MAAM,WAAU,WAAU,IAEhD,KAAK;AAAA,gBAEP,oBAAC,UAAM,eAAK,OAAM;AAAA;AAAA;AAAA,YAdb,GAAG,KAAK,KAAK,IAAI,KAAK;AAAA,UAe7B;AAAA,SACD,GACH;AAAA,QACC,UAAU,oBAAC,SAAI,WAAU,gBAAgB,kBAAO;AAAA;AAAA;AAAA,EACnD;AAEJ;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jameskabz/nextcraft-ui",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.10",
|
|
4
4
|
"description": "Next.js + Tailwind UI components with a bold, crafted aesthetic.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -42,7 +42,9 @@
|
|
|
42
42
|
"lint": "eslint .",
|
|
43
43
|
"typecheck": "tsc -p tsconfig.lib.json --noEmit",
|
|
44
44
|
"test:unit:run": "echo \"No unit tests specified\"",
|
|
45
|
-
"test:coverage": "echo \"No coverage configured\""
|
|
45
|
+
"test:coverage": "echo \"No coverage configured\"",
|
|
46
|
+
"chore:version": "npm version patch --no-git-tag-version",
|
|
47
|
+
"postpublish": "npm run chore:version"
|
|
46
48
|
},
|
|
47
49
|
"peerDependencies": {
|
|
48
50
|
"lucide-react": "^0.563.0",
|