@jameskabz/nextcraft-ui 0.7.1 → 0.7.2
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 +21 -25
- package/dist/components/craft-icon.cjs.map +1 -1
- package/dist/components/craft-icon.d.cts +6 -2
- package/dist/components/craft-icon.d.ts +6 -2
- package/dist/components/craft-icon.js +21 -35
- package/dist/components/craft-icon.js.map +1 -1
- package/dist/components/layout/app-template.cjs +1 -1
- package/dist/components/layout/app-template.cjs.map +1 -1
- package/dist/components/layout/app-template.js +1 -1
- package/dist/components/layout/app-template.js.map +1 -1
- package/dist/components/layout/sidebar.cjs +1 -1
- package/dist/components/layout/sidebar.cjs.map +1 -1
- package/dist/components/layout/sidebar.js +1 -1
- package/dist/components/layout/sidebar.js.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/package.json +5 -1
|
@@ -35,29 +35,22 @@ __export(craft_icon_exports, {
|
|
|
35
35
|
module.exports = __toCommonJS(craft_icon_exports);
|
|
36
36
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
37
37
|
var React = __toESM(require("react"), 1);
|
|
38
|
-
var
|
|
38
|
+
var import_fontawesome_svg_core = require("@fortawesome/fontawesome-svg-core");
|
|
39
39
|
var import_free_solid_svg_icons = require("@fortawesome/free-solid-svg-icons");
|
|
40
|
+
var import_free_regular_svg_icons = require("@fortawesome/free-regular-svg-icons");
|
|
41
|
+
var import_free_brands_svg_icons = require("@fortawesome/free-brands-svg-icons");
|
|
42
|
+
var import_react_fontawesome = require("@fortawesome/react-fontawesome");
|
|
40
43
|
var import_cn = require("../utils/cn");
|
|
41
44
|
const CraftIconContext = React.createContext(null);
|
|
42
45
|
function CraftIconProvider({ icons, children }) {
|
|
43
46
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CraftIconContext.Provider, { value: icons, children });
|
|
44
47
|
}
|
|
45
|
-
|
|
46
|
-
"layout-dashboard": import_free_solid_svg_icons.faGauge,
|
|
47
|
-
dashboard: import_free_solid_svg_icons.faGauge,
|
|
48
|
-
folder: import_free_solid_svg_icons.faFolder,
|
|
49
|
-
"folder-open": import_free_solid_svg_icons.faFolderOpen,
|
|
50
|
-
users: import_free_solid_svg_icons.faUsers,
|
|
51
|
-
"credit-card": import_free_solid_svg_icons.faCreditCard,
|
|
52
|
-
pen: import_free_solid_svg_icons.faPen,
|
|
53
|
-
edit: import_free_solid_svg_icons.faPen,
|
|
54
|
-
trash: import_free_solid_svg_icons.faTrash,
|
|
55
|
-
delete: import_free_solid_svg_icons.faTrash,
|
|
56
|
-
archive: import_free_solid_svg_icons.faArchive,
|
|
57
|
-
search: import_free_solid_svg_icons.faSearch
|
|
58
|
-
};
|
|
48
|
+
import_fontawesome_svg_core.library.add(import_free_solid_svg_icons.fas, import_free_regular_svg_icons.far, import_free_brands_svg_icons.fab);
|
|
59
49
|
function CraftIcon({
|
|
60
50
|
name,
|
|
51
|
+
prefix = "fas",
|
|
52
|
+
size = "md",
|
|
53
|
+
color,
|
|
61
54
|
className,
|
|
62
55
|
"aria-label": ariaLabel,
|
|
63
56
|
icons
|
|
@@ -66,20 +59,23 @@ function CraftIcon({
|
|
|
66
59
|
const registry = icons != null ? icons : contextRegistry;
|
|
67
60
|
const icon = registry == null ? void 0 : registry[name];
|
|
68
61
|
if (!icon) {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
62
|
+
const faSizeMap = {
|
|
63
|
+
xs: "xs",
|
|
64
|
+
sm: "sm",
|
|
65
|
+
md: "lg",
|
|
66
|
+
lg: "xl",
|
|
67
|
+
xl: "2x",
|
|
68
|
+
xxl: "3x"
|
|
69
|
+
};
|
|
76
70
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
77
71
|
import_react_fontawesome.FontAwesomeIcon,
|
|
78
72
|
{
|
|
79
|
-
icon:
|
|
80
|
-
|
|
73
|
+
icon: [prefix, name],
|
|
74
|
+
size: faSizeMap[size],
|
|
75
|
+
className: (0, import_cn.cn)(color ? `text-${color}` : "text-current", "inline-block", className),
|
|
81
76
|
"aria-hidden": ariaLabel ? void 0 : true,
|
|
82
|
-
"aria-label": ariaLabel
|
|
77
|
+
"aria-label": ariaLabel,
|
|
78
|
+
role: ariaLabel ? "img" : void 0
|
|
83
79
|
}
|
|
84
80
|
);
|
|
85
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/craft-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/components/craft-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { library, type IconName, type IconPrefix } from \"@fortawesome/fontawesome-svg-core\";\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\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: IconName | string;\n prefix?: IconPrefix;\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\n color?: string;\n className?: string;\n \"aria-label\"?: string;\n icons?: CraftIconRegistry;\n};\n\nlibrary.add(fas, far, fab);\n\nexport function CraftIcon({\n name,\n prefix = \"fas\",\n size = \"md\",\n color,\n className,\n \"aria-label\": ariaLabel,\n icons,\n}: CraftIconProps) {\n const contextRegistry = React.useContext(CraftIconContext);\n const registry = icons ?? contextRegistry;\n const icon = registry?.[name];\n\n if (!icon) {\n const faSizeMap = {\n xs: \"xs\",\n sm: \"sm\",\n md: \"lg\",\n lg: \"xl\",\n xl: \"2x\",\n xxl: \"3x\",\n } as const;\n\n return (\n <FontAwesomeIcon\n icon={[prefix, name as IconName]}\n size={faSizeMap[size]}\n className={cn(color ? `text-${color}` : \"text-current\", \"inline-block\", className)}\n aria-hidden={ariaLabel ? undefined : true}\n aria-label={ariaLabel}\n role={ariaLabel ? \"img\" : undefined}\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;AAqBS;AAnBT,YAAuB;AACvB,kCAAwD;AACxD,kCAAoB;AACpB,oCAAoB;AACpB,mCAAoB;AACpB,+BAAgC;AAEhC,gBAAmB;AAInB,MAAM,mBAAmB,MAAM,cAAwC,IAAI;AAOpE,SAAS,kBAAkB,EAAE,OAAO,SAAS,GAA2B;AAC7E,SAAO,4CAAC,iBAAiB,UAAjB,EAA0B,OAAO,OAAQ,UAAS;AAC5D;AAYA,oCAAQ,IAAI,iCAAK,mCAAK,gCAAG;AAElB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,EACT,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AACF,GAAmB;AACjB,QAAM,kBAAkB,MAAM,WAAW,gBAAgB;AACzD,QAAM,WAAW,wBAAS;AAC1B,QAAM,OAAO,qCAAW;AAExB,MAAI,CAAC,MAAM;AACT,UAAM,YAAY;AAAA,MAChB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK;AAAA,IACP;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAAC,QAAQ,IAAgB;AAAA,QAC/B,MAAM,UAAU,IAAI;AAAA,QACpB,eAAW,cAAG,QAAQ,QAAQ,KAAK,KAAK,gBAAgB,gBAAgB,SAAS;AAAA,QACjF,eAAa,YAAY,SAAY;AAAA,QACrC,cAAY;AAAA,QACZ,MAAM,YAAY,QAAQ;AAAA;AAAA,IAC5B;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":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { IconName, IconPrefix } from '@fortawesome/fontawesome-svg-core';
|
|
3
4
|
|
|
4
5
|
type CraftIconRegistry = Record<string, React.ReactNode>;
|
|
5
6
|
type CraftIconProviderProps = {
|
|
@@ -8,11 +9,14 @@ type CraftIconProviderProps = {
|
|
|
8
9
|
};
|
|
9
10
|
declare function CraftIconProvider({ icons, children }: CraftIconProviderProps): react_jsx_runtime.JSX.Element;
|
|
10
11
|
type CraftIconProps = {
|
|
11
|
-
name: string;
|
|
12
|
+
name: IconName | string;
|
|
13
|
+
prefix?: IconPrefix;
|
|
14
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | "xxl";
|
|
15
|
+
color?: string;
|
|
12
16
|
className?: string;
|
|
13
17
|
"aria-label"?: string;
|
|
14
18
|
icons?: CraftIconRegistry;
|
|
15
19
|
};
|
|
16
|
-
declare function CraftIcon({ name, className, "aria-label": ariaLabel, icons, }: CraftIconProps): react_jsx_runtime.JSX.Element
|
|
20
|
+
declare function CraftIcon({ name, prefix, size, color, className, "aria-label": ariaLabel, icons, }: CraftIconProps): react_jsx_runtime.JSX.Element;
|
|
17
21
|
|
|
18
22
|
export { CraftIcon, type CraftIconProps, CraftIconProvider, type CraftIconProviderProps, type CraftIconRegistry };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { IconName, IconPrefix } from '@fortawesome/fontawesome-svg-core';
|
|
3
4
|
|
|
4
5
|
type CraftIconRegistry = Record<string, React.ReactNode>;
|
|
5
6
|
type CraftIconProviderProps = {
|
|
@@ -8,11 +9,14 @@ type CraftIconProviderProps = {
|
|
|
8
9
|
};
|
|
9
10
|
declare function CraftIconProvider({ icons, children }: CraftIconProviderProps): react_jsx_runtime.JSX.Element;
|
|
10
11
|
type CraftIconProps = {
|
|
11
|
-
name: string;
|
|
12
|
+
name: IconName | string;
|
|
13
|
+
prefix?: IconPrefix;
|
|
14
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | "xxl";
|
|
15
|
+
color?: string;
|
|
12
16
|
className?: string;
|
|
13
17
|
"aria-label"?: string;
|
|
14
18
|
icons?: CraftIconRegistry;
|
|
15
19
|
};
|
|
16
|
-
declare function CraftIcon({ name, className, "aria-label": ariaLabel, icons, }: CraftIconProps): react_jsx_runtime.JSX.Element
|
|
20
|
+
declare function CraftIcon({ name, prefix, size, color, className, "aria-label": ariaLabel, icons, }: CraftIconProps): react_jsx_runtime.JSX.Element;
|
|
17
21
|
|
|
18
22
|
export { CraftIcon, type CraftIconProps, CraftIconProvider, type CraftIconProviderProps, type CraftIconRegistry };
|
|
@@ -1,39 +1,22 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
|
+
import { library } from "@fortawesome/fontawesome-svg-core";
|
|
5
|
+
import { fas } from "@fortawesome/free-solid-svg-icons";
|
|
6
|
+
import { far } from "@fortawesome/free-regular-svg-icons";
|
|
7
|
+
import { fab } from "@fortawesome/free-brands-svg-icons";
|
|
4
8
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
5
|
-
import {
|
|
6
|
-
faArchive,
|
|
7
|
-
faCreditCard,
|
|
8
|
-
faFolder,
|
|
9
|
-
faFolderOpen,
|
|
10
|
-
faGauge,
|
|
11
|
-
faPen,
|
|
12
|
-
faSearch,
|
|
13
|
-
faTrash,
|
|
14
|
-
faUsers
|
|
15
|
-
} from "@fortawesome/free-solid-svg-icons";
|
|
16
9
|
import { cn } from "../utils/cn";
|
|
17
10
|
const CraftIconContext = React.createContext(null);
|
|
18
11
|
function CraftIconProvider({ icons, children }) {
|
|
19
12
|
return /* @__PURE__ */ jsx(CraftIconContext.Provider, { value: icons, children });
|
|
20
13
|
}
|
|
21
|
-
|
|
22
|
-
"layout-dashboard": faGauge,
|
|
23
|
-
dashboard: faGauge,
|
|
24
|
-
folder: faFolder,
|
|
25
|
-
"folder-open": faFolderOpen,
|
|
26
|
-
users: faUsers,
|
|
27
|
-
"credit-card": faCreditCard,
|
|
28
|
-
pen: faPen,
|
|
29
|
-
edit: faPen,
|
|
30
|
-
trash: faTrash,
|
|
31
|
-
delete: faTrash,
|
|
32
|
-
archive: faArchive,
|
|
33
|
-
search: faSearch
|
|
34
|
-
};
|
|
14
|
+
library.add(fas, far, fab);
|
|
35
15
|
function CraftIcon({
|
|
36
16
|
name,
|
|
17
|
+
prefix = "fas",
|
|
18
|
+
size = "md",
|
|
19
|
+
color,
|
|
37
20
|
className,
|
|
38
21
|
"aria-label": ariaLabel,
|
|
39
22
|
icons
|
|
@@ -42,20 +25,23 @@ function CraftIcon({
|
|
|
42
25
|
const registry = icons != null ? icons : contextRegistry;
|
|
43
26
|
const icon = registry == null ? void 0 : registry[name];
|
|
44
27
|
if (!icon) {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
28
|
+
const faSizeMap = {
|
|
29
|
+
xs: "xs",
|
|
30
|
+
sm: "sm",
|
|
31
|
+
md: "lg",
|
|
32
|
+
lg: "xl",
|
|
33
|
+
xl: "2x",
|
|
34
|
+
xxl: "3x"
|
|
35
|
+
};
|
|
52
36
|
return /* @__PURE__ */ jsx(
|
|
53
37
|
FontAwesomeIcon,
|
|
54
38
|
{
|
|
55
|
-
icon:
|
|
56
|
-
|
|
39
|
+
icon: [prefix, name],
|
|
40
|
+
size: faSizeMap[size],
|
|
41
|
+
className: cn(color ? `text-${color}` : "text-current", "inline-block", className),
|
|
57
42
|
"aria-hidden": ariaLabel ? void 0 : true,
|
|
58
|
-
"aria-label": ariaLabel
|
|
43
|
+
"aria-label": ariaLabel,
|
|
44
|
+
role: ariaLabel ? "img" : void 0
|
|
59
45
|
}
|
|
60
46
|
);
|
|
61
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/craft-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/components/craft-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { library, type IconName, type IconPrefix } from \"@fortawesome/fontawesome-svg-core\";\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\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: IconName | string;\n prefix?: IconPrefix;\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\n color?: string;\n className?: string;\n \"aria-label\"?: string;\n icons?: CraftIconRegistry;\n};\n\nlibrary.add(fas, far, fab);\n\nexport function CraftIcon({\n name,\n prefix = \"fas\",\n size = \"md\",\n color,\n className,\n \"aria-label\": ariaLabel,\n icons,\n}: CraftIconProps) {\n const contextRegistry = React.useContext(CraftIconContext);\n const registry = icons ?? contextRegistry;\n const icon = registry?.[name];\n\n if (!icon) {\n const faSizeMap = {\n xs: \"xs\",\n sm: \"sm\",\n md: \"lg\",\n lg: \"xl\",\n xl: \"2x\",\n xxl: \"3x\",\n } as const;\n\n return (\n <FontAwesomeIcon\n icon={[prefix, name as IconName]}\n size={faSizeMap[size]}\n className={cn(color ? `text-${color}` : \"text-current\", \"inline-block\", className)}\n aria-hidden={ariaLabel ? undefined : true}\n aria-label={ariaLabel}\n role={ariaLabel ? \"img\" : undefined}\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":";AAqBS;AAnBT,YAAY,WAAW;AACvB,SAAS,eAA+C;AACxD,SAAS,WAAW;AACpB,SAAS,WAAW;AACpB,SAAS,WAAW;AACpB,SAAS,uBAAuB;AAEhC,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;AAYA,QAAQ,IAAI,KAAK,KAAK,GAAG;AAElB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,EACT,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AACF,GAAmB;AACjB,QAAM,kBAAkB,MAAM,WAAW,gBAAgB;AACzD,QAAM,WAAW,wBAAS;AAC1B,QAAM,OAAO,qCAAW;AAExB,MAAI,CAAC,MAAM;AACT,UAAM,YAAY;AAAA,MAChB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK;AAAA,IACP;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,CAAC,QAAQ,IAAgB;AAAA,QAC/B,MAAM,UAAU,IAAI;AAAA,QACpB,WAAW,GAAG,QAAQ,QAAQ,KAAK,KAAK,gBAAgB,gBAAgB,SAAS;AAAA,QACjF,eAAa,YAAY,SAAY;AAAA,QACrC,cAAY;AAAA,QACZ,MAAM,YAAY,QAAQ;AAAA;AAAA,IAC5B;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":[]}
|
|
@@ -58,7 +58,7 @@ function AppTemplate({
|
|
|
58
58
|
if (!name) return void 0;
|
|
59
59
|
if (resolveIcon) return resolveIcon(name);
|
|
60
60
|
if (icons == null ? void 0 : icons[name]) return icons[name];
|
|
61
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_craft_icon.CraftIcon, { name });
|
|
61
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_craft_icon.CraftIcon, { name, size: "lg" });
|
|
62
62
|
},
|
|
63
63
|
[icons, resolveIcon]
|
|
64
64
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/layout/app-template.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { AppShell } from \"./app-shell\";\nimport { CraftIcon } from \"@/components/craft-icon\";\nimport { Breadcrumbs } from \"./breadcrumbs\";\nimport { Sidebar, type SidebarItem } from \"./sidebar\";\nimport { TopNav } from \"./top-nav\";\nimport type { LayoutConfig, LayoutSidebarItem } from \"./layout-config\";\n\nexport type AppTemplateProps = {\n config: LayoutConfig;\n headerActions?: React.ReactNode;\n headerBreadcrumb?: React.ReactNode;\n sidebarFooter?: React.ReactNode;\n resolveIcon?: (name: string) => React.ReactNode;\n icons?: Record<string, React.ReactNode>;\n activePath?: string;\n getActivePath?: () => string | undefined;\n children: React.ReactNode;\n};\n\nexport function AppTemplate({\n config,\n headerActions,\n headerBreadcrumb,\n sidebarFooter,\n resolveIcon,\n icons,\n activePath,\n getActivePath,\n children,\n}: AppTemplateProps) {\n const sidebarConfig = config.sidebar;\n const headerConfig = config.header;\n\n const resolvedActivePath = activePath ?? getActivePath?.();\n\n const buildIcon = React.useCallback(\n (name?: string) => {\n if (!name) return undefined;\n if (resolveIcon) return resolveIcon(name);\n if (icons?.[name]) return icons[name];\n return <CraftIcon name={name} />;\n },\n [icons, resolveIcon]\n );\n\n const sidebarItems: SidebarItem[] | null = sidebarConfig\n ? sidebarConfig.items.map((item: LayoutSidebarItem) => ({\n label: item.label,\n href: item.href,\n active:\n item.active ??\n (resolvedActivePath && item.href\n ? item.href === resolvedActivePath\n : false),\n icon: buildIcon(item.icon),\n }))\n : null;\n\n const breadcrumbNode =\n headerBreadcrumb ??\n (headerConfig?.breadcrumb ? (\n <Breadcrumbs items={headerConfig.breadcrumb} />\n ) : null);\n\n const sidebarFooterNode =\n sidebarFooter ??\n (sidebarConfig?.footerText ? (\n <div className=\"text-xs text-[rgb(var(--nc-fg-muted))]\">\n {sidebarConfig.footerText}\n </div>\n ) : null);\n\n return (\n <AppShell\n sidebar={\n sidebarConfig && sidebarItems ? (\n <Sidebar\n title={sidebarConfig.title}\n items={sidebarItems}\n footer={sidebarFooterNode}\n />\n ) : undefined\n }\n topNav={\n headerConfig ? (\n <TopNav\n title={headerConfig.title}\n breadcrumb={breadcrumbNode}\n actions={headerActions}\n />\n ) : undefined\n }\n >\n {children}\n </AppShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4Ca;AA1Cb,YAAuB;AAEvB,uBAAyB;AACzB,wBAA0B;AAC1B,yBAA4B;AAC5B,qBAA0C;AAC1C,qBAAuB;AAehB,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,gBAAgB,OAAO;AAC7B,QAAM,eAAe,OAAO;AAE5B,QAAM,qBAAqB,kCAAc;AAEzC,QAAM,YAAY,MAAM;AAAA,IACtB,CAAC,SAAkB;AACjB,UAAI,CAAC,KAAM,QAAO;AAClB,UAAI,YAAa,QAAO,YAAY,IAAI;AACxC,UAAI,+BAAQ,MAAO,QAAO,MAAM,IAAI;AACpC,aAAO,4CAAC,+BAAU,MAAY;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/layout/app-template.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { AppShell } from \"./app-shell\";\nimport { CraftIcon } from \"@/components/craft-icon\";\nimport { Breadcrumbs } from \"./breadcrumbs\";\nimport { Sidebar, type SidebarItem } from \"./sidebar\";\nimport { TopNav } from \"./top-nav\";\nimport type { LayoutConfig, LayoutSidebarItem } from \"./layout-config\";\n\nexport type AppTemplateProps = {\n config: LayoutConfig;\n headerActions?: React.ReactNode;\n headerBreadcrumb?: React.ReactNode;\n sidebarFooter?: React.ReactNode;\n resolveIcon?: (name: string) => React.ReactNode;\n icons?: Record<string, React.ReactNode>;\n activePath?: string;\n getActivePath?: () => string | undefined;\n children: React.ReactNode;\n};\n\nexport function AppTemplate({\n config,\n headerActions,\n headerBreadcrumb,\n sidebarFooter,\n resolveIcon,\n icons,\n activePath,\n getActivePath,\n children,\n}: AppTemplateProps) {\n const sidebarConfig = config.sidebar;\n const headerConfig = config.header;\n\n const resolvedActivePath = activePath ?? getActivePath?.();\n\n const buildIcon = React.useCallback(\n (name?: string) => {\n if (!name) return undefined;\n if (resolveIcon) return resolveIcon(name);\n if (icons?.[name]) return icons[name];\n return <CraftIcon name={name} size=\"lg\"/>;\n },\n [icons, resolveIcon]\n );\n\n const sidebarItems: SidebarItem[] | null = sidebarConfig\n ? sidebarConfig.items.map((item: LayoutSidebarItem) => ({\n label: item.label,\n href: item.href,\n active:\n item.active ??\n (resolvedActivePath && item.href\n ? item.href === resolvedActivePath\n : false),\n icon: buildIcon(item.icon),\n }))\n : null;\n\n const breadcrumbNode =\n headerBreadcrumb ??\n (headerConfig?.breadcrumb ? (\n <Breadcrumbs items={headerConfig.breadcrumb} />\n ) : null);\n\n const sidebarFooterNode =\n sidebarFooter ??\n (sidebarConfig?.footerText ? (\n <div className=\"text-xs text-[rgb(var(--nc-fg-muted))]\">\n {sidebarConfig.footerText}\n </div>\n ) : null);\n\n return (\n <AppShell\n sidebar={\n sidebarConfig && sidebarItems ? (\n <Sidebar\n title={sidebarConfig.title}\n items={sidebarItems}\n footer={sidebarFooterNode}\n />\n ) : undefined\n }\n topNav={\n headerConfig ? (\n <TopNav\n title={headerConfig.title}\n breadcrumb={breadcrumbNode}\n actions={headerActions}\n />\n ) : undefined\n }\n >\n {children}\n </AppShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4Ca;AA1Cb,YAAuB;AAEvB,uBAAyB;AACzB,wBAA0B;AAC1B,yBAA4B;AAC5B,qBAA0C;AAC1C,qBAAuB;AAehB,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,gBAAgB,OAAO;AAC7B,QAAM,eAAe,OAAO;AAE5B,QAAM,qBAAqB,kCAAc;AAEzC,QAAM,YAAY,MAAM;AAAA,IACtB,CAAC,SAAkB;AACjB,UAAI,CAAC,KAAM,QAAO;AAClB,UAAI,YAAa,QAAO,YAAY,IAAI;AACxC,UAAI,+BAAQ,MAAO,QAAO,MAAM,IAAI;AACpC,aAAO,4CAAC,+BAAU,MAAY,MAAK,MAAI;AAAA,IACzC;AAAA,IACA,CAAC,OAAO,WAAW;AAAA,EACrB;AAEA,QAAM,eAAqC,gBACvC,cAAc,MAAM,IAAI,CAAC,SAAyB;AAlDxD;AAkD4D;AAAA,MACpD,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,SACE,UAAK,WAAL,YACC,sBAAsB,KAAK,OACxB,KAAK,SAAS,qBACd;AAAA,MACN,MAAM,UAAU,KAAK,IAAI;AAAA,IAC3B;AAAA,GAAE,IACF;AAEJ,QAAM,iBACJ,+CACC,6CAAc,cACb,4CAAC,kCAAY,OAAO,aAAa,YAAY,IAC3C;AAEN,QAAM,oBACJ,yCACC,+CAAe,cACd,4CAAC,SAAI,WAAU,0CACZ,wBAAc,YACjB,IACE;AAEN,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SACE,iBAAiB,eACf;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,cAAc;AAAA,UACrB,OAAO;AAAA,UACP,QAAQ;AAAA;AAAA,MACV,IACE;AAAA,MAEN,QACE,eACE;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,aAAa;AAAA,UACpB,YAAY;AAAA,UACZ,SAAS;AAAA;AAAA,MACX,IACE;AAAA,MAGL;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -25,7 +25,7 @@ function AppTemplate({
|
|
|
25
25
|
if (!name) return void 0;
|
|
26
26
|
if (resolveIcon) return resolveIcon(name);
|
|
27
27
|
if (icons == null ? void 0 : icons[name]) return icons[name];
|
|
28
|
-
return /* @__PURE__ */ jsx(CraftIcon, { name });
|
|
28
|
+
return /* @__PURE__ */ jsx(CraftIcon, { name, size: "lg" });
|
|
29
29
|
},
|
|
30
30
|
[icons, resolveIcon]
|
|
31
31
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/layout/app-template.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { AppShell } from \"./app-shell\";\nimport { CraftIcon } from \"@/components/craft-icon\";\nimport { Breadcrumbs } from \"./breadcrumbs\";\nimport { Sidebar, type SidebarItem } from \"./sidebar\";\nimport { TopNav } from \"./top-nav\";\nimport type { LayoutConfig, LayoutSidebarItem } from \"./layout-config\";\n\nexport type AppTemplateProps = {\n config: LayoutConfig;\n headerActions?: React.ReactNode;\n headerBreadcrumb?: React.ReactNode;\n sidebarFooter?: React.ReactNode;\n resolveIcon?: (name: string) => React.ReactNode;\n icons?: Record<string, React.ReactNode>;\n activePath?: string;\n getActivePath?: () => string | undefined;\n children: React.ReactNode;\n};\n\nexport function AppTemplate({\n config,\n headerActions,\n headerBreadcrumb,\n sidebarFooter,\n resolveIcon,\n icons,\n activePath,\n getActivePath,\n children,\n}: AppTemplateProps) {\n const sidebarConfig = config.sidebar;\n const headerConfig = config.header;\n\n const resolvedActivePath = activePath ?? getActivePath?.();\n\n const buildIcon = React.useCallback(\n (name?: string) => {\n if (!name) return undefined;\n if (resolveIcon) return resolveIcon(name);\n if (icons?.[name]) return icons[name];\n return <CraftIcon name={name} />;\n },\n [icons, resolveIcon]\n );\n\n const sidebarItems: SidebarItem[] | null = sidebarConfig\n ? sidebarConfig.items.map((item: LayoutSidebarItem) => ({\n label: item.label,\n href: item.href,\n active:\n item.active ??\n (resolvedActivePath && item.href\n ? item.href === resolvedActivePath\n : false),\n icon: buildIcon(item.icon),\n }))\n : null;\n\n const breadcrumbNode =\n headerBreadcrumb ??\n (headerConfig?.breadcrumb ? (\n <Breadcrumbs items={headerConfig.breadcrumb} />\n ) : null);\n\n const sidebarFooterNode =\n sidebarFooter ??\n (sidebarConfig?.footerText ? (\n <div className=\"text-xs text-[rgb(var(--nc-fg-muted))]\">\n {sidebarConfig.footerText}\n </div>\n ) : null);\n\n return (\n <AppShell\n sidebar={\n sidebarConfig && sidebarItems ? (\n <Sidebar\n title={sidebarConfig.title}\n items={sidebarItems}\n footer={sidebarFooterNode}\n />\n ) : undefined\n }\n topNav={\n headerConfig ? (\n <TopNav\n title={headerConfig.title}\n breadcrumb={breadcrumbNode}\n actions={headerActions}\n />\n ) : undefined\n }\n >\n {children}\n </AppShell>\n );\n}\n"],"mappings":";AA4Ca;AA1Cb,YAAY,WAAW;AAEvB,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,eAAiC;AAC1C,SAAS,cAAc;AAehB,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,gBAAgB,OAAO;AAC7B,QAAM,eAAe,OAAO;AAE5B,QAAM,qBAAqB,kCAAc;AAEzC,QAAM,YAAY,MAAM;AAAA,IACtB,CAAC,SAAkB;AACjB,UAAI,CAAC,KAAM,QAAO;AAClB,UAAI,YAAa,QAAO,YAAY,IAAI;AACxC,UAAI,+BAAQ,MAAO,QAAO,MAAM,IAAI;AACpC,aAAO,oBAAC,aAAU,MAAY;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/layout/app-template.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { AppShell } from \"./app-shell\";\nimport { CraftIcon } from \"@/components/craft-icon\";\nimport { Breadcrumbs } from \"./breadcrumbs\";\nimport { Sidebar, type SidebarItem } from \"./sidebar\";\nimport { TopNav } from \"./top-nav\";\nimport type { LayoutConfig, LayoutSidebarItem } from \"./layout-config\";\n\nexport type AppTemplateProps = {\n config: LayoutConfig;\n headerActions?: React.ReactNode;\n headerBreadcrumb?: React.ReactNode;\n sidebarFooter?: React.ReactNode;\n resolveIcon?: (name: string) => React.ReactNode;\n icons?: Record<string, React.ReactNode>;\n activePath?: string;\n getActivePath?: () => string | undefined;\n children: React.ReactNode;\n};\n\nexport function AppTemplate({\n config,\n headerActions,\n headerBreadcrumb,\n sidebarFooter,\n resolveIcon,\n icons,\n activePath,\n getActivePath,\n children,\n}: AppTemplateProps) {\n const sidebarConfig = config.sidebar;\n const headerConfig = config.header;\n\n const resolvedActivePath = activePath ?? getActivePath?.();\n\n const buildIcon = React.useCallback(\n (name?: string) => {\n if (!name) return undefined;\n if (resolveIcon) return resolveIcon(name);\n if (icons?.[name]) return icons[name];\n return <CraftIcon name={name} size=\"lg\"/>;\n },\n [icons, resolveIcon]\n );\n\n const sidebarItems: SidebarItem[] | null = sidebarConfig\n ? sidebarConfig.items.map((item: LayoutSidebarItem) => ({\n label: item.label,\n href: item.href,\n active:\n item.active ??\n (resolvedActivePath && item.href\n ? item.href === resolvedActivePath\n : false),\n icon: buildIcon(item.icon),\n }))\n : null;\n\n const breadcrumbNode =\n headerBreadcrumb ??\n (headerConfig?.breadcrumb ? (\n <Breadcrumbs items={headerConfig.breadcrumb} />\n ) : null);\n\n const sidebarFooterNode =\n sidebarFooter ??\n (sidebarConfig?.footerText ? (\n <div className=\"text-xs text-[rgb(var(--nc-fg-muted))]\">\n {sidebarConfig.footerText}\n </div>\n ) : null);\n\n return (\n <AppShell\n sidebar={\n sidebarConfig && sidebarItems ? (\n <Sidebar\n title={sidebarConfig.title}\n items={sidebarItems}\n footer={sidebarFooterNode}\n />\n ) : undefined\n }\n topNav={\n headerConfig ? (\n <TopNav\n title={headerConfig.title}\n breadcrumb={breadcrumbNode}\n actions={headerActions}\n />\n ) : undefined\n }\n >\n {children}\n </AppShell>\n );\n}\n"],"mappings":";AA4Ca;AA1Cb,YAAY,WAAW;AAEvB,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,eAAiC;AAC1C,SAAS,cAAc;AAehB,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,gBAAgB,OAAO;AAC7B,QAAM,eAAe,OAAO;AAE5B,QAAM,qBAAqB,kCAAc;AAEzC,QAAM,YAAY,MAAM;AAAA,IACtB,CAAC,SAAkB;AACjB,UAAI,CAAC,KAAM,QAAO;AAClB,UAAI,YAAa,QAAO,YAAY,IAAI;AACxC,UAAI,+BAAQ,MAAO,QAAO,MAAM,IAAI;AACpC,aAAO,oBAAC,aAAU,MAAY,MAAK,MAAI;AAAA,IACzC;AAAA,IACA,CAAC,OAAO,WAAW;AAAA,EACrB;AAEA,QAAM,eAAqC,gBACvC,cAAc,MAAM,IAAI,CAAC,SAAyB;AAlDxD;AAkD4D;AAAA,MACpD,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,SACE,UAAK,WAAL,YACC,sBAAsB,KAAK,OACxB,KAAK,SAAS,qBACd;AAAA,MACN,MAAM,UAAU,KAAK,IAAI;AAAA,IAC3B;AAAA,GAAE,IACF;AAEJ,QAAM,iBACJ,+CACC,6CAAc,cACb,oBAAC,eAAY,OAAO,aAAa,YAAY,IAC3C;AAEN,QAAM,oBACJ,yCACC,+CAAe,cACd,oBAAC,SAAI,WAAU,0CACZ,wBAAc,YACjB,IACE;AAEN,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SACE,iBAAiB,eACf;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,cAAc;AAAA,UACrB,OAAO;AAAA,UACP,QAAQ;AAAA;AAAA,MACV,IACE;AAAA,MAEN,QACE,eACE;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,aAAa;AAAA,UACpB,YAAY;AAAA,UACZ,SAAS;AAAA;AAAA,MACX,IACE;AAAA,MAGL;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -46,7 +46,7 @@ function Sidebar({ className, title, items, footer, ...props }) {
|
|
|
46
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))]"
|
|
47
47
|
),
|
|
48
48
|
children: [
|
|
49
|
-
typeof item.icon === "string" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_craft_icon.CraftIcon, { name: item.icon,
|
|
49
|
+
typeof item.icon === "string" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_craft_icon.CraftIcon, { name: item.icon, size: "lg" }) : item.icon,
|
|
50
50
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: item.label })
|
|
51
51
|
]
|
|
52
52
|
},
|
|
@@ -1 +1 @@
|
|
|
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}
|
|
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} size=\"lg\" />\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,MAAK,MAAK,IAEtC,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":[]}
|
|
@@ -23,7 +23,7 @@ function Sidebar({ className, title, items, footer, ...props }) {
|
|
|
23
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))]"
|
|
24
24
|
),
|
|
25
25
|
children: [
|
|
26
|
-
typeof item.icon === "string" ? /* @__PURE__ */ jsx(CraftIcon, { name: item.icon,
|
|
26
|
+
typeof item.icon === "string" ? /* @__PURE__ */ jsx(CraftIcon, { name: item.icon, size: "lg" }) : item.icon,
|
|
27
27
|
/* @__PURE__ */ jsx("span", { children: item.label })
|
|
28
28
|
]
|
|
29
29
|
},
|
|
@@ -1 +1 @@
|
|
|
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}
|
|
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} size=\"lg\" />\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,MAAK,MAAK,IAEtC,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/dist/index.d.cts
CHANGED
package/dist/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jameskabz/nextcraft-ui",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "Next.js + Tailwind UI components with a bold, crafted aesthetic.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -51,6 +51,8 @@
|
|
|
51
51
|
"react-hook-form": "^7.71.1",
|
|
52
52
|
"tailwindcss": "^4",
|
|
53
53
|
"@fortawesome/fontawesome-svg-core": "^6.0.0 || ^7.0.0",
|
|
54
|
+
"@fortawesome/free-brands-svg-icons": "^6.0.0 || ^7.0.0",
|
|
55
|
+
"@fortawesome/free-regular-svg-icons": "^6.0.0 || ^7.0.0",
|
|
54
56
|
"@fortawesome/free-solid-svg-icons": "^6.0.0 || ^7.0.0",
|
|
55
57
|
"@fortawesome/react-fontawesome": "^0.2.0 || ^3.0.0"
|
|
56
58
|
},
|
|
@@ -62,6 +64,8 @@
|
|
|
62
64
|
"@types/react": "^19",
|
|
63
65
|
"@types/react-dom": "^19",
|
|
64
66
|
"@fortawesome/fontawesome-svg-core": "^7.1.0",
|
|
67
|
+
"@fortawesome/free-brands-svg-icons": "^7.1.0",
|
|
68
|
+
"@fortawesome/free-regular-svg-icons": "^7.1.0",
|
|
65
69
|
"@fortawesome/free-solid-svg-icons": "^7.1.0",
|
|
66
70
|
"@fortawesome/react-fontawesome": "^3.1.1",
|
|
67
71
|
"babel-plugin-react-compiler": "1.0.0",
|