@solace-health/ui 0.10.714 → 0.10.715

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 (59) hide show
  1. package/dist/chunk-56QUGWYC.cjs +2 -0
  2. package/dist/chunk-56QUGWYC.cjs.map +1 -0
  3. package/dist/chunk-FBI5GRK6.js +2 -0
  4. package/dist/chunk-FBI5GRK6.js.map +1 -0
  5. package/dist/chunk-G3FLAJTT.js +2 -0
  6. package/dist/chunk-G3FLAJTT.js.map +1 -0
  7. package/dist/chunk-GGY7YX5J.cjs +2 -0
  8. package/dist/chunk-GGY7YX5J.cjs.map +1 -0
  9. package/dist/{chunk-IJ7FBO3U.cjs → chunk-HOL5IAQB.cjs} +2 -2
  10. package/dist/{chunk-IJ7FBO3U.cjs.map → chunk-HOL5IAQB.cjs.map} +1 -1
  11. package/dist/{chunk-VAKTF34U.cjs → chunk-PBVKIV4W.cjs} +2 -2
  12. package/dist/{chunk-VAKTF34U.cjs.map → chunk-PBVKIV4W.cjs.map} +1 -1
  13. package/dist/chunk-PKA77LCP.cjs +2 -0
  14. package/dist/chunk-PKA77LCP.cjs.map +1 -0
  15. package/dist/{chunk-RO2VXW7E.js → chunk-RXTVQ2XW.js} +2 -2
  16. package/dist/{chunk-RO2VXW7E.js.map → chunk-RXTVQ2XW.js.map} +1 -1
  17. package/dist/chunk-SYJ2NNZY.js +2 -0
  18. package/dist/chunk-SYJ2NNZY.js.map +1 -0
  19. package/dist/{chunk-V3BTA2FJ.js → chunk-WWOWTLLE.js} +2 -2
  20. package/dist/{chunk-V3BTA2FJ.js.map → chunk-WWOWTLLE.js.map} +1 -1
  21. package/dist/metafile-cjs.json +1 -1
  22. package/dist/metafile-esm.json +1 -1
  23. package/dist/v2/address-input/address-input.cjs +1 -1
  24. package/dist/v2/address-input/address-input.js +1 -1
  25. package/dist/v2/date-picker/date-picker-input.cjs +1 -1
  26. package/dist/v2/date-picker/date-picker-input.js +1 -1
  27. package/dist/v2/date-picker/date-picker.cjs +1 -1
  28. package/dist/v2/date-picker/date-picker.js +1 -1
  29. package/dist/v2/dropzone/dropzone.cjs +1 -1
  30. package/dist/v2/dropzone/dropzone.d.ts +15 -2
  31. package/dist/v2/dropzone/dropzone.js +1 -1
  32. package/dist/v2/file-upload/file-upload.cjs +2 -0
  33. package/dist/v2/file-upload/file-upload.cjs.map +1 -0
  34. package/dist/v2/file-upload/file-upload.d.ts +28 -0
  35. package/dist/v2/file-upload/file-upload.js +2 -0
  36. package/dist/v2/file-upload/file-upload.js.map +1 -0
  37. package/dist/v2/file-upload/file-upload.stories.d.ts +13 -0
  38. package/dist/v2/image-preview/image-preview.cjs +1 -1
  39. package/dist/v2/image-preview/image-preview.js +1 -1
  40. package/dist/v2/index.cjs +1 -1
  41. package/dist/v2/index.d.ts +1 -0
  42. package/dist/v2/index.js +1 -1
  43. package/dist/v2/multiselect/multiselect.cjs +1 -1
  44. package/dist/v2/multiselect/multiselect.js +1 -1
  45. package/dist/v2/tabs/tabs.cjs +1 -1
  46. package/dist/v2/tabs/tabs.d.ts +3 -3
  47. package/dist/v2/tabs/tabs.js +1 -1
  48. package/dist/v2/tabs/tabs.stories.d.ts +1 -0
  49. package/dist/v2/time-select/time-select.cjs +1 -1
  50. package/dist/v2/time-select/time-select.js +1 -1
  51. package/package.json +2 -2
  52. package/dist/chunk-AQ4VGD3O.js +0 -2
  53. package/dist/chunk-AQ4VGD3O.js.map +0 -1
  54. package/dist/chunk-JGMQQIHW.cjs +0 -2
  55. package/dist/chunk-JGMQQIHW.cjs.map +0 -1
  56. package/dist/chunk-YTBMUEFX.cjs +0 -2
  57. package/dist/chunk-YTBMUEFX.cjs.map +0 -1
  58. package/dist/chunk-YVZANY6B.js +0 -2
  59. package/dist/chunk-YVZANY6B.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),t=require('react'),o=require('radix-ui/tabs'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime');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 t__namespace=/*#__PURE__*/_interopNamespace(t);var o__namespace=/*#__PURE__*/_interopNamespace(o);var L="inline-flex items-center justify-center rounded-md bg-green-500/15 p-1 w-fit",P="px-4 py-1 h-[calc(100%-1px)] flex-1 rounded-sm border focus-visible:border-ring border-transparent data-[state=active]:bg-background data-[state=active]:text-dark-green data-[state=active]:font-bold data-[state=active]:shadow-sm",C=t__namespace.createContext("segments"),V=s=>{let n=t__namespace.useContext(C);return s??n},q=classVarianceAuthority.cva("text-muted-foreground h-12",{variants:{variant:{segments:L,"segments-dark":L,tabs:"relative isolate flex items-stretch bg-transparent gap-0 px-2 py-0 w-full overflow-x-auto overflow-y-hidden whitespace-nowrap border-b border-border [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden box-border"}},defaultVariants:{variant:"segments"}}),A=classVarianceAuthority.cva('relative inline-flex cursor-pointer items-center justify-center gap-1.5 text-base font-medium whitespace-nowrap transition-[color,box-shadow,border-color] focus-visible:outline-1 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*="size-"])]:size-4',{variants:{variant:{segments:`${P} text-secondary-foreground`,"segments-dark":`${P} text-white`,tabs:"flex-none h-full rounded-none bg-transparent text-primary hover:text-dark-green data-[state=active]:text-dark-green data-[state=active]:font-bold px-4 py-0 leading-none"}},defaultVariants:{variant:"segments"}});function X({className:s,variant:n="segments",...u}){return jsxRuntime.jsx(C.Provider,{value:n,children:jsxRuntime.jsx(o__namespace.Root,{"data-slot":"tabs",className:chunkQRO22BPZ_cjs.a("flex flex-col gap-2",s),...u})})}function j({className:s,variant:n,children:u,...m}){let x=V(n),h=t__namespace.useRef(null),p=t__namespace.useRef(null),v=t__namespace.useRef(null),[w,E]=t__namespace.useState({x:0,w:0}),[_,S]=t__namespace.useState(false),[M,y]=t__namespace.useState(false),d=t__namespace.useRef(null),T=t__namespace.useCallback(()=>{let e=h.current,r=p.current;if(!e||!r)return null;let a=r.querySelector('[role="tab"][data-state="active"]');if(!a)return null;let l=e.getBoundingClientRect(),b=a.getBoundingClientRect(),g=getComputedStyle(a),O=parseFloat(g.paddingLeft||"0"),F=parseFloat(g.paddingRight||"0"),R=b.left+O-l.left,I=b.right-F-l.left;return {x:R,w:Math.max(0,I-R)}},[]),z=t__namespace.useCallback(()=>{let e=p.current;if(!e)return {left:false,right:false};let r=e.scrollLeft>0,a=Math.ceil(e.scrollLeft+e.clientWidth)<e.scrollWidth;return {left:r,right:a}},[]),i=t__namespace.useCallback(e=>{let r=T();r&&(!e&&v.current?(v.current.style.transform=`translateX(${r.x}px)`,v.current.style.width=`${r.w}px`):E(r));},[T]);t__namespace.useLayoutEffect(()=>{i(false),S(true);},[i]),t__namespace.useEffect(()=>{let e=p.current;if(!e)return ()=>{};let r=()=>{y(true),i(false),d.current&&window.clearTimeout(d.current),d.current=window.setTimeout(()=>{y(false),i(true);},120);},a=()=>{i(true);},l=new ResizeObserver(a);l.observe(e),e.querySelectorAll('[role="tab"]').forEach(g=>l.observe(g));let b=new MutationObserver(a);return b.observe(e,{subtree:true,attributes:true,childList:true,attributeFilter:["data-state","class","style"]}),e.addEventListener("scroll",r,{passive:true}),e.addEventListener("click",a,true),e.addEventListener("keydown",a,true),()=>{l.disconnect(),b.disconnect(),e.removeEventListener("scroll",r),e.removeEventListener("click",a,true),e.removeEventListener("keydown",a,true),d.current&&window.clearTimeout(d.current);}},[i]);let N=x==="tabs"?'relative w-full overflow-x-hidden overflow-y-visible before:content-[""] before:pointer-events-none before:absolute before:inset-y-0 before:left-0 before:w-2 before:z-20 before:shadow-[inset_10px_0_8px_-8px_rgba(0,0,0,0.08)] before:transition-opacity before:duration-150 before:opacity-0 after:content-[""] after:pointer-events-none after:absolute after:inset-y-0 after:right-0 after:w-2 after:z-20 after:shadow-[inset_-10px_0_8px_-8px_rgba(0,0,0,0.08)] after:transition-opacity after:duration-150 after:opacity-0 data-[has-left=true]:before:opacity-100 data-[has-right=true]:after:opacity-100':"",{left:$,right:H}=z();return jsxRuntime.jsxs("div",{ref:h,className:N,"data-has-left":$?"true":"false","data-has-right":H?"true":"false",children:[jsxRuntime.jsx(o__namespace.List,{ref:p,"data-slot":"tabs-list",className:chunkQRO22BPZ_cjs.a(q({variant:x}),s),...m,children:u}),x==="tabs"&&jsxRuntime.jsx("span",{ref:v,"aria-hidden":true,className:chunkQRO22BPZ_cjs.a("bg-dark-green pointer-events-none absolute bottom-0 z-15 h-[1px] rounded-sm",_&&!M?"transition-[transform,width] duration-200 ease-out will-change-[transform,width]":"transition-none"),style:{transform:`translateX(${w.x}px)`,width:`${w.w}px`}})]})}function G({className:s,variant:n,...u}){let m=V(n);return jsxRuntime.jsx(o__namespace.Trigger,{"data-slot":"tabs-trigger",className:chunkQRO22BPZ_cjs.a(A({variant:m}),s),...u})}function J({className:s,...n}){return jsxRuntime.jsx(o__namespace.Content,{"data-slot":"tabs-content",className:chunkQRO22BPZ_cjs.a("flex-1 outline-none",s),...n})}exports.a=q;exports.b=A;exports.c=X;exports.d=j;exports.e=G;exports.f=J;//# sourceMappingURL=chunk-56QUGWYC.cjs.map
2
+ //# sourceMappingURL=chunk-56QUGWYC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/tabs/tabs.tsx"],"names":["segmentsList","segmentsTrigger","TabsVariantContext","t","useTabsVariant","override","ctx","tabsListVariants","cva","tabsTriggerVariants","Tabs","className","variant","props","jsx","o","cn","TabsList","children","v","wrapperRef","listRef","inkRef","ink","setInk","animate","setAnimate","scrolling","setScrolling","scrollTimer","measureInk","wrapper","list","active","wrapRect","r","cs","padL","padR","left","right","updateOverflow","syncInk","allowAnimate","m","onScroll","onMutateOrResize","ro","el","mo","wrapperShadowClasses","hasLeft","hasRight","jsxs","TabsTrigger","TabsContent"],"mappings":"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","file":"chunk-56QUGWYC.cjs","sourcesContent":["import * as React from 'react';\nimport * as TabsPrimitive from 'radix-ui/tabs';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\n\ntype TabsVariant = 'segments' | 'segments-dark' | 'tabs';\n\nconst segmentsList = 'inline-flex items-center justify-center rounded-md bg-green-500/15 p-1 w-fit';\nconst segmentsTrigger =\n 'px-4 py-1 h-[calc(100%-1px)] flex-1 rounded-sm border focus-visible:border-ring border-transparent data-[state=active]:bg-background data-[state=active]:text-dark-green data-[state=active]:font-bold data-[state=active]:shadow-sm';\n\nconst TabsVariantContext = React.createContext<TabsVariant>('segments');\n\nconst useTabsVariant = (override?: TabsVariant) => {\n const ctx = React.useContext(TabsVariantContext);\n return override ?? ctx;\n};\n\nexport const tabsListVariants = cva('text-muted-foreground h-12', {\n variants: {\n variant: {\n segments: segmentsList,\n 'segments-dark': segmentsList,\n tabs:\n 'relative isolate flex items-stretch bg-transparent gap-0 px-2 py-0 ' +\n 'w-full overflow-x-auto overflow-y-hidden whitespace-nowrap ' +\n 'border-b border-border ' +\n '[-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden box-border',\n },\n },\n defaultVariants: { variant: 'segments' },\n});\n\nexport const tabsTriggerVariants = cva(\n 'relative inline-flex cursor-pointer items-center justify-center gap-1.5 text-base font-medium whitespace-nowrap transition-[color,box-shadow,border-color] focus-visible:outline-1 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n {\n variants: {\n variant: {\n segments: `${segmentsTrigger} text-secondary-foreground`,\n 'segments-dark': `${segmentsTrigger} text-white`,\n tabs:\n 'flex-none h-full rounded-none bg-transparent text-primary hover:text-dark-green ' +\n 'data-[state=active]:text-dark-green data-[state=active]:font-bold px-4 py-0 leading-none',\n },\n },\n defaultVariants: { variant: 'segments' },\n },\n);\n\ntype RootProps = React.ComponentProps<typeof TabsPrimitive.Root> & {\n variant?: TabsVariant;\n};\nfunction Tabs({ className, variant = 'segments', ...props }: RootProps) {\n return (\n <TabsVariantContext.Provider value={variant}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn('flex flex-col gap-2', className)}\n {...props}\n />\n </TabsVariantContext.Provider>\n );\n}\n\ntype ListProps = React.ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants> & { variant?: TabsVariant };\nfunction TabsList({ className, variant, children, ...props }: ListProps) {\n const v = useTabsVariant(variant);\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n const inkRef = React.useRef<HTMLSpanElement>(null);\n\n const [ink, setInk] = React.useState({ x: 0, w: 0 });\n const [animate, setAnimate] = React.useState(false); // true for tab changes\n const [scrolling, setScrolling] = React.useState(false); // false = allow animation\n const scrollTimer = React.useRef<number | null>(null);\n\n const measureInk = React.useCallback(() => {\n const wrapper = wrapperRef.current;\n const list = listRef.current;\n if (!wrapper || !list) return null;\n\n const active = list.querySelector<HTMLElement>('[role=\"tab\"][data-state=\"active\"]');\n if (!active) return null;\n\n // measure in WRAPPER coordinates so overlay tracks correctly\n const wrapRect = wrapper.getBoundingClientRect();\n const r = active.getBoundingClientRect();\n const cs = getComputedStyle(active);\n const padL = parseFloat(cs.paddingLeft || '0');\n const padR = parseFloat(cs.paddingRight || '0');\n\n const left = r.left + padL - wrapRect.left;\n const right = r.right - padR - wrapRect.left;\n\n return { x: left, w: Math.max(0, right - left) };\n }, []);\n\n const updateOverflow = React.useCallback(() => {\n const list = listRef.current;\n if (!list) return { left: false, right: false };\n const left = list.scrollLeft > 0;\n const right = Math.ceil(list.scrollLeft + list.clientWidth) < list.scrollWidth;\n return { left, right };\n }, []);\n\n const syncInk = React.useCallback(\n (allowAnimate: boolean) => {\n const m = measureInk();\n if (!m) return;\n // when allowAnimate is false (scrolling), update the DOM directly for snappy feel\n if (!allowAnimate && inkRef.current) {\n inkRef.current.style.transform = `translateX(${m.x}px)`;\n inkRef.current.style.width = `${m.w}px`;\n } else {\n setInk(m);\n }\n },\n [measureInk],\n );\n\n // initial paint: position without animation, then enable animations\n React.useLayoutEffect(() => {\n syncInk(false);\n setAnimate(true);\n }, [syncInk]);\n\n // observers and events\n React.useEffect(() => {\n const list = listRef.current;\n if (!list) {\n return () => {\n /* no-op */\n };\n }\n\n const onScroll = () => {\n // snap ink bar during scroll\n setScrolling(true);\n syncInk(false);\n if (scrollTimer.current) window.clearTimeout(scrollTimer.current);\n scrollTimer.current = window.setTimeout(() => {\n setScrolling(false); // allow animation again after scroll settles\n syncInk(true); // ensure state matches DOM\n }, 120);\n };\n\n const onMutateOrResize = () => {\n // tab changed or size changed: animate to new spot\n syncInk(true);\n };\n\n const ro = new ResizeObserver(onMutateOrResize);\n ro.observe(list);\n list.querySelectorAll<HTMLElement>('[role=\"tab\"]').forEach((el) => ro.observe(el));\n\n const mo = new MutationObserver(onMutateOrResize);\n mo.observe(list, {\n subtree: true,\n attributes: true,\n childList: true,\n attributeFilter: ['data-state', 'class', 'style'],\n });\n\n list.addEventListener('scroll', onScroll, { passive: true });\n list.addEventListener('click', onMutateOrResize, true);\n list.addEventListener('keydown', onMutateOrResize, true);\n\n return () => {\n ro.disconnect();\n mo.disconnect();\n list.removeEventListener('scroll', onScroll);\n list.removeEventListener('click', onMutateOrResize, true);\n list.removeEventListener('keydown', onMutateOrResize, true);\n if (scrollTimer.current) window.clearTimeout(scrollTimer.current);\n };\n }, [syncInk]);\n\n // wrapper with fixed shadows\n const wrapperShadowClasses =\n v === 'tabs'\n ? 'relative w-full overflow-x-hidden overflow-y-visible' +\n ' before:content-[\"\"] before:pointer-events-none before:absolute before:inset-y-0 before:left-0 before:w-2 before:z-20' +\n ' before:shadow-[inset_10px_0_8px_-8px_rgba(0,0,0,0.08)] before:transition-opacity before:duration-150 before:opacity-0' +\n ' after:content-[\"\"] after:pointer-events-none after:absolute after:inset-y-0 after:right-0 after:w-2 after:z-20' +\n ' after:shadow-[inset_-10px_0_8px_-8px_rgba(0,0,0,0.08)] after:transition-opacity after:duration-150 after:opacity-0' +\n ' data-[has-left=true]:before:opacity-100 data-[has-right=true]:after:opacity-100'\n : '';\n\n // compute overflow flags each render\n const { left: hasLeft, right: hasRight } = updateOverflow();\n\n return (\n <div\n ref={wrapperRef}\n className={wrapperShadowClasses}\n data-has-left={hasLeft ? 'true' : 'false'}\n data-has-right={hasRight ? 'true' : 'false'}\n >\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant: v }), className)}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n\n {v === 'tabs' && (\n <span\n ref={inkRef}\n aria-hidden\n className={cn(\n 'bg-dark-green pointer-events-none absolute bottom-0 z-15 h-[1px] rounded-sm',\n // animate only when not scrolling and after first layout\n animate && !scrolling\n ? 'transition-[transform,width] duration-200 ease-out will-change-[transform,width]'\n : 'transition-none',\n )}\n style={{ transform: `translateX(${ink.x}px)`, width: `${ink.w}px` }}\n />\n )}\n </div>\n );\n}\n\ntype TriggerProps = React.ComponentProps<typeof TabsPrimitive.Trigger> &\n VariantProps<typeof tabsTriggerVariants> & { variant?: TabsVariant };\nfunction TabsTrigger({ className, variant, ...props }: TriggerProps) {\n const v = useTabsVariant(variant);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant: v }), className)}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('flex-1 outline-none', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n"]}
@@ -0,0 +1,2 @@
1
+ import {b as b$1}from'./chunk-7QWN4Z56.js';import {a as a$1,b as b$2,d,c}from'./chunk-SYJ2NNZY.js';import {b as b$3}from'./chunk-NNPDHI4P.js';import {a}from'./chunk-YTIIAU4W.js';import {useId,useRef,useState,useEffect}from'react';import {useDropzone}from'react-dropzone';import {LuLoaderCircle,LuFileCheck2,LuCheck,LuX,LuPencilLine,LuRepeat,LuTrash2,LuEye}from'react-icons/lu';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var O=255,oe=e=>e?e.length>O?`Name must be ${O} characters or fewer.`:null:"Name is required.",se=e=>e instanceof Error?e.message:"Something went wrong.",ce=({accept:e,maxSizeInMb:i,disabled:r,onFileSelect:l})=>{let[d,a]=useState(null),u=o=>{a(c(o,{maxFiles:1,maxSizeInMb:i}));};return {...useDropzone({accept:e,maxSize:i*1024*1024,multiple:false,disabled:r,onDropRejected:u,onDropAccepted:o=>{a(null),l?.(o[0]);}}),rejection:d}},b=({ref:e=void 0,label:i,onClick:r,disabled:l=false,children:d})=>jsx(b$3,{ref:e,type:"button",variant:"ghost-icon",size:"sm","aria-label":i,onClick:r,disabled:l,className:"h-6 w-6 p-0 text-gray-500 [&_svg]:size-6",children:d}),de=({fileName:e,mode:i="editable",canReplace:r=false,state:l="idle",error:d,onRename:a$2,onRemove:u,onView:h,onFileSelect:o,accept:k=a$1,maxSizeInMb:R=b$2})=>{let N=useId(),p=useRef(null),x=useRef(null),S=useRef(null),[w,y]=useState(null),[I,g]=useState(null),[s,z]=useState(false),[L,M]=useState(false),A=ce({accept:k,maxSizeInMb:R,disabled:false,onFileSelect:o}),c=w!==null,C=i==="editable",T=C&&r&&!!o,D=I??A.rejection??(l==="error"?d:null),J=async()=>{if(!(!u||L)){M(true);try{await u();}finally{M(false);}}},U=()=>{y(null),g(null);},_=async()=>{if(w===null||s)return;let t=w.trim(),f=oe(t);if(f){g(f);return}if(t===e||!a$2){U();return}z(true),g(null);try{await a$2(t),y(null);}catch(F){g(`Rename failed - ${se(F)}`);}finally{z(false);}};useEffect(()=>{if(!c)return;let t=f=>{if(f.key!=="Escape")return;let F=f.target;F!==document.body&&!p.current?.contains(F)||(f.preventDefault(),f.stopPropagation(),!s&&(y(null),g(null)));};return window.addEventListener("keydown",t,true),()=>window.removeEventListener("keydown",t,true)},[c,s]);let j=useRef(false),B=useRef(false);return useEffect(()=>{j.current&&!s&&c&&x.current?.focus(),B.current&&!c&&S.current?.focus(),j.current=s,B.current=c;},[s,c]),jsxs("div",{className:"flex flex-col gap-1",children:[jsxs("div",{ref:p,className:a("flex items-center gap-4 rounded-lg bg-green-100 p-4",c&&"py-2",l==="error"&&!c&&"border border-red-600"),children:[l==="uploading"?jsx(LuLoaderCircle,{"aria-hidden":true,className:"size-6 shrink-0 animate-spin text-green-800"}):jsx(LuFileCheck2,{"aria-hidden":true,className:"size-6 shrink-0 text-green-800"}),c?jsxs(Fragment,{children:[jsx(b$1,{ref:x,autoFocus:true,"aria-label":"File name","aria-invalid":!!I,"aria-describedby":D?N:void 0,variant:I?"invalid":"default",className:"h-10 py-0",wrapperClassName:"min-w-0 flex-1",value:w??"",disabled:s,onFocus:t=>t.currentTarget.select(),onChange:t=>y(t.target.value),onKeyDown:t=>{t.key==="Enter"&&(t.preventDefault(),_());}}),jsxs("div",{className:"flex shrink-0 items-center gap-4",children:[jsx(b,{label:"Save name",onClick:_,disabled:s,children:jsx(LuCheck,{"aria-hidden":true,className:"text-green-800"})}),jsx(b,{label:"Cancel rename",onClick:U,disabled:s,children:jsx(LuX,{"aria-hidden":true})})]})]}):jsxs(Fragment,{children:[jsx("p",{"aria-live":"polite",title:e,className:"min-w-0 flex-1 truncate text-black",children:l==="uploading"?`Uploading ${e}\u2026`:e}),l!=="uploading"&&jsxs("div",{className:"flex shrink-0 items-center gap-4",children:[C&&a$2&&jsx(b,{ref:S,label:`Rename ${e}`,onClick:()=>{y(e),g(null);},children:jsx(LuPencilLine,{"aria-hidden":true})}),T&&jsx(b,{label:`Replace ${e}`,onClick:A.open,disabled:L,children:jsx(LuRepeat,{"aria-hidden":true})}),C&&u&&jsx(b,{label:`Remove ${e}`,onClick:J,disabled:L,children:jsx(LuTrash2,{"aria-hidden":true})}),h&&jsx(b,{label:`View ${e}`,onClick:h,children:jsx(LuEye,{"aria-hidden":true})})]})]})]}),T&&jsx("input",{...A.getInputProps()}),D&&jsx("p",{id:N,role:"alert",className:"text-sm text-red-600",children:D})]})},ue=({onFileSelect:e,state:i="idle",error:r,disabled:l=false,accept:d$1,maxSizeInMb:a=b$2,title:u="Drag a file or click to browse",helperText:h=`${a} MB max file size`})=>{let o=useId(),[k,R]=useState(null),N=i==="uploading",p=k??(i==="error"?r:void 0);return jsxs("div",{className:"flex flex-col gap-1",children:[jsx(d,{variant:"compact",accept:d$1,maxFiles:1,maxSizeInMb:a,disabled:l,isLoading:N,invalid:!!p,describedBy:p?o:void 0,title:N?"Uploading\u2026":u,subtitle:h,onReject:R,onDrop:x=>{R(null),x[0]&&e?.(x[0]);}}),p&&jsx("p",{id:o,role:"alert",className:"text-sm text-red-600",children:p})]})},Ne=({fileName:e="",className:i="",...r})=>jsx("div",{className:i,children:e?jsx(de,{fileName:e,...r}):jsx(ue,{...r})});export{Ne as a};//# sourceMappingURL=chunk-FBI5GRK6.js.map
2
+ //# sourceMappingURL=chunk-FBI5GRK6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/file-upload/file-upload.tsx"],"names":["MAX_NAME_LENGTH","validateName","name","errorMessage","useFileSelect","accept","maxSizeInMb","disabled","onFileSelect","rejection","setRejection","useState","onDropRejected","rejections","getRejectionMessage","useDropzone","files","IconAction","ref","label","onClick","children","jsx","Button","AttachedFile","mode","canReplace","state","error","onRename","onRemove","onView","DEFAULT_ACCEPTED_FILE_TYPES","DEFAULT_MAX_SIZE_IN_MB","errorId","useId","rowRef","useRef","inputRef","renameButtonRef","draft","setDraft","renameError","setRenameError","isSaving","setIsSaving","isRemoving","setIsRemoving","replacePicker","isEditing","isEditable","showReplace","message","remove","cancel","save","next","validationError","e","useEffect","onKeyDown","event","target","wasSaving","wasEditing","jsxs","cn","LuLoaderCircle","LuFileCheck2","Fragment","Input","LuCheck","LuX","LuPencilLine","LuRepeat","LuTrash2","LuEye","EmptyDropzone","title","helperText","isUploading","Dropzone","FileUpload","fileName","className","props"],"mappings":"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","file":"chunk-FBI5GRK6.js","sourcesContent":["import { type ReactNode, type Ref, useEffect, useId, useRef, useState } from 'react';\nimport { type Accept, type FileRejection, useDropzone } from 'react-dropzone';\nimport {\n LuCheck,\n LuEye,\n LuFileCheck2,\n LuLoaderCircle,\n LuPencilLine,\n LuRepeat,\n LuTrash2,\n LuX,\n} from 'react-icons/lu';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/v2/button/button';\nimport {\n DEFAULT_ACCEPTED_FILE_TYPES,\n DEFAULT_MAX_SIZE_IN_MB,\n Dropzone,\n getRejectionMessage,\n} from '@/v2/dropzone/dropzone';\nimport { Input } from '@/v2/input/input';\n\nconst MAX_NAME_LENGTH = 255;\n\nconst validateName = (name: string) => {\n if (!name) return 'Name is required.';\n if (name.length > MAX_NAME_LENGTH) return `Name must be ${MAX_NAME_LENGTH} characters or fewer.`;\n return null;\n};\n\nconst errorMessage = (e: unknown) => (e instanceof Error ? e.message : 'Something went wrong.');\n\nexport type FileUploadProps = {\n /** When set, the attached-file row renders instead of the drop target. */\n fileName?: string | null;\n onFileSelect?: (file: File) => void;\n mode?: 'editable' | 'readOnly';\n canReplace?: boolean;\n state?: 'idle' | 'uploading' | 'error';\n error?: string | null;\n disabled?: boolean;\n accept?: Accept;\n maxSizeInMb?: number;\n title?: ReactNode;\n helperText?: ReactNode;\n /** Persist the new name; reject to keep the editor open and show the failure. */\n onRename?: (name: string) => Promise<void>;\n /** Detaches the file. Must not reject; the host reports its own failure. */\n onRemove?: () => Promise<void>;\n /** Opens the attached file; the view action shows only when provided. */\n onView?: () => void;\n className?: string;\n};\n\nconst useFileSelect = ({\n accept,\n maxSizeInMb,\n disabled,\n onFileSelect,\n}: {\n accept: Accept;\n maxSizeInMb: number;\n disabled: boolean;\n onFileSelect?: (file: File) => void;\n}) => {\n const [rejection, setRejection] = useState<string | null>(null);\n\n const onDropRejected = (rejections: FileRejection[]) => {\n setRejection(getRejectionMessage(rejections, { maxFiles: 1, maxSizeInMb }));\n };\n\n const dropzone = useDropzone({\n accept,\n maxSize: maxSizeInMb * 1024 * 1024,\n multiple: false,\n disabled,\n onDropRejected,\n onDropAccepted: (files) => {\n setRejection(null);\n onFileSelect?.(files[0]);\n },\n });\n\n return { ...dropzone, rejection };\n};\n\nconst IconAction = ({\n ref = undefined,\n label,\n onClick,\n disabled = false,\n children,\n}: {\n ref?: Ref<HTMLButtonElement>;\n label: string;\n onClick: () => void;\n disabled?: boolean;\n children: ReactNode;\n}) => (\n <Button\n ref={ref}\n type=\"button\"\n variant=\"ghost-icon\"\n size=\"sm\"\n aria-label={label}\n onClick={onClick}\n disabled={disabled}\n className=\"h-6 w-6 p-0 text-gray-500 [&_svg]:size-6\"\n >\n {children}\n </Button>\n);\n\ntype AttachedFileProps = { fileName: string } & Pick<\n FileUploadProps,\n | 'mode'\n | 'canReplace'\n | 'state'\n | 'error'\n | 'onRename'\n | 'onRemove'\n | 'onView'\n | 'onFileSelect'\n | 'accept'\n | 'maxSizeInMb'\n>;\n\nconst AttachedFile = ({\n fileName: name,\n mode = 'editable',\n canReplace = false,\n state = 'idle',\n error,\n onRename,\n onRemove,\n onView,\n onFileSelect,\n accept = DEFAULT_ACCEPTED_FILE_TYPES,\n maxSizeInMb = DEFAULT_MAX_SIZE_IN_MB,\n}: AttachedFileProps) => {\n const errorId = useId();\n const rowRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const renameButtonRef = useRef<HTMLButtonElement>(null);\n // null means the editor is closed.\n const [draft, setDraft] = useState<string | null>(null);\n const [renameError, setRenameError] = useState<string | null>(null);\n const [isSaving, setIsSaving] = useState(false);\n const [isRemoving, setIsRemoving] = useState(false);\n\n const replacePicker = useFileSelect({ accept, maxSizeInMb, disabled: false, onFileSelect });\n\n const isEditing = draft !== null;\n const isEditable = mode === 'editable';\n const showReplace = isEditable && canReplace && !!onFileSelect;\n const message = renameError ?? replacePicker.rejection ?? (state === 'error' ? error : null);\n\n const remove = async () => {\n if (!onRemove || isRemoving) return;\n\n setIsRemoving(true);\n try {\n await onRemove();\n } finally {\n setIsRemoving(false);\n }\n };\n\n const cancel = () => {\n setDraft(null);\n setRenameError(null);\n };\n\n const save = async () => {\n if (draft === null || isSaving) return;\n\n const next = draft.trim();\n const validationError = validateName(next);\n\n if (validationError) {\n setRenameError(validationError);\n return;\n }\n\n if (next === name || !onRename) {\n cancel();\n return;\n }\n\n setIsSaving(true);\n setRenameError(null);\n\n try {\n await onRename(next);\n setDraft(null);\n } catch (e) {\n setRenameError(`Rename failed - ${errorMessage(e)}`);\n } finally {\n setIsSaving(false);\n }\n };\n\n // Radix dialogs and drawers close on Escape from a capture-phase document listener, which runs\n // before any React handler. A window capture listener runs first, so Escape while renaming\n // cancels the rename and leaves the surrounding drawer open. Disabled controls drop focus to\n // <body> during a pending save, so Escape from there counts too; while saving it is swallowed.\n useEffect(() => {\n if (!isEditing) return undefined;\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n\n const target = event.target as Node | null;\n if (target !== document.body && !rowRef.current?.contains(target)) return;\n\n event.preventDefault();\n event.stopPropagation();\n if (isSaving) return;\n setDraft(null);\n setRenameError(null);\n };\n\n window.addEventListener('keydown', onKeyDown, true);\n return () => window.removeEventListener('keydown', onKeyDown, true);\n }, [isEditing, isSaving]);\n\n // Keep keyboard users in place: back to the input when a failed save re-enables it, and back to\n // the Rename button when the editor closes.\n const wasSaving = useRef(false);\n const wasEditing = useRef(false);\n useEffect(() => {\n if (wasSaving.current && !isSaving && isEditing) inputRef.current?.focus();\n if (wasEditing.current && !isEditing) renameButtonRef.current?.focus();\n wasSaving.current = isSaving;\n wasEditing.current = isEditing;\n }, [isSaving, isEditing]);\n\n return (\n <div className=\"flex flex-col gap-1\">\n <div\n ref={rowRef}\n className={cn(\n 'flex items-center gap-4 rounded-lg bg-green-100 p-4',\n // The 40px input is taller than the 24px icons; trim the padding so the row keeps its 56px height.\n isEditing && 'py-2',\n state === 'error' && !isEditing && 'border border-red-600',\n )}\n >\n {state === 'uploading' ? (\n <LuLoaderCircle aria-hidden className=\"size-6 shrink-0 animate-spin text-green-800\" />\n ) : (\n <LuFileCheck2 aria-hidden className=\"size-6 shrink-0 text-green-800\" />\n )}\n\n {isEditing ? (\n <>\n <Input\n ref={inputRef}\n autoFocus\n aria-label=\"File name\"\n aria-invalid={!!renameError}\n aria-describedby={message ? errorId : undefined}\n variant={renameError ? 'invalid' : 'default'}\n className=\"h-10 py-0\"\n wrapperClassName=\"min-w-0 flex-1\"\n value={draft ?? ''}\n disabled={isSaving}\n onFocus={(event) => event.currentTarget.select()}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key !== 'Enter') return;\n // Stops implicit submission of a host <form>.\n event.preventDefault();\n save();\n }}\n />\n <div className=\"flex shrink-0 items-center gap-4\">\n <IconAction label=\"Save name\" onClick={save} disabled={isSaving}>\n <LuCheck aria-hidden className=\"text-green-800\" />\n </IconAction>\n <IconAction label=\"Cancel rename\" onClick={cancel} disabled={isSaving}>\n <LuX aria-hidden />\n </IconAction>\n </div>\n </>\n ) : (\n <>\n <p aria-live=\"polite\" title={name} className=\"min-w-0 flex-1 truncate text-black\">\n {state === 'uploading' ? `Uploading ${name}…` : name}\n </p>\n {state !== 'uploading' && (\n <div className=\"flex shrink-0 items-center gap-4\">\n {isEditable && onRename && (\n <IconAction\n ref={renameButtonRef}\n label={`Rename ${name}`}\n onClick={() => {\n setDraft(name);\n setRenameError(null);\n }}\n >\n <LuPencilLine aria-hidden />\n </IconAction>\n )}\n {showReplace && (\n <IconAction\n label={`Replace ${name}`}\n onClick={replacePicker.open}\n disabled={isRemoving}\n >\n <LuRepeat aria-hidden />\n </IconAction>\n )}\n {isEditable && onRemove && (\n <IconAction label={`Remove ${name}`} onClick={remove} disabled={isRemoving}>\n <LuTrash2 aria-hidden />\n </IconAction>\n )}\n {onView && (\n <IconAction label={`View ${name}`} onClick={onView}>\n <LuEye aria-hidden />\n </IconAction>\n )}\n </div>\n )}\n </>\n )}\n </div>\n {showReplace && <input {...replacePicker.getInputProps()} />}\n {message && (\n <p id={errorId} role=\"alert\" className=\"text-sm text-red-600\">\n {message}\n </p>\n )}\n </div>\n );\n};\n\nconst EmptyDropzone = ({\n onFileSelect,\n state = 'idle',\n error,\n disabled = false,\n accept,\n maxSizeInMb = DEFAULT_MAX_SIZE_IN_MB,\n title = 'Drag a file or click to browse',\n helperText = `${maxSizeInMb} MB max file size`,\n}: Pick<\n FileUploadProps,\n | 'onFileSelect'\n | 'state'\n | 'error'\n | 'disabled'\n | 'accept'\n | 'maxSizeInMb'\n | 'title'\n | 'helperText'\n>) => {\n const errorId = useId();\n const [rejection, setRejection] = useState<string | null>(null);\n const isUploading = state === 'uploading';\n const message = rejection ?? (state === 'error' ? error : undefined);\n\n return (\n <div className=\"flex flex-col gap-1\">\n <Dropzone\n variant=\"compact\"\n accept={accept}\n maxFiles={1}\n maxSizeInMb={maxSizeInMb}\n disabled={disabled}\n isLoading={isUploading}\n invalid={!!message}\n describedBy={message ? errorId : undefined}\n title={isUploading ? 'Uploading…' : title}\n subtitle={helperText}\n onReject={setRejection}\n onDrop={(files) => {\n setRejection(null);\n if (files[0]) onFileSelect?.(files[0]);\n }}\n />\n {message && (\n <p id={errorId} role=\"alert\" className=\"text-sm text-red-600\">\n {message}\n </p>\n )}\n </div>\n );\n};\n\n/**\n * Compact single-file upload zone. Renders an empty drop target (idle, drag-over, uploading,\n * error, disabled) or, once `fileName` is set, the attached file with rename / replace / remove / view.\n */\nexport const FileUpload = ({ fileName = '', className = '', ...props }: FileUploadProps) => (\n <div className={className}>\n {fileName ? <AttachedFile fileName={fileName} {...props} /> : <EmptyDropzone {...props} />}\n </div>\n);\n"]}
@@ -0,0 +1,2 @@
1
+ import {a}from'./chunk-YTIIAU4W.js';import*as t from'react';import*as o from'radix-ui/tabs';import {cva}from'class-variance-authority';import {jsx,jsxs}from'react/jsx-runtime';var L="inline-flex items-center justify-center rounded-md bg-green-500/15 p-1 w-fit",P="px-4 py-1 h-[calc(100%-1px)] flex-1 rounded-sm border focus-visible:border-ring border-transparent data-[state=active]:bg-background data-[state=active]:text-dark-green data-[state=active]:font-bold data-[state=active]:shadow-sm",C=t.createContext("segments"),V=s=>{let n=t.useContext(C);return s??n},q=cva("text-muted-foreground h-12",{variants:{variant:{segments:L,"segments-dark":L,tabs:"relative isolate flex items-stretch bg-transparent gap-0 px-2 py-0 w-full overflow-x-auto overflow-y-hidden whitespace-nowrap border-b border-border [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden box-border"}},defaultVariants:{variant:"segments"}}),A=cva('relative inline-flex cursor-pointer items-center justify-center gap-1.5 text-base font-medium whitespace-nowrap transition-[color,box-shadow,border-color] focus-visible:outline-1 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*="size-"])]:size-4',{variants:{variant:{segments:`${P} text-secondary-foreground`,"segments-dark":`${P} text-white`,tabs:"flex-none h-full rounded-none bg-transparent text-primary hover:text-dark-green data-[state=active]:text-dark-green data-[state=active]:font-bold px-4 py-0 leading-none"}},defaultVariants:{variant:"segments"}});function X({className:s,variant:n="segments",...u}){return jsx(C.Provider,{value:n,children:jsx(o.Root,{"data-slot":"tabs",className:a("flex flex-col gap-2",s),...u})})}function j({className:s,variant:n,children:u,...m}){let x=V(n),h=t.useRef(null),p=t.useRef(null),v=t.useRef(null),[w,E]=t.useState({x:0,w:0}),[_,S]=t.useState(false),[M,y]=t.useState(false),d=t.useRef(null),T=t.useCallback(()=>{let e=h.current,r=p.current;if(!e||!r)return null;let a=r.querySelector('[role="tab"][data-state="active"]');if(!a)return null;let l=e.getBoundingClientRect(),b=a.getBoundingClientRect(),g=getComputedStyle(a),O=parseFloat(g.paddingLeft||"0"),F=parseFloat(g.paddingRight||"0"),R=b.left+O-l.left,I=b.right-F-l.left;return {x:R,w:Math.max(0,I-R)}},[]),z=t.useCallback(()=>{let e=p.current;if(!e)return {left:false,right:false};let r=e.scrollLeft>0,a=Math.ceil(e.scrollLeft+e.clientWidth)<e.scrollWidth;return {left:r,right:a}},[]),i=t.useCallback(e=>{let r=T();r&&(!e&&v.current?(v.current.style.transform=`translateX(${r.x}px)`,v.current.style.width=`${r.w}px`):E(r));},[T]);t.useLayoutEffect(()=>{i(false),S(true);},[i]),t.useEffect(()=>{let e=p.current;if(!e)return ()=>{};let r=()=>{y(true),i(false),d.current&&window.clearTimeout(d.current),d.current=window.setTimeout(()=>{y(false),i(true);},120);},a=()=>{i(true);},l=new ResizeObserver(a);l.observe(e),e.querySelectorAll('[role="tab"]').forEach(g=>l.observe(g));let b=new MutationObserver(a);return b.observe(e,{subtree:true,attributes:true,childList:true,attributeFilter:["data-state","class","style"]}),e.addEventListener("scroll",r,{passive:true}),e.addEventListener("click",a,true),e.addEventListener("keydown",a,true),()=>{l.disconnect(),b.disconnect(),e.removeEventListener("scroll",r),e.removeEventListener("click",a,true),e.removeEventListener("keydown",a,true),d.current&&window.clearTimeout(d.current);}},[i]);let N=x==="tabs"?'relative w-full overflow-x-hidden overflow-y-visible before:content-[""] before:pointer-events-none before:absolute before:inset-y-0 before:left-0 before:w-2 before:z-20 before:shadow-[inset_10px_0_8px_-8px_rgba(0,0,0,0.08)] before:transition-opacity before:duration-150 before:opacity-0 after:content-[""] after:pointer-events-none after:absolute after:inset-y-0 after:right-0 after:w-2 after:z-20 after:shadow-[inset_-10px_0_8px_-8px_rgba(0,0,0,0.08)] after:transition-opacity after:duration-150 after:opacity-0 data-[has-left=true]:before:opacity-100 data-[has-right=true]:after:opacity-100':"",{left:$,right:H}=z();return jsxs("div",{ref:h,className:N,"data-has-left":$?"true":"false","data-has-right":H?"true":"false",children:[jsx(o.List,{ref:p,"data-slot":"tabs-list",className:a(q({variant:x}),s),...m,children:u}),x==="tabs"&&jsx("span",{ref:v,"aria-hidden":true,className:a("bg-dark-green pointer-events-none absolute bottom-0 z-15 h-[1px] rounded-sm",_&&!M?"transition-[transform,width] duration-200 ease-out will-change-[transform,width]":"transition-none"),style:{transform:`translateX(${w.x}px)`,width:`${w.w}px`}})]})}function G({className:s,variant:n,...u}){let m=V(n);return jsx(o.Trigger,{"data-slot":"tabs-trigger",className:a(A({variant:m}),s),...u})}function J({className:s,...n}){return jsx(o.Content,{"data-slot":"tabs-content",className:a("flex-1 outline-none",s),...n})}export{q as a,A as b,X as c,j as d,G as e,J as f};//# sourceMappingURL=chunk-G3FLAJTT.js.map
2
+ //# sourceMappingURL=chunk-G3FLAJTT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/tabs/tabs.tsx"],"names":["segmentsList","segmentsTrigger","TabsVariantContext","useTabsVariant","override","ctx","tabsListVariants","cva","tabsTriggerVariants","Tabs","className","variant","props","jsx","cn","TabsList","children","v","wrapperRef","listRef","inkRef","ink","setInk","animate","setAnimate","scrolling","setScrolling","scrollTimer","measureInk","wrapper","list","active","wrapRect","r","cs","padL","padR","left","right","updateOverflow","syncInk","allowAnimate","m","onScroll","onMutateOrResize","ro","el","mo","wrapperShadowClasses","hasLeft","hasRight","jsxs","TabsTrigger","TabsContent"],"mappings":"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","file":"chunk-G3FLAJTT.js","sourcesContent":["import * as React from 'react';\nimport * as TabsPrimitive from 'radix-ui/tabs';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\n\ntype TabsVariant = 'segments' | 'segments-dark' | 'tabs';\n\nconst segmentsList = 'inline-flex items-center justify-center rounded-md bg-green-500/15 p-1 w-fit';\nconst segmentsTrigger =\n 'px-4 py-1 h-[calc(100%-1px)] flex-1 rounded-sm border focus-visible:border-ring border-transparent data-[state=active]:bg-background data-[state=active]:text-dark-green data-[state=active]:font-bold data-[state=active]:shadow-sm';\n\nconst TabsVariantContext = React.createContext<TabsVariant>('segments');\n\nconst useTabsVariant = (override?: TabsVariant) => {\n const ctx = React.useContext(TabsVariantContext);\n return override ?? ctx;\n};\n\nexport const tabsListVariants = cva('text-muted-foreground h-12', {\n variants: {\n variant: {\n segments: segmentsList,\n 'segments-dark': segmentsList,\n tabs:\n 'relative isolate flex items-stretch bg-transparent gap-0 px-2 py-0 ' +\n 'w-full overflow-x-auto overflow-y-hidden whitespace-nowrap ' +\n 'border-b border-border ' +\n '[-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden box-border',\n },\n },\n defaultVariants: { variant: 'segments' },\n});\n\nexport const tabsTriggerVariants = cva(\n 'relative inline-flex cursor-pointer items-center justify-center gap-1.5 text-base font-medium whitespace-nowrap transition-[color,box-shadow,border-color] focus-visible:outline-1 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n {\n variants: {\n variant: {\n segments: `${segmentsTrigger} text-secondary-foreground`,\n 'segments-dark': `${segmentsTrigger} text-white`,\n tabs:\n 'flex-none h-full rounded-none bg-transparent text-primary hover:text-dark-green ' +\n 'data-[state=active]:text-dark-green data-[state=active]:font-bold px-4 py-0 leading-none',\n },\n },\n defaultVariants: { variant: 'segments' },\n },\n);\n\ntype RootProps = React.ComponentProps<typeof TabsPrimitive.Root> & {\n variant?: TabsVariant;\n};\nfunction Tabs({ className, variant = 'segments', ...props }: RootProps) {\n return (\n <TabsVariantContext.Provider value={variant}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn('flex flex-col gap-2', className)}\n {...props}\n />\n </TabsVariantContext.Provider>\n );\n}\n\ntype ListProps = React.ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants> & { variant?: TabsVariant };\nfunction TabsList({ className, variant, children, ...props }: ListProps) {\n const v = useTabsVariant(variant);\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n const inkRef = React.useRef<HTMLSpanElement>(null);\n\n const [ink, setInk] = React.useState({ x: 0, w: 0 });\n const [animate, setAnimate] = React.useState(false); // true for tab changes\n const [scrolling, setScrolling] = React.useState(false); // false = allow animation\n const scrollTimer = React.useRef<number | null>(null);\n\n const measureInk = React.useCallback(() => {\n const wrapper = wrapperRef.current;\n const list = listRef.current;\n if (!wrapper || !list) return null;\n\n const active = list.querySelector<HTMLElement>('[role=\"tab\"][data-state=\"active\"]');\n if (!active) return null;\n\n // measure in WRAPPER coordinates so overlay tracks correctly\n const wrapRect = wrapper.getBoundingClientRect();\n const r = active.getBoundingClientRect();\n const cs = getComputedStyle(active);\n const padL = parseFloat(cs.paddingLeft || '0');\n const padR = parseFloat(cs.paddingRight || '0');\n\n const left = r.left + padL - wrapRect.left;\n const right = r.right - padR - wrapRect.left;\n\n return { x: left, w: Math.max(0, right - left) };\n }, []);\n\n const updateOverflow = React.useCallback(() => {\n const list = listRef.current;\n if (!list) return { left: false, right: false };\n const left = list.scrollLeft > 0;\n const right = Math.ceil(list.scrollLeft + list.clientWidth) < list.scrollWidth;\n return { left, right };\n }, []);\n\n const syncInk = React.useCallback(\n (allowAnimate: boolean) => {\n const m = measureInk();\n if (!m) return;\n // when allowAnimate is false (scrolling), update the DOM directly for snappy feel\n if (!allowAnimate && inkRef.current) {\n inkRef.current.style.transform = `translateX(${m.x}px)`;\n inkRef.current.style.width = `${m.w}px`;\n } else {\n setInk(m);\n }\n },\n [measureInk],\n );\n\n // initial paint: position without animation, then enable animations\n React.useLayoutEffect(() => {\n syncInk(false);\n setAnimate(true);\n }, [syncInk]);\n\n // observers and events\n React.useEffect(() => {\n const list = listRef.current;\n if (!list) {\n return () => {\n /* no-op */\n };\n }\n\n const onScroll = () => {\n // snap ink bar during scroll\n setScrolling(true);\n syncInk(false);\n if (scrollTimer.current) window.clearTimeout(scrollTimer.current);\n scrollTimer.current = window.setTimeout(() => {\n setScrolling(false); // allow animation again after scroll settles\n syncInk(true); // ensure state matches DOM\n }, 120);\n };\n\n const onMutateOrResize = () => {\n // tab changed or size changed: animate to new spot\n syncInk(true);\n };\n\n const ro = new ResizeObserver(onMutateOrResize);\n ro.observe(list);\n list.querySelectorAll<HTMLElement>('[role=\"tab\"]').forEach((el) => ro.observe(el));\n\n const mo = new MutationObserver(onMutateOrResize);\n mo.observe(list, {\n subtree: true,\n attributes: true,\n childList: true,\n attributeFilter: ['data-state', 'class', 'style'],\n });\n\n list.addEventListener('scroll', onScroll, { passive: true });\n list.addEventListener('click', onMutateOrResize, true);\n list.addEventListener('keydown', onMutateOrResize, true);\n\n return () => {\n ro.disconnect();\n mo.disconnect();\n list.removeEventListener('scroll', onScroll);\n list.removeEventListener('click', onMutateOrResize, true);\n list.removeEventListener('keydown', onMutateOrResize, true);\n if (scrollTimer.current) window.clearTimeout(scrollTimer.current);\n };\n }, [syncInk]);\n\n // wrapper with fixed shadows\n const wrapperShadowClasses =\n v === 'tabs'\n ? 'relative w-full overflow-x-hidden overflow-y-visible' +\n ' before:content-[\"\"] before:pointer-events-none before:absolute before:inset-y-0 before:left-0 before:w-2 before:z-20' +\n ' before:shadow-[inset_10px_0_8px_-8px_rgba(0,0,0,0.08)] before:transition-opacity before:duration-150 before:opacity-0' +\n ' after:content-[\"\"] after:pointer-events-none after:absolute after:inset-y-0 after:right-0 after:w-2 after:z-20' +\n ' after:shadow-[inset_-10px_0_8px_-8px_rgba(0,0,0,0.08)] after:transition-opacity after:duration-150 after:opacity-0' +\n ' data-[has-left=true]:before:opacity-100 data-[has-right=true]:after:opacity-100'\n : '';\n\n // compute overflow flags each render\n const { left: hasLeft, right: hasRight } = updateOverflow();\n\n return (\n <div\n ref={wrapperRef}\n className={wrapperShadowClasses}\n data-has-left={hasLeft ? 'true' : 'false'}\n data-has-right={hasRight ? 'true' : 'false'}\n >\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant: v }), className)}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n\n {v === 'tabs' && (\n <span\n ref={inkRef}\n aria-hidden\n className={cn(\n 'bg-dark-green pointer-events-none absolute bottom-0 z-15 h-[1px] rounded-sm',\n // animate only when not scrolling and after first layout\n animate && !scrolling\n ? 'transition-[transform,width] duration-200 ease-out will-change-[transform,width]'\n : 'transition-none',\n )}\n style={{ transform: `translateX(${ink.x}px)`, width: `${ink.w}px` }}\n />\n )}\n </div>\n );\n}\n\ntype TriggerProps = React.ComponentProps<typeof TabsPrimitive.Trigger> &\n VariantProps<typeof tabsTriggerVariants> & { variant?: TabsVariant };\nfunction TabsTrigger({ className, variant, ...props }: TriggerProps) {\n const v = useTabsVariant(variant);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant: v }), className)}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('flex-1 outline-none', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkNMXDQGPB_cjs=require('./chunk-NMXDQGPB.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),classVarianceAuthority=require('class-variance-authority'),reactDropzone=require('react-dropzone'),lu=require('react-icons/lu'),jsxRuntime=require('react/jsx-runtime');var B={"image/jpeg":[".jpeg",".jpg"],"image/png":[".png"],"image/avif":[".avif"],"image/heic":[".heic"],"image/webp":[".webp"],"application/pdf":[".pdf"],"text/csv":[".csv"],"application/xml":[".xml",".xlsx"],"application/msword":[".doc"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":[".docx"]},L=10,k=[],$={},C=()=>null,S=(c,{maxFiles:s,maxSizeInMb:a})=>{let i=c[0]?.errors[0]?.code;return i==="too-many-files"?s===1?"Please select one file at a time.":`Too many files. Please upload up to ${s} files at a time.`:i==="file-too-large"?s===1?`File is too large. Maximum size is ${a} MB.`:`File is too large. Please upload files smaller than ${a} MB.`:"File type not supported."},M=classVarianceAuthority.cva("",{variants:{variant:{default:"flex min-h-48 flex-col gap-4 hover:cursor-pointer",compact:["flex items-center justify-between gap-4 rounded-lg border bg-white p-4 text-gray-700 transition-colors","focus-visible:outline-2 focus-visible:outline-green-800"]},dragging:{true:"",false:""},loading:{true:"",false:""},invalid:{true:"",false:""},inactive:{true:"",false:""},limitReached:{true:"",false:""}},compoundVariants:[{variant:"default",dragging:true,class:"border-grey-700 opacity-75"},{variant:"default",limitReached:true,class:"hover:cursor-not-allowed"},{variant:"default",inactive:true,class:"hover:cursor-not-allowed"},{variant:"compact",dragging:false,loading:false,class:"border-dashed border-gray-300"},{variant:"compact",loading:true,class:"border-dashed border-green-800"},{variant:"compact",dragging:true,class:"border-solid border-green-800 bg-green-100"},{variant:"compact",inactive:false,loading:false,class:"cursor-pointer hover:border-solid hover:border-green-800 hover:bg-green-100"},{variant:"compact",invalid:true,class:"border-solid border-red-600"},{variant:"compact",inactive:true,class:"cursor-not-allowed border-none bg-gray-500/60 text-gray-700"}],defaultVariants:{variant:"default",dragging:false,loading:false,invalid:false,inactive:false,limitReached:false}}),U=classVarianceAuthority.cva("bg-grey-100 border-grey-300 flex w-full flex-col items-center justify-center rounded-lg border-2 border-dashed py-10 text-center",{variants:{dragging:{true:"",false:""},invalid:{true:"",false:""},inactive:{true:"",false:""},limitReached:{true:"",false:""}},compoundVariants:[{limitReached:true,dragging:false,class:"border-red-300"},{invalid:true,dragging:false,class:"border-red-600"},{inactive:true,class:"border-transparent bg-gray-500/60 text-gray-700"}],defaultVariants:{dragging:false,invalid:false,inactive:false,limitReached:false}}),J=({accept:c=B,files:s=k,maxFiles:a=5,maxSizeInMb:i=L,onDrop:j=C,className:E=void 0,wrapperClassName:u=void 0,extraInputProps:v=$,isLoading:r=false,icon:b=void 0,title:n=void 0,subtitle:o=void 0,variant:g="default",disabled:x=false,invalid:h=false,describedBy:y=void 0,onReject:N=void 0})=>{let l=s.length>=a,{getRootProps:R,getInputProps:T,isDragActive:p}=reactDropzone.useDropzone({maxFiles:a,multiple:a>1,onDrop:j,maxSize:i*1024*1024,accept:c,onDropRejected:f=>{let F=S(f,{maxFiles:a,maxSizeInMb:i});N?N(F):chunkNMXDQGPB_cjs.b.error(F.replace(/\.$/,""));},disabled:l||x||r}),w=f=>typeof f=="string",D={...T(),...v,disabled:r||v.disabled},m=x&&!r;return g==="compact"?jsxRuntime.jsxs("div",{...R({"aria-describedby":y,className:chunkQRO22BPZ_cjs.a(M({variant:g,dragging:p,loading:r,invalid:h,inactive:m}),u)}),children:[jsxRuntime.jsx("input",{...D}),jsxRuntime.jsxs("div",{className:"flex min-w-0 items-center gap-4",children:[r?jsxRuntime.jsx(lu.LuLoaderCircle,{"aria-hidden":true,className:"size-6 shrink-0 animate-spin text-green-800"}):b??jsxRuntime.jsx(lu.LuUpload,{"aria-hidden":true,className:"size-6 shrink-0"}),jsxRuntime.jsx("p",{className:"truncate",children:n})]}),!r&&o&&jsxRuntime.jsx("p",{className:"shrink-0 text-sm",children:o})]}):jsxRuntime.jsx("div",{className:chunkQRO22BPZ_cjs.a(M({variant:g,dragging:p,limitReached:l,inactive:m}),u),...R({"aria-describedby":y}),children:jsxRuntime.jsx("div",{className:chunkQRO22BPZ_cjs.a(U({dragging:p,invalid:h,inactive:m,limitReached:l}),E),children:l?jsxRuntime.jsxs("div",{className:"text flex flex-col items-center",children:[jsxRuntime.jsx(lu.LuFileWarning,{className:"h-8 w-8 text-red-500"}),jsxRuntime.jsxs("div",{className:"strong mt-4",children:["Maximum ",a," file limit reached"]})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("input",{...D}),r?jsxRuntime.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-700"}):b??jsxRuntime.jsx(lu.LuUpload,{className:"h-8 w-8 text-gray-700"}),jsxRuntime.jsxs("div",{className:"text-grey-700 mt-4 flex flex-col gap-1",children:[w(n)?jsxRuntime.jsx("div",{className:"text-body-lg",children:n}):n??jsxRuntime.jsx("p",{className:"text-body-lg",children:"Drag an image or click to browse"}),w(o)?jsxRuntime.jsx("div",{className:"text-body-sm",children:o}):o??jsxRuntime.jsxs("p",{className:"text-body-sm",children:[i," MB max file size"]})]})]})})})};exports.a=B;exports.b=L;exports.c=S;exports.d=J;//# sourceMappingURL=chunk-GGY7YX5J.cjs.map
2
+ //# sourceMappingURL=chunk-GGY7YX5J.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/dropzone/dropzone.tsx"],"names":["DEFAULT_ACCEPTED_FILE_TYPES","DEFAULT_MAX_SIZE_IN_MB","stableArray","stableObject","stableFunc","getRejectionMessage","rejections","maxFiles","maxSizeInMb","code","dropzoneVariants","cva","dropzoneBoxVariants","Dropzone","accept","files","onDrop","className","wrapperClassName","extraInputProps","isLoading","icon","title","subtitle","variant","disabled","invalid","describedBy","onReject","overMaxFileLimit","getRootProps","getInputProps","isDragActive","useDropzone","errorList","message","toast","isString","text","inputProps","isInactive","jsxs","cn","jsx","LuLoaderCircle","LuUpload","LuFileWarning","Fragment"],"mappings":"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","file":"chunk-GGY7YX5J.cjs","sourcesContent":["import { cva } from 'class-variance-authority';\nimport { Accept, FileRejection, useDropzone } from 'react-dropzone';\nimport { LuFileWarning, LuLoaderCircle, LuUpload } from 'react-icons/lu';\nimport { toast } from '@/v2/toast/toaster';\nimport { cn } from '@/lib/utils';\n\nexport const DEFAULT_ACCEPTED_FILE_TYPES: Accept = {\n 'image/jpeg': ['.jpeg', '.jpg'],\n 'image/png': ['.png'],\n 'image/avif': ['.avif'],\n 'image/heic': ['.heic'],\n 'image/webp': ['.webp'],\n 'application/pdf': ['.pdf'],\n 'text/csv': ['.csv'],\n 'application/xml': ['.xml', '.xlsx'],\n 'application/msword': ['.doc'],\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': ['.docx'],\n};\nexport const DEFAULT_MAX_SIZE_IN_MB = 10;\nconst stableArray: File[] = [];\nconst stableObject = {};\nconst stableFunc = () => null;\n\nexport const getRejectionMessage = (\n rejections: FileRejection[],\n { maxFiles, maxSizeInMb }: { maxFiles: number; maxSizeInMb: number },\n) => {\n const code = rejections[0]?.errors[0]?.code;\n if (code === 'too-many-files') {\n return maxFiles === 1\n ? 'Please select one file at a time.'\n : `Too many files. Please upload up to ${maxFiles} files at a time.`;\n }\n if (code === 'file-too-large') {\n return maxFiles === 1\n ? `File is too large. Maximum size is ${maxSizeInMb} MB.`\n : `File is too large. Please upload files smaller than ${maxSizeInMb} MB.`;\n }\n return 'File type not supported.';\n};\n\nconst dropzoneVariants = cva('', {\n variants: {\n variant: {\n default: 'flex min-h-48 flex-col gap-4 hover:cursor-pointer',\n compact: [\n 'flex items-center justify-between gap-4 rounded-lg border bg-white p-4 text-gray-700 transition-colors',\n 'focus-visible:outline-2 focus-visible:outline-green-800',\n ],\n },\n dragging: { true: '', false: '' },\n loading: { true: '', false: '' },\n invalid: { true: '', false: '' },\n inactive: { true: '', false: '' },\n limitReached: { true: '', false: '' },\n },\n compoundVariants: [\n { variant: 'default', dragging: true, class: 'border-grey-700 opacity-75' },\n { variant: 'default', limitReached: true, class: 'hover:cursor-not-allowed' },\n { variant: 'default', inactive: true, class: 'hover:cursor-not-allowed' },\n { variant: 'compact', dragging: false, loading: false, class: 'border-dashed border-gray-300' },\n { variant: 'compact', loading: true, class: 'border-dashed border-green-800' },\n { variant: 'compact', dragging: true, class: 'border-solid border-green-800 bg-green-100' },\n {\n variant: 'compact',\n inactive: false,\n loading: false,\n class: 'cursor-pointer hover:border-solid hover:border-green-800 hover:bg-green-100',\n },\n { variant: 'compact', invalid: true, class: 'border-solid border-red-600' },\n {\n variant: 'compact',\n inactive: true,\n class: 'cursor-not-allowed border-none bg-gray-500/60 text-gray-700',\n },\n ],\n defaultVariants: {\n variant: 'default',\n dragging: false,\n loading: false,\n invalid: false,\n inactive: false,\n limitReached: false,\n },\n});\n\n/** Dashed box inside the default variant. */\nconst dropzoneBoxVariants = cva(\n 'bg-grey-100 border-grey-300 flex w-full flex-col items-center justify-center rounded-lg border-2 border-dashed py-10 text-center',\n {\n variants: {\n dragging: { true: '', false: '' },\n invalid: { true: '', false: '' },\n inactive: { true: '', false: '' },\n limitReached: { true: '', false: '' },\n },\n compoundVariants: [\n { limitReached: true, dragging: false, class: 'border-red-300' },\n { invalid: true, dragging: false, class: 'border-red-600' },\n { inactive: true, class: 'border-transparent bg-gray-500/60 text-gray-700' },\n ],\n defaultVariants: { dragging: false, invalid: false, inactive: false, limitReached: false },\n },\n);\n\nexport type DropzoneProps = {\n accept?: Accept;\n files?: File[];\n maxFiles?: number;\n maxSizeInMb?: number;\n onDrop?: (acceptedFiles: File[]) => void;\n className?: string;\n wrapperClassName?: string;\n extraInputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n isLoading?: boolean;\n icon?: React.ReactNode;\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n variant?: 'default' | 'compact';\n disabled?: boolean;\n invalid?: boolean;\n /** Id of an element describing the zone, e.g. an error message. */\n describedBy?: string;\n /** Receives the rejection message instead of showing a toast. */\n onReject?: (message: string) => void;\n};\n\nexport const Dropzone = ({\n accept = DEFAULT_ACCEPTED_FILE_TYPES,\n files = stableArray,\n maxFiles = 5,\n maxSizeInMb = DEFAULT_MAX_SIZE_IN_MB,\n onDrop = stableFunc,\n className = undefined,\n wrapperClassName = undefined,\n extraInputProps = stableObject,\n isLoading = false,\n icon = undefined,\n title = undefined,\n subtitle = undefined,\n variant = 'default',\n disabled = false,\n invalid = false,\n describedBy = undefined,\n onReject = undefined,\n}: DropzoneProps) => {\n const overMaxFileLimit = files.length >= maxFiles;\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n maxFiles,\n multiple: maxFiles > 1,\n onDrop,\n maxSize: maxSizeInMb * 1024 * 1024,\n accept,\n onDropRejected: (errorList) => {\n const message = getRejectionMessage(errorList, { maxFiles, maxSizeInMb });\n if (onReject) onReject(message);\n else toast.error(message.replace(/\\.$/, ''));\n },\n disabled: overMaxFileLimit || disabled || isLoading,\n });\n\n const isString = (text?: React.ReactNode) => {\n return typeof text === 'string';\n };\n\n const inputProps = {\n ...getInputProps(),\n ...extraInputProps,\n disabled: isLoading || extraInputProps.disabled,\n };\n\n const isInactive = disabled && !isLoading;\n\n if (variant === 'compact') {\n return (\n <div\n {...getRootProps({\n 'aria-describedby': describedBy,\n className: cn(\n dropzoneVariants({\n variant,\n dragging: isDragActive,\n loading: isLoading,\n invalid,\n inactive: isInactive,\n }),\n wrapperClassName,\n ),\n })}\n >\n <input {...inputProps} />\n <div className=\"flex min-w-0 items-center gap-4\">\n {isLoading ? (\n <LuLoaderCircle aria-hidden className=\"size-6 shrink-0 animate-spin text-green-800\" />\n ) : (\n (icon ?? <LuUpload aria-hidden className=\"size-6 shrink-0\" />)\n )}\n <p className=\"truncate\">{title}</p>\n </div>\n {!isLoading && subtitle && <p className=\"shrink-0 text-sm\">{subtitle}</p>}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n dropzoneVariants({\n variant,\n dragging: isDragActive,\n limitReached: overMaxFileLimit,\n inactive: isInactive,\n }),\n wrapperClassName,\n )}\n {...getRootProps({ 'aria-describedby': describedBy })}\n >\n <div\n className={cn(\n dropzoneBoxVariants({\n dragging: isDragActive,\n invalid,\n inactive: isInactive,\n limitReached: overMaxFileLimit,\n }),\n className,\n )}\n >\n {overMaxFileLimit ? (\n <div className=\"text flex flex-col items-center\">\n <LuFileWarning className=\"h-8 w-8 text-red-500\" />\n <div className=\"strong mt-4\">Maximum {maxFiles} file limit reached</div>\n </div>\n ) : (\n <>\n <input {...inputProps} />\n {isLoading ? (\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-700\" />\n ) : (\n (icon ?? <LuUpload className=\"h-8 w-8 text-gray-700\" />)\n )}\n <div className=\"text-grey-700 mt-4 flex flex-col gap-1\">\n {isString(title) ? (\n <div className=\"text-body-lg\">{title}</div>\n ) : (\n (title ?? <p className=\"text-body-lg\">Drag an image or click to browse</p>)\n )}\n {isString(subtitle) ? (\n <div className=\"text-body-sm\">{subtitle}</div>\n ) : (\n (subtitle ?? <p className=\"text-body-sm\">{maxSizeInMb} MB max file size</p>)\n )}\n </div>\n </>\n )}\n </div>\n </div>\n );\n};\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkVJHFFAS4_cjs=require('./chunk-VJHFFAS4.cjs'),chunk777NH37Z_cjs=require('./chunk-777NH37Z.cjs'),chunk2DLCWPKO_cjs=require('./chunk-2DLCWPKO.cjs'),chunkODAOIGPB_cjs=require('./chunk-ODAOIGPB.cjs'),chunkRTFBAC56_cjs=require('./chunk-RTFBAC56.cjs'),chunkIINNHABI_cjs=require('./chunk-IINNHABI.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),Be=require('use-places-autocomplete'),react=require('react'),api=require('@react-google-maps/api'),lu=require('react-icons/lu'),T=require('dayjs'),be=require('dayjs/plugin/customParseFormat.js'),reactImask=require('react-imask'),reactDayPicker=require('react-day-picker'),jsxRuntime=require('react/jsx-runtime'),Ee=require('react-easy-crop'),luxon=require('luxon');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Be__default=/*#__PURE__*/_interopDefault(Be);var T__default=/*#__PURE__*/_interopDefault(T);var be__default=/*#__PURE__*/_interopDefault(be);var Ee__default=/*#__PURE__*/_interopDefault(Ee);T__default.default.extend(be__default.default);var te="MM/DD/YYYY",De="00/00/0000",q=["MM/DD/YYYY","MM/D/YYYY","M/DD/YYYY","M/D/YYYY","YYYY-MM-DD"];function w(i){return i?T__default.default(i).format(te):""}function Ce({className:i="",wrapperClassName:r="",value:t=void 0,onChange:a=void 0,disabled:o=false,calendarProps:l=void 0,placeholder:p,inputProps:g=void 0,showCalendarIcon:b=true,editable:m=false}){let[d,x]=react.useState(false),v=p??(m?te:"Pick a date"),[e,n]=react.useState(void 0),u=react.useRef(t);t!==u.current&&(u.current=t,e!==void 0&&n(void 0));let c=e??t,s=f=>l?.disabled?!reactDayPicker.isMatch(f,l.disabled):true,D=react.useRef(a);D.current=a;let N=react.useRef(s);N.current=s;let{ref:W,setValue:B}=reactImask.useIMask({mask:De,lazy:true,overwrite:false},{onComplete:f=>{let C=T__default.default(f,q,true);C.isValid()&&N.current(C.toDate())&&D.current?.(C.toDate());}}),de=f=>{a?.(f),B(w(f)),x(false);},me=f=>{let C=f.clipboardData.getData("text").trim(),V=T__default.default(C,q,true);if(V.isValid()&&s(V.toDate())){f.preventDefault();let J=V.toDate();a?.(J),B(w(J));}},ue=()=>{B(w(t));},ce=()=>{let f=W.current?.value??"";if(f===""){t!==void 0&&a?.(void 0);return}let C=T__default.default(f,q,true);C.isValid()&&s(C.toDate())&&a?.(C.toDate()),B(w(t));},fe=chunkQRO22BPZ_cjs.a(chunk2DLCWPKO_cjs.a(),b&&"pl-10",d?"border-dark-green":"",i);return jsxRuntime.jsxs(chunkODAOIGPB_cjs.a,{open:!o&&d,onOpenChange:x,children:[jsxRuntime.jsx(chunkODAOIGPB_cjs.b,{asChild:true,children:jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative flex w-full items-center rounded-md",r),children:[m?jsxRuntime.jsx("input",{ref:W,defaultValue:w(t),className:fe,placeholder:v,disabled:o,onFocus:ue,onPaste:me,onBlur:f=>{ce(),g?.onBlur?.(f);}}):jsxRuntime.jsx(chunk2DLCWPKO_cjs.b,{className:chunkQRO22BPZ_cjs.a(b&&"pl-10",d?"border-dark-green":"",i),...g,value:w(t),placeholder:v,readOnly:true,disabled:o}),b&&jsxRuntime.jsx("div",{className:chunkQRO22BPZ_cjs.a("absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2",o?"text-gray-400":"cursor-pointer text-black"),children:jsxRuntime.jsx(lu.LuCalendar,{size:16})})]})}),jsxRuntime.jsx(chunkODAOIGPB_cjs.c,{className:"w-auto overflow-hidden p-0",align:"start",onOpenAutoFocus:m?f=>f.preventDefault():void 0,children:jsxRuntime.jsx(chunkRTFBAC56_cjs.b,{mode:"single",selected:t?T__default.default(t).toDate():void 0,onSelect:de,...m?{month:c,onMonthChange:n}:{},...l})})]})}function Pe(i){let r=i.replace(/\D/g,"").slice(0,8);return r.length<=2?r:r.length<=4?`${r.slice(0,2)}/${r.slice(2)}`:`${r.slice(0,2)}/${r.slice(2,4)}/${r.slice(4)}`}function Ie(i){if(i.length!==10)return;let r=i.split("/");if(r.length!==3||r[2].length!==4)return;let t=parseInt(r[0],10),a=parseInt(r[1],10),o=parseInt(r[2],10);if(Number.isNaN(t)||Number.isNaN(a)||Number.isNaN(o))return;let l=new Date(o,t-1,a);if(!(l.getFullYear()!==o||l.getMonth()!==t-1||l.getDate()!==a))return l}function we({className:i,wrapperClassName:r,value:t,onChange:a,disabled:o=false,calendarProps:l,placeholder:p="MM/DD/YYYY",variant:g}){let[b,m]=react.useState(false),[d,x]=react.useState(t),[v,e]=react.useState(t?T__default.default(t).format("MM/DD/YYYY"):""),n=react.useRef(t?T__default.default(t).format("MM/DD/YYYY"):"");react.useEffect(()=>{let s=t?T__default.default(t).format("MM/DD/YYYY"):"";s!==n.current&&(n.current=s,e(s),t&&x(t));},[t]);let u=s=>{let D=Pe(s.target.value);e(D);let N=Ie(D);N?(n.current=D,a?.(N)):D===""&&(n.current="",a?.(void 0));},c=s=>{s.key==="ArrowDown"&&(s.preventDefault(),m(true)),!/[0-9/]/.test(s.key)&&!["Backspace","Delete","ArrowLeft","ArrowRight","ArrowUp","Tab"].includes(s.key)&&!s.metaKey&&!s.ctrlKey&&s.preventDefault();};return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative w-full",r),children:[jsxRuntime.jsx("input",{type:"text","data-slot":"input",className:chunkQRO22BPZ_cjs.a(chunk2DLCWPKO_cjs.a({variant:g}),"pr-10",i),value:v,placeholder:p,onChange:u,onKeyDown:c,disabled:o}),jsxRuntime.jsxs(chunkODAOIGPB_cjs.a,{open:!o&&b,onOpenChange:m,children:[jsxRuntime.jsx(chunkODAOIGPB_cjs.b,{asChild:true,children:jsxRuntime.jsx(chunkIINNHABI_cjs.b,{variant:"ghost-icon",size:"sm",className:"absolute top-1/2 right-1 -translate-y-1/2",disabled:o,"aria-label":"Select date",type:"button",children:jsxRuntime.jsx(lu.LuCalendar,{})})}),jsxRuntime.jsx(chunkODAOIGPB_cjs.c,{className:"w-auto overflow-hidden p-0",align:"end",sideOffset:10,children:jsxRuntime.jsx(chunkRTFBAC56_cjs.b,{mode:"single",selected:t,month:d,onMonthChange:x,onSelect:s=>{let D=s?T__default.default(s).format("MM/DD/YYYY"):"";n.current=D,e(D),a?.(s),m(false);},...l})})]})]})}var Re=({alt:i,className:r="",containerClassName:t="",imagePreview:a=void 0,cropper:o=void 0})=>{let[l,p]=react.useState(false),g=!a||!l,b=!!o;return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("flex max-w-[386px] flex-col",r),children:[jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative h-60 rounded-md border",t),children:[a&&b?jsxRuntime.jsx(Ee__default.default,{image:a,crop:o.crop,zoom:o.zoom,aspect:o.aspect,objectFit:"contain",onCropChange:o.setCrop,onZoomChange:o.setZoom,onCropComplete:o.onCropComplete,onMediaLoaded:()=>p(true),showGrid:false}):a&&jsxRuntime.jsx("img",{alt:i,className:`m-auto h-full w-full object-contain transition-opacity duration-300 ${l?"opacity-100":"opacity-0"}`,src:a,onLoad:()=>p(true),draggable:false}),g&&jsxRuntime.jsx("div",{"aria-label":a?"Loading image":"Awaiting image",className:"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r"})]}),!g&&b&&jsxRuntime.jsxs("div",{className:"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center gap-3",children:[jsxRuntime.jsx(chunkIINNHABI_cjs.b,{"aria-label":"zoom out",onClick:()=>o.setZoom(Math.max(o.zoom-.1,1)),className:"h-8",variant:"ghost-icon",children:jsxRuntime.jsx(lu.LuZoomOut,{})}),jsxRuntime.jsx(chunk777NH37Z_cjs.a,{value:[o.zoom],min:1,max:3,step:.01,onValueChange:m=>o.setZoom(m[0]),className:"w-full sm:flex-50",classNames:{thumb:"border-2 border-green-800",range:"bg-green-900"}}),jsxRuntime.jsx(chunkIINNHABI_cjs.b,{"aria-label":"zoom in",onClick:()=>o.setZoom(Math.min(o.zoom+.1,3)),variant:"ghost-icon",className:"h-8",children:jsxRuntime.jsx(lu.LuZoomIn,{})})]}),jsxRuntime.jsxs(chunkIINNHABI_cjs.b,{onClick:o.reset,variant:"ghost",className:"h-8 p-2",children:[jsxRuntime.jsx(lu.LuRefreshCcw,{}),"Reset"]})]})]})};var re="00:00",ne="24:00",ae=i=>luxon.DateTime.fromFormat(i,"HH:mm").isValid,se=({startTime:i=re,endTime:r=ne,interval:t=30,onChange:a=void 0,className:o="",placeholder:l="Select one",size:p="default",portal:g=true,triggerIcon:b,getSublabel:m,...d})=>{ae(i)||(console.error(`Invalid startTime: ${i}`),i=re),ae(r)||(console.error(`Invalid endTime: ${r}`),r=ne);let x=react.useMemo(()=>{let e=luxon.DateTime.fromFormat(r,"HH:mm"),n=luxon.Duration.fromObject({minutes:t}),u=[],c=luxon.DateTime.fromFormat(i,"HH:mm");for(;c<=e;){let s=c.toFormat("HH:mm");s==="00:00"&&c.equals(e)&&(s="24:00"),u.push({label:c.toFormat("h:mm a"),value:{hour:c.toFormat("HH"),min:c.toFormat("mm"),raw:s,formatted:c.toFormat("h:mm a")}}),c=c.plus(n);}return u},[i,r,t]);return jsxRuntime.jsxs(chunkVJHFFAS4_cjs.a,{onValueChange:e=>{let n=x.find(u=>u.value.raw===e);n&&a?.(n);},...d,children:[jsxRuntime.jsx(chunkVJHFFAS4_cjs.d,{className:chunkQRO22BPZ_cjs.a("max-w-[240px] md:w-[150px]",o),size:p,triggerIcon:b,children:jsxRuntime.jsx(chunkVJHFFAS4_cjs.c,{placeholder:l})}),jsxRuntime.jsx(chunkVJHFFAS4_cjs.g,{position:"popper",className:"max-h-90",portal:g,children:x.map(e=>{let n=m?.(e);return jsxRuntime.jsx(chunkVJHFFAS4_cjs.i,{className:chunkQRO22BPZ_cjs.a(n?"h-auto py-2":"h-10"),value:e.value.raw,sublabel:n,children:e.label},e.value.raw)})})]})},Pt=se;var _e=i=>{let r="",t="",a="",o="",l="",p="";if(i.address_components.forEach(d=>{d.types.some(x=>{switch(x){case "locality":return r=d.long_name,true;case "sublocality":case "administrative_area_level_3":case "neighborhood":return r=r||d.long_name,true;case "administrative_area_level_1":return t=d.short_name,true;case "street_number":return a=d.short_name,true;case "route":return o=d.short_name,true;case "subpremise":return l=d.long_name,true;case "postal_code":return p=d.short_name,true;default:return false}});}),l){let d=l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),x=i.formatted_address?.match(new RegExp(`(?<![A-Za-z])(?:Apt|Apartment|Suite|Ste|Unit|Bldg|Building|Fl|Floor|Rm|Room|Lot|Space|Spc|Trlr|Trailer|#)\\.?\\s*#?\\s*${d}\\b`,"i"));x&&(l=x[0].trim());}let g=i.geometry.location.lat(),b=i.geometry.location.lng(),m=`${a} ${o}`.trim();return {city:r,state:t,street:m,unit:l,zip:p,lat:g,long:b}},Oe=2,ze=({onSelectAddress:i=void 0,...r})=>{let t=react.useRef(null),a=react.useRef(`address-input-${Math.random().toString(36).slice(2)}-listbox`),[o,l]=react.useState(-1),{suggestions:{data:p=[]},setValue:g,clearSuggestions:b}=Be__default.default({requestOptions:{componentRestrictions:{country:"us"}}}),m=react.useCallback(()=>{b(),l(-1);},[b]);react.useEffect(()=>{let e=u=>{t.current&&!t.current.contains(u.target)&&m();},n=u=>{u.key==="Escape"&&m();};return p.length>0&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",n)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",n);}},[p.length,m]),react.useEffect(()=>{p.length===0?l(-1):l(e=>e<0?e:Math.min(e,p.length-1));},[p.length]);let d=e=>{g(e,false),m(),!(e.length<=Oe)&&Be.getGeocode({address:e}).then(n=>{if(!n||n.length===0)return;let u=_e(n[0]);i?.(u);});},x=react.useCallback(e=>{g(e),l(-1);},[g]),v=o>=0?`${a.current}-option-${o}`:void 0;return jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx(chunk2DLCWPKO_cjs.b,{...r,onChange:e=>{r.onChange?.(e),x(e.target.value);},onKeyDown:e=>{if(r.onKeyDown?.(e),!e.defaultPrevented){if(!p.length){e.key==="Escape"&&m();return}if(e.key==="ArrowDown"){e.preventDefault(),l(n=>{let u=n+1;return u>=p.length||u<0?0:u});return}if(e.key==="ArrowUp"){e.preventDefault(),l(n=>n<=0?p.length-1:n-1);return}if(e.key==="Enter"&&o>=0){e.preventDefault();let n=p[o];n&&d(n.description);return}e.key==="Escape"&&(e.preventDefault(),m());}},role:"combobox","aria-expanded":p.length>0,"aria-controls":p.length>0?a.current:void 0,"aria-activedescendant":v,"aria-autocomplete":"list"}),p.length>0&&jsxRuntime.jsx("div",{ref:t,id:a.current,role:"listbox",className:"z-modal-stacking-context absolute mt-1 max-h-60 w-full overflow-auto rounded-md border border-gray-200 bg-white shadow-lg",children:p.map((e,n)=>{let u=`${a.current}-option-${n}`,c=n===o;return jsxRuntime.jsx("div",{id:u,role:"option","aria-selected":c,tabIndex:-1,className:`cursor-pointer px-3 py-2 text-sm hover:bg-green-100 ${c?"bg-green-100":""}`,onMouseEnter:()=>l(n),onMouseDown:s=>s.preventDefault(),onClick:()=>d(e.description),onKeyDown:s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d(e.description));},children:e.description},e.place_id)})})]})},$e=["places"],Ye=({googleMapsApiKey:i,onSelectAddress:r=void 0,...t})=>{let{isLoaded:a,loadError:o}=api.useLoadScript({googleMapsApiKey:i,libraries:$e});return !a||o?jsxRuntime.jsx(chunk2DLCWPKO_cjs.b,{...t}):jsxRuntime.jsx(ze,{onSelectAddress:r,...t})};exports.a=_e;exports.b=ze;exports.c=Ye;exports.d=Ce;exports.e=we;exports.f=Re;exports.g=se;exports.h=Pt;//# sourceMappingURL=chunk-IJ7FBO3U.cjs.map
2
- //# sourceMappingURL=chunk-IJ7FBO3U.cjs.map
1
+ 'use strict';var chunkVJHFFAS4_cjs=require('./chunk-VJHFFAS4.cjs'),chunk777NH37Z_cjs=require('./chunk-777NH37Z.cjs'),chunk2DLCWPKO_cjs=require('./chunk-2DLCWPKO.cjs'),chunkODAOIGPB_cjs=require('./chunk-ODAOIGPB.cjs'),chunkRTFBAC56_cjs=require('./chunk-RTFBAC56.cjs'),chunkIINNHABI_cjs=require('./chunk-IINNHABI.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),Be=require('use-places-autocomplete'),react=require('react'),api=require('@react-google-maps/api'),lu=require('react-icons/lu'),T=require('dayjs'),be=require('dayjs/plugin/customParseFormat.js'),reactImask=require('react-imask'),reactDayPicker=require('react-day-picker'),jsxRuntime=require('react/jsx-runtime'),Ee=require('react-easy-crop'),luxon=require('luxon');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Be__default=/*#__PURE__*/_interopDefault(Be);var T__default=/*#__PURE__*/_interopDefault(T);var be__default=/*#__PURE__*/_interopDefault(be);var Ee__default=/*#__PURE__*/_interopDefault(Ee);T__default.default.extend(be__default.default);var te="MM/DD/YYYY",De="00/00/0000",q=["MM/DD/YYYY","MM/D/YYYY","M/DD/YYYY","M/D/YYYY","YYYY-MM-DD"];function w(i){return i?T__default.default(i).format(te):""}function Ce({className:i="",wrapperClassName:r="",value:t=void 0,onChange:a=void 0,disabled:o=false,calendarProps:l=void 0,placeholder:p,inputProps:g=void 0,showCalendarIcon:b=true,editable:m=false}){let[d,x]=react.useState(false),v=p??(m?te:"Pick a date"),[e,n]=react.useState(void 0),u=react.useRef(t);t!==u.current&&(u.current=t,e!==void 0&&n(void 0));let c=e??t,s=f=>l?.disabled?!reactDayPicker.isMatch(f,l.disabled):true,D=react.useRef(a);D.current=a;let N=react.useRef(s);N.current=s;let{ref:W,setValue:B}=reactImask.useIMask({mask:De,lazy:true,overwrite:false},{onComplete:f=>{let C=T__default.default(f,q,true);C.isValid()&&N.current(C.toDate())&&D.current?.(C.toDate());}}),de=f=>{a?.(f),B(w(f)),x(false);},me=f=>{let C=f.clipboardData.getData("text").trim(),V=T__default.default(C,q,true);if(V.isValid()&&s(V.toDate())){f.preventDefault();let J=V.toDate();a?.(J),B(w(J));}},ue=()=>{B(w(t));},ce=()=>{let f=W.current?.value??"";if(f===""){t!==void 0&&a?.(void 0);return}let C=T__default.default(f,q,true);C.isValid()&&s(C.toDate())&&a?.(C.toDate()),B(w(t));},fe=chunkQRO22BPZ_cjs.a(chunk2DLCWPKO_cjs.a(),b&&"pl-10",d?"border-dark-green":"",i);return jsxRuntime.jsxs(chunkODAOIGPB_cjs.a,{open:!o&&d,onOpenChange:x,children:[jsxRuntime.jsx(chunkODAOIGPB_cjs.b,{asChild:true,children:jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative flex w-full items-center rounded-md",r),children:[m?jsxRuntime.jsx("input",{ref:W,defaultValue:w(t),className:fe,placeholder:v,disabled:o,onFocus:ue,onPaste:me,onBlur:f=>{ce(),g?.onBlur?.(f);}}):jsxRuntime.jsx(chunk2DLCWPKO_cjs.b,{className:chunkQRO22BPZ_cjs.a(b&&"pl-10",d?"border-dark-green":"",i),...g,value:w(t),placeholder:v,readOnly:true,disabled:o}),b&&jsxRuntime.jsx("div",{className:chunkQRO22BPZ_cjs.a("absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2",o?"text-gray-400":"cursor-pointer text-black"),children:jsxRuntime.jsx(lu.LuCalendar,{size:16})})]})}),jsxRuntime.jsx(chunkODAOIGPB_cjs.c,{className:"w-auto overflow-hidden p-0",align:"start",onOpenAutoFocus:m?f=>f.preventDefault():void 0,children:jsxRuntime.jsx(chunkRTFBAC56_cjs.b,{mode:"single",selected:t?T__default.default(t).toDate():void 0,onSelect:de,...m?{month:c,onMonthChange:n}:{},...l})})]})}function Pe(i){let r=i.replace(/\D/g,"").slice(0,8);return r.length<=2?r:r.length<=4?`${r.slice(0,2)}/${r.slice(2)}`:`${r.slice(0,2)}/${r.slice(2,4)}/${r.slice(4)}`}function Ie(i){if(i.length!==10)return;let r=i.split("/");if(r.length!==3||r[2].length!==4)return;let t=parseInt(r[0],10),a=parseInt(r[1],10),o=parseInt(r[2],10);if(Number.isNaN(t)||Number.isNaN(a)||Number.isNaN(o))return;let l=new Date(o,t-1,a);if(!(l.getFullYear()!==o||l.getMonth()!==t-1||l.getDate()!==a))return l}function we({className:i,wrapperClassName:r,value:t,onChange:a,disabled:o=false,calendarProps:l,placeholder:p="MM/DD/YYYY",variant:g}){let[b,m]=react.useState(false),[d,x]=react.useState(t),[v,e]=react.useState(t?T__default.default(t).format("MM/DD/YYYY"):""),n=react.useRef(t?T__default.default(t).format("MM/DD/YYYY"):"");react.useEffect(()=>{let s=t?T__default.default(t).format("MM/DD/YYYY"):"";s!==n.current&&(n.current=s,e(s),t&&x(t));},[t]);let u=s=>{let D=Pe(s.target.value);e(D);let N=Ie(D);N?(n.current=D,a?.(N)):D===""&&(n.current="",a?.(void 0));},c=s=>{s.key==="ArrowDown"&&(s.preventDefault(),m(true)),!/[0-9/]/.test(s.key)&&!["Backspace","Delete","ArrowLeft","ArrowRight","ArrowUp","Tab"].includes(s.key)&&!s.metaKey&&!s.ctrlKey&&s.preventDefault();};return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative w-full",r),children:[jsxRuntime.jsx("input",{type:"text","data-slot":"input",className:chunkQRO22BPZ_cjs.a(chunk2DLCWPKO_cjs.a({variant:g}),"pr-10",i),value:v,placeholder:p,onChange:u,onKeyDown:c,disabled:o}),jsxRuntime.jsxs(chunkODAOIGPB_cjs.a,{open:!o&&b,onOpenChange:m,children:[jsxRuntime.jsx(chunkODAOIGPB_cjs.b,{asChild:true,children:jsxRuntime.jsx(chunkIINNHABI_cjs.b,{variant:"ghost-icon",size:"sm",className:"absolute top-1/2 right-1 -translate-y-1/2",disabled:o,"aria-label":"Select date",type:"button",children:jsxRuntime.jsx(lu.LuCalendar,{})})}),jsxRuntime.jsx(chunkODAOIGPB_cjs.c,{className:"w-auto overflow-hidden p-0",align:"end",sideOffset:10,children:jsxRuntime.jsx(chunkRTFBAC56_cjs.b,{mode:"single",selected:t,month:d,onMonthChange:x,onSelect:s=>{let D=s?T__default.default(s).format("MM/DD/YYYY"):"";n.current=D,e(D),a?.(s),m(false);},...l})})]})]})}var Re=({alt:i,className:r="",containerClassName:t="",imagePreview:a=void 0,cropper:o=void 0})=>{let[l,p]=react.useState(false),g=!a||!l,b=!!o;return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("flex max-w-[386px] flex-col",r),children:[jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative h-60 rounded-md border",t),children:[a&&b?jsxRuntime.jsx(Ee__default.default,{image:a,crop:o.crop,zoom:o.zoom,aspect:o.aspect,objectFit:"contain",onCropChange:o.setCrop,onZoomChange:o.setZoom,onCropComplete:o.onCropComplete,onMediaLoaded:()=>p(true),showGrid:false}):a&&jsxRuntime.jsx("img",{alt:i,className:`m-auto h-full w-full object-contain transition-opacity duration-300 ${l?"opacity-100":"opacity-0"}`,src:a,onLoad:()=>p(true),draggable:false}),g&&jsxRuntime.jsx("div",{"aria-label":a?"Loading image":"Awaiting image",className:"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r"})]}),!g&&b&&jsxRuntime.jsxs("div",{className:"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center gap-3",children:[jsxRuntime.jsx(chunkIINNHABI_cjs.b,{"aria-label":"zoom out",onClick:()=>o.setZoom(Math.max(o.zoom-.1,1)),className:"h-8",variant:"ghost-icon",children:jsxRuntime.jsx(lu.LuZoomOut,{})}),jsxRuntime.jsx(chunk777NH37Z_cjs.a,{value:[o.zoom],min:1,max:3,step:.01,onValueChange:m=>o.setZoom(m[0]),className:"w-full sm:flex-50",classNames:{thumb:"border-2 border-green-800",range:"bg-green-900"}}),jsxRuntime.jsx(chunkIINNHABI_cjs.b,{"aria-label":"zoom in",onClick:()=>o.setZoom(Math.min(o.zoom+.1,3)),variant:"ghost-icon",className:"h-8",children:jsxRuntime.jsx(lu.LuZoomIn,{})})]}),jsxRuntime.jsxs(chunkIINNHABI_cjs.b,{onClick:o.reset,variant:"ghost",className:"h-8 p-2",children:[jsxRuntime.jsx(lu.LuRefreshCcw,{}),"Reset"]})]})]})};var re="00:00",ne="24:00",ae=i=>luxon.DateTime.fromFormat(i,"HH:mm").isValid,se=({startTime:i=re,endTime:r=ne,interval:t=30,onChange:a=void 0,className:o="",placeholder:l="Select one",size:p="default",portal:g=true,triggerIcon:b,getSublabel:m,...d})=>{ae(i)||(console.error(`Invalid startTime: ${i}`),i=re),ae(r)||(console.error(`Invalid endTime: ${r}`),r=ne);let x=react.useMemo(()=>{let e=luxon.DateTime.fromFormat(r,"HH:mm"),n=luxon.Duration.fromObject({minutes:t}),u=[],c=luxon.DateTime.fromFormat(i,"HH:mm");for(;c<=e;){let s=c.toFormat("HH:mm");s==="00:00"&&c.equals(e)&&(s="24:00"),u.push({label:c.toFormat("h:mm a"),value:{hour:c.toFormat("HH"),min:c.toFormat("mm"),raw:s,formatted:c.toFormat("h:mm a")}}),c=c.plus(n);}return u},[i,r,t]);return jsxRuntime.jsxs(chunkVJHFFAS4_cjs.a,{onValueChange:e=>{let n=x.find(u=>u.value.raw===e);n&&a?.(n);},...d,children:[jsxRuntime.jsx(chunkVJHFFAS4_cjs.d,{className:chunkQRO22BPZ_cjs.a("max-w-[240px] md:w-[150px]",o),size:p,triggerIcon:b,children:jsxRuntime.jsx(chunkVJHFFAS4_cjs.c,{placeholder:l})}),jsxRuntime.jsx(chunkVJHFFAS4_cjs.g,{position:"popper",className:"max-h-90",portal:g,children:x.map(e=>{let n=m?.(e);return jsxRuntime.jsx(chunkVJHFFAS4_cjs.i,{className:chunkQRO22BPZ_cjs.a(n?"h-auto py-2":"h-10"),value:e.value.raw,sublabel:n,children:e.label},e.value.raw)})})]})},Pt=se;var _e=i=>{let r="",t="",a="",o="",l="",p="";if(i.address_components.forEach(d=>{d.types.some(x=>{switch(x){case "locality":return r=d.long_name,true;case "sublocality":case "administrative_area_level_3":case "neighborhood":return r=r||d.long_name,true;case "administrative_area_level_1":return t=d.short_name,true;case "street_number":return a=d.short_name,true;case "route":return o=d.short_name,true;case "subpremise":return l=d.long_name,true;case "postal_code":return p=d.short_name,true;default:return false}});}),l){let d=l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),x=i.formatted_address?.match(new RegExp(`(?<![A-Za-z])(?:Apt|Apartment|Suite|Ste|Unit|Bldg|Building|Fl|Floor|Rm|Room|Lot|Space|Spc|Trlr|Trailer|#)\\.?\\s*#?\\s*${d}\\b`,"i"));x&&(l=x[0].trim());}let g=i.geometry.location.lat(),b=i.geometry.location.lng(),m=`${a} ${o}`.trim();return {city:r,state:t,street:m,unit:l,zip:p,lat:g,long:b}},Oe=2,ze=({onSelectAddress:i=void 0,...r})=>{let t=react.useRef(null),a=react.useRef(`address-input-${Math.random().toString(36).slice(2)}-listbox`),[o,l]=react.useState(-1),{suggestions:{data:p=[]},setValue:g,clearSuggestions:b}=Be__default.default({requestOptions:{componentRestrictions:{country:"us"}}}),m=react.useCallback(()=>{b(),l(-1);},[b]);react.useEffect(()=>{let e=u=>{t.current&&!t.current.contains(u.target)&&m();},n=u=>{u.key==="Escape"&&m();};return p.length>0&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",n)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",n);}},[p.length,m]),react.useEffect(()=>{p.length===0?l(-1):l(e=>e<0?e:Math.min(e,p.length-1));},[p.length]);let d=e=>{g(e,false),m(),!(e.length<=Oe)&&Be.getGeocode({address:e}).then(n=>{if(!n||n.length===0)return;let u=_e(n[0]);i?.(u);});},x=react.useCallback(e=>{g(e),l(-1);},[g]),v=o>=0?`${a.current}-option-${o}`:void 0;return jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx(chunk2DLCWPKO_cjs.b,{...r,onChange:e=>{r.onChange?.(e),x(e.target.value);},onKeyDown:e=>{if(r.onKeyDown?.(e),!e.defaultPrevented){if(!p.length){e.key==="Escape"&&m();return}if(e.key==="ArrowDown"){e.preventDefault(),l(n=>{let u=n+1;return u>=p.length||u<0?0:u});return}if(e.key==="ArrowUp"){e.preventDefault(),l(n=>n<=0?p.length-1:n-1);return}if(e.key==="Enter"&&o>=0){e.preventDefault();let n=p[o];n&&d(n.description);return}e.key==="Escape"&&(e.preventDefault(),m());}},role:"combobox","aria-expanded":p.length>0,"aria-controls":p.length>0?a.current:void 0,"aria-activedescendant":v,"aria-autocomplete":"list"}),p.length>0&&jsxRuntime.jsx("div",{ref:t,id:a.current,role:"listbox",className:"z-modal-stacking-context absolute mt-1 max-h-60 w-full overflow-auto rounded-md border border-gray-200 bg-white shadow-lg",children:p.map((e,n)=>{let u=`${a.current}-option-${n}`,c=n===o;return jsxRuntime.jsx("div",{id:u,role:"option","aria-selected":c,tabIndex:-1,className:`cursor-pointer px-3 py-2 text-sm hover:bg-green-100 ${c?"bg-green-100":""}`,onMouseEnter:()=>l(n),onMouseDown:s=>s.preventDefault(),onClick:()=>d(e.description),onKeyDown:s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d(e.description));},children:e.description},e.place_id)})})]})},$e=["places"],Ye=({googleMapsApiKey:i,onSelectAddress:r=void 0,...t})=>{let{isLoaded:a,loadError:o}=api.useLoadScript({googleMapsApiKey:i,libraries:$e});return !a||o?jsxRuntime.jsx(chunk2DLCWPKO_cjs.b,{...t}):jsxRuntime.jsx(ze,{onSelectAddress:r,...t})};exports.a=_e;exports.b=ze;exports.c=Ye;exports.d=Ce;exports.e=we;exports.f=Re;exports.g=se;exports.h=Pt;//# sourceMappingURL=chunk-HOL5IAQB.cjs.map
2
+ //# sourceMappingURL=chunk-HOL5IAQB.cjs.map