@solace-health/ui 0.10.647 → 0.10.648
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-JYIWRQFD.js +2 -0
- package/dist/chunk-JYIWRQFD.js.map +1 -0
- package/dist/chunk-URSE5UFH.cjs +2 -0
- package/dist/chunk-URSE5UFH.cjs.map +1 -0
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/v2/date-picker/date-picker-input.cjs +1 -1
- package/dist/v2/date-picker/date-picker-input.js +1 -1
- package/dist/v2/date-picker/date-picker.cjs +1 -1
- package/dist/v2/date-picker/date-picker.js +1 -1
- package/dist/v2/image-preview/image-preview.cjs +1 -1
- package/dist/v2/image-preview/image-preview.js +1 -1
- package/dist/v2/index.cjs +1 -1
- package/dist/v2/index.js +1 -1
- package/dist/v2/time-select/time-select.cjs +1 -1
- package/dist/v2/time-select/time-select.d.ts +2 -1
- package/dist/v2/time-select/time-select.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-LJGFQQY7.js +0 -2
- package/dist/chunk-LJGFQQY7.js.map +0 -1
- package/dist/chunk-RVGOIWGI.cjs +0 -2
- package/dist/chunk-RVGOIWGI.cjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a as a$4,d,c as c$1,g,i}from'./chunk-AEG63JU5.js';import {a as a$3}from'./chunk-WEDRHQPW.js';import {a as a$2,b,c}from'./chunk-QXJK4OO3.js';import {b as b$2}from'./chunk-BKEHRG63.js';import {b as b$1}from'./chunk-YCZSXQP4.js';import {a as a$1,b as b$3}from'./chunk-6LESB5UU.js';import {a}from'./chunk-YTIIAU4W.js';import {useState,useRef,useEffect,useMemo}from'react';import {LuCalendar,LuZoomOut,LuZoomIn,LuRefreshCcw}from'react-icons/lu';import N from'dayjs';import {jsxs,jsx}from'react/jsx-runtime';import ae from'react-easy-crop';import {DateTime,Duration}from'luxon';function Q(r){let o=r.replace(/\D/g,"").slice(0,8);return o.length<=2?o:o.length<=4?`${o.slice(0,2)}/${o.slice(2)}`:`${o.slice(0,2)}/${o.slice(2,4)}/${o.slice(4)}`}function W(r){if(r.length!==10)return;let o=r.split("/");if(o.length!==3||o[2].length!==4)return;let t=parseInt(o[0],10),n=parseInt(o[1],10),e=parseInt(o[2],10);if(Number.isNaN(t)||Number.isNaN(n)||Number.isNaN(e))return;let l=new Date(e,t-1,n);if(!(l.getFullYear()!==e||l.getMonth()!==t-1||l.getDate()!==n))return l}function ee({className:r,wrapperClassName:o,value:t,onChange:n,disabled:e=false,calendarProps:l,placeholder:f="MM/DD/YYYY",variant:g}){let[u,p]=useState(false),[v,b$3]=useState(t),[i,x]=useState(t?N(t).format("MM/DD/YYYY"):""),d=useRef(t?N(t).format("MM/DD/YYYY"):"");useEffect(()=>{let a=t?N(t).format("MM/DD/YYYY"):"";a!==d.current&&(d.current=a,x(a),t&&b$3(t));},[t]);let m=a=>{let C=Q(a.target.value);x(C);let z=W(C);z?(d.current=C,n?.(z)):C===""&&(d.current="",n?.(void 0));},w=a=>{a.key==="ArrowDown"&&(a.preventDefault(),p(true)),!/[0-9/]/.test(a.key)&&!["Backspace","Delete","ArrowLeft","ArrowRight","ArrowUp","Tab"].includes(a.key)&&!a.metaKey&&!a.ctrlKey&&a.preventDefault();};return jsxs("div",{className:a("relative w-full",o),children:[jsx("input",{type:"text","data-slot":"input",className:a(a$1({variant:g}),"pr-10",r),value:i,placeholder:f,onChange:m,onKeyDown:w,disabled:e}),jsxs(a$2,{open:!e&&u,onOpenChange:p,children:[jsx(b,{asChild:true,children:jsx(b$1,{variant:"ghost-icon",size:"sm",className:"absolute top-1/2 right-1 -translate-y-1/2",disabled:e,"aria-label":"Select date",type:"button",children:jsx(LuCalendar,{})})}),jsx(c,{className:"w-auto overflow-hidden p-0",align:"end",sideOffset:10,children:jsx(b$2,{mode:"single",selected:t,month:v,onMonthChange:b$3,onSelect:a=>{let C=a?N(a).format("MM/DD/YYYY"):"";d.current=C,x(C),n?.(a),p(false);},...l})})]})]})}var ie=({alt:r,className:o="",containerClassName:t="",imagePreview:n=void 0,cropper:e=void 0})=>{let[l,f]=useState(false),g=!n||!l,u=!!e;return jsxs("div",{className:a("flex max-w-[386px] flex-col",o),children:[jsxs("div",{className:a("relative h-60 rounded-md border",t),children:[n&&u?jsx(ae,{image:n,crop:e.crop,zoom:e.zoom,aspect:e.aspect,objectFit:"contain",onCropChange:e.setCrop,onZoomChange:e.setZoom,onCropComplete:e.onCropComplete,onMediaLoaded:()=>f(true),showGrid:false}):n&&jsx("img",{alt:r,className:`m-auto h-full w-full object-contain transition-opacity duration-300 ${l?"opacity-100":"opacity-0"}`,src:n,onLoad:()=>f(true),draggable:false}),g&&jsx("div",{"aria-label":n?"Loading image":"Awaiting image",className:"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r"})]}),!g&&u&&jsxs("div",{className:"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4",children:[jsxs("div",{className:"flex w-full items-center gap-3",children:[jsx(b$1,{"aria-label":"zoom out",onClick:()=>e.setZoom(Math.max(e.zoom-.1,1)),className:"h-8",variant:"ghost-icon",children:jsx(LuZoomOut,{})}),jsx(a$3,{value:[e.zoom],min:1,max:3,step:.01,onValueChange:p=>e.setZoom(p[0]),className:"w-full sm:flex-50",classNames:{thumb:"border-2 border-green-800",range:"bg-green-900"}}),jsx(b$1,{"aria-label":"zoom in",onClick:()=>e.setZoom(Math.min(e.zoom+.1,3)),variant:"ghost-icon",className:"h-8",children:jsx(LuZoomIn,{})})]}),jsxs(b$1,{onClick:e.reset,variant:"ghost",className:"h-8 p-2",children:[jsx(LuRefreshCcw,{}),"Reset"]})]})]})};var U="00:00",$="24:00",Z=r=>DateTime.fromFormat(r,"HH:mm").isValid,K=({startTime:r=U,endTime:o=$,interval:t=30,onChange:n=void 0,className:e="",placeholder:l="Select one",size:f="default",portal:g$1=true,...u})=>{Z(r)||(console.error(`Invalid startTime: ${r}`),r=U),Z(o)||(console.error(`Invalid endTime: ${o}`),o=$);let p=useMemo(()=>{let i=DateTime.fromFormat(o,"HH:mm"),x=Duration.fromObject({minutes:t}),d=[],m=DateTime.fromFormat(r,"HH:mm");for(;m<=i;){let w=m.toFormat("HH:mm");w==="00:00"&&m.equals(i)&&(w="24:00"),d.push({label:m.toFormat("h:mm a"),value:{hour:m.toFormat("HH"),min:m.toFormat("mm"),raw:w,formatted:m.toFormat("h:mm a")}}),m=m.plus(x);}return d},[r,o,t]),v=p.map(i=>({label:i.label,value:i.value.raw}));return jsxs(a$4,{onValueChange:i=>{let x=p.find(d=>d.value.raw===i);x&&n?.(x);},...u,children:[jsx(d,{className:a("max-w-[240px] md:w-[150px]",e),size:f,children:jsx(c$1,{placeholder:l})}),jsx(g,{position:"popper",className:"max-h-90",portal:g$1,children:v.map(i$1=>jsx(i,{className:"h-10",value:i$1.value,children:i$1.label},i$1.value))})]})},Ye=K;function me({className:r="",wrapperClassName:o="",value:t=void 0,onChange:n=void 0,disabled:e=false,calendarProps:l=void 0,placeholder:f="Pick a date",inputProps:g=void 0,showCalendarIcon:u=true}){let[p,v]=useState(false),b$1=i=>{n?.(i),v(false);};return jsxs(a$2,{open:!e&&p,onOpenChange:v,children:[jsxs(b,{className:a("focus-visible:ring-ring/50 hover:enabled:border-dark-green focus:enabled:border-dark-green focus-visible:border-dark-green relative flex w-full items-center rounded-md transition-all outline-none focus-within:shadow focus-within:shadow-green-300 focus-visible:ring-[3px] focus:enabled:shadow-green-300",o),children:[jsx(b$3,{className:a(u&&"pl-10",p?"border-dark-green":"",r),value:t?N(t).format("MM/DD/YYYY"):"",placeholder:f,readOnly:true,disabled:e,...g}),u&&jsx("div",{className:a("absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2",e?"text-gray-400":"cursor-pointer text-black"),children:jsx(LuCalendar,{size:16})})]}),jsx(c,{className:"w-auto overflow-hidden p-0",align:"start",children:jsx(b$2,{mode:"single",selected:t?N(t).toDate():void 0,onSelect:b$1,...l})})]})}export{me as a,ee as b,ie as c,K as d,Ye as e};//# sourceMappingURL=chunk-JYIWRQFD.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-JYIWRQFD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/v2/date-picker/date-picker-input.tsx","../src/v2/image-preview/image-preview.tsx","../src/v2/time-select/time-select.tsx","../src/v2/date-picker/date-picker.tsx"],"names":["maskDate","value","digits","parseDate","parts","month","day","year","date","DatePickerInput","className","wrapperClassName","onChange","disabled","calendarProps","placeholder","variant","open","setOpen","useState","setMonth","inputValue","setInputValue","dayjs","lastSyncedRef","useRef","useEffect","formatted","handleInputChange","e","masked","parsed","handleKeyDown","jsxs","cn","jsx","inputVariants","Popover","PopoverTrigger","Button","LuCalendar","PopoverContent","Calendar","d","ImagePreview","alt","containerClassName","imagePreview","cropper","loaded","setLoaded","showLoader","enableCrop","Cropper","LuZoomOut","Slider","v","LuZoomIn","LuRefreshCcw","START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","size","portal","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","options","Select","SelectTrigger","SelectValue","SelectContent","option","SelectItem","time_select_default","DatePicker","showCalendarIcon","handleSelect","val","Input"],"mappings":"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","file":"chunk-JYIWRQFD.js","sourcesContent":["import * as React from 'react';\nimport { ComponentProps, useEffect, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport { Calendar, Button, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '../input/input';\n\nfunction maskDate(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 8);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;\n return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;\n}\n\nfunction parseDate(value: string): Date | undefined {\n if (value.length !== 10) return undefined;\n const parts = value.split('/');\n if (parts.length !== 3 || parts[2].length !== 4) return undefined;\n const month = parseInt(parts[0], 10);\n const day = parseInt(parts[1], 10);\n const year = parseInt(parts[2], 10);\n if (Number.isNaN(month) || Number.isNaN(day) || Number.isNaN(year)) return undefined;\n const date = new Date(year, month - 1, day);\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined;\n }\n return date;\n}\n\nexport type DatePickerInputProps = {\n className?: string;\n wrapperClassName?: string;\n value?: Date;\n onChange?: (value: Date | undefined) => void;\n disabled?: boolean;\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n placeholder?: string;\n variant?: 'default' | 'invalid';\n};\n\nexport function DatePickerInput({\n className,\n wrapperClassName,\n value,\n onChange,\n disabled = false,\n calendarProps,\n placeholder = 'MM/DD/YYYY',\n variant,\n}: DatePickerInputProps) {\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date | undefined>(value);\n const [inputValue, setInputValue] = useState<string>(\n value ? dayjs(value).format('MM/DD/YYYY') : '',\n );\n // Track the last value we synced from props to avoid overwriting partial user input\n const lastSyncedRef = useRef(value ? dayjs(value).format('MM/DD/YYYY') : '');\n\n useEffect(() => {\n const formatted = value ? dayjs(value).format('MM/DD/YYYY') : '';\n if (formatted !== lastSyncedRef.current) {\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n if (value) setMonth(value);\n }\n }, [value]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const masked = maskDate(e.target.value);\n setInputValue(masked);\n const parsed = parseDate(masked);\n if (parsed) {\n lastSyncedRef.current = masked;\n onChange?.(parsed);\n } else if (masked === '') {\n lastSyncedRef.current = '';\n onChange?.(undefined);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setOpen(true);\n }\n if (\n !/[0-9/]/.test(e.key) &&\n !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'Tab'].includes(e.key) &&\n !e.metaKey &&\n !e.ctrlKey\n ) {\n e.preventDefault();\n }\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n <input\n type=\"text\"\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), 'pr-10', className)}\n value={inputValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost-icon\"\n size=\"sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2\"\n disabled={disabled}\n aria-label=\"Select date\"\n type=\"button\"\n >\n <LuCalendar />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n <Calendar\n mode=\"single\"\n selected={value}\n month={month}\n onMonthChange={setMonth}\n onSelect={(d) => {\n const formatted = d ? dayjs(d).format('MM/DD/YYYY') : '';\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n onChange?.(d);\n setOpen(false);\n }}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { LuRefreshCcw, LuZoomIn, LuZoomOut } from 'react-icons/lu';\nimport Cropper from 'react-easy-crop';\nimport { Button, Slider } from '../index';\nimport type { UseImageCropper } from './useImageCropper';\nimport { cn } from '@/lib/utils';\n\nexport type ImagePreviewProps = {\n alt: string;\n className?: string;\n containerClassName?: string;\n imagePreview?: string; // optional so we can show skeleton while awaiting URL\n cropper?: UseImageCropper; // when provided, show cropping UI\n};\n\nexport const ImagePreview = ({\n alt,\n className = '',\n containerClassName = '',\n imagePreview = undefined,\n cropper = undefined,\n}: ImagePreviewProps) => {\n const [loaded, setLoaded] = useState(false);\n const showLoader = !imagePreview || !loaded;\n const enableCrop = !!cropper;\n\n return (\n <div className={cn(`flex max-w-[386px] flex-col`, className)}>\n <div className={cn('relative h-60 rounded-md border', containerClassName)}>\n {imagePreview && enableCrop ? (\n <Cropper\n image={imagePreview}\n crop={cropper.crop}\n zoom={cropper.zoom}\n aspect={cropper.aspect}\n objectFit=\"contain\"\n onCropChange={cropper.setCrop}\n onZoomChange={cropper.setZoom}\n onCropComplete={cropper.onCropComplete}\n onMediaLoaded={() => setLoaded(true)}\n showGrid={false}\n />\n ) : (\n imagePreview && (\n <img\n alt={alt}\n className={`m-auto h-full w-full object-contain transition-opacity duration-300 ${loaded ? 'opacity-100' : 'opacity-0'}`}\n src={imagePreview}\n onLoad={() => setLoaded(true)}\n draggable={false}\n />\n )\n )}\n\n {showLoader && (\n <div\n aria-label={imagePreview ? 'Loading image' : 'Awaiting image'}\n className=\"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r\"\n />\n )}\n </div>\n\n {!showLoader && enableCrop && (\n <div className=\"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4\">\n <div className=\"flex w-full items-center gap-3\">\n <Button\n aria-label=\"zoom out\"\n onClick={() => cropper.setZoom(Math.max(cropper.zoom - 0.1, 1))}\n className=\"h-8\"\n variant=\"ghost-icon\"\n >\n <LuZoomOut />\n </Button>\n\n <Slider\n value={[cropper.zoom]}\n min={1}\n max={3}\n step={0.01}\n onValueChange={(v: number[]) => cropper.setZoom(v[0])}\n className=\"w-full sm:flex-50\"\n classNames={{ thumb: 'border-2 border-green-800', range: 'bg-green-900' }}\n />\n\n <Button\n aria-label=\"zoom in\"\n onClick={() => cropper.setZoom(Math.min(cropper.zoom + 0.1, 3))}\n variant=\"ghost-icon\"\n className=\"h-8\"\n >\n <LuZoomIn />\n </Button>\n </div>\n\n <Button onClick={cropper.reset} variant=\"ghost\" className=\"h-8 p-2\">\n <LuRefreshCcw />\n Reset\n </Button>\n </div>\n )}\n </div>\n );\n};\n","import { DateTime, Duration } from 'luxon';\nimport { useMemo } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/v2';\nimport { cn } from '@/lib/utils';\n\nexport type Interval = {\n label: string;\n value: {\n hour: string;\n min: string;\n raw: string;\n formatted: string;\n };\n};\n\ntype Props = {\n startTime?: string;\n endTime?: string;\n interval?: number;\n onChange?: (e: Interval) => void;\n className?: string;\n placeholder?: string;\n size?: 'default' | 'sm';\n portal?: boolean;\n [inputProps: string]: unknown;\n};\n\nconst START_TIME_DEFAULT = '00:00';\nconst END_TIME_DEFAULT = '24:00';\n\nconst isValidTime = (time: string) => {\n const dt = DateTime.fromFormat(time, 'HH:mm');\n return dt.isValid;\n};\n\nexport const TimeSelect = ({\n startTime = START_TIME_DEFAULT,\n endTime = END_TIME_DEFAULT,\n interval = 30,\n onChange = undefined,\n className = '',\n placeholder = 'Select one',\n size = 'default',\n portal = true,\n ...inputProps\n}: Props) => {\n if (!isValidTime(startTime)) {\n console.error(`Invalid startTime: ${startTime}`);\n // eslint-disable-next-line no-param-reassign\n startTime = START_TIME_DEFAULT;\n }\n if (!isValidTime(endTime)) {\n console.error(`Invalid endTime: ${endTime}`);\n // eslint-disable-next-line no-param-reassign\n endTime = END_TIME_DEFAULT;\n }\n\n const intervals = useMemo((): Interval[] => {\n const dtEnd = DateTime.fromFormat(endTime, 'HH:mm');\n const durationInterval = Duration.fromObject({ minutes: interval });\n const res = [];\n let i = DateTime.fromFormat(startTime, 'HH:mm');\n while (i <= dtEnd) {\n let raw = i.toFormat('HH:mm');\n // Avoid duplicate keys for \"00:00\" and \"00:00\" (end of day)\n if (raw === '00:00' && i.equals(dtEnd)) raw = '24:00';\n\n res.push({\n label: i.toFormat('h:mm a'),\n value: {\n hour: i.toFormat('HH'),\n min: i.toFormat('mm'),\n raw,\n formatted: i.toFormat('h:mm a'),\n },\n });\n i = i.plus(durationInterval);\n }\n\n return res;\n }, [startTime, endTime, interval]);\n\n const options = intervals.map((time) => ({\n label: time.label,\n value: time.value.raw,\n }));\n\n const handleOnSelect = (e: unknown) => {\n const interval = intervals.find((time) => time.value.raw === e);\n\n if (!interval) return;\n\n onChange?.(interval);\n };\n\n return (\n <Select onValueChange={handleOnSelect} {...inputProps}>\n <SelectTrigger className={cn('max-w-[240px] md:w-[150px]', className)} size={size}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {options.map((option) => (\n // Note that labels and values here may appear to be duplicates\n // For example, \"00:00\" and \"24:00\" will both have the same value \"00:00\"\n <SelectItem className=\"h-10\" key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n","import * as React from 'react';\nimport { ComponentProps, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport { Calendar, Input, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { InputProps } from '@/v2/input/input';\n\nexport type DatePickerProps = {\n className?: string;\n wrapperClassName?: string;\n value?: Date;\n onChange?: (value: Date | undefined) => void;\n disabled?: boolean;\n // NOTE: Disallow changing this to a range-picker by forcing mode to \"single\" and using value instead of selected\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n placeholder?: string;\n inputProps?: InputProps;\n showCalendarIcon?: boolean;\n};\n\nexport function DatePicker({\n className = '',\n wrapperClassName = '',\n value = undefined,\n onChange = undefined,\n disabled = false,\n calendarProps = undefined,\n placeholder = 'Pick a date',\n inputProps = undefined,\n showCalendarIcon = true,\n}: DatePickerProps & ComponentProps<typeof Calendar>) {\n const [open, setOpen] = useState<boolean>(false);\n\n const handleSelect = (val: Date | undefined) => {\n onChange?.(val);\n setOpen(false);\n };\n\n return (\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger\n className={cn(\n 'focus-visible:ring-ring/50 hover:enabled:border-dark-green focus:enabled:border-dark-green focus-visible:border-dark-green relative flex w-full items-center rounded-md transition-all outline-none focus-within:shadow focus-within:shadow-green-300 focus-visible:ring-[3px] focus:enabled:shadow-green-300',\n wrapperClassName,\n )}\n >\n <Input\n className={cn(showCalendarIcon && 'pl-10', open ? 'border-dark-green' : '', className)}\n value={value ? dayjs(value).format('MM/DD/YYYY') : ''}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n {...inputProps}\n />\n {showCalendarIcon && (\n <div\n className={cn(\n 'absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2',\n disabled ? 'text-gray-400' : 'cursor-pointer text-black',\n )}\n >\n <LuCalendar size={16} />\n </div>\n )}\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={value ? dayjs(value).toDate() : undefined}\n onSelect={handleSelect}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n );\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkJ3F5C3FQ_cjs=require('./chunk-J3F5C3FQ.cjs'),chunkQAGOBPAT_cjs=require('./chunk-QAGOBPAT.cjs'),chunkSV7GB6CH_cjs=require('./chunk-SV7GB6CH.cjs'),chunk6LFWXW2S_cjs=require('./chunk-6LFWXW2S.cjs'),chunk25P3XDJA_cjs=require('./chunk-25P3XDJA.cjs'),chunkOUGYUQUB_cjs=require('./chunk-OUGYUQUB.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),react=require('react'),lu=require('react-icons/lu'),N=require('dayjs'),jsxRuntime=require('react/jsx-runtime'),ae=require('react-easy-crop'),luxon=require('luxon');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var N__default=/*#__PURE__*/_interopDefault(N);var ae__default=/*#__PURE__*/_interopDefault(ae);function Q(r){let o=r.replace(/\D/g,"").slice(0,8);return o.length<=2?o:o.length<=4?`${o.slice(0,2)}/${o.slice(2)}`:`${o.slice(0,2)}/${o.slice(2,4)}/${o.slice(4)}`}function W(r){if(r.length!==10)return;let o=r.split("/");if(o.length!==3||o[2].length!==4)return;let t=parseInt(o[0],10),n=parseInt(o[1],10),e=parseInt(o[2],10);if(Number.isNaN(t)||Number.isNaN(n)||Number.isNaN(e))return;let l=new Date(e,t-1,n);if(!(l.getFullYear()!==e||l.getMonth()!==t-1||l.getDate()!==n))return l}function ee({className:r,wrapperClassName:o,value:t,onChange:n,disabled:e=false,calendarProps:l,placeholder:f="MM/DD/YYYY",variant:g}){let[u,p]=react.useState(false),[v,b]=react.useState(t),[i,x]=react.useState(t?N__default.default(t).format("MM/DD/YYYY"):""),d=react.useRef(t?N__default.default(t).format("MM/DD/YYYY"):"");react.useEffect(()=>{let a=t?N__default.default(t).format("MM/DD/YYYY"):"";a!==d.current&&(d.current=a,x(a),t&&b(t));},[t]);let m=a=>{let C=Q(a.target.value);x(C);let z=W(C);z?(d.current=C,n?.(z)):C===""&&(d.current="",n?.(void 0));},w=a=>{a.key==="ArrowDown"&&(a.preventDefault(),p(true)),!/[0-9/]/.test(a.key)&&!["Backspace","Delete","ArrowLeft","ArrowRight","ArrowUp","Tab"].includes(a.key)&&!a.metaKey&&!a.ctrlKey&&a.preventDefault();};return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative w-full",o),children:[jsxRuntime.jsx("input",{type:"text","data-slot":"input",className:chunkQRO22BPZ_cjs.a(chunkOUGYUQUB_cjs.a({variant:g}),"pr-10",r),value:i,placeholder:f,onChange:m,onKeyDown:w,disabled:e}),jsxRuntime.jsxs(chunkSV7GB6CH_cjs.a,{open:!e&&u,onOpenChange:p,children:[jsxRuntime.jsx(chunkSV7GB6CH_cjs.b,{asChild:true,children:jsxRuntime.jsx(chunk25P3XDJA_cjs.b,{variant:"ghost-icon",size:"sm",className:"absolute top-1/2 right-1 -translate-y-1/2",disabled:e,"aria-label":"Select date",type:"button",children:jsxRuntime.jsx(lu.LuCalendar,{})})}),jsxRuntime.jsx(chunkSV7GB6CH_cjs.c,{className:"w-auto overflow-hidden p-0",align:"end",sideOffset:10,children:jsxRuntime.jsx(chunk6LFWXW2S_cjs.b,{mode:"single",selected:t,month:v,onMonthChange:b,onSelect:a=>{let C=a?N__default.default(a).format("MM/DD/YYYY"):"";d.current=C,x(C),n?.(a),p(false);},...l})})]})]})}var ie=({alt:r,className:o="",containerClassName:t="",imagePreview:n=void 0,cropper:e=void 0})=>{let[l,f]=react.useState(false),g=!n||!l,u=!!e;return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("flex max-w-[386px] flex-col",o),children:[jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative h-60 rounded-md border",t),children:[n&&u?jsxRuntime.jsx(ae__default.default,{image:n,crop:e.crop,zoom:e.zoom,aspect:e.aspect,objectFit:"contain",onCropChange:e.setCrop,onZoomChange:e.setZoom,onCropComplete:e.onCropComplete,onMediaLoaded:()=>f(true),showGrid:false}):n&&jsxRuntime.jsx("img",{alt:r,className:`m-auto h-full w-full object-contain transition-opacity duration-300 ${l?"opacity-100":"opacity-0"}`,src:n,onLoad:()=>f(true),draggable:false}),g&&jsxRuntime.jsx("div",{"aria-label":n?"Loading image":"Awaiting image",className:"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r"})]}),!g&&u&&jsxRuntime.jsxs("div",{className:"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center gap-3",children:[jsxRuntime.jsx(chunk25P3XDJA_cjs.b,{"aria-label":"zoom out",onClick:()=>e.setZoom(Math.max(e.zoom-.1,1)),className:"h-8",variant:"ghost-icon",children:jsxRuntime.jsx(lu.LuZoomOut,{})}),jsxRuntime.jsx(chunkQAGOBPAT_cjs.a,{value:[e.zoom],min:1,max:3,step:.01,onValueChange:p=>e.setZoom(p[0]),className:"w-full sm:flex-50",classNames:{thumb:"border-2 border-green-800",range:"bg-green-900"}}),jsxRuntime.jsx(chunk25P3XDJA_cjs.b,{"aria-label":"zoom in",onClick:()=>e.setZoom(Math.min(e.zoom+.1,3)),variant:"ghost-icon",className:"h-8",children:jsxRuntime.jsx(lu.LuZoomIn,{})})]}),jsxRuntime.jsxs(chunk25P3XDJA_cjs.b,{onClick:e.reset,variant:"ghost",className:"h-8 p-2",children:[jsxRuntime.jsx(lu.LuRefreshCcw,{}),"Reset"]})]})]})};var U="00:00",$="24:00",Z=r=>luxon.DateTime.fromFormat(r,"HH:mm").isValid,K=({startTime:r=U,endTime:o=$,interval:t=30,onChange:n=void 0,className:e="",placeholder:l="Select one",size:f="default",portal:g=true,...u})=>{Z(r)||(console.error(`Invalid startTime: ${r}`),r=U),Z(o)||(console.error(`Invalid endTime: ${o}`),o=$);let p=react.useMemo(()=>{let i=luxon.DateTime.fromFormat(o,"HH:mm"),x=luxon.Duration.fromObject({minutes:t}),d=[],m=luxon.DateTime.fromFormat(r,"HH:mm");for(;m<=i;){let w=m.toFormat("HH:mm");w==="00:00"&&m.equals(i)&&(w="24:00"),d.push({label:m.toFormat("h:mm a"),value:{hour:m.toFormat("HH"),min:m.toFormat("mm"),raw:w,formatted:m.toFormat("h:mm a")}}),m=m.plus(x);}return d},[r,o,t]),v=p.map(i=>({label:i.label,value:i.value.raw}));return jsxRuntime.jsxs(chunkJ3F5C3FQ_cjs.a,{onValueChange:i=>{let x=p.find(d=>d.value.raw===i);x&&n?.(x);},...u,children:[jsxRuntime.jsx(chunkJ3F5C3FQ_cjs.d,{className:chunkQRO22BPZ_cjs.a("max-w-[240px] md:w-[150px]",e),size:f,children:jsxRuntime.jsx(chunkJ3F5C3FQ_cjs.c,{placeholder:l})}),jsxRuntime.jsx(chunkJ3F5C3FQ_cjs.g,{position:"popper",className:"max-h-90",portal:g,children:v.map(i=>jsxRuntime.jsx(chunkJ3F5C3FQ_cjs.i,{className:"h-10",value:i.value,children:i.label},i.value))})]})},Ye=K;function me({className:r="",wrapperClassName:o="",value:t=void 0,onChange:n=void 0,disabled:e=false,calendarProps:l=void 0,placeholder:f="Pick a date",inputProps:g=void 0,showCalendarIcon:u=true}){let[p,v]=react.useState(false),b=i=>{n?.(i),v(false);};return jsxRuntime.jsxs(chunkSV7GB6CH_cjs.a,{open:!e&&p,onOpenChange:v,children:[jsxRuntime.jsxs(chunkSV7GB6CH_cjs.b,{className:chunkQRO22BPZ_cjs.a("focus-visible:ring-ring/50 hover:enabled:border-dark-green focus:enabled:border-dark-green focus-visible:border-dark-green relative flex w-full items-center rounded-md transition-all outline-none focus-within:shadow focus-within:shadow-green-300 focus-visible:ring-[3px] focus:enabled:shadow-green-300",o),children:[jsxRuntime.jsx(chunkOUGYUQUB_cjs.b,{className:chunkQRO22BPZ_cjs.a(u&&"pl-10",p?"border-dark-green":"",r),value:t?N__default.default(t).format("MM/DD/YYYY"):"",placeholder:f,readOnly:true,disabled:e,...g}),u&&jsxRuntime.jsx("div",{className:chunkQRO22BPZ_cjs.a("absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2",e?"text-gray-400":"cursor-pointer text-black"),children:jsxRuntime.jsx(lu.LuCalendar,{size:16})})]}),jsxRuntime.jsx(chunkSV7GB6CH_cjs.c,{className:"w-auto overflow-hidden p-0",align:"start",children:jsxRuntime.jsx(chunk6LFWXW2S_cjs.b,{mode:"single",selected:t?N__default.default(t).toDate():void 0,onSelect:b,...l})})]})}exports.a=me;exports.b=ee;exports.c=ie;exports.d=K;exports.e=Ye;//# sourceMappingURL=chunk-URSE5UFH.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-URSE5UFH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/v2/date-picker/date-picker-input.tsx","../src/v2/image-preview/image-preview.tsx","../src/v2/time-select/time-select.tsx","../src/v2/date-picker/date-picker.tsx"],"names":["maskDate","value","digits","parseDate","parts","month","day","year","date","DatePickerInput","className","wrapperClassName","onChange","disabled","calendarProps","placeholder","variant","open","setOpen","useState","setMonth","inputValue","setInputValue","dayjs","lastSyncedRef","useRef","useEffect","formatted","handleInputChange","e","masked","parsed","handleKeyDown","jsxs","cn","jsx","inputVariants","Popover","PopoverTrigger","Button","LuCalendar","PopoverContent","Calendar","d","ImagePreview","alt","containerClassName","imagePreview","cropper","loaded","setLoaded","showLoader","enableCrop","Cropper","LuZoomOut","Slider","v","LuZoomIn","LuRefreshCcw","START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","size","portal","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","options","Select","SelectTrigger","SelectValue","SelectContent","option","SelectItem","time_select_default","DatePicker","showCalendarIcon","handleSelect","val","Input"],"mappings":"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","file":"chunk-URSE5UFH.cjs","sourcesContent":["import * as React from 'react';\nimport { ComponentProps, useEffect, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport { Calendar, Button, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '../input/input';\n\nfunction maskDate(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 8);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;\n return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;\n}\n\nfunction parseDate(value: string): Date | undefined {\n if (value.length !== 10) return undefined;\n const parts = value.split('/');\n if (parts.length !== 3 || parts[2].length !== 4) return undefined;\n const month = parseInt(parts[0], 10);\n const day = parseInt(parts[1], 10);\n const year = parseInt(parts[2], 10);\n if (Number.isNaN(month) || Number.isNaN(day) || Number.isNaN(year)) return undefined;\n const date = new Date(year, month - 1, day);\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined;\n }\n return date;\n}\n\nexport type DatePickerInputProps = {\n className?: string;\n wrapperClassName?: string;\n value?: Date;\n onChange?: (value: Date | undefined) => void;\n disabled?: boolean;\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n placeholder?: string;\n variant?: 'default' | 'invalid';\n};\n\nexport function DatePickerInput({\n className,\n wrapperClassName,\n value,\n onChange,\n disabled = false,\n calendarProps,\n placeholder = 'MM/DD/YYYY',\n variant,\n}: DatePickerInputProps) {\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date | undefined>(value);\n const [inputValue, setInputValue] = useState<string>(\n value ? dayjs(value).format('MM/DD/YYYY') : '',\n );\n // Track the last value we synced from props to avoid overwriting partial user input\n const lastSyncedRef = useRef(value ? dayjs(value).format('MM/DD/YYYY') : '');\n\n useEffect(() => {\n const formatted = value ? dayjs(value).format('MM/DD/YYYY') : '';\n if (formatted !== lastSyncedRef.current) {\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n if (value) setMonth(value);\n }\n }, [value]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const masked = maskDate(e.target.value);\n setInputValue(masked);\n const parsed = parseDate(masked);\n if (parsed) {\n lastSyncedRef.current = masked;\n onChange?.(parsed);\n } else if (masked === '') {\n lastSyncedRef.current = '';\n onChange?.(undefined);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setOpen(true);\n }\n if (\n !/[0-9/]/.test(e.key) &&\n !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'Tab'].includes(e.key) &&\n !e.metaKey &&\n !e.ctrlKey\n ) {\n e.preventDefault();\n }\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n <input\n type=\"text\"\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), 'pr-10', className)}\n value={inputValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost-icon\"\n size=\"sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2\"\n disabled={disabled}\n aria-label=\"Select date\"\n type=\"button\"\n >\n <LuCalendar />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n <Calendar\n mode=\"single\"\n selected={value}\n month={month}\n onMonthChange={setMonth}\n onSelect={(d) => {\n const formatted = d ? dayjs(d).format('MM/DD/YYYY') : '';\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n onChange?.(d);\n setOpen(false);\n }}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { LuRefreshCcw, LuZoomIn, LuZoomOut } from 'react-icons/lu';\nimport Cropper from 'react-easy-crop';\nimport { Button, Slider } from '../index';\nimport type { UseImageCropper } from './useImageCropper';\nimport { cn } from '@/lib/utils';\n\nexport type ImagePreviewProps = {\n alt: string;\n className?: string;\n containerClassName?: string;\n imagePreview?: string; // optional so we can show skeleton while awaiting URL\n cropper?: UseImageCropper; // when provided, show cropping UI\n};\n\nexport const ImagePreview = ({\n alt,\n className = '',\n containerClassName = '',\n imagePreview = undefined,\n cropper = undefined,\n}: ImagePreviewProps) => {\n const [loaded, setLoaded] = useState(false);\n const showLoader = !imagePreview || !loaded;\n const enableCrop = !!cropper;\n\n return (\n <div className={cn(`flex max-w-[386px] flex-col`, className)}>\n <div className={cn('relative h-60 rounded-md border', containerClassName)}>\n {imagePreview && enableCrop ? (\n <Cropper\n image={imagePreview}\n crop={cropper.crop}\n zoom={cropper.zoom}\n aspect={cropper.aspect}\n objectFit=\"contain\"\n onCropChange={cropper.setCrop}\n onZoomChange={cropper.setZoom}\n onCropComplete={cropper.onCropComplete}\n onMediaLoaded={() => setLoaded(true)}\n showGrid={false}\n />\n ) : (\n imagePreview && (\n <img\n alt={alt}\n className={`m-auto h-full w-full object-contain transition-opacity duration-300 ${loaded ? 'opacity-100' : 'opacity-0'}`}\n src={imagePreview}\n onLoad={() => setLoaded(true)}\n draggable={false}\n />\n )\n )}\n\n {showLoader && (\n <div\n aria-label={imagePreview ? 'Loading image' : 'Awaiting image'}\n className=\"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r\"\n />\n )}\n </div>\n\n {!showLoader && enableCrop && (\n <div className=\"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4\">\n <div className=\"flex w-full items-center gap-3\">\n <Button\n aria-label=\"zoom out\"\n onClick={() => cropper.setZoom(Math.max(cropper.zoom - 0.1, 1))}\n className=\"h-8\"\n variant=\"ghost-icon\"\n >\n <LuZoomOut />\n </Button>\n\n <Slider\n value={[cropper.zoom]}\n min={1}\n max={3}\n step={0.01}\n onValueChange={(v: number[]) => cropper.setZoom(v[0])}\n className=\"w-full sm:flex-50\"\n classNames={{ thumb: 'border-2 border-green-800', range: 'bg-green-900' }}\n />\n\n <Button\n aria-label=\"zoom in\"\n onClick={() => cropper.setZoom(Math.min(cropper.zoom + 0.1, 3))}\n variant=\"ghost-icon\"\n className=\"h-8\"\n >\n <LuZoomIn />\n </Button>\n </div>\n\n <Button onClick={cropper.reset} variant=\"ghost\" className=\"h-8 p-2\">\n <LuRefreshCcw />\n Reset\n </Button>\n </div>\n )}\n </div>\n );\n};\n","import { DateTime, Duration } from 'luxon';\nimport { useMemo } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/v2';\nimport { cn } from '@/lib/utils';\n\nexport type Interval = {\n label: string;\n value: {\n hour: string;\n min: string;\n raw: string;\n formatted: string;\n };\n};\n\ntype Props = {\n startTime?: string;\n endTime?: string;\n interval?: number;\n onChange?: (e: Interval) => void;\n className?: string;\n placeholder?: string;\n size?: 'default' | 'sm';\n portal?: boolean;\n [inputProps: string]: unknown;\n};\n\nconst START_TIME_DEFAULT = '00:00';\nconst END_TIME_DEFAULT = '24:00';\n\nconst isValidTime = (time: string) => {\n const dt = DateTime.fromFormat(time, 'HH:mm');\n return dt.isValid;\n};\n\nexport const TimeSelect = ({\n startTime = START_TIME_DEFAULT,\n endTime = END_TIME_DEFAULT,\n interval = 30,\n onChange = undefined,\n className = '',\n placeholder = 'Select one',\n size = 'default',\n portal = true,\n ...inputProps\n}: Props) => {\n if (!isValidTime(startTime)) {\n console.error(`Invalid startTime: ${startTime}`);\n // eslint-disable-next-line no-param-reassign\n startTime = START_TIME_DEFAULT;\n }\n if (!isValidTime(endTime)) {\n console.error(`Invalid endTime: ${endTime}`);\n // eslint-disable-next-line no-param-reassign\n endTime = END_TIME_DEFAULT;\n }\n\n const intervals = useMemo((): Interval[] => {\n const dtEnd = DateTime.fromFormat(endTime, 'HH:mm');\n const durationInterval = Duration.fromObject({ minutes: interval });\n const res = [];\n let i = DateTime.fromFormat(startTime, 'HH:mm');\n while (i <= dtEnd) {\n let raw = i.toFormat('HH:mm');\n // Avoid duplicate keys for \"00:00\" and \"00:00\" (end of day)\n if (raw === '00:00' && i.equals(dtEnd)) raw = '24:00';\n\n res.push({\n label: i.toFormat('h:mm a'),\n value: {\n hour: i.toFormat('HH'),\n min: i.toFormat('mm'),\n raw,\n formatted: i.toFormat('h:mm a'),\n },\n });\n i = i.plus(durationInterval);\n }\n\n return res;\n }, [startTime, endTime, interval]);\n\n const options = intervals.map((time) => ({\n label: time.label,\n value: time.value.raw,\n }));\n\n const handleOnSelect = (e: unknown) => {\n const interval = intervals.find((time) => time.value.raw === e);\n\n if (!interval) return;\n\n onChange?.(interval);\n };\n\n return (\n <Select onValueChange={handleOnSelect} {...inputProps}>\n <SelectTrigger className={cn('max-w-[240px] md:w-[150px]', className)} size={size}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {options.map((option) => (\n // Note that labels and values here may appear to be duplicates\n // For example, \"00:00\" and \"24:00\" will both have the same value \"00:00\"\n <SelectItem className=\"h-10\" key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n","import * as React from 'react';\nimport { ComponentProps, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport { Calendar, Input, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { InputProps } from '@/v2/input/input';\n\nexport type DatePickerProps = {\n className?: string;\n wrapperClassName?: string;\n value?: Date;\n onChange?: (value: Date | undefined) => void;\n disabled?: boolean;\n // NOTE: Disallow changing this to a range-picker by forcing mode to \"single\" and using value instead of selected\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n placeholder?: string;\n inputProps?: InputProps;\n showCalendarIcon?: boolean;\n};\n\nexport function DatePicker({\n className = '',\n wrapperClassName = '',\n value = undefined,\n onChange = undefined,\n disabled = false,\n calendarProps = undefined,\n placeholder = 'Pick a date',\n inputProps = undefined,\n showCalendarIcon = true,\n}: DatePickerProps & ComponentProps<typeof Calendar>) {\n const [open, setOpen] = useState<boolean>(false);\n\n const handleSelect = (val: Date | undefined) => {\n onChange?.(val);\n setOpen(false);\n };\n\n return (\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger\n className={cn(\n 'focus-visible:ring-ring/50 hover:enabled:border-dark-green focus:enabled:border-dark-green focus-visible:border-dark-green relative flex w-full items-center rounded-md transition-all outline-none focus-within:shadow focus-within:shadow-green-300 focus-visible:ring-[3px] focus:enabled:shadow-green-300',\n wrapperClassName,\n )}\n >\n <Input\n className={cn(showCalendarIcon && 'pl-10', open ? 'border-dark-green' : '', className)}\n value={value ? dayjs(value).format('MM/DD/YYYY') : ''}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n {...inputProps}\n />\n {showCalendarIcon && (\n <div\n className={cn(\n 'absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2',\n disabled ? 'text-gray-400' : 'cursor-pointer text-black',\n )}\n >\n <LuCalendar size={16} />\n </div>\n )}\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={value ? dayjs(value).toDate() : undefined}\n onSelect={handleSelect}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n );\n}\n"]}
|