@xploreu/components 0.4.45 → 0.4.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-7EXEQDMX.js +2 -0
- package/dist/chunk-7EXEQDMX.js.map +1 -0
- package/dist/{chunk-KUOFW7JO.js → chunk-B5LYJTBB.js} +2 -2
- package/dist/{chunk-KUOFW7JO.js.map → chunk-B5LYJTBB.js.map} +1 -1
- package/dist/chunk-DQGZIFNP.js +2 -0
- package/dist/chunk-DQGZIFNP.js.map +1 -0
- package/dist/{chunk-F77XVICY.js → chunk-FIDOWSDH.js} +2 -2
- package/dist/{chunk-F77XVICY.js.map → chunk-FIDOWSDH.js.map} +1 -1
- package/dist/{chunk-5VZ6QNBI.js → chunk-IFBRARGK.js} +2 -2
- package/dist/{chunk-5VZ6QNBI.js.map → chunk-IFBRARGK.js.map} +1 -1
- package/dist/{chunk-NFLQZ5NB.js → chunk-NBM4LIT4.js} +2 -2
- package/dist/{chunk-NFLQZ5NB.js.map → chunk-NBM4LIT4.js.map} +1 -1
- package/dist/{chunk-ZK7MHZFG.js → chunk-OBS7TDVV.js} +2 -2
- package/dist/{chunk-ZK7MHZFG.js.map → chunk-OBS7TDVV.js.map} +1 -1
- package/dist/{chunk-C675EWZW.js → chunk-QIP6KFG2.js} +2 -2
- package/dist/{chunk-C675EWZW.js.map → chunk-QIP6KFG2.js.map} +1 -1
- package/dist/{chunk-YPV6XEV4.js → chunk-S4L5WILL.js} +2 -2
- package/dist/{chunk-YPV6XEV4.js.map → chunk-S4L5WILL.js.map} +1 -1
- package/dist/{chunk-XIZN73T3.js → chunk-YHY3VXCO.js} +2 -2
- package/dist/{chunk-XIZN73T3.js.map → chunk-YHY3VXCO.js.map} +1 -1
- package/dist/composites/combobox-chip-outside.js +1 -1
- package/dist/composites/index.js +1 -1
- package/dist/ui/alert-dialog.js +1 -1
- package/dist/ui/alerter.js +1 -1
- package/dist/ui/button.js +1 -1
- package/dist/ui/calendar.js +1 -1
- package/dist/ui/carousel.js +1 -1
- package/dist/ui/date-multiple-picker.js +1 -1
- package/dist/ui/date-picker.js +1 -1
- package/dist/ui/date-range-picker.js +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui/tabs.js +1 -1
- package/dist/ui/toast.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-UINS73U7.js +0 -2
- package/dist/chunk-UINS73U7.js.map +0 -1
- package/dist/chunk-XZN4XT6V.js +0 -2
- package/dist/chunk-XZN4XT6V.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/toast.tsx"],"names":["ToastPortal","props","jsx","positionVariants","ToastViewport","className","position","cn","ToastProvider","Toast","children","style","jsxs","ToastContent","ToastTitle","ToastDescription","ToastAction","render","Button","ToastClose","XIcon","ToastIcon","type","icon","check_square_icon_default","info_square_icon_default","danger_triangle_icon_default","close_square_icon_default","Loader2Icon","POSITIONS","ToastList","defaultPosition","limit","toasts","useToastManager","item","toastItem","index","Toaster","toastManager","toast","pos"],"mappings":"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","file":"chunk-5VZ6QNBI.js","sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport {\r\n ToastPortal as ToastPortalPrimitive,\r\n ToastViewport as ToastViewportPrimitive,\r\n ToastProvider as ToastProviderPrimitive,\r\n Toast as ToastPrimitive,\r\n ToastContent as ToastContentPrimitive,\r\n ToastTitle as ToastTitlePrimitive,\r\n ToastDescription as ToastDescriptionPrimitive,\r\n ToastAction as ToastActionPrimitive,\r\n ToastClose as ToastClosePrimitive,\r\n toast,\r\n createToastManager,\r\n useToastManager,\r\n type ToastPortalProps as ToastPortalPrimitiveProps,\r\n type ToastViewportProps as ToastViewportPrimitiveProps,\r\n type ToastProviderProps as ToastProviderPrimitiveProps,\r\n type ToastProps as ToastPrimitiveProps,\r\n type ToastContentProps as ToastContentPrimitiveProps,\r\n type ToastTitleProps as ToastTitlePrimitiveProps,\r\n type ToastDescriptionProps as ToastDescriptionPrimitiveProps,\r\n type ToastActionProps as ToastActionPrimitiveProps,\r\n type ToastCloseProps as ToastClosePrimitiveProps,\r\n} from \"../primitives/toast\";\r\nimport { cn } from \"@xploreu/lib/cn\";\r\nimport {\r\n InfoSquareIcon,\r\n CheckSquareIcon,\r\n CloseSquareIcon,\r\n DangerTriangleIcon,\r\n} from \"../icons\";\r\nimport { Button } from \"./button\";\r\nimport {\r\n XIcon,\r\n Loader2Icon\r\n} from \"lucide-react\"\r\n\r\ntype ToastPortalProps = ToastPortalPrimitiveProps;\r\n\r\nfunction ToastPortal({ ...props }: ToastPortalProps) {\r\n return <ToastPortalPrimitive {...props} />;\r\n}\r\n\r\nexport type ToastPosition =\r\n | \"top-right\"\r\n | \"top-left\"\r\n | \"top-center\"\r\n | \"bottom-right\"\r\n | \"bottom-left\"\r\n | \"bottom-center\";\r\n\r\ndeclare module \"@base-ui/react/toast\" {\r\n interface ToastObject<Data extends object> {\r\n position?: ToastPosition;\r\n }\r\n}\r\n\r\ntype ToastViewportProps = ToastViewportPrimitiveProps & {\r\n position?: ToastPosition;\r\n};\r\n\r\nconst positionVariants: Record<ToastPosition, string> = {\r\n \"top-right\":\r\n \"fixed top-4 inset-x-4 sm:inset-x-auto sm:top-4 sm:right-4 sm:left-auto sm:w-full sm:max-w-sm\",\r\n \"top-left\":\r\n \"fixed top-4 inset-x-4 sm:inset-x-auto sm:top-4 sm:left-4 sm:right-auto sm:w-full sm:max-w-sm\",\r\n \"top-center\":\r\n \"fixed top-4 left-1/2 -translate-x-1/2 w-[calc(100%-2rem)] sm:w-full sm:max-w-sm\",\r\n \"bottom-right\":\r\n \"fixed bottom-4 inset-x-4 sm:inset-x-auto sm:bottom-4 sm:right-4 sm:left-auto sm:w-full sm:max-w-sm\",\r\n \"bottom-left\":\r\n \"fixed bottom-4 inset-x-4 sm:inset-x-auto sm:bottom-4 sm:left-4 sm:right-auto sm:w-full sm:max-w-sm\",\r\n \"bottom-center\":\r\n \"fixed bottom-4 left-1/2 -translate-x-1/2 w-[calc(100%-2rem)] sm:w-full sm:max-w-sm\",\r\n};\r\n\r\nfunction ToastViewport({\r\n className,\r\n position = \"top-right\",\r\n ...props\r\n}: ToastViewportProps) {\r\n return (\r\n <ToastViewportPrimitive\r\n className={cn(\r\n \"group/viewport pointer-events-none z-[1000] mx-auto outline-none\",\r\n positionVariants[position],\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastProviderProps = ToastProviderPrimitiveProps;\r\n\r\nfunction ToastProvider(props: ToastProviderProps) {\r\n return <ToastProviderPrimitive {...props} />;\r\n}\r\n\r\ntype ToastProps = ToastPrimitiveProps\r\n\r\nfunction Toast({\r\n className,\r\n children,\r\n style,\r\n ...props\r\n}: ToastProps) {\r\n return (\r\n <ToastPrimitive\r\n style={style}\r\n className={cn(\r\n \"group/toast pointer-events-auto absolute right-0 z-[calc(1000-var(--toast-index))] w-full shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-focus-ring\",\r\n \"bottom-0 origin-bottom rounded-l-[10.4px] rounded-r-lg\",\r\n \"data-[position^=top]:top-0 data-[position^=top]:bottom-auto data-[position^=top]:origin-top\",\r\n \"[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc((var(--toast-index)*(var(--height)+var(--gap))*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]\",\r\n \"data-[position^=top]:[--offset-y:calc((var(--toast-index)*(var(--height)+var(--gap)))+var(--toast-swipe-movement-y))]\",\r\n \"h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]\",\r\n \"data-[position^=top]:[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+(var(--toast-index)*var(--peek))+(var(--shrink)*var(--height))))_scale(var(--scale))]\",\r\n \"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\r\n \"group-hover/viewport:data-expanded:h-(--toast-height) group-hover/viewport:data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]\",\r\n \"group-focus-within/viewport:data-expanded:h-(--toast-height) group-focus-within/viewport:data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]\",\r\n \"data-limited:opacity-0 data-limited:pointer-events-none data-limited:invisible data-starting-style:[transform:translateY(150%)]\",\r\n \"data-[position^=top]:data-starting-style:[transform:translateY(-150%)]\",\r\n \"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]\",\r\n \"data-[position^=top]:[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(-150%)]\",\r\n \"data-ending-style:opacity-0\",\r\n \"data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\r\n \"data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\r\n \"data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\r\n \"data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className={cn(\r\n \"absolute left-0 inset-y-0 w-[10.4px] rounded-l-[10.4px] bg-[linear-gradient(180deg,#377DFA_0%,#185BC2_80%)]\",\r\n \"group-data-[type=warning]/toast:bg-[linear-gradient(180deg,#F79009_0%,#B54708_80%)]\",\r\n \"group-data-[type=info]/toast:bg-[linear-gradient(180deg,#068BEE_0%,#175BCC_80%)]\",\r\n \"group-data-[type=success]/toast:bg-[linear-gradient(180deg,#17B26A_0%,#067647_80%)]\",\r\n \"group-data-[type=error]/toast:bg-[linear-gradient(180deg,#F04438_0%,#B42318_80%)]\",\r\n )} />\r\n <div className={cn(\r\n \"relative border border-border-secondary rounded-lg ml-[2.4px] bg-bg-primary z-10 bg-radial-[100%_200%_at_0%_0%] to-bg-primary\",\r\n \"from-modal-dialog-stop-0\",\r\n \"group-data-[type=warning]/toast:from-utility-warning-50\",\r\n \"group-data-[type=info]/toast:from-utility-blue-50\",\r\n \"group-data-[type=success]/toast:from-utility-success-50\",\r\n \"group-data-[type=error]/toast:from-utility-error-50\",\r\n )}>\r\n {children}\r\n </div>\r\n </ToastPrimitive>\r\n );\r\n}\r\n\r\ntype ToastContentProps = ToastContentPrimitiveProps;\r\n\r\nfunction ToastContent({ className, ...props }: ToastContentProps) {\r\n return (\r\n <ToastContentPrimitive\r\n className={cn(\r\n \"flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-behind/toast:opacity-0 group-hover/viewport:group-data-expanded/toast:opacity-100 group-focus-within/viewport:group-data-expanded/toast:opacity-100\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastTitleProps = ToastTitlePrimitiveProps;\r\n\r\nfunction ToastTitle({ className, ...props }: ToastTitleProps) {\r\n return (\r\n <ToastTitlePrimitive\r\n className={cn(\r\n \"text-label-semibold-2 text-text-primary\",\r\n \"group-data-[type=warning]/toast:text-text-warning-primary\",\r\n \"group-data-[type=info]/toast:text-text-info-primary\",\r\n \"group-data-[type=success]/toast:text-text-success-primary\",\r\n \"group-data-[type=error]/toast:text-text-error-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastDescriptionProps = ToastDescriptionPrimitiveProps;\r\n\r\nfunction ToastDescription({ className, ...props }: ToastDescriptionProps) {\r\n return (\r\n <ToastDescriptionPrimitive\r\n className={cn(\"text-body-regular-2 text-text-secondary\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastActionProps = ToastActionPrimitiveProps;\r\n\r\nfunction ToastAction({\r\n className,\r\n render = <Button size=\"sm\" variant=\"secondary\" />,\r\n ...props\r\n}: ToastActionProps) {\r\n return (\r\n <ToastActionPrimitive\r\n render={render}\r\n className={cn(\"shrink-0\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ToastCloseProps = ToastClosePrimitiveProps;\r\n\r\nfunction ToastClose({ className, children, ...props }: ToastCloseProps) {\r\n return (\r\n <ToastClosePrimitive\r\n aria-label=\"Close toast\"\r\n className={cn(\r\n \"relative shrink-0 text-fg-quaternary after:absolute after:-inset-2 after:content-[''] hover:text-text-error-primary size-6 inline-flex items-center justify-center [&_svg:not([class*='size-'])]:size-3.5\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children ?? <XIcon aria-hidden=\"true\" />}\r\n </ToastClosePrimitive>\r\n );\r\n}\r\n\r\ntype ToastIconProps = { type: string | undefined }\r\n\r\nfunction ToastIcon({ type }: ToastIconProps) {\r\n let icon: React.ReactNode = null;\r\n\r\n if (type === \"success\") {\r\n icon = <CheckSquareIcon className=\"text-fg-success-primary\" />;\r\n }\r\n\r\n if (type === \"info\") {\r\n icon = <InfoSquareIcon className=\"text-fg-info-primary\" />;\r\n }\r\n\r\n if (type === \"warning\") {\r\n icon = <DangerTriangleIcon className=\"text-fg-warning-primary\" />;\r\n }\r\n\r\n if (type === \"error\") {\r\n icon = <CloseSquareIcon className=\"text-fg-error-primary\" />;\r\n }\r\n\r\n if (type === \"loading\") {\r\n icon = <Loader2Icon className=\"animate-spin\" aria-hidden=\"true\" />\r\n }\r\n\r\n if (!icon) return null;\r\n\r\n return (\r\n <span\r\n data-slot=\"toast-icon\"\r\n className=\"shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-6\"\r\n >\r\n {icon}\r\n </span>\r\n );\r\n}\r\n\r\nconst POSITIONS: ToastPosition[] = [\r\n \"top-right\",\r\n \"top-left\",\r\n \"top-center\",\r\n \"bottom-right\",\r\n \"bottom-left\",\r\n \"bottom-center\",\r\n];\r\n\r\nfunction ToastList({\r\n defaultPosition,\r\n position,\r\n limit = 3,\r\n}: {\r\n defaultPosition: ToastPosition;\r\n position: ToastPosition;\r\n limit?: number;\r\n}) {\r\n const { toasts } = useToastManager();\r\n const matchingToasts = toasts.filter(\r\n (item) => (item.position ?? defaultPosition) === position\r\n );\r\n\r\n return matchingToasts.map((toastItem, index) => (\r\n <Toast\r\n key={toastItem.id}\r\n toast={toastItem}\r\n data-position={position}\r\n data-behind={index > 0 ? \"\" : undefined}\r\n data-limited={limit !== undefined && index >= limit ? \"\" : undefined}\r\n style={\r\n {\r\n \"--toast-index\": index,\r\n } as React.CSSProperties\r\n }\r\n >\r\n <ToastContent>\r\n <ToastIcon type={toastItem.type} />\r\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\r\n <ToastTitle />\r\n <ToastDescription />\r\n </div>\r\n <ToastAction />\r\n <ToastClose />\r\n </ToastContent>\r\n </Toast>\r\n ));\r\n}\r\n\r\ntype ToasterProps = ToastProviderPrimitiveProps & {\r\n position?: ToastPosition;\r\n limit?: number;\r\n};\r\n\r\nfunction Toaster({\r\n children,\r\n position = \"top-right\",\r\n limit = 3,\r\n toastManager = toast,\r\n ...props\r\n}: ToasterProps) {\r\n return (\r\n <ToastProvider toastManager={toastManager} limit={limit} {...props}>\r\n {children}\r\n <ToastPortal>\r\n {POSITIONS.map((pos) => (\r\n <ToastViewport key={pos} position={pos}>\r\n <ToastList defaultPosition={position} position={pos} limit={limit} />\r\n </ToastViewport>\r\n ))}\r\n </ToastPortal>\r\n </ToastProvider>\r\n );\r\n}\r\n\r\nexport {\r\n Toaster,\r\n Toast,\r\n ToastProvider,\r\n ToastAction,\r\n ToastClose,\r\n ToastContent,\r\n ToastDescription,\r\n ToastPortal,\r\n ToastTitle,\r\n ToastViewport,\r\n toast,\r\n createToastManager,\r\n useToastManager,\r\n type ToasterProps,\r\n type ToastProps,\r\n type ToastProviderProps,\r\n type ToastActionProps,\r\n type ToastCloseProps,\r\n type ToastContentProps,\r\n type ToastDescriptionProps,\r\n type ToastPortalProps,\r\n type ToastTitleProps,\r\n type ToastViewportProps,\r\n};\r\n\r\n\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/toast.tsx"],"names":["ToastPortal","props","jsx","positionVariants","ToastViewport","className","position","cn","ToastProvider","Toast","children","style","jsxs","ToastContent","ToastTitle","ToastDescription","ToastAction","render","Button","ToastClose","XIcon","ToastIcon","type","icon","check_square_icon_default","info_square_icon_default","danger_triangle_icon_default","close_square_icon_default","Loader2Icon","POSITIONS","ToastList","defaultPosition","limit","toasts","useToastManager","item","toastItem","index","Toaster","toastManager","toast","pos"],"mappings":"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","file":"chunk-IFBRARGK.js","sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport {\r\n ToastPortal as ToastPortalPrimitive,\r\n ToastViewport as ToastViewportPrimitive,\r\n ToastProvider as ToastProviderPrimitive,\r\n Toast as ToastPrimitive,\r\n ToastContent as ToastContentPrimitive,\r\n ToastTitle as ToastTitlePrimitive,\r\n ToastDescription as ToastDescriptionPrimitive,\r\n ToastAction as ToastActionPrimitive,\r\n ToastClose as ToastClosePrimitive,\r\n toast,\r\n createToastManager,\r\n useToastManager,\r\n type ToastPortalProps as ToastPortalPrimitiveProps,\r\n type ToastViewportProps as ToastViewportPrimitiveProps,\r\n type ToastProviderProps as ToastProviderPrimitiveProps,\r\n type ToastProps as ToastPrimitiveProps,\r\n type ToastContentProps as ToastContentPrimitiveProps,\r\n type ToastTitleProps as ToastTitlePrimitiveProps,\r\n type ToastDescriptionProps as ToastDescriptionPrimitiveProps,\r\n type ToastActionProps as ToastActionPrimitiveProps,\r\n type ToastCloseProps as ToastClosePrimitiveProps,\r\n} from \"../primitives/toast\";\r\nimport { cn } from \"@xploreu/lib/cn\";\r\nimport {\r\n InfoSquareIcon,\r\n CheckSquareIcon,\r\n CloseSquareIcon,\r\n DangerTriangleIcon,\r\n} from \"../icons\";\r\nimport { Button } from \"./button\";\r\nimport {\r\n XIcon,\r\n Loader2Icon\r\n} from \"lucide-react\"\r\n\r\ntype ToastPortalProps = ToastPortalPrimitiveProps;\r\n\r\nfunction ToastPortal({ ...props }: ToastPortalProps) {\r\n return <ToastPortalPrimitive {...props} />;\r\n}\r\n\r\nexport type ToastPosition =\r\n | \"top-right\"\r\n | \"top-left\"\r\n | \"top-center\"\r\n | \"bottom-right\"\r\n | \"bottom-left\"\r\n | \"bottom-center\";\r\n\r\ndeclare module \"@base-ui/react/toast\" {\r\n interface ToastObject<Data extends object> {\r\n position?: ToastPosition;\r\n }\r\n}\r\n\r\ntype ToastViewportProps = ToastViewportPrimitiveProps & {\r\n position?: ToastPosition;\r\n};\r\n\r\nconst positionVariants: Record<ToastPosition, string> = {\r\n \"top-right\":\r\n \"fixed top-4 inset-x-4 sm:inset-x-auto sm:top-4 sm:right-4 sm:left-auto sm:w-full sm:max-w-sm\",\r\n \"top-left\":\r\n \"fixed top-4 inset-x-4 sm:inset-x-auto sm:top-4 sm:left-4 sm:right-auto sm:w-full sm:max-w-sm\",\r\n \"top-center\":\r\n \"fixed top-4 left-1/2 -translate-x-1/2 w-[calc(100%-2rem)] sm:w-full sm:max-w-sm\",\r\n \"bottom-right\":\r\n \"fixed bottom-4 inset-x-4 sm:inset-x-auto sm:bottom-4 sm:right-4 sm:left-auto sm:w-full sm:max-w-sm\",\r\n \"bottom-left\":\r\n \"fixed bottom-4 inset-x-4 sm:inset-x-auto sm:bottom-4 sm:left-4 sm:right-auto sm:w-full sm:max-w-sm\",\r\n \"bottom-center\":\r\n \"fixed bottom-4 left-1/2 -translate-x-1/2 w-[calc(100%-2rem)] sm:w-full sm:max-w-sm\",\r\n};\r\n\r\nfunction ToastViewport({\r\n className,\r\n position = \"top-right\",\r\n ...props\r\n}: ToastViewportProps) {\r\n return (\r\n <ToastViewportPrimitive\r\n className={cn(\r\n \"group/viewport pointer-events-none z-[1000] mx-auto outline-none\",\r\n positionVariants[position],\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastProviderProps = ToastProviderPrimitiveProps;\r\n\r\nfunction ToastProvider(props: ToastProviderProps) {\r\n return <ToastProviderPrimitive {...props} />;\r\n}\r\n\r\ntype ToastProps = ToastPrimitiveProps\r\n\r\nfunction Toast({\r\n className,\r\n children,\r\n style,\r\n ...props\r\n}: ToastProps) {\r\n return (\r\n <ToastPrimitive\r\n style={style}\r\n className={cn(\r\n \"group/toast pointer-events-auto absolute right-0 z-[calc(1000-var(--toast-index))] w-full shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-focus-ring\",\r\n \"bottom-0 origin-bottom rounded-l-[10.4px] rounded-r-lg\",\r\n \"data-[position^=top]:top-0 data-[position^=top]:bottom-auto data-[position^=top]:origin-top\",\r\n \"[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc((var(--toast-index)*(var(--height)+var(--gap))*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]\",\r\n \"data-[position^=top]:[--offset-y:calc((var(--toast-index)*(var(--height)+var(--gap)))+var(--toast-swipe-movement-y))]\",\r\n \"h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]\",\r\n \"data-[position^=top]:[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+(var(--toast-index)*var(--peek))+(var(--shrink)*var(--height))))_scale(var(--scale))]\",\r\n \"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\r\n \"group-hover/viewport:data-expanded:h-(--toast-height) group-hover/viewport:data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]\",\r\n \"group-focus-within/viewport:data-expanded:h-(--toast-height) group-focus-within/viewport:data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]\",\r\n \"data-limited:opacity-0 data-limited:pointer-events-none data-limited:invisible data-starting-style:[transform:translateY(150%)]\",\r\n \"data-[position^=top]:data-starting-style:[transform:translateY(-150%)]\",\r\n \"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]\",\r\n \"data-[position^=top]:[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(-150%)]\",\r\n \"data-ending-style:opacity-0\",\r\n \"data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\r\n \"data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\r\n \"data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\r\n \"data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className={cn(\r\n \"absolute left-0 inset-y-0 w-[10.4px] rounded-l-[10.4px] bg-[linear-gradient(180deg,#377DFA_0%,#185BC2_80%)]\",\r\n \"group-data-[type=warning]/toast:bg-[linear-gradient(180deg,#F79009_0%,#B54708_80%)]\",\r\n \"group-data-[type=info]/toast:bg-[linear-gradient(180deg,#068BEE_0%,#175BCC_80%)]\",\r\n \"group-data-[type=success]/toast:bg-[linear-gradient(180deg,#17B26A_0%,#067647_80%)]\",\r\n \"group-data-[type=error]/toast:bg-[linear-gradient(180deg,#F04438_0%,#B42318_80%)]\",\r\n )} />\r\n <div className={cn(\r\n \"relative border border-border-secondary rounded-lg ml-[2.4px] bg-bg-primary z-10 bg-radial-[100%_200%_at_0%_0%] to-bg-primary\",\r\n \"from-modal-dialog-stop-0\",\r\n \"group-data-[type=warning]/toast:from-utility-warning-50\",\r\n \"group-data-[type=info]/toast:from-utility-blue-50\",\r\n \"group-data-[type=success]/toast:from-utility-success-50\",\r\n \"group-data-[type=error]/toast:from-utility-error-50\",\r\n )}>\r\n {children}\r\n </div>\r\n </ToastPrimitive>\r\n );\r\n}\r\n\r\ntype ToastContentProps = ToastContentPrimitiveProps;\r\n\r\nfunction ToastContent({ className, ...props }: ToastContentProps) {\r\n return (\r\n <ToastContentPrimitive\r\n className={cn(\r\n \"flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-behind/toast:opacity-0 group-hover/viewport:group-data-expanded/toast:opacity-100 group-focus-within/viewport:group-data-expanded/toast:opacity-100\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastTitleProps = ToastTitlePrimitiveProps;\r\n\r\nfunction ToastTitle({ className, ...props }: ToastTitleProps) {\r\n return (\r\n <ToastTitlePrimitive\r\n className={cn(\r\n \"text-label-semibold-2 text-text-primary\",\r\n \"group-data-[type=warning]/toast:text-text-warning-primary\",\r\n \"group-data-[type=info]/toast:text-text-info-primary\",\r\n \"group-data-[type=success]/toast:text-text-success-primary\",\r\n \"group-data-[type=error]/toast:text-text-error-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastDescriptionProps = ToastDescriptionPrimitiveProps;\r\n\r\nfunction ToastDescription({ className, ...props }: ToastDescriptionProps) {\r\n return (\r\n <ToastDescriptionPrimitive\r\n className={cn(\"text-body-regular-2 text-text-secondary\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastActionProps = ToastActionPrimitiveProps;\r\n\r\nfunction ToastAction({\r\n className,\r\n render = <Button size=\"sm\" variant=\"secondary\" />,\r\n ...props\r\n}: ToastActionProps) {\r\n return (\r\n <ToastActionPrimitive\r\n render={render}\r\n className={cn(\"shrink-0\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ToastCloseProps = ToastClosePrimitiveProps;\r\n\r\nfunction ToastClose({ className, children, ...props }: ToastCloseProps) {\r\n return (\r\n <ToastClosePrimitive\r\n aria-label=\"Close toast\"\r\n className={cn(\r\n \"relative shrink-0 text-fg-quaternary after:absolute after:-inset-2 after:content-[''] hover:text-text-error-primary size-6 inline-flex items-center justify-center [&_svg:not([class*='size-'])]:size-3.5\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children ?? <XIcon aria-hidden=\"true\" />}\r\n </ToastClosePrimitive>\r\n );\r\n}\r\n\r\ntype ToastIconProps = { type: string | undefined }\r\n\r\nfunction ToastIcon({ type }: ToastIconProps) {\r\n let icon: React.ReactNode = null;\r\n\r\n if (type === \"success\") {\r\n icon = <CheckSquareIcon className=\"text-fg-success-primary\" />;\r\n }\r\n\r\n if (type === \"info\") {\r\n icon = <InfoSquareIcon className=\"text-fg-info-primary\" />;\r\n }\r\n\r\n if (type === \"warning\") {\r\n icon = <DangerTriangleIcon className=\"text-fg-warning-primary\" />;\r\n }\r\n\r\n if (type === \"error\") {\r\n icon = <CloseSquareIcon className=\"text-fg-error-primary\" />;\r\n }\r\n\r\n if (type === \"loading\") {\r\n icon = <Loader2Icon className=\"animate-spin\" aria-hidden=\"true\" />\r\n }\r\n\r\n if (!icon) return null;\r\n\r\n return (\r\n <span\r\n data-slot=\"toast-icon\"\r\n className=\"shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-6\"\r\n >\r\n {icon}\r\n </span>\r\n );\r\n}\r\n\r\nconst POSITIONS: ToastPosition[] = [\r\n \"top-right\",\r\n \"top-left\",\r\n \"top-center\",\r\n \"bottom-right\",\r\n \"bottom-left\",\r\n \"bottom-center\",\r\n];\r\n\r\nfunction ToastList({\r\n defaultPosition,\r\n position,\r\n limit = 3,\r\n}: {\r\n defaultPosition: ToastPosition;\r\n position: ToastPosition;\r\n limit?: number;\r\n}) {\r\n const { toasts } = useToastManager();\r\n const matchingToasts = toasts.filter(\r\n (item) => (item.position ?? defaultPosition) === position\r\n );\r\n\r\n return matchingToasts.map((toastItem, index) => (\r\n <Toast\r\n key={toastItem.id}\r\n toast={toastItem}\r\n data-position={position}\r\n data-behind={index > 0 ? \"\" : undefined}\r\n data-limited={limit !== undefined && index >= limit ? \"\" : undefined}\r\n style={\r\n {\r\n \"--toast-index\": index,\r\n } as React.CSSProperties\r\n }\r\n >\r\n <ToastContent>\r\n <ToastIcon type={toastItem.type} />\r\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\r\n <ToastTitle />\r\n <ToastDescription />\r\n </div>\r\n <ToastAction />\r\n <ToastClose />\r\n </ToastContent>\r\n </Toast>\r\n ));\r\n}\r\n\r\ntype ToasterProps = ToastProviderPrimitiveProps & {\r\n position?: ToastPosition;\r\n limit?: number;\r\n};\r\n\r\nfunction Toaster({\r\n children,\r\n position = \"top-right\",\r\n limit = 3,\r\n toastManager = toast,\r\n ...props\r\n}: ToasterProps) {\r\n return (\r\n <ToastProvider toastManager={toastManager} limit={limit} {...props}>\r\n {children}\r\n <ToastPortal>\r\n {POSITIONS.map((pos) => (\r\n <ToastViewport key={pos} position={pos}>\r\n <ToastList defaultPosition={position} position={pos} limit={limit} />\r\n </ToastViewport>\r\n ))}\r\n </ToastPortal>\r\n </ToastProvider>\r\n );\r\n}\r\n\r\nexport {\r\n Toaster,\r\n Toast,\r\n ToastProvider,\r\n ToastAction,\r\n ToastClose,\r\n ToastContent,\r\n ToastDescription,\r\n ToastPortal,\r\n ToastTitle,\r\n ToastViewport,\r\n toast,\r\n createToastManager,\r\n useToastManager,\r\n type ToasterProps,\r\n type ToastProps,\r\n type ToastProviderProps,\r\n type ToastActionProps,\r\n type ToastCloseProps,\r\n type ToastContentProps,\r\n type ToastDescriptionProps,\r\n type ToastPortalProps,\r\n type ToastTitleProps,\r\n type ToastViewportProps,\r\n};\r\n\r\n\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$2}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$2}from'./chunk-FIDOWSDH.js';import {a,b,c}from'./chunk-NGSCUYDU.js';import {b as b$1}from'./chunk-DQGZIFNP.js';import {a as a$1}from'./chunk-T7HRX3EC.js';import*as t from'react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {format}from'date-fns';import {ChevronDown}from'lucide-react';import'react-day-picker';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx}from'react/jsx-runtime';function E({className:h,value:x,onValueChange:o,defaultValue:y,required:n,disabled:i,placeholder:v="Pick a date",disabledDates:P,dateFormat:C="LLL dd, y",...D}){let k=t.useCallback(e=>{n?e&&o?.(e):o?.(e);},[o,n]),[r,w]=useControlledState({value:x,defaultValue:y,onChange:k}),[N,M]=t.useState(r||new Date),[S,l]=t.useState(false),d=!!r;return jsxs(a,{open:i?false:S,onOpenChange:l,children:[jsx(b,{className:"w-full",render:jsxs(b$1,{className:cn("group h-9 w-full justify-between rounded-xp-card-base border px-3 text-body-medium-3 transition-colors","border-border-primary bg-bg-primary text-text-secondary hover:bg-bg-primary-hover",d&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary","disabled:pointer-events-none disabled:opacity-50",h),variant:null,size:null,disabled:i,children:[jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[jsx(a$1,{className:cn("size-4 shrink-0",d?"text-fg-brand-primary":"text-fg-quaternary")}),jsx("span",{className:"truncate",children:r?format(r,C):v})]}),jsx(ChevronDown,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180",d?"text-fg-brand-primary":"text-fg-quaternary")})]})}),jsx(c,{className:"w-auto border-0 rounded-[20px] p-xp-none bg-transparent",style:{background:"linear-gradient(180deg, rgba(46, 51, 90, 0) 0%, rgba(28, 27, 51, 0.04) 100%), radial-gradient(146.13% 118.42% at 50% -15.5%, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0) 99.59%)",backdropFilter:"blur(20px)",boxShadow:"0px 30px 60px 0px #0000001A"},children:jsx(a$2,{autoFocus:true,disabled:P,mode:"single",month:N,selected:r,onMonthChange:M,onSelect:e=>{n&&!e||(w(e),l(false));},...D})})]})}export{E as a};//# sourceMappingURL=chunk-NBM4LIT4.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-NBM4LIT4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/date-picker.tsx"],"names":["DatePicker","className","valueProp","onValueChange","defaultValue","required","disabled","placeholder","disabledDates","dateFormat","props","handleValueChange","val","value","setValue","useControlledState","currentMonth","setCurrentMonth","isOpen","setIsOpen","hasValue","jsxs","Popover","jsx","PopoverTrigger","Button","cn","calendar_icon_default","format","ChevronDown","PopoverPopup","Calendar"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/ui/date-picker.tsx"],"names":["DatePicker","className","valueProp","onValueChange","defaultValue","required","disabled","placeholder","disabledDates","dateFormat","props","handleValueChange","val","value","setValue","useControlledState","currentMonth","setCurrentMonth","isOpen","setIsOpen","hasValue","jsxs","Popover","jsx","PopoverTrigger","Button","cn","calendar_icon_default","format","ChevronDown","PopoverPopup","Calendar"],"mappings":"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","file":"chunk-NBM4LIT4.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { format } from \"date-fns\"\r\nimport { ChevronDown } from \"lucide-react\"\r\nimport { type Matcher } from \"react-day-picker\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nimport { CalendarIcon } from \"../icons\"\r\nimport { Button } from \"./button\"\r\nimport { Calendar, type CalendarProps } from \"./calendar\"\r\nimport { Popover, PopoverPopup, PopoverTrigger } from \"./popover\"\r\n\r\nexport type DatePickerProps = {\r\n className?: string\r\n value?: Date\r\n defaultValue?: Date\r\n required?: boolean\r\n disabled?: boolean\r\n placeholder?: string\r\n disabledDates?: Matcher | Matcher[] | undefined\r\n dateFormat?: string\r\n} & ({\r\n required: true\r\n onValueChange?: (value: Date) => void\r\n} | {\r\n required?: false\r\n onValueChange?: (value: Date | undefined) => void\r\n}) & Omit<CalendarProps, \"mode\" | \"selected\" | \"onSelect\" | \"month\" | \"onMonthChange\">\r\n\r\nfunction DatePicker({\r\n className,\r\n value: valueProp,\r\n onValueChange,\r\n defaultValue,\r\n required,\r\n disabled,\r\n placeholder = \"Pick a date\",\r\n disabledDates,\r\n dateFormat = \"LLL dd, y\",\r\n ...props\r\n}: DatePickerProps) {\r\n const handleValueChange = React.useCallback(\r\n (val: Date | undefined) => {\r\n if (required) {\r\n if (val) onValueChange?.(val)\r\n } else {\r\n onValueChange?.(val)\r\n }\r\n },\r\n [onValueChange, required],\r\n )\r\n\r\n const [value, setValue] = useControlledState<Date | undefined>({\r\n value: valueProp,\r\n defaultValue,\r\n onChange: handleValueChange,\r\n })\r\n\r\n const [currentMonth, setCurrentMonth] = React.useState<Date | undefined>(value || new Date())\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n\r\n const hasValue = !!value\r\n\r\n return (\r\n <Popover open={disabled ? false : isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n className=\"w-full\"\r\n render={\r\n <Button\r\n className={cn(\r\n \"group h-9 w-full justify-between rounded-xp-card-base border px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary bg-bg-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue &&\r\n \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n className,\r\n )}\r\n variant={null}\r\n size={null}\r\n disabled={disabled}\r\n >\r\n <span className=\"flex min-w-0 items-center gap-2\">\r\n <CalendarIcon\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n <span className=\"truncate\">\r\n {value ? format(value, dateFormat) : placeholder}\r\n </span>\r\n </span>\r\n <ChevronDown\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n </Button>\r\n }\r\n />\r\n <PopoverPopup\r\n className=\"w-auto border-0 rounded-[20px] p-xp-none bg-transparent\"\r\n style={{\r\n background:\r\n \"linear-gradient(180deg, rgba(46, 51, 90, 0) 0%, rgba(28, 27, 51, 0.04) 100%), radial-gradient(146.13% 118.42% at 50% -15.5%, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0) 99.59%)\",\r\n backdropFilter: \"blur(20px)\",\r\n boxShadow: \"0px 30px 60px 0px #0000001A\",\r\n }}\r\n >\r\n <Calendar\r\n autoFocus\r\n disabled={disabledDates}\r\n mode=\"single\"\r\n month={currentMonth}\r\n selected={value}\r\n onMonthChange={setCurrentMonth}\r\n onSelect={(val) => {\r\n if (required && !val) return\r\n setValue(val)\r\n setIsOpen(false)\r\n }}\r\n {...props}\r\n />\r\n </PopoverPopup>\r\n </Popover>\r\n )\r\n}\r\n\r\nexport { DatePicker }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {b as b$1,c,g,e,d,f,i,j,k as k$1}from'./chunk-WYVGUIHL.js';import {b as b$2}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {b as b$1,c,g,e,d,f,i,j,k as k$1}from'./chunk-WYVGUIHL.js';import {b as b$2}from'./chunk-DQGZIFNP.js';import'react';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs}from'react/jsx-runtime';function _(r){return jsx(b$1,{...r})}function b(r){return jsx(c,{...r})}function T(r){return jsx(g,{...r})}function m({className:r,...o}){return jsx(e,{className:cn("fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",r),...o})}function C({className:r,children:o,...l}){return jsxs(d,{children:[jsx(m,{}),jsx(f,{className:cn("group/alert-dialog-popup fixed left-[50%] top-[50%] z-50 grid w-[calc(100%-2rem)] max-w-md translate-x-[-50%] translate-y-[-50%] bg-bg-primary shadow-xp-lg rounded-xl overflow-hidden",r),...l,children:o})]})}function h({className:r,...o}){return jsx("div",{"data-slot":"alert-dialog-header",className:cn("px-4 py-4 grid grid-cols-[auto_1fr] items-start bg-bg-primary",r),...o})}function w({className:r,...o}){return jsx("div",{"data-slot":"alert-dialog-content",className:cn("px-4 pb-4 max-h-[60vh] overflow-y-auto",r),...o})}function k({className:r,...o}){return jsx(i,{className:cn("flex gap-2 items-center justify-end bg-bg-primary px-4 py-3 border-t border-border-tertiary shadow-[0px_-1px_24px_0px_var(--color-shadow-xs)]",r),...o})}function B({className:r,...o}){return jsx(j,{className:cn("col-start-2 [&:not(:has(~_[data-slot=alert-dialog-description]))]:row-span-2 [&:not(:has(~_[data-slot=alert-dialog-description]))]:self-center text-label-bold-2 text-text-primary",r),...o})}function F({className:r,...o}){return jsx(k$1,{className:cn("col-start-2 mt-0.5 text-body-regular-3 text-text-secondary",r),...o})}function H({className:r,variant:o="brand",...l}){return jsx("div",{"data-slot":"alert-dialog-icon","data-variant":o,className:cn("row-span-2 flex items-center justify-center rounded-lg mt-px mr-3 p-2.5 [&_svg]:size-4 text-fg-white",o==="brand"&&"bg-bg-brand-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-focus-ring-secondary)]",o==="error"&&"bg-bg-error-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-utility-error-100)]",r),...l})}function N({color:r="destructive",variant:o="primary",...l}){return jsx(b$2,{"data-slot":"alert-dialog-action",color:r,variant:o,...l})}function R({color:r="default",variant:o="secondary",size:l,...d}){return jsx(g,{"data-slot":"alert-dialog-cancel",render:jsx(b$2,{color:r,variant:o,size:l}),...d})}export{_ as a,b,T as c,m as d,C as e,h as f,w as g,k as h,B as i,F as j,H as k,N as l,R as m};//# sourceMappingURL=chunk-OBS7TDVV.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-OBS7TDVV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/alert-dialog.tsx"],"names":["AlertDialog","props","jsx","AlertDialogTrigger","AlertDialogClose","AlertDialogBackdrop","className","cn","AlertDialogPopup","children","jsxs","AlertDialogPortal","AlertDialogHeader","AlertDialogContent","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogIcon","variant","AlertDialogAction","color","Button","AlertDialogCancel","size"],"mappings":"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","file":"chunk-ZK7MHZFG.js","sourcesContent":["import * as React from 'react';\r\n\r\nimport {\r\n AlertDialog as AlertDialogPrimitive,\r\n AlertDialogTrigger as AlertDialogTriggerPrimitive,\r\n AlertDialogPortal as AlertDialogPortalPrimitive,\r\n AlertDialogBackdrop as AlertDialogBackdropPrimitive,\r\n AlertDialogPopup as AlertDialogPopupPrimitive,\r\n AlertDialogClose as AlertDialogClosePrimitive,\r\n AlertDialogFooter as AlertDialogFooterPrimitive,\r\n AlertDialogTitle as AlertDialogTitlePrimitive,\r\n AlertDialogDescription as AlertDialogDescriptionPrimitive,\r\n type AlertDialogProps as AlertDialogPrimitiveProps,\r\n type AlertDialogTriggerProps as AlertDialogTriggerPrimitiveProps,\r\n type AlertDialogPortalProps as AlertDialogPortalPrimitiveProps,\r\n type AlertDialogBackdropProps as AlertDialogBackdropPrimitiveProps,\r\n type AlertDialogPopupProps as AlertDialogPopupPrimitiveProps,\r\n type AlertDialogCloseProps as AlertDialogClosePrimitiveProps,\r\n type AlertDialogFooterProps as AlertDialogFooterPrimitiveProps,\r\n type AlertDialogTitleProps as AlertDialogTitlePrimitiveProps,\r\n type AlertDialogDescriptionProps as AlertDialogDescriptionPrimitiveProps,\r\n} from '../primitives/alert-dialog';\r\nimport { Button } from './button';\r\nimport { cn } from '@xploreu/lib/cn';\r\n\r\ntype AlertDialogProps = AlertDialogPrimitiveProps;\r\n\r\nfunction AlertDialog(props: AlertDialogProps) {\r\n return <AlertDialogPrimitive {...props} />;\r\n}\r\n\r\ntype AlertDialogTriggerProps = AlertDialogTriggerPrimitiveProps;\r\n\r\nfunction AlertDialogTrigger(props: AlertDialogTriggerProps) {\r\n return <AlertDialogTriggerPrimitive {...props} />;\r\n}\r\n\r\ntype AlertDialogCloseProps = AlertDialogClosePrimitiveProps;\r\n\r\nfunction AlertDialogClose(props: AlertDialogCloseProps) {\r\n return <AlertDialogClosePrimitive {...props} />;\r\n}\r\n\r\ntype AlertDialogBackdropProps = AlertDialogBackdropPrimitiveProps;\r\n\r\nfunction AlertDialogBackdrop({ className, ...props }: AlertDialogBackdropProps) {\r\n return (\r\n <AlertDialogBackdropPrimitive\r\n className={cn('fixed inset-0 z-50 bg-black/50 backdrop-blur-sm', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogPopupProps = AlertDialogPopupPrimitiveProps;\r\n\r\nfunction AlertDialogPopup({ className, children, ...props }: AlertDialogPopupProps) {\r\n return (\r\n <AlertDialogPortalPrimitive>\r\n <AlertDialogBackdrop />\r\n <AlertDialogPopupPrimitive\r\n className={cn(\r\n \"group/alert-dialog-popup fixed left-[50%] top-[50%] z-50 grid w-[calc(100%-2rem)] max-w-md translate-x-[-50%] translate-y-[-50%] bg-bg-primary shadow-xp-lg rounded-xl overflow-hidden\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </AlertDialogPopupPrimitive>\r\n </AlertDialogPortalPrimitive>\r\n );\r\n}\r\n\r\ntype AlertDialogHeaderProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nfunction AlertDialogHeader({ className, ...props }: AlertDialogHeaderProps) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-header\"\r\n className={cn(\r\n \"px-4 py-4 grid grid-cols-[auto_1fr] items-start bg-bg-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogContentProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nfunction AlertDialogContent({ className, ...props }: AlertDialogContentProps) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-content\"\r\n className={cn(\"px-4 pb-4 max-h-[60vh] overflow-y-auto\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogFooterProps = AlertDialogFooterPrimitiveProps;\r\n\r\nfunction AlertDialogFooter({ className, ...props }: AlertDialogFooterProps) {\r\n return (\r\n <AlertDialogFooterPrimitive\r\n className={cn(\r\n \"flex gap-2 items-center justify-end bg-bg-primary px-4 py-3 border-t border-border-tertiary shadow-[0px_-1px_24px_0px_var(--color-shadow-xs)]\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogTitleProps = AlertDialogTitlePrimitiveProps;\r\n\r\nfunction AlertDialogTitle({ className, ...props }: AlertDialogTitleProps) {\r\n return (\r\n <AlertDialogTitlePrimitive\r\n className={cn(\r\n \"col-start-2 [&:not(:has(~_[data-slot=alert-dialog-description]))]:row-span-2 [&:not(:has(~_[data-slot=alert-dialog-description]))]:self-center text-label-bold-2 text-text-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogDescriptionProps = AlertDialogDescriptionPrimitiveProps;\r\n\r\nfunction AlertDialogDescription({ className, ...props }: AlertDialogDescriptionProps) {\r\n return (\r\n <AlertDialogDescriptionPrimitive\r\n className={cn(\"col-start-2 mt-0.5 text-body-regular-3 text-text-secondary\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogIconProps = React.ComponentProps<\"div\"> & {\r\n variant?: \"brand\" | \"error\";\r\n};\r\n\r\nfunction AlertDialogIcon({\r\n className,\r\n variant = \"brand\",\r\n ...props\r\n}: AlertDialogIconProps) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-icon\"\r\n data-variant={variant}\r\n className={cn(\r\n \"row-span-2 flex items-center justify-center rounded-lg mt-px mr-3 p-2.5 [&_svg]:size-4 text-fg-white\",\r\n variant === \"brand\" &&\r\n \"bg-bg-brand-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-focus-ring-secondary)]\",\r\n variant === \"error\" &&\r\n \"bg-bg-error-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-utility-error-100)]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogActionProps = React.ComponentProps<typeof Button>;\r\n\r\nfunction AlertDialogAction({\r\n color = \"destructive\",\r\n variant = \"primary\",\r\n ...props\r\n}: AlertDialogActionProps) {\r\n return (\r\n <Button\r\n data-slot=\"alert-dialog-action\"\r\n color={color}\r\n variant={variant}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogCancelProps = AlertDialogClosePrimitiveProps &\r\n Pick<React.ComponentProps<typeof Button>, \"color\" | \"variant\" | \"size\">;\r\n\r\nfunction AlertDialogCancel({\r\n color = \"default\",\r\n variant = \"secondary\",\r\n size,\r\n ...props\r\n}: AlertDialogCancelProps) {\r\n return (\r\n <AlertDialogClosePrimitive\r\n data-slot=\"alert-dialog-cancel\"\r\n render={<Button color={color} variant={variant} size={size} />}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n AlertDialog,\r\n AlertDialogTrigger,\r\n AlertDialogClose,\r\n AlertDialogPopup,\r\n AlertDialogHeader,\r\n AlertDialogContent,\r\n AlertDialogFooter,\r\n AlertDialogTitle,\r\n AlertDialogDescription,\r\n AlertDialogIcon,\r\n AlertDialogBackdrop,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n type AlertDialogProps,\r\n type AlertDialogTriggerProps,\r\n type AlertDialogCloseProps,\r\n type AlertDialogPopupProps,\r\n type AlertDialogHeaderProps,\r\n type AlertDialogContentProps,\r\n type AlertDialogFooterProps,\r\n type AlertDialogTitleProps,\r\n type AlertDialogDescriptionProps,\r\n type AlertDialogIconProps,\r\n type AlertDialogBackdropProps,\r\n type AlertDialogActionProps,\r\n type AlertDialogCancelProps,\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/alert-dialog.tsx"],"names":["AlertDialog","props","jsx","AlertDialogTrigger","AlertDialogClose","AlertDialogBackdrop","className","cn","AlertDialogPopup","children","jsxs","AlertDialogPortal","AlertDialogHeader","AlertDialogContent","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogIcon","variant","AlertDialogAction","color","Button","AlertDialogCancel","size"],"mappings":"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","file":"chunk-OBS7TDVV.js","sourcesContent":["import * as React from 'react';\r\n\r\nimport {\r\n AlertDialog as AlertDialogPrimitive,\r\n AlertDialogTrigger as AlertDialogTriggerPrimitive,\r\n AlertDialogPortal as AlertDialogPortalPrimitive,\r\n AlertDialogBackdrop as AlertDialogBackdropPrimitive,\r\n AlertDialogPopup as AlertDialogPopupPrimitive,\r\n AlertDialogClose as AlertDialogClosePrimitive,\r\n AlertDialogFooter as AlertDialogFooterPrimitive,\r\n AlertDialogTitle as AlertDialogTitlePrimitive,\r\n AlertDialogDescription as AlertDialogDescriptionPrimitive,\r\n type AlertDialogProps as AlertDialogPrimitiveProps,\r\n type AlertDialogTriggerProps as AlertDialogTriggerPrimitiveProps,\r\n type AlertDialogPortalProps as AlertDialogPortalPrimitiveProps,\r\n type AlertDialogBackdropProps as AlertDialogBackdropPrimitiveProps,\r\n type AlertDialogPopupProps as AlertDialogPopupPrimitiveProps,\r\n type AlertDialogCloseProps as AlertDialogClosePrimitiveProps,\r\n type AlertDialogFooterProps as AlertDialogFooterPrimitiveProps,\r\n type AlertDialogTitleProps as AlertDialogTitlePrimitiveProps,\r\n type AlertDialogDescriptionProps as AlertDialogDescriptionPrimitiveProps,\r\n} from '../primitives/alert-dialog';\r\nimport { Button } from './button';\r\nimport { cn } from '@xploreu/lib/cn';\r\n\r\ntype AlertDialogProps = AlertDialogPrimitiveProps;\r\n\r\nfunction AlertDialog(props: AlertDialogProps) {\r\n return <AlertDialogPrimitive {...props} />;\r\n}\r\n\r\ntype AlertDialogTriggerProps = AlertDialogTriggerPrimitiveProps;\r\n\r\nfunction AlertDialogTrigger(props: AlertDialogTriggerProps) {\r\n return <AlertDialogTriggerPrimitive {...props} />;\r\n}\r\n\r\ntype AlertDialogCloseProps = AlertDialogClosePrimitiveProps;\r\n\r\nfunction AlertDialogClose(props: AlertDialogCloseProps) {\r\n return <AlertDialogClosePrimitive {...props} />;\r\n}\r\n\r\ntype AlertDialogBackdropProps = AlertDialogBackdropPrimitiveProps;\r\n\r\nfunction AlertDialogBackdrop({ className, ...props }: AlertDialogBackdropProps) {\r\n return (\r\n <AlertDialogBackdropPrimitive\r\n className={cn('fixed inset-0 z-50 bg-black/50 backdrop-blur-sm', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogPopupProps = AlertDialogPopupPrimitiveProps;\r\n\r\nfunction AlertDialogPopup({ className, children, ...props }: AlertDialogPopupProps) {\r\n return (\r\n <AlertDialogPortalPrimitive>\r\n <AlertDialogBackdrop />\r\n <AlertDialogPopupPrimitive\r\n className={cn(\r\n \"group/alert-dialog-popup fixed left-[50%] top-[50%] z-50 grid w-[calc(100%-2rem)] max-w-md translate-x-[-50%] translate-y-[-50%] bg-bg-primary shadow-xp-lg rounded-xl overflow-hidden\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </AlertDialogPopupPrimitive>\r\n </AlertDialogPortalPrimitive>\r\n );\r\n}\r\n\r\ntype AlertDialogHeaderProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nfunction AlertDialogHeader({ className, ...props }: AlertDialogHeaderProps) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-header\"\r\n className={cn(\r\n \"px-4 py-4 grid grid-cols-[auto_1fr] items-start bg-bg-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogContentProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nfunction AlertDialogContent({ className, ...props }: AlertDialogContentProps) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-content\"\r\n className={cn(\"px-4 pb-4 max-h-[60vh] overflow-y-auto\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogFooterProps = AlertDialogFooterPrimitiveProps;\r\n\r\nfunction AlertDialogFooter({ className, ...props }: AlertDialogFooterProps) {\r\n return (\r\n <AlertDialogFooterPrimitive\r\n className={cn(\r\n \"flex gap-2 items-center justify-end bg-bg-primary px-4 py-3 border-t border-border-tertiary shadow-[0px_-1px_24px_0px_var(--color-shadow-xs)]\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogTitleProps = AlertDialogTitlePrimitiveProps;\r\n\r\nfunction AlertDialogTitle({ className, ...props }: AlertDialogTitleProps) {\r\n return (\r\n <AlertDialogTitlePrimitive\r\n className={cn(\r\n \"col-start-2 [&:not(:has(~_[data-slot=alert-dialog-description]))]:row-span-2 [&:not(:has(~_[data-slot=alert-dialog-description]))]:self-center text-label-bold-2 text-text-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogDescriptionProps = AlertDialogDescriptionPrimitiveProps;\r\n\r\nfunction AlertDialogDescription({ className, ...props }: AlertDialogDescriptionProps) {\r\n return (\r\n <AlertDialogDescriptionPrimitive\r\n className={cn(\"col-start-2 mt-0.5 text-body-regular-3 text-text-secondary\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogIconProps = React.ComponentProps<\"div\"> & {\r\n variant?: \"brand\" | \"error\";\r\n};\r\n\r\nfunction AlertDialogIcon({\r\n className,\r\n variant = \"brand\",\r\n ...props\r\n}: AlertDialogIconProps) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-icon\"\r\n data-variant={variant}\r\n className={cn(\r\n \"row-span-2 flex items-center justify-center rounded-lg mt-px mr-3 p-2.5 [&_svg]:size-4 text-fg-white\",\r\n variant === \"brand\" &&\r\n \"bg-bg-brand-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-focus-ring-secondary)]\",\r\n variant === \"error\" &&\r\n \"bg-bg-error-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-utility-error-100)]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogActionProps = React.ComponentProps<typeof Button>;\r\n\r\nfunction AlertDialogAction({\r\n color = \"destructive\",\r\n variant = \"primary\",\r\n ...props\r\n}: AlertDialogActionProps) {\r\n return (\r\n <Button\r\n data-slot=\"alert-dialog-action\"\r\n color={color}\r\n variant={variant}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype AlertDialogCancelProps = AlertDialogClosePrimitiveProps &\r\n Pick<React.ComponentProps<typeof Button>, \"color\" | \"variant\" | \"size\">;\r\n\r\nfunction AlertDialogCancel({\r\n color = \"default\",\r\n variant = \"secondary\",\r\n size,\r\n ...props\r\n}: AlertDialogCancelProps) {\r\n return (\r\n <AlertDialogClosePrimitive\r\n data-slot=\"alert-dialog-cancel\"\r\n render={<Button color={color} variant={variant} size={size} />}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n AlertDialog,\r\n AlertDialogTrigger,\r\n AlertDialogClose,\r\n AlertDialogPopup,\r\n AlertDialogHeader,\r\n AlertDialogContent,\r\n AlertDialogFooter,\r\n AlertDialogTitle,\r\n AlertDialogDescription,\r\n AlertDialogIcon,\r\n AlertDialogBackdrop,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n type AlertDialogProps,\r\n type AlertDialogTriggerProps,\r\n type AlertDialogCloseProps,\r\n type AlertDialogPopupProps,\r\n type AlertDialogHeaderProps,\r\n type AlertDialogContentProps,\r\n type AlertDialogFooterProps,\r\n type AlertDialogTitleProps,\r\n type AlertDialogDescriptionProps,\r\n type AlertDialogIconProps,\r\n type AlertDialogBackdropProps,\r\n type AlertDialogActionProps,\r\n type AlertDialogCancelProps,\r\n};\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$2}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$2}from'./chunk-FIDOWSDH.js';import {a,b,c}from'./chunk-NGSCUYDU.js';import {b as b$1}from'./chunk-DQGZIFNP.js';import {a as a$1}from'./chunk-T7HRX3EC.js';import u from'react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {format,endOfWeek,startOfWeek,endOfMonth,startOfMonth,subMonths,endOfYear,startOfYear,subYears}from'date-fns';import {ChevronDown}from'lucide-react';import'react-day-picker';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx}from'react/jsx-runtime';var N=[{label:"Today",value:"today",getDateRange:()=>{let e=new Date;return {from:e,to:e}}},{value:"last-7-days",label:"Last 7 days",getDateRange:()=>({from:new Date(Date.now()-8640*60*1e3),to:new Date})},{label:"This Week",value:"this-week",getDateRange:()=>{let e=new Date;return {from:startOfWeek(e,{weekStartsOn:1}),to:endOfWeek(e,{weekStartsOn:1})}}},{label:"This Month",value:"this-month",getDateRange:()=>{let e=new Date;return {from:startOfMonth(e),to:endOfMonth(e)}}},{label:"Last 3 Months",value:"last-3-months",getDateRange:()=>{let e=new Date;return {from:subMonths(e,3),to:e}}},{label:"Last 6 Months",value:"last-6-months",getDateRange:()=>{let e=new Date;return {from:subMonths(e,6),to:e}}},{label:"This Year",value:"this-year",getDateRange:()=>{let e=new Date;return {from:startOfYear(e),to:endOfYear(e)}}},{label:"Last Year",value:"last-year",getDateRange:()=>{let e=subYears(new Date,1);return {from:startOfYear(e),to:endOfYear(e)}}},{label:"Custom Range",value:"custom-range",getDateRange:()=>{}}];function ne({className:e,value:P,onValueChange:p,defaultValue:V,required:d,disabled:b$2,placeholder:S="Pick a date",options:D=true,disabledDates:Y}){let T=u.useCallback(t=>{p?.(t);},[p,d]),[a$3,v]=useControlledState({value:P,defaultValue:V,onChange:T}),[q,h]=u.useState(a$3?.from||new Date),[z,B]=u.useState(false),[F,y]=u.useState("days"),f=!!a$3?.from,s=(t,n)=>!t||!n?false:t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate(),W=t=>{if(!a$3?.from||!a$3?.to)return false;if(t.value==="custom-range")return N.every(o=>{if(o.value==="custom-range")return true;let l=o.getDateRange();return !l?.from||!l?.to?true:!(s(a$3.from,l.from)&&s(a$3.to,l.to))});let n=t.getDateRange();return !n?.from||!n?.to?false:s(a$3.from,n.from)&&s(a$3.to,n.to)};return jsxs(a,{open:b$2?false:z,onOpenChange:B,children:[jsx(b,{render:jsxs(b$1,{className:cn("group h-9 w-full justify-between rounded-xp-card-base border px-3 text-body-medium-3 transition-colors","border-border-primary bg-bg-primary text-text-secondary hover:bg-bg-primary-hover",f&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary","disabled:pointer-events-none disabled:opacity-50",e),variant:null,size:null,disabled:b$2,children:[jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[jsx(a$1,{className:cn("size-4 shrink-0",f?"text-fg-brand-primary":"text-fg-quaternary")}),jsx("span",{className:"truncate",children:a$3?.from?a$3.to?`${format(a$3.from,"LLL dd, y")} - ${format(a$3.to,"LLL dd, y")}`:format(a$3.from,"LLL dd, y"):S})]}),jsx(ChevronDown,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180",f?"text-fg-brand-primary":"text-fg-quaternary")})]})}),jsxs(c,{className:cn("w-auto border-0",D?"rounded-2xl p-xp-lg flex gap-6":"p-xp-none bg-transparent"),children:[D&&jsx("div",{className:"flex flex-col gap-xp-md w-[135px]",children:N.map(t=>{let n=W(t);return jsx(b$1,{className:"justify-start px-xp-xl",variant:n?"tertiary-accent":null,onClick:()=>{let o=t.getDateRange();o&&(v(o),y("days"),h(o.from));},children:t.label},t.value)})}),jsx(a$2,{autoFocus:true,disabled:Y,mode:"range",month:q,navView:F,numberOfMonths:2,selected:a$3,onMonthChange:h,onNavViewChange:y,onSelect:t=>{d&&!t||v(t);}})]})]})}export{ne as a};//# sourceMappingURL=chunk-QIP6KFG2.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-QIP6KFG2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/date-range-picker.tsx"],"names":["dateRangeOptions","t","now","startOfWeek","endOfWeek","startOfMonth","endOfMonth","subMonths","startOfYear","endOfYear","ly","subYears","DateRangePicker","className","valueProp","onValueChangeProp","defaultValue","required","disabled","placeholder","options","disabledDates","onValueChange","React","value","setValue","useControlledState","currentMonth","setCurrentMonth","isOpen","setIsOpen","navView","setNavView","hasValue","isSameDay","date1","date2","isOptionActive","option","opt","optRange","optionRange","jsxs","Popover","jsx","PopoverTrigger","Button","cn","calendar_icon_default","format","ChevronDown","PopoverPopup","active","dateRange","Calendar","val"],"mappings":"kgBAmDA,IAAMA,CAAAA,CAAsC,CAC1C,CACE,KAAA,CAAO,OAAA,CACP,KAAA,CAAO,OAAA,CACP,aAAc,IAAM,CAAE,IAAMC,CAAAA,CAAI,IAAI,IAAA,CAAQ,OAAO,CAAE,IAAA,CAAMA,EAAG,EAAA,CAAIA,CAAE,CAAE,CACxE,EACA,CACE,KAAA,CAAO,aAAA,CACP,KAAA,CAAO,cACP,YAAA,CAAc,KAAO,CACnB,IAAA,CAAM,IAAI,KAAK,IAAA,CAAK,GAAA,EAAI,CAAI,IAAA,CAAc,GAAK,GAAI,CAAA,CACnD,EAAA,CAAI,IAAI,IACV,CAAA,CACF,CAAA,CACA,CACE,KAAA,CAAO,YACP,KAAA,CAAO,WAAA,CACP,YAAA,CAAc,IAAM,CAClB,IAAMC,CAAAA,CAAM,IAAI,IAAA,CAChB,OAAO,CAAE,IAAA,CAAMC,WAAAA,CAAYD,CAAAA,CAAK,CAAE,YAAA,CAAc,CAAE,CAAC,CAAA,CAAG,GAAIE,SAAAA,CAAUF,CAAAA,CAAK,CAAE,YAAA,CAAc,CAAE,CAAC,CAAE,CAChG,CACF,EACA,CACE,KAAA,CAAO,YAAA,CACP,KAAA,CAAO,aACP,YAAA,CAAc,IAAM,CAAE,IAAMA,EAAM,IAAI,IAAA,CAAQ,OAAO,CAAE,KAAMG,YAAAA,CAAaH,CAAG,CAAA,CAAG,EAAA,CAAII,WAAWJ,CAAG,CAAE,CAAE,CACxG,EACA,CACE,KAAA,CAAO,eAAA,CACP,KAAA,CAAO,gBACP,YAAA,CAAc,IAAM,CAAE,IAAMA,CAAAA,CAAM,IAAI,IAAA,CAAQ,OAAO,CAAE,IAAA,CAAMK,UAAUL,CAAAA,CAAK,CAAC,CAAA,CAAG,EAAA,CAAIA,CAAI,CAAE,CAC5F,CAAA,CACA,CACE,MAAO,eAAA,CACP,KAAA,CAAO,eAAA,CACP,YAAA,CAAc,IAAM,CAAE,IAAMA,CAAAA,CAAM,IAAI,KAAQ,OAAO,CAAE,IAAA,CAAMK,SAAAA,CAAUL,EAAK,CAAC,CAAA,CAAG,EAAA,CAAIA,CAAI,CAAE,CAC5F,CAAA,CACA,CACE,KAAA,CAAO,YACP,KAAA,CAAO,WAAA,CACP,YAAA,CAAc,IAAM,CAAE,IAAMA,CAAAA,CAAM,IAAI,IAAA,CAAQ,OAAO,CAAE,IAAA,CAAMM,WAAAA,CAAYN,CAAG,EAAG,EAAA,CAAIO,SAAAA,CAAUP,CAAG,CAAE,CAAE,CACtG,CAAA,CACA,CACE,KAAA,CAAO,YACP,KAAA,CAAO,WAAA,CACP,YAAA,CAAc,IAAM,CAAE,IAAMQ,CAAAA,CAAKC,QAAAA,CAAS,IAAI,KAAQ,CAAC,CAAA,CAAG,OAAO,CAAE,IAAA,CAAMH,YAAYE,CAAE,CAAA,CAAG,EAAA,CAAID,SAAAA,CAAUC,CAAE,CAAE,CAAE,CAChH,CAAA,CACA,CACE,KAAA,CAAO,cAAA,CACP,KAAA,CAAO,cAAA,CACP,aAAc,IAAG,CAAA,CACnB,CACF,CAAA,CAEA,SAASE,EAAAA,CAAgB,CACvB,SAAA,CAAAC,CAAAA,CACA,MAAOC,CAAAA,CACP,aAAA,CAAeC,CAAAA,CACf,YAAA,CAAAC,EACA,QAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,GAAAA,CACA,YAAAC,CAAAA,CAAc,aAAA,CACd,OAAA,CAAAC,CAAAA,CAAU,KACV,aAAA,CAAAC,CACF,CAAA,CAAyB,CACvB,IAAMC,CAAAA,CAAgBC,CAAAA,CAAM,WAAA,CACzBC,CAAAA,EAAiC,CAClBT,CAAAA,GAAoBS,CAAkB,EAEtD,CAAA,CACA,CAACT,CAAAA,CAAmBE,CAAQ,CAC9B,CAAA,CAEM,CAACO,GAAAA,CAAOC,CAAQ,CAAA,CAAIC,kBAAAA,CAA0C,CAClE,KAAA,CAAOZ,CAAAA,CACP,YAAA,CAAAE,CAAAA,CACA,SAAUM,CACZ,CAAC,CAAA,CAEK,CAACK,EAAcC,CAAe,CAAA,CAAIL,EAAM,QAAA,CAA2BC,GAAAA,EAAO,MAAQ,IAAI,IAAM,CAAA,CAC5F,CAACK,EAAQC,CAAS,CAAA,CAAIP,CAAAA,CAAM,QAAA,CAAS,KAAK,CAAA,CAC1C,CAACQ,CAAAA,CAASC,CAAU,EAAIT,CAAAA,CAAM,QAAA,CAAkB,MAAM,CAAA,CAEtDU,EAAW,CAAC,CAACT,GAAAA,EAAO,IAAA,CAEpBU,EAAY,CAACC,CAAAA,CAAcC,CAAAA,GAC3B,CAACD,GAAS,CAACC,CAAAA,CAAc,KAAA,CAE3BD,CAAAA,CAAM,aAAY,GAAMC,CAAAA,CAAM,WAAA,EAAY,EAC1CD,EAAM,QAAA,EAAS,GAAMC,CAAAA,CAAM,QAAA,IAC3BD,CAAAA,CAAM,OAAA,EAAQ,GAAMC,CAAAA,CAAM,SAAQ,CAIhCC,CAAAA,CAAkBC,CAAAA,EAAqC,CAC3D,GAAI,CAACd,GAAAA,EAAO,IAAA,EAAQ,CAACA,KAAO,EAAA,CAAI,OAAO,MAAA,CACvC,GAAIc,EAAO,KAAA,GAAU,cAAA,CACnB,OAAOtC,CAAAA,CAAiB,MAAOuC,CAAAA,EAAQ,CACrC,GAAIA,CAAAA,CAAI,QAAU,cAAA,CAAgB,OAAO,MACzC,IAAMC,CAAAA,CAAWD,EAAI,YAAA,EAAa,CAClC,OAAI,CAACC,GAAU,IAAA,EAAQ,CAACA,CAAAA,EAAU,EAAA,CAAW,KACtC,EAAEN,CAAAA,CAAUV,GAAAA,CAAM,IAAA,CAAMgB,EAAS,IAAI,CAAA,EAAKN,CAAAA,CAAUV,GAAAA,CAAM,GAAIgB,CAAAA,CAAS,EAAE,CAAA,CAClF,CAAC,EAEH,IAAMC,CAAAA,CAAcH,CAAAA,CAAO,YAAA,GAC3B,OAAI,CAACG,CAAAA,EAAa,IAAA,EAAQ,CAACA,CAAAA,EAAa,EAAA,CAAW,KAAA,CAC5CP,CAAAA,CAAUV,IAAM,IAAA,CAAMiB,CAAAA,CAAY,IAAI,CAAA,EAAKP,EAAUV,GAAAA,CAAM,EAAA,CAAIiB,CAAAA,CAAY,EAAE,CACtF,CAAA,CAEA,OACEC,IAAAA,CAACC,CAAAA,CAAA,CAAQ,IAAA,CAAMzB,GAAAA,CAAW,KAAA,CAAQW,CAAAA,CAAQ,aAAcC,CAAAA,CACtD,QAAA,CAAA,CAAAc,GAAAA,CAACC,CAAAA,CAAA,CACC,MAAA,CACEH,IAAAA,CAACI,GAAAA,CAAA,CACC,UAAWC,EAAAA,CACT,wGAAA,CACA,mFAAA,CACAd,CAAAA,EACA,oEACA,yHAAA,CACA,kDAAA,CACApB,CACF,CAAA,CACA,OAAA,CAAS,KACT,IAAA,CAAM,IAAA,CACN,QAAA,CAAUK,GAAAA,CAEV,UAAAwB,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,iCAAA,CACd,UAAAE,GAAAA,CAACI,GAAAA,CAAA,CACC,SAAA,CAAWD,GACT,iBAAA,CACAd,CAAAA,CAAW,uBAAA,CAA0B,oBACvC,EACF,CAAA,CACAW,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,WACb,QAAA,CAAApB,GAAAA,EAAO,IAAA,CACJA,GAAAA,CAAM,GACJ,CAAA,EAAGyB,MAAAA,CAAOzB,GAAAA,CAAM,IAAA,CAAM,WAAW,CAAC,CAAA,GAAA,EAAMyB,MAAAA,CAAOzB,GAAAA,CAAM,GAAI,WAAW,CAAC,CAAA,CAAA,CACrEyB,MAAAA,CAAOzB,IAAM,IAAA,CAAM,WAAW,CAAA,CAChCL,CAAAA,CACN,GACF,CAAA,CACAyB,GAAAA,CAACM,WAAAA,CAAA,CACC,UAAWH,EAAAA,CACT,yEAAA,CACAd,CAAAA,CAAW,uBAAA,CAA0B,oBACvC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CACAS,KAACS,CAAAA,CAAA,CACC,SAAA,CAAWJ,EAAAA,CACT,kBACA3B,CAAAA,CAAU,gCAAA,CAAmC,0BAC/C,CAAA,CAEC,UAAAA,CAAAA,EACCwB,GAAAA,CAAC,OAAI,SAAA,CAAU,mCAAA,CACZ,SAAA5C,CAAAA,CAAiB,GAAA,CAAKsC,CAAAA,EAAW,CAChC,IAAMc,CAAAA,CAASf,CAAAA,CAAeC,CAAM,CAAA,CACpC,OACEM,GAAAA,CAACE,GAAAA,CAAA,CAEC,SAAA,CAAU,yBACV,OAAA,CAASM,CAAAA,CAAS,iBAAA,CAAoB,IAAA,CACtC,QAAS,IAAM,CACb,IAAMC,CAAAA,CAAYf,EAAO,YAAA,EAAa,CAClCe,CAAAA,GACF5B,CAAAA,CAAS4B,CAAS,CAAA,CAClBrB,CAAAA,CAAW,MAAM,CAAA,CACjBJ,EAAgByB,CAAAA,CAAU,IAAI,CAAA,EAElC,CAAA,CAEC,SAAAf,CAAAA,CAAO,KAAA,CAAA,CAZHA,CAAAA,CAAO,KAad,CAEJ,CAAC,CAAA,CACH,CAAA,CAEFM,GAAAA,CAACU,IAAA,CACC,SAAA,CAAS,IAAA,CACT,QAAA,CAAUjC,EACV,IAAA,CAAK,OAAA,CACL,KAAA,CAAOM,CAAAA,CACP,QAASI,CAAAA,CACT,cAAA,CAAgB,CAAA,CAChB,QAAA,CAAUP,IACV,aAAA,CAAeI,CAAAA,CACf,eAAA,CAAiBI,CAAAA,CACjB,SAAWuB,CAAAA,EAAQ,CACbtC,CAAAA,EAAY,CAACsC,GACjB9B,CAAAA,CAAS8B,CAAG,EACd,CAAA,CACF,CAAA,CAAA,CACF,GACF,CAEJ","file":"chunk-C675EWZW.js","sourcesContent":["\"use client\"\r\n\r\nimport React from \"react\"\r\n\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport {\r\n endOfMonth,\r\n endOfWeek,\r\n endOfYear,\r\n format,\r\n startOfMonth,\r\n startOfWeek,\r\n startOfYear,\r\n subMonths,\r\n subYears,\r\n} from \"date-fns\"\r\nimport { ChevronDown } from \"lucide-react\"\r\nimport { type DateRange, type Matcher } from \"react-day-picker\"\r\n\r\nexport type { DateRange }\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nimport { Button } from \"./button\"\r\nimport { Calendar, type NavView } from \"./calendar\"\r\nimport { CalendarIcon } from \"../icons\"\r\nimport { Popover, PopoverPopup, PopoverTrigger } from \"./popover\"\r\n\r\nexport type DateRangePickerProps = {\r\n className?: string\r\n value?: DateRange\r\n defaultValue?: DateRange\r\n required?: boolean\r\n disabled?: boolean\r\n placeholder?: string\r\n options?: boolean\r\n disabledDates?: Matcher | Matcher[] | undefined\r\n} & ({\r\n required: true\r\n onValueChange?: (value: DateRange) => void\r\n} | {\r\n required?: false\r\n onValueChange?: (value: DateRange | undefined) => void\r\n})\r\n\r\ntype DateRangeOption = {\r\n label: string\r\n value: string\r\n getDateRange: () => DateRange | undefined\r\n}\r\n\r\nconst dateRangeOptions: DateRangeOption[] = [\r\n {\r\n label: \"Today\",\r\n value: \"today\",\r\n getDateRange: () => { const t = new Date(); return { from: t, to: t } },\r\n },\r\n {\r\n value: \"last-7-days\",\r\n label: \"Last 7 days\",\r\n getDateRange: () => ({\r\n from: new Date(Date.now() - 6 * 24 * 60 * 60 * 1000), // 6 days in milliseconds\r\n to: new Date(),\r\n }),\r\n },\r\n {\r\n label: \"This Week\",\r\n value: \"this-week\",\r\n getDateRange: () => {\r\n const now = new Date()\r\n return { from: startOfWeek(now, { weekStartsOn: 1 }), to: endOfWeek(now, { weekStartsOn: 1 }) }\r\n },\r\n },\r\n {\r\n label: \"This Month\",\r\n value: \"this-month\",\r\n getDateRange: () => { const now = new Date(); return { from: startOfMonth(now), to: endOfMonth(now) } },\r\n },\r\n {\r\n label: \"Last 3 Months\",\r\n value: \"last-3-months\",\r\n getDateRange: () => { const now = new Date(); return { from: subMonths(now, 3), to: now } },\r\n },\r\n {\r\n label: \"Last 6 Months\",\r\n value: \"last-6-months\",\r\n getDateRange: () => { const now = new Date(); return { from: subMonths(now, 6), to: now } },\r\n },\r\n {\r\n label: \"This Year\",\r\n value: \"this-year\",\r\n getDateRange: () => { const now = new Date(); return { from: startOfYear(now), to: endOfYear(now) } },\r\n },\r\n {\r\n label: \"Last Year\",\r\n value: \"last-year\",\r\n getDateRange: () => { const ly = subYears(new Date(), 1); return { from: startOfYear(ly), to: endOfYear(ly) } },\r\n },\r\n {\r\n label: \"Custom Range\",\r\n value: \"custom-range\",\r\n getDateRange: () => undefined,\r\n },\r\n]\r\n\r\nfunction DateRangePicker({\r\n className,\r\n value: valueProp,\r\n onValueChange: onValueChangeProp,\r\n defaultValue,\r\n required,\r\n disabled,\r\n placeholder = \"Pick a date\",\r\n options = true,\r\n disabledDates,\r\n}: DateRangePickerProps) {\r\n const onValueChange = React.useCallback(\r\n (value: DateRange | undefined) => {\r\n if (required) onValueChangeProp?.(value as DateRange)\r\n else onValueChangeProp?.(value)\r\n },\r\n [onValueChangeProp, required],\r\n )\r\n\r\n const [value, setValue] = useControlledState<DateRange | undefined>({\r\n value: valueProp,\r\n defaultValue,\r\n onChange: onValueChange,\r\n })\r\n\r\n const [currentMonth, setCurrentMonth] = React.useState<Date | undefined>(value?.from || new Date())\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [navView, setNavView] = React.useState<NavView>(\"days\")\r\n\r\n const hasValue = !!value?.from\r\n\r\n const isSameDay = (date1?: Date, date2?: Date): boolean => {\r\n if (!date1 || !date2) return false\r\n return (\r\n date1.getFullYear() === date2.getFullYear() &&\r\n date1.getMonth() === date2.getMonth() &&\r\n date1.getDate() === date2.getDate()\r\n )\r\n }\r\n\r\n const isOptionActive = (option: DateRangeOption): boolean => {\r\n if (!value?.from || !value?.to) return false\r\n if (option.value === \"custom-range\") {\r\n return dateRangeOptions.every((opt) => {\r\n if (opt.value === \"custom-range\") return true\r\n const optRange = opt.getDateRange()\r\n if (!optRange?.from || !optRange?.to) return true\r\n return !(isSameDay(value.from, optRange.from) && isSameDay(value.to, optRange.to))\r\n })\r\n }\r\n const optionRange = option.getDateRange()\r\n if (!optionRange?.from || !optionRange?.to) return false\r\n return isSameDay(value.from, optionRange.from) && isSameDay(value.to, optionRange.to)\r\n }\r\n\r\n return (\r\n <Popover open={disabled ? false : isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n className={cn(\r\n \"group h-9 w-full justify-between rounded-xp-card-base border px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary bg-bg-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue &&\r\n \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n className,\r\n )}\r\n variant={null}\r\n size={null}\r\n disabled={disabled}\r\n >\r\n <span className=\"flex min-w-0 items-center gap-2\">\r\n <CalendarIcon\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n <span className=\"truncate\">\r\n {value?.from\r\n ? value.to\r\n ? `${format(value.from, \"LLL dd, y\")} - ${format(value.to, \"LLL dd, y\")}`\r\n : format(value.from, \"LLL dd, y\")\r\n : placeholder}\r\n </span>\r\n </span>\r\n <ChevronDown\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n </Button>\r\n }\r\n />\r\n <PopoverPopup\r\n className={cn(\r\n \"w-auto border-0\",\r\n options ? \"rounded-2xl p-xp-lg flex gap-6\" : \"p-xp-none bg-transparent\",\r\n )}\r\n >\r\n {options && (\r\n <div className=\"flex flex-col gap-xp-md w-[135px]\">\r\n {dateRangeOptions.map((option) => {\r\n const active = isOptionActive(option)\r\n return (\r\n <Button\r\n key={option.value}\r\n className=\"justify-start px-xp-xl\"\r\n variant={active ? \"tertiary-accent\" : null}\r\n onClick={() => {\r\n const dateRange = option.getDateRange()\r\n if (dateRange) {\r\n setValue(dateRange)\r\n setNavView(\"days\")\r\n setCurrentMonth(dateRange.from)\r\n }\r\n }}\r\n >\r\n {option.label}\r\n </Button>\r\n )\r\n })}\r\n </div>\r\n )}\r\n <Calendar\r\n autoFocus\r\n disabled={disabledDates}\r\n mode=\"range\"\r\n month={currentMonth}\r\n navView={navView}\r\n numberOfMonths={2}\r\n selected={value}\r\n onMonthChange={setCurrentMonth}\r\n onNavViewChange={setNavView}\r\n onSelect={(val) => {\r\n if (required && !val) return\r\n setValue(val)\r\n }}\r\n />\r\n </PopoverPopup>\r\n </Popover>\r\n )\r\n}\r\n\r\nexport { DateRangePicker }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/date-range-picker.tsx"],"names":["dateRangeOptions","t","now","startOfWeek","endOfWeek","startOfMonth","endOfMonth","subMonths","startOfYear","endOfYear","ly","subYears","DateRangePicker","className","valueProp","onValueChangeProp","defaultValue","required","disabled","placeholder","options","disabledDates","onValueChange","React","value","setValue","useControlledState","currentMonth","setCurrentMonth","isOpen","setIsOpen","navView","setNavView","hasValue","isSameDay","date1","date2","isOptionActive","option","opt","optRange","optionRange","jsxs","Popover","jsx","PopoverTrigger","Button","cn","calendar_icon_default","format","ChevronDown","PopoverPopup","active","dateRange","Calendar","val"],"mappings":"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","file":"chunk-QIP6KFG2.js","sourcesContent":["\"use client\"\r\n\r\nimport React from \"react\"\r\n\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport {\r\n endOfMonth,\r\n endOfWeek,\r\n endOfYear,\r\n format,\r\n startOfMonth,\r\n startOfWeek,\r\n startOfYear,\r\n subMonths,\r\n subYears,\r\n} from \"date-fns\"\r\nimport { ChevronDown } from \"lucide-react\"\r\nimport { type DateRange, type Matcher } from \"react-day-picker\"\r\n\r\nexport type { DateRange }\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nimport { Button } from \"./button\"\r\nimport { Calendar, type NavView } from \"./calendar\"\r\nimport { CalendarIcon } from \"../icons\"\r\nimport { Popover, PopoverPopup, PopoverTrigger } from \"./popover\"\r\n\r\nexport type DateRangePickerProps = {\r\n className?: string\r\n value?: DateRange\r\n defaultValue?: DateRange\r\n required?: boolean\r\n disabled?: boolean\r\n placeholder?: string\r\n options?: boolean\r\n disabledDates?: Matcher | Matcher[] | undefined\r\n} & ({\r\n required: true\r\n onValueChange?: (value: DateRange) => void\r\n} | {\r\n required?: false\r\n onValueChange?: (value: DateRange | undefined) => void\r\n})\r\n\r\ntype DateRangeOption = {\r\n label: string\r\n value: string\r\n getDateRange: () => DateRange | undefined\r\n}\r\n\r\nconst dateRangeOptions: DateRangeOption[] = [\r\n {\r\n label: \"Today\",\r\n value: \"today\",\r\n getDateRange: () => { const t = new Date(); return { from: t, to: t } },\r\n },\r\n {\r\n value: \"last-7-days\",\r\n label: \"Last 7 days\",\r\n getDateRange: () => ({\r\n from: new Date(Date.now() - 6 * 24 * 60 * 60 * 1000), // 6 days in milliseconds\r\n to: new Date(),\r\n }),\r\n },\r\n {\r\n label: \"This Week\",\r\n value: \"this-week\",\r\n getDateRange: () => {\r\n const now = new Date()\r\n return { from: startOfWeek(now, { weekStartsOn: 1 }), to: endOfWeek(now, { weekStartsOn: 1 }) }\r\n },\r\n },\r\n {\r\n label: \"This Month\",\r\n value: \"this-month\",\r\n getDateRange: () => { const now = new Date(); return { from: startOfMonth(now), to: endOfMonth(now) } },\r\n },\r\n {\r\n label: \"Last 3 Months\",\r\n value: \"last-3-months\",\r\n getDateRange: () => { const now = new Date(); return { from: subMonths(now, 3), to: now } },\r\n },\r\n {\r\n label: \"Last 6 Months\",\r\n value: \"last-6-months\",\r\n getDateRange: () => { const now = new Date(); return { from: subMonths(now, 6), to: now } },\r\n },\r\n {\r\n label: \"This Year\",\r\n value: \"this-year\",\r\n getDateRange: () => { const now = new Date(); return { from: startOfYear(now), to: endOfYear(now) } },\r\n },\r\n {\r\n label: \"Last Year\",\r\n value: \"last-year\",\r\n getDateRange: () => { const ly = subYears(new Date(), 1); return { from: startOfYear(ly), to: endOfYear(ly) } },\r\n },\r\n {\r\n label: \"Custom Range\",\r\n value: \"custom-range\",\r\n getDateRange: () => undefined,\r\n },\r\n]\r\n\r\nfunction DateRangePicker({\r\n className,\r\n value: valueProp,\r\n onValueChange: onValueChangeProp,\r\n defaultValue,\r\n required,\r\n disabled,\r\n placeholder = \"Pick a date\",\r\n options = true,\r\n disabledDates,\r\n}: DateRangePickerProps) {\r\n const onValueChange = React.useCallback(\r\n (value: DateRange | undefined) => {\r\n if (required) onValueChangeProp?.(value as DateRange)\r\n else onValueChangeProp?.(value)\r\n },\r\n [onValueChangeProp, required],\r\n )\r\n\r\n const [value, setValue] = useControlledState<DateRange | undefined>({\r\n value: valueProp,\r\n defaultValue,\r\n onChange: onValueChange,\r\n })\r\n\r\n const [currentMonth, setCurrentMonth] = React.useState<Date | undefined>(value?.from || new Date())\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [navView, setNavView] = React.useState<NavView>(\"days\")\r\n\r\n const hasValue = !!value?.from\r\n\r\n const isSameDay = (date1?: Date, date2?: Date): boolean => {\r\n if (!date1 || !date2) return false\r\n return (\r\n date1.getFullYear() === date2.getFullYear() &&\r\n date1.getMonth() === date2.getMonth() &&\r\n date1.getDate() === date2.getDate()\r\n )\r\n }\r\n\r\n const isOptionActive = (option: DateRangeOption): boolean => {\r\n if (!value?.from || !value?.to) return false\r\n if (option.value === \"custom-range\") {\r\n return dateRangeOptions.every((opt) => {\r\n if (opt.value === \"custom-range\") return true\r\n const optRange = opt.getDateRange()\r\n if (!optRange?.from || !optRange?.to) return true\r\n return !(isSameDay(value.from, optRange.from) && isSameDay(value.to, optRange.to))\r\n })\r\n }\r\n const optionRange = option.getDateRange()\r\n if (!optionRange?.from || !optionRange?.to) return false\r\n return isSameDay(value.from, optionRange.from) && isSameDay(value.to, optionRange.to)\r\n }\r\n\r\n return (\r\n <Popover open={disabled ? false : isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n className={cn(\r\n \"group h-9 w-full justify-between rounded-xp-card-base border px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary bg-bg-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue &&\r\n \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n className,\r\n )}\r\n variant={null}\r\n size={null}\r\n disabled={disabled}\r\n >\r\n <span className=\"flex min-w-0 items-center gap-2\">\r\n <CalendarIcon\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n <span className=\"truncate\">\r\n {value?.from\r\n ? value.to\r\n ? `${format(value.from, \"LLL dd, y\")} - ${format(value.to, \"LLL dd, y\")}`\r\n : format(value.from, \"LLL dd, y\")\r\n : placeholder}\r\n </span>\r\n </span>\r\n <ChevronDown\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n </Button>\r\n }\r\n />\r\n <PopoverPopup\r\n className={cn(\r\n \"w-auto border-0\",\r\n options ? \"rounded-2xl p-xp-lg flex gap-6\" : \"p-xp-none bg-transparent\",\r\n )}\r\n >\r\n {options && (\r\n <div className=\"flex flex-col gap-xp-md w-[135px]\">\r\n {dateRangeOptions.map((option) => {\r\n const active = isOptionActive(option)\r\n return (\r\n <Button\r\n key={option.value}\r\n className=\"justify-start px-xp-xl\"\r\n variant={active ? \"tertiary-accent\" : null}\r\n onClick={() => {\r\n const dateRange = option.getDateRange()\r\n if (dateRange) {\r\n setValue(dateRange)\r\n setNavView(\"days\")\r\n setCurrentMonth(dateRange.from)\r\n }\r\n }}\r\n >\r\n {option.label}\r\n </Button>\r\n )\r\n })}\r\n </div>\r\n )}\r\n <Calendar\r\n autoFocus\r\n disabled={disabledDates}\r\n mode=\"range\"\r\n month={currentMonth}\r\n navView={navView}\r\n numberOfMonths={2}\r\n selected={value}\r\n onMonthChange={setCurrentMonth}\r\n onNavViewChange={setNavView}\r\n onSelect={(val) => {\r\n if (required && !val) return\r\n setValue(val)\r\n }}\r\n />\r\n </PopoverPopup>\r\n </Popover>\r\n )\r\n}\r\n\r\nexport { DateRangePicker }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$1,e,f,k,i,j,g,h as h$1,m,l}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$1,e,f,k,i,j,g,h as h$1,m,l}from'./chunk-OBS7TDVV.js';import*as r from'react';import {X}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs}from'react/jsx-runtime';var b={isOpen:false,config:{title:"",confirmText:"OK",cancelText:"Cancel",denyText:"Deny",variant:"default",showCancel:false,showDeny:false,showCloseButton:false,position:"center",textAlign:"left",footerLayout:"row",className:""},resolver:null},a=null,R={add:t=>{if(!a){console.warn("AlertDialog: Alerter component not mounted");return}a({isOpen:true,config:{confirmText:"OK",cancelText:"Cancel",denyText:"Deny",variant:"default",showCancel:false,showDeny:false,showCloseButton:false,position:"center",textAlign:"left",footerLayout:"row",className:"",...t},resolver:null});},confirm:t=>new Promise(o=>{if(!a){console.warn("AlertDialog: Alerter component not mounted"),o("cancel");return}a({isOpen:true,config:{confirmText:"Confirm",cancelText:"Cancel",denyText:"Deny",variant:"default",showCancel:true,showDeny:false,showCloseButton:false,position:"center",textAlign:"left",footerLayout:"row",className:"",...t},resolver:o});})},h=(t="center")=>({"top-start":"data-[state=open]:slide-in-from-top-2 sm:top-4 sm:left-4 sm:right-auto sm:translate-x-0 sm:translate-y-0","top-center":"data-[state=open]:slide-in-from-top-2 sm:top-4 sm:left-1/2 sm:-translate-x-1/2 sm:translate-y-0","top-end":"data-[state=open]:slide-in-from-top-2 sm:top-4 sm:right-4 sm:left-auto sm:translate-x-0 sm:translate-y-0","bottom-start":"data-[state=open]:slide-in-from-bottom-2 sm:bottom-4 sm:top-auto sm:left-4 sm:right-auto sm:translate-x-0 sm:translate-y-0","bottom-center":"data-[state=open]:slide-in-from-bottom-2 sm:bottom-4 sm:top-auto sm:left-1/2 sm:-translate-x-1/2 sm:translate-y-0","bottom-end":"data-[state=open]:slide-in-from-bottom-2 sm:bottom-4 sm:top-auto sm:right-4 sm:left-auto sm:translate-x-0 sm:translate-y-0",center:"sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2"})[t];function T(){let[t,o]=r.useState(b);r.useEffect(()=>(a=o,()=>{a=null;}),[]);let x=async()=>{t.config.onConfirm&&await t.config.onConfirm(),t.resolver&&t.resolver("confirm"),o(n=>({...n,isOpen:false,resolver:null}));},C=async()=>{t.config.onDeny&&await t.config.onDeny(),t.resolver&&t.resolver("deny"),o(n=>({...n,isOpen:false,resolver:null}));},i$1=()=>{t.config.onCancel&&t.config.onCancel(),t.resolver&&t.resolver("cancel"),o(n=>({...n,isOpen:false,resolver:null}));};return jsx(a$1,{open:t.isOpen,onOpenChange:n=>{n||i$1();},children:jsxs(e,{className:cn(h(t.config.position),t.config.className),children:[t.config.showCloseButton&&jsxs("button",{type:"button","aria-label":t.config.closeAriaLabel||"Close",className:"absolute right-3.5 top-3.5 rounded-xp-card-base-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground z-10",onClick:i$1,children:[jsx(X,{className:"h-4 w-4"}),jsx("span",{className:"sr-only",children:t.config.closeAriaLabel||"Close"})]}),jsxs(f,{className:cn(t.config.textAlign==="center"?"items-center text-center grid-cols-1":t.config.textAlign==="right"?"items-end text-right":"items-start text-left"),children:[t.config.icon&&jsx(k,{variant:t.config.variant==="destructive"?"error":"brand",children:t.config.icon}),jsx(i,{children:t.config.title}),t.config.description&&jsx(j,{children:t.config.description})]}),t.config.additionalContents&&jsx(g,{children:t.config.additionalContents}),jsxs(h$1,{className:cn(t.config.footerLayout==="col"?"sm:flex-col flex-col gap-2 items-stretch":"flex-row justify-end gap-2 items-center"),children:[t.config.showCancel&&jsx(m,{className:t.config.footerLayout==="col"?"w-full":void 0,onClick:i$1,...t.config.cancelButtonProps,children:t.config.cancelText}),t.config.showDeny&&jsx(l,{className:t.config.footerLayout==="col"?"w-full":void 0,onClick:C,color:t.config.denyButtonProps?.color||"destructive",variant:t.config.denyButtonProps?.variant||"secondary",...t.config.denyButtonProps,children:t.config.denyText}),jsx(l,{className:t.config.footerLayout==="col"?"w-full":void 0,onClick:x,color:t.config.confirmButtonProps?.color||(t.config.variant==="destructive"?"destructive":"default"),variant:t.config.confirmButtonProps?.variant||"primary",...t.config.confirmButtonProps,children:t.config.confirmText})]})]})})}export{R as a,T as b};//# sourceMappingURL=chunk-S4L5WILL.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-S4L5WILL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/alerter.tsx"],"names":["globalAlertState","globalSetState","alert","options","resolve","getPositionClasses","position","Alerter","state","setState","handleConfirm","prev","handleDeny","handleCancel","jsx","AlertDialog","open","jsxs","AlertDialogPopup","cn","X","AlertDialogHeader","AlertDialogIcon","AlertDialogTitle","AlertDialogDescription","AlertDialogContent","AlertDialogFooter","AlertDialogCancel","AlertDialogAction"],"mappings":"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","file":"chunk-YPV6XEV4.js","sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport { cn } from \"@xploreu/lib/cn\";\r\nimport {\r\n AlertDialog,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogPopup,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogIcon,\r\n AlertDialogTitle,\r\n type AlertDialogActionProps,\r\n type AlertDialogCancelProps,\r\n} from \"./alert-dialog\";\r\n\r\n// Types\r\nexport type AlertPosition =\r\n | \"top-start\"\r\n | \"top-center\"\r\n | \"top-end\"\r\n | \"bottom-start\"\r\n | \"bottom-center\"\r\n | \"bottom-end\"\r\n | \"center\";\r\n\r\nexport interface AlertOptions {\r\n title: React.ReactNode;\r\n description?: React.ReactNode;\r\n icon?: React.ReactNode;\r\n confirmText?: string;\r\n cancelText?: string;\r\n denyText?: string;\r\n variant?: \"default\" | \"destructive\";\r\n showCancel?: boolean;\r\n showDeny?: boolean;\r\n position?: AlertPosition;\r\n textAlign?: \"left\" | \"center\" | \"right\";\r\n footerLayout?: \"row\" | \"col\";\r\n showCloseButton?: boolean;\r\n closeAriaLabel?: string;\r\n confirmButtonProps?: AlertDialogActionProps;\r\n cancelButtonProps?: AlertDialogCancelProps;\r\n denyButtonProps?: AlertDialogActionProps;\r\n onConfirm?: () => void | Promise<void>;\r\n onCancel?: () => void;\r\n onDeny?: () => void | Promise<void>;\r\n className?: string;\r\n additionalContents?: React.ReactNode;\r\n}\r\n\r\nexport type AlertResult = \"confirm\" | \"deny\" | \"cancel\";\r\n\r\ninterface AlertState {\r\n isOpen: boolean;\r\n config: AlertOptions;\r\n resolver: ((value: AlertResult) => void) | null;\r\n}\r\n\r\n// Global state\r\nconst globalAlertState: AlertState = {\r\n isOpen: false,\r\n config: {\r\n title: \"\",\r\n confirmText: \"OK\",\r\n cancelText: \"Cancel\",\r\n denyText: \"Deny\",\r\n variant: \"default\",\r\n showCancel: false,\r\n showDeny: false,\r\n showCloseButton: false,\r\n position: \"center\",\r\n textAlign: \"left\",\r\n footerLayout: \"row\",\r\n className: \"\",\r\n },\r\n resolver: null,\r\n};\r\n\r\nlet globalSetState: React.Dispatch<React.SetStateAction<AlertState>> | null = null;\r\n\r\n// Imperative Alert API\r\nexport const alert = {\r\n add: (options: AlertOptions) => {\r\n if (!globalSetState) {\r\n console.warn(\"AlertDialog: Alerter component not mounted\");\r\n return;\r\n }\r\n\r\n globalSetState({\r\n isOpen: true,\r\n config: {\r\n confirmText: \"OK\",\r\n cancelText: \"Cancel\",\r\n denyText: \"Deny\",\r\n variant: \"default\",\r\n showCancel: false,\r\n showDeny: false,\r\n showCloseButton: false,\r\n position: \"center\",\r\n textAlign: \"left\",\r\n footerLayout: \"row\",\r\n className: \"\",\r\n ...options,\r\n },\r\n resolver: null,\r\n });\r\n },\r\n\r\n confirm: (options: AlertOptions): Promise<AlertResult> => {\r\n return new Promise((resolve) => {\r\n if (!globalSetState) {\r\n console.warn(\"AlertDialog: Alerter component not mounted\");\r\n resolve(\"cancel\");\r\n return;\r\n }\r\n\r\n globalSetState({\r\n isOpen: true,\r\n config: {\r\n confirmText: \"Confirm\",\r\n cancelText: \"Cancel\",\r\n denyText: \"Deny\",\r\n variant: \"default\",\r\n showCancel: true,\r\n showDeny: false,\r\n showCloseButton: false,\r\n position: \"center\",\r\n textAlign: \"left\",\r\n footerLayout: \"row\",\r\n className: \"\",\r\n ...options,\r\n },\r\n resolver: resolve,\r\n });\r\n });\r\n },\r\n};\r\n\r\nconst getPositionClasses = (position: AlertPosition = \"center\") => {\r\n const positions: Record<AlertPosition, string> = {\r\n \"top-start\":\r\n \"data-[state=open]:slide-in-from-top-2 sm:top-4 sm:left-4 sm:right-auto sm:translate-x-0 sm:translate-y-0\",\r\n \"top-center\":\r\n \"data-[state=open]:slide-in-from-top-2 sm:top-4 sm:left-1/2 sm:-translate-x-1/2 sm:translate-y-0\",\r\n \"top-end\":\r\n \"data-[state=open]:slide-in-from-top-2 sm:top-4 sm:right-4 sm:left-auto sm:translate-x-0 sm:translate-y-0\",\r\n \"bottom-start\":\r\n \"data-[state=open]:slide-in-from-bottom-2 sm:bottom-4 sm:top-auto sm:left-4 sm:right-auto sm:translate-x-0 sm:translate-y-0\",\r\n \"bottom-center\":\r\n \"data-[state=open]:slide-in-from-bottom-2 sm:bottom-4 sm:top-auto sm:left-1/2 sm:-translate-x-1/2 sm:translate-y-0\",\r\n \"bottom-end\":\r\n \"data-[state=open]:slide-in-from-bottom-2 sm:bottom-4 sm:top-auto sm:right-4 sm:left-auto sm:translate-x-0 sm:translate-y-0\",\r\n center: \"sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2\",\r\n };\r\n return positions[position];\r\n};\r\n\r\n// Alerter Component (mount once at root layout)\r\nexport function Alerter() {\r\n const [state, setState] = React.useState<AlertState>(globalAlertState);\r\n\r\n React.useEffect(() => {\r\n globalSetState = setState;\r\n return () => {\r\n globalSetState = null;\r\n };\r\n }, []);\r\n\r\n const handleConfirm = async () => {\r\n if (state.config.onConfirm) {\r\n await state.config.onConfirm();\r\n }\r\n if (state.resolver) {\r\n state.resolver(\"confirm\");\r\n }\r\n setState((prev) => ({ ...prev, isOpen: false, resolver: null }));\r\n };\r\n\r\n const handleDeny = async () => {\r\n if (state.config.onDeny) {\r\n await state.config.onDeny();\r\n }\r\n if (state.resolver) {\r\n state.resolver(\"deny\");\r\n }\r\n setState((prev) => ({ ...prev, isOpen: false, resolver: null }));\r\n };\r\n\r\n const handleCancel = () => {\r\n if (state.config.onCancel) {\r\n state.config.onCancel();\r\n }\r\n if (state.resolver) {\r\n state.resolver(\"cancel\");\r\n }\r\n setState((prev) => ({ ...prev, isOpen: false, resolver: null }));\r\n };\r\n\r\n return (\r\n <AlertDialog\r\n open={state.isOpen}\r\n onOpenChange={(open) => {\r\n if (!open) handleCancel();\r\n }}\r\n >\r\n <AlertDialogPopup\r\n className={cn(\r\n getPositionClasses(state.config.position),\r\n state.config.className\r\n )}\r\n >\r\n {state.config.showCloseButton && (\r\n <button\r\n type=\"button\"\r\n aria-label={state.config.closeAriaLabel || \"Close\"}\r\n className=\"absolute right-3.5 top-3.5 rounded-xp-card-base-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground z-10\"\r\n onClick={handleCancel}\r\n >\r\n <X className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">{state.config.closeAriaLabel || \"Close\"}</span>\r\n </button>\r\n )}\r\n <AlertDialogHeader\r\n className={cn(\r\n state.config.textAlign === \"center\"\r\n ? \"items-center text-center grid-cols-1\"\r\n : state.config.textAlign === \"right\"\r\n ? \"items-end text-right\"\r\n : \"items-start text-left\"\r\n )}\r\n >\r\n {state.config.icon && (\r\n <AlertDialogIcon\r\n variant={state.config.variant === \"destructive\" ? \"error\" : \"brand\"}\r\n >\r\n {state.config.icon}\r\n </AlertDialogIcon>\r\n )}\r\n <AlertDialogTitle>{state.config.title}</AlertDialogTitle>\r\n {state.config.description && (\r\n <AlertDialogDescription>\r\n {state.config.description}\r\n </AlertDialogDescription>\r\n )}\r\n </AlertDialogHeader>\r\n {state.config.additionalContents && (\r\n <AlertDialogContent>\r\n {state.config.additionalContents}\r\n </AlertDialogContent>\r\n )}\r\n <AlertDialogFooter\r\n className={cn(\r\n state.config.footerLayout === \"col\"\r\n ? \"sm:flex-col flex-col gap-2 items-stretch\"\r\n : \"flex-row justify-end gap-2 items-center\"\r\n )}\r\n >\r\n {state.config.showCancel && (\r\n <AlertDialogCancel\r\n className={state.config.footerLayout === \"col\" ? \"w-full\" : undefined}\r\n onClick={handleCancel}\r\n {...state.config.cancelButtonProps}\r\n >\r\n {state.config.cancelText}\r\n </AlertDialogCancel>\r\n )}\r\n {state.config.showDeny && (\r\n <AlertDialogAction\r\n className={state.config.footerLayout === \"col\" ? \"w-full\" : undefined}\r\n onClick={handleDeny}\r\n color={state.config.denyButtonProps?.color || \"destructive\"}\r\n variant={state.config.denyButtonProps?.variant || \"secondary\"}\r\n {...state.config.denyButtonProps}\r\n >\r\n {state.config.denyText}\r\n </AlertDialogAction>\r\n )}\r\n <AlertDialogAction\r\n className={state.config.footerLayout === \"col\" ? \"w-full\" : undefined}\r\n onClick={handleConfirm}\r\n color={\r\n state.config.confirmButtonProps?.color ||\r\n (state.config.variant === \"destructive\" ? \"destructive\" : \"default\")\r\n }\r\n variant={state.config.confirmButtonProps?.variant || \"primary\"}\r\n {...state.config.confirmButtonProps}\r\n >\r\n {state.config.confirmText}\r\n </AlertDialogAction>\r\n </AlertDialogFooter>\r\n </AlertDialogPopup>\r\n </AlertDialog>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/alerter.tsx"],"names":["globalAlertState","globalSetState","alert","options","resolve","getPositionClasses","position","Alerter","state","setState","handleConfirm","prev","handleDeny","handleCancel","jsx","AlertDialog","open","jsxs","AlertDialogPopup","cn","X","AlertDialogHeader","AlertDialogIcon","AlertDialogTitle","AlertDialogDescription","AlertDialogContent","AlertDialogFooter","AlertDialogCancel","AlertDialogAction"],"mappings":"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","file":"chunk-S4L5WILL.js","sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport { cn } from \"@xploreu/lib/cn\";\r\nimport {\r\n AlertDialog,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogPopup,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogIcon,\r\n AlertDialogTitle,\r\n type AlertDialogActionProps,\r\n type AlertDialogCancelProps,\r\n} from \"./alert-dialog\";\r\n\r\n// Types\r\nexport type AlertPosition =\r\n | \"top-start\"\r\n | \"top-center\"\r\n | \"top-end\"\r\n | \"bottom-start\"\r\n | \"bottom-center\"\r\n | \"bottom-end\"\r\n | \"center\";\r\n\r\nexport interface AlertOptions {\r\n title: React.ReactNode;\r\n description?: React.ReactNode;\r\n icon?: React.ReactNode;\r\n confirmText?: string;\r\n cancelText?: string;\r\n denyText?: string;\r\n variant?: \"default\" | \"destructive\";\r\n showCancel?: boolean;\r\n showDeny?: boolean;\r\n position?: AlertPosition;\r\n textAlign?: \"left\" | \"center\" | \"right\";\r\n footerLayout?: \"row\" | \"col\";\r\n showCloseButton?: boolean;\r\n closeAriaLabel?: string;\r\n confirmButtonProps?: AlertDialogActionProps;\r\n cancelButtonProps?: AlertDialogCancelProps;\r\n denyButtonProps?: AlertDialogActionProps;\r\n onConfirm?: () => void | Promise<void>;\r\n onCancel?: () => void;\r\n onDeny?: () => void | Promise<void>;\r\n className?: string;\r\n additionalContents?: React.ReactNode;\r\n}\r\n\r\nexport type AlertResult = \"confirm\" | \"deny\" | \"cancel\";\r\n\r\ninterface AlertState {\r\n isOpen: boolean;\r\n config: AlertOptions;\r\n resolver: ((value: AlertResult) => void) | null;\r\n}\r\n\r\n// Global state\r\nconst globalAlertState: AlertState = {\r\n isOpen: false,\r\n config: {\r\n title: \"\",\r\n confirmText: \"OK\",\r\n cancelText: \"Cancel\",\r\n denyText: \"Deny\",\r\n variant: \"default\",\r\n showCancel: false,\r\n showDeny: false,\r\n showCloseButton: false,\r\n position: \"center\",\r\n textAlign: \"left\",\r\n footerLayout: \"row\",\r\n className: \"\",\r\n },\r\n resolver: null,\r\n};\r\n\r\nlet globalSetState: React.Dispatch<React.SetStateAction<AlertState>> | null = null;\r\n\r\n// Imperative Alert API\r\nexport const alert = {\r\n add: (options: AlertOptions) => {\r\n if (!globalSetState) {\r\n console.warn(\"AlertDialog: Alerter component not mounted\");\r\n return;\r\n }\r\n\r\n globalSetState({\r\n isOpen: true,\r\n config: {\r\n confirmText: \"OK\",\r\n cancelText: \"Cancel\",\r\n denyText: \"Deny\",\r\n variant: \"default\",\r\n showCancel: false,\r\n showDeny: false,\r\n showCloseButton: false,\r\n position: \"center\",\r\n textAlign: \"left\",\r\n footerLayout: \"row\",\r\n className: \"\",\r\n ...options,\r\n },\r\n resolver: null,\r\n });\r\n },\r\n\r\n confirm: (options: AlertOptions): Promise<AlertResult> => {\r\n return new Promise((resolve) => {\r\n if (!globalSetState) {\r\n console.warn(\"AlertDialog: Alerter component not mounted\");\r\n resolve(\"cancel\");\r\n return;\r\n }\r\n\r\n globalSetState({\r\n isOpen: true,\r\n config: {\r\n confirmText: \"Confirm\",\r\n cancelText: \"Cancel\",\r\n denyText: \"Deny\",\r\n variant: \"default\",\r\n showCancel: true,\r\n showDeny: false,\r\n showCloseButton: false,\r\n position: \"center\",\r\n textAlign: \"left\",\r\n footerLayout: \"row\",\r\n className: \"\",\r\n ...options,\r\n },\r\n resolver: resolve,\r\n });\r\n });\r\n },\r\n};\r\n\r\nconst getPositionClasses = (position: AlertPosition = \"center\") => {\r\n const positions: Record<AlertPosition, string> = {\r\n \"top-start\":\r\n \"data-[state=open]:slide-in-from-top-2 sm:top-4 sm:left-4 sm:right-auto sm:translate-x-0 sm:translate-y-0\",\r\n \"top-center\":\r\n \"data-[state=open]:slide-in-from-top-2 sm:top-4 sm:left-1/2 sm:-translate-x-1/2 sm:translate-y-0\",\r\n \"top-end\":\r\n \"data-[state=open]:slide-in-from-top-2 sm:top-4 sm:right-4 sm:left-auto sm:translate-x-0 sm:translate-y-0\",\r\n \"bottom-start\":\r\n \"data-[state=open]:slide-in-from-bottom-2 sm:bottom-4 sm:top-auto sm:left-4 sm:right-auto sm:translate-x-0 sm:translate-y-0\",\r\n \"bottom-center\":\r\n \"data-[state=open]:slide-in-from-bottom-2 sm:bottom-4 sm:top-auto sm:left-1/2 sm:-translate-x-1/2 sm:translate-y-0\",\r\n \"bottom-end\":\r\n \"data-[state=open]:slide-in-from-bottom-2 sm:bottom-4 sm:top-auto sm:right-4 sm:left-auto sm:translate-x-0 sm:translate-y-0\",\r\n center: \"sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2\",\r\n };\r\n return positions[position];\r\n};\r\n\r\n// Alerter Component (mount once at root layout)\r\nexport function Alerter() {\r\n const [state, setState] = React.useState<AlertState>(globalAlertState);\r\n\r\n React.useEffect(() => {\r\n globalSetState = setState;\r\n return () => {\r\n globalSetState = null;\r\n };\r\n }, []);\r\n\r\n const handleConfirm = async () => {\r\n if (state.config.onConfirm) {\r\n await state.config.onConfirm();\r\n }\r\n if (state.resolver) {\r\n state.resolver(\"confirm\");\r\n }\r\n setState((prev) => ({ ...prev, isOpen: false, resolver: null }));\r\n };\r\n\r\n const handleDeny = async () => {\r\n if (state.config.onDeny) {\r\n await state.config.onDeny();\r\n }\r\n if (state.resolver) {\r\n state.resolver(\"deny\");\r\n }\r\n setState((prev) => ({ ...prev, isOpen: false, resolver: null }));\r\n };\r\n\r\n const handleCancel = () => {\r\n if (state.config.onCancel) {\r\n state.config.onCancel();\r\n }\r\n if (state.resolver) {\r\n state.resolver(\"cancel\");\r\n }\r\n setState((prev) => ({ ...prev, isOpen: false, resolver: null }));\r\n };\r\n\r\n return (\r\n <AlertDialog\r\n open={state.isOpen}\r\n onOpenChange={(open) => {\r\n if (!open) handleCancel();\r\n }}\r\n >\r\n <AlertDialogPopup\r\n className={cn(\r\n getPositionClasses(state.config.position),\r\n state.config.className\r\n )}\r\n >\r\n {state.config.showCloseButton && (\r\n <button\r\n type=\"button\"\r\n aria-label={state.config.closeAriaLabel || \"Close\"}\r\n className=\"absolute right-3.5 top-3.5 rounded-xp-card-base-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground z-10\"\r\n onClick={handleCancel}\r\n >\r\n <X className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">{state.config.closeAriaLabel || \"Close\"}</span>\r\n </button>\r\n )}\r\n <AlertDialogHeader\r\n className={cn(\r\n state.config.textAlign === \"center\"\r\n ? \"items-center text-center grid-cols-1\"\r\n : state.config.textAlign === \"right\"\r\n ? \"items-end text-right\"\r\n : \"items-start text-left\"\r\n )}\r\n >\r\n {state.config.icon && (\r\n <AlertDialogIcon\r\n variant={state.config.variant === \"destructive\" ? \"error\" : \"brand\"}\r\n >\r\n {state.config.icon}\r\n </AlertDialogIcon>\r\n )}\r\n <AlertDialogTitle>{state.config.title}</AlertDialogTitle>\r\n {state.config.description && (\r\n <AlertDialogDescription>\r\n {state.config.description}\r\n </AlertDialogDescription>\r\n )}\r\n </AlertDialogHeader>\r\n {state.config.additionalContents && (\r\n <AlertDialogContent>\r\n {state.config.additionalContents}\r\n </AlertDialogContent>\r\n )}\r\n <AlertDialogFooter\r\n className={cn(\r\n state.config.footerLayout === \"col\"\r\n ? \"sm:flex-col flex-col gap-2 items-stretch\"\r\n : \"flex-row justify-end gap-2 items-center\"\r\n )}\r\n >\r\n {state.config.showCancel && (\r\n <AlertDialogCancel\r\n className={state.config.footerLayout === \"col\" ? \"w-full\" : undefined}\r\n onClick={handleCancel}\r\n {...state.config.cancelButtonProps}\r\n >\r\n {state.config.cancelText}\r\n </AlertDialogCancel>\r\n )}\r\n {state.config.showDeny && (\r\n <AlertDialogAction\r\n className={state.config.footerLayout === \"col\" ? \"w-full\" : undefined}\r\n onClick={handleDeny}\r\n color={state.config.denyButtonProps?.color || \"destructive\"}\r\n variant={state.config.denyButtonProps?.variant || \"secondary\"}\r\n {...state.config.denyButtonProps}\r\n >\r\n {state.config.denyText}\r\n </AlertDialogAction>\r\n )}\r\n <AlertDialogAction\r\n className={state.config.footerLayout === \"col\" ? \"w-full\" : undefined}\r\n onClick={handleConfirm}\r\n color={\r\n state.config.confirmButtonProps?.color ||\r\n (state.config.variant === \"destructive\" ? \"destructive\" : \"default\")\r\n }\r\n variant={state.config.confirmButtonProps?.variant || \"primary\"}\r\n {...state.config.confirmButtonProps}\r\n >\r\n {state.config.confirmText}\r\n </AlertDialogAction>\r\n </AlertDialogFooter>\r\n </AlertDialogPopup>\r\n </AlertDialog>\r\n );\r\n}\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$3}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$3}from'./chunk-FIDOWSDH.js';import {a as a$1,b,c}from'./chunk-NGSCUYDU.js';import {b as b$1}from'./chunk-DQGZIFNP.js';import {a as a$2}from'./chunk-T7HRX3EC.js';import {b as b$2,e}from'./chunk-JLZNZFOO.js';import*as a from'react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {format}from'date-fns';import {ChevronDown}from'lucide-react';import'react-day-picker';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx}from'react/jsx-runtime';function Z({className:P,value:M,onValueChange:i,defaultValue:N,required:d,disabled:p,placeholder:k="Pick dates",disabledDates:w,dateFormat:j="LLL dd, y",chipDateFormat:S="d MMM",maxVisible:l,...B}){let R=a.useCallback(e=>{d?e?.length&&i?.(e):i?.(e);},[i,d]),[t,u]=useControlledState({value:M,defaultValue:N,onChange:R}),[z,F]=a.useState(t?.[0]||new Date),[O,T]=a.useState(false),s=!!t?.length,m=a.useMemo(()=>t?[...t].sort((e,n)=>e.getTime()-n.getTime()):[],[t]),V=a.useCallback(e=>{let n=t?.filter(L=>L.getTime()!==e.getTime());d&&!n?.length||u(n);},[t,u,d]),I=l!==void 0?m.slice(0,l):m,b$3=l!==void 0?m.length-l:0;return jsxs("div",{className:"flex flex-col gap-2 w-full",children:[jsxs(a$1,{open:p?false:O,onOpenChange:T,children:[jsx(b,{className:"w-full",render:jsxs(b$1,{className:cn("group h-9 w-full justify-between rounded-xp-card-base border px-3 text-body-medium-3 transition-colors","border-border-primary bg-bg-primary text-text-secondary hover:bg-bg-primary-hover",s&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary","disabled:pointer-events-none disabled:opacity-50",P),variant:null,size:null,disabled:p,children:[jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[jsx(a$2,{className:cn("size-4 shrink-0",s?"text-fg-brand-primary":"text-fg-quaternary")}),jsx("span",{className:"truncate",children:s?`${t.length} ${t.length===1?"date":"dates"} selected`:k})]}),jsx(ChevronDown,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180",s?"text-fg-brand-primary":"text-fg-quaternary")})]})}),jsx(c,{className:"w-auto border-0 rounded-[20px] p-xp-none bg-transparent",style:{background:"linear-gradient(180deg, rgba(46, 51, 90, 0) 0%, rgba(28, 27, 51, 0.04) 100%), radial-gradient(146.13% 118.42% at 50% -15.5%, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0) 99.59%)",backdropFilter:"blur(20px)",boxShadow:"0px 30px 60px 0px #0000001A"},children:jsx(a$3,{autoFocus:true,disabled:w,mode:"multiple",month:z,selected:t,onMonthChange:F,onSelect:e=>{d&&!e?.length||u(e);},...B})})]}),s&&jsxs("div",{className:"flex flex-wrap gap-2",children:[I.map(e$1=>jsxs(b$2,{color:"brand",size:"lg",className:"ring-1 ring-border-brand text-body-medium-3",children:[format(e$1,S),!p&&jsx(e,{className:"text-fg-quaternary",onClick:n=>{n.stopPropagation(),V(e$1);}})]},e$1.toISOString())),b$3>0&&jsxs(b$2,{color:"brand",size:"lg",className:"ring-1 ring-border-brand text-body-medium-3",children:["+",b$3]})]})]})}export{Z as a};//# sourceMappingURL=chunk-YHY3VXCO.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-YHY3VXCO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/date-multiple-picker.tsx"],"names":["DateMultiplePicker","className","valueProp","onValueChange","defaultValue","required","disabled","placeholder","disabledDates","dateFormat","chipDateFormat","maxVisible","props","handleValueChange","val","value","setValue","useControlledState","currentMonth","setCurrentMonth","isOpen","setIsOpen","hasValue","sortedValue","a","b","handleRemoveDate","dateToRemove","newValue","d","visibleChips","overflowCount","jsxs","Popover","jsx","PopoverTrigger","Button","cn","calendar_icon_default","ChevronDown","PopoverPopup","Calendar","Badge","format","BadgeButton","e"],"mappings":"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","file":"chunk-XIZN73T3.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { format } from \"date-fns\"\r\nimport { ChevronDown } from \"lucide-react\"\r\nimport { type Matcher } from \"react-day-picker\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nimport { CalendarIcon } from \"../icons\"\r\nimport { Button } from \"./button\"\r\nimport { Calendar, type CalendarProps } from \"./calendar\"\r\nimport { Popover, PopoverPopup, PopoverTrigger } from \"./popover\"\r\nimport { Badge, BadgeButton } from \"./badge\"\r\n\r\nexport type DateMultiplePickerProps = {\r\n className?: string\r\n value?: Date[]\r\n defaultValue?: Date[]\r\n required?: boolean\r\n disabled?: boolean\r\n placeholder?: string\r\n disabledDates?: Matcher | Matcher[] | undefined\r\n dateFormat?: string\r\n chipDateFormat?: string\r\n /** Maximum number of chips to show outside before collapsing the rest into a \"+N\" chip. */\r\n maxVisible?: number\r\n} & ({\r\n required: true\r\n onValueChange?: (value: Date[]) => void\r\n} | {\r\n required?: false\r\n onValueChange?: (value: Date[] | undefined) => void\r\n}) & Omit<CalendarProps, \"mode\" | \"selected\" | \"onSelect\" | \"month\" | \"onMonthChange\">\r\n\r\nfunction DateMultiplePicker({\r\n className,\r\n value: valueProp,\r\n onValueChange,\r\n defaultValue,\r\n required,\r\n disabled,\r\n placeholder = \"Pick dates\",\r\n disabledDates,\r\n dateFormat = \"LLL dd, y\",\r\n chipDateFormat = \"d MMM\",\r\n maxVisible,\r\n ...props\r\n}: DateMultiplePickerProps) {\r\n const handleValueChange = React.useCallback(\r\n (val: Date[] | undefined) => {\r\n if (required) {\r\n if (val?.length) onValueChange?.(val)\r\n } else {\r\n onValueChange?.(val)\r\n }\r\n },\r\n [onValueChange, required],\r\n )\r\n\r\n const [value, setValue] = useControlledState<Date[] | undefined>({\r\n value: valueProp,\r\n defaultValue,\r\n onChange: handleValueChange,\r\n })\r\n\r\n const [currentMonth, setCurrentMonth] = React.useState<Date | undefined>(value?.[0] || new Date())\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n\r\n const hasValue = !!value?.length\r\n\r\n const sortedValue = React.useMemo(() => {\r\n if (!value) return []\r\n return [...value].sort((a, b) => a.getTime() - b.getTime())\r\n }, [value])\r\n\r\n const handleRemoveDate = React.useCallback(\r\n (dateToRemove: Date) => {\r\n const newValue = value?.filter((d) => d.getTime() !== dateToRemove.getTime())\r\n if (required && !newValue?.length) return\r\n setValue(newValue)\r\n },\r\n [value, setValue, required],\r\n )\r\n\r\n const visibleChips = maxVisible !== undefined ? sortedValue.slice(0, maxVisible) : sortedValue\r\n const overflowCount = maxVisible !== undefined ? sortedValue.length - maxVisible : 0\r\n\r\n return (\r\n <div className=\"flex flex-col gap-2 w-full\">\r\n <Popover open={disabled ? false : isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n className=\"w-full\"\r\n render={\r\n <Button\r\n className={cn(\r\n \"group h-9 w-full justify-between rounded-xp-card-base border px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary bg-bg-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue &&\r\n \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n className,\r\n )}\r\n variant={null}\r\n size={null}\r\n disabled={disabled}\r\n >\r\n <span className=\"flex min-w-0 items-center gap-2\">\r\n <CalendarIcon\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n <span className=\"truncate\">\r\n {hasValue\r\n ? `${value.length} ${value.length === 1 ? \"date\" : \"dates\"} selected`\r\n : placeholder}\r\n </span>\r\n </span>\r\n <ChevronDown\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n </Button>\r\n }\r\n />\r\n <PopoverPopup\r\n className=\"w-auto border-0 rounded-[20px] p-xp-none bg-transparent\"\r\n style={{\r\n background:\r\n \"linear-gradient(180deg, rgba(46, 51, 90, 0) 0%, rgba(28, 27, 51, 0.04) 100%), radial-gradient(146.13% 118.42% at 50% -15.5%, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0) 99.59%)\",\r\n backdropFilter: \"blur(20px)\",\r\n boxShadow: \"0px 30px 60px 0px #0000001A\",\r\n }}\r\n >\r\n <Calendar\r\n autoFocus\r\n disabled={disabledDates}\r\n mode=\"multiple\"\r\n month={currentMonth}\r\n selected={value}\r\n onMonthChange={setCurrentMonth}\r\n onSelect={(val) => {\r\n if (required && !val?.length) return\r\n setValue(val)\r\n }}\r\n {...props}\r\n />\r\n </PopoverPopup>\r\n </Popover>\r\n\r\n {hasValue && (\r\n <div className=\"flex flex-wrap gap-2\">\r\n {visibleChips.map((d) => (\r\n <Badge\r\n key={d.toISOString()}\r\n color=\"brand\"\r\n size=\"lg\"\r\n className=\"ring-1 ring-border-brand text-body-medium-3\"\r\n >\r\n {format(d, chipDateFormat)}\r\n {!disabled && (\r\n <BadgeButton\r\n className=\"text-fg-quaternary\"\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n handleRemoveDate(d)\r\n }}\r\n />\r\n )}\r\n </Badge>\r\n ))}\r\n {overflowCount > 0 && (\r\n <Badge\r\n color=\"brand\"\r\n size=\"lg\"\r\n className=\"ring-1 ring-border-brand text-body-medium-3\"\r\n >\r\n +{overflowCount}\r\n </Badge>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport { DateMultiplePicker }"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/date-multiple-picker.tsx"],"names":["DateMultiplePicker","className","valueProp","onValueChange","defaultValue","required","disabled","placeholder","disabledDates","dateFormat","chipDateFormat","maxVisible","props","handleValueChange","val","value","setValue","useControlledState","currentMonth","setCurrentMonth","isOpen","setIsOpen","hasValue","sortedValue","a","b","handleRemoveDate","dateToRemove","newValue","d","visibleChips","overflowCount","jsxs","Popover","jsx","PopoverTrigger","Button","cn","calendar_icon_default","ChevronDown","PopoverPopup","Calendar","Badge","format","BadgeButton","e"],"mappings":"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","file":"chunk-YHY3VXCO.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { format } from \"date-fns\"\r\nimport { ChevronDown } from \"lucide-react\"\r\nimport { type Matcher } from \"react-day-picker\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nimport { CalendarIcon } from \"../icons\"\r\nimport { Button } from \"./button\"\r\nimport { Calendar, type CalendarProps } from \"./calendar\"\r\nimport { Popover, PopoverPopup, PopoverTrigger } from \"./popover\"\r\nimport { Badge, BadgeButton } from \"./badge\"\r\n\r\nexport type DateMultiplePickerProps = {\r\n className?: string\r\n value?: Date[]\r\n defaultValue?: Date[]\r\n required?: boolean\r\n disabled?: boolean\r\n placeholder?: string\r\n disabledDates?: Matcher | Matcher[] | undefined\r\n dateFormat?: string\r\n chipDateFormat?: string\r\n /** Maximum number of chips to show outside before collapsing the rest into a \"+N\" chip. */\r\n maxVisible?: number\r\n} & ({\r\n required: true\r\n onValueChange?: (value: Date[]) => void\r\n} | {\r\n required?: false\r\n onValueChange?: (value: Date[] | undefined) => void\r\n}) & Omit<CalendarProps, \"mode\" | \"selected\" | \"onSelect\" | \"month\" | \"onMonthChange\">\r\n\r\nfunction DateMultiplePicker({\r\n className,\r\n value: valueProp,\r\n onValueChange,\r\n defaultValue,\r\n required,\r\n disabled,\r\n placeholder = \"Pick dates\",\r\n disabledDates,\r\n dateFormat = \"LLL dd, y\",\r\n chipDateFormat = \"d MMM\",\r\n maxVisible,\r\n ...props\r\n}: DateMultiplePickerProps) {\r\n const handleValueChange = React.useCallback(\r\n (val: Date[] | undefined) => {\r\n if (required) {\r\n if (val?.length) onValueChange?.(val)\r\n } else {\r\n onValueChange?.(val)\r\n }\r\n },\r\n [onValueChange, required],\r\n )\r\n\r\n const [value, setValue] = useControlledState<Date[] | undefined>({\r\n value: valueProp,\r\n defaultValue,\r\n onChange: handleValueChange,\r\n })\r\n\r\n const [currentMonth, setCurrentMonth] = React.useState<Date | undefined>(value?.[0] || new Date())\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n\r\n const hasValue = !!value?.length\r\n\r\n const sortedValue = React.useMemo(() => {\r\n if (!value) return []\r\n return [...value].sort((a, b) => a.getTime() - b.getTime())\r\n }, [value])\r\n\r\n const handleRemoveDate = React.useCallback(\r\n (dateToRemove: Date) => {\r\n const newValue = value?.filter((d) => d.getTime() !== dateToRemove.getTime())\r\n if (required && !newValue?.length) return\r\n setValue(newValue)\r\n },\r\n [value, setValue, required],\r\n )\r\n\r\n const visibleChips = maxVisible !== undefined ? sortedValue.slice(0, maxVisible) : sortedValue\r\n const overflowCount = maxVisible !== undefined ? sortedValue.length - maxVisible : 0\r\n\r\n return (\r\n <div className=\"flex flex-col gap-2 w-full\">\r\n <Popover open={disabled ? false : isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n className=\"w-full\"\r\n render={\r\n <Button\r\n className={cn(\r\n \"group h-9 w-full justify-between rounded-xp-card-base border px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary bg-bg-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue &&\r\n \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n className,\r\n )}\r\n variant={null}\r\n size={null}\r\n disabled={disabled}\r\n >\r\n <span className=\"flex min-w-0 items-center gap-2\">\r\n <CalendarIcon\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n <span className=\"truncate\">\r\n {hasValue\r\n ? `${value.length} ${value.length === 1 ? \"date\" : \"dates\"} selected`\r\n : placeholder}\r\n </span>\r\n </span>\r\n <ChevronDown\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n </Button>\r\n }\r\n />\r\n <PopoverPopup\r\n className=\"w-auto border-0 rounded-[20px] p-xp-none bg-transparent\"\r\n style={{\r\n background:\r\n \"linear-gradient(180deg, rgba(46, 51, 90, 0) 0%, rgba(28, 27, 51, 0.04) 100%), radial-gradient(146.13% 118.42% at 50% -15.5%, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0) 99.59%)\",\r\n backdropFilter: \"blur(20px)\",\r\n boxShadow: \"0px 30px 60px 0px #0000001A\",\r\n }}\r\n >\r\n <Calendar\r\n autoFocus\r\n disabled={disabledDates}\r\n mode=\"multiple\"\r\n month={currentMonth}\r\n selected={value}\r\n onMonthChange={setCurrentMonth}\r\n onSelect={(val) => {\r\n if (required && !val?.length) return\r\n setValue(val)\r\n }}\r\n {...props}\r\n />\r\n </PopoverPopup>\r\n </Popover>\r\n\r\n {hasValue && (\r\n <div className=\"flex flex-wrap gap-2\">\r\n {visibleChips.map((d) => (\r\n <Badge\r\n key={d.toISOString()}\r\n color=\"brand\"\r\n size=\"lg\"\r\n className=\"ring-1 ring-border-brand text-body-medium-3\"\r\n >\r\n {format(d, chipDateFormat)}\r\n {!disabled && (\r\n <BadgeButton\r\n className=\"text-fg-quaternary\"\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n handleRemoveDate(d)\r\n }}\r\n />\r\n )}\r\n </Badge>\r\n ))}\r\n {overflowCount > 0 && (\r\n <Badge\r\n color=\"brand\"\r\n size=\"lg\"\r\n className=\"ring-1 ring-border-brand text-body-medium-3\"\r\n >\r\n +{overflowCount}\r\n </Badge>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport { DateMultiplePicker }"]}
|