@egose/shadcn-theme 0.0.48 → 0.0.50
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/chunk-OXTCSLHP.mjs +39 -0
- package/chunk-OXTCSLHP.mjs.map +1 -0
- package/chunk-QGXFFTPH.js +40 -0
- package/chunk-QGXFFTPH.js.map +1 -0
- package/chunk-YWILOKX4.mjs +50 -0
- package/chunk-YWILOKX4.mjs.map +1 -0
- package/chunk-ZOF6UW3D.js +51 -0
- package/chunk-ZOF6UW3D.js.map +1 -0
- package/components/ui/command.d.mts +1 -1
- package/components/ui/command.d.ts +1 -1
- package/components/ui/resizable.d.mts +1 -1
- package/components/ui/resizable.d.ts +1 -1
- package/components/widgets/dialog-manager/index.js +1 -1
- package/components/widgets/dialog-manager/index.js.map +1 -1
- package/components/widgets/dialog-manager/index.mjs +1 -1
- package/layouts/simple/index.d.mts +52 -0
- package/layouts/simple/index.d.ts +52 -0
- package/layouts/simple/index.js +163 -0
- package/layouts/simple/index.js.map +1 -0
- package/layouts/simple/index.mjs +162 -0
- package/layouts/simple/index.mjs.map +1 -0
- package/layouts/simple/mobile-menu.d.mts +11 -0
- package/layouts/simple/mobile-menu.d.ts +11 -0
- package/layouts/simple/mobile-menu.js +11 -0
- package/layouts/simple/mobile-menu.js.map +1 -0
- package/layouts/simple/mobile-menu.mjs +10 -0
- package/layouts/simple/mobile-menu.mjs.map +1 -0
- package/layouts/simple/types.d.mts +15 -0
- package/layouts/simple/types.d.ts +15 -0
- package/layouts/simple/types.js +3 -0
- package/layouts/simple/types.js.map +1 -0
- package/layouts/simple/types.mjs +2 -0
- package/layouts/simple/types.mjs.map +1 -0
- package/layouts/simple/user-menu.d.mts +10 -0
- package/layouts/simple/user-menu.d.ts +10 -0
- package/layouts/simple/user-menu.js +12 -0
- package/layouts/simple/user-menu.js.map +1 -0
- package/layouts/simple/user-menu.mjs +11 -0
- package/layouts/simple/user-menu.mjs.map +1 -0
- package/package.json +3 -4
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-F5XCCSBC.mjs";
|
|
4
|
+
|
|
5
|
+
// layouts/simple/mobile-menu.tsx
|
|
6
|
+
import React from "react";
|
|
7
|
+
function MobileMenu({ sections, aslink, onClick }) {
|
|
8
|
+
const LinkComponent = aslink != null ? aslink : "a";
|
|
9
|
+
return /* @__PURE__ */ React.createElement("div", { className: "w-full bg-white p-2 space-y-4" }, sections.map((section, sectionIndex) => {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
return /* @__PURE__ */ React.createElement("div", { key: (_a = section.label) != null ? _a : sectionIndex, className: "space-y-2" }, section.label && /* @__PURE__ */ React.createElement("div", { className: "text-sm font-semibold text-gray-500" }, section.label), ((_b = section.items) == null ? void 0 : _b.length) ? /* @__PURE__ */ React.createElement("ul", { className: "space-y-1" }, section.items.map((item, itemIndex) => {
|
|
12
|
+
var _a2;
|
|
13
|
+
return /* @__PURE__ */ React.createElement("li", { key: (_a2 = item.label) != null ? _a2 : itemIndex, className: "cursor-pointer", onClick }, item.link ? /* @__PURE__ */ React.createElement(
|
|
14
|
+
LinkComponent,
|
|
15
|
+
{
|
|
16
|
+
to: item.link,
|
|
17
|
+
href: item.link,
|
|
18
|
+
className: cn("block w-full px-3 py-1 rounded hover:bg-gray-100", item.className)
|
|
19
|
+
},
|
|
20
|
+
item.label
|
|
21
|
+
) : /* @__PURE__ */ React.createElement(
|
|
22
|
+
"button",
|
|
23
|
+
{
|
|
24
|
+
onClick: item.action,
|
|
25
|
+
className: cn(
|
|
26
|
+
"block w-full text-left px-3 py-1 rounded hover:bg-gray-100 cursor-pointer",
|
|
27
|
+
item.className
|
|
28
|
+
)
|
|
29
|
+
},
|
|
30
|
+
item.label
|
|
31
|
+
));
|
|
32
|
+
})) : null, section.separator && /* @__PURE__ */ React.createElement("hr", { className: "my-2" }));
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export {
|
|
37
|
+
MobileMenu
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=chunk-OXTCSLHP.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../layouts/simple/mobile-menu.tsx"],"sourcesContent":["\"use client\";\nimport React from 'react';\nimport { cn } from '../../lib/utils';\nimport type { UserMenuSection } from './types';\n\ninterface MobileMenuProps {\n sections: UserMenuSection[];\n aslink?: React.ElementType;\n onClick?: () => void;\n}\n\nexport function MobileMenu({ sections, aslink, onClick }: MobileMenuProps) {\n const LinkComponent = aslink ?? 'a';\n\n return (\n <div className=\"w-full bg-white p-2 space-y-4\">\n {sections.map((section, sectionIndex) => (\n <div key={section.label ?? sectionIndex} className=\"space-y-2\">\n {/* Section label */}\n {section.label && <div className=\"text-sm font-semibold text-gray-500\">{section.label}</div>}\n\n {/* Section items */}\n {section.items?.length ? (\n <ul className=\"space-y-1\">\n {section.items.map((item, itemIndex) => (\n <li key={item.label ?? itemIndex} className=\"cursor-pointer\" onClick={onClick}>\n {item.link ? (\n <LinkComponent\n to={item.link}\n href={item.link}\n className={cn('block w-full px-3 py-1 rounded hover:bg-gray-100', item.className)}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n onClick={item.action}\n className={cn(\n 'block w-full text-left px-3 py-1 rounded hover:bg-gray-100 cursor-pointer',\n item.className,\n )}\n >\n {item.label}\n </button>\n )}\n </li>\n ))}\n </ul>\n ) : null}\n\n {/* Separator */}\n {section.separator && <hr className=\"my-2\" />}\n </div>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;AACA,OAAO,WAAW;AAUX,SAAS,WAAW,EAAE,UAAU,QAAQ,QAAQ,GAAoB;AACzE,QAAM,gBAAgB,0BAAU;AAEhC,SACE,oCAAC,SAAI,WAAU,mCACZ,SAAS,IAAI,CAAC,SAAS,iBAAc;AAhB5C;AAiBQ,+CAAC,SAAI,MAAK,aAAQ,UAAR,YAAiB,cAAc,WAAU,eAEhD,QAAQ,SAAS,oCAAC,SAAI,WAAU,yCAAuC,QAAQ,KAAM,KAGrF,aAAQ,UAAR,mBAAe,UACd,oCAAC,QAAG,WAAU,eACX,QAAQ,MAAM,IAAI,CAAC,MAAM,cAAW;AAxBnD,UAAAA;AAyBgB,iDAAC,QAAG,MAAKA,MAAA,KAAK,UAAL,OAAAA,MAAc,WAAW,WAAU,kBAAiB,WAC1D,KAAK,OACJ;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,WAAW,GAAG,oDAAoD,KAAK,SAAS;AAAA;AAAA,QAE/E,KAAK;AAAA,MACR,IAEA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,KAAK;AAAA,UACd,WAAW;AAAA,YACT;AAAA,YACA,KAAK;AAAA,UACP;AAAA;AAAA,QAEC,KAAK;AAAA,MACR,CAEJ;AAAA,KACD,CACH,IACE,MAGH,QAAQ,aAAa,oCAAC,QAAG,WAAU,QAAO,CAC7C;AAAA,GACD,CACH;AAEJ;","names":["_a"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
3
|
+
|
|
4
|
+
var _chunk6N4WCMTEjs = require('./chunk-6N4WCMTE.js');
|
|
5
|
+
|
|
6
|
+
// layouts/simple/mobile-menu.tsx
|
|
7
|
+
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
8
|
+
function MobileMenu({ sections, aslink, onClick }) {
|
|
9
|
+
const LinkComponent = aslink != null ? aslink : "a";
|
|
10
|
+
return /* @__PURE__ */ _react2.default.createElement("div", { className: "w-full bg-white p-2 space-y-4" }, sections.map((section, sectionIndex) => {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
return /* @__PURE__ */ _react2.default.createElement("div", { key: (_a = section.label) != null ? _a : sectionIndex, className: "space-y-2" }, section.label && /* @__PURE__ */ _react2.default.createElement("div", { className: "text-sm font-semibold text-gray-500" }, section.label), ((_b = section.items) == null ? void 0 : _b.length) ? /* @__PURE__ */ _react2.default.createElement("ul", { className: "space-y-1" }, section.items.map((item, itemIndex) => {
|
|
13
|
+
var _a2;
|
|
14
|
+
return /* @__PURE__ */ _react2.default.createElement("li", { key: (_a2 = item.label) != null ? _a2 : itemIndex, className: "cursor-pointer", onClick }, item.link ? /* @__PURE__ */ _react2.default.createElement(
|
|
15
|
+
LinkComponent,
|
|
16
|
+
{
|
|
17
|
+
to: item.link,
|
|
18
|
+
href: item.link,
|
|
19
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0, "block w-full px-3 py-1 rounded hover:bg-gray-100", item.className)
|
|
20
|
+
},
|
|
21
|
+
item.label
|
|
22
|
+
) : /* @__PURE__ */ _react2.default.createElement(
|
|
23
|
+
"button",
|
|
24
|
+
{
|
|
25
|
+
onClick: item.action,
|
|
26
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0,
|
|
27
|
+
"block w-full text-left px-3 py-1 rounded hover:bg-gray-100 cursor-pointer",
|
|
28
|
+
item.className
|
|
29
|
+
)
|
|
30
|
+
},
|
|
31
|
+
item.label
|
|
32
|
+
));
|
|
33
|
+
})) : null, section.separator && /* @__PURE__ */ _react2.default.createElement("hr", { className: "my-2" }));
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
exports.MobileMenu = MobileMenu;
|
|
40
|
+
//# sourceMappingURL=chunk-QGXFFTPH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-QGXFFTPH.js","../layouts/simple/mobile-menu.tsx"],"names":["_a"],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACA;ACHA,4EAAkB;AAUX,SAAS,UAAA,CAAW,EAAE,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA,EAAoB;AACzE,EAAA,MAAM,cAAA,EAAgB,OAAA,GAAA,KAAA,EAAA,OAAA,EAAU,GAAA;AAEhC,EAAA,uBACE,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,CAAA,EACZ,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,YAAA,EAAA,GAAc;AAhB5C,IAAA,IAAA,EAAA,EAAA,EAAA;AAiBQ,IAAA,uBAAA,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAA,CAAK,GAAA,EAAA,OAAA,CAAQ,KAAA,EAAA,GAAR,KAAA,EAAA,GAAA,EAAiB,YAAA,EAAc,SAAA,EAAU,YAAA,CAAA,EAEhD,OAAA,CAAQ,MAAA,mBAAS,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,CAAA,EAAuC,OAAA,CAAQ,KAAM,CAAA,EAAA,CAAA,CAGrF,GAAA,EAAA,OAAA,CAAQ,KAAA,EAAA,GAAR,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAe,MAAA,EAAA,kBACd,eAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,YAAA,CAAA,EACX,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,SAAA,EAAA,GAAW;AAxBnD,MAAA,IAAAA,GAAAA;AAyBgB,MAAA,uBAAA,eAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,GAAA,EAAA,CAAKA,IAAAA,EAAA,IAAA,CAAK,KAAA,EAAA,GAAL,KAAA,EAAAA,IAAAA,EAAc,SAAA,EAAW,SAAA,EAAU,gBAAA,EAAiB,QAAA,CAAA,EAC1D,IAAA,CAAK,KAAA,kBACJ,eAAA,CAAA,aAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,IAAA,CAAK,IAAA;AAAA,UACT,IAAA,EAAM,IAAA,CAAK,IAAA;AAAA,UACX,SAAA,EAAW,iCAAA,kDAAG,EAAoD,IAAA,CAAK,SAAS;AAAA,QAAA,CAAA;AAAA,QAE/E,IAAA,CAAK;AAAA,MACR,EAAA,kBAEA,eAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,IAAA,CAAK,MAAA;AAAA,UACd,SAAA,EAAW,iCAAA;AAAA,YACT,2EAAA;AAAA,YACA,IAAA,CAAK;AAAA,UACP;AAAA,QAAA,CAAA;AAAA,QAEC,IAAA,CAAK;AAAA,MACR,CAEJ,CAAA;AAAA,IAAA,CACD,CACH,EAAA,EACE,IAAA,EAGH,OAAA,CAAQ,UAAA,mBAAa,eAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,OAAA,CAAO,CAC7C,CAAA;AAAA,EAAA,CACD,CACH,CAAA;AAEJ;ADtBA;AACA;AACE;AACF,gCAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-QGXFFTPH.js","sourcesContent":[null,"\"use client\";\nimport React from 'react';\nimport { cn } from '../../lib/utils';\nimport type { UserMenuSection } from './types';\n\ninterface MobileMenuProps {\n sections: UserMenuSection[];\n aslink?: React.ElementType;\n onClick?: () => void;\n}\n\nexport function MobileMenu({ sections, aslink, onClick }: MobileMenuProps) {\n const LinkComponent = aslink ?? 'a';\n\n return (\n <div className=\"w-full bg-white p-2 space-y-4\">\n {sections.map((section, sectionIndex) => (\n <div key={section.label ?? sectionIndex} className=\"space-y-2\">\n {/* Section label */}\n {section.label && <div className=\"text-sm font-semibold text-gray-500\">{section.label}</div>}\n\n {/* Section items */}\n {section.items?.length ? (\n <ul className=\"space-y-1\">\n {section.items.map((item, itemIndex) => (\n <li key={item.label ?? itemIndex} className=\"cursor-pointer\" onClick={onClick}>\n {item.link ? (\n <LinkComponent\n to={item.link}\n href={item.link}\n className={cn('block w-full px-3 py-1 rounded hover:bg-gray-100', item.className)}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n onClick={item.action}\n className={cn(\n 'block w-full text-left px-3 py-1 rounded hover:bg-gray-100 cursor-pointer',\n item.className,\n )}\n >\n {item.label}\n </button>\n )}\n </li>\n ))}\n </ul>\n ) : null}\n\n {/* Separator */}\n {section.separator && <hr className=\"my-2\" />}\n </div>\n ))}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DropdownMenu,
|
|
3
|
+
DropdownMenuContent,
|
|
4
|
+
DropdownMenuGroup,
|
|
5
|
+
DropdownMenuItem,
|
|
6
|
+
DropdownMenuLabel,
|
|
7
|
+
DropdownMenuSeparator,
|
|
8
|
+
DropdownMenuTrigger
|
|
9
|
+
} from "./chunk-IAJ2ZBSJ.mjs";
|
|
10
|
+
import {
|
|
11
|
+
cn
|
|
12
|
+
} from "./chunk-F5XCCSBC.mjs";
|
|
13
|
+
|
|
14
|
+
// layouts/simple/user-menu.tsx
|
|
15
|
+
import React from "react";
|
|
16
|
+
import { UserCircle } from "lucide-react";
|
|
17
|
+
function UserMenus({
|
|
18
|
+
sections,
|
|
19
|
+
trigger,
|
|
20
|
+
aslink
|
|
21
|
+
}) {
|
|
22
|
+
const LinkComponent = aslink != null ? aslink : "button";
|
|
23
|
+
return /* @__PURE__ */ React.createElement(DropdownMenu, null, /* @__PURE__ */ React.createElement(DropdownMenuTrigger, { asChild: true }, trigger != null ? trigger : /* @__PURE__ */ React.createElement("button", { className: "flex items-center justify-center p-2 bg-blue-500 hover:bg-blue-600 active:bg-blue-700 text-white rounded-full cursor-pointer" }, /* @__PURE__ */ React.createElement(UserCircle, null))), /* @__PURE__ */ React.createElement(DropdownMenuContent, { className: "w-56", align: "start" }, sections.map((section, index) => {
|
|
24
|
+
var _a;
|
|
25
|
+
return /* @__PURE__ */ React.createElement("div", { key: (_a = section.label) != null ? _a : index }, section.label && /* @__PURE__ */ React.createElement(DropdownMenuLabel, null, section.label), section.items && section.items.length > 0 && /* @__PURE__ */ React.createElement(DropdownMenuGroup, null, section.items.map((item) => {
|
|
26
|
+
var _a2, _b;
|
|
27
|
+
return /* @__PURE__ */ React.createElement(DropdownMenuItem, { key: item.label }, item.link ? /* @__PURE__ */ React.createElement(
|
|
28
|
+
LinkComponent,
|
|
29
|
+
{
|
|
30
|
+
to: (_a2 = item.link) != null ? _a2 : "/",
|
|
31
|
+
href: (_b = item.link) != null ? _b : "/",
|
|
32
|
+
className: cn("w-full text-left cursor-pointer", item.className)
|
|
33
|
+
},
|
|
34
|
+
item.label
|
|
35
|
+
) : /* @__PURE__ */ React.createElement(
|
|
36
|
+
"button",
|
|
37
|
+
{
|
|
38
|
+
onClick: item.action,
|
|
39
|
+
className: cn("w-full text-left cursor-pointer", item.className)
|
|
40
|
+
},
|
|
41
|
+
item.label
|
|
42
|
+
));
|
|
43
|
+
})), section.separator && /* @__PURE__ */ React.createElement(DropdownMenuSeparator, null));
|
|
44
|
+
})));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export {
|
|
48
|
+
UserMenus
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=chunk-YWILOKX4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../layouts/simple/user-menu.tsx"],"sourcesContent":["\"use client\";\nimport React from 'react';\nimport { UserCircle } from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '../../components/ui/dropdown-menu';\nimport { cn } from '../../lib/utils';\nimport type { MenuItem, UserMenuSection } from './types';\n\nexport function UserMenus({\n sections,\n trigger,\n aslink,\n}: {\n sections: UserMenuSection[];\n trigger?: React.ReactNode;\n aslink: React.ElementType;\n}) {\n const LinkComponent = aslink ?? 'button';\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n {trigger ?? (\n <button className=\"flex items-center justify-center p-2 bg-blue-500 hover:bg-blue-600 active:bg-blue-700 text-white rounded-full cursor-pointer\">\n <UserCircle />\n </button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-56\" align=\"start\">\n {sections.map((section, index) => {\n return (\n <div key={section.label ?? index}>\n {section.label && <DropdownMenuLabel>{section.label}</DropdownMenuLabel>}\n {section.items && section.items.length > 0 && (\n <DropdownMenuGroup>\n {section.items.map((item) => {\n return (\n <DropdownMenuItem key={item.label}>\n {item.link ? (\n <LinkComponent\n to={item.link ?? '/'}\n href={item.link ?? '/'}\n className={cn('w-full text-left cursor-pointer', item.className)}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n onClick={item.action}\n className={cn('w-full text-left cursor-pointer', item.className)}\n >\n {item.label}\n </button>\n )}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuGroup>\n )}\n {section.separator && <DropdownMenuSeparator />}\n </div>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AACA,OAAO,WAAW;AAClB,SAAS,kBAAkB;AAkBpB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,gBAAgB,0BAAU;AAEhC,SACE,oCAAC,oBACC,oCAAC,uBAAoB,SAAO,QACzB,4BACC,oCAAC,YAAO,WAAU,kIAChB,oCAAC,gBAAW,CACd,CAEJ,GACA,oCAAC,uBAAoB,WAAU,QAAO,OAAM,WACzC,SAAS,IAAI,CAAC,SAAS,UAAU;AAzC1C;AA0CU,WACE,oCAAC,SAAI,MAAK,aAAQ,UAAR,YAAiB,SACxB,QAAQ,SAAS,oCAAC,yBAAmB,QAAQ,KAAM,GACnD,QAAQ,SAAS,QAAQ,MAAM,SAAS,KACvC,oCAAC,yBACE,QAAQ,MAAM,IAAI,CAAC,SAAS;AA/C/C,UAAAA,KAAA;AAgDoB,aACE,oCAAC,oBAAiB,KAAK,KAAK,SACzB,KAAK,OACJ;AAAA,QAAC;AAAA;AAAA,UACC,KAAIA,MAAA,KAAK,SAAL,OAAAA,MAAa;AAAA,UACjB,OAAM,UAAK,SAAL,YAAa;AAAA,UACnB,WAAW,GAAG,mCAAmC,KAAK,SAAS;AAAA;AAAA,QAE9D,KAAK;AAAA,MACR,IAEA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,KAAK;AAAA,UACd,WAAW,GAAG,mCAAmC,KAAK,SAAS;AAAA;AAAA,QAE9D,KAAK;AAAA,MACR,CAEJ;AAAA,IAEJ,CAAC,CACH,GAED,QAAQ,aAAa,oCAAC,2BAAsB,CAC/C;AAAA,EAEJ,CAAC,CACH,CACF;AAEJ;","names":["_a"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
var _chunkNI2SIUXOjs = require('./chunk-NI2SIUXO.js');
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
var _chunk6N4WCMTEjs = require('./chunk-6N4WCMTE.js');
|
|
14
|
+
|
|
15
|
+
// layouts/simple/user-menu.tsx
|
|
16
|
+
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
17
|
+
var _lucidereact = require('lucide-react');
|
|
18
|
+
function UserMenus({
|
|
19
|
+
sections,
|
|
20
|
+
trigger,
|
|
21
|
+
aslink
|
|
22
|
+
}) {
|
|
23
|
+
const LinkComponent = aslink != null ? aslink : "button";
|
|
24
|
+
return /* @__PURE__ */ _react2.default.createElement(_chunkNI2SIUXOjs.DropdownMenu, null, /* @__PURE__ */ _react2.default.createElement(_chunkNI2SIUXOjs.DropdownMenuTrigger, { asChild: true }, trigger != null ? trigger : /* @__PURE__ */ _react2.default.createElement("button", { className: "flex items-center justify-center p-2 bg-blue-500 hover:bg-blue-600 active:bg-blue-700 text-white rounded-full cursor-pointer" }, /* @__PURE__ */ _react2.default.createElement(_lucidereact.UserCircle, null))), /* @__PURE__ */ _react2.default.createElement(_chunkNI2SIUXOjs.DropdownMenuContent, { className: "w-56", align: "start" }, sections.map((section, index) => {
|
|
25
|
+
var _a;
|
|
26
|
+
return /* @__PURE__ */ _react2.default.createElement("div", { key: (_a = section.label) != null ? _a : index }, section.label && /* @__PURE__ */ _react2.default.createElement(_chunkNI2SIUXOjs.DropdownMenuLabel, null, section.label), section.items && section.items.length > 0 && /* @__PURE__ */ _react2.default.createElement(_chunkNI2SIUXOjs.DropdownMenuGroup, null, section.items.map((item) => {
|
|
27
|
+
var _a2, _b;
|
|
28
|
+
return /* @__PURE__ */ _react2.default.createElement(_chunkNI2SIUXOjs.DropdownMenuItem, { key: item.label }, item.link ? /* @__PURE__ */ _react2.default.createElement(
|
|
29
|
+
LinkComponent,
|
|
30
|
+
{
|
|
31
|
+
to: (_a2 = item.link) != null ? _a2 : "/",
|
|
32
|
+
href: (_b = item.link) != null ? _b : "/",
|
|
33
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0, "w-full text-left cursor-pointer", item.className)
|
|
34
|
+
},
|
|
35
|
+
item.label
|
|
36
|
+
) : /* @__PURE__ */ _react2.default.createElement(
|
|
37
|
+
"button",
|
|
38
|
+
{
|
|
39
|
+
onClick: item.action,
|
|
40
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0, "w-full text-left cursor-pointer", item.className)
|
|
41
|
+
},
|
|
42
|
+
item.label
|
|
43
|
+
));
|
|
44
|
+
})), section.separator && /* @__PURE__ */ _react2.default.createElement(_chunkNI2SIUXOjs.DropdownMenuSeparator, null));
|
|
45
|
+
})));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
exports.UserMenus = UserMenus;
|
|
51
|
+
//# sourceMappingURL=chunk-ZOF6UW3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-ZOF6UW3D.js","../layouts/simple/user-menu.tsx"],"names":["_a"],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACZA,4EAAkB;AAClB,2CAA2B;AAkBpB,SAAS,SAAA,CAAU;AAAA,EACxB,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,cAAA,EAAgB,OAAA,GAAA,KAAA,EAAA,OAAA,EAAU,QAAA;AAEhC,EAAA,uBACE,eAAA,CAAA,aAAA,CAAC,6BAAA,EAAA,IAAA,kBACC,eAAA,CAAA,aAAA,CAAC,oCAAA,EAAA,EAAoB,OAAA,EAAO,KAAA,CAAA,EACzB,QAAA,GAAA,KAAA,EAAA,QAAA,kBACC,eAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,+HAAA,CAAA,kBAChB,eAAA,CAAA,aAAA,CAAC,uBAAA,EAAA,IAAW,CACd,CAEJ,CAAA,kBACA,eAAA,CAAA,aAAA,CAAC,oCAAA,EAAA,EAAoB,SAAA,EAAU,MAAA,EAAO,KAAA,EAAM,QAAA,CAAA,EACzC,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,KAAA,EAAA,GAAU;AAzC1C,IAAA,IAAA,EAAA;AA0CU,IAAA,uBACE,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAA,CAAK,GAAA,EAAA,OAAA,CAAQ,KAAA,EAAA,GAAR,KAAA,EAAA,GAAA,EAAiB,MAAA,CAAA,EACxB,OAAA,CAAQ,MAAA,mBAAS,eAAA,CAAA,aAAA,CAAC,kCAAA,EAAA,IAAA,EAAmB,OAAA,CAAQ,KAAM,CAAA,EACnD,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAS,EAAA,mBACvC,eAAA,CAAA,aAAA,CAAC,kCAAA,EAAA,IAAA,EACE,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS;AA/C/C,MAAA,IAAAA,GAAAA,EAAA,EAAA;AAgDoB,MAAA,uBACE,eAAA,CAAA,aAAA,CAAC,iCAAA,EAAA,EAAiB,GAAA,EAAK,IAAA,CAAK,MAAA,CAAA,EACzB,IAAA,CAAK,KAAA,kBACJ,eAAA,CAAA,aAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAA,CAAIA,IAAAA,EAAA,IAAA,CAAK,IAAA,EAAA,GAAL,KAAA,EAAAA,IAAAA,EAAa,GAAA;AAAA,UACjB,IAAA,EAAA,CAAM,GAAA,EAAA,IAAA,CAAK,IAAA,EAAA,GAAL,KAAA,EAAA,GAAA,EAAa,GAAA;AAAA,UACnB,SAAA,EAAW,iCAAA,iCAAG,EAAmC,IAAA,CAAK,SAAS;AAAA,QAAA,CAAA;AAAA,QAE9D,IAAA,CAAK;AAAA,MACR,EAAA,kBAEA,eAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,IAAA,CAAK,MAAA;AAAA,UACd,SAAA,EAAW,iCAAA,iCAAG,EAAmC,IAAA,CAAK,SAAS;AAAA,QAAA,CAAA;AAAA,QAE9D,IAAA,CAAK;AAAA,MACR,CAEJ,CAAA;AAAA,IAEJ,CAAC,CACH,CAAA,EAED,OAAA,CAAQ,UAAA,mBAAa,eAAA,CAAA,aAAA,CAAC,sCAAA,EAAA,IAAsB,CAC/C,CAAA;AAAA,EAEJ,CAAC,CACH,CACF,CAAA;AAEJ;ADjCA;AACA;AACE;AACF,8BAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-ZOF6UW3D.js","sourcesContent":[null,"\"use client\";\nimport React from 'react';\nimport { UserCircle } from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '../../components/ui/dropdown-menu';\nimport { cn } from '../../lib/utils';\nimport type { MenuItem, UserMenuSection } from './types';\n\nexport function UserMenus({\n sections,\n trigger,\n aslink,\n}: {\n sections: UserMenuSection[];\n trigger?: React.ReactNode;\n aslink: React.ElementType;\n}) {\n const LinkComponent = aslink ?? 'button';\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n {trigger ?? (\n <button className=\"flex items-center justify-center p-2 bg-blue-500 hover:bg-blue-600 active:bg-blue-700 text-white rounded-full cursor-pointer\">\n <UserCircle />\n </button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-56\" align=\"start\">\n {sections.map((section, index) => {\n return (\n <div key={section.label ?? index}>\n {section.label && <DropdownMenuLabel>{section.label}</DropdownMenuLabel>}\n {section.items && section.items.length > 0 && (\n <DropdownMenuGroup>\n {section.items.map((item) => {\n return (\n <DropdownMenuItem key={item.label}>\n {item.link ? (\n <LinkComponent\n to={item.link ?? '/'}\n href={item.link ?? '/'}\n className={cn('w-full text-left cursor-pointer', item.className)}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n onClick={item.action}\n className={cn('w-full text-left cursor-pointer', item.className)}\n >\n {item.label}\n </button>\n )}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuGroup>\n )}\n {section.separator && <DropdownMenuSeparator />}\n </div>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
|
|
@@ -23,7 +23,7 @@ declare const CommandInput: React.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<
|
|
|
23
23
|
ref?: React.Ref<HTMLInputElement>;
|
|
24
24
|
} & {
|
|
25
25
|
asChild?: boolean;
|
|
26
|
-
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "
|
|
26
|
+
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "type" | "value"> & {
|
|
27
27
|
value?: string;
|
|
28
28
|
onValueChange?: (search: string) => void;
|
|
29
29
|
} & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -23,7 +23,7 @@ declare const CommandInput: React.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<
|
|
|
23
23
|
ref?: React.Ref<HTMLInputElement>;
|
|
24
24
|
} & {
|
|
25
25
|
asChild?: boolean;
|
|
26
|
-
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "
|
|
26
|
+
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "type" | "value"> & {
|
|
27
27
|
value?: string;
|
|
28
28
|
onValueChange?: (search: string) => void;
|
|
29
29
|
} & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import * as ResizablePrimitive from 'react-resizable-panels';
|
|
3
3
|
|
|
4
4
|
declare const ResizablePanelGroup: ({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => React.JSX.Element;
|
|
5
|
-
declare const ResizablePanel: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<
|
|
5
|
+
declare const ResizablePanel: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLButtonElement | HTMLElement | HTMLDivElement | HTMLObjectElement | HTMLMapElement | HTMLAnchorElement | HTMLFormElement | HTMLHeadingElement | HTMLImageElement | HTMLInputElement | HTMLLabelElement | HTMLLIElement | HTMLOListElement | HTMLParagraphElement | HTMLSelectElement | HTMLSpanElement | HTMLUListElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLLegendElement | HTMLLinkElement | HTMLMetaElement | HTMLMeterElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPreElement | HTMLProgressElement | HTMLSlotElement | HTMLScriptElement | HTMLSourceElement | HTMLStyleElement | HTMLTableElement | HTMLTemplateElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLVideoElement | HTMLTableCaptionElement | HTMLMenuElement | HTMLPictureElement>, "id" | "onResize"> & {
|
|
6
6
|
className?: string;
|
|
7
7
|
collapsedSize?: number | undefined;
|
|
8
8
|
collapsible?: boolean | undefined;
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import * as ResizablePrimitive from 'react-resizable-panels';
|
|
3
3
|
|
|
4
4
|
declare const ResizablePanelGroup: ({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => React.JSX.Element;
|
|
5
|
-
declare const ResizablePanel: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<
|
|
5
|
+
declare const ResizablePanel: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLButtonElement | HTMLElement | HTMLDivElement | HTMLObjectElement | HTMLMapElement | HTMLAnchorElement | HTMLFormElement | HTMLHeadingElement | HTMLImageElement | HTMLInputElement | HTMLLabelElement | HTMLLIElement | HTMLOListElement | HTMLParagraphElement | HTMLSelectElement | HTMLSpanElement | HTMLUListElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLLegendElement | HTMLLinkElement | HTMLMetaElement | HTMLMeterElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPreElement | HTMLProgressElement | HTMLSlotElement | HTMLScriptElement | HTMLSourceElement | HTMLStyleElement | HTMLTableElement | HTMLTemplateElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLVideoElement | HTMLTableCaptionElement | HTMLMenuElement | HTMLPictureElement>, "id" | "onResize"> & {
|
|
6
6
|
className?: string;
|
|
7
7
|
collapsedSize?: number | undefined;
|
|
8
8
|
collapsible?: boolean | undefined;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
3
|
+
require('../../../chunk-5SLUBHNN.js');
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
var _chunk273TIMKMjs = require('../../../chunk-273TIMKM.js');
|
|
@@ -8,7 +9,6 @@ var _chunk273TIMKMjs = require('../../../chunk-273TIMKM.js');
|
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
var _chunkA4FV6TTMjs = require('../../../chunk-A4FV6TTM.js');
|
|
11
|
-
require('../../../chunk-5SLUBHNN.js');
|
|
12
12
|
require('../../../chunk-2NMEKWO5.js');
|
|
13
13
|
|
|
14
14
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/components/widgets/dialog-manager/index.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,6DAAmC;AACnC;AACE;AACA;AACA;AACF,6DAAmC;AACnC,sCAAmC;AACnC
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/components/widgets/dialog-manager/index.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ,sCAAmC;AACnC;AACE;AACF,6DAAmC;AACnC;AACE;AACA;AACA;AACF,6DAAmC;AACnC,sCAAmC;AACnC;AACE;AACA;AACA;AACA;AACF,wOAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/components/widgets/dialog-manager/index.js"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import "../../../chunk-B2Z7BNYW.mjs";
|
|
2
3
|
import {
|
|
3
4
|
DialogProvider
|
|
4
5
|
} from "../../../chunk-5RW6O56P.mjs";
|
|
@@ -7,7 +8,6 @@ import {
|
|
|
7
8
|
createTypedDialog,
|
|
8
9
|
useDialog
|
|
9
10
|
} from "../../../chunk-PDB2VCWX.mjs";
|
|
10
|
-
import "../../../chunk-B2Z7BNYW.mjs";
|
|
11
11
|
import "../../../chunk-YOSPWY5K.mjs";
|
|
12
12
|
export {
|
|
13
13
|
DialogContext,
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { UserMenuSection, MenuItem } from './types.mjs';
|
|
3
|
+
|
|
4
|
+
interface LayoutProps {
|
|
5
|
+
logo?: {
|
|
6
|
+
src?: string;
|
|
7
|
+
link?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
user?: {
|
|
11
|
+
menuSections: UserMenuSection[];
|
|
12
|
+
trigger?: React__default.ReactNode;
|
|
13
|
+
};
|
|
14
|
+
left?: {
|
|
15
|
+
menus: MenuItem[];
|
|
16
|
+
classNames?: {
|
|
17
|
+
nav?: string;
|
|
18
|
+
link?: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
right?: {
|
|
22
|
+
menus: MenuItem[];
|
|
23
|
+
classNames?: {
|
|
24
|
+
nav?: string;
|
|
25
|
+
link?: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
sidebar?: {
|
|
29
|
+
title: string;
|
|
30
|
+
content: React__default.ReactNode;
|
|
31
|
+
};
|
|
32
|
+
footer?: {
|
|
33
|
+
menus: MenuItem[];
|
|
34
|
+
content?: string;
|
|
35
|
+
classNames?: {
|
|
36
|
+
wrapper?: string;
|
|
37
|
+
nav?: string;
|
|
38
|
+
link?: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
classNames?: {
|
|
42
|
+
header?: string;
|
|
43
|
+
content?: string;
|
|
44
|
+
contentBottom?: string;
|
|
45
|
+
};
|
|
46
|
+
loading?: boolean;
|
|
47
|
+
children?: React__default.ReactNode;
|
|
48
|
+
aslink: React__default.ElementType;
|
|
49
|
+
}
|
|
50
|
+
declare function SimpleLayout(props: LayoutProps): React__default.JSX.Element;
|
|
51
|
+
|
|
52
|
+
export { SimpleLayout as default };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { UserMenuSection, MenuItem } from './types.js';
|
|
3
|
+
|
|
4
|
+
interface LayoutProps {
|
|
5
|
+
logo?: {
|
|
6
|
+
src?: string;
|
|
7
|
+
link?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
user?: {
|
|
11
|
+
menuSections: UserMenuSection[];
|
|
12
|
+
trigger?: React__default.ReactNode;
|
|
13
|
+
};
|
|
14
|
+
left?: {
|
|
15
|
+
menus: MenuItem[];
|
|
16
|
+
classNames?: {
|
|
17
|
+
nav?: string;
|
|
18
|
+
link?: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
right?: {
|
|
22
|
+
menus: MenuItem[];
|
|
23
|
+
classNames?: {
|
|
24
|
+
nav?: string;
|
|
25
|
+
link?: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
sidebar?: {
|
|
29
|
+
title: string;
|
|
30
|
+
content: React__default.ReactNode;
|
|
31
|
+
};
|
|
32
|
+
footer?: {
|
|
33
|
+
menus: MenuItem[];
|
|
34
|
+
content?: string;
|
|
35
|
+
classNames?: {
|
|
36
|
+
wrapper?: string;
|
|
37
|
+
nav?: string;
|
|
38
|
+
link?: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
classNames?: {
|
|
42
|
+
header?: string;
|
|
43
|
+
content?: string;
|
|
44
|
+
contentBottom?: string;
|
|
45
|
+
};
|
|
46
|
+
loading?: boolean;
|
|
47
|
+
children?: React__default.ReactNode;
|
|
48
|
+
aslink: React__default.ElementType;
|
|
49
|
+
}
|
|
50
|
+
declare function SimpleLayout(props: LayoutProps): React__default.JSX.Element;
|
|
51
|
+
|
|
52
|
+
export { SimpleLayout as default };
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkQGXFFTPHjs = require('../../chunk-QGXFFTPH.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkZOF6UW3Djs = require('../../chunk-ZOF6UW3D.js');
|
|
9
|
+
require('../../chunk-NI2SIUXO.js');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunk6N4WCMTEjs = require('../../chunk-6N4WCMTE.js');
|
|
13
|
+
require('../../chunk-2NMEKWO5.js');
|
|
14
|
+
|
|
15
|
+
// layouts/simple/index.tsx
|
|
16
|
+
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
17
|
+
var _lucidereact = require('lucide-react');
|
|
18
|
+
function SimpleLayout(props) {
|
|
19
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
20
|
+
const { logo, user, left, right, sidebar, footer, classNames, loading, children, aslink } = props;
|
|
21
|
+
const [mobileMenuOpen, setMobileMenuOpen] = _react.useState.call(void 0, false);
|
|
22
|
+
const [isMobile, setIsMobile] = _react.useState.call(void 0, false);
|
|
23
|
+
const LinkComponent = aslink != null ? aslink : "button";
|
|
24
|
+
_react.useEffect.call(void 0, () => {
|
|
25
|
+
const handleResize = () => {
|
|
26
|
+
setIsMobile(window.innerWidth < 768);
|
|
27
|
+
};
|
|
28
|
+
handleResize();
|
|
29
|
+
window.addEventListener("resize", handleResize);
|
|
30
|
+
return () => window.removeEventListener("resize", handleResize);
|
|
31
|
+
}, []);
|
|
32
|
+
const toggleMobileMenu = () => setMobileMenuOpen(!mobileMenuOpen);
|
|
33
|
+
const leftMenus = (_a = left == null ? void 0 : left.menus) != null ? _a : [];
|
|
34
|
+
const rightMenus = (_b = right == null ? void 0 : right.menus) != null ? _b : [];
|
|
35
|
+
const topMenus = [...leftMenus, ...rightMenus];
|
|
36
|
+
const userMenuSections = (_c = user == null ? void 0 : user.menuSections) != null ? _c : [];
|
|
37
|
+
const footerMenus = (_d = footer == null ? void 0 : footer.menus) != null ? _d : [];
|
|
38
|
+
return /* @__PURE__ */ _react2.default.createElement("div", { className: "flex flex-col min-h-screen" }, /* @__PURE__ */ _react2.default.createElement(
|
|
39
|
+
"header",
|
|
40
|
+
{
|
|
41
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0,
|
|
42
|
+
"px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300",
|
|
43
|
+
classNames == null ? void 0 : classNames.header
|
|
44
|
+
)
|
|
45
|
+
},
|
|
46
|
+
/* @__PURE__ */ _react2.default.createElement("div", { className: "flex items-center space-x-4" }, sidebar && /* @__PURE__ */ _react2.default.createElement(
|
|
47
|
+
"button",
|
|
48
|
+
{
|
|
49
|
+
className: "bg-transparent border-gray-400 hover:border-gray-500",
|
|
50
|
+
onClick: () => {
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
), logo && /* @__PURE__ */ _react2.default.createElement("div", { className: _chunk6N4WCMTEjs.cn.call(void 0, "_logo") }, /* @__PURE__ */ _react2.default.createElement(LinkComponent, { to: (_e = logo.link) != null ? _e : "/", href: (_f = logo.link) != null ? _f : "/" }, /* @__PURE__ */ _react2.default.createElement("img", { src: logo.src, alt: "Logo", className: _chunk6N4WCMTEjs.cn.call(void 0, "h-10", logo == null ? void 0 : logo.className) }))), /* @__PURE__ */ _react2.default.createElement("nav", { className: _chunk6N4WCMTEjs.cn.call(void 0, "flex space-x-4 items-center", (_g = left == null ? void 0 : left.classNames) == null ? void 0 : _g.nav) }, leftMenus.map(
|
|
54
|
+
(item) => {
|
|
55
|
+
var _a2, _b2;
|
|
56
|
+
return item.link ? /* @__PURE__ */ _react2.default.createElement(
|
|
57
|
+
LinkComponent,
|
|
58
|
+
{
|
|
59
|
+
key: item.label,
|
|
60
|
+
to: item.link,
|
|
61
|
+
href: item.link,
|
|
62
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0,
|
|
63
|
+
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
64
|
+
(_a2 = left == null ? void 0 : left.classNames) == null ? void 0 : _a2.nav,
|
|
65
|
+
item.className,
|
|
66
|
+
item.title || !isMobile ? "inline-block" : "hidden"
|
|
67
|
+
)
|
|
68
|
+
},
|
|
69
|
+
item.label
|
|
70
|
+
) : /* @__PURE__ */ _react2.default.createElement(
|
|
71
|
+
"button",
|
|
72
|
+
{
|
|
73
|
+
key: item.label,
|
|
74
|
+
onClick: item.action,
|
|
75
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0,
|
|
76
|
+
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
77
|
+
(_b2 = left == null ? void 0 : left.classNames) == null ? void 0 : _b2.nav,
|
|
78
|
+
item.className,
|
|
79
|
+
item.title || !isMobile ? "inline-block" : "hidden"
|
|
80
|
+
)
|
|
81
|
+
},
|
|
82
|
+
item.label
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
))),
|
|
86
|
+
/* @__PURE__ */ _react2.default.createElement("nav", { className: _chunk6N4WCMTEjs.cn.call(void 0, "hidden md:flex space-x-4 items-center", (_h = right == null ? void 0 : right.classNames) == null ? void 0 : _h.nav) }, rightMenus.map(
|
|
87
|
+
(item) => {
|
|
88
|
+
var _a2, _b2;
|
|
89
|
+
return item.link ? /* @__PURE__ */ _react2.default.createElement(
|
|
90
|
+
LinkComponent,
|
|
91
|
+
{
|
|
92
|
+
key: item.label,
|
|
93
|
+
to: item.link,
|
|
94
|
+
href: item.link,
|
|
95
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0,
|
|
96
|
+
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
97
|
+
(_a2 = right == null ? void 0 : right.classNames) == null ? void 0 : _a2.nav,
|
|
98
|
+
item.className
|
|
99
|
+
)
|
|
100
|
+
},
|
|
101
|
+
item.label
|
|
102
|
+
) : /* @__PURE__ */ _react2.default.createElement(
|
|
103
|
+
"button",
|
|
104
|
+
{
|
|
105
|
+
key: item.label,
|
|
106
|
+
onClick: item.action,
|
|
107
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0,
|
|
108
|
+
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
109
|
+
(_b2 = right == null ? void 0 : right.classNames) == null ? void 0 : _b2.nav,
|
|
110
|
+
item.className
|
|
111
|
+
)
|
|
112
|
+
},
|
|
113
|
+
item.label
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
), userMenuSections.length > 0 && /* @__PURE__ */ _react2.default.createElement(_chunkZOF6UW3Djs.UserMenus, { sections: userMenuSections, trigger: user == null ? void 0 : user.trigger, aslink })),
|
|
117
|
+
/* @__PURE__ */ _react2.default.createElement("button", { onClick: toggleMobileMenu, className: "md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer" }, /* @__PURE__ */ _react2.default.createElement(_lucidereact.Menu, { className: "" }))
|
|
118
|
+
), isMobile && mobileMenuOpen && /* @__PURE__ */ _react2.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ _react2.default.createElement(_chunkQGXFFTPHjs.MobileMenu, { sections: userMenuSections, aslink, onClick: toggleMobileMenu })), /* @__PURE__ */ _react2.default.createElement("main", { className: _chunk6N4WCMTEjs.cn.call(void 0, "p-4 flex flex-col flex-1", classNames == null ? void 0 : classNames.content) }, !loading && /* @__PURE__ */ _react2.default.createElement("div", { className: "flex items-center justify-center h-full" }, children), /* @__PURE__ */ _react2.default.createElement("div", { className: _chunk6N4WCMTEjs.cn.call(void 0, "flex-1", classNames == null ? void 0 : classNames.contentBottom) })), footer && /* @__PURE__ */ _react2.default.createElement(
|
|
119
|
+
"footer",
|
|
120
|
+
{
|
|
121
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0,
|
|
122
|
+
"px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600",
|
|
123
|
+
(_i = footer == null ? void 0 : footer.classNames) == null ? void 0 : _i.wrapper
|
|
124
|
+
)
|
|
125
|
+
},
|
|
126
|
+
/* @__PURE__ */ _react2.default.createElement("nav", { className: _chunk6N4WCMTEjs.cn.call(void 0, "flex flex-wrap justify-center space-x-4", (_j = footer == null ? void 0 : footer.classNames) == null ? void 0 : _j.nav) }, footerMenus.map(
|
|
127
|
+
(item) => {
|
|
128
|
+
var _a2, _b2;
|
|
129
|
+
return item.link ? /* @__PURE__ */ _react2.default.createElement(
|
|
130
|
+
LinkComponent,
|
|
131
|
+
{
|
|
132
|
+
key: item.label,
|
|
133
|
+
to: item.link,
|
|
134
|
+
href: item.link,
|
|
135
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0,
|
|
136
|
+
"text-secondary hover:text-primary cursor-pointer no-underline",
|
|
137
|
+
(_a2 = footer == null ? void 0 : footer.classNames) == null ? void 0 : _a2.link,
|
|
138
|
+
item.className
|
|
139
|
+
)
|
|
140
|
+
},
|
|
141
|
+
item.label
|
|
142
|
+
) : /* @__PURE__ */ _react2.default.createElement(
|
|
143
|
+
"button",
|
|
144
|
+
{
|
|
145
|
+
key: item.label,
|
|
146
|
+
onClick: item.action,
|
|
147
|
+
className: _chunk6N4WCMTEjs.cn.call(void 0,
|
|
148
|
+
"text-secondary hover:text-primary cursor-pointer no-underline",
|
|
149
|
+
(_b2 = footer == null ? void 0 : footer.classNames) == null ? void 0 : _b2.link,
|
|
150
|
+
item.className
|
|
151
|
+
)
|
|
152
|
+
},
|
|
153
|
+
item.label
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
)),
|
|
157
|
+
/* @__PURE__ */ _react2.default.createElement("div", { className: "mt-2 text-center" }, footer == null ? void 0 : footer.content)
|
|
158
|
+
));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
exports.default = SimpleLayout;
|
|
163
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/index.js","../../../layouts/simple/index.tsx"],"names":["_a","_b"],"mappings":"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","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/index.js","sourcesContent":[null,"\"use client\";\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { Menu } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport { UserMenus } from './user-menu';\nimport { MobileMenu } from './mobile-menu';\nimport type { MenuItem, UserMenuSection } from './types';\n\ninterface LayoutProps {\n logo?: {\n src?: string;\n link?: string;\n className?: string;\n };\n user?: {\n menuSections: UserMenuSection[];\n trigger?: React.ReactNode;\n };\n left?: {\n menus: MenuItem[];\n classNames?: {\n nav?: string;\n link?: string;\n };\n };\n right?: {\n menus: MenuItem[];\n classNames?: {\n nav?: string;\n link?: string;\n };\n };\n sidebar?: {\n title: string;\n content: React.ReactNode;\n };\n footer?: {\n menus: MenuItem[];\n content?: string;\n classNames?: {\n wrapper?: string;\n nav?: string;\n link?: string;\n };\n };\n classNames?: {\n header?: string;\n content?: string;\n contentBottom?: string;\n };\n loading?: boolean;\n children?: React.ReactNode;\n aslink: React.ElementType;\n}\n\nexport default function SimpleLayout(props: LayoutProps) {\n const { logo, user, left, right, sidebar, footer, classNames, loading, children, aslink } = props;\n\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n\n const LinkComponent = aslink ?? 'button';\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < 768);\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const toggleMobileMenu = () => setMobileMenuOpen(!mobileMenuOpen);\n\n const leftMenus = left?.menus ?? [];\n const rightMenus = right?.menus ?? [];\n const topMenus = [...leftMenus, ...rightMenus];\n const userMenuSections = user?.menuSections ?? [];\n const footerMenus = footer?.menus ?? [];\n\n return (\n <div className=\"flex flex-col min-h-screen\">\n {/* Header */}\n <header\n className={cn(\n 'px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300',\n classNames?.header,\n )}\n >\n <div className=\"flex items-center space-x-4\">\n {sidebar && (\n <button\n className=\"bg-transparent border-gray-400 hover:border-gray-500\"\n onClick={() => {\n /* open sidebar */\n }}\n >\n {/* icon */}\n </button>\n )}\n {logo && (\n <div className={cn('_logo')}>\n <LinkComponent to={logo.link ?? '/'} href={logo.link ?? '/'}>\n <img src={logo.src} alt=\"Logo\" className={cn('h-10', logo?.className)} />\n </LinkComponent>\n </div>\n )}\n\n {/* Left Menus */}\n <nav className={cn('flex space-x-4 items-center', left?.classNames?.nav)}>\n {leftMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n left?.classNames?.nav,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n left?.classNames?.nav,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n </div>\n\n {/* Right menus */}\n <nav className={cn('hidden md:flex space-x-4 items-center', right?.classNames?.nav)}>\n {rightMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n right?.classNames?.nav,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n right?.classNames?.nav,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n {userMenuSections.length > 0 && (\n <UserMenus sections={userMenuSections} trigger={user?.trigger} aslink={aslink} />\n )}\n </nav>\n\n {/* Mobile menu button */}\n <button onClick={toggleMobileMenu} className=\"md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer\">\n <Menu className=\"\" />\n </button>\n </header>\n\n {/* Mobile menu */}\n {isMobile && mobileMenuOpen && (\n <div className=\"w-full\">\n <MobileMenu sections={userMenuSections} aslink={aslink} onClick={toggleMobileMenu} />\n </div>\n )}\n\n {/* Main content */}\n <main className={cn('p-4 flex flex-col flex-1', classNames?.content)}>\n {!loading && <div className=\"flex items-center justify-center h-full\">{children}</div>}\n <div className={cn('flex-1', classNames?.contentBottom)}></div>\n </main>\n\n {/* Footer */}\n {footer && (\n <footer\n className={cn(\n 'px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600',\n footer?.classNames?.wrapper,\n )}\n >\n <nav className={cn('flex flex-wrap justify-center space-x-4', footer?.classNames?.nav)}>\n {footerMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n footer?.classNames?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n footer?.classNames?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n <div className=\"mt-2 text-center\">{footer?.content}</div>\n </footer>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
MobileMenu
|
|
4
|
+
} from "../../chunk-OXTCSLHP.mjs";
|
|
5
|
+
import {
|
|
6
|
+
UserMenus
|
|
7
|
+
} from "../../chunk-YWILOKX4.mjs";
|
|
8
|
+
import "../../chunk-IAJ2ZBSJ.mjs";
|
|
9
|
+
import {
|
|
10
|
+
cn
|
|
11
|
+
} from "../../chunk-F5XCCSBC.mjs";
|
|
12
|
+
import "../../chunk-YOSPWY5K.mjs";
|
|
13
|
+
|
|
14
|
+
// layouts/simple/index.tsx
|
|
15
|
+
import React, { useState, useEffect } from "react";
|
|
16
|
+
import { Menu } from "lucide-react";
|
|
17
|
+
function SimpleLayout(props) {
|
|
18
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
19
|
+
const { logo, user, left, right, sidebar, footer, classNames, loading, children, aslink } = props;
|
|
20
|
+
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
|
|
21
|
+
const [isMobile, setIsMobile] = useState(false);
|
|
22
|
+
const LinkComponent = aslink != null ? aslink : "button";
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const handleResize = () => {
|
|
25
|
+
setIsMobile(window.innerWidth < 768);
|
|
26
|
+
};
|
|
27
|
+
handleResize();
|
|
28
|
+
window.addEventListener("resize", handleResize);
|
|
29
|
+
return () => window.removeEventListener("resize", handleResize);
|
|
30
|
+
}, []);
|
|
31
|
+
const toggleMobileMenu = () => setMobileMenuOpen(!mobileMenuOpen);
|
|
32
|
+
const leftMenus = (_a = left == null ? void 0 : left.menus) != null ? _a : [];
|
|
33
|
+
const rightMenus = (_b = right == null ? void 0 : right.menus) != null ? _b : [];
|
|
34
|
+
const topMenus = [...leftMenus, ...rightMenus];
|
|
35
|
+
const userMenuSections = (_c = user == null ? void 0 : user.menuSections) != null ? _c : [];
|
|
36
|
+
const footerMenus = (_d = footer == null ? void 0 : footer.menus) != null ? _d : [];
|
|
37
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col min-h-screen" }, /* @__PURE__ */ React.createElement(
|
|
38
|
+
"header",
|
|
39
|
+
{
|
|
40
|
+
className: cn(
|
|
41
|
+
"px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300",
|
|
42
|
+
classNames == null ? void 0 : classNames.header
|
|
43
|
+
)
|
|
44
|
+
},
|
|
45
|
+
/* @__PURE__ */ React.createElement("div", { className: "flex items-center space-x-4" }, sidebar && /* @__PURE__ */ React.createElement(
|
|
46
|
+
"button",
|
|
47
|
+
{
|
|
48
|
+
className: "bg-transparent border-gray-400 hover:border-gray-500",
|
|
49
|
+
onClick: () => {
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
), logo && /* @__PURE__ */ React.createElement("div", { className: cn("_logo") }, /* @__PURE__ */ React.createElement(LinkComponent, { to: (_e = logo.link) != null ? _e : "/", href: (_f = logo.link) != null ? _f : "/" }, /* @__PURE__ */ React.createElement("img", { src: logo.src, alt: "Logo", className: cn("h-10", logo == null ? void 0 : logo.className) }))), /* @__PURE__ */ React.createElement("nav", { className: cn("flex space-x-4 items-center", (_g = left == null ? void 0 : left.classNames) == null ? void 0 : _g.nav) }, leftMenus.map(
|
|
53
|
+
(item) => {
|
|
54
|
+
var _a2, _b2;
|
|
55
|
+
return item.link ? /* @__PURE__ */ React.createElement(
|
|
56
|
+
LinkComponent,
|
|
57
|
+
{
|
|
58
|
+
key: item.label,
|
|
59
|
+
to: item.link,
|
|
60
|
+
href: item.link,
|
|
61
|
+
className: cn(
|
|
62
|
+
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
63
|
+
(_a2 = left == null ? void 0 : left.classNames) == null ? void 0 : _a2.nav,
|
|
64
|
+
item.className,
|
|
65
|
+
item.title || !isMobile ? "inline-block" : "hidden"
|
|
66
|
+
)
|
|
67
|
+
},
|
|
68
|
+
item.label
|
|
69
|
+
) : /* @__PURE__ */ React.createElement(
|
|
70
|
+
"button",
|
|
71
|
+
{
|
|
72
|
+
key: item.label,
|
|
73
|
+
onClick: item.action,
|
|
74
|
+
className: cn(
|
|
75
|
+
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
76
|
+
(_b2 = left == null ? void 0 : left.classNames) == null ? void 0 : _b2.nav,
|
|
77
|
+
item.className,
|
|
78
|
+
item.title || !isMobile ? "inline-block" : "hidden"
|
|
79
|
+
)
|
|
80
|
+
},
|
|
81
|
+
item.label
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
))),
|
|
85
|
+
/* @__PURE__ */ React.createElement("nav", { className: cn("hidden md:flex space-x-4 items-center", (_h = right == null ? void 0 : right.classNames) == null ? void 0 : _h.nav) }, rightMenus.map(
|
|
86
|
+
(item) => {
|
|
87
|
+
var _a2, _b2;
|
|
88
|
+
return item.link ? /* @__PURE__ */ React.createElement(
|
|
89
|
+
LinkComponent,
|
|
90
|
+
{
|
|
91
|
+
key: item.label,
|
|
92
|
+
to: item.link,
|
|
93
|
+
href: item.link,
|
|
94
|
+
className: cn(
|
|
95
|
+
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
96
|
+
(_a2 = right == null ? void 0 : right.classNames) == null ? void 0 : _a2.nav,
|
|
97
|
+
item.className
|
|
98
|
+
)
|
|
99
|
+
},
|
|
100
|
+
item.label
|
|
101
|
+
) : /* @__PURE__ */ React.createElement(
|
|
102
|
+
"button",
|
|
103
|
+
{
|
|
104
|
+
key: item.label,
|
|
105
|
+
onClick: item.action,
|
|
106
|
+
className: cn(
|
|
107
|
+
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
108
|
+
(_b2 = right == null ? void 0 : right.classNames) == null ? void 0 : _b2.nav,
|
|
109
|
+
item.className
|
|
110
|
+
)
|
|
111
|
+
},
|
|
112
|
+
item.label
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
), userMenuSections.length > 0 && /* @__PURE__ */ React.createElement(UserMenus, { sections: userMenuSections, trigger: user == null ? void 0 : user.trigger, aslink })),
|
|
116
|
+
/* @__PURE__ */ React.createElement("button", { onClick: toggleMobileMenu, className: "md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer" }, /* @__PURE__ */ React.createElement(Menu, { className: "" }))
|
|
117
|
+
), isMobile && mobileMenuOpen && /* @__PURE__ */ React.createElement("div", { className: "w-full" }, /* @__PURE__ */ React.createElement(MobileMenu, { sections: userMenuSections, aslink, onClick: toggleMobileMenu })), /* @__PURE__ */ React.createElement("main", { className: cn("p-4 flex flex-col flex-1", classNames == null ? void 0 : classNames.content) }, !loading && /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-center h-full" }, children), /* @__PURE__ */ React.createElement("div", { className: cn("flex-1", classNames == null ? void 0 : classNames.contentBottom) })), footer && /* @__PURE__ */ React.createElement(
|
|
118
|
+
"footer",
|
|
119
|
+
{
|
|
120
|
+
className: cn(
|
|
121
|
+
"px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600",
|
|
122
|
+
(_i = footer == null ? void 0 : footer.classNames) == null ? void 0 : _i.wrapper
|
|
123
|
+
)
|
|
124
|
+
},
|
|
125
|
+
/* @__PURE__ */ React.createElement("nav", { className: cn("flex flex-wrap justify-center space-x-4", (_j = footer == null ? void 0 : footer.classNames) == null ? void 0 : _j.nav) }, footerMenus.map(
|
|
126
|
+
(item) => {
|
|
127
|
+
var _a2, _b2;
|
|
128
|
+
return item.link ? /* @__PURE__ */ React.createElement(
|
|
129
|
+
LinkComponent,
|
|
130
|
+
{
|
|
131
|
+
key: item.label,
|
|
132
|
+
to: item.link,
|
|
133
|
+
href: item.link,
|
|
134
|
+
className: cn(
|
|
135
|
+
"text-secondary hover:text-primary cursor-pointer no-underline",
|
|
136
|
+
(_a2 = footer == null ? void 0 : footer.classNames) == null ? void 0 : _a2.link,
|
|
137
|
+
item.className
|
|
138
|
+
)
|
|
139
|
+
},
|
|
140
|
+
item.label
|
|
141
|
+
) : /* @__PURE__ */ React.createElement(
|
|
142
|
+
"button",
|
|
143
|
+
{
|
|
144
|
+
key: item.label,
|
|
145
|
+
onClick: item.action,
|
|
146
|
+
className: cn(
|
|
147
|
+
"text-secondary hover:text-primary cursor-pointer no-underline",
|
|
148
|
+
(_b2 = footer == null ? void 0 : footer.classNames) == null ? void 0 : _b2.link,
|
|
149
|
+
item.className
|
|
150
|
+
)
|
|
151
|
+
},
|
|
152
|
+
item.label
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
)),
|
|
156
|
+
/* @__PURE__ */ React.createElement("div", { className: "mt-2 text-center" }, footer == null ? void 0 : footer.content)
|
|
157
|
+
));
|
|
158
|
+
}
|
|
159
|
+
export {
|
|
160
|
+
SimpleLayout as default
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../layouts/simple/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { Menu } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport { UserMenus } from './user-menu';\nimport { MobileMenu } from './mobile-menu';\nimport type { MenuItem, UserMenuSection } from './types';\n\ninterface LayoutProps {\n logo?: {\n src?: string;\n link?: string;\n className?: string;\n };\n user?: {\n menuSections: UserMenuSection[];\n trigger?: React.ReactNode;\n };\n left?: {\n menus: MenuItem[];\n classNames?: {\n nav?: string;\n link?: string;\n };\n };\n right?: {\n menus: MenuItem[];\n classNames?: {\n nav?: string;\n link?: string;\n };\n };\n sidebar?: {\n title: string;\n content: React.ReactNode;\n };\n footer?: {\n menus: MenuItem[];\n content?: string;\n classNames?: {\n wrapper?: string;\n nav?: string;\n link?: string;\n };\n };\n classNames?: {\n header?: string;\n content?: string;\n contentBottom?: string;\n };\n loading?: boolean;\n children?: React.ReactNode;\n aslink: React.ElementType;\n}\n\nexport default function SimpleLayout(props: LayoutProps) {\n const { logo, user, left, right, sidebar, footer, classNames, loading, children, aslink } = props;\n\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n\n const LinkComponent = aslink ?? 'button';\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < 768);\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const toggleMobileMenu = () => setMobileMenuOpen(!mobileMenuOpen);\n\n const leftMenus = left?.menus ?? [];\n const rightMenus = right?.menus ?? [];\n const topMenus = [...leftMenus, ...rightMenus];\n const userMenuSections = user?.menuSections ?? [];\n const footerMenus = footer?.menus ?? [];\n\n return (\n <div className=\"flex flex-col min-h-screen\">\n {/* Header */}\n <header\n className={cn(\n 'px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300',\n classNames?.header,\n )}\n >\n <div className=\"flex items-center space-x-4\">\n {sidebar && (\n <button\n className=\"bg-transparent border-gray-400 hover:border-gray-500\"\n onClick={() => {\n /* open sidebar */\n }}\n >\n {/* icon */}\n </button>\n )}\n {logo && (\n <div className={cn('_logo')}>\n <LinkComponent to={logo.link ?? '/'} href={logo.link ?? '/'}>\n <img src={logo.src} alt=\"Logo\" className={cn('h-10', logo?.className)} />\n </LinkComponent>\n </div>\n )}\n\n {/* Left Menus */}\n <nav className={cn('flex space-x-4 items-center', left?.classNames?.nav)}>\n {leftMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n left?.classNames?.nav,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n left?.classNames?.nav,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n </div>\n\n {/* Right menus */}\n <nav className={cn('hidden md:flex space-x-4 items-center', right?.classNames?.nav)}>\n {rightMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n right?.classNames?.nav,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n right?.classNames?.nav,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n {userMenuSections.length > 0 && (\n <UserMenus sections={userMenuSections} trigger={user?.trigger} aslink={aslink} />\n )}\n </nav>\n\n {/* Mobile menu button */}\n <button onClick={toggleMobileMenu} className=\"md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer\">\n <Menu className=\"\" />\n </button>\n </header>\n\n {/* Mobile menu */}\n {isMobile && mobileMenuOpen && (\n <div className=\"w-full\">\n <MobileMenu sections={userMenuSections} aslink={aslink} onClick={toggleMobileMenu} />\n </div>\n )}\n\n {/* Main content */}\n <main className={cn('p-4 flex flex-col flex-1', classNames?.content)}>\n {!loading && <div className=\"flex items-center justify-center h-full\">{children}</div>}\n <div className={cn('flex-1', classNames?.contentBottom)}></div>\n </main>\n\n {/* Footer */}\n {footer && (\n <footer\n className={cn(\n 'px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600',\n footer?.classNames?.wrapper,\n )}\n >\n <nav className={cn('flex flex-wrap justify-center space-x-4', footer?.classNames?.nav)}>\n {footerMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n footer?.classNames?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n footer?.classNames?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n <div className=\"mt-2 text-center\">{footer?.content}</div>\n </footer>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":["_a","_b"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { UserMenuSection } from './types.mjs';
|
|
3
|
+
|
|
4
|
+
interface MobileMenuProps {
|
|
5
|
+
sections: UserMenuSection[];
|
|
6
|
+
aslink?: React__default.ElementType;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
}
|
|
9
|
+
declare function MobileMenu({ sections, aslink, onClick }: MobileMenuProps): React__default.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { MobileMenu };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { UserMenuSection } from './types.js';
|
|
3
|
+
|
|
4
|
+
interface MobileMenuProps {
|
|
5
|
+
sections: UserMenuSection[];
|
|
6
|
+
aslink?: React__default.ElementType;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
}
|
|
9
|
+
declare function MobileMenu({ sections, aslink, onClick }: MobileMenuProps): React__default.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { MobileMenu };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkQGXFFTPHjs = require('../../chunk-QGXFFTPH.js');
|
|
6
|
+
require('../../chunk-6N4WCMTE.js');
|
|
7
|
+
require('../../chunk-2NMEKWO5.js');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.MobileMenu = _chunkQGXFFTPHjs.MobileMenu;
|
|
11
|
+
//# sourceMappingURL=mobile-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/mobile-menu.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,0DAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC;AACE;AACF,iDAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/mobile-menu.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface MenuItem {
|
|
2
|
+
label: string;
|
|
3
|
+
icon?: React.ReactNode;
|
|
4
|
+
link?: string;
|
|
5
|
+
action?: () => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
title?: boolean;
|
|
8
|
+
}
|
|
9
|
+
interface UserMenuSection {
|
|
10
|
+
label?: string;
|
|
11
|
+
separator?: boolean;
|
|
12
|
+
items?: MenuItem[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type { MenuItem, UserMenuSection };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface MenuItem {
|
|
2
|
+
label: string;
|
|
3
|
+
icon?: React.ReactNode;
|
|
4
|
+
link?: string;
|
|
5
|
+
action?: () => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
title?: boolean;
|
|
8
|
+
}
|
|
9
|
+
interface UserMenuSection {
|
|
10
|
+
label?: string;
|
|
11
|
+
separator?: boolean;
|
|
12
|
+
items?: MenuItem[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type { MenuItem, UserMenuSection };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/types.js"],"names":[],"mappings":"AAAA,yBAAY","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/types.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { UserMenuSection } from './types.mjs';
|
|
3
|
+
|
|
4
|
+
declare function UserMenus({ sections, trigger, aslink, }: {
|
|
5
|
+
sections: UserMenuSection[];
|
|
6
|
+
trigger?: React__default.ReactNode;
|
|
7
|
+
aslink: React__default.ElementType;
|
|
8
|
+
}): React__default.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { UserMenus };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { UserMenuSection } from './types.js';
|
|
3
|
+
|
|
4
|
+
declare function UserMenus({ sections, trigger, aslink, }: {
|
|
5
|
+
sections: UserMenuSection[];
|
|
6
|
+
trigger?: React__default.ReactNode;
|
|
7
|
+
aslink: React__default.ElementType;
|
|
8
|
+
}): React__default.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { UserMenus };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkZOF6UW3Djs = require('../../chunk-ZOF6UW3D.js');
|
|
6
|
+
require('../../chunk-NI2SIUXO.js');
|
|
7
|
+
require('../../chunk-6N4WCMTE.js');
|
|
8
|
+
require('../../chunk-2NMEKWO5.js');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
exports.UserMenus = _chunkZOF6UW3Djs.UserMenus;
|
|
12
|
+
//# sourceMappingURL=user-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/user-menu.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,0DAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC;AACE;AACF,+CAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/user-menu.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.0.
|
|
2
|
+
"version": "0.0.50",
|
|
3
3
|
"description": "shadcn UI theme",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"sideEffects": false,
|
|
@@ -46,12 +46,11 @@
|
|
|
46
46
|
"lodash-es": "^4.17.21",
|
|
47
47
|
"lucide-react": "^0.544.0",
|
|
48
48
|
"next-themes": "^0.4.4",
|
|
49
|
-
"react-day-picker": "9.
|
|
49
|
+
"react-day-picker": "9.11.0",
|
|
50
50
|
"react-resizable-panels": "^3.0.0",
|
|
51
|
-
"recharts": "^3.0.0",
|
|
52
51
|
"tailwind-merge": "^3.0.2",
|
|
53
52
|
"vaul": "^1.1.2",
|
|
54
|
-
"zod": "^
|
|
53
|
+
"zod": "^4.0.0"
|
|
55
54
|
},
|
|
56
55
|
"peerDependencies": {
|
|
57
56
|
"react": "^18.3.1 || ^19.0.0",
|