@jarllyng/nostromo 3.15.0 → 3.15.1

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 (37) hide show
  1. package/dist/chunk-6UIT6XQH.cjs +4 -0
  2. package/dist/chunk-6UIT6XQH.cjs.map +1 -0
  3. package/dist/{chunk-BDRP7ALG.cjs → chunk-7AKJCOPP.cjs} +2 -2
  4. package/dist/{chunk-BDRP7ALG.cjs.map → chunk-7AKJCOPP.cjs.map} +1 -1
  5. package/dist/{chunk-A4ODFRMS.js → chunk-7YBS3JIS.js} +2 -2
  6. package/dist/{chunk-A4ODFRMS.js.map → chunk-7YBS3JIS.js.map} +1 -1
  7. package/dist/{chunk-CT6LEOBW.js → chunk-BQPFZMGP.js} +2 -2
  8. package/dist/{chunk-CT6LEOBW.js.map → chunk-BQPFZMGP.js.map} +1 -1
  9. package/dist/{chunk-2JQROMCM.js → chunk-F6CQ5ODU.js} +2 -2
  10. package/dist/{chunk-2JQROMCM.js.map → chunk-F6CQ5ODU.js.map} +1 -1
  11. package/dist/{chunk-7PPAI3MM.cjs → chunk-GEMIO54B.cjs} +2 -2
  12. package/dist/{chunk-7PPAI3MM.cjs.map → chunk-GEMIO54B.cjs.map} +1 -1
  13. package/dist/chunk-O2VT23LK.js +4 -0
  14. package/dist/chunk-O2VT23LK.js.map +1 -0
  15. package/dist/{chunk-4UHGGKCS.cjs → chunk-RKAXTJFB.cjs} +2 -2
  16. package/dist/{chunk-4UHGGKCS.cjs.map → chunk-RKAXTJFB.cjs.map} +1 -1
  17. package/dist/{chunk-NM5NVIAK.js → chunk-RPY5NLM7.js} +2 -2
  18. package/dist/{chunk-NM5NVIAK.js.map → chunk-RPY5NLM7.js.map} +1 -1
  19. package/dist/{chunk-PZLBMQGI.cjs → chunk-RQIC6NLV.cjs} +2 -2
  20. package/dist/{chunk-PZLBMQGI.cjs.map → chunk-RQIC6NLV.cjs.map} +1 -1
  21. package/dist/components/core/alert-dialog.cjs +1 -1
  22. package/dist/components/core/alert-dialog.js +1 -1
  23. package/dist/components/core/button.cjs +1 -1
  24. package/dist/components/core/button.js +1 -1
  25. package/dist/components/core/calendar.cjs +1 -1
  26. package/dist/components/core/calendar.js +1 -1
  27. package/dist/components/core/carousel.cjs +1 -1
  28. package/dist/components/core/carousel.js +1 -1
  29. package/dist/components/marketing/gallery.cjs +1 -1
  30. package/dist/components/marketing/gallery.js +1 -1
  31. package/dist/index.cjs +1 -1
  32. package/dist/index.js +1 -1
  33. package/package.json +1 -1
  34. package/dist/chunk-5PVFLXPO.cjs +0 -4
  35. package/dist/chunk-5PVFLXPO.cjs.map +0 -1
  36. package/dist/chunk-AVTJE2O2.js +0 -4
  37. package/dist/chunk-AVTJE2O2.js.map +0 -1
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {b}from'./chunk-AVTJE2O2.js';import {a}from'./chunk-AC2JBXHQ.js';import e,{useState,useCallback}from'react';import {cva}from'class-variance-authority';var S=cva("grid gap-4",{variants:{columns:{1:"grid-cols-1",2:"grid-cols-1 sm:grid-cols-2",3:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",4:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",5:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5",6:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6"},spacing:{sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8"}},defaultVariants:{columns:3,spacing:"md"}}),q=cva("relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg",{variants:{aspectRatio:{square:"aspect-square",video:"aspect-video",portrait:"aspect-[3/4]",landscape:"aspect-[4/3]",wide:"aspect-[16/9]"},hover:{none:"",scale:"hover:scale-105",zoom:"hover:scale-110",lift:"hover:-translate-y-2"}},defaultVariants:{aspectRatio:"square",hover:"scale"}}),A=cva("fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm",{variants:{animation:{fade:"animate-in fade-in duration-300",slide:"animate-in slide-in-from-bottom duration-300",zoom:"animate-in zoom-in duration-300"}},defaultVariants:{animation:"fade"}}),B=({images:a$1,className:y,itemClassName:k,columns:w=3,spacing:N="md",showLightbox:g=true,lightboxAnimation:I="fade",onImageClick:v,itemHover:V="scale",itemAspectRatio:C="square",showThumbnails:z=false,thumbnailSize:D="md",...P})=>{let[l,r]=useState(null),[i,n]=useState(-1),f=useCallback((t,s)=>{g&&(r(t),n(s)),v?.(t,s);},[g,v]),d=useCallback(()=>{r(null),n(-1);},[]),b$1=useCallback(()=>{if(i>0){let t=i-1;r(a$1[t]||null),n(t);}},[i,a$1]),p=useCallback(()=>{if(i<a$1.length-1){let t=i+1;r(a$1[t]||null),n(t);}},[i,a$1]),G=useCallback(t=>{t.key==="Escape"?d():t.key==="ArrowLeft"?b$1():t.key==="ArrowRight"&&p();},[d,b$1,p]);return e.createElement(e.Fragment,null,e.createElement("div",{className:a(S({columns:w,spacing:N}),y),...P},a$1.map((t,s)=>e.createElement("div",{key:t.id||s,className:a(q({aspectRatio:C,hover:V}),k),role:"button",tabIndex:0,onClick:()=>f(t,s),onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),f(t,s));},"aria-label":`View image ${s+1}: ${t.alt}`},e.createElement("img",{src:z&&t.thumbnail?t.thumbnail:t.src,alt:t.alt,className:"w-full h-full object-cover",loading:"lazy"}),(t.title||t.description)&&e.createElement("div",{className:"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end"},e.createElement("div",{className:"p-4 text-white"},t.title&&e.createElement("h3",{className:"font-semibold text-sm sm:text-base"},t.title),t.description&&e.createElement("p",{className:"text-xs sm:text-sm text-white/80 mt-1"},t.description)))))),l&&g&&e.createElement("div",{className:a(A({animation:I})),onClick:d,onKeyDown:G,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":"lightbox-title"},e.createElement("div",{className:"relative max-w-4xl max-h-[90vh] mx-4",onClick:t=>t.stopPropagation()},e.createElement("img",{src:l.src,alt:l.alt,className:"max-w-full max-h-full object-contain rounded-lg",id:"lightbox-title"}),(l.title||l.description)&&e.createElement("div",{className:"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg"},l.title&&e.createElement("h3",{className:"font-semibold text-lg mb-2"},l.title),l.description&&e.createElement("p",{className:"text-sm text-white/80"},l.description)),a$1.length>1&&e.createElement(e.Fragment,null,i>0&&e.createElement(b,{variant:"ghost",size:"sm",className:"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:b$1,"aria-label":"Previous image"},"\u2190"),i<a$1.length-1&&e.createElement(b,{variant:"ghost",size:"sm",className:"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:p,"aria-label":"Next image"},"\u2192")),e.createElement(b,{variant:"ghost",size:"sm",className:"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white",onClick:d,"aria-label":"Close lightbox"},"\u2715"),a$1.length>1&&e.createElement("div",{className:"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm"},i+1," / ",a$1.length))))},F=B;export{B as a,F as b};//# sourceMappingURL=chunk-2JQROMCM.js.map
3
- //# sourceMappingURL=chunk-2JQROMCM.js.map
2
+ import {b}from'./chunk-O2VT23LK.js';import {a}from'./chunk-AC2JBXHQ.js';import e,{useState,useCallback}from'react';import {cva}from'class-variance-authority';var S=cva("grid gap-4",{variants:{columns:{1:"grid-cols-1",2:"grid-cols-1 sm:grid-cols-2",3:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",4:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",5:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5",6:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6"},spacing:{sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8"}},defaultVariants:{columns:3,spacing:"md"}}),q=cva("relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg",{variants:{aspectRatio:{square:"aspect-square",video:"aspect-video",portrait:"aspect-[3/4]",landscape:"aspect-[4/3]",wide:"aspect-[16/9]"},hover:{none:"",scale:"hover:scale-105",zoom:"hover:scale-110",lift:"hover:-translate-y-2"}},defaultVariants:{aspectRatio:"square",hover:"scale"}}),A=cva("fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm",{variants:{animation:{fade:"animate-in fade-in duration-300",slide:"animate-in slide-in-from-bottom duration-300",zoom:"animate-in zoom-in duration-300"}},defaultVariants:{animation:"fade"}}),B=({images:a$1,className:y,itemClassName:k,columns:w=3,spacing:N="md",showLightbox:g=true,lightboxAnimation:I="fade",onImageClick:v,itemHover:V="scale",itemAspectRatio:C="square",showThumbnails:z=false,thumbnailSize:D="md",...P})=>{let[l,r]=useState(null),[i,n]=useState(-1),f=useCallback((t,s)=>{g&&(r(t),n(s)),v?.(t,s);},[g,v]),d=useCallback(()=>{r(null),n(-1);},[]),b$1=useCallback(()=>{if(i>0){let t=i-1;r(a$1[t]||null),n(t);}},[i,a$1]),p=useCallback(()=>{if(i<a$1.length-1){let t=i+1;r(a$1[t]||null),n(t);}},[i,a$1]),G=useCallback(t=>{t.key==="Escape"?d():t.key==="ArrowLeft"?b$1():t.key==="ArrowRight"&&p();},[d,b$1,p]);return e.createElement(e.Fragment,null,e.createElement("div",{className:a(S({columns:w,spacing:N}),y),...P},a$1.map((t,s)=>e.createElement("div",{key:t.id||s,className:a(q({aspectRatio:C,hover:V}),k),role:"button",tabIndex:0,onClick:()=>f(t,s),onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),f(t,s));},"aria-label":`View image ${s+1}: ${t.alt}`},e.createElement("img",{src:z&&t.thumbnail?t.thumbnail:t.src,alt:t.alt,className:"w-full h-full object-cover",loading:"lazy"}),(t.title||t.description)&&e.createElement("div",{className:"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end"},e.createElement("div",{className:"p-4 text-white"},t.title&&e.createElement("h3",{className:"font-semibold text-sm sm:text-base"},t.title),t.description&&e.createElement("p",{className:"text-xs sm:text-sm text-white/80 mt-1"},t.description)))))),l&&g&&e.createElement("div",{className:a(A({animation:I})),onClick:d,onKeyDown:G,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":"lightbox-title"},e.createElement("div",{className:"relative max-w-4xl max-h-[90vh] mx-4",onClick:t=>t.stopPropagation()},e.createElement("img",{src:l.src,alt:l.alt,className:"max-w-full max-h-full object-contain rounded-lg",id:"lightbox-title"}),(l.title||l.description)&&e.createElement("div",{className:"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg"},l.title&&e.createElement("h3",{className:"font-semibold text-lg mb-2"},l.title),l.description&&e.createElement("p",{className:"text-sm text-white/80"},l.description)),a$1.length>1&&e.createElement(e.Fragment,null,i>0&&e.createElement(b,{variant:"ghost",size:"sm",className:"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:b$1,"aria-label":"Previous image"},"\u2190"),i<a$1.length-1&&e.createElement(b,{variant:"ghost",size:"sm",className:"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:p,"aria-label":"Next image"},"\u2192")),e.createElement(b,{variant:"ghost",size:"sm",className:"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white",onClick:d,"aria-label":"Close lightbox"},"\u2715"),a$1.length>1&&e.createElement("div",{className:"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm"},i+1," / ",a$1.length))))},F=B;export{B as a,F as b};//# sourceMappingURL=chunk-F6CQ5ODU.js.map
3
+ //# sourceMappingURL=chunk-F6CQ5ODU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/marketing/gallery.tsx"],"names":["galleryVariants","cva","galleryItemVariants","lightboxVariants","Gallery","images","className","itemClassName","columns","spacing","showLightbox","lightboxAnimation","onImageClick","itemHover","itemAspectRatio","showThumbnails","_thumbnailSize","props","selectedImage","setSelectedImage","useState","selectedIndex","setSelectedIndex","handleImageClick","useCallback","image","index","handleCloseLightbox","handlePrevious","newIndex","handleNext","handleKeyDown","e","React","cn","Button","gallery_default"],"mappings":"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","file":"chunk-2JQROMCM.js","sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../components/core/button';\n\nconst galleryVariants = cva(\n 'grid gap-4',\n {\n variants: {\n columns: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5',\n 6: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6',\n },\n spacing: {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n },\n },\n defaultVariants: {\n columns: 3,\n spacing: 'md',\n },\n }\n);\n\nconst galleryItemVariants = cva(\n 'relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg',\n {\n variants: {\n aspectRatio: {\n square: 'aspect-square',\n video: 'aspect-video',\n portrait: 'aspect-[3/4]',\n landscape: 'aspect-[4/3]',\n wide: 'aspect-[16/9]',\n },\n hover: {\n none: '',\n scale: 'hover:scale-105',\n zoom: 'hover:scale-110',\n lift: 'hover:-translate-y-2',\n },\n },\n defaultVariants: {\n aspectRatio: 'square',\n hover: 'scale',\n },\n }\n);\n\nconst lightboxVariants = cva(\n 'fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm',\n {\n variants: {\n animation: {\n fade: 'animate-in fade-in duration-300',\n slide: 'animate-in slide-in-from-bottom duration-300',\n zoom: 'animate-in zoom-in duration-300',\n },\n },\n defaultVariants: {\n animation: 'fade',\n },\n }\n);\n\nexport interface GalleryImage {\n id: string;\n src: string;\n alt: string;\n title?: string;\n description?: string;\n thumbnail?: string;\n}\n\nexport interface GalleryProps extends VariantProps<typeof galleryVariants> {\n images: GalleryImage[];\n className?: string;\n itemClassName?: string;\n showLightbox?: boolean;\n lightboxAnimation?: VariantProps<typeof lightboxVariants>['animation'];\n onImageClick?: (image: GalleryImage, index: number) => void;\n itemHover?: VariantProps<typeof galleryItemVariants>['hover'];\n itemAspectRatio?: VariantProps<typeof galleryItemVariants>['aspectRatio'];\n showThumbnails?: boolean;\n thumbnailSize?: 'sm' | 'md' | 'lg';\n}\n\nexport const Gallery: React.FC<GalleryProps> = ({\n images,\n className,\n itemClassName,\n columns = 3,\n spacing = 'md',\n showLightbox = true,\n lightboxAnimation = 'fade',\n onImageClick,\n itemHover = 'scale',\n itemAspectRatio = 'square',\n showThumbnails = false,\n thumbnailSize: _thumbnailSize = 'md',\n ...props\n}) => {\n const [selectedImage, setSelectedImage] = useState<GalleryImage | null>(null);\n const [selectedIndex, setSelectedIndex] = useState<number>(-1);\n\n const handleImageClick = useCallback((image: GalleryImage, index: number) => {\n if (showLightbox) {\n setSelectedImage(image);\n setSelectedIndex(index);\n }\n onImageClick?.(image, index);\n }, [showLightbox, onImageClick]);\n\n const handleCloseLightbox = useCallback(() => {\n setSelectedImage(null);\n setSelectedIndex(-1);\n }, []);\n\n const handlePrevious = useCallback(() => {\n if (selectedIndex > 0) {\n const newIndex = selectedIndex - 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleNext = useCallback(() => {\n if (selectedIndex < images.length - 1) {\n const newIndex = selectedIndex + 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleCloseLightbox();\n } else if (e.key === 'ArrowLeft') {\n handlePrevious();\n } else if (e.key === 'ArrowRight') {\n handleNext();\n }\n }, [handleCloseLightbox, handlePrevious, handleNext]);\n\n return (\n <>\n <div \n className={cn(galleryVariants({ columns, spacing }), className)}\n {...props}\n >\n {images.map((image, index) => (\n <div\n key={image.id || index}\n className={cn(\n galleryItemVariants({ \n aspectRatio: itemAspectRatio, \n hover: itemHover \n }),\n itemClassName\n )}\n role=\"button\"\n tabIndex={0}\n onClick={() => handleImageClick(image, index)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleImageClick(image, index);\n }\n }}\n aria-label={`View image ${index + 1}: ${image.alt}`}\n >\n <img\n src={showThumbnails && image.thumbnail ? image.thumbnail : image.src}\n alt={image.alt}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n {(image.title || image.description) && (\n <div className=\"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end\">\n <div className=\"p-4 text-white\">\n {image.title && (\n <h3 className=\"font-semibold text-sm sm:text-base\">\n {image.title}\n </h3>\n )}\n {image.description && (\n <p className=\"text-xs sm:text-sm text-white/80 mt-1\">\n {image.description}\n </p>\n )}\n </div>\n </div>\n )}\n </div>\n ))}\n </div>\n\n {selectedImage && showLightbox && (\n <div\n className={cn(lightboxVariants({ animation: lightboxAnimation }))}\n onClick={handleCloseLightbox}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"lightbox-title\"\n >\n <div \n className=\"relative max-w-4xl max-h-[90vh] mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={selectedImage.src}\n alt={selectedImage.alt}\n className=\"max-w-full max-h-full object-contain rounded-lg\"\n id=\"lightbox-title\"\n />\n \n {(selectedImage.title || selectedImage.description) && (\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg\">\n {selectedImage.title && (\n <h3 className=\"font-semibold text-lg mb-2\">\n {selectedImage.title}\n </h3>\n )}\n {selectedImage.description && (\n <p className=\"text-sm text-white/80\">\n {selectedImage.description}\n </p>\n )}\n </div>\n )}\n\n {/* Navigation buttons */}\n {images.length > 1 && (\n <>\n {selectedIndex > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handlePrevious}\n aria-label=\"Previous image\"\n >\n ←\n </Button>\n )}\n {selectedIndex < images.length - 1 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleNext}\n aria-label=\"Next image\"\n >\n →\n </Button>\n )}\n </>\n )}\n\n {/* Close button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleCloseLightbox}\n aria-label=\"Close lightbox\"\n >\n ✕\n </Button>\n\n {/* Image counter */}\n {images.length > 1 && (\n <div className=\"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm\">\n {selectedIndex + 1} / {images.length}\n </div>\n )}\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default Gallery;\n"]}
1
+ {"version":3,"sources":["../src/components/marketing/gallery.tsx"],"names":["galleryVariants","cva","galleryItemVariants","lightboxVariants","Gallery","images","className","itemClassName","columns","spacing","showLightbox","lightboxAnimation","onImageClick","itemHover","itemAspectRatio","showThumbnails","_thumbnailSize","props","selectedImage","setSelectedImage","useState","selectedIndex","setSelectedIndex","handleImageClick","useCallback","image","index","handleCloseLightbox","handlePrevious","newIndex","handleNext","handleKeyDown","e","React","cn","Button","gallery_default"],"mappings":"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","file":"chunk-F6CQ5ODU.js","sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../components/core/button';\n\nconst galleryVariants = cva(\n 'grid gap-4',\n {\n variants: {\n columns: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5',\n 6: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6',\n },\n spacing: {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n },\n },\n defaultVariants: {\n columns: 3,\n spacing: 'md',\n },\n }\n);\n\nconst galleryItemVariants = cva(\n 'relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg',\n {\n variants: {\n aspectRatio: {\n square: 'aspect-square',\n video: 'aspect-video',\n portrait: 'aspect-[3/4]',\n landscape: 'aspect-[4/3]',\n wide: 'aspect-[16/9]',\n },\n hover: {\n none: '',\n scale: 'hover:scale-105',\n zoom: 'hover:scale-110',\n lift: 'hover:-translate-y-2',\n },\n },\n defaultVariants: {\n aspectRatio: 'square',\n hover: 'scale',\n },\n }\n);\n\nconst lightboxVariants = cva(\n 'fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm',\n {\n variants: {\n animation: {\n fade: 'animate-in fade-in duration-300',\n slide: 'animate-in slide-in-from-bottom duration-300',\n zoom: 'animate-in zoom-in duration-300',\n },\n },\n defaultVariants: {\n animation: 'fade',\n },\n }\n);\n\nexport interface GalleryImage {\n id: string;\n src: string;\n alt: string;\n title?: string;\n description?: string;\n thumbnail?: string;\n}\n\nexport interface GalleryProps extends VariantProps<typeof galleryVariants> {\n images: GalleryImage[];\n className?: string;\n itemClassName?: string;\n showLightbox?: boolean;\n lightboxAnimation?: VariantProps<typeof lightboxVariants>['animation'];\n onImageClick?: (image: GalleryImage, index: number) => void;\n itemHover?: VariantProps<typeof galleryItemVariants>['hover'];\n itemAspectRatio?: VariantProps<typeof galleryItemVariants>['aspectRatio'];\n showThumbnails?: boolean;\n thumbnailSize?: 'sm' | 'md' | 'lg';\n}\n\nexport const Gallery: React.FC<GalleryProps> = ({\n images,\n className,\n itemClassName,\n columns = 3,\n spacing = 'md',\n showLightbox = true,\n lightboxAnimation = 'fade',\n onImageClick,\n itemHover = 'scale',\n itemAspectRatio = 'square',\n showThumbnails = false,\n thumbnailSize: _thumbnailSize = 'md',\n ...props\n}) => {\n const [selectedImage, setSelectedImage] = useState<GalleryImage | null>(null);\n const [selectedIndex, setSelectedIndex] = useState<number>(-1);\n\n const handleImageClick = useCallback((image: GalleryImage, index: number) => {\n if (showLightbox) {\n setSelectedImage(image);\n setSelectedIndex(index);\n }\n onImageClick?.(image, index);\n }, [showLightbox, onImageClick]);\n\n const handleCloseLightbox = useCallback(() => {\n setSelectedImage(null);\n setSelectedIndex(-1);\n }, []);\n\n const handlePrevious = useCallback(() => {\n if (selectedIndex > 0) {\n const newIndex = selectedIndex - 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleNext = useCallback(() => {\n if (selectedIndex < images.length - 1) {\n const newIndex = selectedIndex + 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleCloseLightbox();\n } else if (e.key === 'ArrowLeft') {\n handlePrevious();\n } else if (e.key === 'ArrowRight') {\n handleNext();\n }\n }, [handleCloseLightbox, handlePrevious, handleNext]);\n\n return (\n <>\n <div \n className={cn(galleryVariants({ columns, spacing }), className)}\n {...props}\n >\n {images.map((image, index) => (\n <div\n key={image.id || index}\n className={cn(\n galleryItemVariants({ \n aspectRatio: itemAspectRatio, \n hover: itemHover \n }),\n itemClassName\n )}\n role=\"button\"\n tabIndex={0}\n onClick={() => handleImageClick(image, index)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleImageClick(image, index);\n }\n }}\n aria-label={`View image ${index + 1}: ${image.alt}`}\n >\n <img\n src={showThumbnails && image.thumbnail ? image.thumbnail : image.src}\n alt={image.alt}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n {(image.title || image.description) && (\n <div className=\"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end\">\n <div className=\"p-4 text-white\">\n {image.title && (\n <h3 className=\"font-semibold text-sm sm:text-base\">\n {image.title}\n </h3>\n )}\n {image.description && (\n <p className=\"text-xs sm:text-sm text-white/80 mt-1\">\n {image.description}\n </p>\n )}\n </div>\n </div>\n )}\n </div>\n ))}\n </div>\n\n {selectedImage && showLightbox && (\n <div\n className={cn(lightboxVariants({ animation: lightboxAnimation }))}\n onClick={handleCloseLightbox}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"lightbox-title\"\n >\n <div \n className=\"relative max-w-4xl max-h-[90vh] mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={selectedImage.src}\n alt={selectedImage.alt}\n className=\"max-w-full max-h-full object-contain rounded-lg\"\n id=\"lightbox-title\"\n />\n \n {(selectedImage.title || selectedImage.description) && (\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg\">\n {selectedImage.title && (\n <h3 className=\"font-semibold text-lg mb-2\">\n {selectedImage.title}\n </h3>\n )}\n {selectedImage.description && (\n <p className=\"text-sm text-white/80\">\n {selectedImage.description}\n </p>\n )}\n </div>\n )}\n\n {/* Navigation buttons */}\n {images.length > 1 && (\n <>\n {selectedIndex > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handlePrevious}\n aria-label=\"Previous image\"\n >\n ←\n </Button>\n )}\n {selectedIndex < images.length - 1 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleNext}\n aria-label=\"Next image\"\n >\n →\n </Button>\n )}\n </>\n )}\n\n {/* Close button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleCloseLightbox}\n aria-label=\"Close lightbox\"\n >\n ✕\n </Button>\n\n {/* Image counter */}\n {images.length > 1 && (\n <div className=\"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm\">\n {selectedIndex + 1} / {images.length}\n </div>\n )}\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default Gallery;\n"]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- 'use strict';var chunk5PVFLXPO_cjs=require('./chunk-5PVFLXPO.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var e__default=/*#__PURE__*/_interopDefault(e);var S=classVarianceAuthority.cva("grid gap-4",{variants:{columns:{1:"grid-cols-1",2:"grid-cols-1 sm:grid-cols-2",3:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",4:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",5:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5",6:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6"},spacing:{sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8"}},defaultVariants:{columns:3,spacing:"md"}}),q=classVarianceAuthority.cva("relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg",{variants:{aspectRatio:{square:"aspect-square",video:"aspect-video",portrait:"aspect-[3/4]",landscape:"aspect-[4/3]",wide:"aspect-[16/9]"},hover:{none:"",scale:"hover:scale-105",zoom:"hover:scale-110",lift:"hover:-translate-y-2"}},defaultVariants:{aspectRatio:"square",hover:"scale"}}),A=classVarianceAuthority.cva("fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm",{variants:{animation:{fade:"animate-in fade-in duration-300",slide:"animate-in slide-in-from-bottom duration-300",zoom:"animate-in zoom-in duration-300"}},defaultVariants:{animation:"fade"}}),B=({images:a,className:y,itemClassName:k,columns:w=3,spacing:N="md",showLightbox:g=true,lightboxAnimation:I="fade",onImageClick:v,itemHover:V="scale",itemAspectRatio:C="square",showThumbnails:z=false,thumbnailSize:D="md",...P})=>{let[l,r]=e.useState(null),[i,n]=e.useState(-1),f=e.useCallback((t,s)=>{g&&(r(t),n(s)),v?.(t,s);},[g,v]),d=e.useCallback(()=>{r(null),n(-1);},[]),b=e.useCallback(()=>{if(i>0){let t=i-1;r(a[t]||null),n(t);}},[i,a]),p=e.useCallback(()=>{if(i<a.length-1){let t=i+1;r(a[t]||null),n(t);}},[i,a]),G=e.useCallback(t=>{t.key==="Escape"?d():t.key==="ArrowLeft"?b():t.key==="ArrowRight"&&p();},[d,b,p]);return e__default.default.createElement(e__default.default.Fragment,null,e__default.default.createElement("div",{className:chunkITRGJNWL_cjs.a(S({columns:w,spacing:N}),y),...P},a.map((t,s)=>e__default.default.createElement("div",{key:t.id||s,className:chunkITRGJNWL_cjs.a(q({aspectRatio:C,hover:V}),k),role:"button",tabIndex:0,onClick:()=>f(t,s),onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),f(t,s));},"aria-label":`View image ${s+1}: ${t.alt}`},e__default.default.createElement("img",{src:z&&t.thumbnail?t.thumbnail:t.src,alt:t.alt,className:"w-full h-full object-cover",loading:"lazy"}),(t.title||t.description)&&e__default.default.createElement("div",{className:"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end"},e__default.default.createElement("div",{className:"p-4 text-white"},t.title&&e__default.default.createElement("h3",{className:"font-semibold text-sm sm:text-base"},t.title),t.description&&e__default.default.createElement("p",{className:"text-xs sm:text-sm text-white/80 mt-1"},t.description)))))),l&&g&&e__default.default.createElement("div",{className:chunkITRGJNWL_cjs.a(A({animation:I})),onClick:d,onKeyDown:G,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":"lightbox-title"},e__default.default.createElement("div",{className:"relative max-w-4xl max-h-[90vh] mx-4",onClick:t=>t.stopPropagation()},e__default.default.createElement("img",{src:l.src,alt:l.alt,className:"max-w-full max-h-full object-contain rounded-lg",id:"lightbox-title"}),(l.title||l.description)&&e__default.default.createElement("div",{className:"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg"},l.title&&e__default.default.createElement("h3",{className:"font-semibold text-lg mb-2"},l.title),l.description&&e__default.default.createElement("p",{className:"text-sm text-white/80"},l.description)),a.length>1&&e__default.default.createElement(e__default.default.Fragment,null,i>0&&e__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",className:"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:b,"aria-label":"Previous image"},"\u2190"),i<a.length-1&&e__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",className:"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:p,"aria-label":"Next image"},"\u2192")),e__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",className:"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white",onClick:d,"aria-label":"Close lightbox"},"\u2715"),a.length>1&&e__default.default.createElement("div",{className:"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm"},i+1," / ",a.length))))},F=B;exports.a=B;exports.b=F;//# sourceMappingURL=chunk-7PPAI3MM.cjs.map
3
- //# sourceMappingURL=chunk-7PPAI3MM.cjs.map
2
+ 'use strict';var chunk6UIT6XQH_cjs=require('./chunk-6UIT6XQH.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var e__default=/*#__PURE__*/_interopDefault(e);var S=classVarianceAuthority.cva("grid gap-4",{variants:{columns:{1:"grid-cols-1",2:"grid-cols-1 sm:grid-cols-2",3:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",4:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",5:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5",6:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6"},spacing:{sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8"}},defaultVariants:{columns:3,spacing:"md"}}),q=classVarianceAuthority.cva("relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg",{variants:{aspectRatio:{square:"aspect-square",video:"aspect-video",portrait:"aspect-[3/4]",landscape:"aspect-[4/3]",wide:"aspect-[16/9]"},hover:{none:"",scale:"hover:scale-105",zoom:"hover:scale-110",lift:"hover:-translate-y-2"}},defaultVariants:{aspectRatio:"square",hover:"scale"}}),A=classVarianceAuthority.cva("fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm",{variants:{animation:{fade:"animate-in fade-in duration-300",slide:"animate-in slide-in-from-bottom duration-300",zoom:"animate-in zoom-in duration-300"}},defaultVariants:{animation:"fade"}}),B=({images:a,className:y,itemClassName:k,columns:w=3,spacing:N="md",showLightbox:g=true,lightboxAnimation:I="fade",onImageClick:v,itemHover:V="scale",itemAspectRatio:C="square",showThumbnails:z=false,thumbnailSize:D="md",...P})=>{let[l,r]=e.useState(null),[i,n]=e.useState(-1),f=e.useCallback((t,s)=>{g&&(r(t),n(s)),v?.(t,s);},[g,v]),d=e.useCallback(()=>{r(null),n(-1);},[]),b=e.useCallback(()=>{if(i>0){let t=i-1;r(a[t]||null),n(t);}},[i,a]),p=e.useCallback(()=>{if(i<a.length-1){let t=i+1;r(a[t]||null),n(t);}},[i,a]),G=e.useCallback(t=>{t.key==="Escape"?d():t.key==="ArrowLeft"?b():t.key==="ArrowRight"&&p();},[d,b,p]);return e__default.default.createElement(e__default.default.Fragment,null,e__default.default.createElement("div",{className:chunkITRGJNWL_cjs.a(S({columns:w,spacing:N}),y),...P},a.map((t,s)=>e__default.default.createElement("div",{key:t.id||s,className:chunkITRGJNWL_cjs.a(q({aspectRatio:C,hover:V}),k),role:"button",tabIndex:0,onClick:()=>f(t,s),onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),f(t,s));},"aria-label":`View image ${s+1}: ${t.alt}`},e__default.default.createElement("img",{src:z&&t.thumbnail?t.thumbnail:t.src,alt:t.alt,className:"w-full h-full object-cover",loading:"lazy"}),(t.title||t.description)&&e__default.default.createElement("div",{className:"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end"},e__default.default.createElement("div",{className:"p-4 text-white"},t.title&&e__default.default.createElement("h3",{className:"font-semibold text-sm sm:text-base"},t.title),t.description&&e__default.default.createElement("p",{className:"text-xs sm:text-sm text-white/80 mt-1"},t.description)))))),l&&g&&e__default.default.createElement("div",{className:chunkITRGJNWL_cjs.a(A({animation:I})),onClick:d,onKeyDown:G,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":"lightbox-title"},e__default.default.createElement("div",{className:"relative max-w-4xl max-h-[90vh] mx-4",onClick:t=>t.stopPropagation()},e__default.default.createElement("img",{src:l.src,alt:l.alt,className:"max-w-full max-h-full object-contain rounded-lg",id:"lightbox-title"}),(l.title||l.description)&&e__default.default.createElement("div",{className:"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg"},l.title&&e__default.default.createElement("h3",{className:"font-semibold text-lg mb-2"},l.title),l.description&&e__default.default.createElement("p",{className:"text-sm text-white/80"},l.description)),a.length>1&&e__default.default.createElement(e__default.default.Fragment,null,i>0&&e__default.default.createElement(chunk6UIT6XQH_cjs.b,{variant:"ghost",size:"sm",className:"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:b,"aria-label":"Previous image"},"\u2190"),i<a.length-1&&e__default.default.createElement(chunk6UIT6XQH_cjs.b,{variant:"ghost",size:"sm",className:"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:p,"aria-label":"Next image"},"\u2192")),e__default.default.createElement(chunk6UIT6XQH_cjs.b,{variant:"ghost",size:"sm",className:"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white",onClick:d,"aria-label":"Close lightbox"},"\u2715"),a.length>1&&e__default.default.createElement("div",{className:"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm"},i+1," / ",a.length))))},F=B;exports.a=B;exports.b=F;//# sourceMappingURL=chunk-GEMIO54B.cjs.map
3
+ //# sourceMappingURL=chunk-GEMIO54B.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/marketing/gallery.tsx"],"names":["galleryVariants","cva","galleryItemVariants","lightboxVariants","Gallery","images","className","itemClassName","columns","spacing","showLightbox","lightboxAnimation","onImageClick","itemHover","itemAspectRatio","showThumbnails","_thumbnailSize","props","selectedImage","setSelectedImage","useState","selectedIndex","setSelectedIndex","handleImageClick","useCallback","image","index","handleCloseLightbox","handlePrevious","newIndex","handleNext","handleKeyDown","e","React","cn","Button","gallery_default"],"mappings":"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","file":"chunk-7PPAI3MM.cjs","sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../components/core/button';\n\nconst galleryVariants = cva(\n 'grid gap-4',\n {\n variants: {\n columns: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5',\n 6: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6',\n },\n spacing: {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n },\n },\n defaultVariants: {\n columns: 3,\n spacing: 'md',\n },\n }\n);\n\nconst galleryItemVariants = cva(\n 'relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg',\n {\n variants: {\n aspectRatio: {\n square: 'aspect-square',\n video: 'aspect-video',\n portrait: 'aspect-[3/4]',\n landscape: 'aspect-[4/3]',\n wide: 'aspect-[16/9]',\n },\n hover: {\n none: '',\n scale: 'hover:scale-105',\n zoom: 'hover:scale-110',\n lift: 'hover:-translate-y-2',\n },\n },\n defaultVariants: {\n aspectRatio: 'square',\n hover: 'scale',\n },\n }\n);\n\nconst lightboxVariants = cva(\n 'fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm',\n {\n variants: {\n animation: {\n fade: 'animate-in fade-in duration-300',\n slide: 'animate-in slide-in-from-bottom duration-300',\n zoom: 'animate-in zoom-in duration-300',\n },\n },\n defaultVariants: {\n animation: 'fade',\n },\n }\n);\n\nexport interface GalleryImage {\n id: string;\n src: string;\n alt: string;\n title?: string;\n description?: string;\n thumbnail?: string;\n}\n\nexport interface GalleryProps extends VariantProps<typeof galleryVariants> {\n images: GalleryImage[];\n className?: string;\n itemClassName?: string;\n showLightbox?: boolean;\n lightboxAnimation?: VariantProps<typeof lightboxVariants>['animation'];\n onImageClick?: (image: GalleryImage, index: number) => void;\n itemHover?: VariantProps<typeof galleryItemVariants>['hover'];\n itemAspectRatio?: VariantProps<typeof galleryItemVariants>['aspectRatio'];\n showThumbnails?: boolean;\n thumbnailSize?: 'sm' | 'md' | 'lg';\n}\n\nexport const Gallery: React.FC<GalleryProps> = ({\n images,\n className,\n itemClassName,\n columns = 3,\n spacing = 'md',\n showLightbox = true,\n lightboxAnimation = 'fade',\n onImageClick,\n itemHover = 'scale',\n itemAspectRatio = 'square',\n showThumbnails = false,\n thumbnailSize: _thumbnailSize = 'md',\n ...props\n}) => {\n const [selectedImage, setSelectedImage] = useState<GalleryImage | null>(null);\n const [selectedIndex, setSelectedIndex] = useState<number>(-1);\n\n const handleImageClick = useCallback((image: GalleryImage, index: number) => {\n if (showLightbox) {\n setSelectedImage(image);\n setSelectedIndex(index);\n }\n onImageClick?.(image, index);\n }, [showLightbox, onImageClick]);\n\n const handleCloseLightbox = useCallback(() => {\n setSelectedImage(null);\n setSelectedIndex(-1);\n }, []);\n\n const handlePrevious = useCallback(() => {\n if (selectedIndex > 0) {\n const newIndex = selectedIndex - 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleNext = useCallback(() => {\n if (selectedIndex < images.length - 1) {\n const newIndex = selectedIndex + 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleCloseLightbox();\n } else if (e.key === 'ArrowLeft') {\n handlePrevious();\n } else if (e.key === 'ArrowRight') {\n handleNext();\n }\n }, [handleCloseLightbox, handlePrevious, handleNext]);\n\n return (\n <>\n <div \n className={cn(galleryVariants({ columns, spacing }), className)}\n {...props}\n >\n {images.map((image, index) => (\n <div\n key={image.id || index}\n className={cn(\n galleryItemVariants({ \n aspectRatio: itemAspectRatio, \n hover: itemHover \n }),\n itemClassName\n )}\n role=\"button\"\n tabIndex={0}\n onClick={() => handleImageClick(image, index)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleImageClick(image, index);\n }\n }}\n aria-label={`View image ${index + 1}: ${image.alt}`}\n >\n <img\n src={showThumbnails && image.thumbnail ? image.thumbnail : image.src}\n alt={image.alt}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n {(image.title || image.description) && (\n <div className=\"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end\">\n <div className=\"p-4 text-white\">\n {image.title && (\n <h3 className=\"font-semibold text-sm sm:text-base\">\n {image.title}\n </h3>\n )}\n {image.description && (\n <p className=\"text-xs sm:text-sm text-white/80 mt-1\">\n {image.description}\n </p>\n )}\n </div>\n </div>\n )}\n </div>\n ))}\n </div>\n\n {selectedImage && showLightbox && (\n <div\n className={cn(lightboxVariants({ animation: lightboxAnimation }))}\n onClick={handleCloseLightbox}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"lightbox-title\"\n >\n <div \n className=\"relative max-w-4xl max-h-[90vh] mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={selectedImage.src}\n alt={selectedImage.alt}\n className=\"max-w-full max-h-full object-contain rounded-lg\"\n id=\"lightbox-title\"\n />\n \n {(selectedImage.title || selectedImage.description) && (\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg\">\n {selectedImage.title && (\n <h3 className=\"font-semibold text-lg mb-2\">\n {selectedImage.title}\n </h3>\n )}\n {selectedImage.description && (\n <p className=\"text-sm text-white/80\">\n {selectedImage.description}\n </p>\n )}\n </div>\n )}\n\n {/* Navigation buttons */}\n {images.length > 1 && (\n <>\n {selectedIndex > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handlePrevious}\n aria-label=\"Previous image\"\n >\n ←\n </Button>\n )}\n {selectedIndex < images.length - 1 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleNext}\n aria-label=\"Next image\"\n >\n →\n </Button>\n )}\n </>\n )}\n\n {/* Close button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleCloseLightbox}\n aria-label=\"Close lightbox\"\n >\n ✕\n </Button>\n\n {/* Image counter */}\n {images.length > 1 && (\n <div className=\"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm\">\n {selectedIndex + 1} / {images.length}\n </div>\n )}\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default Gallery;\n"]}
1
+ {"version":3,"sources":["../src/components/marketing/gallery.tsx"],"names":["galleryVariants","cva","galleryItemVariants","lightboxVariants","Gallery","images","className","itemClassName","columns","spacing","showLightbox","lightboxAnimation","onImageClick","itemHover","itemAspectRatio","showThumbnails","_thumbnailSize","props","selectedImage","setSelectedImage","useState","selectedIndex","setSelectedIndex","handleImageClick","useCallback","image","index","handleCloseLightbox","handlePrevious","newIndex","handleNext","handleKeyDown","e","React","cn","Button","gallery_default"],"mappings":"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","file":"chunk-GEMIO54B.cjs","sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../components/core/button';\n\nconst galleryVariants = cva(\n 'grid gap-4',\n {\n variants: {\n columns: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5',\n 6: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6',\n },\n spacing: {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n },\n },\n defaultVariants: {\n columns: 3,\n spacing: 'md',\n },\n }\n);\n\nconst galleryItemVariants = cva(\n 'relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg',\n {\n variants: {\n aspectRatio: {\n square: 'aspect-square',\n video: 'aspect-video',\n portrait: 'aspect-[3/4]',\n landscape: 'aspect-[4/3]',\n wide: 'aspect-[16/9]',\n },\n hover: {\n none: '',\n scale: 'hover:scale-105',\n zoom: 'hover:scale-110',\n lift: 'hover:-translate-y-2',\n },\n },\n defaultVariants: {\n aspectRatio: 'square',\n hover: 'scale',\n },\n }\n);\n\nconst lightboxVariants = cva(\n 'fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm',\n {\n variants: {\n animation: {\n fade: 'animate-in fade-in duration-300',\n slide: 'animate-in slide-in-from-bottom duration-300',\n zoom: 'animate-in zoom-in duration-300',\n },\n },\n defaultVariants: {\n animation: 'fade',\n },\n }\n);\n\nexport interface GalleryImage {\n id: string;\n src: string;\n alt: string;\n title?: string;\n description?: string;\n thumbnail?: string;\n}\n\nexport interface GalleryProps extends VariantProps<typeof galleryVariants> {\n images: GalleryImage[];\n className?: string;\n itemClassName?: string;\n showLightbox?: boolean;\n lightboxAnimation?: VariantProps<typeof lightboxVariants>['animation'];\n onImageClick?: (image: GalleryImage, index: number) => void;\n itemHover?: VariantProps<typeof galleryItemVariants>['hover'];\n itemAspectRatio?: VariantProps<typeof galleryItemVariants>['aspectRatio'];\n showThumbnails?: boolean;\n thumbnailSize?: 'sm' | 'md' | 'lg';\n}\n\nexport const Gallery: React.FC<GalleryProps> = ({\n images,\n className,\n itemClassName,\n columns = 3,\n spacing = 'md',\n showLightbox = true,\n lightboxAnimation = 'fade',\n onImageClick,\n itemHover = 'scale',\n itemAspectRatio = 'square',\n showThumbnails = false,\n thumbnailSize: _thumbnailSize = 'md',\n ...props\n}) => {\n const [selectedImage, setSelectedImage] = useState<GalleryImage | null>(null);\n const [selectedIndex, setSelectedIndex] = useState<number>(-1);\n\n const handleImageClick = useCallback((image: GalleryImage, index: number) => {\n if (showLightbox) {\n setSelectedImage(image);\n setSelectedIndex(index);\n }\n onImageClick?.(image, index);\n }, [showLightbox, onImageClick]);\n\n const handleCloseLightbox = useCallback(() => {\n setSelectedImage(null);\n setSelectedIndex(-1);\n }, []);\n\n const handlePrevious = useCallback(() => {\n if (selectedIndex > 0) {\n const newIndex = selectedIndex - 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleNext = useCallback(() => {\n if (selectedIndex < images.length - 1) {\n const newIndex = selectedIndex + 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleCloseLightbox();\n } else if (e.key === 'ArrowLeft') {\n handlePrevious();\n } else if (e.key === 'ArrowRight') {\n handleNext();\n }\n }, [handleCloseLightbox, handlePrevious, handleNext]);\n\n return (\n <>\n <div \n className={cn(galleryVariants({ columns, spacing }), className)}\n {...props}\n >\n {images.map((image, index) => (\n <div\n key={image.id || index}\n className={cn(\n galleryItemVariants({ \n aspectRatio: itemAspectRatio, \n hover: itemHover \n }),\n itemClassName\n )}\n role=\"button\"\n tabIndex={0}\n onClick={() => handleImageClick(image, index)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleImageClick(image, index);\n }\n }}\n aria-label={`View image ${index + 1}: ${image.alt}`}\n >\n <img\n src={showThumbnails && image.thumbnail ? image.thumbnail : image.src}\n alt={image.alt}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n {(image.title || image.description) && (\n <div className=\"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end\">\n <div className=\"p-4 text-white\">\n {image.title && (\n <h3 className=\"font-semibold text-sm sm:text-base\">\n {image.title}\n </h3>\n )}\n {image.description && (\n <p className=\"text-xs sm:text-sm text-white/80 mt-1\">\n {image.description}\n </p>\n )}\n </div>\n </div>\n )}\n </div>\n ))}\n </div>\n\n {selectedImage && showLightbox && (\n <div\n className={cn(lightboxVariants({ animation: lightboxAnimation }))}\n onClick={handleCloseLightbox}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"lightbox-title\"\n >\n <div \n className=\"relative max-w-4xl max-h-[90vh] mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={selectedImage.src}\n alt={selectedImage.alt}\n className=\"max-w-full max-h-full object-contain rounded-lg\"\n id=\"lightbox-title\"\n />\n \n {(selectedImage.title || selectedImage.description) && (\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg\">\n {selectedImage.title && (\n <h3 className=\"font-semibold text-lg mb-2\">\n {selectedImage.title}\n </h3>\n )}\n {selectedImage.description && (\n <p className=\"text-sm text-white/80\">\n {selectedImage.description}\n </p>\n )}\n </div>\n )}\n\n {/* Navigation buttons */}\n {images.length > 1 && (\n <>\n {selectedIndex > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handlePrevious}\n aria-label=\"Previous image\"\n >\n ←\n </Button>\n )}\n {selectedIndex < images.length - 1 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleNext}\n aria-label=\"Next image\"\n >\n →\n </Button>\n )}\n </>\n )}\n\n {/* Close button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleCloseLightbox}\n aria-label=\"Close lightbox\"\n >\n ✕\n </Button>\n\n {/* Image counter */}\n {images.length > 1 && (\n <div className=\"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm\">\n {selectedIndex + 1} / {images.length}\n </div>\n )}\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default Gallery;\n"]}
@@ -0,0 +1,4 @@
1
+ "use client";
2
+ import {a as a$1}from'./chunk-COXN6XBA.js';import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {Slot,Slottable}from'@radix-ui/react-slot';import {cva}from'class-variance-authority';var A=cva("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed",{variants:{variant:{default:["bg-primary text-primary-foreground shadow-md hover:bg-primary/90 hover:shadow-lg","active:scale-[0.98] active:shadow-sm","border border-primary/20"],secondary:["bg-secondary text-secondary-foreground border border-border","hover:bg-secondary/80 hover:border-border hover:shadow-sm","active:scale-[0.98]"],outline:["border-2 border-border bg-transparent text-foreground","hover:bg-muted hover:border-primary hover:text-primary","focus-visible:ring-ring/20 focus-visible:border-primary","active:scale-[0.98]"],ghost:["text-foreground hover:bg-muted hover:text-foreground","active:bg-muted/80 active:scale-[0.98]"],destructive:["bg-destructive text-destructive-foreground shadow-md hover:bg-destructive/90 hover:shadow-lg","active:scale-[0.98] active:shadow-sm","border border-destructive/20"],subtle:["bg-muted text-muted-foreground border border-border","hover:bg-muted/80 hover:border-border","active:scale-[0.98]"],link:"text-primary underline-offset-4 hover:underline"},size:{sm:"h-8 px-3 text-xs rounded-sm",default:"h-10 px-4 text-sm rounded-md",lg:"h-11 px-6 text-base rounded-lg",xl:"h-12 px-8 text-lg rounded-lg",icon:"h-10 w-10 rounded-md"},state:{default:"",loading:"cursor-wait",success:"bg-success hover:bg-success-600 text-success-foreground",error:"bg-destructive hover:bg-destructive/90 text-destructive-foreground"}},defaultVariants:{variant:"default",size:"default",state:"default"}}),u=e.forwardRef(({className:b,variant:m,size:p,state:f="default",loading:r=false,loadingText:i,asChild:a$1=false,children:t,disabled:v,...g},h)=>{let x=a$1?Slot:"button",s=v||r,d=o=>{o.preventDefault(),o.stopPropagation();},y=a$1&&s?{onClickCapture:d,onKeyDownCapture:o=>{(o.key==="Enter"||o.key===" ")&&d(o);}}:{},w=["button","input","select","textarea","fieldset","optgroup","option"],B=e.isValidElement(t)&&typeof t.type=="string"&&w.includes(t.type),E=!a$1||B,C=r?"loading":f,n=r&&i?i:t,R=a$1&&n!==t&&e.isValidElement(t)?e.cloneElement(t,void 0,n):n;return e.createElement(x,{className:a(A({variant:m,size:p,state:C,className:b})),ref:h,...E?{disabled:s}:{},"aria-disabled":s,...g,...y},r&&e.createElement("svg",{className:"mr-2 h-4 w-4 animate-spin",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","aria-hidden":"true"},e.createElement("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.createElement("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})),e.createElement(Slottable,null,R))});u.displayName="Button";var z=a$1(u);
3
+ export{A as a,z as b};//# sourceMappingURL=chunk-O2VT23LK.js.map
4
+ //# sourceMappingURL=chunk-O2VT23LK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/button.tsx"],"names":["buttonVariants","cva","ButtonComponent","className","variant","size","state","loading","loadingText","asChild","children","disabled","props","ref","Component","Slot","isDisabled","blockActivation","event","disabledGuards","NATIVE_DISABLEABLE","slottedIsNativeControl","passNativeDisabled","finalState","label","slotted","cn","Slottable","Button","memo"],"mappings":"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","file":"chunk-O2VT23LK.js","sourcesContent":["import * as React from \"react\";\nimport { Slot, Slottable } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\n\nconst buttonVariants = cva(\n // Base styles with improved spacing and transitions\n // `aria-disabled:` alongside `disabled:` because `asChild` renders whatever the\n // caller passed - an anchor, usually - and `:disabled` matches only real form\n // controls. Without it a disabled link looked entirely enabled.\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed\",\n {\n variants: {\n variant: {\n // Enhanced default with better depth\n default: [\n \"bg-primary text-primary-foreground shadow-md hover:bg-primary/90 hover:shadow-lg\",\n \"active:scale-[0.98] active:shadow-sm\",\n \"border border-primary/20\",\n ],\n // Enhanced secondary with better contrast\n secondary: [\n \"bg-secondary text-secondary-foreground border border-border\",\n \"hover:bg-secondary/80 hover:border-border hover:shadow-sm\",\n \"active:scale-[0.98]\",\n ],\n // Enhanced outline with better focus\n outline: [\n \"border-2 border-border bg-transparent text-foreground\",\n \"hover:bg-muted hover:border-primary hover:text-primary\",\n \"focus-visible:ring-ring/20 focus-visible:border-primary\",\n \"active:scale-[0.98]\",\n ],\n // Enhanced ghost with better hover\n ghost: [\n \"text-foreground hover:bg-muted hover:text-foreground\",\n \"active:bg-muted/80 active:scale-[0.98]\",\n ],\n // Enhanced destructive with better feedback\n destructive: [\n \"bg-destructive text-destructive-foreground shadow-md hover:bg-destructive/90 hover:shadow-lg\",\n \"active:scale-[0.98] active:shadow-sm\",\n \"border border-destructive/20\",\n ],\n // Subtle variant for less prominent actions\n subtle: [\n \"bg-muted text-muted-foreground border border-border\",\n \"hover:bg-muted/80 hover:border-border\",\n \"active:scale-[0.98]\",\n ],\n // Link variant\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n // Improved spacing for consistency\n sm: \"h-8 px-3 text-xs rounded-sm\",\n default: \"h-10 px-4 text-sm rounded-md\",\n lg: \"h-11 px-6 text-base rounded-lg\",\n xl: \"h-12 px-8 text-lg rounded-lg\",\n icon: \"h-10 w-10 rounded-md\",\n },\n // State variants for better feedback\n state: {\n default: \"\",\n loading: \"cursor-wait\",\n success: \"bg-success hover:bg-success-600 text-success-foreground\",\n error:\n \"bg-destructive hover:bg-destructive/90 text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n state: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * Whether to render the button as a separate component (e.g. for Link)\n * @default false\n */\n asChild?: boolean;\n /**\n * Whether the button is in a loading state.\n * When true, automatically sets state to \"loading\" and shows a spinner.\n * @default false\n */\n loading?: boolean;\n /**\n * The loading text to display when loading is true.\n * If not provided, the button's children will be shown.\n * @default undefined\n */\n loadingText?: string;\n /**\n * The visual state of the button.\n * Note: If `loading` is true, this prop is ignored and state becomes \"loading\".\n * Use `state=\"success\"` or `state=\"error\"` for post-action feedback.\n * @default \"default\"\n */\n state?: \"default\" | \"loading\" | \"success\" | \"error\";\n}\n\nconst ButtonComponent = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n state = \"default\",\n loading = false,\n loadingText,\n asChild = false,\n children,\n disabled,\n ...props\n },\n ref,\n ) => {\n const Component = asChild ? Slot : \"button\";\n const isDisabled = disabled || loading;\n\n /**\n * Stops a disabled `asChild` button from doing anything.\n *\n * `disabled` is a form-control attribute. Put it on an anchor - which is what\n * `asChild` usually renders - and the browser ignores it, so\n * `<Button asChild disabled><a href=\"/checkout\">` navigated, ran the caller's\n * onClick, and ran the anchor's own onClick. `aria-disabled` announced a\n * disabled state that nothing implemented.\n *\n * The guards are *capture* handlers, and the phase is the whole point. Radix\n * Slot merges its props with the child's by calling the child's handler\n * first, with no check for `defaultPrevented` - measured, not assumed:\n *\n * child capture -> parent capture -> child onClick -> parent onClick\n *\n * So a bubble-phase handler here would run last, after both onClicks had\n * already fired. From the capture phase, `stopPropagation` reaches the bubble\n * phase before either of them does, and `preventDefault` cancels the\n * navigation.\n *\n * The one thing it cannot intercept is a capture handler on the child itself,\n * which runs before this one. That is rare enough to document rather than\n * design around.\n */\n const blockActivation = (event: React.SyntheticEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const disabledGuards =\n asChild && isDisabled\n ? {\n onClickCapture: blockActivation,\n onKeyDownCapture: (event: React.KeyboardEvent) => {\n // The two keys that activate a link or a button.\n if (event.key === \"Enter\" || event.key === \" \") {\n blockActivation(event);\n }\n },\n }\n : {};\n\n /**\n * `disabled` goes on elements that have it.\n *\n * On an anchor React renders a literal `disabled=\"\"` that means nothing and\n * does nothing. A slotted `<button>` is a different matter, and still gets\n * the real thing.\n */\n const NATIVE_DISABLEABLE = [\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"fieldset\",\n \"optgroup\",\n \"option\",\n ];\n const slottedIsNativeControl =\n React.isValidElement(children) &&\n typeof children.type === \"string\" &&\n NATIVE_DISABLEABLE.includes(children.type);\n const passNativeDisabled = !asChild || slottedIsNativeControl;\n\n // Determine final state: loading prop takes precedence over state prop\n const finalState = loading ? \"loading\" : state;\n\n const label = loading && loadingText ? loadingText : children;\n // With `asChild` the caller's element is what actually renders, so\n // loadingText has to replace the content *inside* it - swapping the element\n // itself for a string would leave Slot with nothing to clone.\n const slotted =\n asChild && label !== children && React.isValidElement(children)\n ? React.cloneElement(children, undefined, label)\n : label;\n\n return (\n <Component\n className={cn(\n buttonVariants({ variant, size, state: finalState, className }),\n )}\n ref={ref}\n {...(passNativeDisabled ? { disabled: isDisabled } : {})}\n aria-disabled={isDisabled}\n {...props}\n // After the spread: a caller's own capture handler does not get to\n // re-enable a disabled button.\n {...disabledGuards}\n >\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {/* Slottable marks the target element for `asChild`, so the spinner can\n sit alongside it. Without it, Slot sees more than one child (the\n falsy spinner expression counts too) and throws Children.only. */}\n <Slottable>{slotted}</Slottable>\n </Component>\n );\n },\n);\nButtonComponent.displayName = \"Button\";\n\n// Memoize Button for performance optimization\nconst Button = memo(ButtonComponent) as typeof ButtonComponent;\n\nexport { Button, buttonVariants };\n"]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- 'use strict';var chunk5PVFLXPO_cjs=require('./chunk-5PVFLXPO.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),a=require('react'),C=require('@radix-ui/react-popover'),classVarianceAuthority=require('class-variance-authority'),dateFns=require('date-fns');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}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 a__default=/*#__PURE__*/_interopDefault(a);var C__namespace=/*#__PURE__*/_interopNamespace(C);var Pe=classVarianceAuthority.cva("inline-block rounded-lg border bg-background shadow-lg",{variants:{variant:{default:"border-border bg-card",outline:"border-2 border-border",ghost:"border-transparent bg-transparent shadow-none"},size:{sm:"p-2",md:"p-3",lg:"p-4"}},defaultVariants:{variant:"default",size:"md"}}),R=classVarianceAuthority.cva("flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"hover:bg-muted text-foreground",selected:"bg-primary text-primary-foreground hover:bg-primary/90 font-semibold",range:"bg-primary/10 text-primary hover:bg-primary/20 font-medium",today:"border-2 border-primary text-foreground font-semibold",outside:"text-muted-foreground",disabled:"text-muted-foreground/50 cursor-not-allowed"},size:{sm:"h-7 w-7 text-xs",md:"h-9 w-9 text-sm",lg:"h-11 w-11 text-base"}},defaultVariants:{variant:"default",size:"md"}}),ee=t=>dateFns.getDaysInMonth(t),Te=(t,r)=>{let o=dateFns.getDay(dateFns.startOfMonth(t));return r===1?o===0?6:o-1:o},x=(t,r)=>!t||!r?false:dateFns.isSameDay(t,r),Se=(t,r,o)=>!r&&!o?false:r&&o?dateFns.isWithinInterval(dateFns.startOfDay(t),{start:dateFns.startOfDay(r),end:dateFns.endOfDay(o)}):r?!dateFns.isBefore(dateFns.startOfDay(t),dateFns.startOfDay(r)):o?!dateFns.isAfter(dateFns.startOfDay(t),dateFns.endOfDay(o)):false,O=(t,r,o,g,m)=>!!(r&&dateFns.isBefore(dateFns.startOfDay(t),dateFns.startOfDay(r))||o&&dateFns.isAfter(dateFns.startOfDay(t),dateFns.endOfDay(o))||g?.some(p=>x(p,t))||m?.includes(dateFns.getDay(t))),P=(t,r="en-US")=>t?new Intl.DateTimeFormat(r,{year:"numeric",month:"short",day:"numeric"}).format(t):"",Le=(t,r,o="en-US")=>!t&&!r?"":t&&r?`${P(t,o)} - ${P(r,o)}`:t?P(t,o):r?P(r,o):"",Ee=(t,r="en-US",o=g=>`${g} dates selected`)=>t.length===0?"":t.length===1?P(t[0],r):o(t.length),Ie=(t,r)=>{let o=new Intl.DateTimeFormat(t,{weekday:"short"}),g=Array.from({length:7},(m,p)=>o.format(new Date(2024,0,7+p)));return r===1?[...g.slice(1),g[0]]:g},Ye={openCalendar:"Open calendar",placeholder:"Select date...",previousMonth:"Previous month",nextMonth:"Next month",today:"Today",selectEndDate:"Select end date",multipleSelected:t=>`${t} dates selected`},te=t=>{if(t)return t instanceof Date?t:Array.isArray(t)?t[0]:t.from??t.to},F=(t,r,o,g=366)=>{let m=new Date(t);for(let p=0;p<g;p++){if(!o(m))return new Date(m);m.setDate(m.getDate()+r);}},q=(t,r)=>{let o=new Date(t.getFullYear(),t.getMonth()+r,1),g=dateFns.getDaysInMonth(o);return o.setDate(Math.min(t.getDate(),g)),o},Ve=a__default.default.forwardRef(({mode:t="single",value:r,defaultValue:o,onChange:g,minDate:m,maxDate:p,disabledDates:I,disabledDays:Y,locale:v="en-US",placeholder:ie,label:U,error:H,helperText:W,className:le,inputClassName:de,calendarClassName:ue,variant:fe,size:K,showOutsideDays:T=true,firstDayOfWeek:V=1,labels:J,...ce},ge)=>{let y=a.useMemo(()=>({...Ye,...J}),[J]),[S,L]=a.useState(false),[c,$]=a.useState(()=>te(r??o)??new Date),[h,E]=a.useState(null),me=a.useRef(null),j=a.useRef(new Map),[De,pe]=a.useState(o),Q=r!==void 0,f=Q?r:De,M=a__default.default.useCallback(e=>O(e,m,p,I,Y),[m,p,I,Y]);a__default.default.useLayoutEffect(()=>{if(!S||h)return;let e=dateFns.startOfDay(new Date),s=[te(f),e].find(d=>!!d&&!M(d));if(s){E(dateFns.startOfDay(s));return}let i=dateFns.startOfMonth(c),l=F(i,1,M,dateFns.getDaysInMonth(c));l&&E(l);},[S,h,f,c,M]);let N=e=>{Q||pe(e),g?.(e);},_=e=>{if(!O(e,m,p,I,Y)){if(t==="single")N(e),L(false);else if(t==="range"){let n=f;if(!n?.from||n.from&&n.to)N({from:e});else {let s=n.from,i=e;i<s?N({from:i,to:s}):N({from:s,to:i}),L(false);}}else if(t==="multiple"){let n=f||[],s=n.findIndex(i=>x(i,e));s>=0?N(n.filter((i,l)=>l!==s)):N([...n,e]);}}},he=a.useMemo(()=>{if(!f)return "";if(t==="single")return P(f,v);if(t==="range"){let e=f;return Le(e.from,e.to,v)}else return Ee(f,v,y.multipleSelected)},[f,t,v,y.multipleSelected]),be=a.useMemo(()=>{let e=[],n=new Date;n.setHours(0,0,0,0);let s=Te(c,V),i=ee(c);if(s>0){let l=new Date(c.getFullYear(),c.getMonth()-1),d=ee(l);for(let D=d-s+1;D<=d;D++){let u=new Date(l.getFullYear(),l.getMonth(),D);e.push({date:u,isCurrentMonth:false,isToday:x(u,n),placeholder:!T});}}for(let l=1;l<=i;l++){let d=new Date(c.getFullYear(),c.getMonth(),l);e.push({date:d,isCurrentMonth:true,isToday:x(d,n)});}if(T){let l=42-e.length,d=new Date(c.getFullYear(),c.getMonth()+1);for(let D=1;D<=l;D++){let u=new Date(d.getFullYear(),d.getMonth(),D);e.push({date:u,isCurrentMonth:false,isToday:x(u,n)});}}return e},[c,T,V]),X=e=>{let n=new Date(c.getFullYear(),c.getMonth()+e,1);if($(n),!h)return;let s=q(h,e),i=F(s,1,M,dateFns.getDaysInMonth(n))??F(s,-1,M,dateFns.getDaysInMonth(n));i&&E(i);},ve=()=>X(-1),ye=()=>X(1),Me=()=>{let e=dateFns.startOfDay(new Date);$(e);let n=F(e,1,M,31)??F(e,-1,M,31);n&&E(n);},we=(e,n)=>{if(e.key==="Enter"||e.key===" "){e.preventDefault(),_(n);return}let s=(l,d,D)=>{let u=F(l,d,M,D);u&&(E(u),(u.getMonth()!==c.getMonth()||u.getFullYear()!==c.getFullYear())&&$(new Date(u.getFullYear(),u.getMonth(),1)));},i=l=>{let d=new Date(n);d.setDate(d.getDate()+l),s(d,l>0?1:-1);};if(e.key==="ArrowRight"){e.preventDefault(),i(1);return}if(e.key==="ArrowLeft"){e.preventDefault(),i(-1);return}if(e.key==="ArrowDown"){e.preventDefault(),i(7);return}if(e.key==="ArrowUp"){e.preventDefault(),i(-7);return}if(e.key==="Home"){e.preventDefault(),s(new Date(n.getFullYear(),n.getMonth(),1),1,dateFns.getDaysInMonth(n));return}if(e.key==="End"){e.preventDefault(),s(new Date(n.getFullYear(),n.getMonth()+1,0),-1,dateFns.getDaysInMonth(n));return}if(e.key==="PageUp"){e.preventDefault(),s(q(n,-1),-1);return}if(e.key==="PageDown"){e.preventDefault(),s(q(n,1),1);return}if(e.key==="Escape"){e.preventDefault(),L(false);return}};a.useEffect(()=>{if(h&&S){let e=`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`,n=j.current.get(e);n&&n.focus();}},[h,S]);let xe=a.useMemo(()=>Ie(v,V),[v,V]),Ce=c.toLocaleDateString(v,{month:"long",year:"numeric"});return a__default.default.createElement("div",{ref:ge,className:chunkITRGJNWL_cjs.a("w-full",le),...ce},a__default.default.createElement(C__namespace.Root,{open:S,onOpenChange:L},a__default.default.createElement("div",{className:"space-y-2"},U&&a__default.default.createElement("label",{className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},U),a__default.default.createElement(C__namespace.Trigger,{asChild:true},a__default.default.createElement("button",{type:"button",className:chunkITRGJNWL_cjs.a("flex w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background","placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200 text-left",H?"border-error-500 shadow-sm hover:border-error-600 focus-visible:ring-error-500/20 focus-visible:border-error-500":"border-border shadow-sm hover:border-primary focus-visible:ring-ring/20 focus-visible:border-primary","h-10",de),onClick:()=>L(true),"aria-label":U||y.openCalendar,"aria-invalid":H},he||a__default.default.createElement("span",{className:"text-muted-foreground"},ie??y.placeholder))),W&&a__default.default.createElement("p",{className:chunkITRGJNWL_cjs.a("text-sm text-muted-foreground",H&&"text-error-600")},W)),a__default.default.createElement(C__namespace.Portal,null,a__default.default.createElement(C__namespace.Content,{className:chunkITRGJNWL_cjs.a("z-50 w-auto rounded-lg border bg-popover p-4 shadow-lg","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95","data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2","data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"),sideOffset:5,align:"start"},a__default.default.createElement("div",{ref:me,className:chunkITRGJNWL_cjs.a(Pe({variant:fe,size:K}),ue),role:"application","aria-label":"Calendar"},a__default.default.createElement("div",{className:"flex items-center justify-between mb-4"},a__default.default.createElement("div",{className:"flex items-center gap-2"},a__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",onClick:ve,"aria-label":y.previousMonth},a__default.default.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},a__default.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"}))),a__default.default.createElement("h3",{className:"text-sm font-semibold text-popover-foreground","data-testid":"calendar-month-year"},Ce),a__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",onClick:ye,"aria-label":y.nextMonth},a__default.default.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},a__default.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})))),a__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",onClick:Me,className:"text-xs"},y.today)),a__default.default.createElement("div",{className:"grid grid-cols-7 gap-1 mb-2"},xe.map(e=>a__default.default.createElement("div",{key:e,className:"text-center text-xs font-medium text-muted-foreground"},e))),a__default.default.createElement("div",{className:"grid grid-cols-7 gap-1"},be.map((e,n)=>{let s=t==="single"?x(e.date,f):t==="range"?Se(e.date,f?.from,f?.to):f?.some(u=>x(u,e.date)),i=O(e.date,m,p,I,Y),l=t==="range"&&f?.from&&!f?.to&&e.date>=f.from,d=`${e.date.getFullYear()}-${e.date.getMonth()}-${e.date.getDate()}`,D=h&&x(e.date,h);return e.placeholder?a__default.default.createElement("div",{key:`placeholder-${n}`,"aria-hidden":"true","data-calendar-placeholder":"",className:chunkITRGJNWL_cjs.a(R({variant:"default",size:K}),"invisible")}):a__default.default.createElement("button",{key:`${e.date.getTime()}-${n}`,ref:u=>{u?j.current.set(d,u):j.current.delete(d);},type:"button",onClick:()=>{T&&!e.isCurrentMonth&&$(new Date(e.date.getFullYear(),e.date.getMonth(),1)),_(e.date);},onKeyDown:u=>we(u,e.date),disabled:i||(T?false:!e.isCurrentMonth),className:chunkITRGJNWL_cjs.a(R({variant:s?"selected":l?"range":e.isToday?"today":e.isCurrentMonth?i?"disabled":"default":"outside",size:K}),!e.isCurrentMonth&&"opacity-50",D&&"ring-2 ring-brand-500 ring-offset-2 z-10"),"aria-label":e.date.toLocaleDateString(v,{weekday:"long",year:"numeric",month:"long",day:"numeric"}),"aria-selected":s,"aria-disabled":i,tabIndex:D?0:-1},e.date.getDate())})),t==="range"&&f?.from&&!f?.to&&a__default.default.createElement("div",{className:"mt-4 pt-4 border-t border-border"},a__default.default.createElement("p",{className:"text-xs text-muted-foreground text-center"},y.selectEndDate)))))))});Ve.displayName="Calendar";exports.a=Pe;exports.b=R;exports.c=Ve;//# sourceMappingURL=chunk-4UHGGKCS.cjs.map
3
- //# sourceMappingURL=chunk-4UHGGKCS.cjs.map
2
+ 'use strict';var chunk6UIT6XQH_cjs=require('./chunk-6UIT6XQH.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),a=require('react'),C=require('@radix-ui/react-popover'),classVarianceAuthority=require('class-variance-authority'),dateFns=require('date-fns');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}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 a__default=/*#__PURE__*/_interopDefault(a);var C__namespace=/*#__PURE__*/_interopNamespace(C);var Pe=classVarianceAuthority.cva("inline-block rounded-lg border bg-background shadow-lg",{variants:{variant:{default:"border-border bg-card",outline:"border-2 border-border",ghost:"border-transparent bg-transparent shadow-none"},size:{sm:"p-2",md:"p-3",lg:"p-4"}},defaultVariants:{variant:"default",size:"md"}}),R=classVarianceAuthority.cva("flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"hover:bg-muted text-foreground",selected:"bg-primary text-primary-foreground hover:bg-primary/90 font-semibold",range:"bg-primary/10 text-primary hover:bg-primary/20 font-medium",today:"border-2 border-primary text-foreground font-semibold",outside:"text-muted-foreground",disabled:"text-muted-foreground/50 cursor-not-allowed"},size:{sm:"h-7 w-7 text-xs",md:"h-9 w-9 text-sm",lg:"h-11 w-11 text-base"}},defaultVariants:{variant:"default",size:"md"}}),ee=t=>dateFns.getDaysInMonth(t),Te=(t,r)=>{let o=dateFns.getDay(dateFns.startOfMonth(t));return r===1?o===0?6:o-1:o},x=(t,r)=>!t||!r?false:dateFns.isSameDay(t,r),Se=(t,r,o)=>!r&&!o?false:r&&o?dateFns.isWithinInterval(dateFns.startOfDay(t),{start:dateFns.startOfDay(r),end:dateFns.endOfDay(o)}):r?!dateFns.isBefore(dateFns.startOfDay(t),dateFns.startOfDay(r)):o?!dateFns.isAfter(dateFns.startOfDay(t),dateFns.endOfDay(o)):false,O=(t,r,o,g,m)=>!!(r&&dateFns.isBefore(dateFns.startOfDay(t),dateFns.startOfDay(r))||o&&dateFns.isAfter(dateFns.startOfDay(t),dateFns.endOfDay(o))||g?.some(p=>x(p,t))||m?.includes(dateFns.getDay(t))),P=(t,r="en-US")=>t?new Intl.DateTimeFormat(r,{year:"numeric",month:"short",day:"numeric"}).format(t):"",Le=(t,r,o="en-US")=>!t&&!r?"":t&&r?`${P(t,o)} - ${P(r,o)}`:t?P(t,o):r?P(r,o):"",Ee=(t,r="en-US",o=g=>`${g} dates selected`)=>t.length===0?"":t.length===1?P(t[0],r):o(t.length),Ie=(t,r)=>{let o=new Intl.DateTimeFormat(t,{weekday:"short"}),g=Array.from({length:7},(m,p)=>o.format(new Date(2024,0,7+p)));return r===1?[...g.slice(1),g[0]]:g},Ye={openCalendar:"Open calendar",placeholder:"Select date...",previousMonth:"Previous month",nextMonth:"Next month",today:"Today",selectEndDate:"Select end date",multipleSelected:t=>`${t} dates selected`},te=t=>{if(t)return t instanceof Date?t:Array.isArray(t)?t[0]:t.from??t.to},F=(t,r,o,g=366)=>{let m=new Date(t);for(let p=0;p<g;p++){if(!o(m))return new Date(m);m.setDate(m.getDate()+r);}},q=(t,r)=>{let o=new Date(t.getFullYear(),t.getMonth()+r,1),g=dateFns.getDaysInMonth(o);return o.setDate(Math.min(t.getDate(),g)),o},Ve=a__default.default.forwardRef(({mode:t="single",value:r,defaultValue:o,onChange:g,minDate:m,maxDate:p,disabledDates:I,disabledDays:Y,locale:v="en-US",placeholder:ie,label:U,error:H,helperText:W,className:le,inputClassName:de,calendarClassName:ue,variant:fe,size:K,showOutsideDays:T=true,firstDayOfWeek:V=1,labels:J,...ce},ge)=>{let y=a.useMemo(()=>({...Ye,...J}),[J]),[S,L]=a.useState(false),[c,$]=a.useState(()=>te(r??o)??new Date),[h,E]=a.useState(null),me=a.useRef(null),j=a.useRef(new Map),[De,pe]=a.useState(o),Q=r!==void 0,f=Q?r:De,M=a__default.default.useCallback(e=>O(e,m,p,I,Y),[m,p,I,Y]);a__default.default.useLayoutEffect(()=>{if(!S||h)return;let e=dateFns.startOfDay(new Date),s=[te(f),e].find(d=>!!d&&!M(d));if(s){E(dateFns.startOfDay(s));return}let i=dateFns.startOfMonth(c),l=F(i,1,M,dateFns.getDaysInMonth(c));l&&E(l);},[S,h,f,c,M]);let N=e=>{Q||pe(e),g?.(e);},_=e=>{if(!O(e,m,p,I,Y)){if(t==="single")N(e),L(false);else if(t==="range"){let n=f;if(!n?.from||n.from&&n.to)N({from:e});else {let s=n.from,i=e;i<s?N({from:i,to:s}):N({from:s,to:i}),L(false);}}else if(t==="multiple"){let n=f||[],s=n.findIndex(i=>x(i,e));s>=0?N(n.filter((i,l)=>l!==s)):N([...n,e]);}}},he=a.useMemo(()=>{if(!f)return "";if(t==="single")return P(f,v);if(t==="range"){let e=f;return Le(e.from,e.to,v)}else return Ee(f,v,y.multipleSelected)},[f,t,v,y.multipleSelected]),be=a.useMemo(()=>{let e=[],n=new Date;n.setHours(0,0,0,0);let s=Te(c,V),i=ee(c);if(s>0){let l=new Date(c.getFullYear(),c.getMonth()-1),d=ee(l);for(let D=d-s+1;D<=d;D++){let u=new Date(l.getFullYear(),l.getMonth(),D);e.push({date:u,isCurrentMonth:false,isToday:x(u,n),placeholder:!T});}}for(let l=1;l<=i;l++){let d=new Date(c.getFullYear(),c.getMonth(),l);e.push({date:d,isCurrentMonth:true,isToday:x(d,n)});}if(T){let l=42-e.length,d=new Date(c.getFullYear(),c.getMonth()+1);for(let D=1;D<=l;D++){let u=new Date(d.getFullYear(),d.getMonth(),D);e.push({date:u,isCurrentMonth:false,isToday:x(u,n)});}}return e},[c,T,V]),X=e=>{let n=new Date(c.getFullYear(),c.getMonth()+e,1);if($(n),!h)return;let s=q(h,e),i=F(s,1,M,dateFns.getDaysInMonth(n))??F(s,-1,M,dateFns.getDaysInMonth(n));i&&E(i);},ve=()=>X(-1),ye=()=>X(1),Me=()=>{let e=dateFns.startOfDay(new Date);$(e);let n=F(e,1,M,31)??F(e,-1,M,31);n&&E(n);},we=(e,n)=>{if(e.key==="Enter"||e.key===" "){e.preventDefault(),_(n);return}let s=(l,d,D)=>{let u=F(l,d,M,D);u&&(E(u),(u.getMonth()!==c.getMonth()||u.getFullYear()!==c.getFullYear())&&$(new Date(u.getFullYear(),u.getMonth(),1)));},i=l=>{let d=new Date(n);d.setDate(d.getDate()+l),s(d,l>0?1:-1);};if(e.key==="ArrowRight"){e.preventDefault(),i(1);return}if(e.key==="ArrowLeft"){e.preventDefault(),i(-1);return}if(e.key==="ArrowDown"){e.preventDefault(),i(7);return}if(e.key==="ArrowUp"){e.preventDefault(),i(-7);return}if(e.key==="Home"){e.preventDefault(),s(new Date(n.getFullYear(),n.getMonth(),1),1,dateFns.getDaysInMonth(n));return}if(e.key==="End"){e.preventDefault(),s(new Date(n.getFullYear(),n.getMonth()+1,0),-1,dateFns.getDaysInMonth(n));return}if(e.key==="PageUp"){e.preventDefault(),s(q(n,-1),-1);return}if(e.key==="PageDown"){e.preventDefault(),s(q(n,1),1);return}if(e.key==="Escape"){e.preventDefault(),L(false);return}};a.useEffect(()=>{if(h&&S){let e=`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`,n=j.current.get(e);n&&n.focus();}},[h,S]);let xe=a.useMemo(()=>Ie(v,V),[v,V]),Ce=c.toLocaleDateString(v,{month:"long",year:"numeric"});return a__default.default.createElement("div",{ref:ge,className:chunkITRGJNWL_cjs.a("w-full",le),...ce},a__default.default.createElement(C__namespace.Root,{open:S,onOpenChange:L},a__default.default.createElement("div",{className:"space-y-2"},U&&a__default.default.createElement("label",{className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},U),a__default.default.createElement(C__namespace.Trigger,{asChild:true},a__default.default.createElement("button",{type:"button",className:chunkITRGJNWL_cjs.a("flex w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background","placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200 text-left",H?"border-error-500 shadow-sm hover:border-error-600 focus-visible:ring-error-500/20 focus-visible:border-error-500":"border-border shadow-sm hover:border-primary focus-visible:ring-ring/20 focus-visible:border-primary","h-10",de),onClick:()=>L(true),"aria-label":U||y.openCalendar,"aria-invalid":H},he||a__default.default.createElement("span",{className:"text-muted-foreground"},ie??y.placeholder))),W&&a__default.default.createElement("p",{className:chunkITRGJNWL_cjs.a("text-sm text-muted-foreground",H&&"text-error-600")},W)),a__default.default.createElement(C__namespace.Portal,null,a__default.default.createElement(C__namespace.Content,{className:chunkITRGJNWL_cjs.a("z-50 w-auto rounded-lg border bg-popover p-4 shadow-lg","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95","data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2","data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"),sideOffset:5,align:"start"},a__default.default.createElement("div",{ref:me,className:chunkITRGJNWL_cjs.a(Pe({variant:fe,size:K}),ue),role:"application","aria-label":"Calendar"},a__default.default.createElement("div",{className:"flex items-center justify-between mb-4"},a__default.default.createElement("div",{className:"flex items-center gap-2"},a__default.default.createElement(chunk6UIT6XQH_cjs.b,{variant:"ghost",size:"sm",onClick:ve,"aria-label":y.previousMonth},a__default.default.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},a__default.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"}))),a__default.default.createElement("h3",{className:"text-sm font-semibold text-popover-foreground","data-testid":"calendar-month-year"},Ce),a__default.default.createElement(chunk6UIT6XQH_cjs.b,{variant:"ghost",size:"sm",onClick:ye,"aria-label":y.nextMonth},a__default.default.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},a__default.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})))),a__default.default.createElement(chunk6UIT6XQH_cjs.b,{variant:"ghost",size:"sm",onClick:Me,className:"text-xs"},y.today)),a__default.default.createElement("div",{className:"grid grid-cols-7 gap-1 mb-2"},xe.map(e=>a__default.default.createElement("div",{key:e,className:"text-center text-xs font-medium text-muted-foreground"},e))),a__default.default.createElement("div",{className:"grid grid-cols-7 gap-1"},be.map((e,n)=>{let s=t==="single"?x(e.date,f):t==="range"?Se(e.date,f?.from,f?.to):f?.some(u=>x(u,e.date)),i=O(e.date,m,p,I,Y),l=t==="range"&&f?.from&&!f?.to&&e.date>=f.from,d=`${e.date.getFullYear()}-${e.date.getMonth()}-${e.date.getDate()}`,D=h&&x(e.date,h);return e.placeholder?a__default.default.createElement("div",{key:`placeholder-${n}`,"aria-hidden":"true","data-calendar-placeholder":"",className:chunkITRGJNWL_cjs.a(R({variant:"default",size:K}),"invisible")}):a__default.default.createElement("button",{key:`${e.date.getTime()}-${n}`,ref:u=>{u?j.current.set(d,u):j.current.delete(d);},type:"button",onClick:()=>{T&&!e.isCurrentMonth&&$(new Date(e.date.getFullYear(),e.date.getMonth(),1)),_(e.date);},onKeyDown:u=>we(u,e.date),disabled:i||(T?false:!e.isCurrentMonth),className:chunkITRGJNWL_cjs.a(R({variant:s?"selected":l?"range":e.isToday?"today":e.isCurrentMonth?i?"disabled":"default":"outside",size:K}),!e.isCurrentMonth&&"opacity-50",D&&"ring-2 ring-brand-500 ring-offset-2 z-10"),"aria-label":e.date.toLocaleDateString(v,{weekday:"long",year:"numeric",month:"long",day:"numeric"}),"aria-selected":s,"aria-disabled":i,tabIndex:D?0:-1},e.date.getDate())})),t==="range"&&f?.from&&!f?.to&&a__default.default.createElement("div",{className:"mt-4 pt-4 border-t border-border"},a__default.default.createElement("p",{className:"text-xs text-muted-foreground text-center"},y.selectEndDate)))))))});Ve.displayName="Calendar";exports.a=Pe;exports.b=R;exports.c=Ve;//# sourceMappingURL=chunk-RKAXTJFB.cjs.map
3
+ //# sourceMappingURL=chunk-RKAXTJFB.cjs.map