@banhosdev/moldsoft-ui 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as class_variance_authority_types from 'class-variance-authority/types';
2
- import * as React$1 from 'react';
2
+ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
 
@@ -7,28 +7,40 @@ declare const buttonVariants: (props?: ({
7
7
  variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
8
8
  size?: "default" | "sm" | "lg" | "icon" | null | undefined;
9
9
  } & class_variance_authority_types.ClassProp) | undefined) => string;
10
- interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
10
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
11
11
  asChild?: boolean;
12
12
  }
13
- declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
13
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
14
14
 
15
- declare const Card: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
16
- declare const CardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
17
- declare const CardTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
18
- declare const CardDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
19
- declare const CardContent: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
20
- declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
15
+ declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
16
+ declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
17
+ declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
18
+ declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
19
+ declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
20
+ declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
21
21
 
22
- interface SidebarProps {
23
- children?: React.ReactNode;
24
- className?: string;
25
- items: SidebarItem[];
22
+ interface LogoProps extends React.ImgHTMLAttributes<HTMLImageElement> {
23
+ size?: number;
26
24
  }
25
+ declare function Logo({ size, className, ...props }: LogoProps): react_jsx_runtime.JSX.Element;
26
+
27
27
  interface SidebarItem {
28
28
  label: string;
29
29
  href: string;
30
- icon: React.ReactNode;
30
+ icon?: React.ReactNode;
31
+ active?: boolean;
32
+ items?: SidebarItem[];
33
+ }
34
+ interface SidebarProps {
35
+ children?: React.ReactNode;
36
+ logo?: React.ReactNode;
37
+ collapsedLogo?: React.ReactNode;
38
+ className?: string;
39
+ items: SidebarItem[];
40
+ footerItems?: SidebarItem[];
41
+ showBackground?: boolean;
42
+ activePath?: string;
31
43
  }
32
- declare function Sidebar({ children, items }: SidebarProps): react_jsx_runtime.JSX.Element;
44
+ declare function Sidebar({ children, logo, collapsedLogo, items, footerItems, showBackground, className, activePath, }: SidebarProps): react_jsx_runtime.JSX.Element;
33
45
 
34
- export { Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Sidebar, type SidebarItem, type SidebarProps, buttonVariants };
46
+ export { Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Logo, type LogoProps, Sidebar, type SidebarItem, type SidebarProps, buttonVariants };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as class_variance_authority_types from 'class-variance-authority/types';
2
- import * as React$1 from 'react';
2
+ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
 
@@ -7,28 +7,40 @@ declare const buttonVariants: (props?: ({
7
7
  variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
8
8
  size?: "default" | "sm" | "lg" | "icon" | null | undefined;
9
9
  } & class_variance_authority_types.ClassProp) | undefined) => string;
10
- interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
10
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
11
11
  asChild?: boolean;
12
12
  }
13
- declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
13
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
14
14
 
15
- declare const Card: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
16
- declare const CardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
17
- declare const CardTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
18
- declare const CardDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
19
- declare const CardContent: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
20
- declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
15
+ declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
16
+ declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
17
+ declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
18
+ declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
19
+ declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
20
+ declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
21
21
 
22
- interface SidebarProps {
23
- children?: React.ReactNode;
24
- className?: string;
25
- items: SidebarItem[];
22
+ interface LogoProps extends React.ImgHTMLAttributes<HTMLImageElement> {
23
+ size?: number;
26
24
  }
25
+ declare function Logo({ size, className, ...props }: LogoProps): react_jsx_runtime.JSX.Element;
26
+
27
27
  interface SidebarItem {
28
28
  label: string;
29
29
  href: string;
30
- icon: React.ReactNode;
30
+ icon?: React.ReactNode;
31
+ active?: boolean;
32
+ items?: SidebarItem[];
33
+ }
34
+ interface SidebarProps {
35
+ children?: React.ReactNode;
36
+ logo?: React.ReactNode;
37
+ collapsedLogo?: React.ReactNode;
38
+ className?: string;
39
+ items: SidebarItem[];
40
+ footerItems?: SidebarItem[];
41
+ showBackground?: boolean;
42
+ activePath?: string;
31
43
  }
32
- declare function Sidebar({ children, items }: SidebarProps): react_jsx_runtime.JSX.Element;
44
+ declare function Sidebar({ children, logo, collapsedLogo, items, footerItems, showBackground, className, activePath, }: SidebarProps): react_jsx_runtime.JSX.Element;
33
45
 
34
- export { Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Sidebar, type SidebarItem, type SidebarProps, buttonVariants };
46
+ export { Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Logo, type LogoProps, Sidebar, type SidebarItem, type SidebarProps, buttonVariants };
package/dist/index.js CHANGED
@@ -1,175 +1,2 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/index.ts
31
- var index_exports = {};
32
- __export(index_exports, {
33
- Button: () => Button,
34
- Card: () => Card,
35
- CardContent: () => CardContent,
36
- CardDescription: () => CardDescription,
37
- CardFooter: () => CardFooter,
38
- CardHeader: () => CardHeader,
39
- CardTitle: () => CardTitle,
40
- Sidebar: () => Sidebar,
41
- buttonVariants: () => buttonVariants
42
- });
43
- module.exports = __toCommonJS(index_exports);
44
-
45
- // src/components/ui/button.tsx
46
- var React = __toESM(require("react"));
47
- var import_react_slot = require("@radix-ui/react-slot");
48
- var import_class_variance_authority = require("class-variance-authority");
49
-
50
- // src/lib/utils.ts
51
- var import_clsx = require("clsx");
52
- var import_tailwind_merge = require("tailwind-merge");
53
- function cn(...inputs) {
54
- return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
55
- }
56
-
57
- // src/components/ui/button.tsx
58
- var import_jsx_runtime = require("react/jsx-runtime");
59
- var buttonVariants = (0, import_class_variance_authority.cva)(
60
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
61
- {
62
- variants: {
63
- variant: {
64
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
65
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
66
- outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
67
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
68
- ghost: "hover:bg-accent hover:text-accent-foreground",
69
- link: "text-primary underline-offset-4 hover:underline"
70
- },
71
- size: {
72
- default: "h-10 px-4 py-2",
73
- sm: "h-9 rounded-md px-3",
74
- lg: "h-11 rounded-md px-8",
75
- icon: "h-10 w-10"
76
- }
77
- },
78
- defaultVariants: {
79
- variant: "default",
80
- size: "default"
81
- }
82
- }
83
- );
84
- var Button = React.forwardRef(
85
- ({ className, variant, size, asChild = false, ...props }, ref) => {
86
- const Comp = asChild ? import_react_slot.Slot : "button";
87
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
88
- Comp,
89
- {
90
- className: cn(buttonVariants({ variant, size, className })),
91
- ref,
92
- ...props
93
- }
94
- );
95
- }
96
- );
97
- Button.displayName = "Button";
98
-
99
- // src/components/ui/card.tsx
100
- var React2 = __toESM(require("react"));
101
- var import_jsx_runtime2 = require("react/jsx-runtime");
102
- var Card = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
103
- "div",
104
- {
105
- ref,
106
- className: cn(
107
- "rounded-lg border bg-card text-card-foreground shadow-sm",
108
- className
109
- ),
110
- ...props
111
- }
112
- ));
113
- Card.displayName = "Card";
114
- var CardHeader = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
115
- "div",
116
- {
117
- ref,
118
- className: cn("flex flex-col space-y-1.5 p-6", className),
119
- ...props
120
- }
121
- ));
122
- CardHeader.displayName = "CardHeader";
123
- var CardTitle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
124
- "div",
125
- {
126
- ref,
127
- className: cn(
128
- "text-2xl font-semibold leading-none tracking-tight",
129
- className
130
- ),
131
- ...props
132
- }
133
- ));
134
- CardTitle.displayName = "CardTitle";
135
- var CardDescription = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
136
- "div",
137
- {
138
- ref,
139
- className: cn("text-sm text-muted-foreground", className),
140
- ...props
141
- }
142
- ));
143
- CardDescription.displayName = "CardDescription";
144
- var CardContent = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { ref, className: cn("p-6 pt-0", className), ...props }));
145
- CardContent.displayName = "CardContent";
146
- var CardFooter = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
147
- "div",
148
- {
149
- ref,
150
- className: cn("flex items-center p-6 pt-0", className),
151
- ...props
152
- }
153
- ));
154
- CardFooter.displayName = "CardFooter";
155
-
156
- // src/components/app/sidebar.tsx
157
- var import_jsx_runtime3 = require("react/jsx-runtime");
158
- function Sidebar({ children, items = [] }) {
159
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("aside", { className: "w-full h-full p-4", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("main", { className: "bg-primary rounded-3xl h-full", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "p-4", children: [
160
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h1", { children: "Sidebar" }),
161
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { children: items?.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("a", { href: item.href, children: item.label }) }, item.href)) })
162
- ] }) }) });
163
- }
164
- // Annotate the CommonJS export names for ESM import in node:
165
- 0 && (module.exports = {
166
- Button,
167
- Card,
168
- CardContent,
169
- CardDescription,
170
- CardFooter,
171
- CardHeader,
172
- CardTitle,
173
- Sidebar,
174
- buttonVariants
175
- });
1
+ "use strict";var q=Object.create;var R=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var Y=(t,i)=>{for(var h in i)R(t,h,{get:i[h],enumerable:!0})},r=(t,i,h,m)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of D(i))!E.call(t,s)&&s!==h&&R(t,s,{get:()=>i[s],enumerable:!(m=O(i,s))||m.enumerable});return t};var z=(t,i,h)=>(h=t!=null?q(X(t)):{},r(i||!t||!t.__esModule?R(h,"default",{value:t,enumerable:!0}):h,t)),b=t=>r(R({},"__esModule",{value:!0}),t);var nt={};Y(nt,{Button:()=>j,Card:()=>S,CardContent:()=>k,CardDescription:()=>T,CardFooter:()=>_,CardHeader:()=>p,CardTitle:()=>y,Logo:()=>$,Sidebar:()=>ht,buttonVariants:()=>d});module.exports=b(nt);var B=z(require("react")),V=require("@radix-ui/react-slot"),I=require("class-variance-authority");var K=require("clsx"),N=require("tailwind-merge");function J(...t){return(0,N.twMerge)((0,K.clsx)(t))}var a=require("react/jsx-runtime"),d=(0,I.cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),j=B.forwardRef(({className:t,variant:i,size:h,asChild:m=!1,...s},Z)=>(0,a.jsx)(m?V.Slot:"button",{className:J(d({variant:i,size:h,className:t})),ref:Z,...s}));j.displayName="Button";var c=z(require("react"));var e=require("react/jsx-runtime"),S=c.forwardRef(({className:t,...i},h)=>(0,e.jsx)("div",{ref:h,className:J("rounded-lg border bg-card text-card-foreground shadow-sm",t),...i}));S.displayName="Card";var p=c.forwardRef(({className:t,...i},h)=>(0,e.jsx)("div",{ref:h,className:J("flex flex-col space-y-1.5 p-6",t),...i}));p.displayName="CardHeader";var y=c.forwardRef(({className:t,...i},h)=>(0,e.jsx)("div",{ref:h,className:J("text-2xl font-semibold leading-none tracking-tight",t),...i}));y.displayName="CardTitle";var T=c.forwardRef(({className:t,...i},h)=>(0,e.jsx)("div",{ref:h,className:J("text-sm text-muted-foreground",t),...i}));T.displayName="CardDescription";var k=c.forwardRef(({className:t,...i},h)=>(0,e.jsx)("div",{ref:h,className:J("p-6 pt-0",t),...i}));k.displayName="CardContent";var _=c.forwardRef(({className:t,...i},h)=>(0,e.jsx)("div",{ref:h,className:J("flex items-center p-6 pt-0",t),...i}));_.displayName="CardFooter";var U="./logo-REBN3NUO.png";var f=require("react/jsx-runtime");function $({size:t=40,className:i,...h}){return(0,f.jsx)("img",{src:U,alt:"Moldsoft Logo",width:t,height:t,className:i,...h})}var M=z(require("react"));var o="./white-icon-Z722HHZN.png";var P="./bg-blue-H7S5ODI7.png";var A=z(require("react")),g=z(require("@radix-ui/react-separator"));var x=require("react/jsx-runtime"),H=A.forwardRef(({className:t,orientation:i="horizontal",decorative:h=!0,...m},s)=>(0,x.jsx)(g.Root,{ref:s,decorative:h,orientation:i,className:J("shrink-0 bg-border",i==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",t),...m}));H.displayName=g.Root.displayName;var n=require("react/jsx-runtime");function ht({children:t,logo:i,collapsedLogo:h,items:m=[],footerItems:s=[],showBackground:Z=!0,className:C,activePath:v}){let[u,w]=M.useState(!1),L=F=>F.active?!0:v?v===F.href||F.href!=="/"&&v.startsWith(F.href)?!0:F.items?F.items.some(L):!1:!1,W=typeof P=="object"?P.src:P,G=typeof o=="object"?o.src:o;return(0,n.jsx)("aside",{onMouseEnter:()=>w(!0),onMouseLeave:()=>w(!1),className:J("h-full p-2 transition-all duration-500 ease-in-out",u?"w-72":"w-24",C),children:(0,n.jsxs)("main",{className:J("h-full relative overflow-hidden flex flex-col shadow-xl transition-all duration-500",!Z&&"bg-primary","rounded-3xl"),children:[Z&&(0,n.jsx)("div",{className:"absolute inset-0 z-0 transition-transform duration-500",style:{backgroundImage:`url(${W})`,backgroundSize:"300%",backgroundPosition:"center",width:"18rem"}}),(0,n.jsx)("div",{className:"absolute inset-0 z-0 bg-primary/20"}),(0,n.jsxs)("div",{className:"flex flex-col h-full relative z-10 p-2",children:[(0,n.jsxs)("div",{className:J("flex flex-col items-center justify-center transition-all duration-500","h-24 py-4"),children:[u?i?(0,n.jsx)("div",{className:"flex items-center gap-2",children:i}):(0,n.jsx)("img",{src:G,alt:"Logo",className:"h-10 opacity-100 scale-100 transition-all duration-500 object-contain"}):h?(0,n.jsx)("div",{className:"flex items-center gap-2 w-8",children:h}):(0,n.jsx)("img",{src:G,alt:"Logo",className:"h-7 opacity-90 transition-all duration-500 object-contain"}),u&&!i&&(0,n.jsx)("span",{className:"text-white/60 text-[10px] mt-1 font-medium tracking-wider uppercase",children:"Moldsoft"})]}),(0,n.jsx)("div",{className:"px-4 mb-4",children:(0,n.jsx)(H,{className:"bg-white/20"})}),(0,n.jsx)("nav",{className:"flex-1 px-1 space-y-1 overflow-y-auto no-scrollbar scroll-smooth",children:m.map(F=>(0,n.jsx)(l,{item:F,isSidebarExpanded:u,isActive:L(F),checkActive:L},F.href))}),(0,n.jsxs)("div",{className:"mt-auto px-1 pb-2 space-y-1",children:[s.map(F=>(0,n.jsx)(l,{item:F,isSidebarExpanded:u,isActive:L(F),checkActive:L},F.href)),t&&(0,n.jsx)("div",{className:J("transition-all duration-500 overflow-hidden",u?"opacity-100 mt-2":"opacity-0 h-0"),children:t})]})]})]})})}function l({item:t,isSidebarExpanded:i,isActive:h,checkActive:m,depth:s=0}){let[Z,C]=M.useState(h),v=t.items&&t.items.length>0;M.useEffect(()=>{h&&C(!0)},[h]);let u=v&&i&&Z;return(0,n.jsxs)("div",{className:"flex flex-col",children:[(0,n.jsxs)("a",{href:t.href,onClick:w=>{v&&(w.preventDefault(),C(!Z))},className:J("flex items-center h-12 rounded-2xl transition-all duration-500 px-3 relative group overflow-hidden",h?"bg-[#092a5e] text-white":"text-white/80 hover:bg-white/10 hover:text-white"),children:[(0,n.jsx)("div",{className:J("transition-all duration-500 ease-in-out h-1",i?"w-0 opacity-0":"flex-1")}),t.icon&&(0,n.jsx)("div",{className:J("shrink-0 w-8 h-8 flex items-center justify-center transition-all duration-500"),children:t.icon}),(0,n.jsx)("span",{className:J("font-medium whitespace-nowrap transition-all duration-500 ease-in-out overflow-hidden text-sm",i?"opacity-100 w-auto":"opacity-0 w-0 pointer-events-none",t.icon?"ml-3":""),children:t.label}),(0,n.jsx)("div",{className:"flex-1 transition-all duration-500"}),v&&i&&(0,n.jsx)("div",{className:J("transition-transform duration-300",Z?"rotate-180":""),children:(0,n.jsx)("svg",{width:"10",height:"6",viewBox:"0 0 10 6",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,n.jsx)("path",{d:"M1 1L5 5L9 1",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),v&&i&&(0,n.jsx)("div",{className:J("overflow-hidden transition-all duration-300 ease-in-out",Z?"max-h-96 opacity-100 mt-1":"max-h-0 opacity-0"),children:(0,n.jsx)("div",{className:"ml-7 border-l border-white/10 pl-3 py-1 space-y-1",children:t.items?.map(w=>(0,n.jsx)(l,{item:w,isSidebarExpanded:i,isActive:m(w),checkActive:m,depth:s+1},w.href))})})]})}0&&(module.exports={Button,Card,CardContent,CardDescription,CardFooter,CardHeader,CardTitle,Logo,Sidebar,buttonVariants});
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/components/ui/button.tsx","../src/lib/utils.ts","../src/components/ui/card.tsx","../src/components/ui/logo.tsx","../src/components/app/sidebar.tsx","../src/components/ui/separator.tsx"],"sourcesContent":["// UI Components\nexport * from \"./components/ui/button\"\nexport * from \"./components/ui/card\"\nexport * from \"./components/ui/logo\"\n\n// App Components\nexport * from \"./components/app/sidebar\"\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from \"react\"\nimport logo from \"../../assets/logo.png\"\n\nexport interface LogoProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n size?: number\n}\n\nexport function Logo({ size = 40, className, ...props }: LogoProps) {\n return (\n <img\n src={logo}\n alt=\"Moldsoft Logo\"\n width={size}\n height={size}\n className={className}\n {...props}\n />\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport logoImg from \"../../assets/icons/white-icon.png\"\nimport sidebarBg from \"../../assets/textures/bg-blue.png\"\nimport { Separator } from \"../ui/separator\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface SidebarItem {\n label: string\n href: string\n icon?: React.ReactNode\n active?: boolean\n items?: SidebarItem[]\n}\n\nexport interface SidebarProps {\n children?: React.ReactNode\n logo?: React.ReactNode\n collapsedLogo?: React.ReactNode\n className?: string\n items: SidebarItem[]\n footerItems?: SidebarItem[]\n showBackground?: boolean\n activePath?: string\n}\n\nexport function Sidebar({\n children,\n logo,\n collapsedLogo,\n items = [],\n footerItems = [],\n showBackground = true,\n className,\n activePath,\n}: SidebarProps) {\n const [isExpanded, setIsExpanded] = React.useState(false)\n\n const checkActive = (item: SidebarItem): boolean => {\n if (item.active) return true\n if (!activePath) return false\n\n // Exact match for root or specific paths\n if (activePath === item.href) return true\n\n // Prefix match for sub-paths (avoiding matching '/' to everything)\n if (item.href !== \"/\" && activePath.startsWith(item.href)) return true\n\n // Recursive check for sub-items\n if (item.items) {\n return item.items.some(checkActive)\n }\n\n return false\n }\n\n const bgUrl = typeof sidebarBg === \"object\" ? (sidebarBg as any).src : sidebarBg\n const logoUrl = typeof logoImg === \"object\" ? (logoImg as any).src : logoImg\n\n return (\n <aside\n onMouseEnter={() => setIsExpanded(true)}\n onMouseLeave={() => setIsExpanded(false)}\n className={cn(\n \"h-full p-2 transition-all duration-500 ease-in-out\",\n isExpanded ? \"w-72\" : \"w-24\",\n className\n )}\n >\n <main\n className={cn(\n \"h-full relative overflow-hidden flex flex-col shadow-xl transition-all duration-500\",\n !showBackground && \"bg-primary\",\n isExpanded ? \"rounded-3xl\" : \"rounded-3xl\"\n )}\n >\n {showBackground && (\n <div\n className=\"absolute inset-0 z-0 transition-transform duration-500\"\n style={{\n backgroundImage: `url(${bgUrl})`,\n backgroundSize: \"300%\", // Increased scale\n backgroundPosition: \"center\",\n width: \"18rem\", // Expanded width (w-72 = 18rem) to keep it \"fixed\"\n }}\n />\n )}\n <div className=\"absolute inset-0 z-0 bg-primary/20\" />\n\n <div className=\"flex flex-col h-full relative z-10 p-2\">\n <div className={cn(\n \"flex flex-col items-center justify-center transition-all duration-500\",\n isExpanded ? \"h-24 py-4\" : \"h-24 py-4\"\n )}>\n {isExpanded ? (\n logo ? (\n <div className=\"flex items-center gap-2\">\n {logo}\n </div>\n ) : (\n <img\n src={logoUrl}\n alt=\"Logo\"\n className=\"h-10 opacity-100 scale-100 transition-all duration-500 object-contain\"\n />\n )\n ) : (\n collapsedLogo ? (\n <div className=\"flex items-center gap-2 w-8\">\n {collapsedLogo}\n </div>\n ) : (\n <img\n src={logoUrl}\n alt=\"Logo\"\n className=\"h-7 opacity-90 transition-all duration-500 object-contain\"\n />\n )\n )}\n {isExpanded && !logo && (\n <span className=\"text-white/60 text-[10px] mt-1 font-medium tracking-wider uppercase\">\n Moldsoft\n </span>\n )}\n </div>\n\n <div className=\"px-4 mb-4\">\n <Separator className=\"bg-white/20\" />\n </div>\n\n {/* Nav Items */}\n <nav className=\"flex-1 px-1 space-y-1 overflow-y-auto no-scrollbar scroll-smooth\">\n {items.map((item) => (\n <SidebarNavLink\n key={item.href}\n item={item}\n isSidebarExpanded={isExpanded}\n isActive={checkActive(item)}\n checkActive={checkActive}\n />\n ))}\n </nav>\n\n {/* Footer Section */}\n <div className=\"mt-auto px-1 pb-2 space-y-1\">\n {footerItems.map((item) => (\n <SidebarNavLink\n key={item.href}\n item={item}\n isSidebarExpanded={isExpanded}\n isActive={checkActive(item)}\n checkActive={checkActive}\n />\n ))}\n {children && (\n <div className={cn(\n \"transition-all duration-500 overflow-hidden\",\n isExpanded ? \"opacity-100 mt-2\" : \"opacity-0 h-0\"\n )}>\n {children}\n </div>\n )}\n </div>\n </div>\n </main>\n </aside>\n )\n}\n\nfunction SidebarNavLink({\n item,\n isSidebarExpanded,\n isActive,\n checkActive,\n depth = 0\n}: {\n item: SidebarItem\n isSidebarExpanded: boolean\n isActive: boolean\n checkActive: (item: SidebarItem) => boolean\n depth?: number\n}) {\n const [isOpen, setIsOpen] = React.useState(isActive)\n const hasSubItems = item.items && item.items.length > 0\n\n // Update isOpen if isActive changes (to auto-expand when navigating)\n React.useEffect(() => {\n if (isActive) setIsOpen(true)\n }, [isActive])\n\n // Only allow sub-items to be visible if sidebar is expanded\n const isSubItemsVisible = hasSubItems && isSidebarExpanded && isOpen\n\n return (\n <div className=\"flex flex-col\">\n <a\n href={item.href}\n onClick={(e) => {\n if (hasSubItems) {\n e.preventDefault()\n setIsOpen(!isOpen)\n }\n }}\n className={cn(\n \"flex items-center h-12 rounded-2xl transition-all duration-500 px-3 relative group overflow-hidden\",\n isActive\n ? \"bg-[#092a5e] text-white\"\n : \"text-white/80 hover:bg-white/10 hover:text-white\"\n )}\n >\n {/* Smooth Centering Spacer - Only active when collapsed */}\n <div className={cn(\n \"transition-all duration-500 ease-in-out h-1\",\n isSidebarExpanded ? \"w-0 opacity-0\" : \"flex-1\"\n )} />\n\n {\n item.icon && (\n <div className={cn(\n \"shrink-0 w-8 h-8 flex items-center justify-center transition-all duration-500\"\n )}>\n {item.icon}\n </div>\n )\n }\n\n\n <span\n className={cn(\n \"font-medium whitespace-nowrap transition-all duration-500 ease-in-out overflow-hidden text-sm\",\n isSidebarExpanded ? \"opacity-100 w-auto\" : \"opacity-0 w-0 pointer-events-none\",\n item.icon ? \"ml-3\" : \"\"\n )}\n >\n {item.label}\n </span>\n\n {/* Right Spacer - Always pushes items to left when expanded, centers when combined with left spacer when collapsed */}\n <div className=\"flex-1 transition-all duration-500\" />\n\n {hasSubItems && isSidebarExpanded && (\n <div className={cn(\n \"transition-transform duration-300\",\n isOpen ? \"rotate-180\" : \"\"\n )}>\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n )}\n </a>\n\n {/* Sub Items rendering */}\n {hasSubItems && isSidebarExpanded && (\n <div className={cn(\n \"overflow-hidden transition-all duration-300 ease-in-out\",\n isOpen ? \"max-h-96 opacity-100 mt-1\" : \"max-h-0 opacity-0\"\n )}>\n <div className=\"ml-7 border-l border-white/10 pl-3 py-1 space-y-1\">\n {item.items?.map((subItem) => (\n <SidebarNavLink\n key={subItem.href}\n item={subItem}\n isSidebarExpanded={isSidebarExpanded}\n isActive={checkActive(subItem)}\n checkActive={checkActive}\n depth={depth + 1}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}","import * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n"],"mappings":"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","names":["index_exports","__export","Button","Card","CardContent","CardDescription","CardFooter","CardHeader","CardTitle","Logo","Sidebar","buttonVariants","__toCommonJS","React","import_react_slot","import_class_variance_authority","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","buttonVariants","Button","className","variant","size","asChild","props","ref","cn","React","import_jsx_runtime","Card","className","props","ref","cn","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","import_jsx_runtime","Logo","size","className","props","logo_default","React","React","SeparatorPrimitive","import_jsx_runtime","Separator","className","orientation","decorative","props","ref","cn","import_jsx_runtime","Sidebar","children","logo","collapsedLogo","items","footerItems","showBackground","className","activePath","isExpanded","setIsExpanded","checkActive","item","bgUrl","bg_blue_default","logoUrl","white_icon_default","cn","Separator","SidebarNavLink","isSidebarExpanded","isActive","depth","isOpen","setIsOpen","hasSubItems","isSubItemsVisible","e","subItem"]}
package/dist/index.mjs CHANGED
@@ -1,130 +1,2 @@
1
- // src/components/ui/button.tsx
2
- import * as React from "react";
3
- import { Slot } from "@radix-ui/react-slot";
4
- import { cva } from "class-variance-authority";
5
-
6
- // src/lib/utils.ts
7
- import { clsx } from "clsx";
8
- import { twMerge } from "tailwind-merge";
9
- function cn(...inputs) {
10
- return twMerge(clsx(inputs));
11
- }
12
-
13
- // src/components/ui/button.tsx
14
- import { jsx } from "react/jsx-runtime";
15
- var buttonVariants = cva(
16
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
17
- {
18
- variants: {
19
- variant: {
20
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
21
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
22
- outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
23
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
24
- ghost: "hover:bg-accent hover:text-accent-foreground",
25
- link: "text-primary underline-offset-4 hover:underline"
26
- },
27
- size: {
28
- default: "h-10 px-4 py-2",
29
- sm: "h-9 rounded-md px-3",
30
- lg: "h-11 rounded-md px-8",
31
- icon: "h-10 w-10"
32
- }
33
- },
34
- defaultVariants: {
35
- variant: "default",
36
- size: "default"
37
- }
38
- }
39
- );
40
- var Button = React.forwardRef(
41
- ({ className, variant, size, asChild = false, ...props }, ref) => {
42
- const Comp = asChild ? Slot : "button";
43
- return /* @__PURE__ */ jsx(
44
- Comp,
45
- {
46
- className: cn(buttonVariants({ variant, size, className })),
47
- ref,
48
- ...props
49
- }
50
- );
51
- }
52
- );
53
- Button.displayName = "Button";
54
-
55
- // src/components/ui/card.tsx
56
- import * as React2 from "react";
57
- import { jsx as jsx2 } from "react/jsx-runtime";
58
- var Card = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
59
- "div",
60
- {
61
- ref,
62
- className: cn(
63
- "rounded-lg border bg-card text-card-foreground shadow-sm",
64
- className
65
- ),
66
- ...props
67
- }
68
- ));
69
- Card.displayName = "Card";
70
- var CardHeader = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
71
- "div",
72
- {
73
- ref,
74
- className: cn("flex flex-col space-y-1.5 p-6", className),
75
- ...props
76
- }
77
- ));
78
- CardHeader.displayName = "CardHeader";
79
- var CardTitle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
80
- "div",
81
- {
82
- ref,
83
- className: cn(
84
- "text-2xl font-semibold leading-none tracking-tight",
85
- className
86
- ),
87
- ...props
88
- }
89
- ));
90
- CardTitle.displayName = "CardTitle";
91
- var CardDescription = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
92
- "div",
93
- {
94
- ref,
95
- className: cn("text-sm text-muted-foreground", className),
96
- ...props
97
- }
98
- ));
99
- CardDescription.displayName = "CardDescription";
100
- var CardContent = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2("div", { ref, className: cn("p-6 pt-0", className), ...props }));
101
- CardContent.displayName = "CardContent";
102
- var CardFooter = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
103
- "div",
104
- {
105
- ref,
106
- className: cn("flex items-center p-6 pt-0", className),
107
- ...props
108
- }
109
- ));
110
- CardFooter.displayName = "CardFooter";
111
-
112
- // src/components/app/sidebar.tsx
113
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
114
- function Sidebar({ children, items = [] }) {
115
- return /* @__PURE__ */ jsx3("aside", { className: "w-full h-full p-4", children: /* @__PURE__ */ jsx3("main", { className: "bg-primary rounded-3xl h-full", children: /* @__PURE__ */ jsxs("div", { className: "p-4", children: [
116
- /* @__PURE__ */ jsx3("h1", { children: "Sidebar" }),
117
- /* @__PURE__ */ jsx3("ul", { children: items?.map((item) => /* @__PURE__ */ jsx3("li", { children: /* @__PURE__ */ jsx3("a", { href: item.href, children: item.label }) }, item.href)) })
118
- ] }) }) });
119
- }
120
- export {
121
- Button,
122
- Card,
123
- CardContent,
124
- CardDescription,
125
- CardFooter,
126
- CardHeader,
127
- CardTitle,
128
- Sidebar,
129
- buttonVariants
130
- };
1
+ import*as G from"react";import{Slot as I}from"@radix-ui/react-slot";import{cva as d}from"class-variance-authority";import{clsx as B}from"clsx";import{twMerge as V}from"tailwind-merge";function J(...t){return V(B(t))}import{jsx as S}from"react/jsx-runtime";var j=d("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),a=G.forwardRef(({className:t,variant:i,size:h,asChild:Z=!1,...w},s)=>S(Z?I:"button",{className:J(j({variant:i,size:h,className:t})),ref:s,...w}));a.displayName="Button";import*as c from"react";import{jsx as e}from"react/jsx-runtime";var p=c.forwardRef(({className:t,...i},h)=>e("div",{ref:h,className:J("rounded-lg border bg-card text-card-foreground shadow-sm",t),...i}));p.displayName="Card";var y=c.forwardRef(({className:t,...i},h)=>e("div",{ref:h,className:J("flex flex-col space-y-1.5 p-6",t),...i}));y.displayName="CardHeader";var T=c.forwardRef(({className:t,...i},h)=>e("div",{ref:h,className:J("text-2xl font-semibold leading-none tracking-tight",t),...i}));T.displayName="CardTitle";var k=c.forwardRef(({className:t,...i},h)=>e("div",{ref:h,className:J("text-sm text-muted-foreground",t),...i}));k.displayName="CardDescription";var _=c.forwardRef(({className:t,...i},h)=>e("div",{ref:h,className:J("p-6 pt-0",t),...i}));_.displayName="CardContent";var U=c.forwardRef(({className:t,...i},h)=>e("div",{ref:h,className:J("flex items-center p-6 pt-0",t),...i}));U.displayName="CardFooter";var r="./logo-REBN3NUO.png";import{jsx as A}from"react/jsx-runtime";function Ft({size:t=40,className:i,...h}){return A("img",{src:r,alt:"Moldsoft Logo",width:t,height:t,className:i,...h})}import*as M from"react";var R="./white-icon-Z722HHZN.png";var o="./bg-blue-H7S5ODI7.png";import*as K from"react";import*as P from"@radix-ui/react-separator";import{jsx as q}from"react/jsx-runtime";var g=K.forwardRef(({className:t,orientation:i="horizontal",decorative:h=!0,...Z},w)=>q(P.Root,{ref:w,decorative:h,orientation:i,className:J("shrink-0 bg-border",i==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",t),...Z}));g.displayName=P.Root.displayName;import{jsx as n,jsxs as C}from"react/jsx-runtime";function Mt({children:t,logo:i,collapsedLogo:h,items:Z=[],footerItems:w=[],showBackground:s=!0,className:L,activePath:u}){let[m,v]=M.useState(!1),z=F=>F.active?!0:u?u===F.href||F.href!=="/"&&u.startsWith(F.href)?!0:F.items?F.items.some(z):!1:!1,N=typeof o=="object"?o.src:o,l=typeof R=="object"?R.src:R;return n("aside",{onMouseEnter:()=>v(!0),onMouseLeave:()=>v(!1),className:J("h-full p-2 transition-all duration-500 ease-in-out",m?"w-72":"w-24",L),children:C("main",{className:J("h-full relative overflow-hidden flex flex-col shadow-xl transition-all duration-500",!s&&"bg-primary","rounded-3xl"),children:[s&&n("div",{className:"absolute inset-0 z-0 transition-transform duration-500",style:{backgroundImage:`url(${N})`,backgroundSize:"300%",backgroundPosition:"center",width:"18rem"}}),n("div",{className:"absolute inset-0 z-0 bg-primary/20"}),C("div",{className:"flex flex-col h-full relative z-10 p-2",children:[C("div",{className:J("flex flex-col items-center justify-center transition-all duration-500","h-24 py-4"),children:[m?i?n("div",{className:"flex items-center gap-2",children:i}):n("img",{src:l,alt:"Logo",className:"h-10 opacity-100 scale-100 transition-all duration-500 object-contain"}):h?n("div",{className:"flex items-center gap-2 w-8",children:h}):n("img",{src:l,alt:"Logo",className:"h-7 opacity-90 transition-all duration-500 object-contain"}),m&&!i&&n("span",{className:"text-white/60 text-[10px] mt-1 font-medium tracking-wider uppercase",children:"Moldsoft"})]}),n("div",{className:"px-4 mb-4",children:n(g,{className:"bg-white/20"})}),n("nav",{className:"flex-1 px-1 space-y-1 overflow-y-auto no-scrollbar scroll-smooth",children:Z.map(F=>n(H,{item:F,isSidebarExpanded:m,isActive:z(F),checkActive:z},F.href))}),C("div",{className:"mt-auto px-1 pb-2 space-y-1",children:[w.map(F=>n(H,{item:F,isSidebarExpanded:m,isActive:z(F),checkActive:z},F.href)),t&&n("div",{className:J("transition-all duration-500 overflow-hidden",m?"opacity-100 mt-2":"opacity-0 h-0"),children:t})]})]})]})})}function H({item:t,isSidebarExpanded:i,isActive:h,checkActive:Z,depth:w=0}){let[s,L]=M.useState(h),u=t.items&&t.items.length>0;M.useEffect(()=>{h&&L(!0)},[h]);let m=u&&i&&s;return C("div",{className:"flex flex-col",children:[C("a",{href:t.href,onClick:v=>{u&&(v.preventDefault(),L(!s))},className:J("flex items-center h-12 rounded-2xl transition-all duration-500 px-3 relative group overflow-hidden",h?"bg-[#092a5e] text-white":"text-white/80 hover:bg-white/10 hover:text-white"),children:[n("div",{className:J("transition-all duration-500 ease-in-out h-1",i?"w-0 opacity-0":"flex-1")}),t.icon&&n("div",{className:J("shrink-0 w-8 h-8 flex items-center justify-center transition-all duration-500"),children:t.icon}),n("span",{className:J("font-medium whitespace-nowrap transition-all duration-500 ease-in-out overflow-hidden text-sm",i?"opacity-100 w-auto":"opacity-0 w-0 pointer-events-none",t.icon?"ml-3":""),children:t.label}),n("div",{className:"flex-1 transition-all duration-500"}),u&&i&&n("div",{className:J("transition-transform duration-300",s?"rotate-180":""),children:n("svg",{width:"10",height:"6",viewBox:"0 0 10 6",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n("path",{d:"M1 1L5 5L9 1",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),u&&i&&n("div",{className:J("overflow-hidden transition-all duration-300 ease-in-out",s?"max-h-96 opacity-100 mt-1":"max-h-0 opacity-0"),children:n("div",{className:"ml-7 border-l border-white/10 pl-3 py-1 space-y-1",children:t.items?.map(v=>n(H,{item:v,isSidebarExpanded:i,isActive:Z(v),checkActive:Z,depth:w+1},v.href))})})]})}export{a as Button,p as Card,_ as CardContent,k as CardDescription,U as CardFooter,y as CardHeader,T as CardTitle,Ft as Logo,Mt as Sidebar,j as buttonVariants};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/button.tsx","../src/lib/utils.ts","../src/components/ui/card.tsx","../src/components/ui/logo.tsx","../src/components/app/sidebar.tsx","../src/components/ui/separator.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from \"react\"\nimport logo from \"../../assets/logo.png\"\n\nexport interface LogoProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n size?: number\n}\n\nexport function Logo({ size = 40, className, ...props }: LogoProps) {\n return (\n <img\n src={logo}\n alt=\"Moldsoft Logo\"\n width={size}\n height={size}\n className={className}\n {...props}\n />\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport logoImg from \"../../assets/icons/white-icon.png\"\nimport sidebarBg from \"../../assets/textures/bg-blue.png\"\nimport { Separator } from \"../ui/separator\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface SidebarItem {\n label: string\n href: string\n icon?: React.ReactNode\n active?: boolean\n items?: SidebarItem[]\n}\n\nexport interface SidebarProps {\n children?: React.ReactNode\n logo?: React.ReactNode\n collapsedLogo?: React.ReactNode\n className?: string\n items: SidebarItem[]\n footerItems?: SidebarItem[]\n showBackground?: boolean\n activePath?: string\n}\n\nexport function Sidebar({\n children,\n logo,\n collapsedLogo,\n items = [],\n footerItems = [],\n showBackground = true,\n className,\n activePath,\n}: SidebarProps) {\n const [isExpanded, setIsExpanded] = React.useState(false)\n\n const checkActive = (item: SidebarItem): boolean => {\n if (item.active) return true\n if (!activePath) return false\n\n // Exact match for root or specific paths\n if (activePath === item.href) return true\n\n // Prefix match for sub-paths (avoiding matching '/' to everything)\n if (item.href !== \"/\" && activePath.startsWith(item.href)) return true\n\n // Recursive check for sub-items\n if (item.items) {\n return item.items.some(checkActive)\n }\n\n return false\n }\n\n const bgUrl = typeof sidebarBg === \"object\" ? (sidebarBg as any).src : sidebarBg\n const logoUrl = typeof logoImg === \"object\" ? (logoImg as any).src : logoImg\n\n return (\n <aside\n onMouseEnter={() => setIsExpanded(true)}\n onMouseLeave={() => setIsExpanded(false)}\n className={cn(\n \"h-full p-2 transition-all duration-500 ease-in-out\",\n isExpanded ? \"w-72\" : \"w-24\",\n className\n )}\n >\n <main\n className={cn(\n \"h-full relative overflow-hidden flex flex-col shadow-xl transition-all duration-500\",\n !showBackground && \"bg-primary\",\n isExpanded ? \"rounded-3xl\" : \"rounded-3xl\"\n )}\n >\n {showBackground && (\n <div\n className=\"absolute inset-0 z-0 transition-transform duration-500\"\n style={{\n backgroundImage: `url(${bgUrl})`,\n backgroundSize: \"300%\", // Increased scale\n backgroundPosition: \"center\",\n width: \"18rem\", // Expanded width (w-72 = 18rem) to keep it \"fixed\"\n }}\n />\n )}\n <div className=\"absolute inset-0 z-0 bg-primary/20\" />\n\n <div className=\"flex flex-col h-full relative z-10 p-2\">\n <div className={cn(\n \"flex flex-col items-center justify-center transition-all duration-500\",\n isExpanded ? \"h-24 py-4\" : \"h-24 py-4\"\n )}>\n {isExpanded ? (\n logo ? (\n <div className=\"flex items-center gap-2\">\n {logo}\n </div>\n ) : (\n <img\n src={logoUrl}\n alt=\"Logo\"\n className=\"h-10 opacity-100 scale-100 transition-all duration-500 object-contain\"\n />\n )\n ) : (\n collapsedLogo ? (\n <div className=\"flex items-center gap-2 w-8\">\n {collapsedLogo}\n </div>\n ) : (\n <img\n src={logoUrl}\n alt=\"Logo\"\n className=\"h-7 opacity-90 transition-all duration-500 object-contain\"\n />\n )\n )}\n {isExpanded && !logo && (\n <span className=\"text-white/60 text-[10px] mt-1 font-medium tracking-wider uppercase\">\n Moldsoft\n </span>\n )}\n </div>\n\n <div className=\"px-4 mb-4\">\n <Separator className=\"bg-white/20\" />\n </div>\n\n {/* Nav Items */}\n <nav className=\"flex-1 px-1 space-y-1 overflow-y-auto no-scrollbar scroll-smooth\">\n {items.map((item) => (\n <SidebarNavLink\n key={item.href}\n item={item}\n isSidebarExpanded={isExpanded}\n isActive={checkActive(item)}\n checkActive={checkActive}\n />\n ))}\n </nav>\n\n {/* Footer Section */}\n <div className=\"mt-auto px-1 pb-2 space-y-1\">\n {footerItems.map((item) => (\n <SidebarNavLink\n key={item.href}\n item={item}\n isSidebarExpanded={isExpanded}\n isActive={checkActive(item)}\n checkActive={checkActive}\n />\n ))}\n {children && (\n <div className={cn(\n \"transition-all duration-500 overflow-hidden\",\n isExpanded ? \"opacity-100 mt-2\" : \"opacity-0 h-0\"\n )}>\n {children}\n </div>\n )}\n </div>\n </div>\n </main>\n </aside>\n )\n}\n\nfunction SidebarNavLink({\n item,\n isSidebarExpanded,\n isActive,\n checkActive,\n depth = 0\n}: {\n item: SidebarItem\n isSidebarExpanded: boolean\n isActive: boolean\n checkActive: (item: SidebarItem) => boolean\n depth?: number\n}) {\n const [isOpen, setIsOpen] = React.useState(isActive)\n const hasSubItems = item.items && item.items.length > 0\n\n // Update isOpen if isActive changes (to auto-expand when navigating)\n React.useEffect(() => {\n if (isActive) setIsOpen(true)\n }, [isActive])\n\n // Only allow sub-items to be visible if sidebar is expanded\n const isSubItemsVisible = hasSubItems && isSidebarExpanded && isOpen\n\n return (\n <div className=\"flex flex-col\">\n <a\n href={item.href}\n onClick={(e) => {\n if (hasSubItems) {\n e.preventDefault()\n setIsOpen(!isOpen)\n }\n }}\n className={cn(\n \"flex items-center h-12 rounded-2xl transition-all duration-500 px-3 relative group overflow-hidden\",\n isActive\n ? \"bg-[#092a5e] text-white\"\n : \"text-white/80 hover:bg-white/10 hover:text-white\"\n )}\n >\n {/* Smooth Centering Spacer - Only active when collapsed */}\n <div className={cn(\n \"transition-all duration-500 ease-in-out h-1\",\n isSidebarExpanded ? \"w-0 opacity-0\" : \"flex-1\"\n )} />\n\n {\n item.icon && (\n <div className={cn(\n \"shrink-0 w-8 h-8 flex items-center justify-center transition-all duration-500\"\n )}>\n {item.icon}\n </div>\n )\n }\n\n\n <span\n className={cn(\n \"font-medium whitespace-nowrap transition-all duration-500 ease-in-out overflow-hidden text-sm\",\n isSidebarExpanded ? \"opacity-100 w-auto\" : \"opacity-0 w-0 pointer-events-none\",\n item.icon ? \"ml-3\" : \"\"\n )}\n >\n {item.label}\n </span>\n\n {/* Right Spacer - Always pushes items to left when expanded, centers when combined with left spacer when collapsed */}\n <div className=\"flex-1 transition-all duration-500\" />\n\n {hasSubItems && isSidebarExpanded && (\n <div className={cn(\n \"transition-transform duration-300\",\n isOpen ? \"rotate-180\" : \"\"\n )}>\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n )}\n </a>\n\n {/* Sub Items rendering */}\n {hasSubItems && isSidebarExpanded && (\n <div className={cn(\n \"overflow-hidden transition-all duration-300 ease-in-out\",\n isOpen ? \"max-h-96 opacity-100 mt-1\" : \"max-h-0 opacity-0\"\n )}>\n <div className=\"ml-7 border-l border-white/10 pl-3 py-1 space-y-1\">\n {item.items?.map((subItem) => (\n <SidebarNavLink\n key={subItem.href}\n item={subItem}\n isSidebarExpanded={isSidebarExpanded}\n isActive={checkActive(subItem)}\n checkActive={checkActive}\n depth={depth + 1}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}","import * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n"],"mappings":"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","names":["React","Slot","cva","clsx","twMerge","cn","inputs","jsx","buttonVariants","cva","Button","className","variant","size","asChild","props","ref","Slot","cn","React","jsx","Card","className","props","ref","cn","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","jsx","Logo","size","className","props","logo_default","React","React","SeparatorPrimitive","jsx","Separator","className","orientation","decorative","props","ref","cn","jsx","jsxs","Sidebar","children","logo","collapsedLogo","items","footerItems","showBackground","className","activePath","isExpanded","setIsExpanded","checkActive","item","bgUrl","bg_blue_default","logoUrl","white_icon_default","cn","Separator","SidebarNavLink","isSidebarExpanded","isActive","depth","isOpen","setIsOpen","hasSubItems","isSubItemsVisible","e","subItem"]}
Binary file
Binary file
package/package.json CHANGED
@@ -1,23 +1,40 @@
1
1
  {
2
2
  "name": "@banhosdev/moldsoft-ui",
3
- "version": "0.2.0",
3
+ "version": "1.0.0",
4
4
  "private": false,
5
- "main": "./src/index.ts",
6
- "types": "./src/index.ts",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ },
14
+ "./styles": "./src/styles/globals.css"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "src/styles/globals.css",
19
+ "src/assets"
20
+ ],
7
21
  "scripts": {
8
- "build": "tsup src/index.ts --format cjs,esm --dts",
9
- "dev": "tsup src/index.ts --format cjs,esm --watch --dts",
22
+ "build": "tsup",
23
+ "dev": "tsup --watch",
10
24
  "lint": "eslint src"
11
25
  },
12
26
  "dependencies": {
27
+ "@radix-ui/react-separator": "^1.1.8",
13
28
  "@radix-ui/react-slot": "^1.2.4",
14
29
  "class-variance-authority": "^0.7.0",
15
30
  "clsx": "^2.1.1",
16
31
  "lucide-react": "^0.454.0",
17
- "react": "19.2.3",
18
- "react-dom": "19.2.3",
19
32
  "tailwind-merge": "^2.5.4"
20
33
  },
34
+ "peerDependencies": {
35
+ "react": "^18.0.0 || ^19.0.0",
36
+ "react-dom": "^18.0.0 || ^19.0.0"
37
+ },
21
38
  "devDependencies": {
22
39
  "@tailwindcss/postcss": "4",
23
40
  "@types/react": "^19",
Binary file
Binary file
Binary file
Binary file
package/components.json DELETED
@@ -1,21 +0,0 @@
1
- {
2
- "$schema": "https://ui.shadcn.com/schema.json",
3
- "style": "default",
4
- "rsc": false,
5
- "tsx": true,
6
- "tailwind": {
7
- "config": "",
8
- "css": "src/styles/globals.css",
9
- "baseColor": "slate",
10
- "cssVariables": true,
11
- "prefix": ""
12
- },
13
- "aliases": {
14
- "components": "@/components",
15
- "utils": "@/lib/utils",
16
- "ui": "@/components/ui",
17
- "lib": "@/lib",
18
- "hooks": "@/hooks"
19
- },
20
- "iconLibrary": "lucide"
21
- }
@@ -1,32 +0,0 @@
1
-
2
- export interface SidebarProps {
3
- children?: React.ReactNode;
4
- className?: string;
5
- items: SidebarItem[];
6
-
7
- }
8
-
9
- export interface SidebarItem {
10
- label: string;
11
- href: string;
12
- icon: React.ReactNode;
13
- }
14
-
15
- export function Sidebar({ children, items = [] }: SidebarProps) {
16
- return (
17
- <aside className="w-full h-full p-4">
18
- <main className="bg-primary rounded-3xl h-full">
19
- <div className="p-4">
20
- <h1>Sidebar</h1>
21
- <ul>
22
- {items?.map((item) => (
23
- <li key={item.href}>
24
- <a href={item.href}>{item.label}</a>
25
- </li>
26
- ))}
27
- </ul>
28
- </div>
29
- </main>
30
- </aside>
31
- );
32
- }
@@ -1,56 +0,0 @@
1
- import * as React from "react"
2
- import { Slot } from "@radix-ui/react-slot"
3
- import { cva, type VariantProps } from "class-variance-authority"
4
-
5
- import { cn } from "../../lib/utils"
6
-
7
- const buttonVariants = cva(
8
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
9
- {
10
- variants: {
11
- variant: {
12
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
13
- destructive:
14
- "bg-destructive text-destructive-foreground hover:bg-destructive/90",
15
- outline:
16
- "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
17
- secondary:
18
- "bg-secondary text-secondary-foreground hover:bg-secondary/80",
19
- ghost: "hover:bg-accent hover:text-accent-foreground",
20
- link: "text-primary underline-offset-4 hover:underline",
21
- },
22
- size: {
23
- default: "h-10 px-4 py-2",
24
- sm: "h-9 rounded-md px-3",
25
- lg: "h-11 rounded-md px-8",
26
- icon: "h-10 w-10",
27
- },
28
- },
29
- defaultVariants: {
30
- variant: "default",
31
- size: "default",
32
- },
33
- }
34
- )
35
-
36
- export interface ButtonProps
37
- extends React.ButtonHTMLAttributes<HTMLButtonElement>,
38
- VariantProps<typeof buttonVariants> {
39
- asChild?: boolean
40
- }
41
-
42
- const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
43
- ({ className, variant, size, asChild = false, ...props }, ref) => {
44
- const Comp = asChild ? Slot : "button"
45
- return (
46
- <Comp
47
- className={cn(buttonVariants({ variant, size, className }))}
48
- ref={ref}
49
- {...props}
50
- />
51
- )
52
- }
53
- )
54
- Button.displayName = "Button"
55
-
56
- export { Button, buttonVariants }
@@ -1,79 +0,0 @@
1
- import * as React from "react"
2
-
3
- import { cn } from "../../lib/utils"
4
-
5
- const Card = React.forwardRef<
6
- HTMLDivElement,
7
- React.HTMLAttributes<HTMLDivElement>
8
- >(({ className, ...props }, ref) => (
9
- <div
10
- ref={ref}
11
- className={cn(
12
- "rounded-lg border bg-card text-card-foreground shadow-sm",
13
- className
14
- )}
15
- {...props}
16
- />
17
- ))
18
- Card.displayName = "Card"
19
-
20
- const CardHeader = React.forwardRef<
21
- HTMLDivElement,
22
- React.HTMLAttributes<HTMLDivElement>
23
- >(({ className, ...props }, ref) => (
24
- <div
25
- ref={ref}
26
- className={cn("flex flex-col space-y-1.5 p-6", className)}
27
- {...props}
28
- />
29
- ))
30
- CardHeader.displayName = "CardHeader"
31
-
32
- const CardTitle = React.forwardRef<
33
- HTMLDivElement,
34
- React.HTMLAttributes<HTMLDivElement>
35
- >(({ className, ...props }, ref) => (
36
- <div
37
- ref={ref}
38
- className={cn(
39
- "text-2xl font-semibold leading-none tracking-tight",
40
- className
41
- )}
42
- {...props}
43
- />
44
- ))
45
- CardTitle.displayName = "CardTitle"
46
-
47
- const CardDescription = React.forwardRef<
48
- HTMLDivElement,
49
- React.HTMLAttributes<HTMLDivElement>
50
- >(({ className, ...props }, ref) => (
51
- <div
52
- ref={ref}
53
- className={cn("text-sm text-muted-foreground", className)}
54
- {...props}
55
- />
56
- ))
57
- CardDescription.displayName = "CardDescription"
58
-
59
- const CardContent = React.forwardRef<
60
- HTMLDivElement,
61
- React.HTMLAttributes<HTMLDivElement>
62
- >(({ className, ...props }, ref) => (
63
- <div ref={ref} className={cn("p-6 pt-0", className)} {...props} />
64
- ))
65
- CardContent.displayName = "CardContent"
66
-
67
- const CardFooter = React.forwardRef<
68
- HTMLDivElement,
69
- React.HTMLAttributes<HTMLDivElement>
70
- >(({ className, ...props }, ref) => (
71
- <div
72
- ref={ref}
73
- className={cn("flex items-center p-6 pt-0", className)}
74
- {...props}
75
- />
76
- ))
77
- CardFooter.displayName = "CardFooter"
78
-
79
- export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
package/src/index.ts DELETED
@@ -1,6 +0,0 @@
1
- // UI Components
2
- export * from "./components/ui/button"
3
- export * from "./components/ui/card"
4
-
5
- // App Components
6
- export * from "./components/app/sidebar"
package/src/lib/utils.ts DELETED
@@ -1,6 +0,0 @@
1
- import { clsx, type ClassValue } from "clsx"
2
- import { twMerge } from "tailwind-merge"
3
-
4
- export function cn(...inputs: ClassValue[]) {
5
- return twMerge(clsx(inputs))
6
- }
package/tsconfig.json DELETED
@@ -1,25 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ESNext",
4
- "lib": [
5
- "DOM",
6
- "DOM.Iterable",
7
- "ESNext"
8
- ],
9
- "module": "ESNext",
10
- "moduleResolution": "bundler",
11
- "jsx": "react-jsx",
12
- "strict": true,
13
- "declaration": true,
14
- "declarationMap": true,
15
- "sourceMap": true,
16
- "esModuleInterop": true,
17
- "forceConsistentCasingInFileNames": true,
18
- "skipLibCheck": true,
19
- "paths": {
20
- "@/*": [
21
- "./src/*"
22
- ]
23
- },
24
- }
25
- }