@jarllyng/nostromo 3.11.0 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +1 -1
  2. package/dist/chunk-5N5KJBMP.js +3 -0
  3. package/dist/chunk-5N5KJBMP.js.map +1 -0
  4. package/dist/chunk-75OZKMEA.cjs +3 -0
  5. package/dist/chunk-75OZKMEA.cjs.map +1 -0
  6. package/dist/chunk-DB6MHAU3.cjs +3 -0
  7. package/dist/chunk-DB6MHAU3.cjs.map +1 -0
  8. package/dist/chunk-ERGAJKFH.cjs +3 -0
  9. package/dist/chunk-ERGAJKFH.cjs.map +1 -0
  10. package/dist/chunk-PLEQSJHY.js +3 -0
  11. package/dist/chunk-PLEQSJHY.js.map +1 -0
  12. package/dist/chunk-QESG3HCL.js +3 -0
  13. package/dist/chunk-QESG3HCL.js.map +1 -0
  14. package/dist/chunk-QQTI6OI3.js +3 -0
  15. package/dist/chunk-QQTI6OI3.js.map +1 -0
  16. package/dist/chunk-RKSTEJKG.cjs +3 -0
  17. package/dist/chunk-RKSTEJKG.cjs.map +1 -0
  18. package/dist/components/core/alert.d.cts +1 -1
  19. package/dist/components/core/alert.d.ts +1 -1
  20. package/dist/components/core/badge.d.cts +1 -1
  21. package/dist/components/core/badge.d.ts +1 -1
  22. package/dist/components/core/breadcrumb.d.cts +1 -1
  23. package/dist/components/core/breadcrumb.d.ts +1 -1
  24. package/dist/components/core/button.d.cts +2 -2
  25. package/dist/components/core/button.d.ts +2 -2
  26. package/dist/components/core/checkbox.d.cts +1 -1
  27. package/dist/components/core/checkbox.d.ts +1 -1
  28. package/dist/components/core/command.cjs +3 -0
  29. package/dist/components/core/command.cjs.map +1 -0
  30. package/dist/components/core/command.d.cts +169 -0
  31. package/dist/components/core/command.d.ts +169 -0
  32. package/dist/components/core/command.js +3 -0
  33. package/dist/components/core/command.js.map +1 -0
  34. package/dist/components/core/dialog.cjs +1 -1
  35. package/dist/components/core/dialog.d.cts +10 -1
  36. package/dist/components/core/dialog.d.ts +10 -1
  37. package/dist/components/core/dialog.js +1 -1
  38. package/dist/components/core/drawer.cjs +3 -0
  39. package/dist/components/core/drawer.cjs.map +1 -0
  40. package/dist/components/core/drawer.d.cts +70 -0
  41. package/dist/components/core/drawer.d.ts +70 -0
  42. package/dist/components/core/drawer.js +3 -0
  43. package/dist/components/core/drawer.js.map +1 -0
  44. package/dist/components/core/error-message.d.cts +1 -1
  45. package/dist/components/core/error-message.d.ts +1 -1
  46. package/dist/components/core/form.cjs +1 -1
  47. package/dist/components/core/form.js +1 -1
  48. package/dist/components/core/helper-text.d.cts +1 -1
  49. package/dist/components/core/helper-text.d.ts +1 -1
  50. package/dist/components/core/icon.d.cts +2 -2
  51. package/dist/components/core/icon.d.ts +2 -2
  52. package/dist/components/core/input.d.cts +1 -1
  53. package/dist/components/core/input.d.ts +1 -1
  54. package/dist/components/core/label.d.cts +1 -1
  55. package/dist/components/core/label.d.ts +1 -1
  56. package/dist/components/core/pagination.d.cts +1 -1
  57. package/dist/components/core/pagination.d.ts +1 -1
  58. package/dist/components/core/progress.d.cts +3 -3
  59. package/dist/components/core/progress.d.ts +3 -3
  60. package/dist/components/core/radio-group.d.cts +1 -1
  61. package/dist/components/core/radio-group.d.ts +1 -1
  62. package/dist/components/core/resizable.d.cts +5 -5
  63. package/dist/components/core/resizable.d.ts +5 -5
  64. package/dist/components/core/select.d.cts +3 -3
  65. package/dist/components/core/select.d.ts +3 -3
  66. package/dist/components/core/sidebar.cjs +3 -0
  67. package/dist/components/core/sidebar.cjs.map +1 -0
  68. package/dist/components/core/sidebar.d.cts +131 -0
  69. package/dist/components/core/sidebar.d.ts +131 -0
  70. package/dist/components/core/sidebar.js +3 -0
  71. package/dist/components/core/sidebar.js.map +1 -0
  72. package/dist/components/core/skeleton.d.cts +1 -1
  73. package/dist/components/core/skeleton.d.ts +1 -1
  74. package/dist/components/core/switch.d.cts +1 -1
  75. package/dist/components/core/switch.d.ts +1 -1
  76. package/dist/components/core/textarea.d.cts +1 -1
  77. package/dist/components/core/textarea.d.ts +1 -1
  78. package/dist/components/core/toast.d.cts +2 -2
  79. package/dist/components/core/toast.d.ts +2 -2
  80. package/dist/components/core/tooltip.d.cts +2 -2
  81. package/dist/components/core/tooltip.d.ts +2 -2
  82. package/dist/components/marketing/features.d.cts +2 -2
  83. package/dist/components/marketing/features.d.ts +2 -2
  84. package/dist/components/marketing/gallery.d.cts +1 -1
  85. package/dist/components/marketing/gallery.d.ts +1 -1
  86. package/dist/components/marketing/pricing.d.cts +1 -1
  87. package/dist/components/marketing/pricing.d.ts +1 -1
  88. package/dist/components/marketing/testimonials.d.cts +1 -1
  89. package/dist/components/marketing/testimonials.d.ts +1 -1
  90. package/dist/index.cjs +1 -1
  91. package/dist/index.cjs.map +1 -1
  92. package/dist/index.css +1 -1
  93. package/dist/index.css.map +1 -1
  94. package/dist/index.d.cts +28 -1
  95. package/dist/index.d.ts +28 -1
  96. package/dist/index.js +1 -1
  97. package/dist/index.js.map +1 -1
  98. package/dist/themes/lv-426.css +22 -0
  99. package/dist/themes/mother.css +22 -0
  100. package/dist/themes/nostromo.css +22 -0
  101. package/dist/themes/sulaco.css +22 -0
  102. package/dist/tokens.css +12 -0
  103. package/package.json +46 -2
  104. package/dist/chunk-MY2KMTUS.js +0 -3
  105. package/dist/chunk-MY2KMTUS.js.map +0 -1
  106. package/dist/chunk-NBX6FKCA.cjs +0 -3
  107. package/dist/chunk-NBX6FKCA.cjs.map +0 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Accessible React component library with CSS-first Tailwind v4 theming.
4
4
 
5
- 53 components, 47 for products and apps and 6 for marketing pages, themed entirely
5
+ 56 components, 50 for products and apps and 6 for marketing pages, themed entirely
6
6
  through CSS custom properties. No `tailwind.config.js`, no plugin to register.
7
7
 
8
8
  The name comes from the _USCSS Nostromo_ in **Alien** (1979).
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {cva}from'class-variance-authority';var w=cva("fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background shadow-lg duration-300 transition-all",{variants:{variant:{default:"border-border shadow-lg hover:shadow-xl",elevated:"border-border shadow-xl hover:shadow-2xl",outlined:"border-2 border-border shadow-md hover:border-primary hover:shadow-lg",filled:"border-border bg-muted shadow-md hover:shadow-lg",destructive:"border-error-200 bg-error-50 shadow-lg hover:shadow-xl"},size:{default:"max-w-lg sm:max-w-xl md:max-w-2xl lg:max-w-4xl",sm:"max-w-sm sm:max-w-md",lg:"max-w-2xl sm:max-w-3xl md:max-w-4xl lg:max-w-5xl",xl:"max-w-4xl sm:max-w-5xl md:max-w-6xl lg:max-w-7xl",full:"max-w-[95vw] sm:max-w-[90vw]"},animation:{default:"animate-in fade-in-0 zoom-in-95 duration-300",slide:"animate-in slide-in-from-bottom-4 duration-300",scale:"animate-in zoom-in-95 duration-300",none:""}},defaultVariants:{variant:"default",size:"default",animation:"default"}}),D=cva("fixed inset-0 z-40 transition-all duration-300",{variants:{variant:{default:"bg-black/50 backdrop-blur-sm",subtle:"bg-black/30 backdrop-blur-none",strong:"bg-black/70 backdrop-blur-md",colored:"bg-brand-500/20 backdrop-blur-sm"}},defaultVariants:{variant:"default"}}),x=e.createContext(null);function p(a){let t=e.useContext(x);if(!t)throw new Error(`${a} must be used inside <Dialog>`);return t}var H=({open:a$1,defaultOpen:t=false,onOpenChange:o,children:l,backdropVariant:i="default"})=>{let s=e.useId(),[g,n]=e.useState(t),r=a$1!==void 0,d=r?a$1:g,c=e.useCallback(u=>{r||n(u),o?.(u);},[r,o]);e.useEffect(()=>{if(!d)return;let u=v=>{v.key==="Escape"&&c(false);};return document.addEventListener("keydown",u),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",u),document.body.style.overflow="unset";}},[d,c]);let f=e.useMemo(()=>({open:d,setOpen:c,titleId:s}),[d,c,s]);return e.createElement(x.Provider,{value:f},l,d&&e.createElement("div",{className:a(D({variant:i})),onClick:()=>c(false),"aria-hidden":"true"}))},h=e.forwardRef(({asChild:a,children:t,onClick:o,...l},i)=>{let{open:s,setOpen:g}=p("DialogTrigger"),n=r=>{o?.(r),r.defaultPrevented||g(true);};return a&&e.isValidElement(t)?e.cloneElement(t,{onClick:n,"aria-expanded":s}):e.createElement("button",{ref:i,type:"button","aria-expanded":s,"aria-haspopup":"dialog",onClick:n,...l},t)});h.displayName="DialogTrigger";var R=e.forwardRef(({className:a$1,children:t,onClose:o,variant:l,size:i,animation:s,showCloseButton:g=true,...n},r)=>{let{open:d,setOpen:c,titleId:f}=p("DialogContent");if(!d)return null;let u=n["aria-label"]!==void 0||n["aria-labelledby"]!==void 0;return e.createElement("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none"},e.createElement("div",{ref:r,role:"dialog","aria-modal":"true","aria-labelledby":u?void 0:f,className:a(w({variant:l,size:i,animation:s}),"pointer-events-auto p-4 sm:p-6 sm:rounded-lg",a$1),...n},t,g&&e.createElement("button",{type:"button",className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",onClick:o??(()=>c(false))},e.createElement("span",{className:"sr-only"},"Close"),e.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})))))});R.displayName="DialogContent";var y=e.forwardRef(({className:a$1,...t},o)=>e.createElement("div",{ref:o,className:a("flex flex-col space-y-1.5 text-center sm:text-left",a$1),...t}));y.displayName="DialogHeader";var k=e.forwardRef(({className:a$1,id:t,...o},l)=>{let{titleId:i}=p("DialogTitle");return e.createElement("h2",{ref:l,id:t??i,className:a("text-lg font-semibold leading-none tracking-tight",a$1),...o})});k.displayName="DialogTitle";var C=e.forwardRef(({className:a$1,...t},o)=>e.createElement("p",{ref:o,className:a("text-sm text-muted-foreground",a$1),...t}));C.displayName="DialogDescription";export{w as a,D as b,H as c,h as d,R as e,y as f,k as g,C as h};//# sourceMappingURL=chunk-5N5KJBMP.js.map
3
+ //# sourceMappingURL=chunk-5N5KJBMP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/dialog.tsx"],"names":["dialogVariants","cva","backdropVariants","DialogContext","useDialogContext","component","context","Dialog","controlledOpen","defaultOpen","onOpenChange","children","backdropVariant","titleId","uncontrolledOpen","setUncontrolledOpen","isControlled","open","setOpen","next","handleEscape","e","cn","DialogTrigger","asChild","onClick","props","ref","handleClick","event","DialogContent","className","onClose","variant","size","animation","showCloseButton","hasOwnLabel","DialogHeader","DialogTitle","id","DialogDescription"],"mappings":"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","file":"chunk-5N5KJBMP.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst dialogVariants = cva(\n \"fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background shadow-lg duration-300 transition-all\",\n {\n variants: {\n variant: {\n default: \"border-border shadow-lg hover:shadow-xl\",\n elevated: \"border-border shadow-xl hover:shadow-2xl\",\n outlined:\n \"border-2 border-border shadow-md hover:border-primary hover:shadow-lg\",\n filled: \"border-border bg-muted shadow-md hover:shadow-lg\",\n destructive: \"border-error-200 bg-error-50 shadow-lg hover:shadow-xl\",\n },\n size: {\n default: \"max-w-lg sm:max-w-xl md:max-w-2xl lg:max-w-4xl\",\n sm: \"max-w-sm sm:max-w-md\",\n lg: \"max-w-2xl sm:max-w-3xl md:max-w-4xl lg:max-w-5xl\",\n xl: \"max-w-4xl sm:max-w-5xl md:max-w-6xl lg:max-w-7xl\",\n full: \"max-w-[95vw] sm:max-w-[90vw]\",\n },\n animation: {\n default: \"animate-in fade-in-0 zoom-in-95 duration-300\",\n slide: \"animate-in slide-in-from-bottom-4 duration-300\",\n scale: \"animate-in zoom-in-95 duration-300\",\n none: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n animation: \"default\",\n },\n },\n);\n\nconst backdropVariants = cva(\"fixed inset-0 z-40 transition-all duration-300\", {\n variants: {\n variant: {\n default: \"bg-black/50 backdrop-blur-sm\",\n subtle: \"bg-black/30 backdrop-blur-none\",\n strong: \"bg-black/70 backdrop-blur-md\",\n colored: \"bg-brand-500/20 backdrop-blur-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport interface DialogProps {\n open?: boolean;\n /** Uncontrolled initial state, for when a DialogTrigger owns the opening. */\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n backdropVariant?: VariantProps<typeof backdropVariants>[\"variant\"];\n}\n\nexport interface DialogContentProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof dialogVariants> {\n onClose?: () => void;\n /**\n * Draw the corner close button.\n *\n * Defaults to true. Turn it off when the content owns its own top edge - the\n * button is absolutely positioned at the top right, so over a search field or\n * a toolbar it lands on top of the content. `CommandDialog` is the case that\n * needed it. Escape and the backdrop still close the dialog either way.\n */\n showCloseButton?: boolean;\n}\n\nexport interface DialogHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport interface DialogTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\n\nexport interface DialogDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n /**\n * Ties `DialogContent`'s `aria-labelledby` to whatever `DialogTitle` renders.\n * Adding `role=\"dialog\"` without this fails axe's aria-dialog-name rule - the\n * role only means something to a screen reader if the node has a name.\n */\n titleId: string;\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null);\n\nfunction useDialogContext(component: string): DialogContextValue {\n const context = React.useContext(DialogContext);\n if (!context) {\n throw new Error(`${component} must be used inside <Dialog>`);\n }\n return context;\n}\n\n/**\n * Dialog root.\n *\n * Renders its children whether or not it is open, and puts the open state on\n * context. It used to return `null` while closed and draw the overlay itself,\n * which made `DialogTrigger` impossible: a trigger nested in the dialog was\n * unmounted exactly when you needed to click it. The overlay moved to\n * `DialogContent`, which is what actually knows it is being shown.\n *\n * Works controlled (`open` + `onOpenChange`) or uncontrolled (`defaultOpen`).\n */\nconst Dialog: React.FC<DialogProps> = ({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n children,\n backdropVariant = \"default\",\n}) => {\n const titleId = React.useId();\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n React.useEffect(() => {\n if (!open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"unset\";\n };\n }, [open, setOpen]);\n\n const context = React.useMemo(\n () => ({ open, setOpen, titleId }),\n [open, setOpen, titleId],\n );\n\n return (\n <DialogContext.Provider value={context}>\n {children}\n {open && (\n <div\n className={cn(backdropVariants({ variant: backdropVariant }))}\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n />\n )}\n </DialogContext.Provider>\n );\n};\n\nexport interface DialogTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Render the child element instead of a button, forwarding the click. */\n asChild?: boolean;\n}\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n ({ asChild, children, onClick, ...props }, ref) => {\n const { open, setOpen } = useDialogContext(\"DialogTrigger\");\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpen(true);\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n \"aria-expanded\"?: boolean;\n }>,\n { onClick: handleClick, \"aria-expanded\": open },\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\n\nDialogTrigger.displayName = \"DialogTrigger\";\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n (\n {\n className,\n children,\n onClose,\n variant,\n size,\n animation,\n showCloseButton = true,\n ...props\n },\n ref,\n ) => {\n const { open, setOpen, titleId } = useDialogContext(\"DialogContent\");\n\n if (!open) return null;\n\n // A caller-supplied name wins; otherwise point at the DialogTitle.\n const hasOwnLabel =\n props[\"aria-label\"] !== undefined ||\n props[\"aria-labelledby\"] !== undefined;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none\">\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={hasOwnLabel ? undefined : titleId}\n className={cn(\n dialogVariants({ variant, size, animation }),\n \"pointer-events-auto p-4 sm:p-6 sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <button\n type=\"button\"\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n onClick={onClose ?? (() => setOpen(false))}\n >\n <span className=\"sr-only\">Close</span>\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n </div>\n );\n },\n);\nDialogContent.displayName = \"DialogContent\";\n\nconst DialogHeader = React.forwardRef<HTMLDivElement, DialogHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n ),\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(\n ({ className, id, ...props }, ref) => {\n const { titleId } = useDialogContext(\"DialogTitle\");\n\n return (\n <h2\n ref={ref}\n // Falls back to the shared id so DialogContent's aria-labelledby resolves.\n id={id ?? titleId}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nDialogTitle.displayName = \"DialogTitle\";\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n dialogVariants,\n backdropVariants,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),vaul=require('vaul');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var R=vaul.Drawer.Root,b=vaul.Drawer.Trigger,w=vaul.Drawer.Portal,g=vaul.Drawer.Close,d=e__namespace.forwardRef(({className:t,...r},a)=>e__namespace.createElement(vaul.Drawer.Handle,{ref:a,className:chunkITRGJNWL_cjs.a("mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted",t),...r}));d.displayName="DrawerHandle";var n=e__namespace.forwardRef(({className:t,...r},a)=>e__namespace.createElement(vaul.Drawer.Overlay,{ref:a,className:chunkITRGJNWL_cjs.a("fixed inset-0 z-40 bg-black/50 backdrop-blur-sm","data-[state=open]:animate-in data-[state=open]:fade-in-0","data-[state=closed]:animate-out data-[state=closed]:fade-out-0",t),...r}));n.displayName="DrawerOverlay";var m=e__namespace.forwardRef(({className:t,children:r,withHandle:a=true,...l},c)=>e__namespace.createElement(w,null,e__namespace.createElement(n,null),e__namespace.createElement(vaul.Drawer.Content,{ref:c,className:chunkITRGJNWL_cjs.a("group/drawer-content fixed z-50 flex h-auto flex-col border-border bg-background","data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b","data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t","data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm","data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm",t),...l},a&&e__namespace.createElement(d,{className:"hidden group-data-[vaul-drawer-direction=bottom]/drawer-content:block group-data-[vaul-drawer-direction=top]/drawer-content:mb-4 group-data-[vaul-drawer-direction=top]/drawer-content:mt-0 group-data-[vaul-drawer-direction=top]/drawer-content:block"}),r)));m.displayName="DrawerContent";var s=e__namespace.forwardRef(({className:t,...r},a)=>e__namespace.createElement("div",{ref:a,className:chunkITRGJNWL_cjs.a("flex flex-col gap-1.5 p-4","group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center","md:text-left",t),...r}));s.displayName="DrawerHeader";var f=e__namespace.forwardRef(({className:t,...r},a)=>e__namespace.createElement("div",{ref:a,className:chunkITRGJNWL_cjs.a("mt-auto flex flex-col gap-2 p-4",t),...r}));f.displayName="DrawerFooter";var p=e__namespace.forwardRef(({className:t,...r},a)=>e__namespace.createElement(vaul.Drawer.Title,{ref:a,className:chunkITRGJNWL_cjs.a("text-lg font-semibold leading-none tracking-tight text-foreground",t),...r}));p.displayName="DrawerTitle";var u=e__namespace.forwardRef(({className:t,...r},a)=>e__namespace.createElement(vaul.Drawer.Description,{ref:a,className:chunkITRGJNWL_cjs.a("text-sm text-muted-foreground",t),...r}));u.displayName="DrawerDescription";var x=vaul.Drawer.NestedRoot;exports.a=R;exports.b=b;exports.c=w;exports.d=g;exports.e=d;exports.f=n;exports.g=m;exports.h=s;exports.i=f;exports.j=p;exports.k=u;exports.l=x;//# sourceMappingURL=chunk-75OZKMEA.cjs.map
3
+ //# sourceMappingURL=chunk-75OZKMEA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/drawer.tsx"],"names":["Drawer","DrawerPrimitive","DrawerTrigger","DrawerPortal","DrawerClose","DrawerHandle","e","className","props","ref","cn","DrawerOverlay","DrawerContent","children","withHandle","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription","DrawerNested"],"mappings":"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","file":"chunk-75OZKMEA.cjs","sourcesContent":["import * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\n\nimport { cn } from \"../../lib/utils\";\n\n/**\n * A panel that slides in from an edge and can be dragged shut.\n *\n * Built on [vaul](https://vaul.emilkowal.ski/), which is a Radix Dialog\n * underneath - the same primitive `Sheet` uses, so the focus trap and the escape\n * handling come from the same place.\n *\n * ## Drawer or Sheet?\n *\n * They look alike, and the difference is the gesture:\n *\n * - `Sheet` is a dialog anchored to an edge. It opens and closes, and that is\n * all. Cheaper, and the right choice on a desktop-first surface.\n * - `Drawer` adds the touch model: drag it to dismiss, snap points to open it\n * part of the way, and a grabber that says it can be moved. That is the mobile\n * convention, and it costs the extra dependency.\n *\n * If you would not use the drag, use `Sheet`.\n *\n * One difference in how they are modal: vaul does not put `aria-modal` on the\n * dialog. It aria-hides the rest of the page instead, which confines a screen\n * reader the same way. Both are valid, and this one is pinned by a test so it\n * cannot quietly become neither.\n *\n * ## Positioning comes from a data attribute\n *\n * `direction` is a prop on the root, and vaul writes it onto the content as\n * `data-vaul-drawer-direction`. The content styling below reads that rather than\n * taking a variant of its own, so the two can never disagree - the drawer cannot\n * be told to come from the left and then be styled along the bottom.\n */\n\nconst Drawer = DrawerPrimitive.Root;\nconst DrawerTrigger = DrawerPrimitive.Trigger;\nconst DrawerPortal = DrawerPrimitive.Portal;\nconst DrawerClose = DrawerPrimitive.Close;\n\n/**\n * The grabber.\n *\n * vaul's own, not a decorative div: it carries a hit area larger than the bar you\n * see, so the drag target is a reasonable size on a touch screen, and it is\n * `aria-hidden` because dragging is not the only way to close.\n */\nconst DrawerHandle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Handle>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Handle>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Handle\n ref={ref}\n className={cn(\n \"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\",\n className,\n )}\n {...props}\n />\n));\nDrawerHandle.displayName = \"DrawerHandle\";\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n className,\n )}\n {...props}\n />\n));\nDrawerOverlay.displayName = \"DrawerOverlay\";\n\nexport interface DrawerContentProps extends React.ComponentPropsWithoutRef<\n typeof DrawerPrimitive.Content\n> {\n /**\n * Draw the grabber. Defaults to true, and it is hidden by CSS for a drawer\n * coming from the left or right, where a horizontal bar would be wrong.\n */\n withHandle?: boolean;\n}\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n DrawerContentProps\n>(({ className, children, withHandle = true, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n // The group is what lets the header and the grabber react to the\n // direction without being told it separately.\n \"group/drawer-content fixed z-50 flex h-auto flex-col border-border bg-background\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n className,\n )}\n {...props}\n >\n {withHandle && (\n <DrawerHandle className=\"hidden group-data-[vaul-drawer-direction=bottom]/drawer-content:block group-data-[vaul-drawer-direction=top]/drawer-content:mb-4 group-data-[vaul-drawer-direction=top]/drawer-content:mt-0 group-data-[vaul-drawer-direction=top]/drawer-content:block\" />\n )}\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-1.5 p-4\",\n // Centred when it comes from an edge you look down at, left-aligned when it\n // is a side panel and reads like a page.\n \"group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center\",\n \"md:text-left\",\n className,\n )}\n {...props}\n />\n));\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n));\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight text-foreground\",\n className,\n )}\n {...props}\n />\n));\nDrawerTitle.displayName = \"DrawerTitle\";\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = \"DrawerDescription\";\n\n/**\n * A drawer opened from inside another one, which scales the parent back rather\n * than stacking two overlays. Use in place of `Drawer` for the inner one.\n */\nconst DrawerNested = DrawerPrimitive.NestedRoot;\n\nexport {\n Drawer,\n DrawerNested,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHandle,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunkRKSTEJKG_cjs=require('./chunk-RKSTEJKG.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),cmdk=require('cmdk'),phosphorReact=require('phosphor-react');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var f=e__namespace.forwardRef(({className:t,...o},a)=>e__namespace.createElement(cmdk.Command,{ref:a,className:chunkITRGJNWL_cjs.a("flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground",t),...o}));f.displayName="Command";var g=({title:t="Command palette",description:o="Search for a command to run",children:a,className:l,...c})=>e__namespace.createElement(chunkRKSTEJKG_cjs.c,{...c},e__namespace.createElement(chunkRKSTEJKG_cjs.e,{className:chunkITRGJNWL_cjs.a("overflow-hidden p-0",l),showCloseButton:false,size:"sm"},e__namespace.createElement(chunkRKSTEJKG_cjs.f,{className:"sr-only"},e__namespace.createElement(chunkRKSTEJKG_cjs.g,null,t),e__namespace.createElement(chunkRKSTEJKG_cjs.h,null,o)),e__namespace.createElement(f,null,a)));g.displayName="CommandDialog";var C=e__namespace.forwardRef(({className:t,...o},a)=>e__namespace.createElement("div",{className:"flex items-center gap-2 border-b border-border px-3"},e__namespace.createElement(phosphorReact.MagnifyingGlass,{className:"h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":"true"}),e__namespace.createElement(cmdk.Command.Input,{ref:a,className:chunkITRGJNWL_cjs.a("flex h-11 w-full bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",t),...o})));C.displayName="CommandInput";var R=e__namespace.forwardRef(({className:t,...o},a)=>e__namespace.createElement(cmdk.Command.List,{ref:a,className:chunkITRGJNWL_cjs.a("max-h-[300px] scroll-py-1 overflow-y-auto overflow-x-hidden",t),...o}));R.displayName="CommandList";var y=e__namespace.forwardRef(({className:t,...o},a)=>e__namespace.createElement(cmdk.Command.Empty,{ref:a,className:chunkITRGJNWL_cjs.a("py-6 text-center text-sm text-muted-foreground",t),...o}));y.displayName="CommandEmpty";var x=e__namespace.forwardRef(({className:t,...o},a)=>e__namespace.createElement(cmdk.Command.Group,{ref:a,className:chunkITRGJNWL_cjs.a("overflow-hidden p-1 text-foreground","[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",t),...o}));x.displayName="CommandGroup";var h=e__namespace.forwardRef(({className:t,...o},a)=>e__namespace.createElement(cmdk.Command.Separator,{ref:a,"aria-hidden":"true",className:chunkITRGJNWL_cjs.a("-mx-1 h-px bg-border",t),...o}));h.displayName="CommandSeparator";var v=e__namespace.forwardRef(({className:t,...o},a)=>e__namespace.createElement(cmdk.Command.Item,{ref:a,className:chunkITRGJNWL_cjs.a("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none","data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground","data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50","[&_svg]:pointer-events-none [&_svg]:h-4 [&_svg]:w-4 [&_svg]:shrink-0",t),...o}));v.displayName="CommandItem";var P=e__namespace.forwardRef(({className:t,...o},a)=>e__namespace.createElement("span",{ref:a,"aria-hidden":"true",className:chunkITRGJNWL_cjs.a("ml-auto text-xs tracking-widest text-muted-foreground",t),...o}));P.displayName="CommandShortcut";var N=e__namespace.forwardRef(({className:t,...o},a)=>e__namespace.createElement(cmdk.Command.Loading,{ref:a,className:chunkITRGJNWL_cjs.a("py-6 text-center text-sm text-muted-foreground",t),...o}));N.displayName="CommandLoading";exports.a=f;exports.b=g;exports.c=C;exports.d=R;exports.e=y;exports.f=x;exports.g=h;exports.h=v;exports.i=P;exports.j=N;//# sourceMappingURL=chunk-DB6MHAU3.cjs.map
3
+ //# sourceMappingURL=chunk-DB6MHAU3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/command.tsx"],"names":["Command","e","className","props","ref","CommandPrimitive","cn","CommandDialog","title","description","children","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","CommandInput","MagnifyingGlass","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","CommandLoading"],"mappings":"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","file":"chunk-DB6MHAU3.cjs","sourcesContent":["import * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { MagnifyingGlass } from \"phosphor-react\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\";\n\n/**\n * A searchable list of things to do: a command palette, or the list inside a\n * combobox.\n *\n * Built on [cmdk](https://cmdk.paco.me/), which owns the filtering, the scoring\n * and the keyboard model.\n *\n * ## Not a DropdownMenu\n *\n * A `DropdownMenu` is a menu: `role=\"menu\"`, items you activate, no typing. This\n * is a combobox over a listbox - the input is `role=\"combobox\"` and the items are\n * `role=\"option\"` - which is what a screen reader needs to hear when the list\n * narrows as you type. Filtering a menu would leave a screen reader announcing a\n * menu whose contents silently change underneath it.\n *\n * So: choosing from a short fixed set of commands is `DropdownMenu`; searching is\n * this.\n *\n * ## Filtering is cmdk's, and is not substring matching\n *\n * cmdk scores each item against the query with a fuzzy match, so \"gh\" finds\n * \"GitHub\" and the best match sorts first. Items are matched on their `value`,\n * which defaults to their text. Give `value` explicitly when the text is not what\n * someone would type, or add `keywords` for synonyms.\n *\n * Pass `shouldFilter={false}` on `Command` when the list comes from a server and\n * is already filtered, otherwise cmdk filters the results a second time.\n */\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground\",\n className,\n )}\n {...props}\n />\n));\nCommand.displayName = \"Command\";\n\nexport interface CommandDialogProps extends React.ComponentPropsWithoutRef<\n typeof Dialog\n> {\n /**\n * The dialog's accessible name. Rendered visually hidden, because a command\n * palette shows a search field rather than a heading, and a dialog with no\n * name is announced as just \"dialog\".\n */\n title?: string;\n /** Visually hidden description, announced after the title. */\n description?: string;\n className?: string;\n}\n\n/**\n * The palette form: the same `Command`, in a dialog.\n *\n * The title and description are real elements, visually hidden, and they live\n * *inside* `DialogContent` where the labelling can resolve. The corner close\n * button is turned off: it is positioned at the top right, which is where the\n * search field is.\n */\nconst CommandDialog = ({\n title = \"Command palette\",\n description = \"Search for a command to run\",\n children,\n className,\n ...props\n}: CommandDialogProps) => (\n <Dialog {...props}>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={false}\n size=\"sm\"\n >\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <Command>{children}</Command>\n </DialogContent>\n </Dialog>\n);\nCommandDialog.displayName = \"CommandDialog\";\n\n/**\n * The search field.\n *\n * Wrapped in a row with the icon, so the icon is a sibling rather than a\n * background image and can be sized with the text.\n */\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center gap-2 border-b border-border px-3\">\n <MagnifyingGlass\n className=\"h-4 w-4 shrink-0 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-11 w-full bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n </div>\n));\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-y-auto overflow-x-hidden\",\n className,\n )}\n {...props}\n />\n));\nCommandList.displayName = \"CommandList\";\n\n/**\n * What to show when nothing matches.\n *\n * cmdk renders it only when the query has no results, so it is not a fallback\n * for an empty list - an empty `Command` with no query shows nothing.\n */\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className={cn(\"py-6 text-center text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nCommandEmpty.displayName = \"CommandEmpty\";\n\n/**\n * A named section. Hides itself when the query filters all of its items out, so\n * you do not get a heading over nothing.\n */\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground\",\n \"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nCommandGroup.displayName = \"CommandGroup\";\n\n/**\n * A line between groups, hidden from the accessibility tree.\n *\n * A `listbox` may only contain `option` and `group` children, and cmdk gives its\n * separator `role=\"separator\"`, which makes the list an `aria-required-children`\n * violation - axe flags the list, not the separator, so it reads like a problem\n * with the list. `role` cannot be overridden: cmdk writes it after the prop\n * spread. `aria-hidden` is the fix, and it is also the honest description. The\n * line is decoration; the group headings are what convey the split.\n */\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\"-mx-1 h-px bg-border\", className)}\n {...props}\n />\n));\nCommandSeparator.displayName = \"CommandSeparator\";\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none\",\n // cmdk marks the active item with data-selected, keyboard and pointer\n // alike, so hover styling would be a second source of truth.\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground\",\n \"data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:h-4 [&_svg]:w-4 [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n />\n));\nCommandItem.displayName = \"CommandItem\";\n\n/** The keyboard hint on the right of an item. Decorative. */\nconst CommandShortcut = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nCommandShortcut.displayName = \"CommandShortcut\";\n\n/** Shown while results are loading, for a `Command` fed from a server. */\nconst CommandLoading = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Loading>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Loading>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Loading\n ref={ref}\n className={cn(\"py-6 text-center text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nCommandLoading.displayName = \"CommandLoading\";\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n CommandLoading,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunkZ7WEJ5IQ_cjs=require('./chunk-Z7WEJ5IQ.cjs'),chunkC7HZAQBX_cjs=require('./chunk-C7HZAQBX.cjs'),chunkMQUHAWJ2_cjs=require('./chunk-MQUHAWJ2.cjs'),chunkFUENXWR7_cjs=require('./chunk-FUENXWR7.cjs'),chunk3QVQ2TNE_cjs=require('./chunk-3QVQ2TNE.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),reactSlot=require('@radix-ui/react-slot'),classVarianceAuthority=require('class-variance-authority'),phosphorReact=require('phosphor-react');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var _=768;function I(a=_){let t=`(max-width: ${a-1}px)`,r=e__namespace.useCallback(o=>{if(typeof window>"u"||!window.matchMedia)return ()=>{};let n=window.matchMedia(t);return n.addEventListener("change",o),()=>n.removeEventListener("change",o)},[t]);return e__namespace.useSyncExternalStore(r,()=>typeof window<"u"&&window.matchMedia?window.matchMedia(t).matches:false,()=>false)}var G="sidebar_state",V=3600*24*7,K="16rem",U="18rem",j="3rem",W="b",D=e__namespace.createContext(null);function M(){let a=e__namespace.useContext(D);if(!a)throw new Error("useSidebar must be used inside a <SidebarProvider>.");return a}var $=e__namespace.forwardRef(({defaultOpen:a=true,open:t,onOpenChange:r,keyboardShortcut:o=true,className:n,style:s,children:l,...c},d)=>{let b=I(),[m,f]=e__namespace.useState(false),[w,P]=e__namespace.useState(a),g=t??w,h=e__namespace.useCallback(u=>{let p=typeof u=="function"?u(g):u;t===void 0&&P(p),r?.(p),document.cookie=`${G}=${p}; path=/; max-age=${V}; SameSite=Lax`;},[g,t,r]),x=e__namespace.useCallback(()=>{b?f(u=>!u):h(u=>!u);},[b,h]);e__namespace.useEffect(()=>{if(!o)return;let u=p=>{p.key===W&&(p.metaKey||p.ctrlKey)&&(p.preventDefault(),x());};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[o,x]);let L=g?"expanded":"collapsed",k=e__namespace.useMemo(()=>({state:L,open:g,setOpen:h,isMobile:b,openMobile:m,setOpenMobile:f,toggleSidebar:x}),[L,g,h,b,m,x]);return e__namespace.createElement(D.Provider,{value:k},e__namespace.createElement("div",{ref:d,"data-slot":"sidebar-wrapper",style:{"--sidebar-width":K,"--sidebar-width-icon":j,...s},className:chunkITRGJNWL_cjs.a("group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar",n),...c},l))});$.displayName="SidebarProvider";var q=e__namespace.forwardRef(({side:a="left",variant:t="sidebar",collapsible:r="offcanvas",title:o="Sidebar",description:n="Site navigation",className:s,children:l,...c},d)=>{let{isMobile:b,state:m,openMobile:f,setOpenMobile:w}=M();return r==="none"?e__namespace.createElement("div",{ref:d,"data-slot":"sidebar",className:chunkITRGJNWL_cjs.a("flex h-full w-[var(--sidebar-width)] flex-col bg-sidebar text-sidebar-foreground",s),...c},l):b?e__namespace.createElement(chunkMQUHAWJ2_cjs.b,{open:f,onOpenChange:w},e__namespace.createElement(chunkMQUHAWJ2_cjs.g,{ref:d,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",side:a,className:"w-[var(--sidebar-width)] bg-sidebar p-0 text-sidebar-foreground",style:{"--sidebar-width":U}},e__namespace.createElement(chunkMQUHAWJ2_cjs.h,{className:"sr-only"},e__namespace.createElement(chunkMQUHAWJ2_cjs.j,null,o),e__namespace.createElement(chunkMQUHAWJ2_cjs.k,null,n)),e__namespace.createElement("div",{className:"flex h-full w-full flex-col"},l))):e__namespace.createElement("div",{ref:d,className:"group peer hidden text-sidebar-foreground md:block","data-state":m,"data-collapsible":m==="collapsed"?r:"","data-variant":t,"data-side":a,"data-slot":"sidebar"},e__namespace.createElement("div",{"data-slot":"sidebar-gap",className:chunkITRGJNWL_cjs.a("relative w-[var(--sidebar-width)] bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",t==="floating"||t==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+1rem)]":"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)]")}),e__namespace.createElement("div",{"data-slot":"sidebar-container",className:chunkITRGJNWL_cjs.a("fixed inset-y-0 z-10 hidden h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200 ease-linear md:flex",a==="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)]",t==="floating"||t==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+1rem+2px)]":"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)] group-data-[side=left]:border-r group-data-[side=right]:border-l group-data-[side=left]:border-sidebar-border group-data-[side=right]:border-sidebar-border",s),...c},e__namespace.createElement("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-md"},l)))});q.displayName="Sidebar";var F=e__namespace.forwardRef(({className:a,onClick:t,label:r="Toggle sidebar",...o},n)=>{let{toggleSidebar:s,open:l,isMobile:c,openMobile:d}=M();return e__namespace.createElement("button",{ref:n,type:"button","data-sidebar":"trigger","data-slot":"sidebar-trigger","aria-expanded":c?d:l,className:chunkITRGJNWL_cjs.a("inline-flex h-7 w-7 items-center justify-center rounded-md text-sidebar-foreground transition-colors","hover:bg-sidebar-accent hover:text-sidebar-accent-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",a),onClick:b=>{t?.(b),b.defaultPrevented||s();},...o},e__namespace.createElement(phosphorReact.Sidebar,{className:"h-4 w-4","aria-hidden":"true"}),e__namespace.createElement("span",{className:"sr-only"},r))});F.displayName="SidebarTrigger";var X=e__namespace.forwardRef(({className:a,label:t="Toggle sidebar",...r},o)=>{let{toggleSidebar:n}=M();return e__namespace.createElement("button",{ref:o,type:"button","data-sidebar":"rail","data-slot":"sidebar-rail","aria-label":t,title:t,tabIndex:-1,onClick:n,className:chunkITRGJNWL_cjs.a("absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex","group-data-[side=left]:-right-4 group-data-[side=right]:left-0","after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border","group-data-[side=left]:cursor-w-resize group-data-[side=right]:cursor-e-resize","group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full","hover:group-data-[collapsible=offcanvas]:bg-sidebar",a),...r})});X.displayName="SidebarRail";var Y=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("main",{ref:r,"data-slot":"sidebar-inset",className:chunkITRGJNWL_cjs.a("relative flex w-full flex-1 flex-col bg-background","md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-md","md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",a),...t}));Y.displayName="SidebarInset";var J=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement(chunkFUENXWR7_cjs.b,{ref:r,"data-sidebar":"input",className:chunkITRGJNWL_cjs.a("h-8 w-full bg-background shadow-none",a),...t}));J.displayName="SidebarInput";var Q=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("div",{ref:r,"data-sidebar":"header",className:chunkITRGJNWL_cjs.a("flex flex-col gap-2 p-2",a),...t}));Q.displayName="SidebarHeader";var Z=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("div",{ref:r,"data-sidebar":"footer",className:chunkITRGJNWL_cjs.a("mt-auto flex flex-col gap-2 p-2",a),...t}));Z.displayName="SidebarFooter";var ee=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement(chunkC7HZAQBX_cjs.b,{ref:r,"data-sidebar":"separator",className:chunkITRGJNWL_cjs.a("mx-2 w-auto bg-sidebar-border",a),...t}));ee.displayName="SidebarSeparator";var te=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("div",{ref:r,"data-sidebar":"content",className:chunkITRGJNWL_cjs.a("flex min-h-0 flex-1 flex-col gap-2 overflow-auto","group-data-[collapsible=icon]:overflow-hidden",a),...t}));te.displayName="SidebarContent";var ae=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("div",{ref:r,"data-sidebar":"group",className:chunkITRGJNWL_cjs.a("relative flex w-full min-w-0 flex-col p-2",a),...t}));ae.displayName="SidebarGroup";var re=e__namespace.forwardRef(({className:a,asChild:t=false,...r},o)=>e__namespace.createElement(t?reactSlot.Slot:"div",{ref:o,"data-sidebar":"group-label",className:chunkITRGJNWL_cjs.a("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 transition-[margin,opacity] duration-200 ease-linear","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring","[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",a),...r}));re.displayName="SidebarGroupLabel";var ie=e__namespace.forwardRef(({className:a,asChild:t=false,...r},o)=>e__namespace.createElement(t?reactSlot.Slot:"button",{ref:o,"data-sidebar":"group-action",className:chunkITRGJNWL_cjs.a("absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground transition-transform","hover:bg-sidebar-accent hover:text-sidebar-accent-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring","[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0","after:absolute after:-inset-2 md:after:hidden","group-data-[collapsible=icon]:hidden",a),...r}));ie.displayName="SidebarGroupAction";var oe=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("div",{ref:r,"data-sidebar":"group-content",className:chunkITRGJNWL_cjs.a("w-full text-sm",a),...t}));oe.displayName="SidebarGroupContent";var ne=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("ul",{ref:r,"data-sidebar":"menu",className:chunkITRGJNWL_cjs.a("flex w-full min-w-0 flex-col gap-1",a),...t}));ne.displayName="SidebarMenu";var se=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("li",{ref:r,"data-sidebar":"menu-item",className:chunkITRGJNWL_cjs.a("group/menu-item relative",a),...t}));se.displayName="SidebarMenuItem";var de=classVarianceAuthority.cva("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring 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 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-has-[[data-sidebar=menu-action]]/menu-item:pr-8 group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0",{variants:{variant:{default:"",outline:"bg-background shadow-[0_0_0_1px_hsl(var(--nostromo-color-sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--nostromo-color-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"}}),le=e__namespace.forwardRef(({asChild:a=false,isActive:t=false,variant:r,size:o="default",tooltip:n,className:s,...l},c)=>{let{isMobile:d,state:b}=M(),f=e__namespace.createElement(a?reactSlot.Slot:"button",{ref:c,"data-sidebar":"menu-button","data-size":o,"data-active":t,"aria-current":t?"page":void 0,className:chunkITRGJNWL_cjs.a(de({variant:r,size:o}),s),...l});return !n||b!=="collapsed"||d?f:e__namespace.createElement(chunkZ7WEJ5IQ_cjs.f,{content:n,placement:"right"},f)});le.displayName="SidebarMenuButton";var ce=e__namespace.forwardRef(({className:a,asChild:t=false,showOnHover:r=false,...o},n)=>e__namespace.createElement(t?reactSlot.Slot:"button",{ref:n,"data-sidebar":"menu-action",className:chunkITRGJNWL_cjs.a("absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground transition-transform","peer-hover/menu-button:text-sidebar-accent-foreground","hover:bg-sidebar-accent hover:text-sidebar-accent-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring","[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0","after:absolute after:-inset-2 md:after: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",r&&"md:opacity-0 group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100",a),...o}));ce.displayName="SidebarMenuAction";var be=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("div",{ref:r,"data-sidebar":"menu-badge",className:chunkITRGJNWL_cjs.a("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",a),...t}));be.displayName="SidebarMenuBadge";var ue=e__namespace.forwardRef(({className:a,showIcon:t=false,width:r,...o},n)=>{let s=e__namespace.useId(),l=e__namespace.useMemo(()=>{if(r!==void 0)return r;let c=0;for(let d=0;d<s.length;d++)c=c*31+s.charCodeAt(d)|0;return 40+Math.abs(c)%51},[s,r]);return e__namespace.createElement("div",{ref:n,"data-sidebar":"menu-skeleton",className:chunkITRGJNWL_cjs.a("flex h-8 items-center gap-2 rounded-md px-2",a),...o},t&&e__namespace.createElement(chunk3QVQ2TNE_cjs.b,{className:"h-4 w-4 shrink-0 rounded-md"}),e__namespace.createElement(chunk3QVQ2TNE_cjs.b,{className:"h-4",width:`${l}%`}))});ue.displayName="SidebarMenuSkeleton";var pe=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("ul",{ref:r,"data-sidebar":"menu-sub",className:chunkITRGJNWL_cjs.a("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",a),...t}));pe.displayName="SidebarMenuSub";var fe=e__namespace.forwardRef(({className:a,...t},r)=>e__namespace.createElement("li",{ref:r,"data-sidebar":"menu-sub-item",className:chunkITRGJNWL_cjs.a("group/menu-sub-item relative",a),...t}));fe.displayName="SidebarMenuSubItem";var me=e__namespace.forwardRef(({asChild:a=false,size:t="md",isActive:r=false,className:o,...n},s)=>e__namespace.createElement(a?reactSlot.Slot:"a",{ref:s,"data-sidebar":"menu-sub-button","data-size":t,"data-active":r,"aria-current":r?"page":void 0,className:chunkITRGJNWL_cjs.a("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground","hover:bg-sidebar-accent hover:text-sidebar-accent-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring","active:bg-sidebar-accent active:text-sidebar-accent-foreground","aria-disabled:pointer-events-none aria-disabled:opacity-50","data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground","[&>span:last-child]:truncate [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0",t==="sm"&&"text-xs",t==="md"&&"text-sm","group-data-[collapsible=icon]:hidden",o),...n}));me.displayName="SidebarMenuSubButton";exports.A=me;exports.a=_;exports.b=I;exports.c=M;exports.d=$;exports.e=q;exports.f=F;exports.g=X;exports.h=Y;exports.i=J;exports.j=Q;exports.k=Z;exports.l=ee;exports.m=te;exports.n=ae;exports.o=re;exports.p=ie;exports.q=oe;exports.r=ne;exports.s=se;exports.t=de;exports.u=le;exports.v=ce;exports.w=be;exports.x=ue;exports.y=pe;exports.z=fe;//# sourceMappingURL=chunk-ERGAJKFH.cjs.map
3
+ //# sourceMappingURL=chunk-ERGAJKFH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-is-mobile.ts","../src/components/core/sidebar.tsx"],"names":["MOBILE_BREAKPOINT","useIsMobile","breakpoint","query","subscribe","S","onStoreChange","list","SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","e","useSidebar","context","SidebarProvider","defaultOpen","openProp","onOpenChange","keyboardShortcut","className","style","children","props","ref","isMobile","openMobile","setOpenMobile","uncontrolledOpen","setUncontrolledOpen","open","setOpen","value","next","toggleSidebar","current","handleKeyDown","event","state","cn","Sidebar","side","variant","collapsible","title","description","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","SidebarTrigger","onClick","label","SidebarIcon","SidebarRail","SidebarInset","SidebarInput","Input","SidebarHeader","SidebarFooter","SidebarSeparator","Separator","SidebarContent","SidebarGroup","SidebarGroupLabel","asChild","Slot","SidebarGroupAction","SidebarGroupContent","SidebarMenu","SidebarMenuItem","sidebarMenuButtonVariants","cva","SidebarMenuButton","isActive","size","tooltip","button","Tooltip","SidebarMenuAction","showOnHover","SidebarMenuBadge","SidebarMenuSkeleton","showIcon","width","id","derived","hash","i","Skeleton","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuSubButton"],"mappings":"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","file":"chunk-ERGAJKFH.cjs","sourcesContent":["import * as React from \"react\";\n\n/**\n * The width below which a layout should switch to its narrow form.\n *\n * 768px, matching Tailwind's `md`, so a component that branches in JS and a\n * class that branches in CSS agree about where the break is.\n */\nexport const MOBILE_BREAKPOINT = 768;\n\n/**\n * True while the viewport is narrower than {@link MOBILE_BREAKPOINT}.\n *\n * Some things cannot be done in CSS. `Sidebar` renders a `Sheet` on a phone and\n * a fixed column on a desktop, which is a different tree, not a different set of\n * classes - so the branch has to happen in JS.\n *\n * Built on `useSyncExternalStore` rather than an effect that copies the match\n * into state. The effect version renders once with the wrong answer, and prefer\n * anything that reads a live browser value to be read rather than mirrored.\n * `false` is the server snapshot: a layout that assumes desktop and corrects on\n * hydration is the safer of the two guesses, since the mobile branch is a\n * portalled dialog.\n */\nexport function useIsMobile(breakpoint: number = MOBILE_BREAKPOINT): boolean {\n const query = `(max-width: ${breakpoint - 1}px)`;\n\n const subscribe = React.useCallback(\n (onStoreChange: () => void) => {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const list = window.matchMedia(query);\n list.addEventListener(\"change\", onStoreChange);\n return () => list.removeEventListener(\"change\", onStoreChange);\n },\n [query],\n );\n\n return React.useSyncExternalStore(\n subscribe,\n () =>\n typeof window !== \"undefined\" && window.matchMedia\n ? window.matchMedia(query).matches\n : false,\n () => false,\n );\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Sidebar as SidebarIcon } from \"phosphor-react\";\n\nimport { useIsMobile } from \"../../hooks/use-is-mobile\";\nimport { cn } from \"../../lib/utils\";\nimport { Input } from \"./input\";\nimport { Separator } from \"./separator\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet\";\nimport { Skeleton } from \"./skeleton\";\nimport { Tooltip } from \"./tooltip\";\n\n/**\n * An application sidebar: a collapsible navigation column, with a phone form and\n * a desktop form.\n *\n * The largest component here, and mostly layout. Three things are worth reading\n * before using it.\n *\n * ## The phone form is a different tree, not different classes\n *\n * Below 768px a `Sidebar` is a `Sheet` - a modal panel over the page. Above it,\n * a fixed column beside the page. Those are different elements with different\n * semantics, so the branch is in JS (`useIsMobile`) rather than in CSS. It also\n * means the open state is two states: `open` for the column, `openMobile` for the\n * sheet, and `toggleSidebar` picks the one that applies.\n *\n * ## State goes in a cookie, and the server has to read it\n *\n * Collapsing the sidebar writes `sidebar_state`. That is what stops it flashing\n * open on every navigation in a server-rendered app - but only if the server\n * passes it back in as `defaultOpen`. Nothing here can do that for you; read the\n * cookie in your layout. Left alone, the cookie is written and never read, and\n * the sidebar starts expanded every time.\n *\n * ## Sidebar colours are their own token family\n *\n * `bg-sidebar`, `text-sidebar-foreground`, `border-sidebar-border`,\n * `bg-sidebar-accent` and `ring-sidebar-ring`, so a sidebar can be a different\n * surface from a card. Every theme defaults them to that theme's card, accent,\n * border and ring, so nothing changes until you override them.\n *\n * ## Tailwind 4.0 syntax only\n *\n * The package declares `tailwindcss ^4.0.0`, so the classes below stick to what\n * 4.0 understands: `w-[var(--sidebar-width)]` rather than the 4.1 shorthand\n * `w-(--sidebar-width)`, and literal lengths rather than `--spacing()`.\n * A consumer on 4.0 would otherwise get a sidebar with no width.\n */\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ninterface SidebarContextValue {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\nfunction useSidebar(): SidebarContextValue {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used inside a <SidebarProvider>.\");\n }\n return context;\n}\n\nexport interface SidebarProviderProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Whether the desktop sidebar starts expanded.\n *\n * Pass the `sidebar_state` cookie's value here on the server, or the sidebar\n * will flash open on every page load for anyone who collapsed it.\n */\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * Install the ⌘B / Ctrl+B shortcut. Defaults to true. Turn it off if the key\n * is already taken by something in your app.\n */\n keyboardShortcut?: boolean;\n}\n\nconst SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n keyboardShortcut = true,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const open = openProp ?? uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (value: boolean | ((current: boolean) => boolean)) => {\n const next = typeof value === \"function\" ? value(open) : value;\n if (openProp === undefined) setUncontrolledOpen(next);\n onOpenChange?.(next);\n // Persisted so a server-rendered app can render the right width on the\n // first paint. It is only useful if the server reads it back.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${next}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}; SameSite=Lax`;\n },\n [open, openProp, onOpenChange],\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) setOpenMobile((current) => !current);\n else setOpen((current) => !current);\n }, [isMobile, setOpen]);\n\n React.useEffect(() => {\n if (!keyboardShortcut) return;\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 window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [keyboardShortcut, toggleSidebar]);\n\n const state = open ? \"expanded\" : \"collapsed\";\n\n const value = React.useMemo<SidebarContextValue>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={value}>\n <div\n ref={ref}\n data-slot=\"sidebar-wrapper\"\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 {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n },\n);\nSidebarProvider.displayName = \"SidebarProvider\";\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n /**\n * What collapsing does. `offcanvas` slides it off the edge, `icon` shrinks it\n * to a strip of icons, `none` makes it a plain fixed column.\n */\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n /** Accessible name for the phone sheet. */\n title?: string;\n /** Description for the phone sheet, announced after the title. */\n description?: string;\n}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(\n (\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n title = \"Sidebar\",\n description = \"Site navigation\",\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n ref={ref}\n data-slot=\"sidebar\"\n className={cn(\n \"flex h-full w-[var(--sidebar-width)] flex-col bg-sidebar text-sidebar-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile}>\n <SheetContent\n ref={ref}\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n side={side}\n className=\"w-[var(--sidebar-width)] bg-sidebar p-0 text-sidebar-foreground\"\n style={\n { \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE } as React.CSSProperties\n }\n >\n {/* A sidebar has no visible heading, and a dialog with no name is\n announced as \"dialog\". Hidden rather than absent. */}\n <SheetHeader className=\"sr-only\">\n <SheetTitle>{title}</SheetTitle>\n <SheetDescription>{description}</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 <div\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 data-slot=\"sidebar\"\n >\n {/* Holds the space the fixed column occupies, so the page content is not\n underneath it. The column itself is position: fixed and takes no\n room. */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-[var(--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)+1rem)]\"\n : \"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)]\",\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-[var(--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)+1rem+2px)]\"\n : \"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)] group-data-[side=left]:border-r group-data-[side=right]:border-l group-data-[side=left]:border-sidebar-border group-data-[side=right]:border-sidebar-border\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-md\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\nSidebar.displayName = \"Sidebar\";\n\nconst SidebarTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { label?: string }\n>(({ className, onClick, label = \"Toggle sidebar\", ...props }, ref) => {\n const { toggleSidebar, open, isMobile, openMobile } = useSidebar();\n return (\n <button\n ref={ref}\n type=\"button\"\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n // Announces the state, not just the action, so a screen reader user knows\n // whether pressing it opens or closes.\n aria-expanded={isMobile ? openMobile : open}\n className={cn(\n \"inline-flex h-7 w-7 items-center justify-center rounded-md text-sidebar-foreground transition-colors\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) toggleSidebar();\n }}\n {...props}\n >\n <SidebarIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n <span className=\"sr-only\">{label}</span>\n </button>\n );\n});\nSidebarTrigger.displayName = \"SidebarTrigger\";\n\n/**\n * The thin strip along the sidebar's edge that toggles it.\n *\n * `tabIndex={-1}` on purpose: it does the same thing as `SidebarTrigger`, and two\n * tab stops for one action is worse than one. It is a mouse shortcut, and the\n * button is the keyboard route.\n */\nconst SidebarRail = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { label?: string }\n>(({ className, label = \"Toggle sidebar\", ...props }, ref) => {\n const { toggleSidebar } = useSidebar();\n return (\n <button\n ref={ref}\n type=\"button\"\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label={label}\n title={label}\n tabIndex={-1}\n onClick={toggleSidebar}\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex\",\n \"group-data-[side=left]:-right-4 group-data-[side=right]:left-0\",\n \"after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border\",\n \"group-data-[side=left]:cursor-w-resize group-data-[side=right]:cursor-e-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarRail.displayName = \"SidebarRail\";\n\n/** The page beside the sidebar. A `<main>`, so it is a landmark. */\nconst SidebarInset = React.forwardRef<\n HTMLElement,\n React.HTMLAttributes<HTMLElement>\n>(({ className, ...props }, ref) => (\n <main\n ref={ref}\n data-slot=\"sidebar-inset\"\n className={cn(\n \"relative flex w-full flex-1 flex-col bg-background\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-md\",\n \"md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className,\n )}\n {...props}\n />\n));\nSidebarInset.displayName = \"SidebarInset\";\n\nconst SidebarInput = React.forwardRef<\n React.ElementRef<typeof Input>,\n React.ComponentPropsWithoutRef<typeof Input>\n>(({ className, ...props }, ref) => (\n <Input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background shadow-none\", className)}\n {...props}\n />\n));\nSidebarInput.displayName = \"SidebarInput\";\n\nconst SidebarHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n));\nSidebarHeader.displayName = \"SidebarHeader\";\n\nconst SidebarFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n));\nSidebarFooter.displayName = \"SidebarFooter\";\n\nconst SidebarSeparator = React.forwardRef<\n React.ElementRef<typeof Separator>,\n React.ComponentPropsWithoutRef<typeof Separator>\n>(({ className, ...props }, ref) => (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n));\nSidebarSeparator.displayName = \"SidebarSeparator\";\n\nconst SidebarContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\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\",\n // Hidden rather than scrolled when the sidebar is a strip of icons: a\n // scrollbar in a 3rem column is not usable.\n \"group-data-[collapsible=icon]:overflow-hidden\",\n className,\n )}\n {...props}\n />\n));\nSidebarContent.displayName = \"SidebarContent\";\n\nconst SidebarGroup = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n));\nSidebarGroup.displayName = \"SidebarGroup\";\n\nexport interface SidebarGroupLabelProps extends React.HTMLAttributes<HTMLDivElement> {\n asChild?: boolean;\n}\n\nconst SidebarGroupLabel = React.forwardRef<\n HTMLDivElement,\n SidebarGroupLabelProps\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"div\";\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 px-2 text-xs font-medium text-sidebar-foreground/70 transition-[margin,opacity] duration-200 ease-linear\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n \"[&>svg]:h-4 [&>svg]:w-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\nexport interface SidebarGroupActionProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean;\n}\n\nconst SidebarGroupAction = React.forwardRef<\n HTMLButtonElement,\n SidebarGroupActionProps\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\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 transition-transform\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n \"[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0\",\n // A 20px target is under the 24px minimum, so the hit area is grown\n // where there is no cursor to aim with.\n \"after:absolute after:-inset-2 md:after: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.HTMLAttributes<HTMLDivElement>\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\n/** The navigation list. A real `<ul>`, so it is announced with a length. */\nconst SidebarMenu = React.forwardRef<\n HTMLUListElement,\n React.HTMLAttributes<HTMLUListElement>\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.HTMLAttributes<HTMLLIElement>\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 transition-[width,height,padding] \" +\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground \" +\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring \" +\n \"active:bg-sidebar-accent active:text-sidebar-accent-foreground \" +\n \"disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 \" +\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground \" +\n \"data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground \" +\n \"group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 \" +\n \"group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 \" +\n \"[&>span:last-child]:truncate [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--nostromo-color-sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--nostromo-color-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: { variant: \"default\", size: \"default\" },\n },\n);\n\nexport interface SidebarMenuButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof sidebarMenuButtonVariants> {\n asChild?: boolean;\n /**\n * Marks the current page. Sets `data-active`, and `aria-current=\"page\"` -\n * highlighting the current item is not the same as telling a screen reader\n * which one it is.\n */\n isActive?: boolean;\n /**\n * Label to show while the sidebar is collapsed to icons, where the text is\n * hidden. Ignored when it is expanded, and on a phone where it is never\n * collapsed.\n */\n tooltip?: string;\n}\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n SidebarMenuButtonProps\n>(\n (\n {\n asChild = false,\n isActive = false,\n variant,\n size = \"default\",\n tooltip,\n className,\n ...props\n },\n ref,\n ) => {\n const { isMobile, state } = useSidebar();\n const Comp = asChild ? Slot : \"button\";\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n aria-current={isActive ? \"page\" : undefined}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n // Only useful when the label is hidden. A tooltip repeating text that is\n // already on screen is noise.\n if (!tooltip || state !== \"collapsed\" || isMobile) return button;\n\n return (\n <Tooltip content={tooltip} placement=\"right\">\n {button}\n </Tooltip>\n );\n },\n);\nSidebarMenuButton.displayName = \"SidebarMenuButton\";\n\nexport interface SidebarMenuActionProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean;\n /** Only show it on hover or focus within the item. */\n showOnHover?: boolean;\n}\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n SidebarMenuActionProps\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\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 transition-transform\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n \"[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 md:after: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 // Focus-within as well as hover, or it would be unreachable by keyboard.\n showOnHover &&\n \"md:opacity-0 group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuAction.displayName = \"SidebarMenuAction\";\n\nconst SidebarMenuBadge = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\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\nexport interface SidebarMenuSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n showIcon?: boolean;\n /**\n * Width of the text bar, as a percentage between 40 and 90.\n *\n * Varying it makes a loading list look like a list of names rather than a\n * stack of identical bars. Left out, it is derived from React's own id for\n * this element, which is stable between the server and the client - shadcn's\n * version calls Math.random() here, which renders one width on the server and\n * a different one on the client and so trips hydration.\n */\n width?: number;\n}\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n SidebarMenuSkeletonProps\n>(({ className, showIcon = false, width, ...props }, ref) => {\n const id = React.useId();\n const derived = React.useMemo(() => {\n if (width !== undefined) return width;\n let hash = 0;\n for (let i = 0; i < id.length; i++)\n hash = (hash * 31 + id.charCodeAt(i)) | 0;\n return 40 + (Math.abs(hash) % 51);\n }, [id, width]);\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 && <Skeleton className=\"h-4 w-4 shrink-0 rounded-md\" />}\n {/* Width through Skeleton's own prop rather than a style: it does not take\n arbitrary DOM attributes. */}\n <Skeleton className=\"h-4\" width={`${derived}%`} />\n </div>\n );\n});\nSidebarMenuSkeleton.displayName = \"SidebarMenuSkeleton\";\n\nconst SidebarMenuSub = React.forwardRef<\n HTMLUListElement,\n React.HTMLAttributes<HTMLUListElement>\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.HTMLAttributes<HTMLLIElement>\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n));\nSidebarMenuSubItem.displayName = \"SidebarMenuSubItem\";\n\nexport interface SidebarMenuSubButtonProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n}\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n SidebarMenuSubButtonProps\n>(\n (\n { asChild = false, size = \"md\", isActive = false, className, ...props },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n aria-current={isActive ? \"page\" : undefined}\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\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n \"active:bg-sidebar-accent active:text-sidebar-accent-foreground\",\n \"aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n \"[&>span:last-child]:truncate [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarMenuSubButton.displayName = \"SidebarMenuSubButton\";\n\nexport {\n Sidebar,\n SidebarProvider,\n SidebarTrigger,\n SidebarRail,\n SidebarInset,\n SidebarInput,\n SidebarHeader,\n SidebarFooter,\n SidebarSeparator,\n SidebarContent,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubItem,\n SidebarMenuSubButton,\n sidebarMenuButtonVariants,\n useSidebar,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {c,e as e$1,f as f$1,g as g$1,h as h$1}from'./chunk-5N5KJBMP.js';import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {Command}from'cmdk';import {MagnifyingGlass}from'phosphor-react';var f=e.forwardRef(({className:t,...o},a$1)=>e.createElement(Command,{ref:a$1,className:a("flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground",t),...o}));f.displayName="Command";var g=({title:t="Command palette",description:o="Search for a command to run",children:a$1,className:l,...c$1})=>e.createElement(c,{...c$1},e.createElement(e$1,{className:a("overflow-hidden p-0",l),showCloseButton:false,size:"sm"},e.createElement(f$1,{className:"sr-only"},e.createElement(g$1,null,t),e.createElement(h$1,null,o)),e.createElement(f,null,a$1)));g.displayName="CommandDialog";var C=e.forwardRef(({className:t,...o},a$1)=>e.createElement("div",{className:"flex items-center gap-2 border-b border-border px-3"},e.createElement(MagnifyingGlass,{className:"h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":"true"}),e.createElement(Command.Input,{ref:a$1,className:a("flex h-11 w-full bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",t),...o})));C.displayName="CommandInput";var R=e.forwardRef(({className:t,...o},a$1)=>e.createElement(Command.List,{ref:a$1,className:a("max-h-[300px] scroll-py-1 overflow-y-auto overflow-x-hidden",t),...o}));R.displayName="CommandList";var y=e.forwardRef(({className:t,...o},a$1)=>e.createElement(Command.Empty,{ref:a$1,className:a("py-6 text-center text-sm text-muted-foreground",t),...o}));y.displayName="CommandEmpty";var x=e.forwardRef(({className:t,...o},a$1)=>e.createElement(Command.Group,{ref:a$1,className:a("overflow-hidden p-1 text-foreground","[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",t),...o}));x.displayName="CommandGroup";var h=e.forwardRef(({className:t,...o},a$1)=>e.createElement(Command.Separator,{ref:a$1,"aria-hidden":"true",className:a("-mx-1 h-px bg-border",t),...o}));h.displayName="CommandSeparator";var v=e.forwardRef(({className:t,...o},a$1)=>e.createElement(Command.Item,{ref:a$1,className:a("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none","data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground","data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50","[&_svg]:pointer-events-none [&_svg]:h-4 [&_svg]:w-4 [&_svg]:shrink-0",t),...o}));v.displayName="CommandItem";var P=e.forwardRef(({className:t,...o},a$1)=>e.createElement("span",{ref:a$1,"aria-hidden":"true",className:a("ml-auto text-xs tracking-widest text-muted-foreground",t),...o}));P.displayName="CommandShortcut";var N=e.forwardRef(({className:t,...o},a$1)=>e.createElement(Command.Loading,{ref:a$1,className:a("py-6 text-center text-sm text-muted-foreground",t),...o}));N.displayName="CommandLoading";export{f as a,g as b,C as c,R as d,y as e,x as f,h as g,v as h,P as i,N as j};//# sourceMappingURL=chunk-PLEQSJHY.js.map
3
+ //# sourceMappingURL=chunk-PLEQSJHY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/command.tsx"],"names":["Command","className","props","ref","CommandPrimitive","cn","CommandDialog","title","description","children","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","CommandInput","MagnifyingGlass","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","CommandLoading"],"mappings":"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","file":"chunk-PLEQSJHY.js","sourcesContent":["import * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { MagnifyingGlass } from \"phosphor-react\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\";\n\n/**\n * A searchable list of things to do: a command palette, or the list inside a\n * combobox.\n *\n * Built on [cmdk](https://cmdk.paco.me/), which owns the filtering, the scoring\n * and the keyboard model.\n *\n * ## Not a DropdownMenu\n *\n * A `DropdownMenu` is a menu: `role=\"menu\"`, items you activate, no typing. This\n * is a combobox over a listbox - the input is `role=\"combobox\"` and the items are\n * `role=\"option\"` - which is what a screen reader needs to hear when the list\n * narrows as you type. Filtering a menu would leave a screen reader announcing a\n * menu whose contents silently change underneath it.\n *\n * So: choosing from a short fixed set of commands is `DropdownMenu`; searching is\n * this.\n *\n * ## Filtering is cmdk's, and is not substring matching\n *\n * cmdk scores each item against the query with a fuzzy match, so \"gh\" finds\n * \"GitHub\" and the best match sorts first. Items are matched on their `value`,\n * which defaults to their text. Give `value` explicitly when the text is not what\n * someone would type, or add `keywords` for synonyms.\n *\n * Pass `shouldFilter={false}` on `Command` when the list comes from a server and\n * is already filtered, otherwise cmdk filters the results a second time.\n */\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground\",\n className,\n )}\n {...props}\n />\n));\nCommand.displayName = \"Command\";\n\nexport interface CommandDialogProps extends React.ComponentPropsWithoutRef<\n typeof Dialog\n> {\n /**\n * The dialog's accessible name. Rendered visually hidden, because a command\n * palette shows a search field rather than a heading, and a dialog with no\n * name is announced as just \"dialog\".\n */\n title?: string;\n /** Visually hidden description, announced after the title. */\n description?: string;\n className?: string;\n}\n\n/**\n * The palette form: the same `Command`, in a dialog.\n *\n * The title and description are real elements, visually hidden, and they live\n * *inside* `DialogContent` where the labelling can resolve. The corner close\n * button is turned off: it is positioned at the top right, which is where the\n * search field is.\n */\nconst CommandDialog = ({\n title = \"Command palette\",\n description = \"Search for a command to run\",\n children,\n className,\n ...props\n}: CommandDialogProps) => (\n <Dialog {...props}>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={false}\n size=\"sm\"\n >\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <Command>{children}</Command>\n </DialogContent>\n </Dialog>\n);\nCommandDialog.displayName = \"CommandDialog\";\n\n/**\n * The search field.\n *\n * Wrapped in a row with the icon, so the icon is a sibling rather than a\n * background image and can be sized with the text.\n */\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center gap-2 border-b border-border px-3\">\n <MagnifyingGlass\n className=\"h-4 w-4 shrink-0 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-11 w-full bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n </div>\n));\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-y-auto overflow-x-hidden\",\n className,\n )}\n {...props}\n />\n));\nCommandList.displayName = \"CommandList\";\n\n/**\n * What to show when nothing matches.\n *\n * cmdk renders it only when the query has no results, so it is not a fallback\n * for an empty list - an empty `Command` with no query shows nothing.\n */\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className={cn(\"py-6 text-center text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nCommandEmpty.displayName = \"CommandEmpty\";\n\n/**\n * A named section. Hides itself when the query filters all of its items out, so\n * you do not get a heading over nothing.\n */\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground\",\n \"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nCommandGroup.displayName = \"CommandGroup\";\n\n/**\n * A line between groups, hidden from the accessibility tree.\n *\n * A `listbox` may only contain `option` and `group` children, and cmdk gives its\n * separator `role=\"separator\"`, which makes the list an `aria-required-children`\n * violation - axe flags the list, not the separator, so it reads like a problem\n * with the list. `role` cannot be overridden: cmdk writes it after the prop\n * spread. `aria-hidden` is the fix, and it is also the honest description. The\n * line is decoration; the group headings are what convey the split.\n */\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\"-mx-1 h-px bg-border\", className)}\n {...props}\n />\n));\nCommandSeparator.displayName = \"CommandSeparator\";\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none\",\n // cmdk marks the active item with data-selected, keyboard and pointer\n // alike, so hover styling would be a second source of truth.\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground\",\n \"data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:h-4 [&_svg]:w-4 [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n />\n));\nCommandItem.displayName = \"CommandItem\";\n\n/** The keyboard hint on the right of an item. Decorative. */\nconst CommandShortcut = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nCommandShortcut.displayName = \"CommandShortcut\";\n\n/** Shown while results are loading, for a `Command` fed from a server. */\nconst CommandLoading = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Loading>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Loading>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Loading\n ref={ref}\n className={cn(\"py-6 text-center text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nCommandLoading.displayName = \"CommandLoading\";\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n CommandLoading,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {f}from'./chunk-TCA5Z7FL.js';import {b as b$2}from'./chunk-XRVHMGMD.js';import {b,g,h,j as j$1,k}from'./chunk-HCYZ3LZP.js';import {b as b$1}from'./chunk-HD3TMQPR.js';import {b as b$3}from'./chunk-QKM5LPRW.js';import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {Slot}from'@radix-ui/react-slot';import {cva}from'class-variance-authority';import {Sidebar}from'phosphor-react';var _=768;function I(a=_){let t=`(max-width: ${a-1}px)`,r=e.useCallback(o=>{if(typeof window>"u"||!window.matchMedia)return ()=>{};let n=window.matchMedia(t);return n.addEventListener("change",o),()=>n.removeEventListener("change",o)},[t]);return e.useSyncExternalStore(r,()=>typeof window<"u"&&window.matchMedia?window.matchMedia(t).matches:false,()=>false)}var G="sidebar_state",V=3600*24*7,K="16rem",U="18rem",j="3rem",W="b",D=e.createContext(null);function M(){let a=e.useContext(D);if(!a)throw new Error("useSidebar must be used inside a <SidebarProvider>.");return a}var $=e.forwardRef(({defaultOpen:a$1=true,open:t,onOpenChange:r,keyboardShortcut:o=true,className:n,style:s,children:l,...c},d)=>{let b=I(),[m,f]=e.useState(false),[w,P]=e.useState(a$1),g=t??w,h=e.useCallback(u=>{let p=typeof u=="function"?u(g):u;t===void 0&&P(p),r?.(p),document.cookie=`${G}=${p}; path=/; max-age=${V}; SameSite=Lax`;},[g,t,r]),x=e.useCallback(()=>{b?f(u=>!u):h(u=>!u);},[b,h]);e.useEffect(()=>{if(!o)return;let u=p=>{p.key===W&&(p.metaKey||p.ctrlKey)&&(p.preventDefault(),x());};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[o,x]);let L=g?"expanded":"collapsed",k=e.useMemo(()=>({state:L,open:g,setOpen:h,isMobile:b,openMobile:m,setOpenMobile:f,toggleSidebar:x}),[L,g,h,b,m,x]);return e.createElement(D.Provider,{value:k},e.createElement("div",{ref:d,"data-slot":"sidebar-wrapper",style:{"--sidebar-width":K,"--sidebar-width-icon":j,...s},className:a("group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar",n),...c},l))});$.displayName="SidebarProvider";var q=e.forwardRef(({side:a$1="left",variant:t="sidebar",collapsible:r="offcanvas",title:o="Sidebar",description:n="Site navigation",className:s,children:l,...c},d)=>{let{isMobile:b$1,state:m,openMobile:f,setOpenMobile:w}=M();return r==="none"?e.createElement("div",{ref:d,"data-slot":"sidebar",className:a("flex h-full w-[var(--sidebar-width)] flex-col bg-sidebar text-sidebar-foreground",s),...c},l):b$1?e.createElement(b,{open:f,onOpenChange:w},e.createElement(g,{ref:d,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",side:a$1,className:"w-[var(--sidebar-width)] bg-sidebar p-0 text-sidebar-foreground",style:{"--sidebar-width":U}},e.createElement(h,{className:"sr-only"},e.createElement(j$1,null,o),e.createElement(k,null,n)),e.createElement("div",{className:"flex h-full w-full flex-col"},l))):e.createElement("div",{ref:d,className:"group peer hidden text-sidebar-foreground md:block","data-state":m,"data-collapsible":m==="collapsed"?r:"","data-variant":t,"data-side":a$1,"data-slot":"sidebar"},e.createElement("div",{"data-slot":"sidebar-gap",className:a("relative w-[var(--sidebar-width)] bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",t==="floating"||t==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+1rem)]":"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)]")}),e.createElement("div",{"data-slot":"sidebar-container",className:a("fixed inset-y-0 z-10 hidden h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200 ease-linear md:flex",a$1==="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)]",t==="floating"||t==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+1rem+2px)]":"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)] group-data-[side=left]:border-r group-data-[side=right]:border-l group-data-[side=left]:border-sidebar-border group-data-[side=right]:border-sidebar-border",s),...c},e.createElement("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-md"},l)))});q.displayName="Sidebar";var F=e.forwardRef(({className:a$1,onClick:t,label:r="Toggle sidebar",...o},n)=>{let{toggleSidebar:s,open:l,isMobile:c,openMobile:d}=M();return e.createElement("button",{ref:n,type:"button","data-sidebar":"trigger","data-slot":"sidebar-trigger","aria-expanded":c?d:l,className:a("inline-flex h-7 w-7 items-center justify-center rounded-md text-sidebar-foreground transition-colors","hover:bg-sidebar-accent hover:text-sidebar-accent-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",a$1),onClick:b=>{t?.(b),b.defaultPrevented||s();},...o},e.createElement(Sidebar,{className:"h-4 w-4","aria-hidden":"true"}),e.createElement("span",{className:"sr-only"},r))});F.displayName="SidebarTrigger";var X=e.forwardRef(({className:a$1,label:t="Toggle sidebar",...r},o)=>{let{toggleSidebar:n}=M();return e.createElement("button",{ref:o,type:"button","data-sidebar":"rail","data-slot":"sidebar-rail","aria-label":t,title:t,tabIndex:-1,onClick:n,className:a("absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex","group-data-[side=left]:-right-4 group-data-[side=right]:left-0","after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border","group-data-[side=left]:cursor-w-resize group-data-[side=right]:cursor-e-resize","group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full","hover:group-data-[collapsible=offcanvas]:bg-sidebar",a$1),...r})});X.displayName="SidebarRail";var Y=e.forwardRef(({className:a$1,...t},r)=>e.createElement("main",{ref:r,"data-slot":"sidebar-inset",className:a("relative flex w-full flex-1 flex-col bg-background","md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-md","md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",a$1),...t}));Y.displayName="SidebarInset";var J=e.forwardRef(({className:a$1,...t},r)=>e.createElement(b$1,{ref:r,"data-sidebar":"input",className:a("h-8 w-full bg-background shadow-none",a$1),...t}));J.displayName="SidebarInput";var Q=e.forwardRef(({className:a$1,...t},r)=>e.createElement("div",{ref:r,"data-sidebar":"header",className:a("flex flex-col gap-2 p-2",a$1),...t}));Q.displayName="SidebarHeader";var Z=e.forwardRef(({className:a$1,...t},r)=>e.createElement("div",{ref:r,"data-sidebar":"footer",className:a("mt-auto flex flex-col gap-2 p-2",a$1),...t}));Z.displayName="SidebarFooter";var ee=e.forwardRef(({className:a$1,...t},r)=>e.createElement(b$2,{ref:r,"data-sidebar":"separator",className:a("mx-2 w-auto bg-sidebar-border",a$1),...t}));ee.displayName="SidebarSeparator";var te=e.forwardRef(({className:a$1,...t},r)=>e.createElement("div",{ref:r,"data-sidebar":"content",className:a("flex min-h-0 flex-1 flex-col gap-2 overflow-auto","group-data-[collapsible=icon]:overflow-hidden",a$1),...t}));te.displayName="SidebarContent";var ae=e.forwardRef(({className:a$1,...t},r)=>e.createElement("div",{ref:r,"data-sidebar":"group",className:a("relative flex w-full min-w-0 flex-col p-2",a$1),...t}));ae.displayName="SidebarGroup";var re=e.forwardRef(({className:a$1,asChild:t=false,...r},o)=>e.createElement(t?Slot:"div",{ref:o,"data-sidebar":"group-label",className:a("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 transition-[margin,opacity] duration-200 ease-linear","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring","[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",a$1),...r}));re.displayName="SidebarGroupLabel";var ie=e.forwardRef(({className:a$1,asChild:t=false,...r},o)=>e.createElement(t?Slot:"button",{ref:o,"data-sidebar":"group-action",className:a("absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground transition-transform","hover:bg-sidebar-accent hover:text-sidebar-accent-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring","[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0","after:absolute after:-inset-2 md:after:hidden","group-data-[collapsible=icon]:hidden",a$1),...r}));ie.displayName="SidebarGroupAction";var oe=e.forwardRef(({className:a$1,...t},r)=>e.createElement("div",{ref:r,"data-sidebar":"group-content",className:a("w-full text-sm",a$1),...t}));oe.displayName="SidebarGroupContent";var ne=e.forwardRef(({className:a$1,...t},r)=>e.createElement("ul",{ref:r,"data-sidebar":"menu",className:a("flex w-full min-w-0 flex-col gap-1",a$1),...t}));ne.displayName="SidebarMenu";var se=e.forwardRef(({className:a$1,...t},r)=>e.createElement("li",{ref:r,"data-sidebar":"menu-item",className:a("group/menu-item relative",a$1),...t}));se.displayName="SidebarMenuItem";var de=cva("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring 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 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-has-[[data-sidebar=menu-action]]/menu-item:pr-8 group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0",{variants:{variant:{default:"",outline:"bg-background shadow-[0_0_0_1px_hsl(var(--nostromo-color-sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--nostromo-color-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"}}),le=e.forwardRef(({asChild:a$1=false,isActive:t=false,variant:r,size:o="default",tooltip:n,className:s,...l},c)=>{let{isMobile:d,state:b}=M(),f$1=e.createElement(a$1?Slot:"button",{ref:c,"data-sidebar":"menu-button","data-size":o,"data-active":t,"aria-current":t?"page":void 0,className:a(de({variant:r,size:o}),s),...l});return !n||b!=="collapsed"||d?f$1:e.createElement(f,{content:n,placement:"right"},f$1)});le.displayName="SidebarMenuButton";var ce=e.forwardRef(({className:a$1,asChild:t=false,showOnHover:r=false,...o},n)=>e.createElement(t?Slot:"button",{ref:n,"data-sidebar":"menu-action",className:a("absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground transition-transform","peer-hover/menu-button:text-sidebar-accent-foreground","hover:bg-sidebar-accent hover:text-sidebar-accent-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring","[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0","after:absolute after:-inset-2 md:after: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",r&&"md:opacity-0 group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100",a$1),...o}));ce.displayName="SidebarMenuAction";var be=e.forwardRef(({className:a$1,...t},r)=>e.createElement("div",{ref:r,"data-sidebar":"menu-badge",className:a("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",a$1),...t}));be.displayName="SidebarMenuBadge";var ue=e.forwardRef(({className:a$1,showIcon:t=false,width:r,...o},n)=>{let s=e.useId(),l=e.useMemo(()=>{if(r!==void 0)return r;let c=0;for(let d=0;d<s.length;d++)c=c*31+s.charCodeAt(d)|0;return 40+Math.abs(c)%51},[s,r]);return e.createElement("div",{ref:n,"data-sidebar":"menu-skeleton",className:a("flex h-8 items-center gap-2 rounded-md px-2",a$1),...o},t&&e.createElement(b$3,{className:"h-4 w-4 shrink-0 rounded-md"}),e.createElement(b$3,{className:"h-4",width:`${l}%`}))});ue.displayName="SidebarMenuSkeleton";var pe=e.forwardRef(({className:a$1,...t},r)=>e.createElement("ul",{ref:r,"data-sidebar":"menu-sub",className:a("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",a$1),...t}));pe.displayName="SidebarMenuSub";var fe=e.forwardRef(({className:a$1,...t},r)=>e.createElement("li",{ref:r,"data-sidebar":"menu-sub-item",className:a("group/menu-sub-item relative",a$1),...t}));fe.displayName="SidebarMenuSubItem";var me=e.forwardRef(({asChild:a$1=false,size:t="md",isActive:r=false,className:o,...n},s)=>e.createElement(a$1?Slot:"a",{ref:s,"data-sidebar":"menu-sub-button","data-size":t,"data-active":r,"aria-current":r?"page":void 0,className:a("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground","hover:bg-sidebar-accent hover:text-sidebar-accent-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring","active:bg-sidebar-accent active:text-sidebar-accent-foreground","aria-disabled:pointer-events-none aria-disabled:opacity-50","data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground","[&>span:last-child]:truncate [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0",t==="sm"&&"text-xs",t==="md"&&"text-sm","group-data-[collapsible=icon]:hidden",o),...n}));me.displayName="SidebarMenuSubButton";export{me as A,_ as a,I as b,M as c,$ as d,q as e,F as f,X as g,Y as h,J as i,Q as j,Z as k,ee as l,te as m,ae as n,re as o,ie as p,oe as q,ne as r,se as s,de as t,le as u,ce as v,be as w,ue as x,pe as y,fe as z};//# sourceMappingURL=chunk-QESG3HCL.js.map
3
+ //# sourceMappingURL=chunk-QESG3HCL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-is-mobile.ts","../src/components/core/sidebar.tsx"],"names":["MOBILE_BREAKPOINT","useIsMobile","breakpoint","query","subscribe","S","onStoreChange","list","SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","useSidebar","context","SidebarProvider","defaultOpen","openProp","onOpenChange","keyboardShortcut","className","style","children","props","ref","isMobile","openMobile","setOpenMobile","uncontrolledOpen","setUncontrolledOpen","open","setOpen","value","next","toggleSidebar","current","handleKeyDown","event","state","cn","Sidebar","side","variant","collapsible","title","description","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","SidebarTrigger","onClick","label","SidebarIcon","SidebarRail","SidebarInset","SidebarInput","Input","SidebarHeader","SidebarFooter","SidebarSeparator","Separator","SidebarContent","SidebarGroup","SidebarGroupLabel","asChild","Slot","SidebarGroupAction","SidebarGroupContent","SidebarMenu","SidebarMenuItem","sidebarMenuButtonVariants","cva","SidebarMenuButton","isActive","size","tooltip","button","Tooltip","SidebarMenuAction","showOnHover","SidebarMenuBadge","SidebarMenuSkeleton","showIcon","width","id","derived","hash","i","Skeleton","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuSubButton"],"mappings":"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","file":"chunk-QESG3HCL.js","sourcesContent":["import * as React from \"react\";\n\n/**\n * The width below which a layout should switch to its narrow form.\n *\n * 768px, matching Tailwind's `md`, so a component that branches in JS and a\n * class that branches in CSS agree about where the break is.\n */\nexport const MOBILE_BREAKPOINT = 768;\n\n/**\n * True while the viewport is narrower than {@link MOBILE_BREAKPOINT}.\n *\n * Some things cannot be done in CSS. `Sidebar` renders a `Sheet` on a phone and\n * a fixed column on a desktop, which is a different tree, not a different set of\n * classes - so the branch has to happen in JS.\n *\n * Built on `useSyncExternalStore` rather than an effect that copies the match\n * into state. The effect version renders once with the wrong answer, and prefer\n * anything that reads a live browser value to be read rather than mirrored.\n * `false` is the server snapshot: a layout that assumes desktop and corrects on\n * hydration is the safer of the two guesses, since the mobile branch is a\n * portalled dialog.\n */\nexport function useIsMobile(breakpoint: number = MOBILE_BREAKPOINT): boolean {\n const query = `(max-width: ${breakpoint - 1}px)`;\n\n const subscribe = React.useCallback(\n (onStoreChange: () => void) => {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const list = window.matchMedia(query);\n list.addEventListener(\"change\", onStoreChange);\n return () => list.removeEventListener(\"change\", onStoreChange);\n },\n [query],\n );\n\n return React.useSyncExternalStore(\n subscribe,\n () =>\n typeof window !== \"undefined\" && window.matchMedia\n ? window.matchMedia(query).matches\n : false,\n () => false,\n );\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Sidebar as SidebarIcon } from \"phosphor-react\";\n\nimport { useIsMobile } from \"../../hooks/use-is-mobile\";\nimport { cn } from \"../../lib/utils\";\nimport { Input } from \"./input\";\nimport { Separator } from \"./separator\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet\";\nimport { Skeleton } from \"./skeleton\";\nimport { Tooltip } from \"./tooltip\";\n\n/**\n * An application sidebar: a collapsible navigation column, with a phone form and\n * a desktop form.\n *\n * The largest component here, and mostly layout. Three things are worth reading\n * before using it.\n *\n * ## The phone form is a different tree, not different classes\n *\n * Below 768px a `Sidebar` is a `Sheet` - a modal panel over the page. Above it,\n * a fixed column beside the page. Those are different elements with different\n * semantics, so the branch is in JS (`useIsMobile`) rather than in CSS. It also\n * means the open state is two states: `open` for the column, `openMobile` for the\n * sheet, and `toggleSidebar` picks the one that applies.\n *\n * ## State goes in a cookie, and the server has to read it\n *\n * Collapsing the sidebar writes `sidebar_state`. That is what stops it flashing\n * open on every navigation in a server-rendered app - but only if the server\n * passes it back in as `defaultOpen`. Nothing here can do that for you; read the\n * cookie in your layout. Left alone, the cookie is written and never read, and\n * the sidebar starts expanded every time.\n *\n * ## Sidebar colours are their own token family\n *\n * `bg-sidebar`, `text-sidebar-foreground`, `border-sidebar-border`,\n * `bg-sidebar-accent` and `ring-sidebar-ring`, so a sidebar can be a different\n * surface from a card. Every theme defaults them to that theme's card, accent,\n * border and ring, so nothing changes until you override them.\n *\n * ## Tailwind 4.0 syntax only\n *\n * The package declares `tailwindcss ^4.0.0`, so the classes below stick to what\n * 4.0 understands: `w-[var(--sidebar-width)]` rather than the 4.1 shorthand\n * `w-(--sidebar-width)`, and literal lengths rather than `--spacing()`.\n * A consumer on 4.0 would otherwise get a sidebar with no width.\n */\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ninterface SidebarContextValue {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\nfunction useSidebar(): SidebarContextValue {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used inside a <SidebarProvider>.\");\n }\n return context;\n}\n\nexport interface SidebarProviderProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Whether the desktop sidebar starts expanded.\n *\n * Pass the `sidebar_state` cookie's value here on the server, or the sidebar\n * will flash open on every page load for anyone who collapsed it.\n */\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * Install the ⌘B / Ctrl+B shortcut. Defaults to true. Turn it off if the key\n * is already taken by something in your app.\n */\n keyboardShortcut?: boolean;\n}\n\nconst SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n keyboardShortcut = true,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const open = openProp ?? uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (value: boolean | ((current: boolean) => boolean)) => {\n const next = typeof value === \"function\" ? value(open) : value;\n if (openProp === undefined) setUncontrolledOpen(next);\n onOpenChange?.(next);\n // Persisted so a server-rendered app can render the right width on the\n // first paint. It is only useful if the server reads it back.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${next}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}; SameSite=Lax`;\n },\n [open, openProp, onOpenChange],\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) setOpenMobile((current) => !current);\n else setOpen((current) => !current);\n }, [isMobile, setOpen]);\n\n React.useEffect(() => {\n if (!keyboardShortcut) return;\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 window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [keyboardShortcut, toggleSidebar]);\n\n const state = open ? \"expanded\" : \"collapsed\";\n\n const value = React.useMemo<SidebarContextValue>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={value}>\n <div\n ref={ref}\n data-slot=\"sidebar-wrapper\"\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 {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n },\n);\nSidebarProvider.displayName = \"SidebarProvider\";\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n /**\n * What collapsing does. `offcanvas` slides it off the edge, `icon` shrinks it\n * to a strip of icons, `none` makes it a plain fixed column.\n */\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n /** Accessible name for the phone sheet. */\n title?: string;\n /** Description for the phone sheet, announced after the title. */\n description?: string;\n}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(\n (\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n title = \"Sidebar\",\n description = \"Site navigation\",\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n ref={ref}\n data-slot=\"sidebar\"\n className={cn(\n \"flex h-full w-[var(--sidebar-width)] flex-col bg-sidebar text-sidebar-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile}>\n <SheetContent\n ref={ref}\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n side={side}\n className=\"w-[var(--sidebar-width)] bg-sidebar p-0 text-sidebar-foreground\"\n style={\n { \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE } as React.CSSProperties\n }\n >\n {/* A sidebar has no visible heading, and a dialog with no name is\n announced as \"dialog\". Hidden rather than absent. */}\n <SheetHeader className=\"sr-only\">\n <SheetTitle>{title}</SheetTitle>\n <SheetDescription>{description}</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 <div\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 data-slot=\"sidebar\"\n >\n {/* Holds the space the fixed column occupies, so the page content is not\n underneath it. The column itself is position: fixed and takes no\n room. */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-[var(--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)+1rem)]\"\n : \"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)]\",\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-[var(--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)+1rem+2px)]\"\n : \"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)] group-data-[side=left]:border-r group-data-[side=right]:border-l group-data-[side=left]:border-sidebar-border group-data-[side=right]:border-sidebar-border\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-md\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\nSidebar.displayName = \"Sidebar\";\n\nconst SidebarTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { label?: string }\n>(({ className, onClick, label = \"Toggle sidebar\", ...props }, ref) => {\n const { toggleSidebar, open, isMobile, openMobile } = useSidebar();\n return (\n <button\n ref={ref}\n type=\"button\"\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n // Announces the state, not just the action, so a screen reader user knows\n // whether pressing it opens or closes.\n aria-expanded={isMobile ? openMobile : open}\n className={cn(\n \"inline-flex h-7 w-7 items-center justify-center rounded-md text-sidebar-foreground transition-colors\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) toggleSidebar();\n }}\n {...props}\n >\n <SidebarIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n <span className=\"sr-only\">{label}</span>\n </button>\n );\n});\nSidebarTrigger.displayName = \"SidebarTrigger\";\n\n/**\n * The thin strip along the sidebar's edge that toggles it.\n *\n * `tabIndex={-1}` on purpose: it does the same thing as `SidebarTrigger`, and two\n * tab stops for one action is worse than one. It is a mouse shortcut, and the\n * button is the keyboard route.\n */\nconst SidebarRail = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { label?: string }\n>(({ className, label = \"Toggle sidebar\", ...props }, ref) => {\n const { toggleSidebar } = useSidebar();\n return (\n <button\n ref={ref}\n type=\"button\"\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label={label}\n title={label}\n tabIndex={-1}\n onClick={toggleSidebar}\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex\",\n \"group-data-[side=left]:-right-4 group-data-[side=right]:left-0\",\n \"after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border\",\n \"group-data-[side=left]:cursor-w-resize group-data-[side=right]:cursor-e-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarRail.displayName = \"SidebarRail\";\n\n/** The page beside the sidebar. A `<main>`, so it is a landmark. */\nconst SidebarInset = React.forwardRef<\n HTMLElement,\n React.HTMLAttributes<HTMLElement>\n>(({ className, ...props }, ref) => (\n <main\n ref={ref}\n data-slot=\"sidebar-inset\"\n className={cn(\n \"relative flex w-full flex-1 flex-col bg-background\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-md\",\n \"md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className,\n )}\n {...props}\n />\n));\nSidebarInset.displayName = \"SidebarInset\";\n\nconst SidebarInput = React.forwardRef<\n React.ElementRef<typeof Input>,\n React.ComponentPropsWithoutRef<typeof Input>\n>(({ className, ...props }, ref) => (\n <Input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background shadow-none\", className)}\n {...props}\n />\n));\nSidebarInput.displayName = \"SidebarInput\";\n\nconst SidebarHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n));\nSidebarHeader.displayName = \"SidebarHeader\";\n\nconst SidebarFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n));\nSidebarFooter.displayName = \"SidebarFooter\";\n\nconst SidebarSeparator = React.forwardRef<\n React.ElementRef<typeof Separator>,\n React.ComponentPropsWithoutRef<typeof Separator>\n>(({ className, ...props }, ref) => (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n));\nSidebarSeparator.displayName = \"SidebarSeparator\";\n\nconst SidebarContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\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\",\n // Hidden rather than scrolled when the sidebar is a strip of icons: a\n // scrollbar in a 3rem column is not usable.\n \"group-data-[collapsible=icon]:overflow-hidden\",\n className,\n )}\n {...props}\n />\n));\nSidebarContent.displayName = \"SidebarContent\";\n\nconst SidebarGroup = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n));\nSidebarGroup.displayName = \"SidebarGroup\";\n\nexport interface SidebarGroupLabelProps extends React.HTMLAttributes<HTMLDivElement> {\n asChild?: boolean;\n}\n\nconst SidebarGroupLabel = React.forwardRef<\n HTMLDivElement,\n SidebarGroupLabelProps\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"div\";\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 px-2 text-xs font-medium text-sidebar-foreground/70 transition-[margin,opacity] duration-200 ease-linear\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n \"[&>svg]:h-4 [&>svg]:w-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\nexport interface SidebarGroupActionProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean;\n}\n\nconst SidebarGroupAction = React.forwardRef<\n HTMLButtonElement,\n SidebarGroupActionProps\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\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 transition-transform\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n \"[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0\",\n // A 20px target is under the 24px minimum, so the hit area is grown\n // where there is no cursor to aim with.\n \"after:absolute after:-inset-2 md:after: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.HTMLAttributes<HTMLDivElement>\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\n/** The navigation list. A real `<ul>`, so it is announced with a length. */\nconst SidebarMenu = React.forwardRef<\n HTMLUListElement,\n React.HTMLAttributes<HTMLUListElement>\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.HTMLAttributes<HTMLLIElement>\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 transition-[width,height,padding] \" +\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground \" +\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring \" +\n \"active:bg-sidebar-accent active:text-sidebar-accent-foreground \" +\n \"disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 \" +\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground \" +\n \"data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground \" +\n \"group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 \" +\n \"group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 \" +\n \"[&>span:last-child]:truncate [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--nostromo-color-sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--nostromo-color-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: { variant: \"default\", size: \"default\" },\n },\n);\n\nexport interface SidebarMenuButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof sidebarMenuButtonVariants> {\n asChild?: boolean;\n /**\n * Marks the current page. Sets `data-active`, and `aria-current=\"page\"` -\n * highlighting the current item is not the same as telling a screen reader\n * which one it is.\n */\n isActive?: boolean;\n /**\n * Label to show while the sidebar is collapsed to icons, where the text is\n * hidden. Ignored when it is expanded, and on a phone where it is never\n * collapsed.\n */\n tooltip?: string;\n}\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n SidebarMenuButtonProps\n>(\n (\n {\n asChild = false,\n isActive = false,\n variant,\n size = \"default\",\n tooltip,\n className,\n ...props\n },\n ref,\n ) => {\n const { isMobile, state } = useSidebar();\n const Comp = asChild ? Slot : \"button\";\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n aria-current={isActive ? \"page\" : undefined}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n // Only useful when the label is hidden. A tooltip repeating text that is\n // already on screen is noise.\n if (!tooltip || state !== \"collapsed\" || isMobile) return button;\n\n return (\n <Tooltip content={tooltip} placement=\"right\">\n {button}\n </Tooltip>\n );\n },\n);\nSidebarMenuButton.displayName = \"SidebarMenuButton\";\n\nexport interface SidebarMenuActionProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean;\n /** Only show it on hover or focus within the item. */\n showOnHover?: boolean;\n}\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n SidebarMenuActionProps\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\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 transition-transform\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n \"[&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 md:after: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 // Focus-within as well as hover, or it would be unreachable by keyboard.\n showOnHover &&\n \"md:opacity-0 group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuAction.displayName = \"SidebarMenuAction\";\n\nconst SidebarMenuBadge = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\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\nexport interface SidebarMenuSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n showIcon?: boolean;\n /**\n * Width of the text bar, as a percentage between 40 and 90.\n *\n * Varying it makes a loading list look like a list of names rather than a\n * stack of identical bars. Left out, it is derived from React's own id for\n * this element, which is stable between the server and the client - shadcn's\n * version calls Math.random() here, which renders one width on the server and\n * a different one on the client and so trips hydration.\n */\n width?: number;\n}\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n SidebarMenuSkeletonProps\n>(({ className, showIcon = false, width, ...props }, ref) => {\n const id = React.useId();\n const derived = React.useMemo(() => {\n if (width !== undefined) return width;\n let hash = 0;\n for (let i = 0; i < id.length; i++)\n hash = (hash * 31 + id.charCodeAt(i)) | 0;\n return 40 + (Math.abs(hash) % 51);\n }, [id, width]);\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 && <Skeleton className=\"h-4 w-4 shrink-0 rounded-md\" />}\n {/* Width through Skeleton's own prop rather than a style: it does not take\n arbitrary DOM attributes. */}\n <Skeleton className=\"h-4\" width={`${derived}%`} />\n </div>\n );\n});\nSidebarMenuSkeleton.displayName = \"SidebarMenuSkeleton\";\n\nconst SidebarMenuSub = React.forwardRef<\n HTMLUListElement,\n React.HTMLAttributes<HTMLUListElement>\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.HTMLAttributes<HTMLLIElement>\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n));\nSidebarMenuSubItem.displayName = \"SidebarMenuSubItem\";\n\nexport interface SidebarMenuSubButtonProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n}\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n SidebarMenuSubButtonProps\n>(\n (\n { asChild = false, size = \"md\", isActive = false, className, ...props },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n aria-current={isActive ? \"page\" : undefined}\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\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n \"active:bg-sidebar-accent active:text-sidebar-accent-foreground\",\n \"aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n \"[&>span:last-child]:truncate [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarMenuSubButton.displayName = \"SidebarMenuSubButton\";\n\nexport {\n Sidebar,\n SidebarProvider,\n SidebarTrigger,\n SidebarRail,\n SidebarInset,\n SidebarInput,\n SidebarHeader,\n SidebarFooter,\n SidebarSeparator,\n SidebarContent,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubItem,\n SidebarMenuSubButton,\n sidebarMenuButtonVariants,\n useSidebar,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {Drawer}from'vaul';var R=Drawer.Root,b=Drawer.Trigger,w=Drawer.Portal,g=Drawer.Close,d=e.forwardRef(({className:t,...r},a$1)=>e.createElement(Drawer.Handle,{ref:a$1,className:a("mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted",t),...r}));d.displayName="DrawerHandle";var n=e.forwardRef(({className:t,...r},a$1)=>e.createElement(Drawer.Overlay,{ref:a$1,className:a("fixed inset-0 z-40 bg-black/50 backdrop-blur-sm","data-[state=open]:animate-in data-[state=open]:fade-in-0","data-[state=closed]:animate-out data-[state=closed]:fade-out-0",t),...r}));n.displayName="DrawerOverlay";var m=e.forwardRef(({className:t,children:r,withHandle:a$1=true,...l},c)=>e.createElement(w,null,e.createElement(n,null),e.createElement(Drawer.Content,{ref:c,className:a("group/drawer-content fixed z-50 flex h-auto flex-col border-border bg-background","data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b","data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t","data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm","data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm",t),...l},a$1&&e.createElement(d,{className:"hidden group-data-[vaul-drawer-direction=bottom]/drawer-content:block group-data-[vaul-drawer-direction=top]/drawer-content:mb-4 group-data-[vaul-drawer-direction=top]/drawer-content:mt-0 group-data-[vaul-drawer-direction=top]/drawer-content:block"}),r)));m.displayName="DrawerContent";var s=e.forwardRef(({className:t,...r},a$1)=>e.createElement("div",{ref:a$1,className:a("flex flex-col gap-1.5 p-4","group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center","md:text-left",t),...r}));s.displayName="DrawerHeader";var f=e.forwardRef(({className:t,...r},a$1)=>e.createElement("div",{ref:a$1,className:a("mt-auto flex flex-col gap-2 p-4",t),...r}));f.displayName="DrawerFooter";var p=e.forwardRef(({className:t,...r},a$1)=>e.createElement(Drawer.Title,{ref:a$1,className:a("text-lg font-semibold leading-none tracking-tight text-foreground",t),...r}));p.displayName="DrawerTitle";var u=e.forwardRef(({className:t,...r},a$1)=>e.createElement(Drawer.Description,{ref:a$1,className:a("text-sm text-muted-foreground",t),...r}));u.displayName="DrawerDescription";var x=Drawer.NestedRoot;export{R as a,b,w as c,g as d,d as e,n as f,m as g,s as h,f as i,p as j,u as k,x as l};//# sourceMappingURL=chunk-QQTI6OI3.js.map
3
+ //# sourceMappingURL=chunk-QQTI6OI3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/drawer.tsx"],"names":["Drawer","DrawerPrimitive","DrawerTrigger","DrawerPortal","DrawerClose","DrawerHandle","className","props","ref","cn","DrawerOverlay","DrawerContent","children","withHandle","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription","DrawerNested"],"mappings":"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","file":"chunk-QQTI6OI3.js","sourcesContent":["import * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\n\nimport { cn } from \"../../lib/utils\";\n\n/**\n * A panel that slides in from an edge and can be dragged shut.\n *\n * Built on [vaul](https://vaul.emilkowal.ski/), which is a Radix Dialog\n * underneath - the same primitive `Sheet` uses, so the focus trap and the escape\n * handling come from the same place.\n *\n * ## Drawer or Sheet?\n *\n * They look alike, and the difference is the gesture:\n *\n * - `Sheet` is a dialog anchored to an edge. It opens and closes, and that is\n * all. Cheaper, and the right choice on a desktop-first surface.\n * - `Drawer` adds the touch model: drag it to dismiss, snap points to open it\n * part of the way, and a grabber that says it can be moved. That is the mobile\n * convention, and it costs the extra dependency.\n *\n * If you would not use the drag, use `Sheet`.\n *\n * One difference in how they are modal: vaul does not put `aria-modal` on the\n * dialog. It aria-hides the rest of the page instead, which confines a screen\n * reader the same way. Both are valid, and this one is pinned by a test so it\n * cannot quietly become neither.\n *\n * ## Positioning comes from a data attribute\n *\n * `direction` is a prop on the root, and vaul writes it onto the content as\n * `data-vaul-drawer-direction`. The content styling below reads that rather than\n * taking a variant of its own, so the two can never disagree - the drawer cannot\n * be told to come from the left and then be styled along the bottom.\n */\n\nconst Drawer = DrawerPrimitive.Root;\nconst DrawerTrigger = DrawerPrimitive.Trigger;\nconst DrawerPortal = DrawerPrimitive.Portal;\nconst DrawerClose = DrawerPrimitive.Close;\n\n/**\n * The grabber.\n *\n * vaul's own, not a decorative div: it carries a hit area larger than the bar you\n * see, so the drag target is a reasonable size on a touch screen, and it is\n * `aria-hidden` because dragging is not the only way to close.\n */\nconst DrawerHandle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Handle>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Handle>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Handle\n ref={ref}\n className={cn(\n \"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\",\n className,\n )}\n {...props}\n />\n));\nDrawerHandle.displayName = \"DrawerHandle\";\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n className,\n )}\n {...props}\n />\n));\nDrawerOverlay.displayName = \"DrawerOverlay\";\n\nexport interface DrawerContentProps extends React.ComponentPropsWithoutRef<\n typeof DrawerPrimitive.Content\n> {\n /**\n * Draw the grabber. Defaults to true, and it is hidden by CSS for a drawer\n * coming from the left or right, where a horizontal bar would be wrong.\n */\n withHandle?: boolean;\n}\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n DrawerContentProps\n>(({ className, children, withHandle = true, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n // The group is what lets the header and the grabber react to the\n // direction without being told it separately.\n \"group/drawer-content fixed z-50 flex h-auto flex-col border-border bg-background\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n className,\n )}\n {...props}\n >\n {withHandle && (\n <DrawerHandle className=\"hidden group-data-[vaul-drawer-direction=bottom]/drawer-content:block group-data-[vaul-drawer-direction=top]/drawer-content:mb-4 group-data-[vaul-drawer-direction=top]/drawer-content:mt-0 group-data-[vaul-drawer-direction=top]/drawer-content:block\" />\n )}\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-1.5 p-4\",\n // Centred when it comes from an edge you look down at, left-aligned when it\n // is a side panel and reads like a page.\n \"group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center\",\n \"md:text-left\",\n className,\n )}\n {...props}\n />\n));\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n));\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight text-foreground\",\n className,\n )}\n {...props}\n />\n));\nDrawerTitle.displayName = \"DrawerTitle\";\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = \"DrawerDescription\";\n\n/**\n * A drawer opened from inside another one, which scales the parent back rather\n * than stacking two overlays. Use in place of `Drawer` for the inner one.\n */\nconst DrawerNested = DrawerPrimitive.NestedRoot;\n\nexport {\n Drawer,\n DrawerNested,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHandle,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n"]}