@alkimi.org/ui-kit 0.1.25 → 0.1.26
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/README.github.md +23 -174
- package/dist/chunk-4GA74O7R.mjs +3 -0
- package/dist/chunk-4GA74O7R.mjs.map +1 -0
- package/dist/chunk-JTAAIOVV.js +3 -0
- package/dist/chunk-JTAAIOVV.js.map +1 -0
- package/dist/components/button.d.mts +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/sidebar.d.mts +4 -3
- package/dist/components/sidebar.d.ts +4 -3
- package/dist/components/sidebar.js +1 -1
- package/dist/components/sidebar.mjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-TWIRWPVC.js +0 -3
- package/dist/chunk-TWIRWPVC.js.map +0 -1
- package/dist/chunk-YPQRCPAC.mjs +0 -3
- package/dist/chunk-YPQRCPAC.mjs.map +0 -1
package/README.github.md
CHANGED
|
@@ -65,20 +65,17 @@ Create your `globals.css`:
|
|
|
65
65
|
/* Optional: Override library CSS variables */
|
|
66
66
|
:root {
|
|
67
67
|
/* Example: Custom primary color */
|
|
68
|
-
--primary:
|
|
69
|
-
--primary-foreground:
|
|
68
|
+
--primary: oklch(0.992 0.019 155.826);
|
|
69
|
+
--primary-foreground: oklch(0.205 0 0);
|
|
70
70
|
|
|
71
71
|
/* You can override any of these variables:
|
|
72
72
|
--secondary, --secondary-foreground
|
|
73
73
|
--background, --foreground
|
|
74
|
-
--muted, --muted-foreground
|
|
74
|
+
--muted, --muted-foreground
|
|
75
75
|
--accent, --accent-foreground
|
|
76
76
|
--destructive, --destructive-foreground
|
|
77
77
|
--border, --input, --ring
|
|
78
|
-
--primary-accent
|
|
79
78
|
--radius (border radius)
|
|
80
|
-
|
|
81
|
-
Format: H S% L% (Hue Saturation% Lightness%)
|
|
82
79
|
*/
|
|
83
80
|
}
|
|
84
81
|
```
|
|
@@ -146,28 +143,26 @@ Create your `globals.css`:
|
|
|
146
143
|
@source "../node_modules/@alkimi.org/ui-kit/dist/**/*.{js,mjs}";
|
|
147
144
|
|
|
148
145
|
/* REQUIRED: Define ALL CSS variables the library needs */
|
|
149
|
-
/* Format: H S% L% (Hue Saturation% Lightness%) */
|
|
150
146
|
:root {
|
|
151
|
-
--background:
|
|
152
|
-
--foreground:
|
|
153
|
-
--card: 0 0
|
|
154
|
-
--card-foreground:
|
|
155
|
-
--popover: 0 0
|
|
156
|
-
--popover-foreground:
|
|
157
|
-
--primary:
|
|
158
|
-
--primary-foreground:
|
|
159
|
-
--
|
|
160
|
-
--secondary:
|
|
161
|
-
--
|
|
162
|
-
--muted:
|
|
163
|
-
--
|
|
164
|
-
--accent: 0 0
|
|
165
|
-
--
|
|
166
|
-
--destructive: 0
|
|
167
|
-
--
|
|
168
|
-
--
|
|
169
|
-
--
|
|
170
|
-
--ring: 140 100% 97.1%;
|
|
147
|
+
--background: oklch(0.992 0.019 155.826);
|
|
148
|
+
--foreground: oklch(0.205 0 0);
|
|
149
|
+
--card: oklch(0.992 0.019 155.826);
|
|
150
|
+
--card-foreground: oklch(0.205 0 0);
|
|
151
|
+
--popover: oklch(0.992 0.019 155.826);
|
|
152
|
+
--popover-foreground: oklch(0.205 0 0);
|
|
153
|
+
--primary: oklch(0.992 0.019 155.826);
|
|
154
|
+
--primary-foreground: oklch(0.205 0 0);
|
|
155
|
+
--secondary: oklch(0.269 0 0);
|
|
156
|
+
--secondary-foreground: oklch(0.992 0.019 155.826);
|
|
157
|
+
--muted: oklch(0.269 0 0);
|
|
158
|
+
--muted-foreground: oklch(0.608 0 0);
|
|
159
|
+
--accent: oklch(0.269 0 0);
|
|
160
|
+
--accent-foreground: oklch(0.992 0.019 155.826);
|
|
161
|
+
--destructive: oklch(0.576 0.214 25.467);
|
|
162
|
+
--destructive-foreground: oklch(0.992 0.019 155.826);
|
|
163
|
+
--border: #3f3f46;
|
|
164
|
+
--input: #3f3f46;
|
|
165
|
+
--ring: oklch(0.992 0.019 155.826);
|
|
171
166
|
--radius: 0.625rem;
|
|
172
167
|
--font-family: "Helvetica Now Display", "Helvetica", sans-serif;
|
|
173
168
|
}
|
|
@@ -475,153 +470,7 @@ import {
|
|
|
475
470
|
import { cn } from "@alkimi.org/ui-kit/utils"
|
|
476
471
|
```
|
|
477
472
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
To add more shadcn/ui components to this library:
|
|
481
|
-
|
|
482
|
-
1. Use the shadcn CLI to add components:
|
|
483
|
-
|
|
484
|
-
```bash
|
|
485
|
-
npx shadcn-ui@latest add [component-name]
|
|
486
|
-
```
|
|
487
|
-
|
|
488
|
-
2. Export the new component in [src/index.ts](src/index.ts):
|
|
489
|
-
|
|
490
|
-
```tsx
|
|
491
|
-
export { ComponentName } from "./components/component-name"
|
|
492
|
-
```
|
|
493
|
-
|
|
494
|
-
3. Create a story file in the `stories/` folder:
|
|
495
|
-
|
|
496
|
-
```tsx
|
|
497
|
-
// stories/ComponentName.stories.tsx
|
|
498
|
-
import type { Meta, StoryObj } from "@storybook/react"
|
|
499
|
-
import { ComponentName } from "../src/components/component-name"
|
|
500
|
-
|
|
501
|
-
const meta = {
|
|
502
|
-
title: "Components/ComponentName",
|
|
503
|
-
component: ComponentName,
|
|
504
|
-
parameters: {
|
|
505
|
-
layout: "centered",
|
|
506
|
-
},
|
|
507
|
-
tags: ["autodocs"],
|
|
508
|
-
} satisfies Meta<typeof ComponentName>
|
|
509
|
-
|
|
510
|
-
export default meta
|
|
511
|
-
type Story = StoryObj<typeof meta>
|
|
512
|
-
|
|
513
|
-
export const Default: Story = {
|
|
514
|
-
args: {
|
|
515
|
-
// your component props
|
|
516
|
-
},
|
|
517
|
-
}
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
4. Test locally with Storybook:
|
|
521
|
-
|
|
522
|
-
```bash
|
|
523
|
-
npm run storybook
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
5. Commit and push to main:
|
|
527
|
-
|
|
528
|
-
```bash
|
|
529
|
-
git add .
|
|
530
|
-
git commit -m "feat: add ComponentName"
|
|
531
|
-
git push
|
|
532
|
-
```
|
|
533
|
-
|
|
534
|
-
6. Update the Storybook deployment:
|
|
535
|
-
|
|
536
|
-
```bash
|
|
537
|
-
git checkout storybook
|
|
538
|
-
git merge main
|
|
539
|
-
git push
|
|
540
|
-
```
|
|
541
|
-
|
|
542
|
-
Vercel will automatically rebuild and deploy the updated Storybook.
|
|
543
|
-
|
|
544
|
-
7. (Optional) Publish to npm:
|
|
545
|
-
```bash
|
|
546
|
-
git checkout main
|
|
547
|
-
# Update version in package.json
|
|
548
|
-
npm run build
|
|
549
|
-
npm publish
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
## Development
|
|
553
|
-
|
|
554
|
-
### Running the Demo
|
|
555
|
-
|
|
556
|
-
To see the components in action, run the demo application:
|
|
557
|
-
|
|
558
|
-
```bash
|
|
559
|
-
cd demo
|
|
560
|
-
pnpm install
|
|
561
|
-
pnpm run dev
|
|
562
|
-
```
|
|
563
|
-
|
|
564
|
-
Then open [http://localhost:3000](http://localhost:3000) in your browser.
|
|
565
|
-
|
|
566
|
-
The demo showcases all available components with interactive examples, including:
|
|
567
|
-
|
|
568
|
-
- All button variants and sizes
|
|
569
|
-
- Card layouts and compositions
|
|
570
|
-
- Dark mode toggle
|
|
571
|
-
- Interactive component states
|
|
572
|
-
|
|
573
|
-
### Build
|
|
574
|
-
|
|
575
|
-
Build the library for production:
|
|
576
|
-
|
|
577
|
-
```bash
|
|
578
|
-
npm run build
|
|
579
|
-
```
|
|
580
|
-
|
|
581
|
-
### Watch Mode
|
|
582
|
-
|
|
583
|
-
Build the library in watch mode during development:
|
|
584
|
-
|
|
585
|
-
```bash
|
|
586
|
-
npm run dev
|
|
587
|
-
```
|
|
588
|
-
|
|
589
|
-
### Type Check
|
|
590
|
-
|
|
591
|
-
Run TypeScript type checking:
|
|
592
|
-
|
|
593
|
-
```bash
|
|
594
|
-
npm run type-check
|
|
595
|
-
```
|
|
596
|
-
|
|
597
|
-
### Storybook
|
|
598
|
-
|
|
599
|
-
View and develop components in isolation using Storybook:
|
|
600
|
-
|
|
601
|
-
```bash
|
|
602
|
-
npm run storybook
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
This will start Storybook on [http://localhost:6006](http://localhost:6006).
|
|
606
|
-
|
|
607
|
-
#### Building Storybook for Deployment
|
|
608
|
-
|
|
609
|
-
To build a static version of Storybook for deployment:
|
|
610
|
-
|
|
611
|
-
```bash
|
|
612
|
-
npm run build-storybook
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
This will generate a static site in the `storybook-static` directory that you can deploy to any static hosting service.
|
|
616
|
-
|
|
617
|
-
## Publishing to npm
|
|
618
|
-
|
|
619
|
-
1. Update the version number in [package.json](package.json) (e.g., from `0.1.3` to `0.1.4`)
|
|
620
|
-
2. Build the library: `npm run build`
|
|
621
|
-
3. Login to npm (if not already logged in): `npm login`
|
|
622
|
-
4. Publish: `npm publish`
|
|
623
|
-
|
|
624
|
-
**Note:** Make sure to bump the version in [package.json](package.json) before publishing any changes to avoid conflicts with existing versions on npm.
|
|
473
|
+
**Note**: Both import methods require installing the full `@alkimi.org/ui-kit` package. The individual imports help optimize your production bundle size (only used components are included), but don't reduce installation size.
|
|
625
474
|
|
|
626
475
|
## License
|
|
627
476
|
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{a as D}from"./chunk-6BEVEBGO.mjs";import{a as _}from"./chunk-YBV4CPVD.mjs";import{a as k,f as B,g as O,i as A,j as G}from"./chunk-73BUNE7H.mjs";import{a as I}from"./chunk-CNRZOMR4.mjs";import{a as F,b as K,c as V,d as W}from"./chunk-PY6WBMT2.mjs";import{b as H}from"./chunk-HQUUCCZL.mjs";import{a as i}from"./chunk-S5TKCF6T.mjs";import*as r from"react";import{Slot as C}from"@radix-ui/react-slot";import{cva as Y}from"class-variance-authority";import{PanelLeft as J,X as Q,Menu as Z}from"lucide-react";import*as L from"react";var w={sm:448,md:576,lg:986,xl:1280,"2xl":1400};function j(){let[e,a]=L.useState({isMobile:!1,isSm:!1,isMd:!1,isLg:!1,isXl:!1,is2xl:!1});return L.useEffect(()=>{let t=()=>{let n=window.innerWidth;a({isMobile:n<w.md,isSm:n>=w.sm,isMd:n>=w.md,isLg:n>=w.lg,isXl:n>=w.xl,is2xl:n>=w["2xl"]})};return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),e}import{jsx as o,jsxs as R}from"react/jsx-runtime";var ee="sidebar_state",ae=3600*24*7,te="16rem",X="23rem",re="4.625rem",oe="b",$=r.createContext(null);function N(){let e=r.useContext($);if(!e)throw new Error("useSidebar must be used within a SidebarProvider.");return e}var ne=r.forwardRef(({defaultOpen:e=!0,open:a,onOpenChange:t,className:n,style:s,children:d,...c},b)=>{let{isMobile:l,isMd:m,isLg:g}=j(),[u,v]=r.useState(!1),[y,h]=r.useState(e),[E,S]=r.useState(e),M=a??E,x=r.useCallback(p=>{let f=typeof p=="function"?p(M):p;t?t(f):S(f),document.cookie=`${ee}=${f}; path=/; max-age=${ae}`},[t,M]),P=r.useRef({isMd:m,isLg:g});r.useEffect(()=>{!(P.current.isMd&&!P.current.isLg)&&(m&&!g)&&M&&x(!1),P.current={isMd:m,isLg:g}},[m,g,M,x]);let T=r.useCallback(()=>l?v(p=>!p):x(p=>!p),[l,x,v]);r.useEffect(()=>{let p=f=>{f.key===oe&&(f.metaKey||f.ctrlKey)&&(f.preventDefault(),T())};return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[T]);let z=M?"expanded":"collapsed",q=r.useMemo(()=>({state:z,isOpen:l?u:y,setOpen:x,isMobile:l,openMobile:u,setOpenMobile:v,toggleSidebar:T,setIsFullyOpen:h}),[z,y,x,l,u,v,T,h]);return o($.Provider,{value:q,children:o(F,{delayDuration:0,children:o("div",{style:{"--sidebar-width":te,"--sidebar-width-icon":re,...s},className:i("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",n),ref:b,...c,children:d})})})});ne.displayName="SidebarProvider";var ie=r.forwardRef(({side:e="left",variant:a="sidebar",collapsible:t="offcanvas",className:n,children:s,...d},c)=>{let{isMobile:b,state:l,openMobile:m,setOpenMobile:g,setIsFullyOpen:u}=N(),v=r.useRef(null),y=r.useRef(!0);return r.useEffect(()=>{let h=v.current;if(!h||b)return;if(y.current){y.current=!1,u(l==="expanded");return}let E=S=>{S.target===h&&(S.propertyName==="left"||S.propertyName==="right"||S.propertyName==="width")&&u(l==="expanded")};return h.addEventListener("transitionend",E),()=>h.removeEventListener("transitionend",E)},[l,b,u]),t==="none"?o("aside",{className:i("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",n),ref:c,...d,children:s}):b?o(k,{open:m,onOpenChange:g,...d,children:R(B,{"data-sidebar":"sidebar","data-mobile":"true",className:"bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{width:X,maxWidth:X},side:e,children:[R(O,{className:"sr-only",children:[o(A,{children:"Sidebar"}),o(G,{children:"Displays the mobile sidebar."})]}),o("div",{className:"flex h-full w-full flex-col",children:s})]})}):R("aside",{ref:c,className:"group peer hidden text-sidebar-foreground md:block","data-state":l,"data-collapsible":l==="collapsed"?t:"","data-variant":a,"data-side":e,children:[o("div",{className:i("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",a==="floating"||a==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),o("div",{ref:v,className:i("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",e==="left"?"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]":"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",a==="floating"||a==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)",n),...d,children:o("div",{"data-sidebar":"sidebar",className:"flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow",children:o("div",{className:"m-2.5 rounded-2xl border bg-sidebar border-border h-full",children:s})})})]})});ie.displayName="Sidebar";var U=r.forwardRef(({className:e,onClick:a,...t},n)=>{let{toggleSidebar:s,isMobile:d,openMobile:c}=N();return R(H,{ref:n,"data-sidebar":"trigger",variant:"ghost",size:"icon",className:i("h-7 w-7 bg-transparent hover:bg-transparent",e),onClick:b=>{a?.(b),s()},...t,children:[d?c?o("span",{className:"rounded-full border border-border p-2",children:o(Q,{size:16})}):o("span",{className:"rounded-full border border-border p-2",children:o(Z,{size:16})}):o(J,{size:16}),o("span",{className:"sr-only",children:"Toggle Sidebar"})]})});U.displayName="SidebarTrigger";var se=r.forwardRef(({className:e,...a},t)=>{let{toggleSidebar:n}=N();return o("button",{ref:t,"data-sidebar":"rail","aria-label":"Toggle Sidebar",tabIndex:-1,onClick:n,title:"Toggle Sidebar",className:i("absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex","in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize","group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",e),...a})});se.displayName="SidebarRail";var de=r.forwardRef(({className:e,...a},t)=>o("main",{ref:t,className:i("relative flex w-full flex-1 flex-col","md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow",e),...a}));de.displayName="SidebarInset";var le=r.forwardRef(({className:e,...a},t)=>o(D,{ref:t,"data-sidebar":"input",className:i("h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",e),...a}));le.displayName="SidebarInput";var ce=r.forwardRef(({className:e,showTrigger:a=!1,children:t,...n},s)=>{let{state:d,isMobile:c}=N();return R("div",{ref:s,"data-sidebar":"header",className:i("flex w-full gap-2 p-2",d==="collapsed"?"justify-center items-center":"justify-between items-start",e),...n,children:[(c||d!=="collapsed")&&o("div",{className:"transition-all duration-200 w-full overflow-hidden",children:o("div",{className:"whitespace-nowrap",children:t})}),a&&o(U,{})]})});ce.displayName="SidebarHeader";var pe=r.forwardRef(({className:e,...a},t)=>o("div",{ref:t,"data-sidebar":"footer",className:i("flex flex-col gap-2 p-2",e),...a}));pe.displayName="SidebarFooter";var ue=r.forwardRef(({className:e,...a},t)=>o(_,{ref:t,"data-sidebar":"separator",className:i("mx-2 w-auto bg-sidebar-border",e),...a}));ue.displayName="SidebarSeparator";var be=r.forwardRef(({className:e,...a},t)=>o("div",{ref:t,"data-sidebar":"content",className:i("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden","p-2 group-data-[collapsible=icon]:px-0",e),...a}));be.displayName="SidebarContent";var fe=r.forwardRef(({className:e,...a},t)=>o("div",{ref:t,"data-sidebar":"group",className:i("relative flex w-full min-w-0 flex-col","group-data-[collapsible=icon]:p-0",e),...a}));fe.displayName="SidebarGroup";var me=r.forwardRef(({className:e,asChild:a=!1,...t},n)=>o(a?C:"div",{ref:n,"data-sidebar":"group-label",className:i("flex h-8 shrink-0 items-center rounded-md text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",e),...t}));me.displayName="SidebarGroupLabel";var ge=r.forwardRef(({className:e,asChild:a=!1,...t},n)=>o(a?C:"button",{ref:n,"data-sidebar":"group-action",className:i("absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 after:md:hidden","group-data-[collapsible=icon]:hidden",e),...t}));ge.displayName="SidebarGroupAction";var ve=r.forwardRef(({className:e,...a},t)=>o("div",{ref:t,"data-sidebar":"group-content",className:i("w-full text-sm",e),...a}));ve.displayName="SidebarGroupContent";var he=r.forwardRef(({className:e,...a},t)=>o("ul",{ref:t,"data-sidebar":"menu",className:i("flex w-full min-w-0 flex-col gap-1",e),...a}));he.displayName="SidebarMenu";var Re=r.forwardRef(({className:e,...a},t)=>o("li",{ref:t,"data-sidebar":"menu-item",className:i("group/menu-item relative",e),...a}));Re.displayName="SidebarMenuItem";var Se=Y("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:!p-0"}},defaultVariants:{variant:"default",size:"default"}}),xe=r.forwardRef(({asChild:e=!1,isActive:a=!1,variant:t="default",size:n="default",tooltip:s,className:d,...c},b)=>{let l=e?C:"button",{isMobile:m,state:g}=N(),u=o(l,{ref:b,"data-sidebar":"menu-button","data-size":n,"data-active":a,className:i(Se({variant:t,size:n}),d),...c});return s?(typeof s=="string"&&(s={children:s}),R(K,{children:[o(V,{asChild:!0,children:u}),o(W,{side:"right",align:"center",hidden:g!=="collapsed"||m,...s})]})):u});xe.displayName="SidebarMenuButton";var we=r.forwardRef(({className:e,asChild:a=!1,showOnHover:t=!1,...n},s)=>o(a?C:"button",{ref:s,"data-sidebar":"menu-action",className:i("absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 after:md:hidden","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",t&&"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0",e),...n}));we.displayName="SidebarMenuAction";var ye=r.forwardRef(({className:e,...a},t)=>o("div",{ref:t,"data-sidebar":"menu-badge",className:i("pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground","peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",e),...a}));ye.displayName="SidebarMenuBadge";var Me=r.forwardRef(({className:e,showIcon:a=!1,...t},n)=>{let s=r.useMemo(()=>`${Math.floor(Math.random()*40)+50}%`,[]);return R("div",{ref:n,"data-sidebar":"menu-skeleton",className:i("flex h-8 items-center gap-2 rounded-md px-2",e),...t,children:[a&&o(I,{className:"size-4 rounded-md","data-sidebar":"menu-skeleton-icon"}),o(I,{className:"h-4 max-w-[--skeleton-width] flex-1","data-sidebar":"menu-skeleton-text",style:{"--skeleton-width":s}})]})});Me.displayName="SidebarMenuSkeleton";var Ce=r.forwardRef(({className:e,...a},t)=>o("ul",{ref:t,"data-sidebar":"menu-sub",className:i("mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5","group-data-[collapsible=icon]:hidden",e),...a}));Ce.displayName="SidebarMenuSub";var Ne=r.forwardRef(({...e},a)=>o("li",{ref:a,...e}));Ne.displayName="SidebarMenuSubItem";var Ee=r.forwardRef(({asChild:e=!1,size:a="md",isActive:t,className:n,...s},d)=>o(e?C:"a",{ref:d,"data-sidebar":"menu-sub-button","data-size":a,"data-active":t,className:i("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground","data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",a==="sm"&&"text-xs",a==="md"&&"text-sm","group-data-[collapsible=icon]:hidden",n),...s}));Ee.displayName="SidebarMenuSubButton";export{j as a,N as b,ne as c,ie as d,U as e,se as f,de as g,le as h,ce as i,pe as j,ue as k,be as l,fe as m,me as n,ge as o,ve as p,he as q,Re as r,xe as s,we as t,ye as u,Me as v,Ce as w,Ne as x,Ee as y};
|
|
3
|
+
//# sourceMappingURL=chunk-4GA74O7R.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/sidebar.tsx","../src/hooks/use-mobile.ts"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeft, X, Menu } from \"lucide-react\"\n\nimport { useScreenSize } from \"@/hooks/use-mobile\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/button\"\nimport { Input } from \"@/components/input\"\nimport { Separator } from \"@/components/separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/sheet\"\nimport { Skeleton } from \"@/components/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"23rem\"\nconst SIDEBAR_WIDTH_ICON = \"4.625rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n isOpen: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n setIsFullyOpen: (open: boolean) => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nconst SidebarProvider = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n }\n>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n },\n ref\n ) => {\n const { isMobile, isMd, isLg } = useScreenSize()\n const [openMobile, setOpenMobile] = React.useState(false)\n const [isFullyOpen, setIsFullyOpen] = React.useState(defaultOpen)\n\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Auto-collapse sidebar when transitioning INTO the medium range (576px - 986px)\n const prevScreenSizeRef = React.useRef({ isMd, isLg })\n React.useEffect(() => {\n const wasInMediumRange =\n prevScreenSizeRef.current.isMd && !prevScreenSizeRef.current.isLg\n const isNowInMediumRange = isMd && !isLg\n\n // Only collapse if we just entered the medium range and sidebar is open\n if (!wasInMediumRange && isNowInMediumRange && open) {\n setOpen(false)\n }\n\n prevScreenSizeRef.current = { isMd, isLg }\n }, [isMd, isLg, open, setOpen])\n\n const toggleSidebar = React.useCallback(() => {\n return isMobile\n ? setOpenMobile((open) => !open)\n : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n isOpen: isMobile ? openMobile : isFullyOpen,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n setIsFullyOpen,\n }),\n [\n state,\n isFullyOpen,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n setIsFullyOpen,\n ]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n }\n)\nSidebarProvider.displayName = \"SidebarProvider\"\n\nconst Sidebar = React.forwardRef<\n HTMLElement,\n React.ComponentProps<\"aside\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n }\n>(\n (\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n const { isMobile, state, openMobile, setOpenMobile, setIsFullyOpen } =\n useSidebar()\n const sidebarRef = React.useRef<HTMLDivElement>(null)\n const isFirstRenderRef = React.useRef(true)\n\n // Track when the sidebar animation completes\n React.useEffect(() => {\n const sidebar = sidebarRef.current\n if (!sidebar || isMobile) return\n\n // On first render, set isFullyOpen immediately without waiting for animation\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false\n setIsFullyOpen(state === \"expanded\")\n return\n }\n\n const handleTransitionEnd = (event: TransitionEvent) => {\n // Only respond to transitions on the sidebar itself, not children\n if (event.target !== sidebar) return\n\n // Check if we're transitioning width, left, or right properties\n if (\n event.propertyName === \"left\" ||\n event.propertyName === \"right\" ||\n event.propertyName === \"width\"\n ) {\n setIsFullyOpen(state === \"expanded\")\n }\n }\n\n sidebar.addEventListener(\"transitionend\", handleTransitionEnd)\n return () =>\n sidebar.removeEventListener(\"transitionend\", handleTransitionEnd)\n }, [state, isMobile, setIsFullyOpen])\n\n if (collapsible === \"none\") {\n return (\n <aside\n className={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n </aside>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n style={\n {\n width: SIDEBAR_WIDTH_MOBILE,\n maxWidth: SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <aside\n ref={ref}\n className=\"group peer hidden text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n >\n <div\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n ref={sidebarRef}\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n className=\"flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow\"\n >\n <div className=\"m-2.5 rounded-2xl border bg-sidebar border-border h-full\">\n {children}\n </div>\n </div>\n </div>\n </aside>\n )\n }\n)\nSidebar.displayName = \"Sidebar\"\n\nconst SidebarTrigger = React.forwardRef<\n React.ElementRef<typeof Button>,\n React.ComponentProps<typeof Button>\n>(({ className, onClick, ...props }, ref) => {\n const { toggleSidebar, isMobile, openMobile } = useSidebar()\n\n return (\n <Button\n ref={ref}\n data-sidebar=\"trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"h-7 w-7 bg-transparent hover:bg-transparent\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n {isMobile ? (\n openMobile ? (\n <span className=\"rounded-full border border-border p-2\">\n <X size={16} />\n </span>\n ) : (\n <span className=\"rounded-full border border-border p-2\">\n <Menu size={16} />\n </span>\n )\n ) : (\n <PanelLeft size={16} />\n )}\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n})\nSidebarTrigger.displayName = \"SidebarTrigger\"\n\nconst SidebarRail = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\">\n>(({ className, ...props }, ref) => {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarRail.displayName = \"SidebarRail\"\n\nconst SidebarInset = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"main\">\n>(({ className, ...props }, ref) => {\n return (\n <main\n ref={ref}\n className={cn(\n \"relative flex w-full flex-1 flex-col\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarInset.displayName = \"SidebarInset\"\n\nconst SidebarInput = React.forwardRef<\n React.ElementRef<typeof Input>,\n React.ComponentProps<typeof Input>\n>(({ className, ...props }, ref) => {\n return (\n <Input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\n \"h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarInput.displayName = \"SidebarInput\"\n\nconst SidebarHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n showTrigger?: boolean\n }\n>(({ className, showTrigger = false, children, ...props }, ref) => {\n const { state, isMobile } = useSidebar()\n\n return (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn(\n \"flex w-full gap-2 p-2\",\n state === \"collapsed\"\n ? \"justify-center items-center\"\n : \"justify-between items-start\",\n className\n )}\n {...props}\n >\n {(isMobile || state !== \"collapsed\") && (\n <div className=\"transition-all duration-200 w-full overflow-hidden\">\n <div className=\"whitespace-nowrap\">{children}</div>\n </div>\n )}\n\n {showTrigger && <SidebarTrigger />}\n </div>\n )\n})\nSidebarHeader.displayName = \"SidebarHeader\"\n\nconst SidebarFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n})\nSidebarFooter.displayName = \"SidebarFooter\"\n\nconst SidebarSeparator = React.forwardRef<\n React.ElementRef<typeof Separator>,\n React.ComponentProps<typeof Separator>\n>(({ className, ...props }, ref) => {\n return (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n )\n})\nSidebarSeparator.displayName = \"SidebarSeparator\"\n\nconst SidebarContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n \"p-2 group-data-[collapsible=icon]:px-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarContent.displayName = \"SidebarContent\"\n\nconst SidebarGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn(\n \"relative flex w-full min-w-0 flex-col\",\n \"group-data-[collapsible=icon]:p-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarGroup.displayName = \"SidebarGroup\"\n\nconst SidebarGroupLabel = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n className={cn(\n \"flex h-8 shrink-0 items-center rounded-md text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarGroupLabel.displayName = \"SidebarGroupLabel\"\n\nconst SidebarGroupAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 after:md:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarGroupAction.displayName = \"SidebarGroupAction\"\n\nconst SidebarGroupContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n))\nSidebarGroupContent.displayName = \"SidebarGroupContent\"\n\nconst SidebarMenu = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n))\nSidebarMenu.displayName = \"SidebarMenu\"\n\nconst SidebarMenuItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n))\nSidebarMenuItem.displayName = \"SidebarMenuItem\"\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:!p-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n } & VariantProps<typeof sidebarMenuButtonVariants>\n>(\n (\n {\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n }\n)\nSidebarMenuButton.displayName = \"SidebarMenuButton\"\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n }\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 after:md:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarMenuAction.displayName = \"SidebarMenuAction\"\n\nconst SidebarMenuBadge = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n))\nSidebarMenuBadge.displayName = \"SidebarMenuBadge\"\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-[--skeleton-width] flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n})\nSidebarMenuSkeleton.displayName = \"SidebarMenuSkeleton\"\n\nconst SidebarMenuSub = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n))\nSidebarMenuSub.displayName = \"SidebarMenuSub\"\n\nconst SidebarMenuSubItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ ...props }, ref) => <li ref={ref} {...props} />)\nSidebarMenuSubItem.displayName = \"SidebarMenuSubItem\"\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n }\n>(({ asChild = false, size = \"md\", isActive, className, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarMenuSubButton.displayName = \"SidebarMenuSubButton\"\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","import * as React from \"react\"\n\nconst breakpoints = {\n sm: 448,\n md: 576,\n lg: 986,\n xl: 1280,\n \"2xl\": 1400,\n}\n\nexport function useScreenSize() {\n const [screenSize, setScreenSize] = React.useState({\n isMobile: false,\n isSm: false,\n isMd: false,\n isLg: false,\n isXl: false,\n is2xl: false,\n })\n\n React.useEffect(() => {\n const updateScreenSize = () => {\n const width = window.innerWidth\n setScreenSize({\n isMobile: width < breakpoints.md,\n isSm: width >= breakpoints.sm,\n isMd: width >= breakpoints.md,\n isLg: width >= breakpoints.lg,\n isXl: width >= breakpoints.xl,\n is2xl: width >= breakpoints[\"2xl\"],\n })\n }\n\n updateScreenSize()\n window.addEventListener(\"resize\", updateScreenSize)\n return () => window.removeEventListener(\"resize\", updateScreenSize)\n }, [])\n\n return screenSize\n}\n"],"mappings":"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","names":["React","Slot","cva","PanelLeft","X","Menu","React","breakpoints","useScreenSize","screenSize","setScreenSize","updateScreenSize","width","jsx","jsxs","SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","useSidebar","context","SidebarProvider","defaultOpen","openProp","setOpenProp","className","style","children","props","ref","isMobile","isMd","isLg","useScreenSize","openMobile","setOpenMobile","isFullyOpen","setIsFullyOpen","_open","_setOpen","open","setOpen","value","openState","prevScreenSizeRef","toggleSidebar","handleKeyDown","event","state","contextValue","TooltipProvider","cn","Sidebar","side","variant","collapsible","sidebarRef","isFirstRenderRef","sidebar","handleTransitionEnd","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","SidebarTrigger","onClick","Button","X","Menu","PanelLeft","SidebarRail","SidebarInset","SidebarInput","Input","SidebarHeader","showTrigger","SidebarFooter","SidebarSeparator","Separator","SidebarContent","SidebarGroup","SidebarGroupLabel","asChild","Slot","SidebarGroupAction","SidebarGroupContent","SidebarMenu","SidebarMenuItem","sidebarMenuButtonVariants","cva","SidebarMenuButton","isActive","size","tooltip","Comp","button","Tooltip","TooltipTrigger","TooltipContent","SidebarMenuAction","showOnHover","SidebarMenuBadge","SidebarMenuSkeleton","showIcon","width","Skeleton","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuSubButton"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
|
|
2
|
+
var _chunkQZ2ZUF7Qjs = require('./chunk-QZ2ZUF7Q.js');var _chunk7SOZ6MOVjs = require('./chunk-7SOZ6MOV.js');var _chunkNKYU43T6js = require('./chunk-NKYU43T6.js');var _chunk5L5DM2X5js = require('./chunk-5L5DM2X5.js');var _chunkC5AZO7RUjs = require('./chunk-C5AZO7RU.js');var _chunk54IB54OZjs = require('./chunk-54IB54OZ.js');var _chunkFUYXCJOQjs = require('./chunk-FUYXCJOQ.js');var _react = require('react'); var r = _interopRequireWildcard(_react); var L = _interopRequireWildcard(_react);var _reactslot = require('@radix-ui/react-slot');var _classvarianceauthority = require('class-variance-authority');var _lucidereact = require('lucide-react');var w={sm:448,md:576,lg:986,xl:1280,"2xl":1400};function j(){let[e,a]=L.useState({isMobile:!1,isSm:!1,isMd:!1,isLg:!1,isXl:!1,is2xl:!1});return L.useEffect(()=>{let t=()=>{let n=window.innerWidth;a({isMobile:n<w.md,isSm:n>=w.sm,isMd:n>=w.md,isLg:n>=w.lg,isXl:n>=w.xl,is2xl:n>=w["2xl"]})};return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),e}var _jsxruntime = require('react/jsx-runtime');var ee="sidebar_state",ae=3600*24*7,te="16rem",X="23rem",re="4.625rem",oe="b",$=r.createContext(null);function N(){let e=r.useContext($);if(!e)throw new Error("useSidebar must be used within a SidebarProvider.");return e}var ne=r.forwardRef(({defaultOpen:e=!0,open:a,onOpenChange:t,className:n,style:s,children:d,...c},b)=>{let{isMobile:l,isMd:m,isLg:g}=j(),[u,v]=r.useState(!1),[y,h]=r.useState(e),[E,S]=r.useState(e),M=_nullishCoalesce(a, () => (E)),x=r.useCallback(p=>{let f=typeof p=="function"?p(M):p;t?t(f):S(f),document.cookie=`${ee}=${f}; path=/; max-age=${ae}`},[t,M]),P=r.useRef({isMd:m,isLg:g});r.useEffect(()=>{!(P.current.isMd&&!P.current.isLg)&&(m&&!g)&&M&&x(!1),P.current={isMd:m,isLg:g}},[m,g,M,x]);let T=r.useCallback(()=>l?v(p=>!p):x(p=>!p),[l,x,v]);r.useEffect(()=>{let p=f=>{f.key===oe&&(f.metaKey||f.ctrlKey)&&(f.preventDefault(),T())};return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[T]);let z=M?"expanded":"collapsed",q=r.useMemo(()=>({state:z,isOpen:l?u:y,setOpen:x,isMobile:l,openMobile:u,setOpenMobile:v,toggleSidebar:T,setIsFullyOpen:h}),[z,y,x,l,u,v,T,h]);return _jsxruntime.jsx.call(void 0, $.Provider,{value:q,children:_jsxruntime.jsx.call(void 0, _chunkC5AZO7RUjs.a,{delayDuration:0,children:_jsxruntime.jsx.call(void 0, "div",{style:{"--sidebar-width":te,"--sidebar-width-icon":re,...s},className:_chunkFUYXCJOQjs.a.call(void 0, "group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",n),ref:b,...c,children:d})})})});ne.displayName="SidebarProvider";var ie=r.forwardRef(({side:e="left",variant:a="sidebar",collapsible:t="offcanvas",className:n,children:s,...d},c)=>{let{isMobile:b,state:l,openMobile:m,setOpenMobile:g,setIsFullyOpen:u}=N(),v=r.useRef(null),y=r.useRef(!0);return r.useEffect(()=>{let h=v.current;if(!h||b)return;if(y.current){y.current=!1,u(l==="expanded");return}let E=S=>{S.target===h&&(S.propertyName==="left"||S.propertyName==="right"||S.propertyName==="width")&&u(l==="expanded")};return h.addEventListener("transitionend",E),()=>h.removeEventListener("transitionend",E)},[l,b,u]),t==="none"?_jsxruntime.jsx.call(void 0, "aside",{className:_chunkFUYXCJOQjs.a.call(void 0, "flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",n),ref:c,...d,children:s}):b?_jsxruntime.jsx.call(void 0, _chunkNKYU43T6js.a,{open:m,onOpenChange:g,...d,children:_jsxruntime.jsxs.call(void 0, _chunkNKYU43T6js.f,{"data-sidebar":"sidebar","data-mobile":"true",className:"bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{width:X,maxWidth:X},side:e,children:[_jsxruntime.jsxs.call(void 0, _chunkNKYU43T6js.g,{className:"sr-only",children:[_jsxruntime.jsx.call(void 0, _chunkNKYU43T6js.i,{children:"Sidebar"}),_jsxruntime.jsx.call(void 0, _chunkNKYU43T6js.j,{children:"Displays the mobile sidebar."})]}),_jsxruntime.jsx.call(void 0, "div",{className:"flex h-full w-full flex-col",children:s})]})}):_jsxruntime.jsxs.call(void 0, "aside",{ref:c,className:"group peer hidden text-sidebar-foreground md:block","data-state":l,"data-collapsible":l==="collapsed"?t:"","data-variant":a,"data-side":e,children:[_jsxruntime.jsx.call(void 0, "div",{className:_chunkFUYXCJOQjs.a.call(void 0, "relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",a==="floating"||a==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),_jsxruntime.jsx.call(void 0, "div",{ref:v,className:_chunkFUYXCJOQjs.a.call(void 0, "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",e==="left"?"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]":"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",a==="floating"||a==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)",n),...d,children:_jsxruntime.jsx.call(void 0, "div",{"data-sidebar":"sidebar",className:"flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow",children:_jsxruntime.jsx.call(void 0, "div",{className:"m-2.5 rounded-2xl border bg-sidebar border-border h-full",children:s})})})]})});ie.displayName="Sidebar";var U=r.forwardRef(({className:e,onClick:a,...t},n)=>{let{toggleSidebar:s,isMobile:d,openMobile:c}=N();return _jsxruntime.jsxs.call(void 0, _chunk54IB54OZjs.b,{ref:n,"data-sidebar":"trigger",variant:"ghost",size:"icon",className:_chunkFUYXCJOQjs.a.call(void 0, "h-7 w-7 bg-transparent hover:bg-transparent",e),onClick:b=>{_optionalChain([a, 'optionalCall', _2 => _2(b)]),s()},...t,children:[d?c?_jsxruntime.jsx.call(void 0, "span",{className:"rounded-full border border-border p-2",children:_jsxruntime.jsx.call(void 0, _lucidereact.X,{size:16})}):_jsxruntime.jsx.call(void 0, "span",{className:"rounded-full border border-border p-2",children:_jsxruntime.jsx.call(void 0, _lucidereact.Menu,{size:16})}):_jsxruntime.jsx.call(void 0, _lucidereact.PanelLeft,{size:16}),_jsxruntime.jsx.call(void 0, "span",{className:"sr-only",children:"Toggle Sidebar"})]})});U.displayName="SidebarTrigger";var se=r.forwardRef(({className:e,...a},t)=>{let{toggleSidebar:n}=N();return _jsxruntime.jsx.call(void 0, "button",{ref:t,"data-sidebar":"rail","aria-label":"Toggle Sidebar",tabIndex:-1,onClick:n,title:"Toggle Sidebar",className:_chunkFUYXCJOQjs.a.call(void 0, "absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex","in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize","group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",e),...a})});se.displayName="SidebarRail";var de=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, "main",{ref:t,className:_chunkFUYXCJOQjs.a.call(void 0, "relative flex w-full flex-1 flex-col","md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow",e),...a}));de.displayName="SidebarInset";var le=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, _chunkQZ2ZUF7Qjs.a,{ref:t,"data-sidebar":"input",className:_chunkFUYXCJOQjs.a.call(void 0, "h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",e),...a}));le.displayName="SidebarInput";var ce=r.forwardRef(({className:e,showTrigger:a=!1,children:t,...n},s)=>{let{state:d,isMobile:c}=N();return _jsxruntime.jsxs.call(void 0, "div",{ref:s,"data-sidebar":"header",className:_chunkFUYXCJOQjs.a.call(void 0, "flex w-full gap-2 p-2",d==="collapsed"?"justify-center items-center":"justify-between items-start",e),...n,children:[(c||d!=="collapsed")&&_jsxruntime.jsx.call(void 0, "div",{className:"transition-all duration-200 w-full overflow-hidden",children:_jsxruntime.jsx.call(void 0, "div",{className:"whitespace-nowrap",children:t})}),a&&_jsxruntime.jsx.call(void 0, U,{})]})});ce.displayName="SidebarHeader";var pe=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, "div",{ref:t,"data-sidebar":"footer",className:_chunkFUYXCJOQjs.a.call(void 0, "flex flex-col gap-2 p-2",e),...a}));pe.displayName="SidebarFooter";var ue=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, _chunk7SOZ6MOVjs.a,{ref:t,"data-sidebar":"separator",className:_chunkFUYXCJOQjs.a.call(void 0, "mx-2 w-auto bg-sidebar-border",e),...a}));ue.displayName="SidebarSeparator";var be=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, "div",{ref:t,"data-sidebar":"content",className:_chunkFUYXCJOQjs.a.call(void 0, "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden","p-2 group-data-[collapsible=icon]:px-0",e),...a}));be.displayName="SidebarContent";var fe=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, "div",{ref:t,"data-sidebar":"group",className:_chunkFUYXCJOQjs.a.call(void 0, "relative flex w-full min-w-0 flex-col","group-data-[collapsible=icon]:p-0",e),...a}));fe.displayName="SidebarGroup";var me=r.forwardRef(({className:e,asChild:a=!1,...t},n)=>_jsxruntime.jsx.call(void 0, a?_reactslot.Slot:"div",{ref:n,"data-sidebar":"group-label",className:_chunkFUYXCJOQjs.a.call(void 0, "flex h-8 shrink-0 items-center rounded-md text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",e),...t}));me.displayName="SidebarGroupLabel";var ge=r.forwardRef(({className:e,asChild:a=!1,...t},n)=>_jsxruntime.jsx.call(void 0, a?_reactslot.Slot:"button",{ref:n,"data-sidebar":"group-action",className:_chunkFUYXCJOQjs.a.call(void 0, "absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 after:md:hidden","group-data-[collapsible=icon]:hidden",e),...t}));ge.displayName="SidebarGroupAction";var ve=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, "div",{ref:t,"data-sidebar":"group-content",className:_chunkFUYXCJOQjs.a.call(void 0, "w-full text-sm",e),...a}));ve.displayName="SidebarGroupContent";var he=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, "ul",{ref:t,"data-sidebar":"menu",className:_chunkFUYXCJOQjs.a.call(void 0, "flex w-full min-w-0 flex-col gap-1",e),...a}));he.displayName="SidebarMenu";var Re=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, "li",{ref:t,"data-sidebar":"menu-item",className:_chunkFUYXCJOQjs.a.call(void 0, "group/menu-item relative",e),...a}));Re.displayName="SidebarMenuItem";var Se=_classvarianceauthority.cva.call(void 0, "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:!p-0"}},defaultVariants:{variant:"default",size:"default"}}),xe= exports.s =r.forwardRef(({asChild:e=!1,isActive:a=!1,variant:t="default",size:n="default",tooltip:s,className:d,...c},b)=>{let l=e?_reactslot.Slot:"button",{isMobile:m,state:g}=N(),u=_jsxruntime.jsx.call(void 0, l,{ref:b,"data-sidebar":"menu-button","data-size":n,"data-active":a,className:_chunkFUYXCJOQjs.a.call(void 0, Se({variant:t,size:n}),d),...c});return s?(typeof s=="string"&&(s={children:s}),_jsxruntime.jsxs.call(void 0, _chunkC5AZO7RUjs.b,{children:[_jsxruntime.jsx.call(void 0, _chunkC5AZO7RUjs.c,{asChild:!0,children:u}),_jsxruntime.jsx.call(void 0, _chunkC5AZO7RUjs.d,{side:"right",align:"center",hidden:g!=="collapsed"||m,...s})]})):u});xe.displayName="SidebarMenuButton";var we=r.forwardRef(({className:e,asChild:a=!1,showOnHover:t=!1,...n},s)=>_jsxruntime.jsx.call(void 0, a?_reactslot.Slot:"button",{ref:s,"data-sidebar":"menu-action",className:_chunkFUYXCJOQjs.a.call(void 0, "absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 after:md:hidden","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",t&&"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0",e),...n}));we.displayName="SidebarMenuAction";var ye=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, "div",{ref:t,"data-sidebar":"menu-badge",className:_chunkFUYXCJOQjs.a.call(void 0, "pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground","peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",e),...a}));ye.displayName="SidebarMenuBadge";var Me=r.forwardRef(({className:e,showIcon:a=!1,...t},n)=>{let s=r.useMemo(()=>`${Math.floor(Math.random()*40)+50}%`,[]);return _jsxruntime.jsxs.call(void 0, "div",{ref:n,"data-sidebar":"menu-skeleton",className:_chunkFUYXCJOQjs.a.call(void 0, "flex h-8 items-center gap-2 rounded-md px-2",e),...t,children:[a&&_jsxruntime.jsx.call(void 0, _chunk5L5DM2X5js.a,{className:"size-4 rounded-md","data-sidebar":"menu-skeleton-icon"}),_jsxruntime.jsx.call(void 0, _chunk5L5DM2X5js.a,{className:"h-4 max-w-[--skeleton-width] flex-1","data-sidebar":"menu-skeleton-text",style:{"--skeleton-width":s}})]})});Me.displayName="SidebarMenuSkeleton";var Ce=r.forwardRef(({className:e,...a},t)=>_jsxruntime.jsx.call(void 0, "ul",{ref:t,"data-sidebar":"menu-sub",className:_chunkFUYXCJOQjs.a.call(void 0, "mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5","group-data-[collapsible=icon]:hidden",e),...a}));Ce.displayName="SidebarMenuSub";var Ne=r.forwardRef(({...e},a)=>_jsxruntime.jsx.call(void 0, "li",{ref:a,...e}));Ne.displayName="SidebarMenuSubItem";var Ee=r.forwardRef(({asChild:e=!1,size:a="md",isActive:t,className:n,...s},d)=>_jsxruntime.jsx.call(void 0, e?_reactslot.Slot:"a",{ref:d,"data-sidebar":"menu-sub-button","data-size":a,"data-active":t,className:_chunkFUYXCJOQjs.a.call(void 0, "flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground","data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",a==="sm"&&"text-xs",a==="md"&&"text-sm","group-data-[collapsible=icon]:hidden",n),...s}));Ee.displayName="SidebarMenuSubButton";exports.a = j; exports.b = N; exports.c = ne; exports.d = ie; exports.e = U; exports.f = se; exports.g = de; exports.h = le; exports.i = ce; exports.j = pe; exports.k = ue; exports.l = be; exports.m = fe; exports.n = me; exports.o = ge; exports.p = ve; exports.q = he; exports.r = Re; exports.s = xe; exports.t = we; exports.u = ye; exports.v = Me; exports.w = Ce; exports.x = Ne; exports.y = Ee;
|
|
3
|
+
//# sourceMappingURL=chunk-JTAAIOVV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/admin/Desktop/PROJECTS/alkimi-ui-kit/dist/chunk-JTAAIOVV.js","../src/components/sidebar.tsx","../src/hooks/use-mobile.ts"],"names":["breakpoints","useScreenSize","screenSize","setScreenSize","updateScreenSize","width","SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","useSidebar","context","SidebarProvider","defaultOpen","openProp","setOpenProp","className","style","children","props","ref","isMobile","isMd","isLg","openMobile","setOpenMobile","isFullyOpen","setIsFullyOpen","_open","_setOpen","open","setOpen","value","openState"],"mappings":"AAAA,+8BAAY;AACZ,sDAAuC,sDAAwC,sDAAoE,sDAAwC,sDAA6D,sDAAwC,sDAAwC,gHCCjT,iDACF,kEACkB,2CACJ,ICH7BA,CAAAA,CAAc,CAClB,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,IAAA,CACJ,KAAA,CAAO,IACT,CAAA,CAEO,SAASC,CAAAA,CAAAA,CAAgB,CAC9B,GAAM,CAACC,CAAAA,CAAYC,CAAa,CAAA,CAAU,CAAA,CAAA,QAAA,CAAS,CACjD,QAAA,CAAU,CAAA,CAAA,CACV,IAAA,CAAM,CAAA,CAAA,CACN,IAAA,CAAM,CAAA,CAAA,CACN,IAAA,CAAM,CAAA,CAAA,CACN,IAAA,CAAM,CAAA,CAAA,CACN,KAAA,CAAO,CAAA,CACT,CAAC,CAAA,CAED,OAAM,CAAA,CAAA,SAAA,CAAU,CAAA,CAAA,EAAM,CACpB,IAAMC,CAAAA,CAAmB,CAAA,CAAA,EAAM,CAC7B,IAAMC,CAAAA,CAAQ,MAAA,CAAO,UAAA,CACrBF,CAAAA,CAAc,CACZ,QAAA,CAAUE,CAAAA,CAAQL,CAAAA,CAAY,EAAA,CAC9B,IAAA,CAAMK,CAAAA,EAASL,CAAAA,CAAY,EAAA,CAC3B,IAAA,CAAMK,CAAAA,EAASL,CAAAA,CAAY,EAAA,CAC3B,IAAA,CAAMK,CAAAA,EAASL,CAAAA,CAAY,EAAA,CAC3B,IAAA,CAAMK,CAAAA,EAASL,CAAAA,CAAY,EAAA,CAC3B,KAAA,CAAOK,CAAAA,EAASL,CAAAA,CAAY,KAAK,CACnC,CAAC,CACH,CAAA,CAEA,OAAAI,CAAAA,CAAiB,CAAA,CACjB,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUA,CAAgB,CAAA,CAC3C,CAAA,CAAA,EAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAgB,CACpE,CAAA,CAAG,CAAC,CAAC,CAAA,CAEEF,CACT,CDyHU,+CAAA,IArIJI,EAAAA,CAAsB,eAAA,CACtBC,EAAAA,CAAyB,IAAA,CAAU,EAAA,CAAK,CAAA,CACxCC,EAAAA,CAAgB,OAAA,CAChBC,CAAAA,CAAuB,OAAA,CACvBC,EAAAA,CAAqB,UAAA,CACrBC,EAAAA,CAA4B,GAAA,CAa5BC,CAAAA,CAAuB,CAAA,CAAA,aAAA,CAA0C,IAAI,CAAA,CAE3E,SAASC,CAAAA,CAAAA,CAAa,CACpB,IAAMC,CAAAA,CAAgB,CAAA,CAAA,UAAA,CAAWF,CAAc,CAAA,CAC/C,EAAA,CAAI,CAACE,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,mDAAmD,CAAA,CAGrE,OAAOA,CACT,CAEA,IAAMC,EAAAA,CAAwB,CAAA,CAAA,UAAA,CAQ5B,CACE,CACE,WAAA,CAAAC,CAAAA,CAAc,CAAA,CAAA,CACd,IAAA,CAAMC,CAAAA,CACN,YAAA,CAAcC,CAAAA,CACd,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CACAC,CAAAA,CAAAA,EACG,CACH,GAAM,CAAE,QAAA,CAAAC,CAAAA,CAAU,IAAA,CAAAC,CAAAA,CAAM,IAAA,CAAAC,CAAK,CAAA,CAAIzB,CAAAA,CAAc,CAAA,CACzC,CAAC0B,CAAAA,CAAYC,CAAa,CAAA,CAAU,CAAA,CAAA,QAAA,CAAS,CAAA,CAAK,CAAA,CAClD,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAU,CAAA,CAAA,QAAA,CAASd,CAAW,CAAA,CAE1D,CAACe,CAAAA,CAAOC,CAAQ,CAAA,CAAU,CAAA,CAAA,QAAA,CAAShB,CAAW,CAAA,CAC9CiB,CAAAA,kBAAOhB,CAAAA,SAAYc,GAAAA,CACnBG,CAAAA,CAAgB,CAAA,CAAA,WAAA,CACnBC,CAAAA,EAAmD,CAClD,IAAMC,CAAAA,CAAY,OAAOD,CAAAA,EAAU,UAAA,CAAaA,CAAAA,CAAMF,CAAI,CAAA,CAAIE,CAAAA,CAC1DjB,CAAAA,CACFA,CAAAA,CAAYkB,CAAS,CAAA,CAErBJ,CAAAA,CAASI,CAAS,CAAA,CAGpB,QAAA,CAAS,MAAA,CAAS,CAAA,EAAA","file":"/Users/admin/Desktop/PROJECTS/alkimi-ui-kit/dist/chunk-JTAAIOVV.js","sourcesContent":[null,"\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeft, X, Menu } from \"lucide-react\"\n\nimport { useScreenSize } from \"@/hooks/use-mobile\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/button\"\nimport { Input } from \"@/components/input\"\nimport { Separator } from \"@/components/separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/sheet\"\nimport { Skeleton } from \"@/components/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"23rem\"\nconst SIDEBAR_WIDTH_ICON = \"4.625rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n isOpen: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n setIsFullyOpen: (open: boolean) => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nconst SidebarProvider = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n }\n>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n },\n ref\n ) => {\n const { isMobile, isMd, isLg } = useScreenSize()\n const [openMobile, setOpenMobile] = React.useState(false)\n const [isFullyOpen, setIsFullyOpen] = React.useState(defaultOpen)\n\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Auto-collapse sidebar when transitioning INTO the medium range (576px - 986px)\n const prevScreenSizeRef = React.useRef({ isMd, isLg })\n React.useEffect(() => {\n const wasInMediumRange =\n prevScreenSizeRef.current.isMd && !prevScreenSizeRef.current.isLg\n const isNowInMediumRange = isMd && !isLg\n\n // Only collapse if we just entered the medium range and sidebar is open\n if (!wasInMediumRange && isNowInMediumRange && open) {\n setOpen(false)\n }\n\n prevScreenSizeRef.current = { isMd, isLg }\n }, [isMd, isLg, open, setOpen])\n\n const toggleSidebar = React.useCallback(() => {\n return isMobile\n ? setOpenMobile((open) => !open)\n : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n isOpen: isMobile ? openMobile : isFullyOpen,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n setIsFullyOpen,\n }),\n [\n state,\n isFullyOpen,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n setIsFullyOpen,\n ]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n }\n)\nSidebarProvider.displayName = \"SidebarProvider\"\n\nconst Sidebar = React.forwardRef<\n HTMLElement,\n React.ComponentProps<\"aside\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n }\n>(\n (\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n const { isMobile, state, openMobile, setOpenMobile, setIsFullyOpen } =\n useSidebar()\n const sidebarRef = React.useRef<HTMLDivElement>(null)\n const isFirstRenderRef = React.useRef(true)\n\n // Track when the sidebar animation completes\n React.useEffect(() => {\n const sidebar = sidebarRef.current\n if (!sidebar || isMobile) return\n\n // On first render, set isFullyOpen immediately without waiting for animation\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false\n setIsFullyOpen(state === \"expanded\")\n return\n }\n\n const handleTransitionEnd = (event: TransitionEvent) => {\n // Only respond to transitions on the sidebar itself, not children\n if (event.target !== sidebar) return\n\n // Check if we're transitioning width, left, or right properties\n if (\n event.propertyName === \"left\" ||\n event.propertyName === \"right\" ||\n event.propertyName === \"width\"\n ) {\n setIsFullyOpen(state === \"expanded\")\n }\n }\n\n sidebar.addEventListener(\"transitionend\", handleTransitionEnd)\n return () =>\n sidebar.removeEventListener(\"transitionend\", handleTransitionEnd)\n }, [state, isMobile, setIsFullyOpen])\n\n if (collapsible === \"none\") {\n return (\n <aside\n className={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n </aside>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n style={\n {\n width: SIDEBAR_WIDTH_MOBILE,\n maxWidth: SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <aside\n ref={ref}\n className=\"group peer hidden text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n >\n <div\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n ref={sidebarRef}\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n className=\"flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow\"\n >\n <div className=\"m-2.5 rounded-2xl border bg-sidebar border-border h-full\">\n {children}\n </div>\n </div>\n </div>\n </aside>\n )\n }\n)\nSidebar.displayName = \"Sidebar\"\n\nconst SidebarTrigger = React.forwardRef<\n React.ElementRef<typeof Button>,\n React.ComponentProps<typeof Button>\n>(({ className, onClick, ...props }, ref) => {\n const { toggleSidebar, isMobile, openMobile } = useSidebar()\n\n return (\n <Button\n ref={ref}\n data-sidebar=\"trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"h-7 w-7 bg-transparent hover:bg-transparent\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n {isMobile ? (\n openMobile ? (\n <span className=\"rounded-full border border-border p-2\">\n <X size={16} />\n </span>\n ) : (\n <span className=\"rounded-full border border-border p-2\">\n <Menu size={16} />\n </span>\n )\n ) : (\n <PanelLeft size={16} />\n )}\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n})\nSidebarTrigger.displayName = \"SidebarTrigger\"\n\nconst SidebarRail = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\">\n>(({ className, ...props }, ref) => {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarRail.displayName = \"SidebarRail\"\n\nconst SidebarInset = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"main\">\n>(({ className, ...props }, ref) => {\n return (\n <main\n ref={ref}\n className={cn(\n \"relative flex w-full flex-1 flex-col\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarInset.displayName = \"SidebarInset\"\n\nconst SidebarInput = React.forwardRef<\n React.ElementRef<typeof Input>,\n React.ComponentProps<typeof Input>\n>(({ className, ...props }, ref) => {\n return (\n <Input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\n \"h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarInput.displayName = \"SidebarInput\"\n\nconst SidebarHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n showTrigger?: boolean\n }\n>(({ className, showTrigger = false, children, ...props }, ref) => {\n const { state, isMobile } = useSidebar()\n\n return (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn(\n \"flex w-full gap-2 p-2\",\n state === \"collapsed\"\n ? \"justify-center items-center\"\n : \"justify-between items-start\",\n className\n )}\n {...props}\n >\n {(isMobile || state !== \"collapsed\") && (\n <div className=\"transition-all duration-200 w-full overflow-hidden\">\n <div className=\"whitespace-nowrap\">{children}</div>\n </div>\n )}\n\n {showTrigger && <SidebarTrigger />}\n </div>\n )\n})\nSidebarHeader.displayName = \"SidebarHeader\"\n\nconst SidebarFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n})\nSidebarFooter.displayName = \"SidebarFooter\"\n\nconst SidebarSeparator = React.forwardRef<\n React.ElementRef<typeof Separator>,\n React.ComponentProps<typeof Separator>\n>(({ className, ...props }, ref) => {\n return (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n )\n})\nSidebarSeparator.displayName = \"SidebarSeparator\"\n\nconst SidebarContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n \"p-2 group-data-[collapsible=icon]:px-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarContent.displayName = \"SidebarContent\"\n\nconst SidebarGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn(\n \"relative flex w-full min-w-0 flex-col\",\n \"group-data-[collapsible=icon]:p-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarGroup.displayName = \"SidebarGroup\"\n\nconst SidebarGroupLabel = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n className={cn(\n \"flex h-8 shrink-0 items-center rounded-md text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarGroupLabel.displayName = \"SidebarGroupLabel\"\n\nconst SidebarGroupAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 after:md:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarGroupAction.displayName = \"SidebarGroupAction\"\n\nconst SidebarGroupContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n))\nSidebarGroupContent.displayName = \"SidebarGroupContent\"\n\nconst SidebarMenu = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n))\nSidebarMenu.displayName = \"SidebarMenu\"\n\nconst SidebarMenuItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n))\nSidebarMenuItem.displayName = \"SidebarMenuItem\"\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:!p-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n } & VariantProps<typeof sidebarMenuButtonVariants>\n>(\n (\n {\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n }\n)\nSidebarMenuButton.displayName = \"SidebarMenuButton\"\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n }\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 after:md:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarMenuAction.displayName = \"SidebarMenuAction\"\n\nconst SidebarMenuBadge = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n))\nSidebarMenuBadge.displayName = \"SidebarMenuBadge\"\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-[--skeleton-width] flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n})\nSidebarMenuSkeleton.displayName = \"SidebarMenuSkeleton\"\n\nconst SidebarMenuSub = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n))\nSidebarMenuSub.displayName = \"SidebarMenuSub\"\n\nconst SidebarMenuSubItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ ...props }, ref) => <li ref={ref} {...props} />)\nSidebarMenuSubItem.displayName = \"SidebarMenuSubItem\"\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n }\n>(({ asChild = false, size = \"md\", isActive, className, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n})\nSidebarMenuSubButton.displayName = \"SidebarMenuSubButton\"\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","import * as React from \"react\"\n\nconst breakpoints = {\n sm: 448,\n md: 576,\n lg: 986,\n xl: 1280,\n \"2xl\": 1400,\n}\n\nexport function useScreenSize() {\n const [screenSize, setScreenSize] = React.useState({\n isMobile: false,\n isSm: false,\n isMd: false,\n isLg: false,\n isXl: false,\n is2xl: false,\n })\n\n React.useEffect(() => {\n const updateScreenSize = () => {\n const width = window.innerWidth\n setScreenSize({\n isMobile: width < breakpoints.md,\n isSm: width >= breakpoints.sm,\n isMd: width >= breakpoints.md,\n isLg: width >= breakpoints.lg,\n isXl: width >= breakpoints.xl,\n is2xl: width >= breakpoints[\"2xl\"],\n })\n }\n\n updateScreenSize()\n window.addEventListener(\"resize\", updateScreenSize)\n return () => window.removeEventListener(\"resize\", updateScreenSize)\n }, [])\n\n return screenSize\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const buttonVariants: (props?: ({
|
|
6
|
-
variant?: "default" | "
|
|
6
|
+
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
|
|
7
7
|
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const buttonVariants: (props?: ({
|
|
6
|
-
variant?: "default" | "
|
|
6
|
+
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
|
|
7
7
|
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
@@ -9,12 +9,13 @@ import '@radix-ui/react-tooltip';
|
|
|
9
9
|
|
|
10
10
|
type SidebarContextProps = {
|
|
11
11
|
state: "expanded" | "collapsed";
|
|
12
|
-
|
|
12
|
+
isOpen: boolean;
|
|
13
13
|
setOpen: (open: boolean) => void;
|
|
14
14
|
openMobile: boolean;
|
|
15
15
|
setOpenMobile: (open: boolean) => void;
|
|
16
16
|
isMobile: boolean;
|
|
17
17
|
toggleSidebar: () => void;
|
|
18
|
+
setIsFullyOpen: (open: boolean) => void;
|
|
18
19
|
};
|
|
19
20
|
declare function useSidebar(): SidebarContextProps;
|
|
20
21
|
declare const SidebarProvider: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
|
|
@@ -22,11 +23,11 @@ declare const SidebarProvider: React.ForwardRefExoticComponent<Omit<React.ClassA
|
|
|
22
23
|
open?: boolean;
|
|
23
24
|
onOpenChange?: (open: boolean) => void;
|
|
24
25
|
}, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
-
declare const Sidebar: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<
|
|
26
|
+
declare const Sidebar: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLElement> & React.HTMLAttributes<HTMLElement> & {
|
|
26
27
|
side?: "left" | "right";
|
|
27
28
|
variant?: "sidebar" | "floating" | "inset";
|
|
28
29
|
collapsible?: "offcanvas" | "icon" | "none";
|
|
29
|
-
}, "ref"> & React.RefAttributes<
|
|
30
|
+
}, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
30
31
|
declare const SidebarTrigger: React.ForwardRefExoticComponent<Omit<ButtonProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
31
32
|
declare const SidebarRail: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
32
33
|
declare const SidebarInset: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -9,12 +9,13 @@ import '@radix-ui/react-tooltip';
|
|
|
9
9
|
|
|
10
10
|
type SidebarContextProps = {
|
|
11
11
|
state: "expanded" | "collapsed";
|
|
12
|
-
|
|
12
|
+
isOpen: boolean;
|
|
13
13
|
setOpen: (open: boolean) => void;
|
|
14
14
|
openMobile: boolean;
|
|
15
15
|
setOpenMobile: (open: boolean) => void;
|
|
16
16
|
isMobile: boolean;
|
|
17
17
|
toggleSidebar: () => void;
|
|
18
|
+
setIsFullyOpen: (open: boolean) => void;
|
|
18
19
|
};
|
|
19
20
|
declare function useSidebar(): SidebarContextProps;
|
|
20
21
|
declare const SidebarProvider: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
|
|
@@ -22,11 +23,11 @@ declare const SidebarProvider: React.ForwardRefExoticComponent<Omit<React.ClassA
|
|
|
22
23
|
open?: boolean;
|
|
23
24
|
onOpenChange?: (open: boolean) => void;
|
|
24
25
|
}, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
-
declare const Sidebar: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<
|
|
26
|
+
declare const Sidebar: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLElement> & React.HTMLAttributes<HTMLElement> & {
|
|
26
27
|
side?: "left" | "right";
|
|
27
28
|
variant?: "sidebar" | "floating" | "inset";
|
|
28
29
|
collapsible?: "offcanvas" | "icon" | "none";
|
|
29
|
-
}, "ref"> & React.RefAttributes<
|
|
30
|
+
}, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
30
31
|
declare const SidebarTrigger: React.ForwardRefExoticComponent<Omit<ButtonProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
31
32
|
declare const SidebarRail: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
32
33
|
declare const SidebarInset: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
-
"use client";var
|
|
2
|
+
"use client";var _chunkJTAAIOVVjs = require('../chunk-JTAAIOVV.js');require('../chunk-QZ2ZUF7Q.js');require('../chunk-7SOZ6MOV.js');require('../chunk-NKYU43T6.js');require('../chunk-5L5DM2X5.js');require('../chunk-C5AZO7RU.js');require('../chunk-54IB54OZ.js');require('../chunk-FUYXCJOQ.js');require('../chunk-XYO4VLMF.js');exports.Sidebar = _chunkJTAAIOVVjs.d; exports.SidebarContent = _chunkJTAAIOVVjs.l; exports.SidebarFooter = _chunkJTAAIOVVjs.j; exports.SidebarGroup = _chunkJTAAIOVVjs.m; exports.SidebarGroupAction = _chunkJTAAIOVVjs.o; exports.SidebarGroupContent = _chunkJTAAIOVVjs.p; exports.SidebarGroupLabel = _chunkJTAAIOVVjs.n; exports.SidebarHeader = _chunkJTAAIOVVjs.i; exports.SidebarInput = _chunkJTAAIOVVjs.h; exports.SidebarInset = _chunkJTAAIOVVjs.g; exports.SidebarMenu = _chunkJTAAIOVVjs.q; exports.SidebarMenuAction = _chunkJTAAIOVVjs.t; exports.SidebarMenuBadge = _chunkJTAAIOVVjs.u; exports.SidebarMenuButton = _chunkJTAAIOVVjs.s; exports.SidebarMenuItem = _chunkJTAAIOVVjs.r; exports.SidebarMenuSkeleton = _chunkJTAAIOVVjs.v; exports.SidebarMenuSub = _chunkJTAAIOVVjs.w; exports.SidebarMenuSubButton = _chunkJTAAIOVVjs.y; exports.SidebarMenuSubItem = _chunkJTAAIOVVjs.x; exports.SidebarProvider = _chunkJTAAIOVVjs.c; exports.SidebarRail = _chunkJTAAIOVVjs.f; exports.SidebarSeparator = _chunkJTAAIOVVjs.k; exports.SidebarTrigger = _chunkJTAAIOVVjs.e; exports.useSidebar = _chunkJTAAIOVVjs.b;
|
|
3
3
|
//# sourceMappingURL=sidebar.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
"use client";import{b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h,j as i,k as j,l as k,m as l,n as m,o as n,p as o,q as p,r as q,s as r,t as s,u as t,v as u,w as v,x as w,y as x}from"../chunk-
|
|
2
|
+
"use client";import{b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h,j as i,k as j,l as k,m as l,n as m,o as n,p as o,q as p,r as q,s as r,t as s,u as t,v as u,w as v,x as w,y as x}from"../chunk-4GA74O7R.mjs";import"../chunk-6BEVEBGO.mjs";import"../chunk-YBV4CPVD.mjs";import"../chunk-73BUNE7H.mjs";import"../chunk-CNRZOMR4.mjs";import"../chunk-PY6WBMT2.mjs";import"../chunk-HQUUCCZL.mjs";import"../chunk-S5TKCF6T.mjs";import"../chunk-KPAOPUY2.mjs";export{c as Sidebar,k as SidebarContent,i as SidebarFooter,l as SidebarGroup,n as SidebarGroupAction,o as SidebarGroupContent,m as SidebarGroupLabel,h as SidebarHeader,g as SidebarInput,f as SidebarInset,p as SidebarMenu,s as SidebarMenuAction,t as SidebarMenuBadge,r as SidebarMenuButton,q as SidebarMenuItem,u as SidebarMenuSkeleton,v as SidebarMenuSub,x as SidebarMenuSubButton,w as SidebarMenuSubItem,b as SidebarProvider,e as SidebarRail,j as SidebarSeparator,d as SidebarTrigger,a as useSidebar};
|
|
3
3
|
//# sourceMappingURL=sidebar.mjs.map
|